快手一二面
引流一下博客:https://blog.codewinner.top/articles/kuaishou-20230819/
https://blog.codewinner.top/articles/kuaishou-02-20230828/
一面(2023.08.19)
问的八股都算比较常规的,基本是对着简历问,项目面试官比较感兴趣,说的时间比较长。
1、面试官介绍
2、自我介绍
3、HashMap的结构,扩容机制,链表扩容和数组扩容分别发生在什么场景?加载因子多少的时候扩容?每次扩容几倍?多线程情况下HashMap会有什么问题?如何解决?
4、CuncurrentHashMap的结构,上锁机制。
5、为什么CuncurrentHashMap从1.8开始要采用CAS?你能说说CAS的流程吗?CAS会有什么问题?如何解决ABA问题?那数据库可以添加一个版本号这种方法,Java的CAS怎么避免ABA呢?
6、两个线程访问一个资源,你有什么办法避免资源竞争,知道的都说出来。你提到了ReentrantLock,他的结构是怎么样的,为什么可重入?你说里面使用了AQS,说说AQS的结构?AQS是怎么进行加锁的,指令是什么?
7、说一下JVM的内存结构?每一个部分都用来干什么?堆可以分为几个部分?垃圾回收的算法有哪些?垃圾收集器有哪些?都是什么流程,有什么特点?你使用过哪种,有配置过吗?
8、你平时用MySQL都用的什么引擎?InnoDB相对于别的引擎有啥优势?事务的隔离级别有哪些?各个级别都能解决什么问题?InnoDB使用的什么?能解决幻读吗?为什么?MVCC的原理是啥?undo log的数据结构是什么样的?
9、索引按照数据结构分类有哪些?分别都什么结构?各有什么优势?B+树效率高还是Hash效率高,为什么采用B+树?索引有哪些分类?联合索引知道吗,构造的B+树里面是怎么样的?如果执行这一条查询语句会走索引吗,为什么?
10、你的低代码平台用了Redis,里面用Hash来存储结构,说说你的key、Field都是怎么设计的?Hash的底层结构长什么样?各自都长什么样?Dict的扩容是怎么样的?Zset结构是什么?
11、你做过一个通信系统,能讲讲你用的什么框架吗你的项目结构能否介绍一下?为什么要用线程数组而不用线程池?消息转发是如何实现的?你能介绍下你的IO多路复用用到操作系统什么机制吗?epoll听过吗?
12、为什么要设计心跳机制?心跳谁来发?服务端对于没有收到心跳包的用户如何处理,怎么判断有没有收到心跳包?快手的直播平台,每一台机都有10w用户,让你来设计一个心跳机制,我给你两个方案,你说出优缺点,你会选择哪个
- 对每个用户单独一个定时任务,分散发送心跳。
- 对所有用户用一个定时任务。
13、算法题:给你一个value和error,求value的平方根,要求 | 计算值 - 真实值 | <= error。使用二分查找答案即可。需要注意value小于1和大于1要分别处理。
总体大概一个半小时,问的大多是基础问题,也基本回答上来了。
二面(2023.08.28)
1、面试官介绍。部门是直播技术部。
2、自我介绍。
3、说说你的聊天系统的架构(基于Reactor),具体的实现逻辑,你的架构相较于其他的架构优点是什么?为什么能同时维护多个连接?NIO的实现方式?这里还有些项目相关问题,大概问了十几分钟。
4、算法题。两个数组,从A和B各取一个元素,求出绝对值最小值。这里大概十分钟。
5、给了几个SQL语句,分析如何构建索引,查询索引执行的流程,大概需要的耗时,还有些零碎问题记不得了。这里的耗时我不理解,面试官问有3000w条数据,查出来是个位数,然后用的单个字段的索引,大概要多长时间,这个要我估算?有懂的老哥可以评论区解答下谢谢。这里大概十分钟。
6、知道什么数据压缩算法吗?讲讲哈夫曼编码,哈夫曼编码的理念是什么?
总体大概40分钟,比一面问题少很多,问的问题大多都答上来了,就是感觉问的有点少,希望不是不想问了就结束了,给双非鼠鼠一个机会吧。