來自:匠心零度(微訊號:jiangxinlingdu)
說在前面
如果你經常註意麵試題,你會發現現在面試題多多少少會含有jvm相關的面試題,之前也把一些jvm面試題彙總了下:面試題系列一,那麼為什麼現在面試需要瞭解或者問面試題呢?
主題
談談自己的理解,概括為以下幾個方面:
-
的確很重要。
-
供大於求。
-
面試風氣。
下麵就針對這幾點談談。
的確很重要
隨著網際網路的發展,高併發高可用、快速響應成為軟體的必須,而JVM與這些有著密切關聯。之前JVM系列好多都是一些由於STW影響到快速響應問題,忽然網站慢一下(抖動下)等問題,下麵談談最近透過JVM排查到的高併發高可用問題。(在高可用高併發下麵問題原因可能會很多,比如cpu異常高、磁碟IO高、SWAP空間等,有可能很多問題都是綜合性的問題)
以前在我的認知裡面,如果服務執行有問題,最簡單有效快速地辦法就是重啟,最近遇到了問題打破了我對該方法的認知。
某業務線最近叢集服務升級忽然上線上去不能提供服務,之後影響到整個叢集,檢視當時伺服器情況,負載、cpu、io、swap、磁碟等都正常,檢視日誌就是卡在最後一行不動了(也沒有發現OOM,等任何異常)。
如果是之前估計這個問題我也就排查不了了,現在排查問題多了一個維度JVM(的確有時候需要考慮的,並且現在很多監控工具都會考慮到JVM的),檢視gcutil檢視比例,發現from 100% eden 100% old 100%但是服務就是沒有OOM,執行任何都命令都非常緩慢了(更別談訪問請求了),檢視具體gc日誌發現concurrent mode failure 並且時間很長,猜測就是一瞬間量把記憶體給用完了,導致from 100% eden 100% old 100%現象,最終不能提供服務,之後其他叢集節點也陸續出現了此類情況,重啟無效,現象一樣很快就from 100% eden 100% old 100% 不能提供服務,沒辦法,一直重啟直到都啟動好了可以正常提供服務。
留了一臺進行排查問題,執行jmap -histo pid無果,加-F也無果,後來執行jmap -dump:format=b,file=heap.bin pid (6G堆執行了3-4個小時左右)透過MAT分析檢視,發現都是某個邏輯產生的資料,佔用了5G左右(char[]、String、Map、List等都與某個邏輯程式碼有關)猜測是該問題(由於涉及到公司具體業務不方便截圖,只能大概說明下),很容易定位到程式碼最後是由於併發沒有考慮好,邏輯寫的也有點問題導致的,進行修改處理,問題解決,出了JVM相關問題可以進行排查解決。
可能很多人認為線上出現問題可以排查繼續解決問題的人牛逼,其實錯了,真正牛逼的人都是在問題產生前就解決了(需要意識裡面轉變和學習思考提高的地方)。
下麵看個例子就明白了,是Charles告訴我的,我覺得放在這裡特別合適:
春秋戰國時期,有位神醫被尊為“醫祖”,他就是“扁鵲”。一次,魏文王問扁鵲說:“你們家兄弟三人,都精於醫術,到底哪一位最好呢?”扁鵲答:“長兄最好,中兄次之,我最差。”文王又問:“那麼為什麼你最出名呢?”扁鵲答:“長兄治病,是治病於病情發作之前,由於一般人不知道他事先能鏟除病因,所以他的名氣無法傳出去;中兄治病,是治病於病情初起時,一般人以為他只能治輕微的小病,所以他的名氣只及本鄉裡;而我是治病於病情嚴重之時,一般人都看到我在經脈上穿針管放血,在面板上敷藥等大手術,所以以為我的醫術高明,名氣因此響遍全國。”
如果能在編碼時候就考慮到JVM,做到面向JVM程式設計那就更牛逼了,如果能在上線前查閱到此類JVM問題或者是OOM問題以及一些其他問題那也就好了。
綜述:因此這些成為必不可少的技能,所以面試需要瞭解,因為公司可能會面臨該問題。
供大於求
現在不像以前了,以前會點html都好找工作,現在由於學習軟體的人越來越多,而且每年大學生都在畢業(而老一輩的也很少換工作)人只會越來越多,有個笑話,隨便在大街上扔硬幣砸到的那個可能就是搞軟體的,現在人員太多,公司為了區分,會多新增維度,每多一個維度可能就會刷掉一批人,核心供大於求,所以我們也必須朝著這些大的方向努力,使得自己的競爭力比別人強。
面試風氣
簡單的問題都不好意思問,怕面試者鄙視面試公司問的問題。現在有一股妖風,不管啥公司都慢慢像阿裡這樣的公司靠近,面試不問點jvm、併發、分散式都不好意(雖然公司可能沒有用到,雖然可能僅僅CURD),老是覺得問問這些顯得逼格高點,不管處於什麼原因很多公司的確都在學習他們,都在問這些問題,那麼我們就朝著這些大的方向努力也是沒錯的,如果朝著這些方向努力就是他們需要的人才,那麼也就對了。
類似其他,比如高併發 鎖、分散式、快取等都可以考慮考慮這樣思考,你會有不一樣的收穫的。
●本文編號634,以後想閱讀這篇文章直接輸入634即可
●輸入m獲取文章目錄
演演算法與資料結構
更多推薦《18個技術類微信公眾號》
涵蓋:程式人生、演演算法與資料結構、駭客技術與網路安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。