【无内鬼,无广告,无推销,纯干货,放心入】
从毕业到现在,我面试过很多家公司,也面试过别人,面试者和面试官的心态我都经历过;
从最初啥都不懂,到现在能在大厂帮公司面试别人,多多少少还是有些经验和收获的,我是一个乐于分享的人,这一路走来的心得体会都在下面了,纯手敲,希望能帮各位少走弯路~
面试是一门艺术,技术重要,但重要的不止技术
一、准备工作:
作为Java程序员,你必须要掌握的技术栈:java基础+spring生态+数据库+项目+中间件+日常运维+前端基础
后两个只作为加分项,毕竟稍大点的厂都有独立的运维、前端,但不排除有些大厂喜欢一条龙开发,这时候你要是会前端、再会点基础运维,这offer不就来了
Java基础:没啥好说的,基础不好啥都白搭
我相信这篇 Java核心知识点整理 但凡理解80%,都没人说你基础不好,当然你得真正理解,不要硬背,很多朋友给我反馈过,通过看我的博客跳进了京东阿里等大厂,别人可以你也可以; 其中数据集合很重要,hashMap、arrayList等的底层实现你要了解,和他们对应的线程安全类你要知道,hashmap的扰动算法是很值得学习的(就算不是为了面试也有必要学习),传送门; 除此之外,需要了解二叉树、栈和队列各自的特点,家里有条件的最好自己实现一下; 稍微进阶一点,自定义线程池的那几个参数一定要搞清楚,线程池初始化后,从第一个任务进来,到后面触发拒绝策略整个过程都要搞清楚,关于线程池可以看看这个 一个demo让你彻底理解线程池工作流程; 然后并发编程也要懂点吧,至少要知道为什么会产生线程安全问题,一般怎么避免; 说到并发编程,多个线程间如何调度要知道吧,关于这点,这篇博客请你花时间好好看看 多线程进阶
spring:熟悉一些常用注解,都起什么作用?怎么使用?
spring两大门神ioc和aop是必须理解的,这是spring容器实现对象管理的基础; 大概率会问自动装配原理,这个问题很能看出你对springboot的理解程度,建议在启动类打个断点,跟踪一下springboot的启动流程; 另外,家里有条件的话可以自己写个starter,然后在另一个项目中引用,这个过程中你会学到很多东西,相信我; 之前写过一篇讲aop的,可以看看,基于springboot实现一个简单的aop
数据库:熟悉一些市面上常见的数据库
大表优化,事务特性,事务失效场景,索引失效场景,最左匹配原则,慢查询优化,怎么看sql执行计划,索引相关(索引结构、几大索引的区别,什么是回表查询,如何避免); 数据库中mysql必须要熟悉,毕竟普及度最广,从一个sql提交到返回结果,它的执行流程要了解,其中sql优化器是重点 关于性能优化,之前写过一篇,虽然场景单一,也可以看看
疯狂试探mysql单表insert极限:已实现每秒插入8.5w条数据
项目:一定要熟悉自己的项目,项目背景、功能模块、涉及技术栈,以及搞清楚自己负责了哪些模块
准备1到2个项目亮点(所谓亮点,并不一定是高并发、多线程、分布式相关这种,只要不是简单的crud,都可以是亮点,千万别说没有,如果实在太简单你就夸大点,你记住,项目是你的,面试官不可能比你更懂你的项目,一顿忽悠就完事儿,其实面试就是你和面试官互相吹牛逼的过程); 你做了什么?解决了什么问题?过程中遇到什么困难?怎么解决的?最终达到了什么效果?面试要是问到项目你就一口气给他说完,学会抢答,别等面试官问一个你答一个;
中间件:主要是缓存和消息队列,缓存代表redis,消息队列代表rabbitMQ、kafka
其中redis的五大数据结构你要搞清楚,每种结构一般用于什么场景,有条件的可以在本地测试下每种结构的set/get,看下你存的数据在redis中长什么样,如果你懒,我已经帮你们测试过了,传送门,但最好还是自己操作下; 然后就是缓存数据库的一致性问题,还有缓存雪崩、穿透如何避免,建议了解下布隆过滤器,一般提到redis都会扯扯它; 消息队列方面你要搞清楚为什么使用消息队列,它解决了什么问题,什么场景下会使用到消息队列,进阶点的会问你如何保证消息的可靠性,也就是如何保证消息不丢失,不重复消费;
日常运维:不需要多深入,但要保证够用
别的不多,怎么查看日志你要会吧,怎么在日志中过滤想看的信息要会吧; 服务器安全知识要稍微懂点吧,比如防火墙、用户权限啥的; 然后稍微进阶一点,cpu拉满了要知道怎么排查吧,oom了要知道从哪儿找原因吧; 再进阶一点,老大突然让你搭个kafka集群,你不可能回一句我不会吧,多学点总没坏处,技多不压身 推荐几篇运维相关的,简单看看,里面很多命令都是常用的
前端能力:这点见仁见智,看你面的部门有没有前端业务需求
说是加分项吧,有时候又能成为公司决定要不要你的关键点,说是必须掌握的吧,你又是个臭搞Java的; 现在很多部门都不喜欢招前端,因为前端很难招,如果你自己能独立完成前端开发工作,那真是极好的,目前两大框架vue和react,至少要知道其中一个怎么用吧; 我知道css调试样式会要了老命,但主流的ui框架要会用吧;
【简历】:不要小看简历,简历和技术一样重要
不要只整个一页,即使你是应届生也要凑个两页,但也不要太多,正常控制在3-4页的样子差不多; 内容:你的个人信息,你会什么,你做过什么项目,项目有什么亮点,你的优势在哪里; 一定简明扼要,精简干练,第一时间让hr和面试官看到你的优势;
最后
程序员的简历不需要花里胡哨
不需要花里胡哨
花里胡哨
但是、内容写好后一定要排版,该对齐的对齐,该加粗的加粗
二、简历投递
推荐某某直聘,把自己的在线简历好好整理下,和自己的简历保持同步,hr看简历会先看在线简历 boss直聘有个打招呼语,建议自己编辑一段话,系统默认的人家hr早看腻了,只有你的消息和别人不一样,hr小姐姐才会认为你是认真看过他们的岗位描述 有件事你需要知道,一些企业不会在boss直聘这种招聘平台发布招聘,需要去他们官网自己找,比如很多银行、某些国企
三、约面试
建议一开始不要投自己心仪的公司,约个备胎公司找找感觉,总结下面试情况,一定要总结; 如果你能碾压这些小白鼠公司的面试官了,就试着投想去的公司,但要注意,越想进去的公司,面试越紧张,亲身体会,面试之前注意调整心态,最好是有了其他offer再投喜欢的公司,这样你更有底气
四、面试ing
- 首先你要搞清楚,面试本来就不是公平的,你在明,面试官在暗,面试官自己也知道这点,所以问题答不上来是很正常很正常的,不要觉得一个问题没答上你就凉了,面试官肯定是看你的整体水平;
- java基础一定要过硬,一定要跟面试官展示你的学习能力,菜没事,但我肯学;
- 面试过程中语速要慢,把自己想说的表达清楚,紧张是肯定的,所以让先约备胎练练手,其实就是练心态,找到适合自己调整心态的方法,我就喜欢在面试之前可以找个没人的地方自言自语瞎逼逼几句,给自己打打气壮壮胆;
- 自我介绍要说重点,你是哪儿人、多大了、毕业多久了(如果是科班,一定要大声说出来!!!)、做过哪些项目;
另外,不要抖脚、不要迟到
重点补充:
- 如果遇到不会的,不要瞎编,不会就说不会,就算你糊弄过去了,进公司要是真让你做你咋整,坑了公司也坑了自己;
- 面试官是想通过面试了解你,所以不要问什么答什么,要学会展现自己,有些没问到的你也可以主动说,比如你搞过线上jvm调优、设计过数据库表、排查过线上问题等等等等,这些亮点你得展示出来,不然面试官怎么知道。
祝各位offer拿到手抽筋
ok我话说完