前言

今天在微博上被私信,聊了好久的关于 python 面试的事情。其实感觉蛮经常的和很多人在聊这个话题。尤其是建了一个 python 学习交流群之后,群里讨论的,私聊我的,问的比较多的真的有 python 面试相关的. 总结起来大概以下几种:

  1. python 面试最常用的面试题有哪些?
  2. 某个面试题感觉回答的不好,问怎么回答比较好.
  3. 有什么面试经验可以分享.
  4. 豆瓣面试一般问什么 - 我是不可能泄题的,以后不要这么可爱了......

突然觉得有必要专门聊聊 python 面试这件事儿。随便分享下我的故事.

工作了几年,必然面过几家。我不是面霸,但是也肯定有感觉特别奇葩的,没对上眼的,完虐我的,励志的, 让我感动的。让我感恩的.

来个趣事儿

国内 python 圈有名的公司不多. 12 年的时候觉得要从运维开发转型为真正的开发,面试了某知名公司 S. 一直到现在我还觉得他的面试模式很好 - 初步筛选之后会发面试题,2 个题目任选其一,一周做好。当时 python 刚学会一年多,反正蛮辛苦的还是做完了。后来接到一面的电话. 当时觉得他们的工作环境特别好,想着能留下来该多好。这个组的面试风格比较特别 - 三个组员一起来面试,轮流问问题,有技术的,有个人兴趣的,有职业规划的。为什么说这个呢?这是我工作以来影响最深的面试,甚至说对我未来影响很大,一直到现在我都非常感谢他们。现在我每次面试其他人,都要花的时间比较多,希望挖掘更多的候选人的优点,给更多的建议和帮助。总是想起他们对我的建议。我们说了什么呢?

我清楚的记得几个事情

  1. 看我简历学了熟悉 django. 问我 django 请求到响应的流程。没有回答上来。其中一个面试官给我解释下流程.
  2. 问了一些 python 语法,应用场景,但是我大都没有深入了解,事后我挨个查了这些知识点,发现其实我只是学会了皮毛
  3. 无意间聊到了编辑器,我说用 vim, 但是只是会用 :q, :% s 这有限的几个。他们说这么久了,就没有想想应该花时间好好的学习下,提高工作效率么?很难想象我是怎么开发的.. 说了很多,我都有点完全被鄙视的想快点结束这个面试了.

面试其实时间还挺长的。最后我问了我每次面试结束都会问的问题:你们对我有什么建议?

他们说了这么几点,和大家共勉

  1. 他们觉得我买了好多书,想看想学的很多,但是都没有深入。建议我砍掉一半的兴趣,把这些时间专注于做其中的几件
  2. 一个领域学习 1,2 个就好了。比如 web 框架。只要学好 django 或者 flask, 理解原理。用什么框架已经不重要了
  3. 好好学习一个编辑器。驾驭好它,让它提高你的工作效率.
  4. python 学的不够深入,建议我在细节上一个一个的抠,力争弄清楚每一个,积少成多

说到这里,好像没啥有趣的.. 对吧

14 年初,在我面试豆瓣前,我特意给 S 当时虐我的三人之一发邮件。希望获得一个面试机会。大概因为之前特意吐槽了 S 开源的一个项目还对我有兴趣,很快又拿到了面试题。这次的要难很多,我还拖了一天交卷。但是还是获得了一面的机会。然后一直到最后谈薪资.

不同的是,当时三人已经只剩下一个。面试过程也没再问 python 问题 (面试题答案应该已经证明了).

当时我已经准备好虐他们了....

  1. 我真的不再关注那么多的领域,当时买的好多书甚至因为搬家给卖掉了却出来没看过
  2. 我曾经专注的看过 python 标准库和一些项目的代码,给很多开源项目贡献代码,甚至给 python 标准库贡献了代码
  3. 我都不用 vim, 改用 emacs 了
  4. 后来面试豆瓣时候也基本没有问 python 问题,可见我 python 能力还好 (*^ー^)

还没完....

以前一面某 S 的一个工程师。聊着聊着.

他说:你知不知道有个叫做 XXX 的?我说:我就是. 他说:啊! 我还在想我会不会遇到你呢?我说:嘿嘿,你如愿了 他说:之前听别人说过你. balabala

机会是给有准备的人的。不是 python 工作不好找,只是没学好。当时去 S 面试是个下午,那天阳光和煦,阳光照在我们那个屋子里面的玻璃桌上面,面试的气氛很轻松。当时觉得他们每个人对自己做的事情,对 python 都非常了解,你是不是也想去这样的环境呢?那么努力吧..

我来豆瓣也是一个励志的故事,但是有点脱题了,我们开始说 python 面试吧

我推崇的面试方式

这个更适合面试官来看

  1. 上面提到的,决定要不要一面,先发面试题来做,看题目功能实现,代码风格,注释等和团队文化匹配度决定要不要一面,更少的减少无用面试时间
  2. 知道创宇有一道爬虫的面试题写在博客里面,想去的人把题做完发给他们就好了。这道题确实不错. python 掌握不好的确实做的会比较吃力,也会直接暴露细节点掌握情况,也可能会留下惊喜。这样模式的题目也是一个筛选合适人才的办法

候选人应该做好哪些技术准备呢?

网上可以搜到一些面试题,找了一些还不错的链接列出来

http://programmers.stackexchange.com/questions/21917/python-interview-questions
https://github.com/sigmavirus24/python-interview-questions
https://gist.github.com/xiangzhuyuan/7454001522d275021b2d
https://github.com/ContinuumIO/interview-questions
https://github.com/Flowerowl/python_articles
http://marselester.com/preparation-to-python-interview.html
https://github.com/zachwill/cracking-the-coding-interview
http://www.bogotobogo.com/python/python_interview_questions.php
https://www.quora.com/What-are-good-Python-interview-questions
https://www.reddit.com/r/Python/comments/1knw7z/python_interview_questions
https://github.com/1st/interview/blob/master/python.md

还有2个中文:

https://github.com/taizilongxu/interview_python
https://gist.github.com/prim/3e7f814187c715541ef2

毕竟我也是面试官,就不划定那些是常见问题了。防止我的主观意见对于未来影响面试者的评价公正性. 而且我也要说一点,我也不评论上述文章中的答案的正确性了。大家还是需要在面试前先做些查询和研究了

用心

  1. 去某公司面试前,或者立志要去该公司。最好先了解公司用到的 python 相关的技术栈,这样可以有针对的准备相关内容
  2. 针对性的准备想要做的职位的 python 技能需求。比如面试运维开发,多准备系统,数据库,配置管理相关的知识,比如 web 框架 (除非了解到该职位需要)
  3. 及时关注 python 技能最新用法,或者推荐用法。多了解 python3 的趋势,有可能会被面试官问到.
  4. 有个 github 账号。能把自己的想法实践出来的 python 项目,这样就多了了解你的机会。可能在面试中就会少问你对应的技术点