2023届 好未来正式批面经
背景:双非一本 无实习 项目kv数据库
时间线:投递8/3 -> 笔试8/13 -> 一面8/21 -> 二面8/21 -> HR面8/21
笔试比较简单,输入输出比较烦人(拿核心代码的用例直接当作输入,还需要自己解析字符串)。
三轮面试一上午完成,面完就通知下一面。一面项目问题比较多,二面大部分时间写题。
岗位:服务端开发工程师
一面 8/21
- 自我介绍
- 介绍项目
- 其他编程语言
- 介绍leveldb
- 数据结构的实现
- 详细介绍hash的KV结构
- 如果要查询hash中的所有Key如何操作
- 每次查询都需要从前向后遍历吗
- 是否可能出现哈希冲突
- 详细介绍zset的KV结构
- 范围查询zset下某些范围的Key
- redis的zset怎么实现的
- 介绍跳表
- redis的过期策略(定时,惰性)
- redis的持久化策略(AOF,RDB)
- redis主从同步原理(全量,增量)
- zset的使用场景,hash的使用场景
- leveldb封装的网络服务器
- epoll和poll的区别
- epoll的两种触发模式
- 网卡从收到数据到进程拿到数据的过程
- 如何减少数据拷贝(DMA)
- 介绍项目reactor模型
- 进程间通信方式
- 解决死锁问题
- 有哪些锁
- 访问临界区如何加锁
- 一写多读如何设计锁(读写锁)
- 介绍TCP四次挥手
- 客户端和服务器分别处于什么结束状态
- TIME_WAIT的作用
- 服务端有大量TIME_WAIT的原因
- 如何处理上述情况
- MySQL索引结构,介绍B+树
- 主键索引和联合索引分别如何工作
- SELECT .. WHERE a = ? AND b = ? ORDER BY c 如何创建索引
- SELECT .. WHERE a = ? AND b > ? ORDER BY c 联合索引abc是否失效
- MySQL如何保证数据一致性
- 介绍事务底层原理
- MVCC的undo log存放在哪
- 介绍用过的设计模式
- 面向对象三大特性
- 为什么要有多态
- 将参数中派生类指针使用基类指针替换是什么原则
- 多态如何实现的
- 析构函数可以是虚函数吗
- 析构函数/虚析构可以抛出异常吗
- C++的bug一般怎么调试
- 程序core dump如何调试
- 写代码一般使用什么环境
- 算法:二叉树的层序遍历
- 反问
二面 8/21
- 自我介绍
- 写项目中遇到的挑战,如何解决
- 项目中的分工(层次划分)的好处
- 主修语言
- C++和Java的区别
- 场景题:两个文件 1.txt 2.txt,每一行都是一个数字(正整数),1.txt中有20w行数据,2.txt中有100w行数据,文件内数字无序。希望得到3.txt,是两个文件中的数据合并到一起并正序排序的结果
- 该算法如何优化
- 如果将该算法放入分布式环境怎么做
- 未来规划
- 反问
HR面
聊天,不过听hr的意思是过了就给offer,没有意向书的概念。求offer QAQ
更新:hr面挂了