面试了一家初创公司, 面试官问的问题并不是说很难, 但是覆盖面比较广, 有一些基础概念不清晰的话, 很容易被问倒.
一些资料显示, 对 Python Web 开发工程师的一些技术栈要求如下:
- 熟悉Python语言
- 对 HTML/ CSS/ Javascript 比较熟悉
- 对网络基础知识,比如HTTP、TCP/IP 等比较熟悉
- 熟悉数据库、缓存、消息队列等技术的使用场景和使用方法
- 日常使用类 Unix 系统工作, 如 Mac OS, Ubuntu, Deepin
- 有性能优化经验,能快速定位问题
如果用一个项目来反推技术栈要求可能更好理解.
技能树
用 Python Web 框架开发项目, Python 语法基础自然是前提条件. 而开发过程中使用 Python 包管理工具也是必不可少的. 这是为了开发环境不受污染, 同时也方便后期项目的部署, 如果整个系统使用同一个包管理工具, 很容易会出现库包的版本冲突, 并且部署到服务器时, 由于没有区分环境, 只能将所有项目的包的并集一起安装到服务器上, 造成资源浪费.
以 Django 为例, MTV 模型中的 Model, 虽然是用 ORM 简化了数据库的操作, 但是基础的数据库增删改查语句仍是必须要学会的. 如果使用了非关系型数据库还需要你清楚与关系型数据库的差别, 或者说使用的原因是什么. 技术优劣性的讨论都是在限定条件下的, 盲目鼓吹某个技术, 并不是一个明智的做法.
Django 中的 T 是 Templates 模板, 模板中需要的大部分都是前端的知识, HTML/ CSS/ JavaScript/ Ajax 都需要有所了解, 也许我们不是一个设计师, 但是用前端做一个清爽易用的页面不是一件很困难的事, 而这却能提升不少用户体验.
Django 中的 V 是 Views 视图, 视图通常要与路由 urls 结合使用, 路由少不了看懂并会写一些基本的正则表达式, 路由转发请求和视图响应的过程涉及到一些网络基础知识, 这些网络基础知识包括但不限于 HTTP/ TCP协议, 各种网络响应状态码等, 熟悉这些知识可以在