前言

今天在微博上被私信, 聊了好久的关于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掌握不好的确实做的会比较吃力, 也会直接暴露细节点掌握情况, 也可能会留下惊喜. 这样模式的题目也是一个筛选合适人才的办法

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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项目, 这样就多了了解你的机会. 可能在面试中就会少问你对应的技术点