面试造火箭,入职拧螺丝。这句话在Python圈子里流传很久了。我面试过不少人,也被面试过。大家心里都明白,八股文就是敲门砖。
Python的工程化八股文有个特点。问了你会背,实际写代码可能还是老一套。但这东西不背不行。大厂面试官就喜欢问这些。他们想看看你有没有系统性的思考。
先说项目结构。好多人写Python就是一股脑丢文件。一个main.py搞定一切。这不行。标准项目得按功能模块分目录。src放源代码,tests放测试,docs放文档。每个模块里再来个__init__.py。这样别人拿到代码能看懂。
包管理这块坑最多。有人用pip,有人用conda,有人混着用。核心原则是一个项目用一个虚拟环境。别偷懒。requirements.txt要精确到版本号,但别锁太死。用pip freeze > requirements.txt生成出来的一堆版本,改一改,把不重要的放开。
依赖管理还有个头疼的事。项目大了,互相依赖搞不清。这时候用poetry或者pipenv会好一点。但说实话,小项目用pip就够了。别为了造火箭把自己搞晕。
再说配置管理。我见过有人在代码里写死数据库密码。这不是找死吗。配置和代码分离是基本常识。用环境变量,用配置文件。开发环境、测试环境、生产环境各一套。.env文件别提交到git里。
日志系统很多人不在意。实际上出了问题全靠日志救命。别用print就完事了。标准的logging模块配置好格式,时间、级别、模块名都加上。线上查问题的时候就知道好处了。
测试这块八股文问得最多。单测、集成测、端到端测区别要说清楚。pytest是目前主流。fixture、mock这些概念要明白。别光说理论,讲讲你怎么测一个数据库操作函数。
代码规范也是个老生常谈。PEP8是基础,但别死板。用flake8或者pylint做自动化检查。团队里约定好编码风格。代码是写给人看的,顺便给机器执行。注释写清楚为什么这么做,比写怎么做重要。
CI/CD流水线也得懂点。GitHub Actions或者Jenkins配一下。每次提交代码自动跑测试,自动构建。这在大厂是标配。面试官问你做了没有,你说我了解流程,自己配过。
性能优化也是常考内容。Python的GIL要解释清楚。多线程适合IO密集型。多进程或者异步IO才能充分利用CPU。用cProfile做性能分析,找到瓶颈在哪。不要上来就优化,先测再优化。
部署这块实际工作中很头疼。Docker必需要会。写Dockerfile要注意分层构建。用.dockerignore排除没用的文件。多阶段构建把最终镜像体积压下来。再配合k8s,服务就能跑起来了。
数据库操作也要规范。SQL注入怎么防,参数化查询。ORM用不用,用了怎么避免N+1查询。事务边界怎么控制。这些全是实际工作中的痛点。面试官会问得很细。
缓存机制也是常客。Redis的几种数据结构区别。缓存穿透、缓存击穿、缓存雪崩怎么处理。过期策略怎么设置。Python里redis-py库怎么连接池。这些都是实打实的知识点。
我还发现一个现象。很多人代码写得飞起,但不会看别人的代码。阅读源码是一种能力。面试官会考你熟悉哪些开源库的内部实现。比如Flask的上下文机制,asyncio的事件循环怎么工作的。
异常处理也不能马虎。try-except要精细,不能一把抓。该抛出的异常要抛出,该记录的日志要记录。别把异常当成bug,它只是程序的一种状态。
版本控制git是必备技能。分支管理策略要清楚。pull request怎么做,代码审查走什么流程。commit message怎么写才规范。回滚操作会几种方式。
安全这块容易被忽略。输入校验要做,CSRF防护要配。用Hash处理密码,不要自己发明加密算法。敏感信息用环境变量或者密钥管理服务。
文档编写也重要。API文档用OpenAPI规范。内部接口用docstring写好。README把项目怎么跑起来写清楚。新人接手不用到处问人。
说到底,工程化就是让代码好维护、好扩展、好协作。这些八股文背后都有实际的血泪教训。我踩过坑,现在做项目第一件事就是搭好架子。面试能装样子,干活是真功夫。