招聘与面试程序员python面试题

Python 后端工作学习反思

2017-10-08  本文已影响299人  0xE8551CCB

背景

Python_3.png

^_^ 标题有点太严肃了~

从毕业开始接触 Python 至今已经两年多了,也渐渐喜欢上了这门语言。16 年时加入一家初创公司,先后从事爬虫开发、Web 后端开发相关的工作。在工作 10 个月后,明显觉得力不从心,太多没有技术含量的杂活需要完成。由于没有很好的基础设施支持,以及团队开发方面的不专业,导致开发效率越来越低。后来读了 rapospectre 在 V2EX 分享的 2017 后端面试经历分享 一文,也萌生了去大的互联网公司从事 Python 后端开发的想法。

于是在今年的 7 月底,辞去了手头的工作,开始了为期 2 个月的学习充电。很多同事推荐我应该在辞职后立马找工作,不过当时的确是没有太大把握。毕竟并非计算机科班出身,且后端相关的工作经验不足 1 年,欠缺的知识很多,所以必须要充电。其实我们都知道,国内以 Python 为主的知名互联网公司还是太少了,因此机会很少,如果冒然前去面试必然会掉进坑里,必须要准备好再出发。

反思

后端开发需要涉及的知识面很广,所以希望能够在 2 个月内靠自学成为专业的后端开发人员简直是天方夜谭。所幸,我的目标是加入一个专业 Python 后端开发团队,而非立马成为一个专业的开发人员。我为什么一直强调专业呢?其实我也不清楚如何精确地界定专业不专业。但我知道自己之前所在的团队是不够专业的:

  1. 不重视代码质量,所谓的 “重视 Code Review” 只是说说而已 :(;
  2. 不重视代码规范,实际维护时也很困难;
  3. 不重视单元测试,无法确保系统正确性;
  4. 没有持续集成、持续部署的自动化系统;
  5. 不愿引入合适的监控系统,故障排查及其低效;
  6. 鼓吹 Python “玄学”,然而推荐很 Java 的写法;
  7. 一味地强调设计模式,由于我们对设计模式理解的不恰当,导致实际的业务代码过度抽象,模块的耦合度依然没有降低,反而进一步增加了代码的可读性,给维护带来了很多困扰。

今天反思的这些,其实都是在我走出“围城”后才渐渐明白的。我觉得还是需要更加专业的平台支持,更加开放的工作环境,才能真正帮助自己提高,同时也能增加对工作的积极性,提高工作效率。

充电

在充电期间读了一些不错的书,这里推荐一些值得学习的书籍(包括以前读过的)如下:

  1. 《剑指 Offer》
    • 这本书中的一些特色的面试题我都试着实现了一遍,主要还是学习一些解题思路,其实也是为了面试准备的。详细的实现代码及测试参见仓库:coding-interview-python
  2. 《大话数据结构》
  3. 《深入理解计算机系统》
  4. Andrew S.Tanenbaum 的《现代操作系统》
  5. 《图解 TCP/IP》+《计算机网络:自顶向下方法》
  6. 《代码整洁之道》
  7. 《垃圾回收算法与实现》
    • 了解下垃圾回收的算法也不错,关于 CPython 的内存管理和垃圾回收那块也有比较多的介绍
  8. Fluent Python
    • 英文版的读起来也不错,非常值得阅读的一本书,对深入理解 Python 语言非常有帮助
  9. Python Cookbook
  10. 《微服务设计》
  11. 《高性能 MySQL》
  12. 《大型网站技术架构 : 核心原理与案例分析》
  13. 《Redis 开发与运维》

面试

9 月底前去面试了两家感兴趣的互联网公司,其中对果壳网的面试印象比较深刻。先是进行了一轮电话面试,时长大约 30 分钟,主要考察了对基础知识的掌握。具体就是 Python 语言相关的问题,比如针对 Immutable 和 Mutable 数据类型的问题;还有操作系统进程、线程的区别;还有网络基础的问题,如 TCP/UDP 区别及其适用场景等;此外还有关于 gevent 和协程的问题。记得期间问了“为什么 TCP 至少需要三次握手才能建立连接”,不过这个我没有回答出来。后来搜了搜,果然是很常见的问题,参看知乎的讨论:https://www.zhihu.com/question/24853633。

一面结束后,当天下午约了第二天去现场面试。在到了果壳后,发现里面的工作氛围的确与我之前的公司不同,反正个人挺喜欢的。进去之后先填表,然后做了一套笔试题。题目难度还好,考察的面也挺广的,有 Python 语言基础、算法题、数据库设计类的题目。比如要求实现快速排序算法,还有实现一个栈,要求 O(1) 时间获得最大值等。

笔试题做完后,就开始技术 Leader 面试了。对于面试我的那个技术 Leader,还是比较敬佩的。感觉问的问题有广度也有深度,也学习到了很多东西。记得问了个很典型的 "TinyURL 系统设计" 的问题,这个问题其实网上也有很多讨论,所以相对熟悉些。不过在和面试官的讨论中学习到了很多,比如 API 设计需要注意的问题,如何实现 nginx 的高可用等,还有如何设计可以应付大规模的请求并且减少数据库查询的压力等。另外还了解到果壳网也在做微服务,关于微服务这块之前在豆瓣的技术分享会上也学习到不少,所以对这些也挺感兴趣的。

总之,在果壳的面试体验还是学习到了不少,也认识到了自己的不足。虽然没有去果壳网,但是还是推荐感兴趣的同学试一试的。

结束语

漫长的国庆假期结束啦,又要开始忙碌了。希望能够做到持续学习,对自己的不足能够认识地更加深刻,有效地提高自身的专业能力。

上一篇 下一篇

猜你喜欢

热点阅读