面试复盘 | 字节跳动番茄小说Java三面(已offer)
关注回复“1”,即可获取上千篇面经集合pdf
面经内容
【一面】 约1h
2. 项目相关
(团队人数 | 项目应用到的框架等 | 表设计)
3. Java中常用的集合类
(先说Collection和Map接口,再分别说子接口和实现类,以及大概的区别,没让细讲源码)
4. 有一组数据,需要按照顺序对它进行加密,如果用集合做的话你会选哪个集合?比如一个数组,其元素本身无序,每个元素是字母或者数字都行,对它从小到大进行排序,你会选哪个集合去存储?
(我当时好像选的TreeMap?忘记了...)
5. Java中线程同步的方案有哪些
(参考《深入理解Java虚拟机》第13章第2节,从“阻塞同步方案 | 非阻塞同步方案 | 无同步方案”三部分说明)
6. Lock接口的实现类
(参考《Java并发编程的艺术》第5章,Lock接口的实现基本都是通过聚合了一个同步器的子类来完成线程访问控制的,引出了队列同步器AQS,实现类讲了ReentrantLock和ReentrantReadWriteLock)
7. MySQL查询比较慢的话,通过什么方式来优化
(情况①:偶尔很慢,可能是数据库在查询脏页,或者没拿到锁
情况②:一直很慢,可能是没有索引,或者有索引但没走索引,或者表数据量太大需要分库分表)
8. http协议
(http是哪一层的协议,其传输层协议是什么,三次握手和四次挥手的完整过程)
9. 算法题:lc726 原子的数量
(稍微变型,不必统计所有原子的数量,统计输入的目标原子的数量)
10. 反问部门和技术栈
其实是面试体验不太好的,不是面试官的面试过程有问题,是他没关消息提示,整个面试过程听了可能上百声“叮咚”的消息提示音,一开始没适应的时候会打断思路。最后的算法做的不咋地,给了大概20min,说了思路没全写完,面试官说思路应该可以,他还有下一场面试。这回算法拉胯了,以为凉了结果过了。
【二面】 约80min
【三面】
是我面过的最不常规的一场,没问多少八股,面完给我整累麻了,结束了一看录音忘了开
面试时间推迟了一小时,面试官连着国庆请假了,当天刚回北京,在家里面试的
1. 自我介绍
2. 来个算法吧(真的吗上来就是算法吗,头一回遇到没有接着自我介绍问项目的面试官)
输入为两行,第一行:[[3,18], [5, 12], [18, 6]...] 表示3到18有边,5到12有边...边是双向的(就是想说无向图),具有传递性(就是表示[3, 18, 6]在一个连通分量里)
第二行:[[3, 6], [3, 12]...] 就是问两点是否在同一个连通分量里
输出:[true, false, ...]
有个词典["c", "ch", "chi", "hi"...],给你一个list,里面的元素是字符串,判断能否通过合理的切分使得字符串能切分成词典中的元素,每个元素可以使用的次数无限,返回是否能切分成功,能则为true,不能为false。
比如:["cchic","chihhi"... ] 输出 [true, false]
(看完题目,大概说了一下思路,然后尝试让面试官换题。
面试官:为什么要换题呀,你做做试试,我要是换题肯定更难
我:好的(苦笑))
设计一个简单的评论系统,要求写出创建表和查询的sql
①评论包括一级评论和二级评论(即在一级评论下还可以评论)
②一级评论有热度值,热度值为该一级评论下二级评论的条数,二级评论无该属性
③查询方式有两种,一个是按时间排序,一个是按热度值排序,要求分页查询
分页查询的地方说了一下 limit 0, 50 和 limit 100000, 50的区别和优化方式
(应该是因为我问了为啥不问八股,就给我来个八股意思一下,果断抓住机会从主从讲到哨兵再讲到cluster,还讲了如果master宕机了,哨兵模式和cluster模式分别怎么办,讲了一致性哈希等,该问题主要参考《Redis设计与实现》)