先介绍下自己吧,20届二本院校毕业,java岗,大四上开始实习,毕业一年,两年工作经验,今年秋招也是因为一些原因打算换份工作,我是10月初投的简历,boss投了60多家,面试7家,五家谈offer,一家因为不合适直接放弃了,最终选择是阿里,趁工作交接的空档期总结下整个面试经历吧,方便以后自己看,也是希望帮助到其他人
面试时间选择真的很重要,金三银四,金九银十真的不是没有道理的,可以在三月份和九月份早一些开始投,如果是社招工作一段时间了在年前一个月也是可以的,竞争会小一些,作者是国庆假期回来投的,秋招的尾巴,地点选的杭州,备选上海,大多数大厂比如滴滴,网易,同花顺,快手之类的都已经基本不招1-3年的了,因为1-3年很好招HC都招满了。。。所以想进大厂还是要提前点
避免不必要的麻烦就不写具体的公司名了,直接按领域说问了哪些问题吧,其中也加上一些今年面试的其他同学的问题基本涵盖今年,1-3年工作经验java面试常问问题了(其实其他工作年限也问这些,只不过问的深浅,面试官容忍度高低区别而已,比如应届生不会jvm调优啥的可以接受,但是工作3-5年不会就肯定不行了)
所有面试第一个环节都是自我介绍和聊项目,每个人的项目都不一样就不细说了,这个环节非常重要直接决定面试官的第一印象,介绍项目要突出重点,三年以上我不清楚,但是三年以内一定重点介绍技术亮点,业务只要让面试官了解场景就可以,毕竟面的技术岗,面试官一般对技术更care一些,业务再亮眼也只能侧面证明你的团队是核心团队和你个人关系不大,介绍时间不要太长,一分钟简单介绍业务,然后根据面试官care的点重点介绍
项目里用到的技术一定要达到精通程度,要是项目里用到的技术都不了解基本就凉透了
常问问题:
(1)说下你项目的亮点与难点
(2)说下你在项目中的角色
(3)这个项目是否获过什么奖
(4)做这个项目最大的收获是什么
最最常问的问题,上到阿里下到外包都问,常问问题:
(1)jvm运行时内存模型基本必问,就算不直接问,问jvm其他问题或者jvm基础时你也可以扩展说
(2)垃圾收集器
主要说了cms和g1,Shenandoah和zgc你可以问下面试官用不用说,小公司面试官不一定知道。。如果你cms和g1说的很好,基本你这么问面试官就知道你肯定会也就不让你接着说了
(3)jvm调优经验
这个大厂基本都问,最好真的调过,没调过就得背案例了,然后监控的命令什么jmap、jstack等等都得知道怎么用,还有各个区域报oom场景、经常fullgc场景以及怎么解决都会经常问
(4)jvm收集算法
一般都配合收集器去说,这个就要看你jvm基础了,相关的问题就比较多了,比如什么对象可以作为gc roots,三色模型以及并发收集问题怎么解决了之类的
(5)类加载
比如双亲委派模型,热部署相关
基本必问
(1)redis使用场景和工作中的应用(每个数据结构都准备至少一个场景,最好是工作中真的用到)
(2)rdb和aof
(3)主从、哨兵、集群(看下自己公司用的什么,被问到过)
(4)穿透、击穿、雪崩
(5)分布式锁(会几种实现说几种尽量扩展)我是lua脚本实现
(6)缓存和数据库数据一致性方案(之前文章里有)
(1)索引
重中之重,问mysql必问,常见问题:最左匹配原则(会出题),什么时候不会走索引,回表相关问题,B+树结构
(2)执行计划
参数都看看,基本也是配合着索引答
(4)mysql缓冲区
之前文章里有可以自行看下
(5)binlog,redo log
非常重要,上限很高
(6)mysql的事务隔离级别、行锁、表锁、间隙锁、意向锁
(7)mvcc非常重要,主要还很难理解
具体可以看mysql--锁_zhang09090606的博客-CSDN博客
(8)innodb和MyISAM区别
(9)mysql乐观锁悲观锁
(10)分库分表
(1)AQS源码
基本所有多线程相关的都离不开AQS,虽然在我面的公司没有直接问到AQS源码的(我朋友面有问到的),但是问其他的基本都是需要用AQS源码去回答
(2)线程同步,synchronized和其他锁
synchronized主要是锁升级,其他锁结合AQS源码答就可以
(3)JMM内存模型与volatile
(4)线程池
重中之重基本必问,源码看看
(5)线程计数器、线程屏障、信号量
笔试里可能会用到,面试也就问下原理和区别啥的
不会就凉
(1)jdk、jre、jvm区别
(2)基本数据类型有哪些(别笑,大厂真题。。。。)
(3)equals和==和hashcode区别和原理
(4)集合
这个也很重要,网上贼多,提前准备下,多扩展些,结合场景和源码说,例如队列可以扩展到堵塞队列,堵塞队列又可以扩展到线程池,还可以扩展到延时任务
(5)元注解/自定义注解
(1)spring就被问到过如何解决循环依赖
(2)springboot就被问到过springboot启动流程
(3)朋友被问到过bean的生命周期,结合源码答就可以了
mq就要看你简历上写的你会啥mq就问你啥mq
(1)经典灵魂三问:
怎么保证不丢数据
怎么保证不乱序
怎么保证不消费到重复数据
之前kafka专栏里有答案,从生产者、消费者、kafka broke三个方面回答以上三个问题
(2)怎么更改偏移量,怎么消费指定偏移量
(3)topic、消费者、消费者组、分区概念
(4)kafka为什么快
我简历写的了解,就被问到过选举机制
原公司基本不用简历里没写。。。有公司问到我就随便说了点理论再追问就摊牌基本也就不问了
因为项目里用到了大量的设计模式所以介绍完项目也就不问我设计模式了
(1)分布式事务
(2)一致性hash算法
(3)IO模型
只说我的观点哈,每个人情况不一样
1.软实力有时比硬实力更重要,如沟通能力,表达能力,逻辑能力,大厂肯定不会想要一个只会写代码不思考的工具人,软实力就得工作平时多锻炼了,多参加些公司的活动,多技术分享之类的,甚至写博客也是一种锻炼方式,锻炼总结能力
2。回答问题时要多扩展些,比如问你redis有哪些数据结构,错误回答是:有五种基本数据结构string、list、set、zset、hash以及四种扩展数据结构。。。。。
正确回答是:
有string,工作中我们一般用它来缓存一些配置以及热点数据减轻数据库和第三方接口的压力,并且还会用它来实现分布式锁,然后还可以扩展说下分布式锁
zset工作中曾用来去实现延时任务,list工作中用它来。。。。。
这样回答完事之后面试官就会觉得你是真的用过而且对redis非常熟,我面试的时候很多家上来问我这个我答完后他就不问我其他关于redis的了而且觉得我redis很好,如果只答问题本身那么面试官就会怀疑你是不是只是背过面试题,好的面试官会追问,有的可能直接下个问题并且觉得你回答的不好
3.介绍项目可以吹的大一些,把脑子里想的说成已经实现了,但是吹的部分一定是你会的,如果被问不会了就凉凉了
4.自信、谦逊、不卑不亢,不会的就大大方方承认不要不懂装懂。很多面试官都很讨厌这样的
以上就是我此次面试的新的,希望大家都能拿到自己中意的offer
想看阿里详细面试流程的可以看上篇文章
双非秋招四面阿里真实经历分享(已上岸)_zhang09090606的博客-CSDN博客