欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-06-14 22:49:20
...
能通过知乎实习生的简历刷选,我想我还是很荣幸的。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;’
我该怎么发出去呢?虽然仔细看你的程序是可以搞定的,但是相当于自己写接口了。虽然接口比较容易,但是我作为面试官肯定是不会花时间去琢磨的。