字节一二三面面经(已经OC)
一面:
自我介绍,
简单问了下项目实现流程
算法题1:然后函数计算n以内三的倍数和五的倍数和,开始写了时间复杂度O(n),面试官说不行,然后优化到了时间空间都是O(1):
算法题2:最长无重复子串长度,一遍过力扣原题
算法题3:SQL,由于我准备面试忘记准备SQL了,只会简单查询,这个需要左链接子查询直接放弃
mysql索引:B+树,哈希索引,聚簇索引,非聚簇索引
集合类:set,list,map,然后到了HashMap,TreeMap实现原理,然后到了红黑树实现原理和优点,然后到ConcurrentHashMap,HashTable
三次握手四次挥手
Mysql事物隔离级别和脏读幻读不可重复读,以及MVCC
然后就到了项目细节一点,就是关于项目细节深入挖,现实问了关于redis和mysql双写一致性,我说使用RocketMQ事务型消息,二阶段提交。然后问了如果消息丢失了怎么处理,我讲解了关于rocketMQ防止消息丢失原理。然后面试官说这个也不能保证消息完全不丢失,然后我说rocketMQ日志记录,出现特殊情况可以根据日志处理,面试官问我能不能在代码层面优化一下我说不能。
然后就是另一个方面,关于超卖少卖问题,我的解决方案就是常规方案,落单前减去库存,失败事务回滚,中间件同步消息,一般这个方案虽然不能完全保证不会出现数据一致性,但是也会小概率出现少卖情况。结果面试官说这个不对,超卖少卖都有可能,我反复讲解为什么不会出现超卖情况,结果面试官说了你有考虑过取消预约情况出现问题的情况吗?
然后后来面试官说了我还挺不错,直接给我预约二面了。
二面:
自我介绍
项目介绍了下
算法题:k个一组翻转链表
算法题:翻转链表中指定区间的链表
全是原题直接ac了
继续深挖项目,有部分问题和前面重复不再详细叙述。
Tcp月udp区别,http
主要是手写RPC实战项目,整个流程,然后就是项目细节具体包括:
1:cap原理,zookeeper是cp还是ap的,为什么,选举协议,集群搭建消息同步。
2:为什么使用netty,延伸到netty线程模型,linux五种io,java三种io,零拷贝
3:自定协议原理:如何解决粘包半包问题,json,kryo序列化比较以及原理
4:特殊情况:如果服务提供端突然挂掉怎么办?我分了两种情况,主动下线和突然失效解决,中间设计钩子和心跳包
Redis:
几种搭建方法
数据类型以及跳表
如何解决雪崩和缓存穿透:
Java:sychornized和retreenltock
主要说了Sychornized:四种锁状态,Retreenltock:AQS
然后就是垃圾回收算法,
cms过程,浮动垃圾,三色标记法
Java集合相关,还有多线程创建的七个参数
三面:
自我介绍和项目介绍:
职业规划实习时间
算法题:
SQL还是不会
烧香问题:两个不均匀香,每个香燃烧完毕一个小时,确定45分钟(早就看过了,假装仔细思考,笔画演算,然后说出答案)
Tcp如何保证可靠性
输入url过程:包括dns解析以及网络结构每层都发生什么
https:只知道大体的,
如何防止其他网站获得ca证书假冒?数字证书保留网站信息,
如何防止篡改?数字签名
数字签名具体原理?不会
虚拟内存的好处:答对了
页面缓存算法?答对了
具体实现细节:LRU答对了,但是LFU忘记了
项目:有些和之前一样,多了一个防止重复支付问题,回答了悲观锁和乐观锁
然后就是mysql语句执行过程
Spring IOC,AOP,动态代理
Java集合几种,重点map问了一下
然后HashMap,为什么查找是O(1),回答到基于数组实现,数组查找公式是:元素位置=基础位置+k(参数类型占位)面试官才满意
然后就是问了一些最近找实习情况,实验室情况,未来规划等等