BAT面試須要什麼樣的程序員?

轉載:https://www.toutiao.com/i6687892398527218184/linux

1. 性能調優

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

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

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

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

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

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

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

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

網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

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

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

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

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

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

網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

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底層走的是什麼協議,如何處理異步轉同步?

網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

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

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

3. Dubbo在高併發高可用等實踐場景須要認真考慮的其餘問題

使用了dubbo後,不少人以爲萬事大吉,其實並非這樣,下面幾點還須要關心,而且這些就是體現你價值的地方

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

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

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

同窗們能夠自行思考,答案不是惟一,網易有不少相似的項目,設計的很好,很是值得思考和借鑑。

自身多年的面試體會

1.項目中儘可能多思考,迎難而上,如碰到複雜的性能,內存泄露等問題的問題,每每是提高本身的機會,千萬要仔細研究解決,能夠參考其餘解決相似問題的文章和實踐經驗,對技術深度的提高是很大的,關鍵時候可讓你的面試官忽然以爲面耳目一新。

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

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

網易的產品覆蓋了互聯網的方方面面,期間碰到各類產品各類場景下的各類問題,很值得你們借鑑和學習,擴展本身的技術廣度和知識面。對於渴望實現技術和職業成長的程序員,能夠看下如下福利:

大廠的Java程序員應該掌握什麼技術?

基礎板塊:

  • JVM性能調優
  • Java程序性能優化
  • Tomcat
  • 併發編程進階
  • Mysql
  • 高性能Netty框架
  • Linux基礎與進階
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

框架板塊:

  • IOC源碼解析
  • AOP源碼解析
  • Spring MVC
  • Mybatis
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

高性能板塊:

  • 分佈式架構思惟
  • Zookeeper分佈式環境指揮官
  • Nginx高併發分流進階實戰
  • ActiveMq消息中間件
  • RabbitMq消息中間件
  • Kafka百萬級吞實戰
  • Memcached進階實戰
  • .Redis高性能緩存數據庫
  • MongoDB進階實戰
  • 高性能緩存開發實戰
  • Mysql高性能存儲實戰
  • FastDFS分佈式文件存儲實戰
  • 高併發場景分佈式解決方案實戰
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

微服務板塊

  • 基於分佈式思想下的RPC解決方案
  • Dubbo應用及源碼解讀
  • SpringBoot
  • SpringCloud應用及源碼解讀
  • Docker虛擬化技術
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

團隊開發工具:

  • Git
  • Maven
  • Jenkins
  • Sonar
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?

 

項目實戰(這裏以b2c商城爲例)

  • 系統設計
  • 用戶管理子系統
  • 商品管理子系統
  • 搜索子系統
  • 訂單子系統
  • 支付系統
  • 分佈式調度系統
  • 後臺系統
網易十餘年經驗面試官現身說法:BAT面試須要什麼樣的程序員?
相關文章
相關標籤/搜索