- 請簡要概述 MVC 和 MTV
MVC 是一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組
織代碼;M 模型,數據存??;V 視圖,數據展示; C 控制器,業務邏輯處理。
MTV 本質上 MTV 與 MVC 模式沒有什么區別,也是各組件之間為了保持松
耦合關系,只是定義上有些不同;M 模型,數據存??; T 模板,數據展示; V
視圖,業務邏輯處理。 - Django 請求的生命周期
客戶端發起請求 > nginx > uwsgi > 中間件 > url 路由 > view 視圖 >
ORM 獲取數據 > 模板渲染 > 服務器返回響應 > 中間件 > uwsgi > nginx >
客戶端顯示 - 簡述 FBV,CBV
FBV: 用戶發送 url 請求,Django 會依次遍歷路由映射表中的所有記錄,一
旦路由映射表其中的一條匹配成功,就執行視圖函數中對應的函數名;
CBV: 用戶發起 url 請求,Django 會通過路由映射表匹配成功后會自動去找
dispatch 方法,接著 Django 會通過 dispatch 反射的方式找到類中對應的方法并
執行類中的方法,執行完畢之后,會把客戶端想要的數據返回給 dispatch 方法,
由 dispatch 方法把數據返回給客戶端。 - Django 中間件的作用和應用場景
作用: 中間件是介于 request 與 response 處理之間的一道處理過程,能在全
局上改變 django 的輸入與輸出。 應用場景: 用戶認證系統、CSRF 保護、IP 限
制、URL 訪問限制、緩存… - Django 重定向是如何實現的?301 和 302 有什么區別
重定向: HttpResponseRedirect、redirect、reverse; 301 是永久重定
向,搜索引擎在抓取新的內容的同時也將舊的網址替換為了重定向之后的網址;
而 302 是臨時重定向,搜索引擎會抓取新的內容而保留舊的地址; - Django 中 csrf 實現機制
在客戶端頁面上添加 csrf_token,服務器端進行驗證,服務器端驗證的工作通
過'django.middleware.csrf.CsrfViewMiddleware'這個中間層來完成,若驗證失
敗則 403 錯誤。在 django 當中防御 csrf 攻擊的方式有兩種:在表單當中附加
csrf_token、通過 request 請求中添加 X-CSRFToken 請求頭。 - 什么是 wsgi,uwsgi,uWSGI
wsgi: 用在 python web 框架編寫的應用程序與后端服務器之間的規范;
uwsgi: uWSGI 服務器實現的獨有的協議; uWSGI: 一個 Web 服務器,它實現
了 WSGI 協議、uwsgi、http 等協議,用于接收前端服務器轉發的動態請求并處
理后發給 web 應用程序; - Django 本身提供了 runserver,為什么不能用來部署?
Django 本身提供的 runserver 是屬于開發服務器,這個開發服務器是沒有經
過安全測試的,另外 runserver 起來的其實是 HTTPServer 就是 Python 自帶的
simple_server,而標準 Python 只能是是單線程,無法并發。對于一個成熟的站
點提供服務,需要 Web 服務器 [靜態數據] 和 App 服務器[動態數據],還需要
多線程并發處理能力。 - 什么是會話技術,cookie,session 的區別, token 呢
會話技術,其實也就是為了狀態的保持,延長請求的生命周期,因為 http 協
議是無狀態的,每次請求都是一次新的請求,不會保持之前的請求狀態。Cookie
所有數據存儲在客戶端,支持數據過期,但是不能跨瀏覽器,不能跨域名,數據不
安全,session 所有數據存儲在服務端,相對數據安全,支持過期設置,但是要依
賴于 cookie。
10.debug-toolbar 的作用
是一組可配置的面板集合,用來顯示 Django Web 應用當前請求/響應的各種
調試信息,進行性能調優,與系統調試
11.orm 中 db first 和 code first 的含義
db first 是基于已存在的數據庫,之后再創建實體類,數據庫對象與實體類的
匹配關系等,也就是從一個數據庫開始,然后生成實體框架和相應代碼。
code first,根據需要,為你一個領域的對象創建類集合,而不是首先來設計
數據庫,然后來根據數據庫設計你的類,Code-First APis 將會基于你的類和配
置,為你創建數據庫。
12.簡述 ORM,ORM 的優缺點
ORM 是通過使用描述對象和數據庫之間映射的元數據,將程序中的對象自動
持久化到關系數據庫中
優點:
1 不需要再動手寫 SQL 語句
2 對不同數據庫管理系統的連接以及操作進行了抽象,程序員完全可以不
考慮使用的是什么數據庫以及數據庫的版本
缺點:
1 ORM 的缺點是會犧牲程序的執行效率和會固定思維模式
2 對于復雜的 SQL 有心無力
3 無法完全屏蔽數據庫底層細節
4 關系-對象映射的實現是以性能為代價,方便了開發,犧牲了效率。
13.談談你對前后端的理解.
14.談談你對 RESTful 規范的認識
REST 是所有 Web 應用都應該遵守的架構設計指導原則。面向資源是 REST 最
明顯的特征。將對資源的操作與 HTTP 方法在對應
15.Django REST Framework 框架中有哪些組件
視圖、序列化、解析器、認證與權限、分頁、throttle(訪問頻率)組件
16.Django 和 Flask 的區別
Flask
1 Flask 自由、靈活,可擴展性強,第三方庫的選擇面廣,開發時可以結
合自己最喜歡用的輪子,也能結合最流行最強大的 Python 庫
2 入門簡單,即便沒有多少 web 開發經驗,也能很快做出網站
3 非常適用于小型網站
4 非常適用于開發 web 服務的 API, 開發大型網站無壓力,但代碼架構需
要自己設計,開發成本取決于開發者的能力和經驗
5 各方面性能均等于或優于 Django
Django:
1 Django 的自帶 ORM 非常優秀,綜合評價略高于 SQLAlchemy
2 自帶的模板引擎簡單好用
3 ORM 也使 Django 與關系型數據庫耦合度過高
4 非常適合企業級網站的開發:快速、靠譜、穩定
5 Django 成熟、穩定、完善,但相比于 Flask
6 Django 的整體生態相對封閉
7 Python web 框架的先驅,用戶多,第三方庫最豐富 Flask 自由、靈
活,可擴展性強,第三方庫的選擇面廣,開發時可以結合自己最喜歡用的輪
子,也能結合最流行最強大的 Python 庫
17.列舉 Http 請求中常見的請求方式以及應用場景
GET: 向特定資源發出請求(獲取數據)
POST: 創建資資源(提交數據)
DELETE: 刪除資源
PUT: 向指定資源位置上上傳其最新內容
18.列舉一下 Http 中常見狀態碼
200: 請求已成功。
302:臨時重定向,HTTP1.0 的狀態碼
400: Bad Request, 語法錯誤,服務器無法理解
403: Forbidden 權限不夠
404:網絡資源不存
405, Method Not Allowed 請求方式不被允許
500, Internal Server Error 服務器出錯
502, Bad Gateway, 作為網關或代理工作的服務器嘗試執行請求時,從上
游服務器接受到無效的響應
19.列舉 Http 請求中常見的請求頭
refer,location,user-agent,accept,accept-encoding,cookie,
cache-control
20.Flask 框架的核心依賴組件
jinja2,Werkzeug 兩個核心組件,Jinja2 是一個現代的,設計師友好的
Python 模板語言,模仿 Django 的模板。使用可選的沙盒模板執行環境,它
具有快速,廣泛使用和安全性,Werkzeug 不是一個框架,它是一個帶有實
用程序的庫,可以創建自己的框架或應用程序,因此非常靈活。
21.Flask 的默認 session 處理機制
Flask 的默認 session 利用了 Werkzeug 的 SecureCookie,把信息做序
列化(pickle)后編碼(base64),放到 cookie 里了。過期時間是通過 cookie 的
過期時間實現的。為了防止 cookie 內容被篡改,session 會自動打上一個叫
session 的 hash 串,這個串是經過 session 內容、SECRET_KEY 計算出來
的,看得出,這種設計雖然不能保證 session 里的內容不泄露,但至少防止了
不被篡改。
22.flask 中的鉤子函數有哪些?可以做什么
app.before_request:共享 session 的鑒權函數、請求黑白名單過濾、根
據 endpoint 進行請求 j 等。藍圖場景包含 api 的請求必填字段校驗,是否
json 請求校驗,請求的 token 校驗等。
app.errorhandler:可以用 redis 進行錯誤請求計數,超過一定量則進行告
警。可以重定向到一個定制的錯誤代碼頁面等
app.context_processor:將一些常量按字典的格式返回,則可以在 jinja2
的模版中引用 場景:在 html 中,如果{'yao','jidan'}直接用{{jidan}}就會在頁
面顯示 yao
app.after_request 場景:一般用于格式化響應結果,包括響應請求頭,響
應的格式等。
23.flask 中的四大內置對象,各有什么作用
request 請求對象,封裝了客戶端發送的 HTTP 請求的內容
session 用戶會話,用來記住請求
g 變量 :充當者中間媒介的作用,我們可以通過它傳遞一些數據
current_app 代表當前的 flask 程序實例,使用時需要 flask 的程序上下文激活
24.什么是負載均衡?常見負載均衡算法
1、輪詢法:將請求按順序輪流地分配到后端服務器上,它均衡地對待后端的
每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。
2、隨機法:通過系統的隨機算法,根據后端服務器的列表大小值來隨機選取
其中的一臺服務器進行訪問。由概率統計理論可以得知,隨著客戶端調用服務
端的次數增多
3、源地址散列:根據獲取客戶端的 IP 地址,通過哈希函數計算得到的一個
數值,用該數值對服務器列表的大小進行取模運算,得到的結果便是客服端要
訪問服務器的序號
4、加權輪詢法:給配置高、負載低的機器配置更高的權重,讓其處理更多的
請;而配置低、負載高的機器,給其分配較低的權重,降低其系統負載
5 加權隨機法:與加權輪詢法一樣,加權隨機法也根據后端機器的配置,系統
的負載分配不同的權重
6、最小連接數法:根據后端服務器當前的連接情況,動態地選取其中當前積
壓連接數最少的一臺服務器來處理當前的請求,盡可能地提高后端服務的利用
效率,將負責合理地分流到每一臺服務器
25.Celery 是什么?常用應用場景
Celery 是一個 基于 python 開發的分布式異步消息任務隊列,通過它可以輕
松的實現任務的異步處理 使用場景:異步調用:那些用戶不關心的但是又存在在
我們 API 里面的操作 我們就可以用異步調用的方式來優化(發送郵件 或者上傳
頭像)定時任務:定期去統計日志,數據備份,或者其他的統計任務
26.什么是 RPC,常用場景有哪些?
RPC:遠程過程調用 讓構建分布式計算(應用)更容易,在提供強大的遠程
調用能力時不損失本地調用的語義簡潔性 場景:不允許較大的延遲的應用 ERP 系
統回倉 2 在垂直應用中將核心和公共業務抽取出來,作為獨立的服務,實現前后
臺邏輯分離
思考下面問題: - Django, Flask 和 Tornado 的區別
- 你的后端工作職責有哪些, 如何編寫項目 API 接口
- 在公司如何與前端工程師聯調
- 后端如何反爬
第三部分 Django&Flask
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 22年12月更新:個人網站關停,如果仍舊對舊教程有興趣參考 Github 的markdown內容[https://...