24.1.11 一面 -48min
面试官:自我介绍 我: …
面试官:能说一个项目吗?说一下其中印象深的地方? 我: (挑的mit那个)
面试官:能说一下Raft协议吗? 我: …
面试官:Raft协议超时选举应该挺重要的吧,能描述一下吗? 我: …
面试官:超时选举会出现脑裂情况吗 我: …(原因,解决办法)
面试官:我看你用了RPC进行调用其他服务器,你能说一下为什么用RPC而不用其他技术吗?你RPC底层用的什么协议? 我: (当时没答上来,其实是mit自己编写的RPC代码。可以说gRPC)
面试官:没事没事,我对你的项目也不太了解,就问一下为什么用RPC。我看你这日志快速恢复是怎么一回事? 我: …(解释道一半被打断了)
面试官:那日志对比的时候索引和任期是什么?(上个回答里面简单说了一下Raft节点和心跳携带的日志比较流程,但是面试官好像没太听明白,就暂时打断我,然后问的这个问题) 我: …(日志组成,日志是怎么对比的。)
面试官:那问一下基础部分吧,我看你写了熟悉集合,能介绍一个你熟悉的吗?(当时很犹豫咋说)或者说一下你对这几个的了解。 我: …(ArrayList、LinkedList、HashMap)
面试官:HashMap链表过长会怎么样? 我: …(为什么树化,树化的条件)
面试官:看你写着会并发编程,就介绍一下ThreadLocal吧 我: …(原理)
面试官:一般创建线程的方法有哪些? 我: new Thread()参数实现Runnable接口、线程池(其实还有一个是继承Thread类,然后new)
面试官:能说一下MySQL事务吗? 我: …(概念)
面试官:MySQL隔离级别?是用什么解决的? 我: …(四个级别;MVCC)
面试官:InnoDB默认是用可重复读,那发生幻读怎么办? 我: …(忘了可重复读不能解决幻读哪种情况了)
面试官:嗯,其实我是想问一下MySQL的锁? 我: …(锁这块也没太准备,就说了行锁和间隙锁)
面试官:Redis缓存穿透…,我看你项目中也说你解决了这部分,能说一下吗? 我: …(概念,什么地方用到了)
面试官:那用ReentrantLock在分布式有什么问题吗?(但是面试官自己想了一下,说只要集群不大其实也没什么问题,最后也没问) 我: (这其实还是得用分布式锁)
面试官:能说一下Spring的IoC和AOP吗? 我: …(两个的概念,为什么用AOP)
面试官:HTTP和HTTPS能说一下吗? 我: …(都是应用层协议,HTTPS是HTTP加了一个TLS协议,HTTP的三个风险)
面试官:对称加密和非对称加密能说一下吗? 我: …(分别是什么,在什么时候用哪一个以及原因)
面试官:说一下类加载器有哪些? 我: …(把扩展类加载器名字给忘了,再说了双亲委派机制)
面试官:做一个题,合并两个有序数组,合并后也是有序的 我: …(双指针秒了,但是他给的用例数组看起来像数字,还写了一会数字拆分为数组,最后发现提上说是数组。给的题还要写输入,当时不会写,就说了一下我想用力扣风格写,面试官同意了。最后写完解释了一下,也没测试,反正思路对着)
这个面试官是真的随和,完全跟聊天一样,也频繁给反馈,面完也明确说了给我过了。
有些地方一直准备看,但老是给自己理由拖着不看,像KV数据库的RPC部分、缓存击穿用的锁、类加载器。
算法那块和力扣风格完全不同,当时挺尴尬的,不过题还是比较简单
=======================
反问的时候,面试官明确说了给我过了。我也以为稳了,就把手上的两个offer全部拒了,直接梭哈快手。但是那天是周四,周五hr开会去了,没给我答复。都到15号才说我都过了。(快手双休,周末不是工作日)
=======================
24.1.26 入职,面试官变成我mentor了
24.1.16 二面 -48min
面试官:”邮评”负责哪部分? 我: …
面试官:订单是直接生成插入数据库?购物车和订单是怎么配合的? 我: …(第一个问题应该是想叫我回答使用消息队列进行消峰处理,但是当时没想到)
面试官:SpringBoot使用ThreadLocal存储变量是怎么弄得? 我: …(ThreadLocal原理,SpringBoot单线程处理同意请求,ThreadLocal在项目怎么用的)
面试官:CompeleteFuture和线程池完成并发是怎么回事? 我: …(订单模块需要其他模块,商品和库存模块关系需要可编排,只使用Future引发的回调地狱问题)
面试官:Java中的锁知道哪些?了解分布式锁吗? 我: …(synchronized、ReentrantLock;Redisson的原理,看门狗机制,可重入原理)
面试官:OOM知道什么?是怎么排查的? 我: …
面试官:数据库知道什么?了解过其他非关系型数据库吗? 我: …
面试官:知道消息队列吗? 我: 不太了解
算法:给两个字符串,类似于ip地址那种,但是每部分可以有前缀0,比较两个字符串那个大。
(当时没想到String的split方法切割‘.’时还要用转移符号变为”\ \ .”才能用。然后用跳过较长字符串前缀来模拟的,可读性差得很。但是他说直接变为数字比较,仔细想了一下,每一次乘10再加新的数字,效率并没有我的跳过字符串高,但可读性确实提高,其实也可以用(num<<4)-(num<<2)-(num<<1)来快速计算数字的10倍,效率和可读性都兼顾了,可惜当时没想到)
感觉做了mit那个项目之后,过分依赖那个项目了。因为大部分面试官不知道其中细节,就看自己怎么说的天花乱坠。之前的面试官也都是对这个项目感兴趣,就在没看过业务项目了。这个面试官直接问业务项目,确实被打的措手不及。
24.1.17 hr面 -30min
因为hr问得太多了,部分内容没有会议起来。
面试官:自我介绍并简单介绍一下这两个项目?
“邮评”项目组多少人?各自分工?
基于什么目的上线的?上线后都有哪些人在什么情况下使用?
项目有什么难点?(WebSocket依赖注入问题,群聊数据库优化)
项目上线时考虑过哪些方面的问题?
这两个项目都有什么收获?(分析日志,解决问题;团队协作)
Java和go喜欢用哪一个?为什么?(平时喜欢Java,也说了一下go的channel进行多线程通信比Java好用) 我: …
再就是普通hr面会问的问题。
也算是快手最后一面了,当时二面自我感觉太差了,没想到hr面,心里很紧张。hr说话也很有艺术,看我紧张,就说咱两也聊过几次,也算是网友了,这种半开玩笑的拉近感情,瞬间感觉没那么紧张,确实也值得学习一下。
======================
周三面完,说下周才给结果。然后周一晚上hr说offer没问题了,说了一下待遇,然后说再去推一下流程。(我认识去快手的都是晚上给结果的)。周二发了offer