1. 程式人生 > >網際網路公司的面試官是如何360°無死角考察候選人的?(上篇)【石杉的架構筆記】

網際網路公司的面試官是如何360°無死角考察候選人的?(上篇)【石杉的架構筆記】

歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100)

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

一、寫在前面

最近收到不少讀者反饋,說自己在應聘一些中大型網際網路公司的Java工程師崗位時遇到了不少困惑。

這些同學說自己其實也做了精心準備,網上搜集了不少Java面試題,然而實際去網際網路公司面試才發現,人家問的,和你準備的東西,對不上號,這就很尷尬了。。。

因此,從這篇文章開始,筆者準備寫一個長期連載的系列:《Java進階面試系列》。主要跟大家聊聊中大型網際網路公司Java面試中的一些熱門、高頻的技術問題。

希望這個系列的文章,能在年後金三銀四的跳槽季中,助各位小夥伴一臂之力。


二、先來體驗一個真實的面試連環炮

好,閒話不多說,我們進入正題!

本系列文章,我們將會從訊息中介軟體、分散式快取、分散式搜尋、分散式架構、海量資料、NoSQL、高併發、高可用、高效能、資料庫、JVM虛擬機器等各個方面來聊一下面試中的高頻技術問題。

現在一些中大型網際網路公司的面試官,很多都是技術水平非常不錯的兄弟。在面試候選人的時候,一般都會採取連環炮的策略來深挖一個候選人的技術水平。


舉個例子,比如說看你簡歷上寫了熟悉訊息中介軟體(MQ技術)。那麼可能我們就會有一個類似下面這樣的連環炮式發問:

  • 說說你們公司線上生產環境用的是什麼訊息中介軟體?


  • 那你們線上系統是有哪些技術挑戰,為什麼必須要在系統裡引入訊息中介軟體?
  • 你們的訊息中介軟體技術選型為什麼是RabbitMQ?為什麼不用RocketMQ或者是Kafka?技術選型的依據是什麼?


  • 你們怎麼保證訊息中介軟體的高可用性?避免訊息中介軟體故障後引發系統整體故障?


  • 使用訊息中介軟體技術的時候,你們怎麼保證投遞出去的訊息一定不會丟失?


  • 你們怎麼保證投遞出去的訊息只有一條且僅僅一條,不會出現重複的資料?如果消費了重複的訊息怎麼保證資料的準確性?


  • 你們線上業務用訊息中介軟體的時候,是否需要保證訊息的順序性?如果不需要保證訊息順序是為什麼?假如我有一個場景要保證訊息的順序,你們應該如何保證?


  • 下游消費系統如果宕機了,導致幾百萬條訊息在訊息中介軟體裡積壓了,此時該怎麼處理?你們線上是否遇到過訊息積壓的生產故障?如果沒遇到過,你考慮一下如何應對?


  • 你們用的是RabbitMQ?那你說說RabbitMQ的底層架構原理,邏輯架構、物理架構以及資料持久化機制?叢集部署架構?你們RabbitMQ的最高峰QPS每秒是多少?線上如何部署的,部署了多少臺機器,機器的配置如何?


  • 你們用的是Kafka?那你說說Kafka的底層架構原理,磁碟上資料如何儲存的,整體分散式架構是如何實現的,如何保證資料的高容錯性,零拷貝等技術是如何運用的,高吞吐量下如何優化生產者和消費者的效能?那你看過Kafka的原始碼沒有,說說你對Kafka原始碼的理解?


  • 你們用的是RocketMQ?RocketMQ很大的一個特點是對分散式事務的支援,你說說他在分散式事務支援這塊機制的底層原理?RocketMQ的原始碼看過麼,聊聊你對RocketMQ原始碼的理解?


  • 如果讓你來動手實現一個分散式訊息中介軟體,整體架構你會如何設計實現?


上面僅僅是MQ相關技術問題的一部分,實際上,一個比較好的面試官的問題,就是從技術面、技術點、專案實踐幾塊來抽絲剝繭的發問。


三、技術廣度的考察

首先考察候選人整體技術面的完整性,各種技術或多或少都需要一些,因為工作中是需要具備一定的技術視野的,不能說光知道訊息中介軟體,但是分散式快取卻一無所知,這就是典型的技術短板。

類似於以前高考的時候,你語文特別好,結果物理特別差,那也是不太合適的。

所以工程師首先要避免自己的技術短板,尤其是三到五年經驗的同學,已經徹底度過了自己人生的職場生涯的初期小白入門菜鳥階段。

所以,務必在工作三到五年的時候,保證自己的技術絕對沒有任何短板,整體技術棧要或多或少都知道一些,不能出現盲區。

比如,我現在問你,你們公司有沒有什麼業務場景是可以用NoSQL的?現在國內各個公司用NoSQL的技術都有哪些選型?具體NoSQL可以解決什麼問題?

結果你一問三不知,這就是典型的技術短板,不說對每個技術有多麼的精通,但是你至少或多或少都知道一些,而且大概明白每個技術一般在什麼情況下用,怎麼來用,解決的是什麼問題。

因此上面說的:訊息中介軟體、分散式快取、海量資料、分散式搜尋、NoSQL、分散式架構、高併發、高可用、高效能,這些技術,並不是說真的要求工作幾年的同學每個技術都精通到原始碼層面,而是說你工作幾年以後,應該有一定的技術廣度,開闊的技術視野。

