作者 | 科技缪缪
来源 | 科技缪缪(ID:kejimiumiu)
今年初拿了个饿了么P7的Offer,于此同时大家顺便看看我怎么途虎一轮游的。废话不多说,直接上题吧。
一面
首先上来就是自我介绍,简单的说下自己的项目经验,涉及的技术栈之类的。
然后每一轮必问的问题来了:说说你印象最深刻的项目!
这个已经被问的都不想说了,挑个有很多槽点的来说,并且自己已经知道问题答案的,我说了一个服务迁移同时双写的解决方案。
接着按照国际惯例先来一个 HashMap 原理。。。
那就来吧,简单说下 HashMap 数组+链表结构,hash 的实现方式和好处,高低位异或降低冲突,扩容的方式,头插和尾差这些差不多就好了。
这里我也不等他问了直接讲 ConcurrentHashMap 了,反正接下来肯定是问的,就说了下1.7和1.8的实现区别啊,1.7使用分段锁啊,而1.8使用 CAS+synchronized 实现,增加了红黑树避免链表过长导致的性能问题,put 和 get 的实现我一般就不主动说了太累了,等他问问了就说,不问就省点功夫。
然后既然说到了 synchronized 那就说说它的原理吧,接下来又是什么 monitor 对象啊,对象头啊,锁信息、分代年龄、GC 标志一些难懂的话,整个电话里都充满了欢乐的气息。
好吧,接着自己老实点说锁的优化吧,自旋、消除、粗化、轻量级、重量级、偏向都说一遍,我记得我就说了下自旋和偏向就完了,因为我发现年纪大了这些东西跟背书一样总是忘。。。
一切跟着节奏走,说了锁,那就 ReentrantLock 继续走着啊,AQS 实现原来来一发,然后说 CAS state 赋值,失败进入等待队列,讲下公平锁非公平锁。
然后发现java面试真的是八股文套路,又来了新词了吧,CAS 原理又说一通,然后有的面试官又会问 ABA 的一些东西,又扯下乐观锁版本号之类的。
说到这里面试官好在没跟着乐观锁直接走到数据库去了,问了下线程池原理,这个太简单了,几个名词 maxSize、coreSize、keepAliveTime、queue 说一说就好了,基础。
完了真的就开始数据库了,都是常规题,索引 B+ 数啊,覆盖索引,回表啊什么的,还有也是必问的事务 ACID,隔离级别,MVCC 原理。
一面都比较基础吧,也没什么难点,简单就过了。
二面-交叉面
过了快一周接到了二面的电话,是在钉钉里拉了个群,说是要视频面试,在家里快发霉了好好的洗了个头结果没和我视频,只是钉钉打了个电话过来,国际惯例,自我介绍+印象最深刻项目!
二面是交叉面,其他组的一个架构师来面的,上来就是送命题,说是假设有1亿的用户 session 数据缓存到 redis,怎么做保证高可用?这种题我觉得都是看你有没有思路了,比如我问他我们根据日活或者其他的数据可以选择缓存一部分热点数据啊,根据停留时长选择过期时间、过期策略,然后看存储的数据类型来选择什么数据格式。接着讲怎么保证 redis 的高可用,这个可就简单多了,这就是面试技巧了,讲高可用就讲会出现的问题就行了,redis 就直接从主从复制、哨兵、集群、持久化什么 AOF RDB 说,够说10分钟,说完了看情况接着说缓存击穿、雪崩、穿透、热 key 怎么解决,把能说的都说一遍就结束了。面试官肯定一看这小伙子不错,我都没问他就说完了,妥了妥了。
接着问了个问题说 cpu 负载和 CPU 使用率区别,我告诉他医院有3个医生,10个病人都排在一个医生下面,另外2个医生没人,这时候CPU使用率是33.33%,但是负载就非常高了。然后接着问系统负载过高怎么办?不是 CPU 负载也不是 IO 负载!这一题我没回答,主要是感觉没太明白意思,后面去网上搜了一下,说是阿里面试必问题,大家有兴趣可以去搜搜看。接着又问 CPU 很高怎么排查?这个也没啥,我前面的面试详解六里面写了,这里不展开。
然后接着聊了下 GC,年轻代老年代的收集器哪些,GC 过程,不是很深入。接着说饿了么日订单过千万,针对这个场景分库分表你怎么做?这个按照我们之前的经验说了下之前的解决方案,根据用户或者商家维度 sharding,历史数据归档,只能查询3个月或者半年数据,有更多的需要走离线数仓这种。然后一定会问那根据用户 sharding 其他维度的查询怎么办,这里就是关联表啊,索引啊,如果可以一定带着 sharding_key 去查询啊,实在不行只能多线程扫表啊,还有打宽表之类的。
接着又聊 MQ,怎么保证消息的可靠性,因为我们之前用阿里云的 ONS,就以 RocketMQ 举例子,丢失的场景啊,生产者发送失败、MQ 自己丢失、消费者消费失败3个方面说就好了。
最后就聊了下1.8的新特性 stream 啥的说说,BIO\NIO 说说最后就结束了。整体感觉还行,除了那个负载的问题有点坑,另外就是 NIO 这个确实基本没用上靠背书了。。
三面-老板P8面
3面就是以后直属老板面试了,这一轮没太多聊技术问题,主要是聊项目怎么做的啊,怎么设计啊,让你设计的话你怎么设计,不过这一轮感觉当时脑子有点抽就是面的不太行,反应迟钝,反而最简单的是面的最不好的一轮。。本来还以为挂了,最后过了。
四面-部门leader P9面
4面就是中台的大领导面了,3面老板是P8,4面的话是P9面,这一轮的问题也比较中规中矩吧,基于项目问的非常细,我这里也就没办法表述了,还有就是又把 dubbo、mq、redis 又说了一遍,可没把我累死。这一轮面的比较好,轻松通过吧。
终面-HR
因为我面的是7所以一般就是5面了,除非可能其他几面的面试官意见不统一可能要加面,我一个朋友就加面了一轮还是过了。最后就是HR谈薪资了,这里HR先问我你期望薪资多少,我说涨幅20-30%,然后他直接给我报了一个数。。。。我想问那你问我干啥??小朋友头上有很多问号好不好。。。
题外话-途虎面
放到最后来说途虎,实际上还是因为感觉被坑了,在中间面饿了么的时候先是面了1轮很简单的过了,然后中间说这个部门没 HC 了,换另外一个部门面,那我说行吧,既然都这样了,那就面吧。结果嘛,好家伙,第一回一面算是挺正常的一面,这一回的我有点惨, springboot 要支持 mybatis 怎么配置?那个什么方法我忘记了有几个参数?我当时的内心。。。然后我就挂了。我很绝望你知道吧!
好吧,这就是今年的一份面试经历,有点意思的,与君共勉吧。
更多精彩推荐 ☞跑路后再删库?思科前员工离职后恶意删库,损失达 240 万美元 ☞这样的 Python 游戏你想玩吗?| 每日趣闻 ☞5年5亿美金,华为昇腾如何争夺AI开发者? ☞GitHub 标星 20000+,国产 AI 开源从算法开始突破 | 专访商汤联合创始人林达华 ☞下一代 IDE:Eclipse Che 究竟有什么奥秘? ☞BM发声,孙宇晨入场,国产公链集体进军DeFi 点分享点点赞点在看