字节跳动后端开发-四轮面试-校招面经
更新一则招聘信息:
字节跳动校招内推码: JUY66ZV
投递链接: https://job.toutiao.com/s/JMBQPQp
我所在的教育部门比较缺人,服务端/前端/客户端/测试等岗位均有招募。有意向的朋友可以私聊我(我可以直接发简历给 HR),或者直接通过链接进行投递。投递后可以随时联系我查询进度。
前三轮是暑期实习的面试,连着三天完成。后来加了一轮技术面,进入了秋招提前批,面完第四轮的第二天收到通过的通知。时间隔得有点远,问题可能有遗漏。
一面
自我介绍。
大四的课程多不多?能来实习吗?
介绍项目。
TCP 和 UDP 的区别。
TIME_WAIT 是什么?
TCP 流量控制和拥塞控制。
HTTP 包结构。
你提到了 If-Modified-Since,它的作用是什么?这个字段的值如何确定?
知道 Cookie 吗?
HTTP 请求方法。
列举 HTTP 状态码。
进程和线程有什么区别?线程共享哪些东西?
进程通信的方式有哪些?
你提到了 Unix Domain Socket,那 Unix Domain Socket 和绑定 localhost 的 Socket 有什么区别?哪个性能更高?
C++ 多态的实现。
std::shared_ptr 怎么实现?
用过什么数据库?
各个数据库的应用场景。
InnoDB 和 MyISAM 的区别。
MySQL 索引的作用和实现。
对于
SELECT id, age FROM user WHERE status = 0 and age > 12;
这条语句,怎样建立索引比较好?编程题:给定一个升序数组 1,元素有重复,对每个元素算一下平方后得到新的数组 2,问数组 2 中不相同的元素共有多少个?给出算法和空间复杂度,要求尽量优化。
追问:
1: 是否一定要平方?
2: 对于 [-13, -13, -13, 17, 17, 17] 这个输入数组,你的解法有什么问题?
二面
自我介绍。
大四的安排。
在你做的项目中,选一个最难的项目进行介绍。(我说没有难的项目,面试官就没有追问。)
对于进程管理这一块,你有什么可以说的?如果一个进程占用了过多时间,怎么办?
对于内存管理这一块,你有什么可以说的?虚拟内存怎么优化?
Socket 编程用了哪些系统调用?
TCP 的包怎么保证有序性?
用过哪些 MySQL 引擎?
InnoDB 和 MyISAM 的区别。
MySQL 索引的实现。
在 MySQL 中,怎么知道一条语句是否使用了索引?
如果一条语句的查询关键字包含了索引中的关键字,但是 MySQL 引擎还是没有使用索引,有可能是什么原因?
编程题:给定 m 个不重复字符(如:[a, b, c]),以及一个长度为 n 的字符串 (如:tbbacbctsafsg),问能否在这个字符串中找到一个长度为 m 的连续子串。要求子串由给定的 m 个字符组成,顺序不要求(如:bac)。
- 我先说了暴力解法,然后想到了一个 O(N) 的解法,但是需要额外的空间。面试官问能不能把空间复杂度降为 O(1),我没想出来,面试官提示说可以用 bitset 代替集合结构。
反问。
三面(HR 面)
入职时间。
实习时长。
对字节跳动的了解。
为什么想加入字节跳动?
对加班的看法。
优点/缺点。
职业规划。
反问。
四面
自我介绍。
主要用什么语言?
C++ 虚表是什么?
TCP 三次握手和四次挥手。
TIME_WAIT 为什么是 2MSL 而不是 1MSL 或者 3MSL?(不知道。)
HTTPS 密钥交换的过程。(我只知道 RSA 密钥算法,大概讲了一下过程。)
用过什么数据库?
聚集索引和非聚集索引的区别。
MySQL 隔离级别。
脏读和幻读的概念。
MySQL 用什么方法解决幻读问题?
用过缓存系统吗?
你的项目有什么亮点吗?(没亮点。)
编程题:现有两个表示正整数的字符串,写一个函数求的两个整数相加的结果对应的字符串。见 LeetCode 415。(我以为这是道热身题,没想到写完这题就结束了。)
反问。