这是一篇我在知乎上面关于问题『你遇到过哪些质量很高的 Java 面试?』的回答,获得了部分网友的认同。
原文地址:
https://www.zhihu.com/question/60949531/answer/579261846
全文如下:
面试,从来都是一个随机性很高的过程。但凡是质量高的面试,必然是面试官根据面试者的回答,循序渐进,抽丝剥茧,横向纵向分别展开的。
那种,面试之前就订好了准备问哪些问题的面试官,按照自己的问题清单,从头问到尾,整个面试过程的质量不可能高。
我觉得,质量高的面试,就是从一个点切入,然后逐渐考察面试者对于这个点相关的知识体系的了解。
举几个例子
比如考察Java类加载相关问题:
什么是类加载?
双亲委派是什么?
为什么要双亲委派?
如何破坏双亲委派?
为什么要破坏双亲委派?
修改类加载策略要复写哪个方法?
知道模块化吗?
知道Java9的模块化技术吗?
jigsaw,jboss modules和osgi的区别?
ClassNotFound怎么回事?
如何解决ClassNotFound?
ClassNotFoundException和NoClassDefFoundErr区别?
比如考察计算机网络相关问题,一般从tcp/ip入手:
OSI七层协议?
三次握手?四次关闭?
为什么要三次握手,两次或者四次行不行?
Tcp和Udp区别?
粘包和拆包?
一次网络请求全过程?
什么是DNS?
负载均衡?
CDN?
页面响应慢如何排查?
SESSION?
SESSION和cookie区别?
没有cookie如何实现SESSION?
SESSION有没有限制?有限制怎么办?
代理和反向代理?
--------------------------------------
除了以上的情况外,还有一种聪明的面试官,从一个开放性的问题下手: 能简单介绍下您现在所做项目和过程中的技术难点或有遇到瓶颈吗?
下面就是一个面试官和面试者都比较优秀的情况下,一场关于分布式相关的高质量面试现场。
这种问题直接回答高并发分布式场景的数据一致性问题。(参考:关于分布式一致性的探究)
然后面试官问:如何解决的呢。
答:在并发方面考虑了乐观锁和分布式锁。在一致性方面不同场景使用了不同策略。
问:介绍下乐观锁
答:乐观锁巴拉巴拉(参考:深入理解乐观锁与悲观锁)
问:分布式锁如何实现
答:基于数据库,基于缓存,基于zk三种。然后再把三种方案的优缺点说清楚。(参考:分布式锁的多种实现方式~)
问:关于缓存和ZK了解多少
答:常用缓存,redis,memcached等。当然还可以说memcached容易被总来做DDOS攻击(参考:GitHub遭受的DDoS攻击到底是个什么鬼?)。ZK就简单介绍下原理,常用场景等。(参考:[高级]Zookeeper介绍(四)——Zookeeper中的基本概念)
问:数据一致性怎么保证
答:先扯一段CAP和BASE(参考:分布式的CAP理论 ),再说说2PC,3PC(参考:深入理解分布式系统的2PC和3PC)以及有啥缺点,过度目前常用的策略。比如最大努力通知,可靠消息最终一致性。TCC分布式事务等。在说下业务场景都有哪几个。 最终是如何选择的。最后再说一句:当然,数据一致性的最后一道防线还是人工介入。要做好数据对账,实时数据检验以及报警。保证可以及时发现线上问题。