資深網易技術專家總結的面試高頻知識點!


座標:杭州 | 工做時間 14年linux

現任職位:網易後端開發專家 ,程序員

負責過網易千億級別的統一賬號服務面試

又到一年一度的跳槽求職高峯季,最近不少人問我,大家公司還缺人麼,大家用哪些技術棧,有哪些是大家比較關注技術重點?spring

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

我以爲優秀的,有潛質的程序員能夠從如下幾點來體現。設計模式

1. 性能調優網絡

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

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

此類問題通常從如下幾點入手:框架

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

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

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

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

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

2. 網絡框架的理解和使用

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

可是大部分人僅限於對Netty的使用,甚至僅僅知道其餘一些開源框架使用了Netty,可是在資深面試官眼裏,Netty有不少值得學習和借鑑的地方, 使用過Netty而且能對Netty的一些原理有必定的瞭解且能學以至用 的Java程序員格外受歡迎。

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

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

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

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

同窗們不只要求能使用Netty,經過閱讀其源碼,理解其中的精髓,並能應用在本身的實踐項目中,這個纔是亮點和加分項。

3. 開源服務化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. 重視解決問題的思路和方法, 不少時候技術人員能夠快速設計一個系統或解決一個問題,可是在資深工程師或面試官眼裏可能並非最優方案。如何解決?

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

網易的產品覆蓋了互聯網的方方面面,期間碰到各類產品各類場景下的各類問題,很值得你們借鑑和學習,擴展本身的技術廣度和知識面 。 

相關文章
相關標籤/搜索