作为 java 程序员,在金三银四季你遇到过哪些质量很高的 java 面试?
从阿里的常规 java 技术面试角度说一说,一般都是由浅到深去问,思路是先考察基础是否过关,再通过深度考察是否有技术热情和深度,同时可能会通过提出一些质疑和挑战来考察候选人是如何与不同意见进行沟通
基础知识:考察基础的时候一般都不会太深入地去问,主要目的是考察知识面,如果发现候选人很多都不知道可能就不会继续进入下一步的考察。
JDK 集合、BIO/NIO、annotation 等
虚拟机 内存模型、类加载原理
数据库 索引、事务、死锁 等
并发 并发优缺点、内存可见性(volatile)、锁、同步、线程池框架
网络 TCP/HTTP
常见设计模式
深入考察:深入考察的时候不会像考察基础一样面面俱到,而是会在某个点上深入去聊,这个点的选择可能是让候选人自己选一个点,也可能是面试官根据简历内容去选,主要目的是考察候选人对某个技术点的深入掌握程度,技术是相通的,如果一个人能在某个技术点上达到很深入的程度,其他点上通常也不会有太大问题;相反如果某个人在他声称很了解的点上都支支吾吾、一知半解多半可以判断此人要么技术能力有限、要么遇到问题不愿深入考察、浅尝辄止。
JDK ConcurrentHashMap 如何提高并发度、NIO 的原理(零拷贝、堆外内存),优缺点
虚拟机 包冲突,类冲突的形成原理及解决办法(可能会引申 JDK9 的模块化设计)、TCCL 的存在价值
分布式 一致性哈希、RPC 原理和设计(通信协议、序列化方式、超时机制等)、负载均衡、分布式缓存架构设计、分布式消息、分布式事务、paxos(这个可能只有在技术专业型很强的职位上会去问)
数据库 数据库性能优化(慢 sql、索引优化、大事务、内核参数调优),也可能会把一些工作中碰到的诡异场景抛出来问
并发 非阻塞锁(CAS)、并发对编译器优
化的影响、线程池调优、也肯会把工作中碰到的并发问题抛出来问
技术趋势、docker、微服务等新技术发展历史、带来的福利
[](
)如何准备
===========================================================================
首先要声明的是,最好的“准备”方式一定是平时多积累、遇到问题不要逃避或者讨巧、深入去思考并解决,在解决一个个问题的过程中积累解决问题的能力,形成自己的知识体系。所以这里说的如何准备不是说临时抱佛脚,而是如何能通过提前准备把自己平时的积累展现出来,不因为临场的表现影响面试官对你的判断。
针对以上列的知识点思考答案甚至扩展,如果能知道大部分,深入一部分就很好,这个过程主要是整理自己的知识体系
回忆整理简历和过往项目中的”难点“、”亮点“,因为这些是用来区分候选人很重要的点,合格的面试官一定会问类似于”你在项目中经历的最大的技术难点是什么?“,整理一下思路,不至于在面试时候因为时间久远而回忆不起来细节影响面试效果。
沟通过程中做到有理有据,不要过于自大,也无需刻意迎合面试官。沟通的本质是信息透明化,工作中也许我们无法做到完全客观公正,但是在技术问题上坚持自己的客观和原则是我认为技术人应该坚持的品格,我这里说的坚持不是一根筋的固执已见,而是根据共同认可的事实进行逻辑推断得出的观点。长远来看这种品格会带给你足够的技术影响力和回报。
[](
)分享进阶路线
=============================================================================
在这里也给那些技术想达到这个高度甚至想往架构师发展的 Java 程序员提供一份详细的进阶路线图,主要针对 2 到 5 年及以上工作经验的 Java 开发人员,从广度到深度架构图还比较全面的,里面的技术包涵了 Java 高并发、微服务、源码分析、源码分析、高性能、分布式等技术,这些也是目前互联网企业比较常用的技术,那么来详细看看。(文末有高清完整树图领取)
1.源码分析
2.分布式架构设计
3.微服务架构设计
评论