校招面经 - 滴滴提前批 - 后端 (已意向)
时间线:8.14(一面、二面)- 8.21(三面) - 9.14(意向)
吐槽:理论上应该一个下午面完,但三面面试官有事鸽了我两次!!三面其实回答的不太好,题目也做的不太好,而且面完一直杳无音信,官网查不到状态,以为早就挂了,没想到突然意向了。
一面(45m)
实习相关:
- 简单介绍
- 难点是什么(业务复杂度)
- 服务端稳定性如何支持?各方面怎么做的?
- 可观测性
- 基于稳定性指标优化
- 通用优化
- 尖刺导致下游打崩如何处理
- 扩容
- 限流
Go 八股:
- return 时,如何考虑使用指针还是示例
- golang gc 的时机(内存使用到达一定比例时)
- golang 的多线程优点
- 可增长栈
- M:N 调度
- 为什么 M:N 调度既有全局队列又有本地队列?
- 避免竞争(加锁劣化性能)
数据库八股:
- B+ 树的特点
题目:
- (要求用 Go,偏工程)对一个很大的一维数组求和,但是要多线程加速,且每个线程不超过 2 s。
- 根号分块,然后 sync.Wait 即可。超时控制通过 time.After。
二面
忘了录音。
面试官挺厉害的,不仅听懂了我的项目,还提了我没想到的方案优缺点,对我很有启发。
三面(1h6m)
实习相关:
- 介绍项目一(背景、目标、个人工作)
- 框架(原状、对比方案)
- 为什么叫框架,内部是有什么架构设计?
- 介绍另一个项目(filter)
- filter 看着当前有些问题,如果让你实现会怎么做?
- CPU 上涨,怎么处理?
- 一次 RPC 请求中,超时怎么判断是哪个部分的问题,客户端问题、服务端问题、网络抖动问题?
C++ 八股:
- 引用计数场景,怎么保证线程安全?答了 CAS,查了下 C++ 的 atomic 应该是通过硬件原子指令(包括 CAS )
题目:
- 单例模式 + lazy init + 线程安全。
- 司机 - 订单匹配。多个司机 D1 D2 等,多个订单 O1 O2 等,给出多个边,比如 D1 - O1、O3 (给司机1分配订单1和3)的价值分,求最大匹配。
- 回答:一个非常鬼畜的题目。如果是一对一的边,那就是经典二分图最大匹配,可以用匈牙利解法直接解,可惜不是。最终给了个 dfs 暴搜做法。
- 反问:一个低复杂度做法是整数线性优化 ilp,但比较复杂,不要求面试中写出来,面试更多看数据结构、逻辑思路、代码风格。
- 吐槽:整数线性优化 ilp 是一个 NP-hard 问题(指数复杂度),哥么你都三面面试官了,这么技术的嘛。。。