字节日常实习一面二面(已OC)
一面 45min
1. 用过线程池吗,说说java线程池
讲了线程池工厂类创建,自定义参数创建,七个参数,线程池怎么工作的
2. 讲一下java的hashmap底层结构
基础八股,1.7 1.8两种实现,1.7头插循环死链,1.8改尾插 寻址算法优化
3. 讲讲java里面的锁
说了一下synchronized底层原理,锁升级,自旋,自适应自旋。然后说了一下AQS的设计,实现原理
4. https协议
只记得对称和非对称,其他的记不太清了
5. es mysql redis要怎么保持数据一致性
扯了半天,最后大概说的是根据业务需求来判断,如果业务实时性要求没那么高的话可以缓存晚点删,而且es本来也就是一个准实时的引擎,很难做到实时同步。如果真的需要实时数据的话路由到队列中串行化操作等等。也不知道说的对不对
二面 70min
1. mysql的数据怎么同步到es
用工具,logstash,直接打进去
2. 数据库十张表做关联查询,mysql性能差,做连接把数据打到es里面去,做成一张宽表去支持查询。每张表的数据都有可能更新,假设多个表同时更新,如何保证数据同步到宽表中。
a) 数据一致性问题
b) 并发压力问题
这个问题扯了有二十分钟,太复杂就不贴出来了,过程中扯到了redis,面试官就问如果用redis的话key要怎么设计,要我具体设计出来。整个回答过程说的比较抽象的东西面试官都让我具体说出来,心态差点爆炸。
3. 算法,面试官直接手敲题目
a) 10*10矩阵,找到最大的2*2矩阵 这题我只能想出on,问我能不能再优化,我实在想不出来。。到现在也没想明白怎么优化
b) 10*10矩阵,求出0,0到9,9最大路径和 简单记忆化深搜,秒撕
4. 讲一讲垃圾回收的理解
说了各种垃圾算法,什么分代,标记,可达性,三色标记之类的
5. 年轻代老年代使用标记复制标记整理的原因
6. 什么时候触发老年代gc
满了,system.gc
7. Concurrenthashmap内部实现
1.7 1.8两种结构,然后分析put函数源码,ForwordingNode等等。
8. java里面有几种锁
Synchronized,剩下的基本都是继承AQS,然后讲了AQS原理,源码 然后问我chl队列节点有几种状态,我说只记得有五种,具体记不得了。
9. 线程池关键参数
10. 拒绝策略有哪些
一时还真想不起来,只记得异常跟自己执行,说了自己可以根据业务去写拒绝策略
11. Mysql什么情况下会回表
12. Count(1)和count(*)差别,哪个快
Count(1)快,但是mysql对count(*)有优化
13. 数据库执行的结果会和explain出来的结果不一样吗,举个例子
有时候数据库会错误认为不走索引更快一些,比如某些时候认为全表查询的时候更快就不会走索引,我举了一个用性别做索引的例子。
14. Mysql这块在连接池这块有哪些参数
#字节面试##字节跳动##面试题目#