各種技術你都得適當的瞭解一些,同時儘可能有機會的話在自己負責的專案裡多實踐各種技術,多體會各種技術如何組成出一套架構來解決公司的技術難題的,儘量多對各種技術都一定的實踐經驗。


四、底層技術的考察

現在一般很多網際網路大廠都會有基本功的考察,舉個例子,Java虛擬機器的核心原理、記憶體模型、垃圾回收、線上FullGC卡頓效能優化、線上OOM記憶體溢位問題你處理;Java併發中的volatile、鎖優化、AQS原始碼;Netty背後的IO、網路相關的知識。


這些其實本質也可以歸類到技術面的考察裡,但是實際上這些技術都是開發任何系統都可能需要用到的核心底層技術,JVM、併發、NIO、網路通訊,在很多系統而言都是通用的。因此特意單獨拎出來,放在這裡,作為一塊東西來講。

其實這種底層技術也是線上高負載大型系統的架構設計和開發,必須要具備的,因為底層技術不紮實,很多中介軟體技術或者其他高階的技術,都是無法深入理解其中原理和底層的。而且很多時候,如果要解決線上系統的生產故障,都需要這些技術。

因此這些底層技術,看似不在那些高大上的技術範圍裡,沒有炫酷的技術名詞,但是JVM、Java併發、NIO、網路通訊,這些東西都是一個工程師必須具備底層技術素養。

五、技術深度的考察

其次,我們一定會深入考察候選人平時工作中熟悉的以及常用的一些技術。

舉個例子,比如你專案裡用了Redis或者是Elasticsearch。只要你用過了,而且是你某個專案裡的核心技術,那麼一定會用連環炮式的發問,深入各種細節、底層、生產環境可能遇到的技術挑戰。

總之,就是要用壓力測試出來你在這塊技術水平掌握的到底有多深,實踐經驗有多強。

一個好的面試官,自己本身技術功底紮實,是可以對一個技術問出一連串的連環炮的,就比如上面的那個訊息中介軟體的連環炮發問。

而且只要面試官在一個技術上的深度超過候選人,那麼通過連續的不斷加深的發問,是可以考察出來一個候選人在自己最熟悉的技術領域的技術深度的。


比如說你對一個技術的掌握是否達到了原始碼級別?是否對某個框架,或者是中介軟體深入的理解底層的原始碼實現,從原始碼級別說清楚他的架構原理?是否對這個技術有過線上的高可用部署,承載過高併發流量的訪問?是否對這個技術在線上生產環境解決過各種各樣的複雜技術挑戰?是否基於這個技術落地到你的業務系統中,設計出各種複雜的系統架構?

通過這種連環炮,基本上可以非常好的考察出某個候選人對技術深度的掌握。

技術深度的考察是中大型網際網路公司面試官對一個高階/資深以上的候選人必須考察的,因為如果一個人工作5年以上,來應聘高階職位的話,那我們絕對是要求他對至少一個技術領域有著較為深入的研究的,比如說起碼你得深入閱讀過某個熱門技術的核心原始碼,有一定的技術功底,可以解決一些複雜的線上故障。

因為技術廣度決定了你可以利用各種技術來做專案,但是技術深度決定了你的技術功底,你未來學新東西有多快,線上系統出了故障你能否快速定位和解決,你能否基於對技術的深刻理解為公司的專案設計和開發出複雜而且優秀的架構出來。


六、下篇預告

上面就是《網際網路公司的面試官是如何360°無死角考察候選人的?(上篇)》,主要是用一個面試連環炮帶出來了平時中大型網際網路公司面試官是如何發問的。然後從技術廣度的考察、底層技術的考察、技術深度的考察幾個角度說了一下,我們一般是如何來考察候選人的技術。

《網際網路公司的面試官是如何360°無死角考察候選人的?(下篇)》,將會從專案經驗的考察、系統設計的考察、候選人與崗位的匹配、多輪面試官的協作考察,來繼續告訴大家網際網路公司一般是如何科學的、全方位、無死角的來考察候選人的。

知己知彼、百戰不殆,面試也是如此。所以我們的《Java進階面試系列》,以這兩篇文章作為開端。

你只有真正瞭解了面試官的選拔標準,考察範圍,才能更好的進行鍼對性的準備,成為真正的“offer收割機”

由於公眾號不再開通文章留言功能,如果對文章有什麼問題或者對公眾號有什麼建議,歡迎在公眾號聊天框留言交流!

END


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


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

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


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

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


推薦閱讀:

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

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

3、【效能優化之道】每秒上萬併發下的Spring Cloud引數優化實戰

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

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

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

7、【效能優化的祕密】Hadoop如何將TB級大檔案的上傳效能優化上百倍

8、拜託,面試請不要再問我TCC分散式事務的實現原理坑爹呀!

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

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

11、【眼前一亮!】看Hadoop底層演算法如何優雅的將大規模叢集效能提升10倍以上?

12、億級流量系統架構之如何支撐百億級資料的儲存與計算

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

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

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

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

17、七張圖徹底講清楚ZooKeeper分散式鎖的實現原理

18、大白話聊聊Java併發面試問題之volatile到底是什麼?

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

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

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

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