Skip to content

Commit ea6985e

Browse files
committed
快手面经整理
1 parent a3d788a commit ea6985e

File tree

8 files changed

+624
-74
lines changed

8 files changed

+624
-74
lines changed

docs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ heroText: 程序员大彬
77
tagline: 优质的编程学习网站
88
actions:
99
- text: 开始阅读
10-
link: /java/java-basic.md
10+
link: /java/java-basic.html
1111
type: primary
1212
- text: 学习圈子💡
13-
link: /zsxq/introduce.md
13+
link: /zsxq/introduce.html
1414
type: primary
1515
features:
1616
- title: 经典计算机书籍

docs/campus-recruit/interview/5-kuaishou.md

Lines changed: 304 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,309 @@
11
# 快手
22

3-
## 一面
4-
5-
1. 简单介绍项目
6-
2. 知道哪些数据结构以及他们的特点
7-
3. 链表增删快,那如何提高其查询效率,有没有什么想法?
8-
4. B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?
9-
5. 跳表了解吗?
10-
6. 大顶堆、小顶堆了解吗?
11-
7. 实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?
12-
8. 那我现在有10份数据,有1000个线程来争抢,你要怎么处理?
13-
9. 分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?
14-
10. Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?
15-
11. LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?
16-
12. TCP为什么是三次握手?两次行不行?多次行不行?
17-
13. TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?
18-
14. 客服端输入一个网址后,是如何拿到客服想要的数据的,是怎样在网络中传输的?
19-
15. cookie和session
20-
16. java有哪些锁?共享锁是什么?CAS?乐观锁和悲观锁?synchronied的底层原理?锁升级?死锁怎么形成的?如何破解死锁?
21-
22-
## 二面
23-
24-
25-
1. Java容器:List,Set,Map
26-
2. Map的遍历方式
27-
3. HashMap扩容为什么是扩为两倍?
28-
4. Java线程同步机制(信号量,闭锁,栅栏)
29-
5. 对volatile的理解:常用于状态标记
30-
6. 八种基本数据类型的大小以及他们的封装类(顺带了解自动拆箱与装箱)
31-
7. 线程阻塞几种情况?如何自己实现阻塞队列?
32-
8. Java垃圾回收。可达性分析->引用级别->二次标记(finalize方法)->垃圾收集 算法(4个)->回收策略(3个)->垃圾收集器(GMS、G1)。
33-
9. java内存模型
34-
10. TCP/IP的理解
35-
11. 进程和线程的区别
36-
12. http状态码含义
37-
13. ThreadLocal(线程本地变量),如何实现一个本地缓存
38-
14. JVM内存区哪里会出现溢出?
39-
15. 双亲委派模型的理解,怎样将两个全路径相同的类加载到内存中?
40-
16. CMS收集器和G1收集器
41-
17. TCP流量控制和拥塞控制
42-
18. 服务器处理一个http请求的过程
43-
19. 例举几个Mysql优化手段
44-
20. 数据库死锁定义,怎样避免死锁
45-
21. spring的aop是什么?如何实现的
46-
22. 面向对象的设计原则
47-
23. 策略模式的实现
48-
24. 操作系统的内存管理的页面淘汰 算法 ,介绍下LRU(最近最少使用算法 )
49-
25. B+树的特点与优势
50-
51-
## 三面
52-
53-
- 自我介绍,说简历里没有的东西
54-
- 说几个你最近在看的技术(MySQL,多线程)
55-
- 口述了一个统计数据的场景题
56-
- 如果这个统计数据场景不用MySQL,而是用Java来实现,怎么做
57-
- 如果数据量过大,内存放不下呢
58-
- 用面向对象的思想解决上面提出的问题,创建出父类,子类,方法,说一下思路
59-
- 下一个场景,口述了一个登录场景,同学用线程池做登录校验,会有什么问题
60-
- 如何解决这些问题
61-
- 你给出的方案弊端在哪里,还有哪些方案
62-
63-
## 四面
64-
65-
- 谈谈类加载机制。
66-
- hashmap和concurenthashmap
67-
- 16g机器,让你分配jvm内存怎么分配。
68-
- 机器慢了怎么排查。
69-
- 谈谈consul和zookeeper,还有服务发现机制。
70-
- 详细说明raft协议。
71-
- 谈谈consul和zookeeper区别。
72-
- 服务注册的时候发现没有注册成功会是什么原因。
73-
- 讲讲你认为的rpc和service mesh之间的关系。
3+
## 面经1-一面
4+
5+
> **开始先是手撕算法两道**
6+
7+
1. 自我介绍
8+
2. 两道手撕
9+
1. 将字符串转化为整数 (这里当时出现溢出值问题,进行了思考解决,写了两种方式)
10+
2. synchronize , 可以使用的几种形式,代码写出
11+
12+
> **操作系统 和 数据结构**
13+
14+
1. hash解决冲突 ( 开放定址法、链地址法、再哈希法、建立公共溢出区 )
15+
2. 上述四种方式详细的过程、思路
16+
3. 链地址法和再哈希法之间的关联和区别
17+
4. 两者分别适用场景
18+
5. 两者底层的数据结构,关联和区别
19+
6. 链表和数组的底层结构设计、关联、区别、应用场景
20+
21+
> **常用算法**
22+
23+
1. 常用的排序算法 ( 冒泡、堆、快速、桶、选择、插入 )
24+
2. 堆排序和选择排序使用场景上有什么区别
25+
3. 选择排序和堆排序对于资源的利用 ( 选择排序适合数据量少的情况、堆排序适合数据量多的情况,资源利用率、设计思路 )
26+
4. 常用的查找结构都有什么? ( 二分查找法、插值法、hash查找、分块查找、树表查找 )
27+
28+
> **数据结构**
29+
30+
1. b树和b+树和红黑树的设计思路、结构区别、使用区别
31+
2. 队列和栈有什么区别
32+
3. 他们的使用场景 ( 栈:数据匹配、数据反转;队列:任务队列、共享打印机 )
33+
34+
> **Jvm**
35+
36+
1. jvm内存模型
37+
2. jvm垃圾回收算法
38+
3. jvm垃圾回收器
39+
4. cms、g1的设计思路、关联和区别、垃圾回收阶段的不同
40+
5. 让你设计系统中进行选择其中一个回收器,你的想法是什么
41+
42+
> **使用框架、底层原理**
43+
44+
1. 在你的开发中最常使用的框架
45+
2. SpringBoot常用注解
46+
3. RestController和Controller有什么区别
47+
4. 你在完成项目的过程中是怎么处理异常的 (全局异常梳理)
48+
5. 全局拦截器的设计、项目中实现 (注解、类)
49+
6. Aop的了解、怎么使用
50+
7. Aop底层实现( JDK、CGLib、动态代理实现 )
51+
8. asm是什么 (字节码增强器)
52+
53+
> **MySql**
54+
55+
1. Mysql事务隔离级别
56+
2. 什么情况下使用读已提交
57+
3. 对于脏读的理解
58+
59+
> **redis**
60+
61+
1. 对于redis的理解
62+
2. redis在项目中进行怎么样的使用
63+
3. redis 为什么读取速度那么块 (io、单线程、内存)
64+
4. 为什么redis单线程会快 (完全基于内存、单线程避免不必要的上下文切换、cpu消耗、加锁问题。。。)
65+
5. 对于很多文件和数据,怎么进行数据的查找、排序,使用什么样的数据结构 (类似于TopK、这个主要是让你进行优化、类似于位图、hash、过滤器之类的)
66+
6. 反问:
67+
1. 对于部门的业务、技术栈
68+
2. 对我的建议、和整个面试的感觉
69+
70+
## 面经1-二面
71+
72+
> **Java基础**
73+
74+
1. 自我介绍
75+
2. 抽象类和接口有什么区别
76+
3. 在使用过程中,接口和抽象类的选择以及使用场景
77+
78+
> **计网、Linux**
79+
80+
1. http 和j https 的区别
81+
2. https 过程中都使用哪些加密的算法 ( 对称加密、非对称加密 )
82+
3. 都怎么使用的,这些j加密算法的理解
83+
4. Linux都是用过哪些常用命令 (cat、less、tail、grep、wc....)
84+
5. 查看系统内存 ( top )
85+
6. 查看系统内存,返回多个指标,怎么查看内存的占用率
86+
7. 怎么将系统内存显示的数据进行排序
87+
88+
> **Java基础加深、线程、锁、数据机构等等**
89+
90+
1. java里面的类加载器的设计
91+
2. 类加载器的类之间的可见性 (委托机制、单一性、可见性)
92+
3. 如果父级对子级进行调用,会出现什么异常
93+
4. 线程都有哪些状态
94+
5. blocking和waiting有什么区别吗
95+
6. 如果是sleep(1000) 会让线程进入什么状态
96+
7. synchronize的使用流程
97+
8. java中的原子类实现原理
98+
9. 对CAS的了解
99+
10. 对CAS底层了解
100+
11. HashMap的底层实现原理
101+
12. HashMap的put流程
102+
13. ConcurrentHashMap的实现原理
103+
104+
> **框架Spring,代理**
105+
106+
1. Spring的Aop的底层实现
107+
2. 动态代理的了解 ( 见上面文章 )
108+
3. 静态代理和动态代理的区别
109+
4. 对动态代理性能的了解
110+
5. 浅拷贝和深拷贝的区别
111+
6. 手撕 : topK问题 ( 堆、优先队列、快排、冒泡 )
112+
7. 大顶堆小顶堆的设计思路
113+
114+
> **收尾的小问题**
115+
116+
1. 在实习中最有成就感的项目
117+
2. 对抖音和快手的看法
118+
3. 反问
119+
1. 业务的具体方向
120+
2. 对我的整体感觉和建议
121+
122+
## 面经1-三面
123+
124+
1. 自我介绍
125+
2. 介绍一个你最得意的项目
126+
3. 介绍一下你的实习经历
127+
4. 实习项目中介绍一个你印象最深的需求
128+
5. 这个需求的设计、使用的框架详细介绍
129+
6. 这个项目的上线效果怎么样的
130+
7. 上线需要的什么问题
131+
8. 你在实习公司的转正情况
132+
9. 还有其他的offer吗
133+
10. 你对快手怎么看的
134+
11. 面试官主动介绍部门
135+
12. 反问
136+
1. 部门的业务、地点 ( 因为之前面试的组hc没了,转到隔壁组,重新问的业务方面 )
137+
2. 对我整体面试看法 ( 说的是看我之前面试,聊的挺详细的,面评也不错,等hr )
138+
139+
## 面经1-HR面试
140+
141+
1. 面试官先自我介绍了
142+
2. 最近2-3年,挑一个最有代表性的一件事
143+
3. 你为什么觉得这件事最有代表性呢
144+
4. 在你的整体实习的话,给自己打分你会打几分 、10分制 ( 我打的8分 )
145+
5. 你都做了那些事情,让你打的8分
146+
6. 那你觉得从那些手段方法提升剩下的2分呢
147+
7. 你完成实习之后,有哪些收获呢
148+
8. 考虑提前实习吗
149+
9. 毕业之后的未来规划
150+
10. 之后的定居城市怎么想的
151+
11. 还有什么进行的面试流程吗
152+
12. 你心中对这些公司的排序 ( 地点、技术、前景 )
153+
13. 反问
154+
1. 什么时候出结果
155+
2. 对我的整体感觉
156+
157+
## 面经2-一面
158+
159+
1、聊项目
160+
161+
2、线程的几种状态
162+
163+
3、线程池的状态
164+
165+
4、线程池的运行过程
166+
167+
5、如何合理地配置线程池
168+
169+
6、怎么实现阻塞队列
170+
171+
7、怎么监控线程池的运行状态,答的用一些线程监控的工具,面试官说指代码层面上,只争对线程池,没答上
172+
173+
线程池执行类ThreadPoolExecutor给了相关的API来监控某一个线程池的执行状态,能实时获取线程池当前活动线程数、正在排队线程数、已执行线程数、总线程数等。
174+
175+
```java
176+
ThreadPoolExecutor tpe = ((ThreadPoolExecutor) es);
177+
while (true) {
178+
System.out.println();
179+
180+
int queueSize = tpe.getQueue().size();
181+
System.out.println("当前排队线程数:" + queueSize);
182+
183+
int activeCount = tpe.getActiveCount();
184+
System.out.println("当前活动线程数:" + activeCount);
185+
186+
long completedTaskCount = tpe.getCompletedTaskCount();
187+
System.out.println("执行完成线程数:" + completedTaskCount);
188+
189+
long taskCount = tpe.getTaskCount();
190+
System.out.println("总线程数:" + taskCount);
191+
192+
Thread.sleep(3000);
193+
}
194+
```
195+
196+
8、java中有几种锁
197+
198+
9、锁升级的过程(自旋的缺点,CAS有什么不足)
199+
200+
10、对象头的结构
201+
202+
11、synchronized和ReentrantLock区别
203+
204+
12、ReentrantLock是怎么实现的,讲到AQS,顺便说了AQS
205+
206+
13、还有哪些基于AQS的同步工具
207+
208+
14、volatile作用
209+
210+
15、volatile怎么保证可见性和防止指令重排序
211+
212+
16、mysql的隔离级别
213+
214+
17、事务acid
215+
216+
18、mysql如何保证acid
217+
218+
19、redo log和undo log区别
219+
220+
20、redo log和undo log是如何生成的(这块细节忘了,只说了先写内存,然后再刷盘)
221+
222+
21、介绍几种消息队列
223+
224+
22、说说rabittmq架构(说了分为虚拟机、交换机和队列,然后说了下消息的传递过程,面试官否认了,说这只是应用层面)
225+
226+
23、jvm的内存模型
227+
228+
24、对象什么情况会进去老年代
229+
230+
25、spring ioc aop
231+
232+
26、注解底层怎么实现的(动态代理)
233+
234+
27、注解失效有哪些原因(自己还经历过@Transaction失效的bug的,当时没答上来,被自己气死)
235+
236+
28、bean的加载过程
237+
238+
算法:有序数组生成平衡二叉树,当时已满60分钟,面试官给了5分钟的时间限制,看我思考了一会,问我有没有思路,我说暂时还没,然后就换了一道题
239+
240+
## 面经2-二面
241+
242+
1、聊项目
243+
244+
2、mysql默认隔离级别
245+
246+
3、如何实现可重复读
247+
248+
4、如何解决幻读
249+
250+
5、间隙锁和nextkey锁
251+
252+
6、mysql锁是锁的什么(索引)
253+
254+
7、mysql的索引结构,有什么优点
255+
256+
8、怎么实现读写分离
257+
258+
9、主从复制是怎么实现同步的,答传bin log文件,后续数据更新怎么同步,答mysq不了解,但我知道redis主从复制后续是通过一个复制缓存区来记录新增的命令,通过发送这些命令实现同步
259+
260+
10、说说redis架构(单线程,io多路复用)
261+
262+
11、redis的底层数据结构知道吗(只知道用到了跳表,然后说了下跳表)
263+
264+
12、缓存穿透和缓存雪崩,解决方法
265+
266+
13、缓存和数据库怎么保证一致性
267+
268+
14、说说threadlocal怎么实现的
269+
270+
15、threadlocalmap中key为啥要用弱引用,key被gc后value怎么办
271+
272+
16、说说四种引用
273+
274+
17、spring事务传播机制
275+
276+
18、spring如何解决循环依赖
277+
278+
19、说说tcp协议
279+
280+
20、tcp如何保证不会接受重复的报文
281+
282+
21、tcp如何保证有序
283+
284+
算法:lc124. 二叉树中的最大路径和
285+
286+
部门:商业化技术部
287+
288+
## 面经2-三面
289+
290+
1. 自我介绍
291+
3. Redis 是单线程还是多线程?为什么快?
292+
4. IO多路复用和非阻塞IO? IO多路复用提升了什么性能? IO多路复用提升了CPU哪方面的指标
293+
5. 线程池使用过吗?线程池的运行原理?
294+
6. IO密集型和CPU密集型的区别
295+
7. IO密集型的线程数配置过多会对CPU有什么影响?
296+
8. Zookeeper 的原理
297+
9. 为什么使用Zookeeper
298+
10. Zookeeper为什么要主从,选举机制
299+
11. MySQL的主从是什么原理
300+
12. TCP为什么是可靠的
301+
13. 能提前实习吗?
302+
14. 未来三到五年的规划?
303+
15. 算法题 lc简单题
304+
17. 能来提前实习吗?
305+
306+
反问:对应届生的要求。
74307

75308

76309

0 commit comments

Comments
 (0)