一、项目
1、明确你的项目到底是做什么的,有哪些功能
2、明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用
3、明确你的模块在整个项目中所处的位置及作用
4、明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术
在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况下(这一定是扣分项),可以通过这种方式来一定程度上地弥补并且增进面试官对你的好感度。
二、专业技能
1、基本语法
这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。
2、集合
非常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。
集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。
(1)ConcurrentHashMap的锁分段技术
(2)ConcurrentHashMap的读是否要加锁,为什么
(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器
3、设计模式
(1)你的项目中用到了哪些设计模式,如何使用?
(2)知道常用设计模式的优缺点。
(3)能画出常用设计模式的UML图。
4、多线程
Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。
假如有Thread1、Thread2、ThreaD3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?
另外,线程池也是比较常问的一块,常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际一些的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适。
5、JDK源码
要想拿高工资,JDK源码不可不读。LZ,String的hashCode()方法是怎么实现的,JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:
(1)List、Map、Set实现类的源代码;
(2)ReentrantLock、AQS的源代码;
(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的;
(4)线程池的实现原理;
(5)Object类中的方法以及每个方法的作用。
6、框架
项目中使用的框架,一些场景用框架怎么做,MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习框架的使用细节自然都不成问题。Spring AOP的实现原理,
7、数据库
union和union all的区别、left join、数据库性能的优化,SQL基础和SQL优化的内容
8、数据结构和算法分析
数据结构和算法分析,数组、链表是基础,栈和队列AVL树、红黑树,二叉查找树、平衡树,AVL树和红黑树的区别。算法分析,有兴趣的网友朋友们也可以去看一下Collections.sort方法的源代码,
9、Java虚拟机
(1)Java虚拟机的内存布局
(2)GC算法及几种垃圾收集器
(3)类加载机制,也就是双亲委派模型
(4)Java内存模型
(5)happens-before规则
(6)volatile关键字使用规则
10、Web方面的一些问题
分布式Session的几种实现方式。Session和Cookie的区别和联系以及Session的实现原理。
一致性Hash算法
最后,如果有兴趣有时间,建议学习、研究一下SOA和RPC,面向服务体系,大型分布式架构必备。
Java知道这些之后,一些隐藏之中的你也都会有所了解的,本文参考资源来自网站,千锋教育整理,侵权联系删除。