..

2017 上海(python后端)面试经历分享

这篇文章主要有两个目的:

  1. 总结自己回国一周, 在上海找工作的经历.
  2. 为准备在上海寻找Python工作的小伙伴的一些参考和建议.
    ps. 本人渣渣, 文中也都是主观的观点, 看看开心就好, 不喜勿喷.

Introduction

在尴尬的二月份毕业了, 虽然遗憾错过了校招, 但投了投简历, 回国的一周也面了七八个公司.

有趣的地方是, 面试过的公司各有特色, 例如有

  • 刚建立的初创公司
  • 发展良好进入正轨的创业公司
  • 知名度很高的互联网公司
  • 国企性质的非互联网公司
  • etc.

先简单说说自己想去的公司吧: 成熟的创业团队.

  1. 一是因为一些大公司的规章制度和官僚文化我是真的受不了, 里边的人浮躁滑头, 已经没有那颗做技术的单纯和真诚.
  2. 二是小公司很多也都不靠谱, 例如那些hr一打电话过来就告知是996, 问能不能接受的创业团队. 努力是没错, 但盲目的燃烧生命只不过是自我麻痹罢了.

如何获得面试机会

  1. 拉勾
  1. 支持上传自定义的pdf简历.
  2. 一键投递, 并且简历投出去之后有全程的跟踪和状态更新, 给人很靠谱的感觉.
  3. hr能在app内直接发消息与我沟通, 很方便.
  4. 最重要的核心竞争力: 丰富并真实的职位.
  1. 在程序员的论坛(eg. V2EX)上搜索或google上海有哪些好的用Python的公司 –> 给这些公司的hr直接发邮件.

  2. 在github上搜想要去的公司的开源项目, 找到参与的人员的博客上的邮箱地址, 然后给他们发邮件(传授一个小tricky: 如果邮箱地址简单加密的话, 用这个命令解下密就OK了: echo ZGF5YTA1NzZAZ21haWwuY29tCg== | base64 -d).

  3. 给一些Python的大佬(Google PyCon)发邮件, 求内推. 比如之前听过直播课的Shell就很热心的帮助了我, 很感动.

面试过的公司

首先说下大部分公司的招聘流程吧: 第一步是hr沟通, 随便聊两句, 然后安排电话面试. 第二步是电话面试, 大概半个小时到一个小时. 第三步是去公司面试, 一般会有好几轮, 要是没有面到CTO或者大boss那步, 但hr让你回去等消息的话, 基本上是GG了. 最后要是顺利的话就是hr和你谈薪资和入职的细节了.

