【金三銀四跳槽季】Java工程師如何在1個月內作好面試準備?【石杉的架構筆記】

歡迎關注我的公衆號:石杉的架構筆記(ID:shishan100)程序員

週一至週五早8點半!精品技術文章準時送上!面試

精品學習資料獲取通道,參見文末redis

目錄算法

1、寫在前面spring

2、技術廣度的快速準備數據庫

3、技術深度的快速準備緩存

4、基礎功底的快速準備性能優化

5、下篇預告網絡

1、寫在前面

春節長假轉眼已過,即將迎來的是一年一度的金三銀四跳槽季。數據結構

假如你準備在金三銀四跳槽的話,那麼做爲一個Java工程師,應該如何利用1個月的時間,快速的爲即將到來的面試進行充分的準備呢?

以前寫過兩篇文章:

互聯網公司的面試官是如何360°無死角考察候選人的?(上篇) 互聯網公司面試官是如何360°無死角考察候選人的?(下篇) 這兩篇文章,專門站在面試官的角度,給你們分析了平時互聯網公司是如何全方位的考察一個候選人的。

總結起來,面試官考察候選人的時候主要是從技術廣度、技術深度、基礎功底、系統設計、項目經驗幾個角度來進行的。

那麼本文我們就針對每一塊內容,具體的來講一下考察的一些點。更重要的,是針對考察的這些點,如何來快速的進行準備。

技術廣度

技術廣度,顧名思義,你做爲一個合格的工程師在開發一個系統,完成一些具體的技術任務的時候,必然是要使用到不少的技術的,並且針對這些技術還須要掌握一些很是常見,各類不一樣的系統可能都會涉及到的一些技術架構/技術方案。

舉個例子,一個互聯網公司的比較重要的系統,首先確定會用到分佈式服務框架,好比dubbo/spring cloud,這樣能夠將系統拆分爲分佈式的架構,或者說如今很流行的說法是微服務架構,這樣每一個人負責一個服務或者是一個子系統。

接着這個系統極可能爲了支撐一些特殊的技術場景會用到其餘各類技術。

常見的好比說爲了應對高併發的讀會用到Redis緩存技術,爲了作系統異步調用會用到RocketMQ技術,爲了支撐大數據量的高性能檢索會用到Elasticsearch技術,等等。

那麼假如這個互聯網公司在招聘Java工程師的時候,他的招聘要求是什麼?

是否是必須得要求候選人起碼在dubbo、Redis、RocketMQ、Elasticsearch等多個技術領域,都有實際的生產項目使用經驗,並且還對這些技術的各類特性以及落地項目的時候常見的技術架構/方案都比較熟悉,這樣招聘這我的進來以後才能上手立馬乾活。

要求一個候選人對各類常見的技術以及相關架構都有實際的項目經驗以及對技術自己也足夠熟悉,這就是所謂的技術廣度,站在招聘候選人的角度來分析一下,想必你們就理解這個「技術廣度」考察項了。

實際上技術廣度這個東西,都說了是技術廣度了,因此確定不只僅只是上面提到的那點東西。

實際上,一個合格的適合互聯網公司的工程師在技術廣度上,還須要掌握其餘不少東西。

好比分佈式事務、微服務架構、分佈式鎖、性能優化、Java虛擬機優化、Web Server優化、數據庫優化,等等。

越是大型的互聯網公司,就越是會針對技術廣度這塊,考察的可能會越普遍,要求更高一些。

2、技術廣度的快速準備

那麼既然已經瞭解了這個技術廣度是什麼以後,如今針對這個技術廣度,在短期內應該如何來快速的複習和準備呢?

這個問題,咱們分紅兩種狀況來講。

假如說你是一個平時就很勤奮很努力,過去幾年一直在不停的學習的人,那麼恭喜你了,這塊東西百分百難不住你,由於你過去幾年持續的學習,可能已經本身把技術廣度的每一個點的一些東西都研究過,並且或多或少都有一些使用的經驗。

對於你學習過或者實踐過的東西,你確定都記錄了一些筆記。你最好的準備方式,就是快速的回顧本身的筆記,把各類常見技術的核心原理和項目實踐都經過筆記回顧的方式快速的回憶起來,在大腦裏造成一個知識網絡。

若是你是一個不那麼勤奮的工程師,或者是一個工做才兩三年,涉世未深的小年輕,還那麼多的積累,此時怎麼辦呢?

那也不要緊,記住一句老話:臨陣磨槍,不快也光。你雖然沒啥積累,可是你都要面試了,怎麼着也得臨陣突擊一下吧。

下面就是要教你的方法了:你能夠本身把技術廣度可能涉及到的各類點都羅列出來,而後上網百度一下各個技術點常見的一些面試問題,或者是基本的一些核心原理。

