快手Java 一面 60min
介绍项目(实习+个人项目)
整体面试感觉很好,并不是生硬的考察八股,而是根据简历上的项目经验进行深挖
大概主要涉及以下八股内容:
1. 线程池参数及原理 (低级八股)
2. MySQL主从复制的原理 (我说了传统方式是binlog+pos 之前自己还了解到过GTID的同步方式,问我有没有异步的方式,说了canal但是感觉不太对,最后反问环节可能我也没问清楚,没问到答案。大概提及了同步、异步、半异步、链式、星式?)
3. MySQL索引为什么用B+ (低级八股)
4. 联合索引场景题,有一个A,B,C的联合索引 select * from xx where A=1 and B=1 orderby C limit 1000能用到几个字段 (这道题能确定的是AB一定用到了,但是C我说不太确定能否用到,后来使用explain尝试了,C是可以用到的,但是中间如果B条件去掉,Extra中就会显示Using filesort了,即排序未使用到索引)
4. 事务的特性ACID(低级八股)
5. 你知道MySQL的WAL原则嘛?有什么好处(这个知道是write ahead logging,先写日志再写数据。好处只答出了保证数据不丢失,这个地方实际上应该是redo log+WAL保证数据不丢失,同时WAL的另一个好处是减少IO次数,将数据的随机空间写入变成了日志的顺序写入,随后再通过异步刷盘进行数据刷入可以提升当时的吞吐量)
6. 那Redis的持久化你了解嘛?(低级八股,但是问了个超纲问题,Redis的AOF遵循WAL原则嘛? 这个我第一时间提出了质疑,WAL是为了解决磁盘写入的,可Redis没有磁盘写入啊,AOF就是Redis 的磁盘写入,AOF既是日志又是数据,这里何谈WAL?。。。我有点懵,有了解的童鞋可以评论教一下,万分感激)
7. 类加载系统 - 没有深入问,可惜了,JVM还是比较有把握的
8. 中间还问了ConcurrentHashMap的put执行流程 (低级八股)
算法题: 一个数组,两端拿K个数,最大和。简单题 (上来没让我写,让我说下思路,结果我说回溯,面试官问回溯的时间复杂度和空间复杂度,一直刷算法的时候没考虑过计算这些,所以一上来蒙了,应该是2的K次方时间复杂度,递归的空间复杂度不会算,求大佬指点。后来说写一下吧,秒了)