其实三面面试完都有一个多星期了,现在才记录一下面经感觉有点晚,面试前每天都刷各种字节跳动的面经,对我帮助特别大,感谢牛客!!
一面 60min
- leetcode原题,求二叉树的最长路径长度。
- 解释XSS 和 CSRF,它们之间有什么区别,以及如何防范。
- 说一下TCP的三次握手和四次挥手的过程。
- 数据库事务的四种隔离级别分别是什么,它们解决了哪些问题。
读未提交,读提交,可重读读,串行化
读提交: 解决脏读
可重复读: 解决不可重复读
- InnoDB与MyISAM数据库存储引擎有什么区别。
MyISAM 不支持事务,MyISAM只有表锁
- InnoDB的索引使用了什么数据结构,与MyISAM使用的索引有什么区别。
B+树,聚集索引
- mysql为什么要使用B+树作为索引呢?
IO 次数少,效率高
- 场景题:假设你在宿舍玩游戏,突然发现特别卡,原来你舍友在用迅雷下载东西,为什么迅雷会占用网络带宽导致你玩游戏特别卡,而游戏竞争不过迅雷。
- 大数据量处理题:假如你在网上爬取了用户访问的网址存储在文件中,有4个G那么大,但是你目前只有一台电脑,而且内存是1个G的,请问怎么找出用户访问次数最多的网址。(差不多是这个意思)
Map Reduce
- 你有什么问题要问我的吗?
二面 40min
- leetcode原题:二叉树的后续遍历非递归形式。
- 出了一道leetcode上的SQL题 596.超过5名学生的课
- redis有什么数据结构。
- redis中的网络IO有了解过吗,它是单线程的还是多线程的,为什么要用单线程。
- select 和epoll有什么区别,你有没有用过。
- 如果你要对班里的学生根据分数进行排名,你觉得用redis里的哪个数据结构比较好。
zset
- zset的底层是用什么数据结构实现的。
跳跃表
- 数据库的四种隔离级别,解释一下不可重复读和幻象读。
- InnoDB与MyISAM数据库存储引擎有什么区别。(又问了一遍)
MyISAM 不支持事务,MyISAM只有表锁
- cookie和session的区别是什么,干什么用的,JWT有了解吗?
- 你之前是搞Java的呀,那我问你String 和 StringBuilder有什么区别。
- 你了解哪些网络攻击?
syn 攻击
DNS攻击
- 你有什么问题要问我的吗?
三面 70min
- 还以为头条面试是不问项目的,所以也没怎么准备,结果一上来就怼项目和实习经历,各种问,面试官特别严肃,感觉是某个部门的leader,搞得我特别紧张,不多叙述了。
- 算法题1: leecode原题,买卖股票的最佳时机,只能一次买入和一次卖出,要求输出买入的时机和卖出的时机和赚取的最大利润。
- 做完这道题后就接着要求写出可以进行多次交易的结果,求赚取的最大利润。
- 算法题2:leetcode原题,一天有24小时,一个工人在某一天里短短续续的工作了几个小时 例如1 ~ 2 点,4~8点 5~10点。。。,求这个工人这一天中一共工作了几个小时。(其实就是区间合并问题)
- 你有什么问题要问我的吗?
去年找日常实习的面经,整理了一下。三面算法没写出来,挂了。
一面
1. 算法题:二分搜索相关
2. 概念题:解释 分布式、微服务、负载均衡、高可用
3. http是有状态还是无状态? TCP是有状态还是无状态?
4. 客户端禁用cookie怎么办? 你说的实现方式安全吗?
5. SSL,http和https,https是有状态还是无状态?
6. String为什么设计成final不可变? 是怎么实现不可变的?
保证线程安全
7. 自己能实现一个不可变的类吗?
用final修饰
8. equals 和 hashcode 为什么要一起重写?如果不重写hashcode会出现什么问题?
使用HashMap时,会先比较hashcode,再比较equals
9. hashmap插入的时候,哈希冲突解决? 查找的时候,哈希冲突怎么解决?
链地址法
10. hashset是怎么实现的? hashmap是怎么实现hashset的?
value 放一个常量
11. 多线程:并发和并行,原子类,CAS操作
12. mysql的索引:B+树底层实现?B树的底层实现?为什么要用B+树而不用B树?
13. 最左前缀匹配具体是怎么实现查找的?最左前缀匹配用了B+树的哪些特性?
14. (a,b,c)联合索引,为什么不能单用(b),而一定要用(a,b)?B+树是怎么实现的?
15. 什么是幻读,不可重复读?这些概念是在事务内还是事务外? 事务内
16. mysql怎么实现可重复读?设置了可重复读隔离级别底层是怎么实现的? (MVCC)
17. 了解MVCC吗?怎么实现的?什么是快照读?快照读能读取到最新的吗?快照读和当前读的区别?
18. synchronized和reentrentlock哪个效率高?
reentrentlock
二面
1. 算法:实现一个缓存队列 ,二叉树的镜像
2. 进程和线程的区别?内存管理说一下你的了解。进程调度算法。
3. 为啥B+树最后叶子节点需要用链表相连接? 便于区间查找
4. TCP状态转换图,画一下。
5. 操作系统I/O模型了解吗?epoll模型了解吗?
IO 多路复用
6. CopyOnWriteArrayList的相关特性?
写时复制
7. ArrayList遍历的时候能删除元素吗? 删除的时候会报什么异常?
不能,空指针异常?
三面
1. 算法题: (1)树的节点最大距离(2)区间覆盖 例 [1 3] [2 5] [3 6]能否覆盖[2 6]
2. Linux相关命令。
3. 手写SQL,join