算法與基礎

1.計算機基礎

進程和線程

進程:程序運行後,代碼+用到的資源稱之爲進程,它是操作系統分配資源的基本單元。
線程(英語:thread):是操作系統能夠進行運算調度的最小單位。包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。

並行與併發

並行:多個CPU同時執行多個任務,比如兩個程序,這兩個程序在兩個不同的CPU內同時被執行。
併發:CPU交替處理多個任務,還是有兩個程序,但是隻有一個CPU,會交替處理這兩個程序,而不是同時執行,只不過因爲CPU執行的速度過快,而會使得人們感到是在“同時”執行,執行的先後取決於各個程序對於時間片資源的爭奪。

三次握手/四次揮手

三次握手——建立TCP連接
1)客戶進程發出連接請求,此時首部同步爲SYN=1,同時選擇一個初始序號seq=x,客戶進程進入SYN_SENT(同步發送)狀態;
2)服務進程接收到客戶進程發送的連接請求報文段,如果同意建立連接,在確認報文段中SYN=1,ACK=1,同時選擇一個初始序號seq=y,服務進程進入SYN_RCVD(同步接收)狀態;
3)客戶進程收到服務進程的響應後,再次給出確認,發送ACK=1,序號seq=x+1,確認序號ack=y+1,此時可以攜帶數據,此時客戶進程進入ESTABLISHED(已建立連接)狀態。

四次揮手——釋放TCP連接
此時客戶進程和服務進程都處於ESTABLISHED狀態。
1)客戶進程主動關閉TCP連接,連接釋放報文段的終止控制位FIN=1,客戶進程進入FIN-WAIT1(終止等待1)狀態,等待服務進程連接釋放確認;
2)服務進程收到客戶進程的連接釋放報文段,發出確認報文段,然後服務進程進入CLOSE-WAIT(關閉等待)狀態,此時客戶進程到服務進程這個方向的TCP連接被釋放,TCP連接處於半關閉狀態(HALF-CLOSE),即客戶進程不會向服務進程發送數據
3)客戶進程收到服務進程的確認報文段後進入(FIN-WAIT2)終止等待2狀態,等待服務進程發出連接釋放報文段;
4)若此時服務進程沒有數據要發送,則服務進程發出連接釋放請求,服務進程進入LAST-ACK(最後確認狀態),等待客戶進程確認;
5)客戶進程收到服務進程的連接釋放請求,服務進程進入CLOSED狀態
6)服務進程收到客戶進程的確認報文段後進入CLOSED 狀態;

死鎖 活鎖 飢餓

死鎖:死鎖是指多個進程相互等待,互不相讓,導致所有進程無限期等待
活鎖:每一個進程需要兩個資源並使用try_lock()試圖獲取鎖,進程A獲得了資源1,進程2獲得了資源2,接下來,它們分別試圖獲取另一個鎖但都失敗了,於是它們分別釋放當前持有的鎖,然後再試一次,這個過程會一直重複,就像兩個人在一條路上相遇並同時給對方讓路一樣,相同對步調將導致雙方無法前進
飢餓:一些進程永遠無法獲得運行機會,導致餓死。比如在打印機總是先打印最小文件的進程,那麼大文件就可能因爲不斷需要打印對小文件而無法運行導致餓死。

時間與空間複雜度

時間複雜度
時間複雜度的大小關係
內層執行次數最多的語句就是算法的複雜度,for是n,while是log(n)

空間複雜度:指算法在計算機內執行時所需存儲空間的度量,就是看創建了多少次,複雜度就是多少。

TCP/UDP的異同

都是傳輸層協議
TCP是面向連接的
TCP效率低,UDP效率高
TCP是全雙工的,UDP不是
TCP傳輸速度慢,UDP傳輸速度快
TCP面向字節流,UDP面向報文

http/https的區別

https是在http的基礎上調用ssl協議來加密內容

http返回碼

1xx 消息
2xx 成功
3xx 重定向
4xx 客戶端錯誤
5xx 服務器錯誤

2.Python

Python的閉包

閉包是指函數內部嵌套函數,內部的函數可以改變外部函數的值

python全局鎖(GIL)

即全局解釋器所(global interpreter lock),每個線程在執行時候都需要先獲取GIL,爲了保證同一時刻只有一個線程可以執行代碼,即同一時刻只有一個線程使用CPU,也就是說多線程並不是真正意義上的同時執行。
通過加鎖,可以解決多線程之間數據完整性和狀態同步, 有了GIL這把鎖,就可以保證同一個時刻只允許一個線程使用cpu。

3.C語言

c++的左值和右值

左值通常是地址,右值爲地址所存的數值數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章