前言 LZ 15年本科畢業,不知不覺3年過去了,去年底裸辭回到成都來發展,年後開始找工作,面試了幾家公司,現在整理整理做個總結,也方便規划下一個3到5年以及和廣大想要進階的Java程式員同胞們共勉。 首先談談裸辭的感受吧:走之前部門很多同事都神秘兮兮的過來問我“小伙子下一家在哪呀?”,LZ很直白:“ ...
前言
LZ 15年本科畢業,不知不覺3年過去了,去年底裸辭回到成都來發展,年後開始找工作,面試了幾家公司,現在整理整理做個總結,也方便規划下一個3到5年以及和廣大想要進階的Java程式員同胞們共勉。
首先談談裸辭的感受吧:走之前部門很多同事都神秘兮兮的過來問我“小伙子下一家在哪呀?”,LZ很直白:“回家種田喲”,當然錶面笑嘻嘻,其實內心心理壓力還是有的,而且也在後面的求職過程中印證了這一點:“裸辭是多麼痛的領悟”。
失敗的面試
1)京東成都:在智聯招聘上投了簡歷,半個小時不到HR就給我打電話約面試(不得不說京東這個效率還是很厲害,當然物流效率也很厲害)。
面試是兩個面試官,一個看起來35歲左右(應該是技術骨幹)另一個年輕一點,當然基本所有面試的開場都是自我介紹,然後“骨幹”開口了,“你是來面試的高級噶?”,LZ表示沒有概念(智聯的JD也只是說Java開發)但是沒辦法也只好隨聲附和了一下。
“骨幹”:“我看簡歷上寫了你們項目也用到了微服務架構,那你說說Dubbo數據傳輸時你們是用的什麼壓縮演算法?”,啊,,LZ有點懵,趕緊解釋說我們是用的公司內部自己研發的一個服務治理框架。。
“那你們數據壓縮怎麼處理的?” --“骨幹”毫不放棄希望
LZ:“我們的服務治理框架只做了服務註冊,發現和治理,服務間的通信協議是用的HTTP,數據報文沒做壓縮。。” --Dubbo的數據壓縮我真的不知道唉,第一個問題就被問倒。。
“年輕面試官”:“你們註冊中心怎麼實現的?”,
LZ:“也是用的ZooKeeper,原理和機制都類似Dubbo,只不過功能上要簡陋很多。。”
“年輕面試官”:“那你們怎麼保證單點的問題?”
LZ:“集群” --是不是答錯了。。
各自沉默1分鐘後“骨幹”接著問:“問題基礎點的吧,JDK1.8中 HashMap有哪些新特性?什麼情況下HashMap會產生死鎖?”
LZ:“額,不知道”
“骨幹”還是不放棄:“那如果Hash表上的拉鏈太長,你怎麼優化?”
LZ:“調小載入因數,或者優化hash演算法吧。。”
“骨幹”:“如果就是因為某些原因導致某個拉鏈太長怎麼辦?” --絕望,平時工作中都只用到1.6 1.7也很少關註這類信息,再次被問倒
後面還問了很多問題,兩個人輪流問。。像ConcurrentHashMap原理,Netty和Mina,ThreadLocal,垃圾回收器,JVM調優,多線程,怎樣設計一個高併發系統,分散式鎖,Redis集群的hash一致性演算法,Linux命令,Spring IOC,AOP原理和機制,MQ,JS緩存問題等等。
總結:京東的面試還是很考驗基礎功底和知識面以及深入理解的程度,可惜LZ目前還是太菜,結果也就可想而知了。雖然失敗的滋味很不好受,但是這何嘗不是一種美妙的經歷呢,把失敗帶來的沮喪轉化成進取的動力,促進自己以後的學習和進步。
2)美團點評:在Boss直聘上投的簡歷,面試時間也是上午10點,面試開始,面試官問了幾個Java基礎問題,然後。。
“說一下HashMap在1.8中有哪些改進?” --唉,怎麼都愛問這個呢,有了前面的教訓,LZ當然是很慶幸的,現在想想面試官其實想考驗的只是你平時對新知識新技術的關註程度和自我更新自我學習的能力(以後的工作中要註意這些,保持對新技術新知識的渴望)。
接下來是資料庫基礎,MySQL索引的實現方式,存儲引擎,優化經驗,, --這部分沒答好
傳統關係資料庫的ACID,事務隔離級別,資料庫死鎖,死鎖產生的4個必要條件,怎麼避免死鎖
JVM記憶體模型,volatile關鍵字,指令重排序,調優,垃圾收集演算法,常用設計模式等等
然後:手寫單例,單鏈表倒數第K元素,青蛙跳臺階。。 --單鏈表的問題忘了做邊界檢查,青蛙的問題由於沒時間了,問我思路,當時緊張也沒想出來,就說是用排列組合或者遞歸。。
總結:應對女面試官的方法就是好好複習書上的知識點,LZ雖然前段時間也把《Java編程思想》拿來出來再啃了一遍,不過還是沒能背不出來死鎖的必要條件,只是記得A占了B的鎖,B占了A的鎖,然後相互請求等待。。。美團應該是有一套面試題庫,將近90分鐘面試過程問了很多概念性的問題,框架,項目經歷等等已經沒時間問了,感覺這次的面試比較適合應屆的畢業生,對概念性知識有很牢靠的記憶(當然這樣說有點為自己開脫的嫌疑,總歸還是自己基礎不牢靠,面試沒準備好)。
3)螞蟻金服:其實收到阿裡的電話面試還是很意外,因為LZ認為以目前的渣渣水平肯定是沒機會的,不過好在面試官是個態度很和藹攻城獅,面試問的一些問題也不算很偏,但是LZ也只是把問題回答了出來,沒有表現出亮點來,stop the world,分散式事務,冪等性這一塊答的也不是很好,所以P6P7什麼的就還是不要想了吧。
還有其他幾家通過的面試經歷LZ這裡就不再講了,前面提到裸辭的感受,特別是在經歷過幾次失敗的面試後這種無形的壓力、惆悵和不知所措才更加讓人刻骨銘心,當然所有好的不好的都是一種經歷,也更加有利於以後對自己的鞭策,現目前在一家創業型的互聯網公司,從做項目轉換到做產品,對軟體開發有了新的體會,不管怎樣總算是定了下來,也可以抽時間好好想想以後的規劃和自己的成長道路。
下一個3-5年
首先回顧前一個3年,LZ一直在做電信核心系統的開發,雖然隨著時間的推移,對整個系統架構,框架技術,業務知識有了更深入的瞭解,但是放眼整個互聯網行業來講自己的知識面和技術局限性就顯露無疑了,通過最近的面試也得到很多體會,高併發,分散式,微服務等等,特別是Paas層的框架,有太多太多可以學的東西了,前面三年左右搖擺不定,沒想清楚自己是要往業務線走下去還是深入技術擴大知識面,現在想想所有的技術都是為業務服務的,業務可能會有五花八門,但是技術的方向卻是很明確的。以前看過京東成都研究院一個大拿寫的一篇文章《逃離局部最優點》https://www.cnblogs.com/mindwind/p/7886278.html,裡面寫的很好,如果你感覺到在一家公司的上升空間(不管是職級還是技術方面)已經被擠壓到自己不能忍受的地步的時候,那麼你就應該好好考慮作為一個局部最優解的下一步的發展道路了。
下一個3-5年,希望夯實基礎,研究技術專題,研究框架,立足PaaS層向著中間件的方向發展。
構建自己的技術棧
回顧這幾次的面試經歷,作為一名Java程式員,基礎知識是重中之重,不管各種PaaS框架遍地生花,基礎就是基礎,再怎麼強調也都不過分,《Java編程思想》是本很好的書,有空就應該拿出來翻一翻,書上的例題都應該親自敲一敲,接下來是IO/Socket原理,多線程,RMI,reflect,JDK當中的API,JVM等的專題,再就是框架和設計模式:Spring全家桶,ORM,Redis,AOP,Dubbo,FastDFS,JMS等等。
這裡再盜一張大拿的圖: