在這個寒冬中,咱們得不斷提高本身的能力,因此此次,我就針對「虛擬機描述」這個點擴展出去,具體講些在面試中展現虛擬機內存調優能力的話術。程序員
在面試中展現出這個技能有什麼好處?初學者或初級程序員在面試時若是能證實本身具備這方面的能力,這至關有利,由於這是針對5年左右相關經驗的高級程序員的要求。若是在面試時面試官主動問及這方面的問題,你們能夠按照以下的思路由淺入深地依次闡述,若是沒問,你們也能夠用到下面說起的方法毫無痕跡地(不突兀不顯擺)展現本身這方面的能力。面試
若是面試官有直接問,「你是否瞭解虛擬機體系結構」,那麼你們能夠先畫出虛擬機的各部件,隨後依次說明各部分的做用。算法
其實面試官也知道這部分對項目開發的幫助並不大,因此你們不用過於深刻,好比能夠不用深刻回答.class字節碼文件的結構和類加載器的流程。但你們必定得總結性地說出靜態數據、基本數據類型和引用等數據的存儲位置。這樣就能引出後面的關於「內存」的話題。sql
若是面試官沒有問及虛擬機體系結構的問題,那麼也沒關係,畢竟這塊知識點實用性通常,說出來屬於錦上添花。但你們應當經過後文部分給出的方法,找機會引出「內存「這個話題。數據庫
通常來講,大多數面試官會問垃圾回收的流程,這樣你們就有機會經過堆結構說出垃圾回收的流程,進而展現本身內存調優方面的能力。設計模式
或者你們能夠更保險點,在簡歷的最近項目介紹里加上相似這樣描述,「這個項目的內存要求比較高,雖然在項目裏分配的對象很多,但這個項目只被分配了1G內存,因此在這個項目裏,我實踐了一些定位排查內存問題的技能,也作了些調優的工做「,這樣面試官見到簡歷的描述,就會天然而然地提問了。架構
更穩妥的方法是,在面試中總會有「項目介紹」這個環節,面試官會讓候選人介紹最近的(或最拿得出手)的一個項目,這樣你們就能夠順勢說出剛纔已經給出的描述。併發
或者,你們能夠在回答數據庫或集合等方面的問題時引出這個話題,好比回答完JDBC問題後,你們能夠說一句,「用好的Connection對象咱們會及時關閉,不然它所佔用的內存對象沒法被GC回收」,或者在談及List等集合類型時,同時多說一句,「用好的集合對象咱們會及時clear掉,不然這個集合也會對一些對象產生強引用,這樣就會延遲對象的回收時間」。分佈式
總之,內存調優這方面的能力不說出來未免有些惋惜,你們能夠根據上述的描述觸類旁通,在面試中找一切能夠的機會引入這個話題。高併發
不過這裏也請你們注意些技巧,別自說自話地一股腦地全說,這樣反而過猶不及。打個很是不恰當的比方,就像釣魚,你們能夠先下個餌,好比在介紹項目時先粗略地提到本身作過這方面的事情,但先別說具體的,等面試官主動問了,再具體地按下文給出的思路一一展開。
萬一面試官在你們的再三暗示下仍是沒接口繼續問(雖然這種可能性很是小),那說明面試官真的對此沒興趣,或者說你應聘的公司對此沒需求,那麼你們就只能此打住了。
在找到合適的機會後,你們能夠先從堆的結構入手,進而詳細說明垃圾回收的流程。好比你們被問到,你對Java中的垃圾回收機制瞭解多少?或者當你說出在項目裏你作過內存調優,面試官進一步讓你說出細節,那麼你們能夠按次序說出以下的要點。
在說完上述要點後,你們最後必定得引出下一個「內存調優」這個話題,好比能夠說,「雖說Java虛擬機能自動回收內存,但在平時寫代碼時,咱們會遵循一些要點來提高內存性能,在項目裏,咱們還會監控內存使用量,並且我在項目裏也有過排查OOM問題的經驗「。這樣的話就能進一步展現本身的「調優和排查」能力。
這裏來總結一下要點,在面試時,你們能夠在閱讀Java核心技術及面試指南中的相關內容,在此基礎上自行展開敘述。
解決問題相對容易,但定位問題就相對難了,因此建議你們能夠再進一步展現本身「監控、定位和調優」方面的能力,好比能夠經過以下的敘述引入到這個話題,「除了這些代碼上的技巧外,咱們在項目上線後還必須監控內存使用量,一旦發生OOM或Stop The World等問題,咱們得經過必定的方法來定位問題點,從而再用剛纔提到的技巧來優化內存」。
在面試時,面試官是無法當場給出一個實際的問題讓你們來現場解決,只要候選人敘述得不離譜,一些要點能說上來,通常就會認爲候選人具有這方面的能力。
這塊你們說下,好比經過JConsole確認有內存問題,經過MAT文件Dump文件來查看OOM的現場,從而再經過GC日誌和代碼裏輸出的內存使用量來定位問題點。在面試前,建議你們多看一些GC日誌文件和Dump文件,這樣在敘述時就更會成竹在胸了。
並且,能夠準備一兩個經過MAT等工具排查解決實際OOM的案例,這樣說服力就更強了。
經過閱讀這部分的內容,你們必定能體會到,「內存監控、定位和調優」方面的能力並不難學,也不難準備面試中的說辭,並且在面試中,最多用上五分鐘就能把這部分的知識點說全,但你們一旦按上述思路展現出了這方面能力,那麼很大程度能改變面試官對你的評價。
根據咱們的面試經驗,初級程序員的平均能力其實差不了多少,在不少時候咱們是沒法取捨的。好比咱們要從10我的裏招5我的進來,除去特別好的(通常2個)和特別差的(通常也是2個),有6我的的綜合能力(包括學校背景工做背景項目經驗和麪試結果)是差很少的,也就是說咱們很難從這6我的裏挑選出3我的。
這時,若是這6人中誰有相似於內存調優(或者以前提到的設計模式)等方面的加分項,那麼就必定會優先考慮這我的,這就是本文給你們的幫助。
分享免費學習資料
針對於Java程序員,我這邊準備免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)
爲何某些人會一直比你優秀,是由於他自己就很優秀還一直在持續努力變得更優秀,而你是否是還在知足於現狀心裏在竊喜!但願讀到這的您能點個小贊和關注下我,之後還會更新技術乾貨,謝謝您的支持!
資料領取方式:加入Java技術交流羣963944895
,點擊加入羣聊,私信管理員便可免費領取