3月java面试总结

243 阅读5分钟

前言

这段时间的面试总算是告一段落了。回想起近半个月的面试体验,感觉有必要总结总结经验得失,也为以后留个备忘。这段时间共经历多次面试+电面。公司有大有小,有产品也有外包,面试形式也多种多样,真可是体验了一番。最大的感慨还是感觉自己技术体系有欠缺,不完整。书到用时方恨少真是面试时的最佳描述了,今后还是要多学多实战。

再者推荐两本书吧,一是《深入理解java虚拟机 第二版》,这本书简直是java进阶必备啊,从我经历的面试来看,除了某些外包公司外,还真没哪个公司不问虚拟机垃圾回收的。书中讲的也很好,十分推荐。

还有一本是 《java并发编程的艺术》,这本书是讲多线程并发相关的,也是进阶必备知识。之所以没说《Java并发编程实战》是因为感觉它有些晦涩,如果先读前者再读的话可能会好些。

知识汇总

面试中涉及到知识有java基础知识,JVM、设计模式、并发与多线程、分布式相关、数据库、缓存、算法等,整理如下:

基础知识

1. HashMap、ConcurrentHashMap相关

HashMap是必问的,主要问到的点有HashMap的原理及结构(注意java7和java8的区别),HashMap和HashTable的区别,是线程安全的吗,HashMap在多线程中怎样发生的死锁?总体来说HashMap问的挺多,需要掌握到源码级别。ConcurrentHashMap也有机率会问到,一般问的是它怎样保证线程安全(注意java7和java8的区别)。

2. IO/NIO

两者的概念、区别,使用场景

3. 面向对象相关

面向对象三大特征,抽象类和接口的区别,值传递和引用传递理解等。

还有值类比较相等,如Integer,主要考察Integer缓存策略。

4. 类加载顺序

在笔试题中遇到过,一般是子类继承父类,在静态方法和构造函数打印语句,求执行顺序等。

5. 页面优化

勉强算放基础吧,一般会问一个页面加载很慢可以从哪些地方排查,考经验的。

JVM

JVM内存结构划分及常见的垃圾回收算法算是必问的了,需了解

  1. JVM内存结构及各部分作用(必问)
  2. 常见的垃圾回收算法(上面答了就必问)
  3. 了解常见的垃圾回收器(如CMS、G1等)
  4. 对象被回收的条件,可作为GC Root的对象有哪些?
  5. 新生代向老年代晋升的条件及过程描述

设计模式

常用设计模式及与现实场景、框架的结合

  1. 常见的设计模式有哪些?
  2. 说一个你熟悉的设计模式并画出类图。
  3. 代理模式的使用场景?
  4. Spring/Spring MVC用到了哪些设计模式?

数据库与缓存

  1. MySQL有哪些存储引擎?有哪些区别?(主要是问InnoDB和MyISAM底层实现及区别,必问)
  2. 除了主键索引外,还有哪些索引?(普通、组合、唯一、全文等)
  3. 一条sql很慢可以从哪些方面排查(数据库优化,这个几乎都有问到)
  4. 数据库表设计,项目近期的表或者设计一个场景来设计表,哪些字段可以加索引等
  5. mongoDB储存机制
  6. redis/memcache区别
  7. 在你的项目中,redis都缓存了哪些数据?设置了多大的过期时间?
  8. redis是单线程的吗?为什么设计成单线程?(重要)
  9. 怎样使用redis实现分布式锁

多线程

多线程是重点,主要有java并发包及java内存模型

  1. java实现多线程的方式?除了继承Thread、实现Runnable还有吗?(Callable、线程池)
  2. java内存模型(工作内存、主内存那块,必问)
  3. volatile的作用及原理(必问)
  4. java并发包(java.util.concurrent)都有哪些类?
  5. java实现同步都有哪些方式?(重要)
  6. 线程池实现原理(重要)
  7. ReentrantLock实现原理?可读写锁呢?
  8. ThreadLocal原理,使用场景
  9. notify/wait 通知阻塞机制

数据结构与算法

数据结构这块一般结合算法来考察,主要是栈、链表、Map、二分查找、B/B+树等

  1. B/B+树结构及区别(一般在mysql储存引擎那边问,或给你几个数让你构造B/B+树)
  2. 二分查找算法、归并排序(常用算法都应掌握)
  3. 怎样使用栈实现四则运算,说说思路
  4. 手写一个链表,添加、删除节点的方法

### 框架相关

  1. Spring的Ioc、AOP(老生常谈,必问)
  2. Spring AOP的实现方式,使用场景(重要)
  3. Spring MVC整体流程(必问),其中的关键类有哪些?
  4. 过滤器和拦截器的区别
  5. mybatis中#{}${}有哪些区别?
  6. netty实现原理
  7. @Resource和@Autowired区别?分别来自哪里?

分布式

  1. zookeeper实现原理?是怎样保证数据一致性的?(重要)
  2. 分布式锁有哪些实现方式?(重要)
  3. rpc理解
  4. dubbo是怎样实现的?为什么要用dubbo?

分布式这块我不太熟,所以问的也不多,重点集中在对zookeeper的理解上了。

其他

其他一些就和项目以及你的个人简历相关了,介绍一下最近的项目,有哪些难点,怎样解决之类的,或是你简历中有其他可供提问的技术等,因人而异了。

总结

问法多种多样,核心原理是一样的。从面试问的题来看,JVM、多线程和数据库是每次都会涉及的东西。另外,有一定名气的公司都会重视基础,无论大小。今后的学习方向还应从实战入手,深入架构原理分析。