注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
这家的面试形式和别家差别挺大,值得单独说一下。四轮里只有一轮算是传统意义上的做题,其余的都是「给你一个小需求,写出能上生产的代码」。用的是他们自己的在线环境,可以跑测试,也可以查文档。所以纯背模板在这里帮助不大,写得干不干净、测试有没有覆盖,权重非常高。
题目用谐音。
第一轮
这一轮最接近传统面试。
题目是二伞溜舞,任务调度。给一串任务和一个冷却时间 n,同一种任务两次执行之间必须间隔至少 n 天,不同任务之间没有限制,每天最多执行一个任务,也可以什么都不做。问全部执行完最少需要多少天。
我一开始想成了另一道很像的题(那道是要求排出具体顺序、答案和最高频次有关),说到一半自己发现不对——这道题任务是有固定顺序的,不能重排。面试官说「对,你重新读一下题」。
理清楚之后就简单了:用一个哈希表记录每种任务上一次执行的天数,遍历任务,如果当前天数距离上次执行不足 n+1 天,就把天数直接跳到「上次执行 + n + 1」,否则天数加一。更新哈希表,继续。
写完之后他关注的不是复杂度,而是几个工程问题:
「n 等于 0 的时候你的代码对吗」——对,跳转条件不会触发,退化成每天一个。
「任务列表为空呢」——返回 0,我加了个提前返回。
「如果任务 I的、你自己最满意的一段代码,为什么满意;讲一次线上事故,你在里面做了什么;你怎么看待测试,什么情况下你会觉得不写测试是可以接受的;你怎么和 code review 里意见不同的人沟通。
第三个问题我觉得挺有意思。我的回答是:一次性的脚本、探索阶段的原型可以不写;但凡是会被别人调用、或者会跑在生产上的,必须写。而且测试的价值不只是防错,更是把接口的预期行为固定下来。他接着问「那你怎么判断测试写够了」,我说不看覆盖率数字,看关键分支和边界有没有覆盖到,覆盖率高但全是无断言的测试没有意义。
业务部分他讲了一些他们在做的事,也让我问问题。我问了他们怎么处理和资金相关的一致性问题,聊了一会儿幂等和对账。这部分虽然不是考核,但能看出他们对正确性的要求确实比一般的产品公司高。
求大米,祝各位顺利。 |