大厂面试题 | 字节跳动Java工程师3轮面试汇总!
公司:字节跳动
岗位:Java开发工程师
(以下题目展示顺序非面试顺序)
一面
1. 爬楼梯 => 不允许到达7的倍数层 => 优化为线性(不能使用动态规划)
2. 数据库设计:文件的增加、删除、移动、列出子目录。设计一个表结构。
3. 浏览器请求一个域名,经历了什么。
4. DNS是基于什么协议,有没有基于HTTP的DNS协议。真tm有,晕了。
5. 什么是网关,网关的作用,限流的算法:固定/滑动窗口,消息队列,令牌桶。消息队列怎么限流,消费方如何返回给消息生产方。【同步的话就阻塞,等待返回;异步的话,可以从另一个topic里面取?(不确定)】
6. HTTP的方法,GET和POST的区别,HTTP状态码。502和504有什么区别。
7. HTTP如何保存用户状态。cookie
8. HTTPS 对称加密和非对称加密
9. HashMap是怎么添加元素的
10. TreeMap和HashMap的区别,这个TreeMap真的没用过啊。
11. 为什么TCP建立连接的时候少一次握手?
12. 有没有用过HTTP3.0.
二面
1.上来直接一道leetcode-hard,股票买卖III。(人懵了)昨天看过,但是没记住DP的递推公式。
2.Java中的 Map,HashMap和TreeMap的底层(红黑树),我说成了B+树。【红黑树适合内存中插入删除较多的场景,弱平衡二叉搜索树;B+树具有比较好的磁盘IO特性】
- 引申出了并发安全Map
- 乐观锁悲观锁怎么实现
- 底层怎么实现
3.TreeMap底层的数据结构,我说是B+树,由此引申出了InnoDB的存储引擎,以及为啥要使用B+树。
3.1 为啥不使用AVL或者红黑树
3.2 不考虑磁盘IO,B+树和AVL树的查询效率? O(MlogN)
4.Redis中用来做排行榜的数据结构(Zset)
4.1 底层是什么
4.2 zset为啥需要维护一个map
4.3 查询的时间复杂度是多少
5.画TCP的状态机
6.数据库表格的设计题。
7.反问。面试官说我基础挺好的,面试准备了挺久的吧。工程开发经验比较少,我说我是AI转开发的。
三面
大boss面,上来一通狂怼。
1. 问实习。(问得非常细,这块最好弄熟,不然很尴尬)
1.1 还聊了一堆家常。
2. 问对哪个语言比较熟悉,Java。
3. Java中==和equals的区别
为啥重写equals的时候要重写hashcode
如果不重写hashcode会出现什么问题。
4. Java中的类加载机制。
5. 为什么要使用双亲委派模型。
6. 写题:
6.1 使用rand3生成rand5,一直追问,怎么提升成功的概率,成功的概率是多少,极限是多少。
6.2 在数组中找出和为定值的两个数。优化了四次
6.2.1 使用HashMap
6.2.2 使用双循环
6.2.3 使用排序+双指针
6.2.4 手写排序
7.有啥要问的嘛?
-END-
点击关注黑马程序员