面試官說這些是BAT程式設計師必備的技能~你會幾樣?

2019-11-12   指尖上的代碼

又到一年一度的跳槽求職高峰季,最近很多人問我,你們公司還缺人麼,你們用哪些技術棧,有哪些是你們比較關注技術重點?

作為負責技術面試,每天面對數十甚至上百封簡歷,肯定要優先做一輪篩選。那麼哪些技術點或方向在篩選或面試時,會給我留下深刻印象呢?

我覺得優秀的,有潛質的程式設計師可以從以下幾點來體現。

性能調優

幾乎每個JAVA後端開發程式設計師,都會在面試時碰到諸如如何性能調優的問題,如何回答好這個問題,不僅僅是考察對JVM,內存模型等的理解,更看中的是碰到性能問題時,排查問題的方法論和思路。

典型的一個場景是:在壓力測試時,發現FullGC頻率很高,如何解決?

此類問題一般從以下幾點入手:

1.觀察GC日誌,判斷是否有內存泄漏,或者存在的內部不合理點。此處要求能熟悉各種linux命令,可以快速查看和定位。

2. 調整JVM 參數,如新生代,年老代大小,S0和S1大小比例,不同垃圾回收器的採用。並結合業務特點做進一步分析。這裡不但要求紮實的JVM內存模型和理論,還要求對JVM的各種參數設置耳熟能詳,並能實踐操作。

3. Dump內存,做進一步的對象分析。

4. 壓測腳本的編寫,性能問題解決前可以發現問題,並能在問題解決後真實的驗證。

此類優化不能用照本宣科式的回答,面試官一定會問實際中操作的場景,和解決問題的思路。雖然性能問題的原因是多種多樣的,但是解決問題的思路和方法論是可以明確的。

網絡框架的理解和使用

大家一定都聽過或使用過網絡異步框架Netty,甚至使用netty框架開發過一些應用和功能。

但是大部分人僅限於對Netty的使用,甚至僅僅知道其他一些開源框架使用了Netty,但是在資深面試官眼裡,Netty有很多值得學習和借鑑的地方,使用過Netty並且能對Netty的一些原理有一定的了解且能學以致用的Java程式設計師格外受歡迎。

一般來說,要求較高的面試官和技術經理喜歡從Netty的設計模式角度深入的考察技術人員對網絡開發和相關理論的理解如:

1. Netty的Reactor模型如何設計,反應在應用里的模型是如何(見下圖)。

2. Netty的pipeline 責任鏈如何使用,業務場景中是否有類似的實踐經驗。

3. 項目中有無使用Netty,並利用Netty進行私有化協議設計。

同學們不僅要求能使用Netty,通過閱讀其源碼,理解其中的精髓,並能應用在自己的實踐項目中,這個才是亮點和加分項。

開源服務化RPC框架的理解和使用

網際網路經過十幾年的發展,早已經從單體應用發展為服務化應用,大廠里系統和服務尤其如此。

拿經典的dubbo 服務化框架舉例,當前市面上有很多dubbo相關的文章和介紹,這裡撇開不談,從技術負責人的角度來,我會更關心下面有關幾個dubbo相關的問題。

1. 技術選型:為什麼選擇dubbo,而不選擇其他如spring cloud框架?

我認為可以從如下考慮:

A)業務的特點以及可預見的後續的發展。作為高級技術人員,必須需要對業務的的發展做預計和規劃。

B)可用性要求,是否需要達到4個99(99.99%),需要支撐的峰值QPS,是否有業務的集中爆發點,如電商大促

C)團隊的成熟度,一個成熟的團隊可以很好的hold住複雜的開源框架,甚至做定製化開發。

技術選型話題雖然寬泛,但是最能體現體現技術人員的綜合能力,尤其結合業務特點後對技術框架深度和廣度的駕馭能力。

2. Dubbo底層走的是什麼協議,如何處理異步轉同步?

大部分的Java開發都會直接使用dubbo,而不會去關心其底層一些技術細節,但是一些細節,如dubbo如何對對象進行序列化,用了哪些序列化方式,這些在分布式項目中對提高應用的處理速度,減少網絡開銷,都很大幫助。

同時RPC框架里如何將異步轉同步,也是需要技術人員非常關注的一面,裡面相關的設計模式,多線程程高並發場景都是很多業務系統里真實需要和借鑑的。


3. Dubbo在高並發高可用等實踐場景需要認真考慮的其他問題

使用了dubbo後,很多人覺得萬事大吉,其實並不是這樣,下面幾點還需要關心,並且這些就是體現你價值的地方

A) dubbo依賴了zooKeeper,但是萬一ZooKeeper宕機了怎麼辦

B) 如果ZooKeeper假死,客戶端對服務端的調用是否會全部下線,如果是該如何避免

C) 如何監控duubo的調用,並做到優雅的客戶端無感發布

大家可以自行思考,答案不唯一。

自身多年的面試體會

1.項目中儘量多思考,迎難而上,如碰到複雜的性能,內存泄露等問題的問題,往往是提升自己的機會,千萬要仔細研究解決,可以參考其他解決類似問題的文章和實踐經驗,對技術深度的提升是很大的,關鍵時候可以讓你的面試官突然覺得面耳目一新。

2.重視解決問題的思路和方法,很多時候技術人員可以快速設計一個系統或解決一個問題,但是在資深工程師或面試官眼裡可能並不是最優方案。如何解決?

很多技術人員的項目和技術相對單一,長久以往,容易造成技術思路和視野的狹窄,接觸不到行業最新思路和動態或者當前疑難問題的最佳解決方案。