我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程

点击上方“业余草”,选择“置顶公众号”

第一时间获取技术干货和业界资讯!


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


昨天,我面试了不少程序员,很多程序员和背书一样。于是后面,我就改变了一下面试技巧。给来的人,一人一台电脑,要求写出个死锁程序,并且使用 jstack 分析出现问题的代码。时间不能超过 1 个半小时。


问题一出,有两个程序员起身要走了,我问为什么?回答:“写不出来”。比较直接,于是我让他们关注了公众号,说明天公布答案。并让人事送他们到了电梯口。


接下来还有一些程序员,拿出手机偷偷的搜索了,我也没说什么。只是结束时说等消息。


只有其中一个老实的程序员很认真,最终写的我很满意。


并且在他的薪资要求上主动给他加了 1K,说多也不多。主要是以后,薪资涨幅不大,5% 到 10 % 的浮动。没有像跳槽这样来的快,给他一个超预期的起点,希望他能在我们公司多待几年。


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


那么如何写出一个 Java 死锁程序呢?代码很简单,我已写大家就看得明白。


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


代码很简单,就是两个线程分别获取其中一个锁,不释放持有的锁,然后再尝试获取另外一个锁。


然后,我们通过 jps 和 jstack 8902 > jstack_deadlock.log 看一下相关信息。


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


然后通过我在这篇文章中对线程状态《线程面试必备:线程状态和dump输出状态》的说明。我们看一下,死锁 Deadlock 状态。


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


从上面可以看出,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 列出的线程的堆栈信息:


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程


定位到相关的 Java 代码 DeadLockTest.java 第 24 行和 42 行。


最后,你们说这样的程序员,我该不该给他主动上调入职薪资?


我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程

10T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,GO等等。在公众号内回复对应关键字或框架名字,即可免费获取!!

我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程

 你再主动一点点 我主动给面试者加薪 1K 的死锁面试题和 jstack 分析过程  我们就有故事了