1.背景
大家有没有感觉到现在就算背诵了很多面试八股文,也刷了B站上很多的面试视频,绝大部分的面试题也基本上都能回答上,
但是找工作却越来越难了,是因为自己没有学好么,当然不是
很多人认为是经济不好,招聘的单位少,其实我个人觉得也不是
最主要的原因估计是学习java编程的人太多了,太卷了...
找工作本来就是一个筛选的过程,如果大家都背诵了面试八股文,都刷了很多面试视频,
到面试官那里回答的说辞都是一样的,虽然是正确的,但是大家回答的都是正确的呀,
这时候面试官就不知道选哪一个了....
2.回答问题要有自己的独特见解
在大家都会的情况下,要想通过面试就得体现出你与其他的面试者得的独特之处.....
如何才能能体现独特之处呢,可以从两个方面入手
一是:思维的独特
二是:技术深度的独特
当然通常者二者是互相贯穿的
举一个很常见的面试题:如何保证缓存与数据库的数据一致性
普通面试者得回答:
采用读写锁保证强一致性,使用Redisson实现读写锁;
在读的时候添加共享锁,可以保证读读不互斥、读写互斥;
更新数据的时候,添加排他锁,它是读写、读读都互斥,这样就能保证在写数据的同时,
不会让其他线程读数据,避免了脏数据。
这个回答如果只从技术的角度来说当然很完美,也是可行的,但是没有结合实际,没有体现出自己的思考过程
是一个典型的没有思考,没有项目开发经验或者经验不足,背诵出来的答案
有独到见解的回答:
这个如果只从技术的角度来分析的话,当前有很多现成的工具都可以实现
比如分布式锁,读写锁都是可以实现的,当然这里还有其他解决方案就不逐一列举.
备注:体现出自己知道怎么从技术角度解决问题...
但是这个缓存与数据库一致性的问题一般不从纯技术的角度去处理,
再怎么优秀的锁设计都没有无锁简洁快速,
我们可以从业务流程上来避免这个缓存一致性问题,这里可以举一个自己实际项目中的例子
或者使用之前我们讲过的虚拟供应链项目来说明,
这里面有个业务场景是每周三给银行的用户发放一定量的微信立减金,只有当微信立减金有库存的时候才显示这个活动
很明显这个活动数据访问频率非常高,如果每次都去查询数据库的话可能会造成数据库压力大,
但是放在缓存的话,剩余库存一直在变动,这就涉及到缓存与数据的一致性的问题
我一般在处理这类业务时,比较喜欢的做法是,数据放缓存,但是不加锁,允许业务存在一定的读取时的脏数据,
等用户真的下单兑换微信立减金时在数据库层面加锁,如果这时库存为空,就提示库存为空....不可兑换就可以了
其实这里面还有很多漏洞和可以继续深聊的话题..这里就不展开讲解了....
当然很明显我提出的解决方案可能不是最佳方案,但是是一个结合了实际业务情况有思考过程和原因的解决方案,而不是一个背诵出来的答案;
面试的时候重点是体现出你与其他人的不同,还能与面试官深入得探讨业务,技术问题,这样你就与其他的面试者大大的不同了
面上的概率也非常大了...
3.不要搞题海战术
上面讲了如何深入透彻的回答一道面试题,但是java体系那么多技术点,你是很难把每个技术点都理解透彻的;
我看到很多面试者大量的背诵面试题,搞题海战术,每个技术点都会说一点,但就是说不到独特的地方;
其实java面试你根本就不需要把所有的技术点都背诵一遍,你只需要深入透彻的搞清楚一两个技术点就可以了,
毕竟面试的时候纯技术面试一般就30分钟左右,在这30分钟中只要你能充分的把你准备的技术点给面试者说清楚就可以了;
你可能会想,我只准备了一两个技术点,万一面试官不问我准备的技术点,而是问其他的技术点呢?
这就需要你善于引导面试官问你你熟系的技术点,
比如在简历上写:擅长多线程高并发的处理,那么面试官多半会围绕这个问;
在比如面试官问,你你发过的项目有那些亮点,你可以说项目中对高并发和多线程的处理逻辑;
....
4.总结
这就是我对java面试的感悟,总结一下就两点:
1.回答问题必须要有自己的独特见解;
2.不要搞题海战术,深入透彻的准备一两个技术点就可以了;
5.资料获取
完美!