11. 驗證碼過期時間怎么設置?
將驗證碼保存到數據庫或session,設置過期時間為1分鍾,然后頁面設置一個倒計時(一般是前端js實現 這個計時)的展示,一分鍾過后再次點擊獲取新的信息。
12. Python中三大框架各自的應用場景?
- django:主要是用來搞快速開發的,他的亮點就是快速開發,節約成本,正常的並發量不過10000,如果要實現高並發的話,就要對django進行二次開發,比如把整個笨重的框架給拆掉,自己寫socket實現http的通信,底層用純c,c++寫提升效率,ORM框架給干掉,自己編寫封裝與數據庫交互的框
架,因為啥呢,ORM雖然面向對象來操作數據庫,但是它的效率很低,使用外鍵來聯系表與表之間的查詢; - flask:輕量級,主要是用來寫接口的一個框架,實現前后端分離,提升開發效率,Flask本身相當於一個內核,其他幾乎所有的功能都要用到擴展(郵件擴展Flask-Mail,用戶認證Flask-Login),都需要用第三方的擴展來實現。比如可以用Flask-extension加入ORM、窗體驗證工具,文件上傳、身份驗
證等。Flask沒有默認使用的數據庫,你可以選擇MySQL,也可以NoSQL。
其 WSGI 工具箱采用 Werkzeug(路由模塊),模板引擎則使用 Jinja2。這兩個也是Flask框架的核心。Python最出名的框架要數Django,此外還有Flask、Tornado等框架。雖然Flask不是最出名的框架,但是Flask應該算是最靈活的框架之一,這也是Flask受到廣大開發者喜愛的原因。 - Tornado: Tornado是一種 Web 服務器軟件的開源版本。Tornado 和現在的主流 Web 服務器框架(包括大多數 Python 的框架)有着明顯的區別:它是非阻塞式服務器,而且速度相當快。 得利於其非阻塞的方式和對epoll的運用,Tornado 每秒可以處理數以千計的連接,因此 Tornado 是實時 Web 服務的一個 理想框架。
13. django如何提升性能(高並發)?
對一個后端開發程序員來說,提升性能指標主要有兩個一個是並發數,另一個是響應時間網站性能的優化一般包括web前端性能優化,應用服務器性能優化,存儲服務器優化。
對前端的優化主要有:
1.減少http請求,減少數據庫的訪問量,比如使用雪碧圖。
2.使用瀏覽器緩存,將一些常用的css,js,logo圖標,這些靜態資源緩存到本地瀏覽器,通過設置http頭中的cache-control和expires的屬性,可設定瀏覽器緩存,緩存時間可以自定義。
3.對html,css,javascript文件進行壓縮,減少網絡的通信量。
對我個人而言,我做的優化主要是以下三個方面:
1.合理的使用緩存技術,對一些常用到的動態數據,比如首頁做一個緩存,或者某些常用的數據做
個緩存,設置一定得過期時間,這樣減少了對數據庫的壓力,提升網站性能。
2.使用celery消息隊列,將耗時的操作扔到隊列里,讓worker去監聽隊列里的任務,實現異步操
作,比如發郵件,發短信。
3.就是代碼上的一些優化,補充:nginx部署項目也是項目優化,可以配置合適的配置參數,提升效率,增加並發量。
4.如果太多考慮安全因素,服務器磁盤用固態硬盤讀寫,遠遠大於機械硬盤,這個技術現在沒有普及,主要是固態硬盤技術上還不是完全成熟, 相信以后會大量普及。
5.另外還可以搭建服務器集群,將並發訪問請求,分散到多台服務器上處理。
6.最后就是運維工作人員的一些性能優化技術了。
14. 什么是restful api,談談你的理解?
上來先給面試官扔出一手Django的restgramework源碼(這一塊知識課下一定要自己看着源碼走三遍做到爛熟於心,看着面試官的眼睛快速自信的說出。這一手源碼扔出來之后,面試已經成功一半)
REST:Representational State Transfer的縮寫,翻譯:“具象狀態傳輸”。一般解釋為“表現層狀態轉換”。
REST是設計風格而不是標准。是指客戶端和服務器的交互形式。我們需要關注的重點是如何設計REST風格的網絡接口。
REST的特點:
1.具象的。一般指表現層,要表現的對象就是資源。比如,客戶端訪問服務器,獲取的數據就是資源。比如文字、圖片、音視頻等。
2.表現:資源的表現形式。txt格式、html格式、json格式、jpg格式等。瀏覽器通過URL確定資源的位置,但是需要在HTTP請求頭中,用AcceptContent-Type字段指定,這兩個字段是對資源表現的描述。
3.狀態轉換:客戶端和服務器交互的過程。在這個過程中,一定會有數據和狀態的轉化,這種轉化叫做狀態轉換。其中,GET表示獲取資源,POST表示新建資源,PUT表示更新資源,DELETE表示刪除資源。HTTP協議中最常用的就是這四種操作方式。
RESTful架構:
1.每個URL代表一種資源;
2.客戶端和服務器之間,傳遞這種資源的某種表現層;
3.客戶端通過四個http動詞,對服務器資源進行操作,實現表現層狀態轉換。
15.如何設計符合 RESTful 風格的 API
一、域名:
將api部署在專用域名下:
http://api.example.com
或者將api放在主域名下:
http://www.example.com/api/
二、版本:
將API的版本號放在url中。
http://www.example.com/app/1.0/info
http://www.example.com/app/1.2/info
三、路徑:
路徑表示API的具體網址。每個網址代表一種資源。 資源作為網址,網址中不能有動詞只能有名詞,一般名詞要與數據庫的表名對應。而且名詞要使用復數。
錯誤示例:
http://www.example.com/getGoods
http://www.example.com/listOrders
正確示例:
獲取單個商品
http://www.example.com/app/goods/1
獲取所有商品
http://www.example.com/app/goods
四、使用標准的HTTP方法:
對於資源的具體操作類型,由HTTP動詞表示。 常用的HTTP動詞有四個。
GET SELECT :從服務器獲取資源。
POST CREATE :在服務器新建資源。
PUT UPDATE :在服務器更新資源。
DELETE DELETE :從服務器刪除資源。
示例:
獲取指定商品的信息
GET http://www.example.com/goods/ID
新建商品的信息
POST http://www.example.com/goods
更新指定商品的信息
PUT http://www.example.com/goods/ID
刪除指定商品的信息
DELETE http://www.example.com/goods/ID
五、過濾信息:
如果資源數據較多,服務器不能將所有數據一次全部返回給客戶端。API應該提供參數,過濾返回結果。 實例:
指定返回數據的數量
http://www.example.com/goods?limit=10
指定返回數據的開始位置
http://www.example.com/goods?offset=10
指定第幾頁,以及每頁數據的數量
http://www.example.com/goods?page=2&per_page=20
六、狀態碼:
服務器向用戶返回的狀態碼和提示信息,常用的有:
200 OK :服務器成功返回用戶請求的數據
201 CREATED :用戶新建或修改數據成功。
202 Accepted:表示請求已進入后台排隊。
400 INVALID REQUEST :用戶發出的請求有錯誤。
401 Unauthorized :用戶沒有權限。
403 Forbidden :訪問被禁止。
404 NOT FOUND :請求針對的是不存在的記錄。
406 Not Acceptable :用戶請求的的格式不正確。
500 INTERNAL SERVER ERROR :服務器發生錯誤。
七、錯誤信息:
一般來說,服務器返回的錯誤信息,以鍵值對的形式返回。
{
error: 'Invalid API KEY'
}
八、響應結果:
針對不同結果,服務器向客戶端返回的結果應符合以下規范。
返回商品列表
GET http://www.example.com/goods
返回單個商品
GET http://www.example.com/goods/cup
返回新生成的商品
POST http://www.example.com/goods
返回一個空文檔
DELETE http://www.example.com/goods
九、使用鏈接關聯相關的資源:
在返回響應結果時提供鏈接其他API的方法,使客戶端很方便的獲取相關聯的信息。
十、其他:
服務器返回的數據格式,應該盡量使用JSON,避免使用XML。