面試100問100答(一)
1、說說你知道的第三方組件?
Numpy 提供了很多高級的數學方法
Requests http庫
Scrapy 一個快速、高層次的屏幕抓取和web抓取框架
Scapy 數據包探測和分析庫
redis 速度快、支持豐富的數據類型、支持事務、支持持久化的數據庫
pymysql python自帶的數據庫
pandas 基於Numpy的一種工具,提供了大量快速便捷處理數據的函數和方法。
bs4 作用:能夠快速方便簡單的提取網頁中指定的內容,給我一個網頁字符串,然後使用它的接口將網頁字符串生成一個對象,然後通過這個對象的方法來提取數據
selenium 是web應用程序的測試工具
2、你所知道的web框架有哪些?
Django、Flask、Tornado(天生異步)
3、Django、Flask常用的組件
Django:
forms:主要功能是檢驗字段的功能,校驗表單中的鍵值對的功能(form.Form)
auth:用戶認證組件 from django.contrib import auth
中間件:做一些處理
modelForm:多個form表單
orm:
緩存:將常用的數據保存到內存中
信號:會觸發回調函數
序列化:Ajax會返回json數據,需要序列化
cookie:瀏覽器每次發送請求帶著cookie,服務器進行認證 response.set_cookie()設置cookie,response為HttPResponse實例化的對象
session:是基於cookie實現的會話跟蹤技術
Flask:
script:通過命令行的形式來操作flask
SQLalchemy: 是一個操作關系型數據庫的ORM工具。
Migrate:基於alembic進行的一個封裝,並集成到flask中,而所有的遷移操作其實都是alembic做的,它能跟蹤模塊的變化,並將變化映射到數據庫中。
jinjia2:模板語言
4、Django提供了哪幾種緩存方式?
開發調試緩存
內存緩存
文件緩存
數據庫緩存
Memcache緩存(使用python-memcache模塊)
Memcache緩存(使用pylibmc模塊)
經常使用文件緩存和Memcache緩存
5、Django、Flask的相同和不同點?
相同: wsgi、路由、視圖、模板(後三個web框架都有)
不同: Flask小而精,
Django大而全,主要慢在 Django ORM 與數據庫的交互上
6、跨域解決的方案?
跨域造成的原因:由於瀏覽器的同源策略,會阻止不同協議,不同端口,不同域名、二級域名造成的
解決方法:
JSONP:同源策略不會阻止腳本標簽的src(script標簽),利用這一特點來解決。註意:JSONP只能是GET請求。(回調函數返回JSON字符串)
CORS:服務器設置Access-Control-Allow-Origin
HTTP響應頭之後,瀏覽器將會允許跨域請求(添加響應頭)
我們線上不存在跨域,我們都部署到了同一個域名下
7、什麽情況會產生跨域?
協議、端口、域名、二級域名不同
8、什麽是反射?應用場景?
反射:通過字符串的形式,去模塊中尋找指定函數,並執行。是一種基於字符串的事件驅動。
四個內置函數:getattr、hasattr、setattr、delattr
應用場景:CBV,Django中間件引入,Flask上下文
9、什麽是粘包?
粘包:因為有緩存的存在,當客戶端發送的數據短小,時間間隔短時,會合在一起發送給服務端,服務端不知道如何拆分造成的數據混亂。
當發送的數據過大時也會被拆開發送。
其實是客戶端有Nagle算法,有合包、拆包機制。只有TCP才會發生。
使用struct來解決粘包問題
10、Django rest framework框架中都有哪些組件?
- 1.序列化組件:serializers 對queryset序列化以及對請求數據格式校驗
- 2.路由組件routers 進行路由分發
- 3.視圖組件ModelViewSet 幫助開發者提供了一些類,並在類中提供了多個方法
- 4.認證組件 寫一個類並註冊到認證類(authentication_classes),在類的的authticate方法中編寫認證邏
- 5.權限組件 寫一個類並註冊到權限類(permission_classes),在類的的has_permission方法中編寫認證邏輯。
- 6.頻率限制 寫一個類並註冊到頻率類(throttle_classes),在類的的allow_request/wait 方法中編寫認證邏輯
- 7.解析器 選擇對數據解析的類,在解析器類中註冊(parser_classes)
- 8.渲染器 定義數據如何渲染到到頁面上,在渲染器類中註冊(renderer_classes)
- 9.分頁 對獲取到的數據進行分頁處理, pagination_class
- 10.版本 版本控制用來在不同的客戶端使用不同的行為
- 在url中設置version參數,用戶請求時候傳入參數。在request.version中獲取版本,根據版本不同 做不同處理
11、TCP和UDP的區別?
TCP:是全雙工,面向連接的,面向字節流的,速度慢,三次握手,四次揮手,可靠的,點到點連接
UDP:是無連接的,面向數據報的,速度快,不可靠,UDP支持一對一,一對多,多對一和多對多的交互通信
12、三次握手和四次揮手?
三次握手:必須是客戶端先發起連接請求,然後服務端返回確認連接請求,最後客戶端給服務端發確認請求,握手成功。
四次揮手:客戶端和服務端都可以先發斷開請求,假如客戶端先發斷開請求,服務端發送確認斷開請求,再把沒法完的數據發送完,客戶端發出確認斷開連接。
13、OSI7層模型
應用層:http、https、ftp
表示層
會話層
傳輸層:TCP/UDP
網絡層:ip
數據鏈路層:arp
物理層
14、http協議
超文本傳輸協議,基於TCP協議的,明文傳輸,無狀態、無連接,
數據傳輸遵循的規範:數據傳輸格式(請求頭,響應體)
無狀態短連接
端口:80
HTTP協議永遠都是客戶端發起請求,服務器回送響應。
15、http協議常見的請求頭及作用?
Accept:瀏覽器可以接受的MIME類型。
Accept-Encoding:瀏覽器申明自己可接收的編碼方法。
User-Agent:告訴HTTP服務器,客戶端使用的操作系統和瀏覽器的名稱和版本。
Content-Type:例如:Content-Type: application/x-www-form-urlencoded。
Cookie:最重要的請求頭之一,將cookie的值發送給HTTP服務器。
16、響應狀態碼
200:成功
301:永久重定向
302:重定向
303:redirect到其他頁面
304:資源自上次取得後,無更改,可直接從本地的緩存獲得。
400:客戶端請求有語法錯誤
401:請求未經授權
403:服務器收到請求,但是拒絕提供服務
404:請求資源不存在
500:服務器發生錯誤
503:服務器目前不能處理客戶端的請求
504:網關超時,服務器作為網關或代理,但是沒有及時從上遊服務器收到請求。
505:服務器不支持請求中所用的HTTP協議版本
面試100問100答(一)