新足迹

 找回密码
 注册

精华好帖回顾

· 小儿女记事系列12-假期游Healesville Sanctuary(母女日记合一) (2009-9-24) 清凉 · 悉尼各区面面谈(二):中部咽喉----宝活市 (2005-7-25) horseanddragon
· 香港印象 - HongKong memory (多图,慎入) (2007-12-9) powermao · 澳洲生活Q&A-公共交通(墨尔本) (2004-12-22) leeshine
Advertisement
Advertisement
查看: 5421|回复: 23

[IT] 澳洲找工作系列之2:如何做好程序测试(Code Challenge) [复制链接]

发表于 2018-10-1 15:54 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
对了绝大多数新移民来说,找到一份满意的工作是落脚澳洲最重要也是最艰难的一步。所以我在公众号里写了一篇如何写好一份简历的文章,相信已经帮助到不少朋友了。今天我就来跟大家分享一下,作为一个码农求职,如何才能做好Code Test。


澳洲码农的面试基本上是这样的流程,HR或者猎头收到简历后,会电话跟你简单聊一下,了解你的技术背景和工作经历,合适的话,就会进入下一步。对于不少公司,下一步就是发给你一道程序题让你做好之后发给他们review,通常不限定时间。


这边程序测试跟美帝公司不太一样。美帝注重算法,所以应聘美国公司,最有效的办法就是去https://leetcode.com上刷题,而在土澳他们更多考察的是TDD(测试驱动开发)和OOP(面向对象编程)。


首先来看TDD是什么。TDD的核心思想就是在写功能代码之前,先写好单元测试代码,run单元测试fail掉,然后实现功能代码,再run单元测试通过,重构代码,重复之前的步骤。国内过来新移民,由于国内TDD并不是很流行,所以非常容易忽视这一点。那怎么才能在程序测试中体现你用了TDD呢?答案就是Git提交历史。Reviewer都会看你的Git代码提交历史,从中看你有没有用TDD以及你解决问题的思路。具体来说,就是先设计好单元测试用例,然后Git提交代码,实现功能保证测试通过后在提交功能代码。简单来说,就是你的Git提交顺序要严格按照TDD的步骤来。


搞清楚TDD怎么玩之后,来说OOP。这边有些公司对OOP的要求已经到了吹毛求疵的地步了,所以程序能不能通过,就主要看你的OOP是不是做好了。什么才是好的OOP,我觉得严格遵循了SOLID原则的OOP才是好的。那什么是SOLID原则,请看:

S: Single Responsibility Principle。单一责任原则,一个类只应承担一种责任。换句话说,让一个类只做一件事。如果需要承担更多的工作,那么分解这个类。

O: Open Closed Principle。开放封闭原则,对扩展是开放的,对修改是封闭的。

L:Liskov Substitution Principle。里氏替换原则,一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序的错误。

I:Interface Segregation Principle。接口分离原则,实现接口的类不应被强迫依赖它不使用的方法,如果出现了,则将接口拆分成更小和更具体的接口,有助于解耦,从而更容易重构、更改。

Dependency Inversion Principle。依赖倒置原则,高层次的模块不应依赖低层次的模块,他们都应该依赖于抽象,通俗来讲,就是面向抽象(接口)编程。


所以在拿到题之后,先不要急于动手,而是先按照SOLID原则分析出需要多少个对象以及对象之间的关系,这样基本上类、接口的关系图就出来了。在OOP这块,很多老手做完题之后觉得自己肯定没有问题了,想着能用的都用上了,结果却挂了,为啥呢?


这好比一个开了好多年车老司机去考驾照,往往比新手更容易挂一个道理。老司机的一个特点就是觉得自己牛,就想炫技,所以不管题目有没有要求,能用上的设计模式都用上,Log加上,多线程用上,然后再把项目里经常使用的,自认为好用的办法,比如常量类和工具类都用上,结果就是写了一堆代码,然后还不是人家想要的,而且代码越多,破绽就越多,结果就是“出乎意料”的挂了。这也好比高手过招,漏几手给人看看,让人觉得你后面还有大招没放,这样人家才会对你有兴趣。


那Review你代码的人想看到什么的样的代码呢?你站在Reviewer的角度想想看,他们平时要工作,老板让你review代码,这种情况下,你作为一个reviewer,你想看的什么样的代码?答案当然是简洁干练的代码。试想一下,如果你去review代码,结果却看到一大堆代码,你有时间和心情好好去看吗?肯定是没有。所以代码除了遵循SOLID原则外,还要遵循以下原则:

    1. 简洁干练。不要实现多余的代码,程序没有的要求,都不要去实现。

    2. 每个类只做一件事,而且尽量小,代码少。

    3. 每个方法坚决不能太长,如果太长了,就细分成多个方法。一般不超过50行,我的经验是最好不要超过20-30行。

    4. 测试用例要100%覆盖你的代码功能。

    5. 命名规范和代码规范必须要遵守。

    6. README要写好,干练而全面。注释不是必须的,关键方法有就行。

    7. Git提交的顺序按照TDD来,同时添加说明。

    8. 多使用语言本身的新特性,让Reviewer知道你关注新技术。


