渡十娘|北美码农初入职场——码农面试中的Coding Questions
做公众号里的《纽约客》
戳蓝字一键关注 渡十娘
转发也是一种肯定
作者简介:鸭哥,毕业于中国科学技术大学PB0611,08年代表学校参与了奥运火炬传递。后赴美哥伦比亚大学留学。期间取得了固定翼飞机,机动船舶,和小型挖掘机驾驶执照。鸭哥喜爱摄影,虽然没有艺术细胞,但和厂商很容易打成一片。使用徕卡,振旺,锐星,TeleVue等多个品牌拍摄的作品被厂家用于宣传。
鸭哥职场系列文首發於GRAPEOT博客,作者授权渡十娘公号发表
我有一个project
怎么样才能找到合适的人?
正确性。
差: 面试者不能按时完成程序的编写,或者他们写出的程序对于toy example也不能正确输出。
良:他们的程序能够对toy example正确输出。
优:最好的情况是,他们的程序能够正确处理一些corner case。
Defensive code writing
差: 面试者在做假设的时候没有意识到他在做一个假设,因此没有做任何检查。例如,在取数组a[1]的时候,他们没有检查数组的长度是否大于1。
良: 面试者意识到了这一点并且做了一些检查。
优: 面试者不仅意识到了自己代码里的假设,做了检查,而且把检查放到了单元测试里面。这样,如果别人未来改动了他的代码,引入的错误也会被单元测试发现。
可维护性:尤其是单元测试的撰写。
差: 面试者没有意识到需要主动加入单元测试,在完成实现以后就结束了。
良: 面试者主动写了单元测试,并且使用了业界流行的单元测试框架,如pytest来进行测试。
优: 面试者先写测试,然后再写实现,这就是测试驱动开发(test driven development)。
可读性: 面试者应当使用合理的变量命名,简明合理的变量命名,并在适当的位置撰写注释和文档。
与具体题目相关的信号,例如决策树等机器学习算法的实现涉及到许多参数,如何通过合理的配置处理来避免调用者在参数管理上出错,也是可以提取的信号。
差: 面试者直接将参数写成magic number,那么未来修改起来会很困难。同时,调用者也无法影响函数的具体行为。
良: 面试者利用函数参数来管理配置。
优: 面试者利用编程语言的特性来系统性地、可扩展地管理这些参数,例如在Python中使用kwargs,利用这个字典来系统化管理。
对算法的熟悉程度。例如,对于决策树,面试者提到可以通过剪枝来优化。对于KNN,面试者提到可以通过某些近似算法来大大加速。这部分讨论更像是系统设计,不一定要写代码,可以通过讨论的方式进行。数据结构和算法的考察也可以在其中进行。
面试者应该熟悉自己使用的编程语言的特性和设计思路。例如,在使用Python时,不应该像使用C++那样大量使用循环,因为Python中的循环效率非常低。相反,应该使用list comprehension,这样既提高了可读性,也提高了效率。对于机器学习特定的情况,进行矩阵运算时,应尽可能使用NumPy,而不是用Python进行逐行处理。这样往往可以实现既易读又高效的代码。
debugability。虽然在正确性方面对debugability已经有了一定程度的考察,但还有一些其他的信号可以参考。例如,面试者在类似coderpad这样的平台上编写代码时,是否能够使用pdb等python debugger。如果能使用这样的debugger,就说明他们有丰富的debug经验。当然,使用print等传统方式也是可以的。在这种情况下,我们可以观察面试者是否能够策略性地在适当的位置放置print语句,以便在最短的时间内快速定位bug的位置。此外,对错误信息的解读也是一个很好的信号。这种debugability的考察不仅针对面试者解题本身,同时还要考虑到这个函数的调用者。因此,如果面试者有经验,他们可能会考虑在函数的适当位置放置logging语句,并设置适当的verbose level,以帮助函数的调用者来进行debug。
做更好的公号 做更好的自己
昨日更新:
2022 热文排行榜:
其他:
读完请点"在看"让更多人看到
图片 I 网络
整理 I 编辑 I 渡十娘
清单内容来自 I 鸭哥
版权归原作者 I 如有侵权 I 请联系删除
生活中
总有些东西值得分享
渡·十·娘
DES
IGN
发现 I 家庭 I 乐趣
想每天与渡十娘亲密接触吗?
喜欢?粉她!
有话想说:
微信扫码关注该文公众号作者