1. 程式人生 > >Python面試網絡編程和並發

Python面試網絡編程和並發

bsp 網絡編程 gevent epo 上進 應用服務 rem 允許 能力

1.簡述 OSI 七層協議。

  OSI 開放系統互聯參考模型,它是理論的,參考模型
  七層:物理層->數據鏈路層->網絡層->傳輸層->會話層->表示層->應用層

2.什麽是C/S和B/S架構?

  c/s : 客戶端/服務端 b/s : 瀏覽器/服務端

3.簡述 三次握手、四次揮手的流程。

技術分享圖片

技術分享圖片

詳情

4.什麽是arp協議?

  ARP (Address Resolution Protocal) 地址解析協議,就是 把 IP->MAC(你聽過ARP欺騙的)

5.TCP和UDP的區別?

  TCP是確認包的到達,所以不丟失包(數據),順序也是好的。
  UDP不會確認包的到達,所以可能會丟失數據包,當然順序也有可能會亂。
  除了這些以外:
    1. TCP是面向連接(三次握手)的,所以穩定、可靠,那相對就慢了
    比如平時的:文件傳輸,右鍵,http等用的都是tcp協議
    2. UDP是面向無連接的,所以不穩定,但是相對快,實時性高
    比如平時:做什麽現場直播,視頻通話啥的

6.什麽是局域網和廣域網?

  局域網和廣域網是按規模大小而劃分的兩種計算機網絡。範圍在幾千米以內的計算機網絡統稱為局域網;而連接的範圍超過10千米的,則稱為廣域網,因特網(Intenet)就是目前最大的廣域網。

7.為何基於tcp協議的通信比基於udp協議的通信更可靠

  TCP的可靠保證,是它的三次握手雙向機制,這一機制保證校驗了數據,保證了他的可靠性。而UDP就沒有了,udp信息發出後,不驗證是否到達對方,所以不可靠。

8.什麽是socket?簡述基於tcp協議的套接字通信流程。

  在計算機通信領域,socket 被翻譯為“套接字”,它是計算機之間進行通信的一種約定或一種方式。通過 socket 這種約定,一臺計算機可以接收其他計算機的數據,也可以向其他計算機發送數據。

TCP Socket通信的基本流程

①服務端創建一個ServerSocket對象,指定端口號,ServerSocket對象等待客戶端的連接請求。
②客戶端創建一個Socket對象,指定主機地址和端口號,向服務端發出連接請求。
③服務端接收到客戶端的連接請求,建立一條TCP連接,再創建一個Socket對象與客戶端的Socket對象進行通信。
④服務端和客戶端分別創建字節輸入流和字節輸出流,通過字節輸入流獲得對方發來的數據,通過字節輸出流向對方發送數據。
⑤當一方決定結束通信時,向對方發送結束信息;另一方接收到結束信息後,雙方分別關閉各自的TCP連接。
⑥ServerSocket對象停止等待客戶端的連接請求。

9.什麽是粘包? socket 中造成粘包的原因是什麽? 哪些情況會發生粘包現象?

  TCP是流式傳送的 也就是連接建立後可以一直不停的發送 並沒有明確的邊界定義.發送端-接收端都存在這一個緩沖區   由接收方造成的粘包      當接收方不能及時接收緩沖區的包,造成多個包接收就產生了粘包 客戶端發送一段數據,服務端只收了一小部分,服務端下次再收的時候還是從緩沖區拿上次 遺留的數據   由傳輸方造成的粘包     tcp協議中會使用Nagle算法來優化數據。發送時間間隔短,數據量小的包會一起發送,造成粘包

10. IO多路路復用的作用?

  詳情

11. 什麽是防火墻以及作用?

  它是一種位於內部網絡與外部網絡之間的網絡安全系統。一項信息安全的防護系統,依照特定的規則,允許或是限制傳輸的數據通過。   防火可以使企業內部局域網(LAN)網絡與Internet之間或者與其他外部網絡互相隔離、限制網絡互訪用來保護內部網絡。

12. select、poll、epoll 模型的區別?

  selete : 有最大連接數 遍歷 支持win   poll : 無最大連接數 遍歷 支持win   epoll : 無最大連接數 事件通知 不支持win

13. 簡述 進程、線程、協程的區別 以及應用場景?

# 進程 一個任務,進程之間內存隔離,一個進程修改數據不會影響其他進程(創建變量,修改變量值) # 線程 線程位於進程內 一個進程內至少有一個線程,線程之間資源共享.一個線程修改數據其他進程也會受影響所以有了鎖的概念 # 協程 代碼級別的保存狀態+切換 多線程,協程用於IO密集型,如socket,爬蟲,web,搶占cpu資源 多進程用於計算密集型,如金融分析,利用多核優勢

14. GIL鎖是什麽鬼?

全局解釋器鎖,是的一個進程內只有一個線程在工作

15. Python中如何使用線程池和進程池?

# 進程池
from concurrent.futures import ProcessPoolExecutor
import time,os
def piao(name,n):
    print("%s is piaoing %s"%(name,os.getpid())) # 打印了進程id
    time.sleep(1)
 
if __name__ == "__main__":
    p = ProcessPoolExecutor(4) # 指定進程池最大進程個數
    for i in range(10):
        obj = p.submit(piao,"alex %s"%i,i) 提交任務
 
# 線程池
rom concurrent.futures import ThreadPoolExecutor
import time,os,random
def piao(name,n):
    print("%s is piaoing %s"%(name,os.getpid())) # 打印了進程id
    time.sleep(random.randint(1,3))
 