我接下来会写几个实例 (按公司的规模从小到大排序), 不同公司面试的风格也有很大差别.

  1. 巨鲸网络 (初创十人左右的公司):
    面试官是创始人之一, 他介绍他和另一个创始人都来自惠普. 简单介绍了简历然后问了一些问题.
    印象比较深的是他很看中测试(TDD)和代码风格(可读性), 看的出他对他们做的gululu水杯还是很自豪的, 但他一直强调只要程序的可读性够强, 所有注释都是没有必要的, 这点实在不敢苟同.
    后来他问了我一个一块钱买汽水的算法问题. 由于我思路不清晰, 手写的代码可读性也不是很好, 感觉他有些不太满意.
    最后他问我有加入小的创业公司的意愿吗, 有的话就让CTO过来和我面一下, 如果没有的话就算了, 毕竟大家的时间都很宝贵. 当时感觉有些尴尬, 就说那算了吧, 不打扰了.
    然而.. 某天在范玮琪的 Instagram 的刷到他们的产品.

  2. 再惠 (很有潜力的创业公司):
    虽然电话面试我有一些问题没答出来, 但还是给了现场面的机会.
    一面的话问了两个算法题, 二分查找的变种斐波那契非递归实现, 虽然答的磕磕盼盼, 但还是很喜欢那种面试中交流思考的感觉. 印象比较深的是面试官很年轻, 也是93年的. 很平易近人, 口头禅就是很科学, 不断的给你鼓励.
    二面的话问了后台工程师的基础知识, 例如 What happens when u type in google.com in browser. https的实现, 和一些状态码. Restful. 缓存. 队列消息. cdn实现的原理. 数据库事务. 所有Join的含义. 都是一些常规的问题, 可惜自己没准备好. 之后hr过来寒暄一下就让我等消息(婉拒的意思).
    说实话自己是很喜欢这家公司的, 从面试接触下来, 就能很强烈地感觉到他们的工程师都是非常聪明也很优秀的人, 这个世界上真的是越优秀的人越低调和平易近人.
    虽然问的问题不难也很常规, 但真的是自己没怎么准备. 但真正觉得可惜的是错过了一家对同事标准很苛刻的公司.

  3. HyperS (创立八年发展良好的创业公司):
    一面先让我做了一份试卷, 考的都是Python的特性, 我大部分都答出来了. 然后问了一些问题, 例如完全二叉树的定义, hash是如何实现去重的, Django的middleware, session. Django如何直接操作数据库. Django中template变量的默认值. range(1, 101)[::2] 迭代最后剩下的两个数. len=10的数组分成两半, 得到和的差最小 (数组分隔-编程之美)
    二面感觉挺随意的, 但我也答的不是很好, 幸运还是过了.
    最后就是CTO的面试, 他会根据面试者的简历进行提问, 看到我学过DBMS Implementation, 就问了我数据库索引的实现方法, 我答上了三四种, 感觉他还是挺意外的. 还问了排序算法,分析一下时间复杂度,总的来说,问的都不太难。
    感觉CTO思路逻辑也十分的清晰, 想要考察的几个点都提前想好了. 最后决定去这家公司, 对这个CTO的好印象也是加了很多分的.
    但第一次去他家面试的时候, 其实印象是不太好的, 感觉有些压抑: 例如整个办公环境有些乱, 一些咖啡机, 桌上足球娱乐设施都堆积着杂物, 完全沦为装饰了. 去网上搜的时候, 信息也少的可怜. 例如微博主页, 微信公共号都没有持续经营. 但听说今年六月会搬公司, 期待~~

  4. DAOCloud
    应该是个很不错的公司, 但电话面试就gg了. 当最后面试官说我给你一些建议吧, 我还试图挣扎一下, 让他问我一些Python的问题, 结果他问了asyncio和import future的实现原理, GG~

  5. 方付通
    面试官一进来就一副高冷的样子, 全程面无表情. 虽然我菜, 既然都来了, 人与人之间最基本的尊重还是要有的.
    问了很多基础知识和一个算法题: N个数依次入栈,出栈顺序有多少种?

  6. 饿了吗
    饿了吗还是高大上, 门口还有帅气的保安在迎接, 取了号等了一会面, 试官就来了.
    感觉面试官有些莫名的高傲, 面的也很随意, 不太喜欢.
    一开始问了个数据库的问题,查找所有用户最近的一天登录记录.
    问的也都是一些很常规的面试题, 例如写一个装饰器的单例模式, GIL, metaclass. 最后让我徒手写个flask的app O.O
    但还是自己能力不够+没有好好准备吧 XD.

  7. 药明康德 - 明码生物科技
    五六个人一起面我,感觉氛围还是很轻松的.
    公司很大, 楼都数不过来. 但自身还是不太喜欢这样国企性质的公司吧, 而且感觉技术氛围也不是特别强.
    虽然福利有保障, 人手一部mbp, 开的工资也比hypers还高。 但位置太偏了, 女朋友要是来找我, 不是要多做一个小时地铁. 最后毫不犹豫的放弃它了.
    影响最深的一点就是去找面试的那幢楼的时候, 看到一幢楼竟然有个保安在门口嘘嘘…

如何成为好的面试官的感想

虽然只面试了一周, 但对一些好的面试官也是印象深刻. 有一天自己也可能会变成面试官, 记录一下优秀面试官的特质:

  1. 无论面试者的水平高低, 给予最基本的尊重. 例如真诚的沟通和正面的鼓励.
  2. 提前准备, 思路清晰, 想好自己要考察的点. 例如是否真的热爱写程序, 基础知识是否扎实, 表达能力是否清晰等等
  3. 根据面试者的简历问问题, 讨论他感兴趣擅长的领域, 而不是问全部是那些常规无趣的问题.
  4. 不断地去挖掘面试者的潜力, 并帮助面试者更有展示自己的欲望.

总结

感觉自己这个人还是没什么上进心, 面试的题库也懒得背, 工资也随便公司开, 一个星期就把自己的命运决定了.
但最后去hypers主要还是这么几个原因:

  1. 不加班: 周六不上班, 入职之后每天也基本没有超过七点的加班, 作息大概是 十点前到, 七点前下班.
  2. 盲目的自信: 工资虽然并不高, 但自己总有些盲目的自信, 觉得以后能通过工作的表现证明自己的能力, 拿到应有的薪资.
  3. CTO: 对CTO的思路清晰的好印象, 觉得这家公司的研发也应该差不到哪里去.

真心的几点建议:

这个世界上总是有很多的捷径, 有时候做选择可能比努力更重要一些?

用面试去准备面试

提早用面试去准备面试. 国内后台开发面试题其实都挺死板的, 例如http协议, 数据库的事务和那几个简单算法题. 提早参加几个面试了解自己不足的地方, 然后去准备面试才是最正确的姿势.

平时的积累

平时的积累才是最重要的, 基础知识(数据结构, 算法, 网络, 操作系统..)是你通过面试的保障, 但对于我们普通人来说, 打动面试官的是你对写代码的那份热情和平时学习积累的细节.

大公司实习

还在读书的时候, 放假时要尽可能去大公司找找实习, 不管对自己能力的证明和提高, 对人生规划的眼界, 都是最快的捷径.