
每個程序員都擁有一座大廠夢,我也不例外,以前面試字節跳動,居然被算法問倒了,不少算法都沒解出來,解出來的也還不是最優解,才二面就涼涼了。回去以後也潛心複習了,準備了二戰,現在終於進入了字節跳動,被錄用,定級2-2。程序員
1、首站字節被掛
對於這個獨角獸企業,LZ當時報了很大的指望,可是沒有確切的瞭解面試狀況(對本身蜜汁自信),沒有了解到字節對算法這麼看重,稍稍懈怠了下,沒想到直接掛了,字節面試流程仍是很快的,意識到不對的時候已經晚了……面試
- 給定一個整型數組,查找三個元素相加等於0的全部三元組,要求去重
- 給定一個數組,調整該數組,使其知足堆的性質(初始化建堆)
- 判斷一個鏈表是否爲迴文鏈表,說出你的思路並手寫代碼
- 你知道哪些排序算法,這些算法的時間複雜度分別是多少,解釋一下快排?
.....
想起來的就這些了,當時被問得一臉懵逼,半小時憋不出幾行代碼來,浪費了一次寶貴的面試機會。算法
我我的其實也不是特別喜歡作題,好玩的事情太多了,可是沒辦法,現狀就是這樣,Android程序員這幾年太多了,競爭愈來愈激烈,就各類手段卡你唄,說不內卷那也是不可能的。我以前也是溫水煮青蛙,出去面試了才被教各類作人!數組
你沒有好的公司項目背景,只有作題。(除非學校,學歷,項目經驗,開源項目,公司背景等有不錯的優點)數據結構
2、二戰字節
字節一面:
- Activity生命週期,每一個回調方法的做用是什麼
- 事件的分發機制
- 內存泄漏
- 遇到過滑動衝突嗎?滑動衝突的解決方法
- Hashmap原理
- Hashmap擴容機制
- 手撕雙重校驗鎖,volatile的做用
- synchronized和volatile的區別
- 線程池的參數
- 異常機制
- synchronized修飾static 方法和修飾普通方法有什麼區別
- 雙親委派模型,爲何要這樣
- sharedPreferences的原理,多進程下是否可使用,apply和commit 有什麼區別
- 算法題:每k個反轉鏈表;一個長度爲N的整形數組,數組中每一個元素的取值範圍是[0,n-1],判斷該數組否有重複的數,請說一下你的思路並手寫代碼......
字節二面
- 四大基本組件和做用
- Activity生命週期,啓動模式,taskAffinity,橫豎屏轉換,onNewIntent
- Service兩種啓動模式,有什麼區別。
- 廣播,廣播分類。普通廣播、異步廣播、有序廣播
- view的繪製流程
- Framelayout wrap_content TextView match_parent 怎麼顯示
- 約束佈局和RelativeLayout的區別
- 佈局優化
- include、viewStub、merge 的使用和區別
- mvp、 mvc、mvvm
- 如何建立一個viewModel
- Handler
- ThreadLocal
- 算法題:二叉樹查找,將這條路上的結點存儲;之字形打印二叉樹,使用輔助棧實現,實現完後問我:不使用輔助空間怎麼作。回答遞歸,而且遞歸時記錄當前層數
字節三面
1.適配器和裝飾模式各自特色和使用場景
2.視頻編解碼是怎麼作的
3.三色球排序
......mvc
四面(HR)
到這一步就是正常走流程了,就不敘述了……app

3、二戰字節前,我是如何複習的?
LZ其餘技術掌握的還算牢靠,主要是算法方面有些欠缺,複習時主攻的算法。異步
從朋友那薅到一份《2021最新版數據結構與算法⾯試題⼿冊》,硬着頭皮所有啃完了,不直接看答案,先本身思考,否則很容易忘記,實在不會的看題解,看看別人的解題方法。作完了以後總結思路和常見套路。mvvm

1.哈希佈局
- 請說⼀說,Java中的HashMap的⼯做原理是什麼?
- 介紹⼀下,什麼是Hashmap?
- 講⼀講,如何構造⼀致性哈希算法。
- 請談⼀談,hashCode() 和equals() ⽅法的重要性體如今什麼地⽅?
2.⼆叉樹
- 求⼆叉樹的最⼤深度
- 求⼆叉樹的最⼩深度
- 求⼆叉樹中節點的個數
- 求⼆叉樹中葉⼦節點的個數
- 求⼆叉樹中第k層節點的個數
- 判斷⼆叉樹是不是平衡⼆叉樹
- 判斷⼆叉樹是不是徹底⼆叉樹
- 兩個⼆叉樹是否徹底相同
- 翻轉⼆叉樹or鏡像⼆叉樹
- 兩個⼆叉樹是否互爲鏡像
- 求兩個⼆叉樹的最低公共祖先節點
3.鏈表
- 談⼀談,bucket若是⽤鏈表存儲,它的缺點是什麼?
- 有⼀個鏈表,奇數位升序偶數位降序,如何將鏈表變成升序?
- 如何反轉單鏈表
- 如今有⼀個單向鏈表,談⼀談,如何判斷鏈表中是否出現了環
- 隨機鏈表的複製

4.數組
- 寫⼀個算法,能夠將⼀個⼆維數組順時針旋轉90度。
- ⼀個數組,除⼀個元素外其它都是兩兩相等,求那個元素?
- 找出數組中和爲S的⼀對組合,找出⼀組就⾏
- 求⼀個數組中連續⼦向量的最⼤和
- 尋找⼀數組中前K個最⼤的數
5.排序
- ⽤Java寫⼀個冒泡排序?
- 介紹⼀下,排序都有哪⼏種⽅法?請列舉出來
- 介紹⼀下,歸併排序的原理是什麼?
- 介紹⼀下,堆排序的原理是什麼?
- 談⼀談,如何獲得⼀個數據流中的中位數
- 你知道哪些排序算法,這些算法的時間複雜度分別是多少,解釋⼀下快排?
6.堆與棧
- 請你解釋⼀下,內存中的棧(stack)、堆(heap) 和靜態區(static area) 的⽤法。
- 說⼀說,heap和stack有什麼區別。
- 最⼩的k個數
- 滑動窗⼝最⼤值
- 醜數前
- 前K個⾼頻元素
- 有效的括號
- 最⼩棧
- 柱狀圖中最⼤的矩形

7.⾼級算法
- 請你講講LRU算法的實現原理?
- 爲何要設計 後綴表達式,有什麼好處?
- 請你設計⼀個算法,⽤來壓縮⼀段URL?
- 談⼀談,id全局惟⼀且⾃增,如何實現?
- 最後⼀個單詞的⻓度
8.動態規劃
- 斐波那契數
- 不一樣路徑
- 爬樓梯
- 零錢兌換
- 打家劫舍
- 編輯距離

因爲篇幅限制,展現了部份內容截圖,須要這些文檔資料的,能夠點贊支持一下我,而後【點擊這裏】免費閱讀下載。
但願全部的程序員都可以學習起來,努力實現咱們的大廠夢!