我主動給面試者加薪 1K 的死鎖面試題和 jstack 分析過程

業餘草發表於2019-03-05

點選上方“業餘草”,選擇“置頂公眾號”

第一時間獲取技術乾貨和業界資訊!


640?wx_fmt=png


640?wx_fmt=png


昨天,我面試了不少程式設計師,很多程式設計師和背書一樣。於是後面,我就改變了一下面試技巧。給來的人,一人一臺電腦,要求寫出個死鎖程式,並且使用 jstack 分析出現問題的程式碼。時間不能超過 1 個半小時。


問題一出,有兩個程式設計師起身要走了,我問為什麼?回答:“寫不出來”。比較直接,於是我讓他們關注了公眾號,說明天公佈答案。並讓人事送他們到了電梯口。


接下來還有一些程式設計師,拿出手機偷偷的搜尋了,我也沒說什麼。只是結束時說等訊息。


只有其中一個老實的程式設計師很認真,最終寫的我很滿意。


並且在他的薪資要求上主動給他加了 1K,說多也不多。主要是以後,薪資漲幅不大,5% 到 10 % 的浮動。沒有像跳槽這樣來的快,給他一個超預期的起點,希望他能在我們公司多待幾年。


640?wx_fmt=png


那麼如何寫出一個 Java 死鎖程式呢?程式碼很簡單,我已寫大家就看得明白。


640?wx_fmt=png


程式碼很簡單,就是兩個執行緒分別獲取其中一個鎖,不釋放持有的鎖,然後再嘗試獲取另外一個鎖。


然後,我們通過 jps 和 jstack 8902 > jstack_deadlock.log 看一下相關資訊。


640?wx_fmt=png


然後通過我在這篇文章中對執行緒狀態《執行緒面試必備:執行緒狀態和dump輸出狀態》的說明。我們看一下,死鎖 Deadlock 狀態。


640?wx_fmt=png


從上面可以看出,Thread-0 鎖了 locked <0x0000000795b518a8 記憶體地址> (a java.lang.Object 鎖的物件)。然後,waiting to lock <0x0000000795b518b8> 等待鎖定另外一個記憶體地址,也就是物件。


而 Thread-1 鎖了 locked <0x0000000795b518b8 記憶體地址> (a java.lang.Object 鎖的物件)。然後,waiting to lock <0x0000000795b518a8> 等待鎖定另外一個記憶體地址,也就是物件。


而 jstack 也很明確的列出了相關執行緒的狀態 java.lang.Thread.State: BLOCKED (on object monitor)。


再看一下 jstack 列出的執行緒的堆疊資訊:


640?wx_fmt=png


定位到相關的 Java 程式碼 DeadLockTest.java 第 24 行和 42 行。


最後,你們說這樣的程式設計師,我該不該給他主動上調入職薪資?


640

10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!

640?wx_fmt=png

 你再主動一點點 640?  我們就有故事了

相關文章