工作2年渣本面試被虐慘,回家修煉3個月,終於擠進「位元組跳動」!

2020-10-28 12:00:36

工作2年渣本面試被虐慘,回家修煉2個月,終於擠進「位元組跳動」

還記得,今年年初因為疫情一直被困在家裡出不去,後面5月份去了一趟位元組跳動面試,結果卻被虐慘。哎,只恨當初不好好學習,讀書的時候要麼出去嗨皮,要麼就打王者,三天打魚兩天曬網,怎麼也學不進去。後面畢業了,找了份測開。工作快兩年了,現在才下定決心好好學Java,5月去面試之前,其實我差不多也是個懵逼的狀態吧,總以為自己還挺不錯的,結果卻被現實赤裸裸的打臉了,實力被吊錘(三正規化都答不出來你敢信?),真的簡直一渣渣。

 

灰溜溜的回家,一下就感覺對什麼都失去了信心,多虧了朋友們的鼓勵。下定決心,痛改前非,用了3個月時間,好好學習。基本所有常見知識點都掃了一遍,然後用思維導圖捋順複習思路常見考點深入原始碼多思考為什麼?每天早上8點起來學習到晚上11點多,然後睡覺。(當然,除去吃飯洗澡上廁所的時間)說實話,這三個月下來,感覺自己都脫胎換骨了。講真,專心學東西,學完真的很爽。雖然現在還是有很多不足,畢竟突擊學習的東西不夠穩固,但是也是告訴大家,突擊也是有可能拿offer的,不要放棄,多投多面!

對了,去了兩次位元組,趁著現在還有點記憶,回憶一下我完整的一次位元組面經(Java後臺開發崗,3面技術1面hr)

位元組面經

一面

  • 自我介紹:講了下自己的專案經歷
  • 問了下技術棧
  • HashMap 和 ConcurrentHashMap 的區別?
  • 執行緒池
  • 執行緒安全怎麼實現?
  • 資料庫的鎖
  • 資料庫的三正規化
  • 執行緒和程序的區別
  • Redis 的過期策略、快取雪崩、惰性刪除
  • MySQL索引、b+樹,為什麼不用雜湊map來儲存?
  • 最左字首原則

演演算法題目:隨機連結串列複製

給定一個連結串列,節點資料結構如下,除了包含一個next指標,還包含一個rand指標,隨機指向連結串列的某一元素,或者為空指標,實現一個函數,深複製這個連結串列,要求空間複雜度O(1)。

struct Node {  int val;  Node* next;  Node* rand;}
  • 演演算法題目:滑動視窗演演算法

給定m個不重複的字元[a,b,c,d], 以及一個長度為n的字串tbcacbdata, 問能否在這個字串中找到應該長度為m的連續子串,使得這個子串剛好由上面m個字元組成,順序無所謂,返回任意滿足條件的一個子串的起始位置,未找到返回-1。比如上面的這個例子,acbd,返回3。要求優化到O(N)。

 

二面

  • 懟專案(質疑我的快取一致性操作,然後我口嗨用訊息佇列解決並行問題)
  • 手寫單例模式-懶漢模式
  • InnoDB和MyISAM的區別
  • 索引的底層實現結構是什麼?為什麼要這麼實現?三層B+樹節點的個數如何計算?
  • JAVA的鎖、樂觀鎖悲觀鎖
  • 程式碼題:最大島問題(我想了個分治,思路不對,直接爆炸,面試官還是不錯的,給我換了道題)
  • 程式碼題:有序陣列旋轉後找最小值所在位置、給出一個有環的連結串列輸出環的長度;
  • 程式碼題:給出一個連結串列,每兩個節點旋轉一次,最後返回旋轉後的連結串列;
  • 智力題:64匹馬,8個賽道,找出前四匹馬最少需要比幾次;
  • 三次握手,最後一次握手能不能取消?
  • TCP的四次揮手
  • HTTPS
  • 分代回收在整個GC中處於什麼位置?

