持续学习&持续更新中…
0、重点
-
准备常见的面试问题及常问的技术
- arraylist/hashmap的实现原理 ,冒泡排序/快速排序、 单例模式/工厂模式/动态工厂、谈谈你对面向对象的理解, 事务ACID/隔离级别 ,Spring IOC/AOP等
- MySQL,Tomcat,Redis,MQ等的不足及如何改进(Tomcat最大连接数超了怎么办,MySQL放不下数据怎么办…)
- JVM、并发、设计模式、MySQL、JVM等技术栈的调优
- Spring、SpringBoot的实现原理等
- SpringCloud、Netty、Nacos、Seata等的源码
-
自己简历中出现的技术
- 优点
- 缺点及如何解决
- 使用场景
- 原理
一、注意事项
-
自我介绍时:表达流畅
-
工资:不要写面议 ,至少给个薪资范围,如1.5w - 2.0w【去面试网站搜相应地区,相应工作时间的大概薪资范围】
-
简历:1-2页(每一页写满,尽量不要空半页);多使用“数字”:几个项目、几篇博客 、排名第几
-
细节:毕业时间、年龄、工作履历、期望薪资等要相互匹配。例如,不要“毕业5年”,但“工作履历加起来只有3年”。
-
沟通:注意人文素养 ,不要抱怨问题, 要体现解决问题、愿意承担责任的态度;
-
体现:个人解决问题的能力、团队感、沟通能力
二、技术面试
基础【必须】
1
- 找常见面试题去看
- 一定要有自己的思想,自己的理解
- 常见的题一定要会,比如:arraylist/hashmap的实现原理 ,冒泡排序/快速排序、 单例模式/工厂模式/动态工厂、谈谈你对面向对象的理解, 事务ACID/隔离级别 ,Spring IOC/AOP 等
- 总之,要在自己写答案时,向面试官传达 “我的答案是自己写的,我是一个有独立思维的人,而不是网上抄的”。
2
-
坑:“精通” (几乎没人敢说“精通”哪一门技术)
-
建议:掌握、熟练;理解 ,会使用
技术列表
1
-
坑:个人掌握的技能过于“标准化”,明显就是培训、或者看某套视频学出来。如:java + 数据库+ web前端 + jsp/servlet + ssm + boot/cloud
-
一般而言,自学成才的人比培训出来的学生更具有独立思考的能力,因此在相同的条件下,企业更喜欢没有参加过培训的学生
-
建议:写上2-3门非培训机构标配课程,如service mesh、netty等(最好写与高并发、分布式有关的,技术的名字相对“少见”但又很重要的)。
-
对面试而言,这些“少见”的技术,只要你写上了,并且能把其中任意一个核心知识点说明白,就已经非常加分了
3
-
坑:简历上写一大堆牛B的技术,显得自己很厉害
-
建议:技术点宁可少写,也别多写。面试官经常都很忙,没时间精心准备对你的面试,甚至有时候是一边神游一边在提问,所以很可能从你简历里随便挑几个你写上的技术来问你。因此简历上写到的技术,都很可能被问到。
-
少些一点技术,但是,每个都能答出来,比写一大堆,问什么不会什么好多了
项目【重点】
坑
- 项目名叫“Xxx电商项目”、“Xxx管理系统”,这些“项目”简直就是培训机构的标配,缺乏真实项目的感觉
建议
(1)提前准备好回答“项目”的剧本。
“你做过什么样的项目?”或者根据你简历中的项目来提问,几乎是技术面试官必须做、并且非常喜欢做的事。
所以,如果你没有充足的项目经验,就提前准备好台词吧。
**比如项目中用到的技术的缺陷以及如何解决**(MySQL,Tomcat,Redis,MQ等)
(2)关于项目,经常会被问到的点是:某个技术本身的不足,以及如何弥补。因为这样问,能够检验你是否真的做过这个“项目”,至少能说明你是否深入思考过。举例如下:
a.你项目中用到了Mysql :如果数据超过的Mysql的容量怎么处理?(弥补MySQL自身的不足)
b.你做的这个项目是高并发吧?缓存用了吗?在哪些场景你见过缓存失效?怎么解决?(还是在问你缓存自身的问题如何解决)
c.看你的项目用到了MQ?MQ可以用来解耦合,具体讲讲你项目中到底哪些场景用到了解耦合?(在考你的项目是真的,还是假的)
(3)项目的重难点。每个项目都有自己的重难点,这些重难点也就是必问点,
举例如下:
a.分布式项目:如何共享数据【比如session,多系统文件上传到哪里了】?
什么是CAP原则?分布式锁、分布式事务、分布式缓存怎么实现?
b.高并发项目:几级缓存,如何限流,如何熔断,用docker了没?
(4)真实性:实际的使用场景
a.简历上写的“用到了人脸识别技术” :哪些场景用到了?
人脸识别是自己公司写的,还是调用的三方API?
自己写的话,用的什么算法?调用API的话,每次调用需要付费多少钱?识别时的光线强度有什么要求?
b.多线程、设计模式、算法:用来处理什么业务?场景?
c.大数据的项目:数据从哪来的?
d.如何设计表?外键?一对一? 一对多?
e.项目能否访问?
(5)重要
-
项目周期:半年以上
-
简历上的项目个数:3个左右(如果是才毕业3年以内,写1-2个就可以了)
三、加分项
1.高并发/分布式/调优
-
a.多线程(juc、aqs、线程安全、锁机制、生产消费者、线程依赖问题)
-
b.数据处理SQL优化 , 常见高性能数据库架构(如mysql+mycat+haproxy+keepalived)
-
c.JVM调优
2.实际的解决问题能力
-
这点需要自己在面试时想办法将话题引入。
-
例如在回答项目时,主动说一下你在做项目时遇到过什么问题。具体是如何发现、排查、分析、解决问题的。
3.绝杀
-
有过书籍、论文等出版物在github发布过项目(star很多)
-
博客、微信公众号、 个人在阿里云等部署的可访问项目(这一条大部分人都能做到)。
-
研究过JDK/spring/mybatis等源码
参考
颜群: JAVA面试指导.