經過百度各個技術點,而後從各類技術博客中快速瞭解一個技術的方式,短期內能夠迅速創建起來對技術廣度中涉及到的各個點的一些基本認知、核心原理,這樣在面試的時候避免一問三不知。

固然,你們也清楚,技術這東西是無法速成的,你採用第二種方法來突擊,跟你第一種狀況下有幾年的積累厚積薄發,最後落地到面試的時候,表現是大相徑庭的,也會直接決定不一樣的人會進入不一樣層次的公司。

第二種狀況的同窗可能面試的時候問到一個問題,就只能說個一兩分鐘,可是第一種狀況的同窗,功夫都在平時,只要複習到位,面試的時候問到一個問題每每能夠觸類旁通,一會兒給你說個十多分鐘均可以。這就是區別所在。

不過,就算你只說一兩分鐘,總比一問三不知,和麪試官大眼瞪小眼好,對吧?

最後仍是給各位強調一下,成功無捷徑,做爲一個優秀的技術工程師,最重要的事情是一年365天,天天都不停的學習積累,堅持不少年。

吃得苦中苦,方爲人上人,筆者早年進行技術積累的時候,也是這樣過來的。天天晚上學習到凌晨一兩點,週六週日全天學習,堅持了不少年。

只有經過幾年的積累,你纔可以厚積薄發,量變產生質變,菜鳥變成大牛。

技術深度

技術深度是指的什麼呢?簡單來講,假如你有了上面第一條說的技術廣度,這不能說明你有多優秀,僅僅只能說知足了面試的最基本的要求,招聘進來事後立馬就能夠上手幹活了,沒太大的培養成本。

決定你將來技術的高度有多高,還有你可否成爲團隊裏頂樑柱的,是你的技術深度。

技術深度,顧名思義,就是說你對一個技術掌握的深度,舉個最簡單的例子。假如大家公司的一個系統裏用到了kafka這個技術,好那麼如今問題來了,線上生產環境中,每當高峯到來的時候,不知道爲啥寫kafka總會偶爾拋個異常出來,或者是說寫入到kafka中的數據不知道爲啥天天統計下來總會少一些。

線上生產環境遇到這種稀奇古怪的問題的時候,每每就是團隊裏技術大牛出場的時候。技術大牛,必定是對各類技術都有必定深度研究的人,可否在遇到技術問題的時候,直接從本質和底層出發,分析和定位問題,最後帶領團隊解決問題。

好比上面說的那些問題,那要解決的話,首先須要一個技術大牛對kafka的源碼有過必定深度的研究,接着就是在遇到問題的時候根據當時的故障現場以及一些日誌,結合源碼的運行流程,來一步一步分析和定位出來問題所在,最後可能就是經過一些kafka的參數的調整,就能夠解決上述棘手的生產問題。

上述描述的場景和能力,就是技術深度的體現,好比說你對某個技術有過完整的、全方位的、深刻底層的源碼研究,這就已是常人不可及的技術深度了。

由於不少人說是看過源碼,可是其實都是淺淺的看過一點點,理解不太深刻。

同時若是還有一些對某個技術在線上生產環境遇到過一些棘手問題,經過源碼分析來解決問題的經驗的,那麼就是更優秀的技術深度的體現。

技術深度的體現,不必定是說看過源碼,這只是其中一種表現形式而已,其餘的還有,好比說對某個特別有難度的技術場景,好比說公司雙11每秒幾十萬QPS併發請求下,你負責了其中支付系統,成功應對超高併發量。

在這個過程當中,你對系統架構的設計,對系統作的大量的併發優化、性能優化,均可以成爲你在某個技術領域的技術深度的體現。

3、技術深度的快速準備

如何爲了即將到來的面試快速的作技術深度的準備呢?

其實也很簡單,分爲兩種狀況來討論。

若是你在過去幾年,本身就深刻閱讀過大量開源技術的源碼,在閱讀源碼的過程當中,本身還把源碼的架構圖、流程圖,手工畫了大量的圖出來。

那麼此時你徹底就能夠把過去幾年的源碼研究筆記翻出來,快速過一下,練習如何在面試現場在白板上純手工把各類技術的源碼架構圖和流程圖現場畫出來。

或者在過去幾年,你對某個技術領域,針對很高的技術難度作過什麼複雜的系統,在那個技術領域紮下了很深的研究的話,那麼此時你也能夠針對過去的筆記快速的複習,在面試現場必定要現場畫圖把你作過的複雜系統以及技術難度都說清楚。

可是若是你過去幾年沒上述所說的任何積累,那咋辦呢?

仍是那句話:臨陣磨槍,不快也光。

通常面試官在考察技術深度的時候,極可能會問你:你對哪一個技術比較熟悉一些?

遇到這個問題的時候,但願你們頭腦清醒一些,千萬不要腦子發熱隨便亂說,由於你要作好一個心理準備,一旦你說出某個技術出來,好比你說你平時用dubbo用的比較多,接着面試官可能會開啓深刻源碼級別的10連擊模式。