三面

  • 自我介紹、懟專案、Redis快取

  • synchronized鎖是什麼鎖(我就說了是系統的同步互斥鎖)原理應該是monitor(監視器)

  • 垃圾回收(然後我說了四種參照什麼時候GC)

  • 為什麼hashmap不是執行緒安全的?

  • LRU在作業系統怎麼實現?

  • HashMap擴容底層實現

  • Git 底層實現;如何解決衝突?

  • 設計題:關注系統怎麼設計? 可以關注、取關別人 可以檢視關注、粉絲列表 可以檢視關注、粉絲數 快速判斷兩個人的關係

  • 如果有大V(粉絲數很多),你的系統有沒有問題?或者說如果覺得沒問題,為什麼沒問題?(儲存上,使用上)

  • 程式設計題1:股票利潤1

  • 程式設計題2:股票利潤3(可以買賣兩次)(查了下,就是股票利潤3,hard)

(寫了半天,頭禿,之前都沒做過,想了幾個辦法都感覺不行,不斷地跟面試官交流,好在最後在面試官的引導下寫出來了) 給定一個陣列,它的第 i 個元素是一支給定的股票在第 i 天的價格。設計一個演演算法來計算你所能獲取的最大利潤。你最多可以完成 兩筆 交易。注意: 你不能同時參與多筆交易(你必須在再次購買前出售掉之前的股票)。
  • 程式設計題3:兩個單向連結串列進行加和,例如1->2->3->4,另一個是3->4,返回一個連結串列1->2->6->8;不可以遍歷轉出數位直接加。。。

HR面

都是一些比較常規性的問題,這裡就不說了。

繼續嘮嗑

開頭的時候我說過在複習的時候,把基本比較常見的知識都掃一遍(我掃的是一份30個章節分類的Java知識大全整理),然後用思維導圖捋順複習思路(我這兒有JVM、Spring、SpringBoot、效能調優、多執行緒、高並行、Redis、MySQL、kafka、RabbitMQ等),常見的考點深入原始碼(這邊原始碼我主要是演演算法的原始碼、Spring的原始碼等),然後就是刷題目了。

簡單說說...(其實這些「Java知識大全整理、思維導圖、原始碼、演演算法、還有刷題大全1000以及各大廠的面經」我這兒都有整理,如果有需要可以直接來找我免費分享,click here !

  • Java知識大全整理

這個PDF真的很全面,有JVM,JAVA集合,JAVA多執行緒並行,JAVA基礎,Spring原理,微服務,Netty與RPC,網路,紀錄檔,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,設計模式,負載均衡,資料庫,一致性雜湊,JAVA演演算法,資料結構,加密演演算法,分散式快取,Hadoop,Spark,Storm,YARN,機器學習,雲端計算等

 

  • 思維導圖(每個小分支點選都有相應的解析,上幾個看看)

 

 

 

 

  • 刷題(網際網路 Java 工程師面試1000題)

包括了Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等

 

 

  • 關於演演算法學習

應該有很多朋友想問我演演算法怎麼準備?其實我個人偏向兔系刷法,第一遍思考5分鐘做不出來的題目直接看答案,但是注意,最終每道題一定要自己完整的敲出答案來,不能邊寫邊看。二刷的時候追求速度,一天10道題左右,題目範圍就是 劍指offer 和 Leetcode100。另外一個,Leetcode上有一個位元組跳動的題目區,裡面的題目位元組確確實實很常考,建議大家熟練掌握。

而且如果你選擇看視訊學習,這裡也有技巧,很多人都有這種思維誤區,看書的時候總愛一頁一頁看,一行一行讀,看了前面忘了後面,看視訊也是一點點看,效率其實不算高;建議講廢話的地方、你已經懂的地方,倍速播放, 拿好本子記錄關鍵節點對應的時間戳,後續複習翻本子找對應的時間節點來看,效率怎麼樣,誰試誰知道。

  • 各大廠面經


不論是演演算法Leetcode、各大廠的面經、網際網路 Java 工程師面試1000題、思維導圖、Java知識大全整理還是更多的Java學習,上面截圖可以看見小編這邊都有整理,如果你不想麻煩再去找,可以直接 click here 免費下載!