1. 程式人生 > >程式設計師面試掌握這些,進入BAT不是夢!

程式設計師面試掌握這些,進入BAT不是夢!

首先,五年左右,應該算高階開發工程師,大部分面試不用去做題,背string和stringbuilder區別的,幾乎都是底層和遠離,分散式等。雖然一個程式設計師,在工作中大部分還是寫流水程式碼,增刪查改。

1 JVM

這個大公司基本都會問,記憶體模型,GC,jvm都有哪些區域?棧楨存了什麼?

常用垃圾回收器哪些,特點?jvm效能調優,這些從周志明的jvm特性那本書基本都有答案,一個高階程式設計師必讀,出去面試,至少得讀兩遍,理解,不是死記硬背,面試官會問的很細,你如果死記硬背,人家隨便一問,你就跪。

2 執行緒池

這個基本必考,高階程式設計師不會問你啟動執行緒哪幾種方式,都是高併發場景。比如四種執行緒池,都在那哪幾種場景使用的多。執行緒池的幾個重要引數哪些,這些重要引數,在不同執行緒池下比較。高併發下阻塞佇列用哪個,我記得是大眾點評問我的,用linkblockqueue還是arrayblockqueue,我當時候說,後者吧,佇列新增任務快,基於列表,人家說錯了,前者,array是連續的,回收的快,這些都是細節。剩下的就是阻塞佇列拒絕策略。預設都是拒絕,有個面試官問我,假如阻塞佇列滿了,請求拒絕,但是這些請求是重要的,怎麼辦?這種情況實際開發中會遇到,每個系統總有個峰值,達到峰值,系統可能處理不了,他說,這個時候先把所有請求落資料庫,或者mq,後面處理,真實場景會遇到,可能之前你沒遇到,但是面試官會問這些,覺得你有沒有思考的能力。執行緒池,tomcat預設就有執行緒池,會問到調優,所有系統基本離不開吧。

3 鎖

這個也是必考,雖然開發中有時候不用,基本會問,syncnizched關鍵字,作用,類鎖,物件鎖,方法鎖區別?

靜態方法加鎖,兩執行緒會互斥嗎,非靜態方法,加鎖,會互斥嗎?這個比較簡單。這個關鍵字,內建物件鎖,jvm建立物件後,會在物件的物件頭,存著。然後和lock鎖區別,這個如果你去背,可能不理解,我是這麼理解的,假如有個廁所,很多人想去上,假如是sync鎖,所有人會不定時去敲門,廁所有人嗎,非常耗效能,CPU切換,但是lock鎖,相當於加了個管理員,舉著個牌子,進去一個人,排著寫著有人,剩下的看到,就不會去敲門了,人走了,把牌子改下,Java,是基於volitale關鍵字,通過aqs保證,還有sync阻塞的,比如有個人在廁所玩手機,sync只能等。釋放鎖,但是lock,可以中斷,或其他操作。問的深的會問鎖優化之類的,雖然。開發基本用不到,但是你想拿高薪,必須要會。另外,資料庫的鎖會問。表鎖。lock的讀鎖,寫鎖,怎麼用。原理。這塊必須深入理解。不然只能被虐。

4 快取

這個基本必考,redis,問的問題挺多,es可能會問,分散式系統,redis的唯一ID能做什麼?新資料來了,是先存資料庫還是redis,過期策略,什麼時候用redis做快取,什麼時候用做資料庫,和es,mongo,區別。這個只是個快取,稍微看下,不會問的很深。

5 MQ

訊息中間價,分散式系統基本使用,原理,哪幾個組成部分,kafka和rabbitmq,區別?

如何保證訊息不丟失。基於哪種協議?他的好處?你的專案怎麼使用它的。點對點,訂閱釋出,區別,你的理解。

6 分散式

分散式是啥。一個伺服器問題造成血崩怎麼辦,四層負載均衡和七層區別,說下用過哪些RPC框架。dubbo基於哪些協議,服務如何註冊,如何被發現?這個基本都考些,當然,也不要求你都精通,大致原理懂就好。

7 spring

bean的生命週期,spring得核心,spring的代理模式,動態代理,第三方cglib代理哪些場景使用,spring用了哪些設計模式。

spring的事務,傳播行為。哪些常用註解?

8 springmvc

原理,常用註解。和struts區別,這個也要花點時間準備。

9 集合

這個必考,重要重要重要,說三遍。哪些常用集合,幾種集合,區別,比如ArrayList和linklist區別,效能,這個是基礎,問的最多,最多,最多,hashmap,concurrentHashmap,JDK7和JDK8concurrentHashmap區別,實現,原理,兩種JDK的size() 方法怎麼實現?這個最好把原始碼看幾遍,什麼初始化,擴容,底層為什麼要用陣列加連結串列加紅黑樹,什麼是紅黑樹,這個大部分公司必考,看你能力。

10 資料庫

索引,必考,基於b+樹,唯一索引,普通索引,聯合索引,join是否讓索引失效,聯合索引的最左原則,兩個欄位加了聯合索引,兩個一起用,或者第一個欄位,查詢,都不會實現,用右邊的欄位,失效,等等。有的會讓你手寫SQL,資料庫引擎,myisam和innoDB區別,基本不會問別的。

11 同步io阻塞io

nio bio aio 區別,用法,b阿里和愛奇藝都問了。

12 其他

其他問的不多,上面基本全了,效能優化。系統穩定性。問之前的專案。

如果你依然在程式設計的世界裡迷茫,不知道自己的未來規劃,可以加入JAVA架構學習交流群:614478470 裡面可以與大神一起交流並走出迷茫。進群免費領取學習資料,看看前輩們是如何在程式設計的世界裡傲然前行!群裡不停更新最新的教程和學習方法(進群送JAVA架構視訊資料),有想學習JAVA的,或是轉行,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習

要關注技術前沿。不管做任何工作,如果只顧著低頭做事,而不曉得擡頭看天。那麼不管做多久,自身的水平總是停留在畢業時的水平;如果基礎又忘記了太多,那還不如畢業生。 關注技術前沿,並不是要求跟進每一個新技術,而只需關注目前主流媒體經常宣傳的一些新技術、新思想。關注這些技術前沿的動向,並能將他們與自己從事的工作聯絡起來作一些深入思考,那麼這是向面試官宣揚你的學習能力的一種好辦法。

最後一句小公司比較看重知識的廣度,大公司更看重知識的深度。每個人都有每個人合適的選擇,但唯一不變的就是提升自己。

想要學習Java高架構、分散式架構、高可擴充套件、高效能、高併發、效能優化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分散式專案實戰學習架構師視訊免費獲取   架構群:614478470

點選連結加入群聊【JAVA高階架構】:https://jq.qq.com/?_wv=1027&k=5gMDouY