作为一个毕业2年的coder, 最近一直在寻找一个合适的机会能够换一个环境,一是寻找一个更加宽阔的舞台不断的提升自己,二是让自己走出现在的舒适区域,迎接更多的挑战和认识更多的人。当然还有为了获得更加好的一份收入。
这一个月,我投递了4个公司,分别为华为,头条,招银网络科技和蚂蚁金服。头条笔试完就没回信(讲真,作为一个上班族,压根没有刷过算法题,真心不会做,还是自己太菜逼,以后有时间还是定期的了解下算法,算是扩展自己的思路)。比较幸运的是,其余3家都拿到了对应的offer, 后面也暂时不去面试了,等待最终的选择,是留在现在的岗位还是出去看看。
下面记录下面试的经验,一方面用作后期自己回顾知识点,另一方便给正要面试的人一些经验。
华为面试
一面
项目介绍
spring的了解
微服务拆分依据
微服务比较传统应用,单一应用的优点
分布式调度系统的性能,支持最大客户端
分布式调度项目中,client 和 server的通信方式
线程安全的理解
微服务应该监控哪些指标
ai用到了哪些算法
SPRING ioc用到了哪些设计模式
项目架构
单利模式的实现
ps: 单例模式很基础,很重要,里面可能会涉及单例安全,如反序列化可能会破坏单例,然后可以问到类的安全加载等深入知识
哪些地方可能出现oom
需要了解在每个区域出现oom的例子,最好自己能写出来
二面
华为的二面是技术leader面试的。 由于当时没有即时的记录下面试记录,所以有点忘记了。不过技术leader的面试主要是围绕做过的项目,问一些项目的细节。然后会问下自己的意向,工作态度之类的(毕竟华为的加班在业界是比较出名的)
HR面
HR面试的话主要是考擦职业规划,对工作的态度,原有职位的一些情况。 感觉HR还是不错,平易近人,面试的过程比较轻松
总的来说,华为的面试偏向基础。没有太多的问及到底层的架构。
招银科技面试
招商银行也是先笔试,然后是面试。
招商银行的面试可以说是也是4轮,不过比较好的是4个面试官一起,一次性把所有的问题问完,我觉得这样很好,非常高效。 不用每轮面试都介绍一下项目。
项目介绍
项目中缓存的设计
缓存击穿
缓存雪崩
分布式调度系统如何调度?第一轮调度任务没有处理完就第二轮调度时间到来的处理方式?
缓存的数据有哪些?key的设计原则
HashMap数据结构
spring ioc
mysql死锁
然后就是hr询问一些常规的问题,如工作意向,期望薪资之类的。
蚂蚁金服面试
一面
项目介绍
项目中如何保证数据一致性的
存在的问题
jvm 内存
程序计数器的作用
gc 算法, 垃圾收集器
spring事务,事务实现的机制,如何保证事务的
悲观锁,乐观锁
HashMap
红黑树,B+树
数据库死锁,如何防止死锁
二面
二面开始于5道题目,整体感觉还是比较难的。面试的前一天给我发的题目,然后晚上下班后(9点左右)我做了5个小时才完成吧。 第二天面试的时候,主要围绕题目进行展开和发散。
从第一个题目延伸出(转账):
分布式事务的保证。具体的解决方案;
接口的幂等性;
如果向某个账户转账在高并发环境下,设计的接口有什么问题(数据库瓶颈)
如何解决上述的问题
如果账户表很大,具有亿万级别,如何提高查询效率(分库分表)
分库分表具体操作,什么时候分库,什么时候分表,各个使用场景
mysql主从
mysql如何保证主从的数据一致性
数据库的容灾
第二个题目: 抢红包
抢红包的实现方案;(我给出的解决方案是存下抢红包的操作,然后乐观锁更新金额,保证数据的最终一致性)
有没有优化空间;
春晚红包方案(包括限流,网络瞬间抖动,数据一致性)这一点聊了很久。。。
对分布式的看法
开源中间件熟悉哪些?(只是做简单了解)
三面
个人项目介绍
读书时候的经历? 介绍读书时候的项目(这个也太不按照常理出牌了,读书时候发表的论文,基本忘记了呀!!好吧,只能想到啥随便说点吧)
项目一(支付营销系统)的具体介绍, 架构,项目中某个操作的具体流程图,如何压测? 性能优化? 项目中机器的台数,机器扩容标准? 线程池大小?线程数设置标准?
平时用到了哪些集合?hashmap的问题?cpu 100%出现的情况(我从来没遇到过,看过资料其中有一点,让我说说其他情况, 懵逼)?Treeset的实现?
分布式事务,秒杀系统的要求?秒杀系统的设计原则?注意事项?项目中遇到的问题?解决放肆?
项目二(分布式调度系统)的具体情况,架构?中间某些步骤的具体的设计思路。(这个挖的很深,而且面试官确实很厉害,几分钟能够了解你整个项目的大致情况,知道你设计的痛点,然后咨询你如何解决的)
kafka消息可靠性保证?其他中间件有没有了解过?平时阅读什么技术?
正常的问我有什么问题,介绍了下具体的部门信息,然后就通知让等hr电话。
HR面试
HR面试主要是问了过往的经历,包括大学,研究生和所做的项目。然后就是个人的职业规划,就职意向等。
个人总结
通过这4家企业的应聘,发现自己很多的不足。 比如头条注重的算法,解决一个实际的问题还是比较欠缺,另外还有就是自己的思路不够开阔,看待问题不够深入,比如HashMap出现100%CPU的情况以及原因。我觉得对于知识来源,如果能够从自己的项目中获取,那么印象是比较深刻的,比如我曾经遇到过的数据库死锁,堆内存溢出等问题,因此对这块的面试来说,应该算是可以勉强的应付。但是项目中的坑总是有限的,那么就得自己去不断的学习、总结。
(Tips: 有需要平时用来学习的资料的,可以加一下我的群: 756584822就可以了)因此在以后的工作学习中,一定要适当的深入,不断的思考和反思,这样才能够遇到问题时候不至于慌乱。
Choose
最后根据自己的职业规划,选择了蚂蚁, 下一站,加油。