Rumah  >  Artikel  >  pembangunan bahagian belakang  >  从我的知乎笔试题目和答案中可以看出我不足在哪里?

从我的知乎笔试题目和答案中可以看出我不足在哪里?

WBOY
WBOYasal
2016-06-06 16:22:521429semak imbas

能通过知乎实习生的简历刷选,我想我还是很荣幸的。2012/3/21号晚上8点左右,知乎hr给我发了面试题。之后我花了4天时间做了这些这些题。昨天(2012/3/25)晚上11点10分左右,我修补完bug就发过去了。今天(2012/3/26)早上10点左右,我又发了一次,增加 了些说明。一个小时后,hr回复说我没通过:“由于你的代码思路不够清晰,且是windows编程习惯,与知乎目前的技术架构不符,故你未能通过此次笔试”
下面是我写的代码:
第一题:blog.ideapp.us/?
第二题:blog.ideapp.us/?
我想知道我差在哪里?知乎实习生的要求是什么?python我是基本新学的,4天里每天起早摸黑写代码,一个小时就给我回复,我还是很失落的。
-----------------------------------------------
我还有机会,谢谢大家的鼓励
-----------------------------------------------
我断断续续花了一个星期重写了一遍
第一题: blog.ideapp.us/?
第二题:blog.ideapp.us/?

回复内容:

我觉得误区在“差”这种想法。

面试不是高考,没最终牵手不一定自己就差了,就当参加一次非诚勿扰了吧。 其实我觉得对于实习生来说,编码,windows风格之类的其实都不是很重要的事情。这些东西每个公司的规范都不同,这些东西应该是在公司第一周学会的,而不是在大学四年学会的。而且一周之内就能完全熟悉的玩意儿,根本没必要拿来当作用人标准。
其它的我没太细看,至于对于题目的理解和对面向对象的理解是差了点,但其实问题不大,是可过可不过的情况。杀掉你的人明显偏严格了一点,这东西原因可能有很多原因,可能牛逼的候选人很多,也可能面试官很看中的地方正好是你的缺点,也有可能是你的优点导致的……等等,总之面试就是很主观的选择,没什么大不了的。很多牛人在一个地方被相当看好,在另一个地方却被批得很惨,这都是很正常的,面挂了没缘分而已,并不代表神马,继续努力就是了。 虽然已经单独回过你的邮件,这里再补充一下。
你的代码我昨天都已看过了,答复也是昨天作出的。和hr转述的略有不同,我说的是代码不pythonic,不够清晰,windows编程习惯。

你的代码文档一部分是gbk编码,一部分是utf8编码,一打开都是乱码,不得不手动转码,我读的痛苦你可能理会不到。对初学者我不要求你有多熟悉,但期望看到良好的风格.old style class,大量的staticmethod,邮件脚本的gb2312编码都不是好的习惯。

单从答题情况来说,也不算完全完成要求。第一题,因为都是使用windows路径的关系,linux环境下无法发送附件,这里面sohu邮箱的发送还是不成功的。 第二题,服务端和客户端混在一起的代码,根本无法在任何生产环境使用,不说代码隔离,也至少通过配置或参数分开吧,我还得手动改掉了才能运行,也与题目要求不符。

btw,我认为你的动手能力还是不错的,但是这毕竟不是竞赛,速度什么的不重要,我们更看重好的代码风格及编程习惯,这在一个团体中尤其重要。

update 2013-1-11: 现在回头来看,当时因为没有专门招实习生职位,所以都是卡的正式员工标准。在开始招实习生这近一年收到的诸多笔试中,提问者如果在其中还是比较有优势的,当然有更好的但作为一个从java转python的初学者已经很难得。时机不一样,招的标准也不同, 只能说遗憾了。 1. 除了前端页面以外,代码文件里最好不要出现中文,包括注释,中文非常容易引起诡异问题;
2. 你的代码里过度使用面向对象/类了,Java 痕迹过重,你的很多类完全是通过 @staticmethod 把几个方法集合到一起,导致代码结构很不清晰;
3. 确实是 Windows 编程习惯,把编程作为下一步的发展方向的话,建议早日转向 Linux/Mac 。

