Pyhton全棧的知識點(2)
阿新 • • 發佈:2018-11-07
1. HTTP/IP相關協議,分別位於哪層 http協議是超文字傳輸協議,http協議是基於TCP/IP通訊協議來傳遞資料 http協議工作與c/s架構上,瀏覽器作為http的客戶端通過URL向http服務端即web伺服器傳送所用請求。web伺服器收到所有請求後,向客戶端傳送響應資訊, http特點是短連線,無狀態 位址列鍵輸入URL,按下回車之後經歷了什麼? 1.瀏覽器向DNS伺服器請求解析該URL中的域名所對應的IP地址 2.解析出IP地址後,根據IP地址和預設埠80,和伺服器建立TCP連線 3.瀏覽器發出讀取檔案的http請求,該請求報文作為TCP三次握手的第三個報文的資料傳送給伺服器 4.伺服器對瀏覽器請求做出響應,並把對應的html檔案傳送給瀏覽器5.釋放TCP連線 6.瀏覽器將該HMTL渲染並顯示內容 2. TCP/UDP區別 TCP協議是面向連線,保證高可靠性(資料無丟失,資料無失序,資料無錯誤,資料無重複達到)傳輸層協議 UDP:資料丟失,無秩序的傳輸層協議(qq基於UDP協議與TCP的混合開發) 3. webscoket websocket是基於http協議的,可持續化連線 輪詢:瀏覽器每隔幾秒就傳送一次請求,詢問伺服器是否有新訊息 長輪詢:客戶端發起連線後,如果沒有訊息,就一直不返回response給客戶端,直到有訊息返回,返回完之後,客戶端再次發起連線 4. RabbitMQ: 伺服器端有Erlang語言來編寫,支援多種客戶端,只會ajax,用於分散式系統中儲存轉發訊息,在易用性、擴充套件性、高可用性的方面不俗。 connection是RabbitMQ的socket連線,它封裝了socket部分相關協議邏輯 connectionFactroy為connection的製造工廠 channel是我們與RabbitMQ打交道的最重要的一個介面,大部分的業務操作是在chaanel這個介面中完成,包括定義Queue、定義Exchange、 繫結Queue與Exchange,釋出訊息等5. 頁碼越大速度越慢,為什麼以及如何解決? -原因:頁碼越大向後需要掃描的行數越多,因為每次都是從0開始 -解決:1.限制顯示得頁數 2.記錄當前頁數ID最大值和最小值,再次分頁時,根據ID現行篩選,然後分頁 6. 什麼是介面? -Python中介面是url -Java/C# 有個專門的類(interface),約束並繼承(實現)了他的類中必須含有IFOO中的方法 7. Python裡面如何生成隨機數? 答:random模組 隨機整數:random.randint(a,b):返回隨機整數x,a<=x<=b random.randrange(start,stop,[,step]):返回一個範圍在(start,stop,step)之間的隨機整數,不包括結束值。 隨機實數:random.random( ):返回0到1之間的浮點數 random.uniform(a,b):返回指定範圍內的浮點數。8. 有沒有一個工具可以幫助查詢python的bug和進行靜態的程式碼分析? 答:PyChecker是一個python程式碼的靜態分析工具,它可以幫助查詢python程式碼的bug, 會對程式碼的複雜度和格式提出警告 Pylint是另外一個進階工具可以分析Python程式碼中的錯誤,查詢不符合程式碼風格標準和有潛在問題的程式碼 9. 支付寶支付 -加密方式:RSA -公鑰私鑰: -商戶私鑰 -支付寶公鑰 - 精度(小數點後兩位) -支付成功後,斷點宕機(有一天時間可以處理) -成功:return HttpResponse("success") 10. 原生Ajax - XMLHttpRequest(原生物件) 11. git協同開發 a. 怎麼通過git做得協同開發? git checkout -b dev 建立dev分支,然後切換到dev分支 每個人一個分支,一到兩天或者一個小功能合併一次 b. 是否做程式碼review? 合併一部分程式碼到review分支給組長檢視 c. 開發過程中出現bug如何做? 建立一個分支來解決bug d. git rebase作用? rebase操作可以把本地未push的分叉提交歷史整理成直線 e. 給別人開原始碼貢獻力量。 f. 使用的github、gitlab ? 18美金 自己搭建伺服器,費用貴 PS:隱藏敏感資訊 12. 輪詢和長輪詢 輪詢是每隔多久的時間請求一次 長輪詢是請求到來就夯住,並設定超時時間,有值就瞬間返回。 13.什麼是響應式佈局?(前端css) @media屬性+(限制條件)之後根據使用者操作而動態變化 14. python中的unittest是什麼? 在python中,unittest是python中的單元測試框架,它擁有支援共享搭建、自動測試、在測試中暫停程式碼、將不同測試迭代成一組 15. tornodo的ioloop知道是什麼嗎? 事件迴圈 16. uwsgi和wsgi wsgi:是web伺服器閘道器介面,是pyhton應用程式或框架和web伺服器之間的一種介面,其廣泛使用的是django框架。 uwsgi:是一個web伺服器,它實現了wsgi協議,Nginx中HttpUwsgiModule的作用是與Uwsgi伺服器進行交換 17. 解釋下django - debug -toolbar的使用 使用django開發站點時,可以使用django-debug-toolbar來進行除錯,在settings.py中新增 'debug—toolbar.midleware.Debug ToolbarMiddleware'到專案的MIDDLEWARE_CLASSES內。 18. 多程序,多執行緒,協程,GIL GIL:全域性直譯器鎖,是鎖在cpython直譯器上,導致同一時刻,同一程序只能有一個執行緒被執行 多程序:多程序模組multiprocessing來實現,cpu密集型,IO計算型可以用多程序 多執行緒:多執行緒模組threading來實現,IO密集型,多執行緒可以提高效率 協程:依賴於geenlet,對於多執行緒應用。cpu通過切片的方式來切換執行緒間的執行,遇到IO操作自動切換,執行緒切換時需要耗時,而協成好處沒有切換的消耗,沒有鎖定概念。 程序:是資源管理單位,程序是相互獨立的,程序是執行緒的容器,程序是程式的實體。 執行緒:是最小的執行單位,執行緒的出現為了降低上下文切換的消耗,提供系統的併發性 19. IO多路複用/非同步非阻塞 IO多路複用:通過一種機制,可以監聽多個描述符 select/poll/epoll select:連線數受限,查詢配對速度慢,資料由核心拷貝到使用者態 poll:改善了連線數,但是還是查詢配對速度慢,資料由核心拷貝到使用者態 epoll:epoll是linux下多路複用IO介面,是select/poll的增強版,它能顯著提高程式在大量併發連線中只有少量活躍的情況下的系統CPU利用率 非同步非阻塞:非同步體現在回撥上,回撥就是有訊息返回時告知一聲兒程序進行處理。非阻塞就是不等待,不需要程序等待下去,繼續執行其他操作,不管其他程序的狀態。 20. 什麼是pickling和unpickling? Pickle模組讀入任何python物件,將它們轉換成字串,然後使用dump函式將其轉儲到一個檔案中——這個過程叫做pickling 反之從儲存的字串檔案中提取原始python物件的過程,叫做unpickling 21. os與sys區別: os是模組負責程式與作業系統的互動,提供了訪問作業系統底層的介面 sys模組是負責程式與python直譯器的互動,提供了一系列的函式和變數,用於操控Python時執行的環境 22. 實現一個單例模式 _new_()在 _init_()之前被呼叫,用於生成例項物件。利用這個方法和類的屬性的特點可以實現設計模式的單例模式。 單例模式是指建立唯一物件,單例模式設計的類只能例項,例項化1個物件 class Singleton(object): __instance=None def __init__(self): pass def __new__(cls, *args, **kwargs): if Singleton.__instance is None: Singleton.__instance=object.__new__(cls,*args,**kwargs) return Singleton.__instance