再来看看,那些事情必须要避免:

    1. 不要为了扩展性去添加很多无用的接口和抽象类。好的扩展性是通过好的设计,把类细化后可以让它很容易的扩展,而不是通过一些无用的接口来实现。

    2. 尽量控制炫技,因为炫技往往带来的就是代码量增加,所以做题的时候心思应该放在怎么简化代码而不是让它变得复杂。做减法,做减法,做减法!

    3. 尽量不要用static方法,因为它看起来像面向过程而不是面向对象编程。

    4. 坚决不要用常量类和工具类,因为它们anti-pattern了,关于这方面的争论,大家可以去网上查查。


这边程序设计一般没有时间要求,所以可以按你的节奏来,做到你满意为止。但也不建议拖太长时间,最好不要超过一个周为宜。写好代码后,找人帮你review一下,最好是有经验的大牛,要不然也看不出什么问题来。


提交代码后,不要以为就结束了,而是要想想看,程序有哪些局限性,哪些地方还可以改进,哪些地方可以更好的扩展等等。因为如果代码过了,进入下一轮技术面试,是非常有可能继续讨论你的代码的。有的公司有pair programming,比如myob等,通常会让你在你的代码上进行功能扩展,当然最重要的不是为了实现功能,而是考察应聘者沟通能力、合作能力和解决问题的能力。


如果不幸这关挂了,一般HR会给你电话或者邮件,告诉你他们的feedback,这些feedback要好好去琢磨和改进,这样才能不断的进步。如果HR没有给你feedback,你也可以主动找他们要。失败不可怕,不断地总结和提高,offer很快就会来的。

评分

参与人数 5积分 +19 收起 理由
sunnycoder + 2 精品文章
binli0114 + 3 感谢分享
gzrain + 4 感谢分享

查看全部评分