我不是知乎员工,以上只是个人看法和建议,仅供参考。 大概看了一下你第一题的代码,有几点愚见,仅供参考。
  1. 过度面向对象。sender、address都可以用字符串搞定,attachments做成文件名字符串的list,没必要全都做成类。
  2. 过度封装。Utils.isFileExist()没必要存在,可以直接os.path.isfile();Utils.regex()也没必要,re.match()搞定。
  3. 过度设计。本来不复杂的事儿有点被搞的太复杂了,在Python里很多事儿都可以用函数搞定,不需要这么多类。400多行代码有点恐怖……如楼上所说,不够Pythonic。
  4. 单元测试。建议看一下unitest模块。
  5. 编码问题。如@杨昆 @吴畅 所说。
看得出lz代码经验比较丰富,只是Python刚入门,还需要时间学习。继续加油吧! 不知道题目是不是指定要python。

不断的强调自己是现学是没意义的,作为面试官,没有能力和必要去考证这一点。

既然指出的问题主要是风格,而你又是现学现卖的语言,那也就是说没有否定你的能力,只是现阶段不适合而已,不必过分纠结。 我用我的人品保证,@杨昆(面试官)不是一个不尊重实习生/面试者的人,相反他是一个待人和善的人,甚至是对生物和善,他是我认识的第一个素食主义者。
我觉得楼主面试失败没有什么问题,面试官是一个hardcore pythoner,注重代码的清晰,单元测试和完整性。然而,他关注点正是楼主的弱项,因此lz被拒我觉得是理所当然的。因为面试不是100分的考试,而更像是恋爱,看面试者和面试官/公司是否match,不是说你算法强项目经验多就一定会要你。

不过我能理解你和楼主的心情,楼主的代码和博客我看了,确实很强,比我见过的大部分学生,我的学生时期都要强。

但我仍然要说,就像大叔控的萝莉对正太说 “你真的很萌,但是对不起,我控的是大叔”

Ps:我们也会从这次面试中吸取经验教训,努力更全面地考察面试者的综合能力,谢谢 别太认真,主要是气质不符合。有很多面试官会认为你不符合他们的团队气质。我不大懂python。但是稍微看了一下。他们所谓的gd2312我个人认为是还是一个比较崩溃的拒绝借口。混用的确不太好。如果应试者能够在提醒之后认识到这点。那么还是非常好的程序员。还有,你晒题目需要征求过面试官同意。windows的确不是一个大问题,一个路径是小问题,但是必须认识到你的程序在linux无法运行。可能有人认为比较致命就是不用linux的程序员不是好程序。如果你能够在windows下编写程序在linux无需调试运行也是非常好的。mozilla公司是相当牛逼,他们也有程序员在windows下编写程序。如果面试官当时有要求说你的程序将部署在linux环境。那么你就必须要考虑linux环境。个人还是坚持认为拒绝你的理由有部分是扯淡。继续坚持,编程不止。 一看你的代码就属于没怎么在Linux编过程的。 大概你期望的是知乎的人给予回答,我不是,抱歉让你失望了。

个人觉得你写注释的风格还是蛮好的,有点过分模块化(个人感觉)。
另外,第一题中,“接受参数输入”这一点你似乎没有达到啊,你好像只实现了一个命令行的邮件发送,而没有简单的“接受参数输入”的接口,就比如说,我现在有:
发件人: ‘sender@mail.com’
密码: ‘password’
收件人:' receiver1@mail.com; receiver2@mail.com;receiver3@mail.com;'
附件:‘file1;file2;file3;’
我该怎么发出去呢?虽然仔细看你的程序是可以搞定的,但是相当于自己写接口了。虽然接口比较容易,但是我作为面试官肯定是不会花时间去琢磨的。
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn