|
1 | 1 | # 快手 |
2 | 2 |
|
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 | +反问:对应届生的要求。 |
74 | 307 |
|
75 | 308 |
|
76 | 309 |
|
|
0 commit comments