[ur
Advertisement
Advertisement

发表于 2018-10-1 20:07 来自手机 |显示全部楼层
此文章由 luliang2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 luliang2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
tjmd001 发表于 2018-10-1 16:05
赶快拉到吧,想要的公司,过去随便聊聊项目,Offer很快就下了。凡事让做什么小项目,Code Challenge的根本 ...

Google也得做

特殊贡献奖章

发表于 2018-10-2 15:52 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
写的真不错

发表于 2018-10-2 20:22 来自手机 |显示全部楼层
此文章由 sdkongkong 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 sdkongkong 所有!转贴必须注明作者、出处和本声明,并保持内容完整
不错

发表于 2018-10-2 20:55 |显示全部楼层
此文章由 沧海一帆 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 沧海一帆 所有!转贴必须注明作者、出处和本声明,并保持内容完整
现在不都在追求fp吗?

发表于 2018-10-2 20:55 来自手机 |显示全部楼层
此文章由 cppbug 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 cppbug 所有!转贴必须注明作者、出处和本声明,并保持内容完整
tjmd001 发表于 2018-10-1 16:05
赶快拉到吧,想要的公司,过去随便聊聊项目,Offer很快就下了。凡事让做什么小项目,Code Challenge的根本 ...

这完全是取决于公司的,现在让写code的居多
Advertisement
Advertisement

发表于 2018-10-4 09:14 |显示全部楼层
此文章由 gzrain 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gzrain 所有!转贴必须注明作者、出处和本声明,并保持内容完整
本帖最后由 gzrain 于 2018-10-4 09:16 编辑

支持一下


我个人看法是,所谓的best practices是会随着时间变化的,关键是你是否认同,我有时候就不习惯所谓的’最新‘的best practices

关于SOLID,principle文字不复杂,但是如何implement就是大学问,往往要通过经验和教训在real world项目获得, 一个新手不可能看着着这堆文字写出优秀的代码;就拿简单的DRY来说,extract method要extract到那个level?实际项目中,一定的code duplication 有它存在的道理,DB的de-normalization也是一样;

关于OOP,我建议看看Sandi Metz和Avdi Grimm的书/教程;特别是Avdi Grimm,个人觉得他是把OOP的本质通过coding解释得最透彻的人, 他最新的MOOM教程反应非常好,如果公司有学习budget的我严重推荐购买,(虽然语言是ruby,但是道理是相通的)

发表于 2018-10-4 09:22 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
gzrain 发表于 2018-10-4 09:14
支持一下

遇到同道中人了,你说的非常有道理,码龙都知道SOLID原则,但是真正能够理解和在实际项目中使用的非常少,需要有高人feedback才知道自己的问题在哪儿,反思,重构之前写的代码,才能慢慢去理解和使用这个原则。
[ur

发表于 2018-10-4 09:33 |显示全部楼层
此文章由 zn7726 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zn7726 所有!转贴必须注明作者、出处和本声明,并保持内容完整
遇到过的基本都是在线code test,都是考算法
现在在干的这家,是给了题让拿回家做的

发表于 2018-10-4 09:44 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
zn7726 发表于 2018-10-4 09:33
遇到过的基本都是在线code test,都是考算法
现在在干的这家,是给了题让拿回家做的 ...

在线code test都是机器来判断对错了,主要考算法,这个相对来说还简单一点。拿回家做的题,更麻烦,更考验你的编程技巧、习惯等。
[ur

发表于 2018-10-4 09:48 |显示全部楼层
此文章由 zn7726 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 zn7726 所有!转贴必须注明作者、出处和本声明,并保持内容完整
batigolsg101 发表于 2018-10-4 09:44
在线code test都是机器来判断对错了,主要考算法,这个相对来说还简单一点。拿回家做的题,更麻烦,更考 ...

我宁愿回家做,有时间慢慢想,太细节的可以google搜一下。回家做不怕,就怕在线考
Advertisement
Advertisement

发表于 2018-10-4 10:06 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
zn7726 发表于 2018-10-4 09:48
我宁愿回家做,有时间慢慢想,太细节的可以google搜一下。回家做不怕,就怕在线考 ...

各有利弊。在线的要求算法多,程序本身的代码和设计考量少,所以只能能通过算法考验,程序本身写得如何无所谓,你甚至一个大函数就搞定,面向对象可以没有,机器没办法去衡量,他只能看输入输出是否对就够了。回家写code,要求就高很多了。
[ur

发表于 2018-10-4 10:18 |显示全部楼层
此文章由 三菱aidem 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 三菱aidem 所有!转贴必须注明作者、出处和本声明,并保持内容完整
很多是online限时的,这样不容易找人作弊

发表于 2018-10-4 10:52 |显示全部楼层
此文章由 xiejiannan 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xiejiannan 所有!转贴必须注明作者、出处和本声明,并保持内容完整

发表于 2018-10-4 20:03 |显示全部楼层
此文章由 xmj 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xmj 所有!转贴必须注明作者、出处和本声明,并保持内容完整
完了,楼主来我们公司面试直接挂
我们原则是,函数不能超过5行,超过请重构

发表于 2018-10-5 08:06 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
xmj 发表于 2018-10-4 20:03
完了,楼主来我们公司面试直接挂
我们原则是,函数不能超过5行,超过请重构 ...

5行,这个要求非常严格啊,你们是面试这么要求还是说实际项目里也是这么要求的?
[ur
Advertisement
Advertisement

发表于 2018-10-5 13:18 |显示全部楼层
此文章由 xmj 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 xmj 所有!转贴必须注明作者、出处和本声明,并保持内容完整
batigolsg101 发表于 2018-10-5 08:06
5行,这个要求非常严格啊,你们是面试这么要求还是说实际项目里也是这么要求的? ...

开玩笑的,哈哈
不过我有一个朋友对项目是这么要求的

发表于 2018-10-5 16:48 |显示全部楼层
此文章由 JinchengLiu 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 JinchengLiu 所有!转贴必须注明作者、出处和本声明,并保持内容完整
tjmd001 发表于 2018-10-1 16:05
赶快拉到吧,想要的公司,过去随便聊聊项目,Offer很快就下了。凡事让做什么小项目,Code Challenge的根本 ...

我现在面了5家公司,基本都是上来就online assessment或者算法面,可我问过一个工作的前辈,他跟我说,他那时候基本都没online assessment,直接就1轮面试。。所以我也搞不懂了,这到底什么鬼状况。。

发表于 2018-10-5 17:40 |显示全部楼层
此文章由 沧海一帆 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 沧海一帆 所有!转贴必须注明作者、出处和本声明,并保持内容完整
现在基本都是很多轮面试。但是考算法的貌似很少见啊,楼主给几个例子看看

发表于 2018-10-5 18:03 |显示全部楼层
此文章由 amyo(∩_∩)o 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 amyo(∩_∩)o 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我就想问这么考三哥怎么办?

发表于 2018-10-5 19:02 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
沧海一帆 发表于 2018-10-5 17:40
现在基本都是很多轮面试。但是考算法的貌似很少见啊,楼主给几个例子看看 ...

考算法的基本上都是online考试,给你一个题,给定输入,让你写算法,你提交之后在线编译和运行,运行完之后告诉你多少个测试用例通过,多少fail,你可以继续改,继续测试。但都有时间限制,而且肯定不止一道题,所以要注意时间分配。
[ur
Advertisement
Advertisement

发表于 2018-10-5 19:04 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
amyo(∩_∩)o 发表于 2018-10-5 18:03
我就想问这么考三哥怎么办?

三哥三姐也有牛的,而且带回家做的题,三哥三姐可以作弊啊
[ur

发表于 2018-10-10 12:42 |显示全部楼层
此文章由 SydneyApple 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 SydneyApple 所有!转贴必须注明作者、出处和本声明,并保持内容完整
。。。现在基本都是你online test fail了,人家连个邮件都不会给你,怎么可能给你反馈。。

发表于 2018-10-10 13:25 |显示全部楼层
此文章由 batigolsg101 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 batigolsg101 所有!转贴必须注明作者、出处和本声明,并保持内容完整
SydneyApple 发表于 2018-10-10 12:42
。。。现在基本都是你online test fail了,人家连个邮件都不会给你,怎么可能给你反馈。。 ...

online test跟我文章中的写得不是同一种
[ur

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部