好比說,面試官立馬就會開始問你對你熟悉的某個技術,各類底層的機制和原理,讓你說源碼的理解,給你出各類技術挑戰之下這個技術該如何應對,等等諸如此類的問題。

我見過太多沒經驗的同窗隨便說個熟悉的技術,其實他就僅僅只是會用罷了,可是一旦當我深刻提問的時候,基本就進入一問十不知的狀況了。

若是發生上述狀況,會讓面試官對你的印象和態度極其很差,你們必定切記切記!

因此,假如你要是確實沒有過對什麼技術的深刻的積累,這裏也教你一個臨陣磨槍的辦法:

你能夠從簡歷中挑選出某個你相對來講用的比較多,熟悉一點點的技術,而後直接用萬能的百度,搜索「XX技術源碼分析」,「XX技術底層原理」。

經過幾天的時間快速的 「 死記硬背 + 軟磨硬泡 」,力爭對某個技術相對有一些稍微底層一些的理解。

這樣作,起碼在面試的時候被要求問到一些技術深度的時候,能相對給出一些比普通工程師的回答更好一些的分析,起碼能在面試的時候,讓你拿到好點的offer機率會相對更大一些。

仍是那句話,作,總比不作好。你能對底層作了準備,有一些瞭解,老是要賽過那些浮於表面,只會使用API的工程師吧!

一樣筆者這裏要說,迴歸技術的本質,對於技術深度的積累,那更是沒有任何捷徑可言,更不是幾個月能夠完成突擊的。

由於真要有技術深度的話,你可能須要花費至少2年的時間,從底層開始研究一些基礎性的技術。

在打通你的底層技術任督二脈以後,再去對常見的開源技術進行深刻的源碼研究,好比說:dubbo、zookeeper、spring cloud、redis、rocketmq、elasticsearch,等等。

有了幾年的積累事後,最後你在面試的時候,技術深度的體現,其實都是厚積薄發的。

基礎功底

這塊其實沒啥可多說的了,你們估計如今慢慢都感受到了,社招的有經驗的工程師去面試互聯網大廠的時候,不少時候但是都要考察數據結構和算法的。

4、基礎功底的快速準備

這塊如何快速準備呢?

個人建議是,若是真的還有1個月要去面試了,那你最起碼用幾天的時間,網上搜三五十個最多見、最典型的算法題,反覆練習、務必熟練。

熟練到什麼程度呢?

你須要反覆練習,最後本身可以在白紙上一遍就手寫出沒有bug的代碼。

哪些題目是最多見、最典型的?舉個例子,經典排序算法以及其時空複雜度分析,經典查找算法,棧、隊列、鏈表、二叉樹等常見數據結構的算法題,這些相關的基礎題目都要熟練掌握。

固然最好的對於基礎的算法之類的東西的積累,仍是在平時,好比你要是堅持天天就在leetcode或者lintcode上花費半小時刷一個算法題,堅持一年,你就刷了至少300道算法題,堅持兩年,你就積累了七八百道算法題。

這個時候有了足夠的積累,起碼面試是不用擔憂任何基礎性手寫算法之類的問題了,功夫其實仍是在平時的。

至於算法題目的難度選擇,只須要LeetCode或者Lintcode上easy難度和medium難度便可。

社招對算法和數據結構的要求是低於校招的,校招是由於學生沒有太多項目經驗,只能考察你數據結構算法,看你聰不聰明。

這是一張lintcode上對應的數據結構算法題的難度 vs 求職的一個對照圖,你們能夠參考下。

仍是那句話,搞定easy和medium難度的題目便可。曾經網上流傳着一句話:若是你能手寫全部easy和medium的題目,3遍以內經過,能夠搞定硅谷大部分公司的技術面試,包括谷歌、Facebook等頂級公司的面試,這個在國內也差很少的狀況。

下篇預告

這篇文章從技術廣度、技術深度、基礎功底,三大塊出發,給你們講了講每一塊會如何考察,以及你們從長期積累和短時間突擊兩個方面來看分別應該如何準備。

不過,其實我我的一貫是秉持着技術是長期積累的事兒,不是短時間突擊的事兒的態度。

可是若是你真的就是沒長期積累,又要去面試,但願你們好好看下這篇文章,對你會被考察的能力有個思想準備。

同時就算是臨陣磨槍,怎麼磨,這裏面也是有很多學問。我做爲一個面試官的角度,最反感的就是很差好準備就瞎面試的人,本身美化炮製一份簡歷,拿到不少面試機會。可是過去直接裸面,最後一問三不知,浪費你們的時間。

接下來會再寫一篇文章,來給你們聊一聊系統設計以及項目經驗這兩塊該如何優雅的準備。這一樣是Java面試,尤爲是進階崗位的面試裏很是重要的部分,敬請期待。

