字节跳动 后端开发 一面面经
概述:字节约面和面试的效率都挺高的,一面面试官很年轻,手撕不是leetcode的,花了点时间,然后主要问八股和项目,大概80分钟
面试过程:
1、自我介绍
2、手撕,第一道没想清楚,做的第二道
- 鱼缸的最大高度,给定雨水数量,和鱼缸内各列的石头数目,求能使鱼缸被雨水填满的最大高度
- 想到了二分,但是没想清楚,一直想用接雨水
- 面完后想了下,假设没有石头时的鱼缸最大高度h,最终的H肯定在(h+所有列的最小石头数,h+所有列的最大石头数)之间,然后二分查找最优值,每次确定H后可以直接算出需要的水的数量(接雨水完全复杂了)
- 给定一颗树,选2个节点,分别下落到叶子节点,最终结果有多少种可能
- 叶子节点值为1,非叶子节点值为子节点值之和,BFS分层,从底层往上层计算值,2节点值相乘就是结果
3、HTTPS握手过程
4、会话秘钥生成用的什么算法,具体原理是什么
5、MySQL在磁盘上是怎么存储的
6、讲一下B+树也就是索引的实现
7、通过索引就能直接找到记录吗
8、数据页是怎么查找到记录的
9、索引的分类
10、前缀索引算一种分类吗,与普通索引的区别
11、前缀索引的索引页上记录的是前n个字符还是整个字符串
12、讲一下自己做的项目
13、epoll是怎么实现的
14、epoll如何处理发生事件的fd
15、epoll与poll的区别
16、为什么poll不能只返回发生事件的fd,了解poll底层怎么实现的吗
- poll是指定fd关注的事件,然后拷贝到内核中检测对应事件是否发生,发生了即可以返回所有fd,没有在内核中维护一个记录已发生事件的结构表,而是全部拷贝回用户态,兼容性更好
- 从api上看,poll给定的fds数组包含所有需要检查的数组,epoll的fds都存在内核中,epoll_wait传入events来保存发生的事件
17、项目中线程是怎么工作的
18、为什么考虑使用协程作为任务
19、协程怎么实现的
20、ucontext是什么
21、项目中怎么用到epoll的
22、没有进入协程任务队列的协程存放在哪里
23、如果有个协程运行时间过长,协程任务队列中的协程会不会延时,怎么处理?
24、反问
#字节求职进展汇总##牛客创作赏金赛##软件开发笔面经#