if __name__ == "__main__":
    p = ThreadPoolExecutor(4) # 指定線程池最大線程個數,不包含控制線程
    for i in range(10):
        obj = p.submit(piao,"alex %s"%i,i) # 提交任務

16. threading.local的作用?

創建一個對象,每個線程為該對象設置值數據都是隔離的

17. 進程之間如何進行通信?

  queue

18. 什麽是並發和並行?

並發 : 看上去是在同時工作,實際上是cpu一直在切換著工作

並行 : 利用多核同時工作多個任務

19. 進程鎖和線程鎖的作用?

進程鎖 : 防止進程同時操作一套文件系統

線程鎖 : 防止多個線程同時修改進程內數據

20. 解釋什什麽是異步非阻塞?

# 非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前也會立刻返回,同時該函數不會阻塞當前線程 # 異步的概念和同步相對。當一個異步功能調用發出後,調用者不能立刻得到結果。當該異步功能完成後, # 通過狀態、通知或回調來通知調用者。

21. 路由器和交換機的區別?

路由器 : 連接外部網絡,有接入外部的線

交換機 : 連接內部網絡,可以沒有接入外部的線

22.什麽是域名解析?

我們在瀏覽器上輸入網站域名時,會去請求DNS服務器獲取該域名對應的IP地址,再去訪問改地址

23.如何修改本地hosts文件?

win : C:\Windows\System32\drivers\etc\hosts

linux : /etc/hosts

按格式修改即可

24.生產者消費者模型應用場景及優勢?

生產者與消費者模式是通過一個容器來解決生產者與消費者的強耦合關系,生產者與消費者之間不直接進行通訊, 而是利用阻塞隊列來進行通訊,生產者生成數據後直接丟給阻塞隊列,消費者需要數據則從阻塞隊列獲取,實際應 用中,生產者與消費者模式則主要解決生產者與消費者生產與消費的速率不一致的問題,達到平衡生產者與消費者 的處理能力,而阻塞隊列則相當於緩沖區。 # 應用場景 由一個線程生成訂單,並將其放入隊列中.由多個線程去處理 # 優勢 平衡生產者與消費者的處理能力

25.什麽是cdn?

CDN的全稱是Content Delivery Network,即內容分發網絡。 其基本思路是盡可能避開互聯網上有可能影響數據傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快、更穩定。 通過在網絡各處放置節點服務器所構成的在現有的互聯網基礎之上的一層智能虛擬網絡,CDN系統能夠實時地根 據網絡流量和各節點的連接、負載狀況以及到用戶的距離和響應時間等綜合信息將用戶的請求重新導向離用戶最近 的服務節點上。 其目的是使用戶可就近取得所需內容,解決 Internet網絡擁擠的狀況,提高用戶訪問網站的響應速度。

26.LVS是什麽及作用?

LVS的英文全稱是Linux Virtual Server,即Linux虛擬服務器 LVS主要用於多服務器的負載均衡。它工作在網絡層,可以實現高性能,高可用的服務器集群技術。它廉價,可把 許多低性能的服務器組合在一起形成一個超級服務器。它易用,配置非常簡單,且有多種負載均衡的方法。它穩定 可靠,即使在集群的服務器中某臺服務器無法正常工作,也不影響整體效果。另外可擴展性也非常好。

27.Nginx是什麽及作用?

處理靜態文件 負載均衡 反向代理

28.keepalived是什麽及作用?

Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到, 並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived 自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務 器。

29.haproxy是什麽以及作用?

HAProxy是一個使用C語言編寫的自由及開放源代碼軟件[1],其提供高可用性、負載均衡,以及基於TCP和HTTP 的應用程序代理。 HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前 的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構 中, 同時可以保護你的web服務器不被暴露到網絡上。 HAProxy實現了一種事件驅動, 單一進程模型,此模型支持非常大的並發連接數。多進程或多線程模型受內存限制 、系統調度器限制以及無處不在的鎖限制,很少能處理數千並發連接。事件驅動模型因為在有更好的資源和時間管 理的用戶空間(User-Space) 實現所有這些任務,所以沒有這些問題。此模型的弊端是,在多核系統上,這些程 序通常擴展性較差。這就是為什麽他們必須進行優化以 使每個CPU時間片(Cycle)做更多的工作。 包括 GitHub、Bitbucket[3]、Stack Overflow[4]、Reddit、Tumblr、Twitter[5][6]和 Tuenti[7]在內的知 名網站,及亞馬遜網絡服務系統都使用了HAProxy。 # 作用 負載均衡

30.什麽是負載均衡?

負載均衡 建立在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增加吞吐 量、加強網絡數據處理能力、提高網絡的靈活性和可用性。 負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務 器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。 # 重點 拓展網絡設備

31.什麽是rpc及應用場景?

RPC(Remote Procedure Call)—遠程過程調用,它是一種通過網絡從遠程計算機程序上請求服務,而不需要 了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,如TCP或UDP,為通信程序之間攜帶信息數據。在 OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程序在內的應用程序更加容 易。 RPC采用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進 程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息 到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然後等待下一個調用信息,最 後,客戶端調用進程接收答復信息,獲得進程結果,然後調用執行繼續進行。 # 簡單來說就是客戶端與服務端並不直接通信,而是通過兩個管道,多客戶端通過一個管道向服務端發送消息, 每個客戶端都有一個管道來接收信息

32.簡述 asynio模塊的作用和應用場景。

  詳情

33.簡述 gevent模塊的作用和應用場景。

  詳情

34.twisted框架的使用和應用?

  詳情

Python面試網絡編程和並發