注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
求大米
潜水很久,这次面试从地里捞了不少干货,发个帖回馈一下。题目用谐音,见谅。
狗家和买它的节奏很不一样:一轮 45 分钟基本就一道主题目,剩下的时间全在 follow up 上,面试官不会让你写完就完事,一定会追着问「如果输入变成 X 呢」「这个复杂度还能再降吗」。代码是写在 Google Doc 里的,没有语法高亮也不能跑,所以自己心里过 test case 就更重要了。另外面试官全程在敲键盘记笔记,一开始有点不适应,习惯就好。
第一轮 Coding
印度小哥,英语很好懂。
题目是幺八舅幺那一类:给若干根长度不同的木头,要切出至少 K 段等长的,问这个等长的长度最大能是多少。
我一开始往贪心和排序上想了两分钟,发现不对。面试官没打断,等我自己说「感觉这个方向不太行」,才提示了一句 "what if I gave you a candidate length"。这一下就通了 —— 直接求最大长度很难,但给定一个长度 L,判断能不能切出 K 段太简单了,就是 sum(w // L for w in woods) >= K,扫一遍就行。所以在 [1, max(woods)] 上二分,可行就往大了找,不可行就往小了找。
写完之后面试官问了三个 follow up:
- 二分的上界为什么是 max(woods) 而不是 sum(woods) —— 因为切出来的段必须来自同一根木头,不能拼接。
- 长度是浮点数怎么办 —— 改成二分实数,控制迭代次数或者精度阈值。
- 复杂度 —— O(n log(max)),他还追问了一句为什么不是 O(n log n),让我说清楚 log 里面是值域不是元素个数。
地里之前有帖子提到这类「答案不好求但验证很容易」的题,本质就是把 max_x f(x) 转写成 min_t t, s.t. t >= f(x)。我面完才反应过来矩阵里从左上走到右下求最大值最小的那道题也是一个套路,建议大家一起打包练。
第二轮 Coding
白人大姐,话不多,全程在记笔记,反馈很少,中间我一度以为答崩了。
主题目是酒拔遛的变种:给两个各自排序好、内部无重叠的 的时候发现自己一个毛病:讲到 Result 就草草收尾,光顾着讲过程了。建议大家自己录音回放一遍,问题一听就出来。
一些感想
- 狗家真的是 follow up 决定成败。 主题目基本都是地里见过的,但你只写完主题目大概率不够。我的体感是「写完主题目」是及格线,能扛住两三层 follow up 才是 hire。所以刷题的时候不要写完就翻答案,多问自己一句「如果输入变大 / 变成流 / 内存放不下会怎样」。
- 二分答案这个套路一定要吃透。 我这次五轮里撞到一次,地里的帖子里也反复出现。特征很好认:求某个量的最大最小值,直接求很难,但给定一个候选值去验证很容易。
- 在 Doc 里写代码要提前适应。 没有自动缩进、没有报错提示,我提前一周就改成在纯文本编辑器里刷题了,效果很明显。变量名写长一点,面试官读起来也舒服。
- 边写边说,卡住了就说出来。 第一轮我想岔了两分钟,是自己说出「这个方向好像不行」之后面试官才给的提示。如果我闷头憋着,那两分钟就是白扔的。
- Googleyness 别当水轮。 我一开始也觉得就是走个过场,准备的时候才发现要把六七个 story 说清楚、还要有数字支撑,工作量一点不小。
求大米,祝大家都能拿到心仪的 offer! |