(圖源網絡,侵權刪除)

END

掃描下方二維碼,備註:「資料」,獲取更多「祕製」 精品學習資料

若有收穫,請幫忙轉發,您的鼓勵是做者最大的動力,謝謝!

一大波微服務、分佈式、高併發、高可用的原創系列文章正在路上

歡迎掃描下方二維碼,持續關注:

石杉的架構筆記(id:shishan100)

十餘年BAT架構經驗傾囊相授

推薦閱讀:

一、拜託!面試請不要再問我Spring Cloud底層原理

二、【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?

三、【性能優化之道】每秒上萬併發下的Spring Cloud參數優化實戰

四、微服務架構如何保障雙11狂歡下的99.99%高可用

五、兄弟,用大白話告訴你小白都能聽懂的Hadoop架構原理

六、大規模集羣下Hadoop NameNode如何承載每秒上千次的高併發訪問

七、【性能優化的祕密】Hadoop如何將TB級大文件的上傳性能優化上百倍

八、拜託,面試請不要再問我TCC分佈式事務的實現原理!

九、【坑爹呀!】最終一致性分佈式事務如何保障實際生產中99.99%高可用?

十、拜託,面試請不要再問我Redis分佈式鎖的實現原理!

十一、【眼前一亮!】看Hadoop底層算法如何優雅的將大規模集羣性能提高10倍以上?

十二、億級流量系統架構之如何支撐百億級數據的存儲與計算

1三、億級流量系統架構之如何設計高容錯分佈式計算系統

1四、億級流量系統架構之如何設計承載百億流量的高性能架構

1五、億級流量系統架構之如何設計每秒十萬查詢的高併發架構

1六、億級流量系統架構之如何設計全鏈路99.99%高可用架構

1七、七張圖完全講清楚ZooKeeper分佈式鎖的實現原理

1八、大白話聊聊Java併發面試問題之volatile究竟是什麼?

1九、大白話聊聊Java併發面試問題之Java 8如何優化CAS性能?

20、大白話聊聊Java併發面試問題之談談你對AQS的理解?

2一、大白話聊聊Java併發面試問題之公平鎖與非公平鎖是啥?

2二、大白話聊聊Java併發面試問題之微服務註冊中心的讀寫鎖優化

2三、互聯網公司的面試官是如何360°無死角考察候選人的?(上篇)

2四、互聯網公司面試官是如何360°無死角考察候選人的?(下篇)

2五、Java進階面試系列之一:哥們,大家的系統架構中爲何要引入消息中間件?

2六、【Java進階面試系列之二】:哥們,那你說說系統架構引入消息中間件有什麼缺點?

2七、【行走的Offer收割機】記一位朋友斬獲BAT技術專家Offer的面試經歷

2八、【Java進階面試系列之三】哥們,消息中間件在大家項目裏是如何落地的?

2九、【Java進階面試系列之四】扎心!線上服務宕機時,如何保證數據100%不丟失?

30、一次JVM FullGC的背後,竟隱藏着驚心動魄的線上生產事故!

3一、【高併發優化實踐】10倍請求壓力來襲,你的系統會被擊垮嗎?

3二、【Java進階面試系列之五】消息中間件集羣崩潰,如何保證百萬生產數據不丟失?

3三、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(上)?

3四、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(中)?

3五、億級流量系統架構之如何在上萬併發場景下設計可擴展架構(下)?

3六、億級流量架構第二彈:你的系統真的無懈可擊嗎?

3七、億級流量系統架構之如何保證百億流量下的數據一致性(上)

3八、億級流量系統架構之如何保證百億流量下的數據一致性(中)?

3九、億級流量系統架構之如何保證百億流量下的數據一致性(下)?

40、互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失(1)

4一、互聯網面試必殺:如何保證消息中間件全鏈路數據100%不丟失(2

4二、面試大殺器:消息中間件如何實現消費吞吐量的百倍優化?

4三、高併發場景下,如何保證生產者投遞到消息中間件的消息不丟失?

4四、兄弟,用大白話給你講小白都能看懂的分佈式系統容錯架構

4五、從團隊自研的百萬併發中間件系統的內核設計看Java併發性能優化

4六、【非廣告,純乾貨】英語差的程序員如何才能無障礙閱讀官方文檔?

4七、若是20萬用戶同時訪問一個熱點緩存,如何優化你的緩存架構?

4八、【非廣告,純乾貨】中小公司的Java工程師應該如何逆襲衝進BAT?

4九、拜託,面試請不要再問我分佈式搜索引擎的架構原理!

做者:石杉的架構筆記 連接:juejin.im/post/5c263a… 來源:掘金 著做權歸做者全部,轉載請聯繫做者得到受權!

相關文章
相關標籤/搜索