字节面经记录
字节跳动一共三面,都是技术面,面的很杂,算法题也比较有东西,待遇高是有高的原因的。
一面二面连在一起,还好三面面试官有事调时间了,面到1点半没吃饭饿死我了。。。
我的第一次面试,没想到就是这么难的公司,网络、数据库和操作系统学得真是太少了,恶补中
一面
- 自我介绍
- 介绍红黑树
const *
和* const
区别- 用shell做词频统计
- 进程线程的区别
- 线程间、进程间资源共享相关问题
- 各种变量的存储位置
- 用户级线程和内核级线程的区别
- 智能指针原理
- 项目相关
- 网络中的滑动窗口
- 长连接有什么缺点要注意什么,安全性怎么保证
- 现场撸码topK,K小于内存N大于内存,用堆实现的核心代码(并且要求不能先将堆顶元素pop再将新元素push,对于每个新元素最多只能进行一次遍历调整)
- topK问题,K和N都很大放不进内存怎么处理(除了K路归并的方式)
面了一个多小时,感觉一面很多问题都没答上来,没想到还能进入二面,因该是代码写得比较好
二面
-
自我介绍
-
项目介绍
-
在项目中,如果端口占用会在什么地方报错,打开文件过多会在什么位置报错
-
TCP层面的close和我的项目业务逻辑层面的close
-
哈希表怎么实现,怎么扩容
-
当发现程序内存泄露,怎么定位问题
-
现场撸码算法题:
输出二叉树左视角能看到的节点 给定一颗二叉树,各节点的值均为数字 从左边看,输出能看到 1,2,6,8 这四个节点 输入描述 以空格隔开的整棵树,空节点以 # 代替,如题目描述中的树,表示为 1 2 3 # # 6 7 # # # # # # # 8 如果输入为 #,表示这是一个根节点为空的树 输出描述 输出以空格隔开,输出示例如下 [1 2 6 8] 示例1 输入 1 2 3 # # 6 7 # # # # # # # 8 输出 [1 2 6 8]
#include <iostream> #include <cstdio> using namespace std; #define MAX 100000 int main() { char str[MAX], ans[40]; char temp; int size, cnt = 1, ans_cnt = 0; while (scanf("%c", &temp) != EOF) { if (temp == '\n') break; if (temp == ' ') continue; str[cnt++] = temp; } size = cnt; cnt = 1; while (cnt <= size) { for (int i = cnt; i < cnt << 1; i++) { if (str[i] >= '0' && str[i] <= '9') { ans[ans_cnt++] = str[i]; break; } } cnt <<= 1; } cout << '['; for (int i = 0; i < ans_cnt; i++) { cout << ans[i]; if (i != ans_cnt - 1) cout << " "; } cout << ']' return 0; }
-
算法题:
热锅上的蚂蚁 现在热锅上有一群蚂蚁,他们急得团团转,当他们发生碰撞时,就各自掉头。 假设热锅是一个圆环,周长为L个单位,从某点开始顺时针方向为单位1,2,... L,现在热锅上有n只蚂蚁, 第i只蚂蚁起始时在第a_i个单位上,都绕着这个圆环的边缘做顺时针或逆时针的圆周运动,每秒移动一个单位, 求经过t秒后,这n只蚂蚁的位置。 假设他们碰撞掉头的动作不花费额外的时间,且初始时这n只蚂蚁在不同的位置。 输入描述 第一行三个整数 n, L, t 其意义如题目描述。 接下来n行,每行两个整数 a_i, d_i,a_i表示第i只蚂蚁的位置,d_i 为1表示这只蚂蚁初始时顺时针运动, 为2表示这只蚂蚁初始时逆时针运动。 1 <= n <= 1e5 2 <= L <= 1e9 0 <= t <= 1e18 1 <= a_i <= L 1 <= d_i <= 2 输出描述 n个整数,第i个整数经过t秒后第i只蚂蚁的位置 示例1 输入 4 8 6 6 1 5 2 1 1 8 1 输出 7 7
别的部分答上来的记不住了,二面发挥还好,等待三面,还好没再连着面
三面
- 现场撸码:写一个
memcpy()
,并改进效率 - 在硬件级别底层能不能优化
memcpy()
- 项目相关(测试框架)
- 写宏容易出错怎么解决
- 在做项目工程中遇到的问题
- 讲讲
CLOSE_WAIT
状态 - 进程线程协程区别
- CPU流水线
- 未来的规划
- 对哪个技术方向感兴趣
- 最近在做什么
- 怎么学习新技术
然后就是我向面试官问一些问题,
- 公司情况
- 具体工作,语言
- 新人培养方案
- …
整个面试50分钟,一半是技术问题,一半是面试官介绍一些公司的情况。
三面面试官是部门 leader ,就不是单纯的技术面了,也考察了一些非技术能力
加⾯
突然通知有⼀轮加⾯,搞得我很慌,问得问题都⽐较有深度
-
项⽬,问为什么做这个项⽬,为什么这么设计,优缺点,
-
函数调⽤时底层发⽣了什么
-
还有⼀些简单的基础
-
百度根据⽤户输⼊关键词⾃动推荐query的项⽬,如果你给,你怎么做。(这个问题聊了挺久,不断地在我的解决方案上加情况,包括⼀个关键词对应多个query,输⼊多个关键词等等)
总结
当⾯试关的问题不够清晰可能会有⼆义性时,⼀定要反问⾯试官确定具体问题。
总体来说,感觉发挥的不好,很多东⻄没表现出来,好在算法题做的还不错。
坐等hr了