1. 程式人生 > >面試100問100答(一)

面試100問100答(一)

異步 序列 面試 render panda 跟蹤 客戶端請求 註冊 高級

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-OriginHTTP響應頭之後,瀏覽器將會允許跨域請求(添加響應頭)

  我們線上不存在跨域,我們都部署到了同一個域名下

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答(一)