字节跳动基础架构 面经
一面面了两次,第一次挂了。
第一次一面
1.自我介绍,项目介绍
(1)根据项目提问:项目中内存分配器的设计细节和分配速度,空间利用如何?
2.操作系统
(1)读文件:我们在VFS的做用上产生了分歧。
(2)操作系统有那些cache分别是做什么的?
page cache , buffer cache , swap cache。
3.手撕代码
数组中最大子序列和。我当时没写出来。
4.建议
他给的建议是让我多刷题。然后给我推存储部门。
第二次一面
1.自我介绍,项目
2.用户态的NVMe有哪些?
3.进程相关,进程状态有哪些,D,R分别表示什么?
4.进程通信方式?
5.读文件,读某一段
6.DMA 是什么?条件?(物理连续)
7.BIO调度算法有哪些?
手撕代码:两个有序链表的合并。
评价:觉得我工程经验比较少,可能做的东西还是偏理论。
二面
1.自我介绍,项目介绍
2.针对项目问问题
(1)SSD的项目的简单介绍,文件路径解析的具体操作。
(2)内存分配器相关的知识。linux内核的两种内存分配器buddy,slab区别,slab的机制,buddy system的机制。
(3)我的内存分配器的性能会不会受到影响?
(4)逻辑页和物理页的关系,如何匹配。我答了创建子进程,以及进程页面相关的东西。
(5)如果进程因为调度被另一个CPU处理,会有什么操作?(复盘感觉这个问题没有回答好,没有想到进程切换)
(6)问如何验证IP核,用HLS还是verilog写IP核,读写指令下发到SSD,后面怎么处理?答FTL的调度。
(7)文件系统的一致性保证机制?
(8)F2FS文件最大能存多少空间数据?
3.编程题,反转链表
总结:总体感觉挺好,面试官比较友好,问问题也很有逻辑。编程题也太简单了吧。
三面
1.自我介绍,项目介绍
2.针对项目问问题
(1)写文件
(2)静态代码分析
(3)#ifdef 的用法
(4)buffer cache 和 page cache区别
3.编程memcpy实现
4.最后问代码量