面試了一家初創(chuàng)公司, 面試官問的問題并不是說很難, 但是覆蓋面比較廣, 有一些基礎(chǔ)概念不清晰的話, 很容易被問倒.
一些資料顯示, 對 Python Web 開發(fā)工程師的一些技術(shù)棧要求如下:
- 熟悉Python語言
- 對 HTML/ CSS/ Javascript 比較熟悉
- 對網(wǎng)絡(luò)基礎(chǔ)知識鲁捏,比如HTTP社痛、TCP/IP 等比較熟悉
- 熟悉數(shù)據(jù)庫、緩存渐白、消息隊列等技術(shù)的使用場景和使用方法
- 日常使用類 Unix 系統(tǒng)工作, 如 Mac OS, Ubuntu, Deepin
- 有性能優(yōu)化經(jīng)驗糯钙,能快速定位問題
如果用一個項目來反推技術(shù)棧要求可能更好理解.
用 Python Web 框架開發(fā)項目, Python 語法基礎(chǔ)自然是前提條件. 而開發(fā)過程中使用 Python 包管理工具也是必不可少的. 這是為了開發(fā)環(huán)境不受污染, 同時也方便后期項目的部署, 如果整個系統(tǒng)使用同一個包管理工具, 很容易會出現(xiàn)庫包的版本沖突, 并且部署到服務(wù)器時, 由于沒有區(qū)分環(huán)境, 只能將所有項目的包的并集一起安裝到服務(wù)器上, 造成資源浪費.
以 Django 為例, MTV 模型中的 Model, 雖然是用 ORM 簡化了數(shù)據(jù)庫的操作, 但是基礎(chǔ)的數(shù)據(jù)庫增刪改查語句仍是必須要學(xué)會的. 如果使用了非關(guān)系型數(shù)據(jù)庫還需要你清楚與關(guān)系型數(shù)據(jù)庫的差別, 或者說使用的原因是什么. 技術(shù)優(yōu)劣性的討論都是在限定條件下的, 盲目鼓吹某個技術(shù), 并不是一個明智的做法.
Django 中的 T 是 Templates 模板, 模板中需要的大部分都是前端的知識, HTML/ CSS/ JavaScript/ Ajax 都需要有所了解, 也許我們不是一個設(shè)計師, 但是用前端做一個清爽易用的頁面不是一件很困難的事, 而這卻能提升不少用戶體驗.
Django 中的 V 是 Views 視圖, 視圖通常要與路由 urls 結(jié)合使用, 路由少不了看懂并會寫一些基本的正則表達式, 路由轉(zhuǎn)發(fā)請求和視圖響應(yīng)的過程涉及到一些網(wǎng)絡(luò)基礎(chǔ)知識, 這些網(wǎng)絡(luò)基礎(chǔ)知識包括但不限于 HTTP/ TCP協(xié)議, 各種網(wǎng)絡(luò)響應(yīng)狀態(tài)碼等, 熟悉這些知識可以在調(diào)試, 查看日志時更快地定位錯誤.
最后一項是項目部署上線, 項目部署通常是在 Linux 服務(wù)器上進行, nginx / Apache 代理服務(wù)器與 uWSGI 之間的配置文件需要清楚是如何關(guān)聯(lián)的.
由于服務(wù)器通常只有一個終端可供交互, 平時的用戶界面都是沒有的. 常用的 Linux 命令自然要了然于心, 否則出了問題, 連日志都不知道怎么看. 同時常用的 Git 管理命令也要清楚明白. 克隆, 同步, 分支管理的幾個常用命令都是標配, 同時背后的原理也要明白, 什么時候會沖突, 沖突又要怎么解決.
關(guān)于上述幾個方面的詳細內(nèi)容, 將會在接下來的文章中展開.