五个面试题示例
问题 3:介绍 Java 垃圾回收器的基本原理
3重点剖析
Java 语言最著名的特性就是自动垃圾回收(GC)
很多生产上 Java 应用的问题(尤其是 性能和内存问题),大都和 GC 有关
对于一个实战型的 Java 程序员来说
在生产实践 中一定会不止一次地遇到 GC 问题,所以对 GC 的理解程度,基本可以作为衡量一个 Java 程序员是否合格的门槛
面试官基本要求
至少要把 Java 的分代垃圾回收机制讲清楚
否则差不多就可以判定“不合 格”了
对于有些能讲清楚的候选人,我还会进一步延伸
让他解释什么是 GC Root
解释 Java 程序中有哪些可以作为 GC Root?
甚至深入到如何直接操作堆外内存(offheap) 的程度
GC 的基本原理可以背诵
但是对于延伸的知识
如果没有拓展阅读或者实际动手实践过, 你一般很难回答上来
问题 4:介绍 HashMap 的实现原理
4重点剖析
在我们日常编程的中,除了 List/Array 以外,用得最多的数据结构基本上就是 HashMap 了
在大学时 HashMap 也是数据结构课程中必学的一种基础结构(课本中称为“散列表”)
因此,我基本上都会问 Java 的 HashMap 是如何实现的
面试官基本要求
至少要把 HashMap 的内部数据结构实现和 get/put 算法给讲清楚
好一点的候选 人要能把装载因子(load factor)和再哈希(rehashing)給讲清楚
这个问题可以考查三个点
1. 你是否真的在一线写代码,因为只要是写代码就一定绕不开 HashMap
2. 对这么常用的数据结构,你是只停留在会用 API 的层面,还是说能够深入到内部算法实现?
3. 你在大学时有没有认真学习过数据结构,对这门核心计算机课程的态度如何?
问题延伸
既可以向 Java 集合框架 方向延伸
也可以向 Java 多线程方向延伸
HashMap 的基本原理并不难,但是延伸的内容如果没有实际动手实践过,你一般很难回答 上来
问题 5:讲讲 Web 应用程序中的 Cookie 和 Session 是什么关系?
5重点剖析
互联网应用大部分属于 Web 应用,开发人员或多或少会开发 Web 应用
Web 应用开 发中一个很基本的问题是理解 Cookie 和 Session
这个问题需要一些底层 HTTP 协议知识
理解 HTTP 是无状态协议
理解服务端和客户端 会话存储机制
问题延伸
Session 可以存储在哪些地方?
客户端?
服务器端?
缓存?
数据库?
粘性会话(sticky session) 是什么意思?
如何实现粘性会话?
分布式会话如何实现?
问题 6:你在生产实践中使用过哪些设计模式,是什么场景下使用的?为什么使用?
6重点剖析
随着一个工程师项目经验的积累,他会逐渐体会到软件设计中有很多模式性解决方案,也就 是所谓的软件设计模式(Design Pattern)
设计模式
是软件研发行业几十年实践后提炼出来的一些通用的设计方案
是比数据结构更高 一层的抽象
学习和应用设计模式可以帮助我们提升软件设计能力
工程师能力提升的一个标志
就是会开始注重设计模式的学习和积累
并且在实际项目中应用模式解决具 体问题
询问设计模式相关的问题
在实际项目中应用过哪 些设计模式(因为工厂和单例太常见,我一般会要求两者除外的答案)?
什么场景下使用的?
为什么要使用?
对于有模式使用经验的候选人
我会要求横向比较几种相关模式
策略(strategy)和模板方法(template method)模式的差异
代理(proxy)和装饰 (decorator)模式的差异
对这个问题的回答,可以看出侯选人项目经验是否充分,是否已经上升到模式性解决 问题的高度
问题 7:讲讲你最近开发的一个项目的业务背景和架构(或技术)
7重点剖析
这是一个开放性问题,考查目的并不在项目本身,而是看以下三点
1、侯选人近期是否还在一线参与实际项目?
2、侯选人的沟通表达能力,能否用简单的语言,给一个完全没有上下文的人,讲清楚自己开 发(或者参与开发)的一个项目的业务背景和架构。该问题也是后面软性能力考查的重要 参考
3、侯选人的技术热情,但凡有技术热情的侯选人,一讲到自己开发项目的架构或技术时,常 常会两眼放光,滔滔不绝,充满激情