Python面試之睿智融科售前策略工程師(二面)
之前的一面就不在說了,水的很,具體來說說二面的問題:
1、介紹一下linux常用命令:
2、介紹一下vi常用操作鍵:
後續補充
3、為什麼Python沒有多執行緒:
Python中的多執行緒沒有真正實現多現程! 為什麼這麼說,我們瞭解一個概念,全域性直譯器鎖(GIL)。
Python程式碼的執行由Python虛擬機器(直譯器)來控制。
Python在設計之初就考慮要在主迴圈中,同時只有一個執行緒在執行,
就像單CPU的系統中執行多個程序那樣,記憶體中可以存放多個程式,
但任意時刻,只有一個程式在CPU中執行。
同樣地,雖然Python直譯器可以執行多個執行緒,只有一個執行緒在直譯器中執行。
對Python虛擬機器的訪問由全域性直譯器鎖(GIL)來控制,正是這個鎖能保證同時只有一個執行緒在執行。在多執行緒環境中,Python虛擬機器按照以下方式執行。
1.設定GIL。
2.切換到一個執行緒去執行。
3.執行。
4.把執行緒設定為睡眠狀態。
5.解鎖GIL。
6.再次重複以上步驟。
python 每執行100個位元組碼,GIL鎖就會解鎖一次,讓其它執行緒執行,所以,python多執行緒環境,是交替執行,上下文切換,並沒有同一時刻執行程式碼.
4、執行緒和程序的區別和聯絡,死鎖的概念、如何避免死鎖:
區別和聯絡參見:
根據作業系統中的定義:死鎖是指在一組程序中的各個程序均佔有不會釋放的資源,但因互相申請被其他程序所站用不會釋放的資源而處於的一種永久等待狀態。
死鎖的四個必要條件:
互斥條件(Mutual exclusion):資源不能被共享,只能由一個程序使用。
請求與保持條件(Hold and wait):已經得到資源的程序可以再次申請新的資源。
非剝奪條件(No pre-emption):已經分配的資源不能從相應的程序中被強制地剝奪。
迴圈等待條件(Circular wait):系統中若干程序組成環路,該環路中每個程序都在等待相鄰程序正佔用的資源。
避免死鎖的辦法就是針對產生死鎖的四個必要條件來,例如:
破壞迴圈等待條件:對系統中的所有資源型別進行線性排序,然後規定每個程序必須按序列號遞增的順序請求資源。假如程序請求到了一些序列號較高的資源,然後又請求一個序列較低的資源時,必須先釋放相同和更高序號的資源後才能申請低序號的資源。多個同類資源必須一起請求。
破壞不可搶佔條件:當一個已經保持了某種不可搶佔資源的程序,提出新資源請求不能被滿足時,它必須釋放已經保持的所有資源,以後需要時再重新申請。
5、計算機網路相關的面試問題:
簡單的介紹utp和tcp兩種通訊協議區別:
utp特點:1)面向無連線(UDP在傳輸資料報前不用在客戶端和服務端之間建議連線),2)每個資料包大小限制在64k內(UTP傳送資料是將資料分解成多個包進行傳送); 3)UTP不提供可靠性(因為是面向無連線);4)傳輸速度快(因為不需要建立連線)
tcp特點:1)當客戶端與服務端進行互動資料前,必須先在彼此之間建立 一個TCP連線,之後再傳輸資料。2)TCP提供可靠性,提供資料超時重發,篩選丟棄重複資料,檢驗資料,流量控制等功能。
TCP/IP五層協議和OSI的七層協議對應關係如下: