TikTok直播研发部后端开发实习三轮技术面+HR面
📍面试公司:字节跳动
👜面试岗位:后端开发实习
一面
📖面试问题:
- 项目介绍
- raft算法原理
- 怎么理解最终一致性和顺序一致性
- raft按照CAP理论,属于AP、CP哪个流派
- mysql的主从模式又属于哪个流派
- 抖音刷视频,按照CAP理论,考虑应该满足哪几个特性
- C++ 虚函数和纯虚函数
- C++ 内存布局,堆和栈的区别
- C++ shared_ptr 与 unique_ptr 的区别,使用shared_ptr有什么问题,怎么解决
- 如何理解移动和拷贝,为什么需要移动语义
- 如何避免内存泄漏
- new 和 malloc、delete 和 free 的区别,是否会占用指定大小的物理内存
- 什么是虚拟内存
- 页面置换流程与页面淘汰算法
- 进程间通信方法
- TCP与UDP区别,TCP拥塞控制算法
- HTTP与HTTPS的区别,HTTPS为什么安全
- leetcode No.3 无重复字符的最长子串
- 问时间复杂度和空间复杂度
- 反问: 没问
🙌面试体验:
感觉面试官都是根据我的回答决定下一个问题,答得越多问得越多,问得越多答得越少
二面
📖面试问题:
- 项目介绍
- 市面上有哪些成熟产品使用了你项目中的这些技术(TiKV)
- 详细介绍一下LSM-tree, 与mysql存储引擎设计有什么区别(读写频率不同)
- mysql为优化磁盘IO做了那些努力(减小树高,使用缓存,限定字段长度,新增时尽量往后追加)
- mysql与磁盘交互的单位大小是多少,为什么B+ tree不如lsm-tree的写入性能好(追加写和原地写)
- 怎么理解跳表,如何确定跳跃步长(概率均衡)
- 详细介绍一下raft分布式共识协议,如何理解CAP理论
- raft的数据同步机制是同步的还是异步的(异步向集群中的节点发起日志追加调用,但需要同步等待超过半数的节点成功或失败才响应客户端请求)
- 如果某个节点在一次同步数据过程中同步失败怎么办(心跳包携带日志数据保证最终一致性)
- raft保证了什么程度的一致性,如何理解弱一致性、强一致性、即时一致性、最终一致性、顺序一致性、线性一致性
- raft如何保证读的一致性,刚写入的数据能否立即读到(read index、lease read)
- leader如何确认自己仍然是leader(lease、heart beat)
- raft集群领导选举期间,无法对外提供服务,能否对业务层透明化
- 海量(500G以上)字符串,找出出现次数最多的字符串(通过hash使得一个字符串只出现在一个文件块中,然后分块统计出现的次数)
- leetcode No.32 最长有效括号
- 你是用栈实现的,能否用动态规划实现
- 反问: 没问
🙌面试体验:
二面开始扣项目细节,只能说扣得很准
三面
📖面试问题:
- 聊聊学校学习生活
- 为什么实习,为什么选择保研
- 项目介绍
- 说说lsm-tree的缺点,如何解决这些问题(读性能不高、存在写放大问题,不能既要又要,使用bloom filter可以一定程度提高读性能,针对写放大采取K-V分离的策略)
- 如何理解布隆过滤器,是否会出现误判(假阳误判)
- 项目中遇到哪些问题如何解决的(提了一个debug分配对齐内存失败的问题)
- 怎么理解内存对齐(减少CPU访问内存的次数,aligned_as cache_line可以避免伪共享)
- 为什么想着实现这样的一个项目(选修过云计算基础课,比较感兴趣)
- coding一下,leetcode 打家劫舍和打家劫舍II、leetcode 最长连续序列
- 询问实习时间
- 反问: 没问
🙌面试体验:
问题不多,但有深度,面试官不只是问你,而是和你交流探讨。
HR面
📖面试问题:
- 经历三轮技术面,有哪些印象深刻的精彩瞬间
- 比赛和项目经历
- 如何平衡学习和实验室项目
- 这可能是你第一份实习,你认为会有哪些挑战
- 询问实习时间
- 介绍待遇
- 反问: 没问
🙌面试体验:
HR姐姐真温柔