以下文章来源于三太子敖丙 ,作者三太子敖丙。
前几天去阿里面试Java开发岗位,给的是P6,咱base毕竟低,胆小,没敢和hr去撕逼,argue就不说了,同时也是红线就不透露太多了。
说一下我大致情况吧,普通二本软件工程毕业,刚开始在一家小的创业型公司crud,随后进了一家独角兽(2b方向),也是crud。
经验3年不到,其实对我而言,优势不大,属于那种简历送给hr,还没机会给对应部门看,就被砍的那种,你懂的!
简历,最好能找大厂的小哥哥帮你看看,改到他们觉得可以过hr的法眼,让他们帮你内推,这样基本能获取到面试的机会,不然机会都没有,只能做大厂梦了。
简历最好有亮点,能够量化的东西,也别写的太浮夸了,明明是个小的系统,非要吹几百万的qps的话,即便简历过了,大佬面你时候,你吹不出来,你懂吧。
很多人其实和我差不多,天天crud的,哪有什么亮点?
有的,你要相信自己,你遇到过什么问题,怎么解决的,用了什么方法,效果怎么样的?
你把这个4连击想破头你都要想出来,组成一段话,你的亮点就出来了。
当然,亮不亮就看你平时了,实在没有,那你就回去重构系统,模块。
不然就最好别去面了,因为你啥都拿不出手。最简单的来说,就是产品经理提了什么奇葩的需求,你怎么解决了,你能巧妙的形容出来都是亮点。
关于简历这块的话,还是让大厂小哥哥帮你看看先。然后里面涉及到的所有的东西,你必须会“自圆其说”,你写了什么,你必须会,而不是充字数,要么别写。
我碰过一个dd面试官把我写的所有东西问了个遍,很酸爽,不过我基本都答出来了。
简历这部分简单说到这。
1、准备,所有的面试是要准备的!
对于我这种面高级的话,一般而言你简历上写的都必须会,而且必须有一些是你的亮点,你得有一些深入的了解,回答让面试官觉得你这个小伙子不简单,有点东西。
Java集合比如说HashMap和ConcurrentHashMap我觉得,你最好在平时能去耐心读一下源码,搜一搜相关的博客,最好能知道每个参数为什么设置成这么大?有什么好处?为什么?你会发现不少东西,网上也有很多视频可以去学。
JUC包,毫无疑问的,你得去学,哪怕你平时编程根本不去用,但是你得会,只得知道有这个东西,你至少得知道aba,cas,aqs,unsafe,volatile,sync,常见的各种lock,死锁,线程池参数和如何合理的去设置,你必须明白自旋,阻塞,死锁和它如何去定位,oom如何定位问题,cpu过高如何定位等基本的操作,你可以没有生产调试经验,但不代表你可以不会top,jps,jstack,jmap这些可能会问的东西。以及可能衍生的jmm模型和mesi协议等。
JVM毫无意外,大厂必须问,垃圾回收算法,垃圾收集器,jvm内存模型,每个区域用途,各种oom的种类,jvm调优经验,没有你也要做过,自己去设置启动参数,知道常见参数的含义,类加载过程,双亲委派,什么时候young gc,full gc,各种情况进入老年代的方式,你知道的越多越好,因为吹起来就越自信,举个例子,逃逸分析是什么?markword里面有什么?
Spring,最好能抽空看看源码,最起码bean的生命周期,如何解决循环依赖,父子容器,还有boot的启动流程,事务实现原理,动态代理原理等,你知道越多越好。
Dubbo,因为我用的是dubbo,而且我写了,这个也是高频,写了必须问的,他的设计框架,负载均衡,spi机制,一般顺势会提到zk,选举算法,分布式锁等,一些常见的dubbo问题可以去搜,网上的基本都有。可能会顺带去问cloud的问题,生产没用过不怕,你现在可以自己clone一个项目,最起码,互联娃,你得知道还有这个玩意儿,还有他集成了啥,比如rureka,hystrix,ribbon,feign,zuul这些常规的东西吧,他们做什么的?
Redis,必须会的,我这方便还算懂得多点,可以和面试官大战几个回合吧,应该不至于上来被打趴下,单线程模型,aof,rdb,rewrite,主从,cluster,哪些类型,不要再说常规的5个了,多说几个让你区别其他小哥,包含一些缓存常见的问题击穿、穿透、雪崩、数据一致性等,你必须会,不会基本没戏,一致性hash,布隆过滤器的原理,为此我还去了解了geohash的原理以及google s2的原理,底层数据结构sds和跳表等,你多学点,准没错。
Mysql,事务,锁,索引,b+树,主从这些你必须会!
Mq ,我用的rocketmq,你得知道为什么用,重复消费,顺序消息,事务消息,高可用,消息丢失,挤压场景,整个消息发送消费的流程,读过源码更佳,更好吹
Netty的话,零拷贝,bio,nio,aio,架构设计怎么样子的?用过看过更好
算法,建议去刷题,我运气好,简单的算法让我碰到了,一些快排,堆排,二叉树相关的,链表反转,成环,环节点,跳楼梯等常规的简单算法建议刷刷,双指针,dp,递归这些还是多找找感觉,大数据内存有限的场景的统计,有时间一些middle可以去试试,手写红黑树你要是可以,那我估计算法你稳了。
网络,http,tcp,https,udp,7层网络协议等,最好结合自己理解,背,你都要背下来。
还有就是一些分布式事务实现,架构实现,比如抢红包,高并发下单等常规的场景设计,你来设计,你怎么去设计?多找一些大牛或者上网自己查,帮你看看有哪些漏洞,有那些解决方案?业界有哪些好的中间件?
大部分的准备工作差不多了,我觉得差不多可以去试试了
一般面试开始都一样,自我介绍+最熟悉的系统介绍,最后都是问你想问他什么。时间有点久,我可能没记全面试题,见谅。
2、一面(40min)
sync的底层实现,锁优化,和lock的对比等
jvm参数调优详细过程,到为什么这么设置,好处,一些gc场景,如何去分析gc日志
redis数据结构,使用场景,微博场景使用redis如何去设计用户关系
线程池参数设定,为什么这么设定,作用?7大参数
spring的循环依赖如何解决?为什么要三级缓存?
优先级队列的底层原理?
基本都是扣着你的项目去问,一面主要以基础为主。
3、二面(技术面1h)
基本就是设计问题了
结合你项目问你如何设计,提出漏洞,你怎么解决?如何改进,万一挂了?加一台机器有没有问题?如果我非要不出问题怎么办?
高并发下单扣库存场景如何设计
rocketmq架构设计原理(大方向)
dubbo框架实现原理(大方向)
最近读了什么书?平时怎么学习
4、 三面(技术面1.5-2h)
两个大佬一个问一个找漏洞,逮到没说清的就继续问,压力面
也是结合项目问,为什么这么设计?让你去优化,你怎么优化,引导你用一个合理的更好的方式去优化,数据库的设计等
在公司做了什么事情,各个系统业务线都是做什么的,你的绩效,手写算法链表反转,还算简单了
看起来问的很少,但是是不断的否认你做的项目,在他的引导下去设计一个更好的系统,的确,他们说的是对的,挺厉害的,即便没成功,也能学到一点东西的。因为问的太久了,我细节记不清楚了。
5、四面(技术面1.5-2h)
可能看我说了jvm,boss直接开始怼我jvm,还好我有准备,基本都接下来了,比如一些sms的过程,full gc做什么了之类的常规问题,很奇怪这时候问我基础,哈哈
后来有个问题就很玄幻了,把你知道所有的中间件全说出来,估计看我广度吧,我是一口气说了几十种吧。
6 、五面(人事面)
嗅味道了,阿里味必须足,为什么来,以前为什么不来?
从毕业到现在有什么改变?
一句话总结下自己,反正你需有有强烈来的欲望就对了,此时此刻,非我莫属,哈哈!
强调一点,简历写了啥,你必须复习到位!多准备准备,失败不怕,总结经验,努力学习!
你要悄悄的拔尖,然后惊艳所有人!
共同学习,写下你的评论
评论加载中...
作者其他优质文章