字節Android開發崗首戰算法被慘虐,覆盤兩個月再戰拿下2-2

每個程序員都擁有一座大廠夢,我也不例外,以前面試字節跳動,居然被算法問倒了,不少算法都沒解出來,解出來的也還不是最優解,才二面就涼涼了。回去以後也潛心複習了,準備了二戰,現在終於進入了字節跳動,被錄用,定級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.動態規劃

  • 斐波那契數
  • 不一樣路徑
  • 爬樓梯
  • 零錢兌換
  • 打家劫舍
  • 編輯距離

因爲篇幅限制,展現了部份內容截圖,須要這些文檔資料的,能夠點贊支持一下我,而後【點擊這裏】免費閱讀下載。

但願全部的程序員都可以學習起來,努力實現咱們的大廠夢!

相關文章
相關標籤/搜索