前言:这篇是我自己从春招到秋招上岸以来面试时被问过的一些问题的子集,这里面的问题是我自己觉得印象比较深,比较常被问到的,每一点都标注了我自己针对这个知识点的重要程度的看法。需要说明一下的是,看面经是有用的,没错,不管是看面经还是背面经都是有用的,我这里说的有用并不单单是指能够让你通过面试官的考核进而获得offer。正如我们所知道的,大学教育并不是以就业为导向的,很多大学教育依然是基础教育,每一个方向都会教一点基础。所以如果当大三大四开始找实习的时候,我们需要自己去扩展学习,而面经就是一个很好的学习方向,比如Java的内存结构,JavaGC等等,我所列出来的几个点仅仅是这些知识中很基础的概念,真正想入门还有很长的路要走,另外,就算找到工作也仍然要学习,程序员这个行业注定无法停止学习的。
1. Java的GC(如果面试官比较一般,大多都问到这个)
- 引用计数法,可达性分析
- 新生代,老年代的GC过程
- GC算法如标记-清除,标记-整理等
2. Java的内存结构(同上)
- Java内存分为几个区,是否是线程私有
- 各个区具体都是用来放哪些数据?有哪些特殊情况
- JDK7和JDK8的内存结构有什么区别?
3. HashMap(同上,多看别人的源码分析,不要老是自己啃源码,源码很长很复杂的)
- HashMap的内存结构是怎么样的,怎么处理地址冲突,链表使用头插法还是尾插法?为什么?
- HashMap的get和put方法是怎么实现的?什么时候会扩容?怎么扩容?为什么容量一定是2的次方?(这几点比较少被问到)
- HashMap是线程安全的吗?为什么?(为什么不安全这部分比较少被问到,可以当作了解)HashTable呢?
- JDK1.8相比JDK1.7的HashMap有什么不同,有什么好处
- HashMap和 HashSet有什么区别?
4. ConcurrentHashMap(问到hashMap的话基本都会问这个)
- ConcurrentHashMap和HashMap有什么区别
- ConcurrentHashMap是怎么实现线程安全的?
- JDK1.8相比JDk1.7的ConcurrentHashMap有什么不同,为什么要这么设计
5. 多线程(一般重要,记得美团和阿里问过这个)
- 多线程的实现方法有几种?各有什么特点(阿里问了这一点和下面那点)
- 为什么要使用线程池,常用的线程池有几种?各有什么特点,你常用哪一种?为什么
- sleep,join,yield,wait的区别?
- ThreadLocal源码看过吗(基本没问到,不过也不难,有时间可以看看)
- 面试题:写3个线程,使得三个线程顺序输出ABC(美团一面最后问了这个)
6. 锁机制(经常问到)
- synchronized关键字的原理,修饰方法块和方法时又什么不同?
- volatile关键字的原理,可以保证原子性吗?
- synchronized和volatile的可见性比较 (比较建议看这篇,下面这篇有点深,如果问到volatile时能够和synchronized联系起来比较会给人一种知识面比较广的感觉,不会让人觉得是在背面经)
- 全面理解Java内存模型(JMM)及volatile关键字
- ReetrantLock和synchronized有哪三点区别?
- 实现同步有哪些方法?
- CAS算法,乐观锁和悲观锁的区别?
7. 网络(经常问到)
- 三次握手的详细过程,每次握手会发送哪些报文,进入什么状态(重点)
- 四次挥手的详细过程,每次挥手会发送哪些报文,进入什么状态(重点)
- 为什么要三次握手,两次为什么不行(重点)
- TCP和UDP有什么区别?(重点)
- 计算机7层模型和5层模型各自是什么?(重点)
8. 进程与线程
- 进程和线程的区别是什么
9. 数据库(这部分也是常问的)
- 事务的特性有哪些?事务会出现哪些并发问题?脏读幻读分别是什么?
- 隔离级别呢?mysql默认使用哪个隔离级别?这几种隔离级别是怎么实现的?(最后一个疑问不算重点,很少问到这么深)
- 事务有哪些传播行为?(很少问到这个)
- 索引是什么?mysql的索引使用了什么数据结构?为什么?有什么特点?(偶尔问到)
10. 排序算法(基础,这个不常问,不过要是问到了不会就基本凉了)
- 知道哪些排序算法,各自的时间复杂度和空间复杂度都多少,稳不稳定?适用于哪些情况
- 写几个你擅长的排序算法看看
11. 设计模式(基础同上,问到如果不会基本是凉凉)
- 面向对象设计7大原则是哪些?
- 知道哪些设计模式,用过哪些,写几个出来看看
12. 类的加载(很少问到这个,会加分)
- 说一下类的加载机制
- 双亲委派机制是怎么样的
13. 集合类了解吗?说一下ArrayList和LinkedList的区别(基础)
14. 基础(基础)
- static,final关键字的使用和规范
- String,StringBuilder和StringBuffer的区别
- 重写和重载的区别,可以通过返回类型重载吗,为什么?
- Java的基本数据类型有哪些?
- String s = "abc"和String t = new String(“abc”);有什么区别?
15. 反射(很少问到这个,不过反射是Java的核心基础)
- 反射是什么,有什么意义,可以做什么?
- 反射的应用场景有哪些?
16. 框架(如果简历上的项目用到了spring最好会原理)
- BeanFactory 和 ApplicationContext 有什么区别?
- 说说Spring IOC和Spring AOP(基础)
- Spring AOP是怎么实现的?动态代理是什么?(基础)
- Spring MVC的执行流程是怎么样的?(如果用了SpringMVC必须会这个,同样基础,问了不会就基本凉了)
一些觉得还不错的博客文章:
关于应届生写简历
面试最后一问:你有什么问题要问我的吗
有哪些让程序员受益一生的建议
为什么我建议1-3年的程序员看看这篇文章
并发的HashMap为什么会引起死循环