千回百折:百度Java研發offer斬獲記和經驗分享


  • 起因
  • 面試過程
  • 等待offer的過程中悟道
  • Java面試常考知識點個人總結

      從去年百度全面凍結hc,停止社招之后,今年陸續又縮小了實習生的招聘規模,每個部門的hc都非常緊張,相應的,也直接造成了實習生和校招招聘的難度被放大!因為hc實在是太少了。

  好了,閑言少敘,既然是斬獲記,那么必然得說說我的面試過程和准備過程。這樣才對得起標題啊。

  這次面百度是現場的,一共三面,因為投的是java研發崗位,故第一面安排的是一個懂java的高工,先是自我介紹(ps:三面我介紹了三次……也是醉了),問我能研二還能實習多久……之后先讓手寫了個二分查找,然后順着簡歷項目問,主要就是java多線程這塊,內存模型,生產者和消費者模式,如何保證項目的線程安全的,怎么做的……hashmap和hashtable的比較,concurrentHashmap的線程安全的實現原理,手寫一個單例模式,讓寫了兩種實現方式,枚舉和非枚舉,並問了如何保證線程安全,反射攻擊,序列化等。接着又手寫一個鏈表的反轉算法(稍微修改了下才對的),看我簡歷上有我博客,還有說熟悉JVM,就讓我畫了JVM的結構,堆的結構(我畫的JAVA7的),最后還問了JVM垃圾回收算法的種類都有啥……接着問有沒有jvm調優過?我簡單說了下調優,因為調優經驗不是很豐富,最后一面結束,讓我問他問題,主要問的主要做啥,實習生培養制度,實習時間,這里強調下,今年百度研發很難進,名額很少很少,並且要求一定的實習時間,不然不要的……越長越好。面了半個多小時,緊接着馬上就是二面經理面,ps:和我一起的還有一個來面試的,貌似是北大的,一面刷掉了。

  二面大概1個小時,技術上沒再細問,主要問的項目經驗,還有目前實習的內容,工作情況,總之就是看你怎么自圓其說嘍,沒啥難度,只要是真正實習,好好做項目,回答這些應該都沒問題。最后還是例行的讓我問問題,我當時問了待遇,實習生培養機制,主要做啥,老生常談。到了這一刻,我以為就算結束了,沒想到,經理讓我等等,他去叫他老板來……三面開始了!
  三面半個多小時,竟然還是問技術,讓手寫了個快速排序,大小頂堆,m個元素數組找前n大的元素(不排序方法,最優),1-n自然數的數組,亂序排序(最優),后兩個題回答的不是很讓面試官滿意,雖然也說了思路。接着就是還問了TCP三次握手,為啥三次?還有流量控制的機制,說下滑動窗口和選擇重傳……最后因為是java崗位,很自然的問了我期待的問題:JVM垃圾回收的過程,四類java引用作用和使用場景。技術面試到這里就算結束了,最后問實習多久了,代碼量多少了,跳槽理由,對未來的規划,家是哪兒的,你和你同學比有啥優勢?你認為華三,華為這樣的通信企業和互聯網公司有什么區別?比較下兩個公司的主營業務,你認為有什么不同……最后還是例行問,你有啥想問的?我還是問了下實習待遇,培養機制,但是當時竟然忘了問是不是通過了,估計問了也白搭……

  結束后,大概用了3個多小時,老板很和藹,還怕我找不到路,親自送我到電梯離開。整個面試期間,感覺還是很不錯的,百度氛圍非常棒,裝修也不錯,看我緊張還讓我喝水……很不錯。

    

  悟道

  整個過程,唯一遺憾的是從面試完到最終確定offer到手,一共等了三周+……期間經歷了協調hc,hr休假……想想對自己也是一種磨礪和心性的鍛煉啊!

  其次這個過程還是對人心性的磨練,等過高考成績,等過考研成績,但是那都有確切出分的時間,有答案可以預測結果。而等待人為因素占不小比重的offer是最痛苦的,因為你不知道結果,你也不知道什么時候出結果,你不知道哪個面試官看你不爽了……這種等待非常熬人,在此我總結一個教訓,就是在offer下來之前,永遠不要提離職,在offer到手之前,永遠不要相信任何口頭承諾,只是不停的找新的工作,直到有offer攢底為止,就會消除這種等待的焦慮。

 

  知識總結

  應付算法,除了常見的二分查找,快速排序,鏈表判斷有環,鏈表逆序,二叉樹的三種遍歷等等考察之外,就是多做做leetcode,或者總結下《劍指offer》,應付大部分的算法題足夠了。ACMer直接可以忽略。其實算法的重點是必須熟練手寫!

  其次就是Java的基本功,主要是JavaSE的考察:

  • 了解下java虛擬機的結構,重點是堆的結構,以及各部分的功能要知道,必須掌握現代Java垃圾回收算法的種類,簡單調優,和分代算法的思想,了解四種Java引用類型是什么。看周志明的那本《深入理解Java虛擬機》就夠了,應屆生。
  • 熟悉一下LRU的緩存實現原理,重點是如何實現並發,順便梳理下操作系統的內存存儲方式,各種算法,分頁,分段,碎片啥的理解下。
  • Java面試常考,可以互相引申的就是Java集合的知識點:hashmap和concurrentHashMap原理、區別,hashTable,hashset,各種list等,看《編程思想》結合網上博客文章總結即可。
  • 熟悉下多線程設計模式,比如生產者和消費者,不變模式等。有一本日本人寫的比較老的書可以看看《Java多線程設計模式》,深入的JUC並發知識最好看下《Java並發編程實踐》,老外的書非常棒。並且結合操作系統課程可以梳理下進程,線程的各種知識點。
  • 計算機網絡,起碼的幾層協議要會,記住,理解tcp三次握手(具體報文格式),概念:流量控制,滑動窗口機制,選擇重傳等,一般應屆生也就夠用了,可以看下老外那本經典的《tcp/ip詳解》卷一,深入可以把卷二看了,雖然我沒看過。但是確實好。
  • 設計模式起碼掌握單例,工廠,觀察者等,系統的可以看下《Head First設計模式》,應付日常工作和面試足以。設計模式這也是各個框架的考察中常考的點,重點一般就是單例的各種版本的優缺點,線程安全實現,枚舉的使用,反射,序列化的攻擊應對方法。工廠的類型等。
  • 反射,序列化的概念
  • clone的一些知識點
  • 最好熟悉下類加載機制
  • 框架暫時沒有遇到考察的。熟悉原理最好,了解過,讀過源碼更好了。如果是Java大數據方向的求職,相應的就是hadoop,spark等,對應的大數據的算法也要掌握一些。
  • 暫時就那么多了。

  

歡迎關注

dashuai的博客是終身學習踐行者,大廠程序員,且專注於工作經驗、學習筆記的分享和日常吐槽,包括但不限於互聯網行業,附帶分享一些PDF電子書,資料,幫忙內推,歡迎拍磚!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM