近幾天面試總結

2021-09-26 14:48:20 字數 1659 閱讀 1470

malloc

小於128k, 使用brk函式,堆頂會有乙個enddata指標記錄堆區位置,從而在虛擬記憶體位址空間中建立記憶體

真正使用時,還要將其通過對映變成實體地址。

程式第一次讀寫這塊記憶體後,發生缺頁中斷(訪問的頁不在主存,需要作業系統將其排程),這時,才會分配給他物理頁。

大於128k

使用mmap,在堆和棧之間分配記憶體。

free

mmap建立的直接munmap

brk的不釋放,當enddata指標後面有128k空餘時,指標回移。

const

int a = 0, b = 0;

const int* c = &a;

c = &b;   

int* const d = &b;

*d = a;

沒有直接和const連線的是可以改變的。

動態庫、靜態庫

動態庫:

exe中只包含它需要的函式的引用表,執行時,需要的函式**才會拷貝到記憶體中。

可執行檔案小,節省磁碟節省記憶體,但在執行的時候需要時間去連線庫函式,執行速度較慢

動態庫在程式編譯時並不會被連線到目標**中,而是在程式執行是才被載入,因此在程式執行時還需要動態庫存在

靜態庫:

將所有需要使用的函式作為機器碼拷貝到最終的執行檔案中,導致最終生成的則執行檔案占用磁碟和記憶體空間大

但速度較快。

靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。

三次握手四次揮手時連線雙方各自的狀態

三次握手:

1、client----->syn(1)seq(x)  syn_send

2、server---->syn(1)ack(1)seq(y)ack(x+1)   syn_recv

3、client------>ack(1)seq(x+1)ack(y+1)           client/server-->established 

四次揮手:

1、client---->fin(m)           fin_wait1

2、server--->ack(m+1)     close_wait      ----->client      fin_wait2

3、server--->fin(n)           last_ack

4、client----->ack(n+1)     time_wait         ----->server     closed

time_wait過多的原因

過多的主動關閉連線

close_wait過多的原因

應用層關係

對方發起了關閉,但己方依舊在讀寫,沒有關閉連線。

tcp復用

一致性hash

虛擬記憶體、物理記憶體頁 頁幀 頁表

頁:虛擬記憶體

頁幀:物理記憶體

頁表:頁和頁幀一對一的對映表

頁面失效:找到頁幀,將其寫入磁碟,並讓其失效,並將需要訪問的頁放入頁幀中(從虛擬記憶體轉入物理記憶體)

並修改頁表的對映,從而保證所有的也都有被排程的可能。

虛擬頁的個數勢必比物理頁幀的個數大

頁號+偏移量 == 虛擬記憶體位址

頁號---》尋找頁幀號---》檢視是否存在記憶體中---》排程---》傳到mmu組成實體地址

近幾天的總結

這幾天學習了圖論,稍微有點感觸。首先在知識層面已經學得差不多了,除了2sat和難度深一點的差分約束可能還有點玄乎,在之後幾天的資料結構學習中,一定要下功夫鑽研!有幾個板塊必須鑽研下去,乙個就是線段樹包括亂七八糟的樹套樹,其次就是平衡樹splay這些玩意,還有就是稍微學習一下lct,替罪羊樹,和虛樹,...

近幾天的計畫

1 測試外掛程式平台,前幾天抽空寫了個以dll形式的外掛程式平台,測試demo已經過了,感覺還有些不細緻的地方,再細測一下 2 移植幾個控制項,因為平常使用不少控制項包,又有自己蒐集的一些,在新的環境裡安裝時,有時會報這個不存在,那個重複什麼的,正好上邊的外掛程式平台也用到一些控制項,不如自己移植一...

最近幾天的工作總結

快取真的很重要,這幾天在做資訊採集的過程中,需要動態的生成程式集,原先沒有採用任務的措施,不斷的生成新的程式集,使程式的記憶體漲到1g,導致out of memory,後來對其施加了快取及同步的控制 因為是多執行緒的程式 程式記憶體暫用最高達到45m左右,基本可以接受了。二個關於除錯的技巧,乙個是檢...