笔试训练第三次知识点汇总
選擇:
1.靜態鏈表
定義:用 數組?描述的鏈表,即稱為?靜態鏈表。
就是用一個二維數組存儲線形,數組第1列用于存放數據元素本身,第2列存放該數據元素在線形表中的位序。
所以 靜態鏈表中指針表示?數組下標
2.進程、線程
進程:指在系統中能獨立運行并作為資源分配的基本單位,它是由一組機器指令、數據和堆棧等組成的,是一個能獨立運行的活動實體。
? ??注意,進程一般有三個狀態:就緒狀態、執行狀態和等待狀態【或稱阻塞狀態】;進程只能由父進程建立,系統中所有的進程形成一種進程樹的層次體系;掛起命令可由進程自己和其他進程發出,但是解除掛起命令只能由其他進程發出。
線程:線程是進程中的一個實體,作為系統調度和分派的基本單位
線程是進程的一部分
使用線程用利于提高程序執行效率
線程切換開銷比進程切換開銷低
線程間共享全局變量
?
(附加:)進程可以開多少線程?2048(實際值比這個小)
默認情況下,一個線程的棧要預留1M的內存空間,而一個進程中可用的內存空間只有2G,所以理論上一個進程中最多可以開2048個線程,但是內存當然不可能完全拿來作線程的棧,所以實際數目要比這個值要小(1G = 1024M)
?
3.TCP的服務特點:?
1.可靠的面向連接的協議?
2.基于字節流??TCP協議將應用層的字節流分成多個字節段,然后將其傳送到互聯層。
3.可將原主機的字節無差錯傳送到目的主機
4.具有流量的控制功能
4.進棧出棧操作,先進后出,(做題時入棧之后的數值只能按順序出來,其余沒有入棧的暫時不入棧)
?
5.數組和指針的區別:
5.1.數組是開辟一塊連續的內存空間,數組本身的標示符代表整個數組,可以用sizeof取得真實的大小;指針則是只分配一個指針大小的內存,并把它的值指向某個有效的內存空間。
?
52.數組或是在靜態存儲區被創建(全局數組),或是在棧上被創建。數組名對應著,注意不是指向,一塊內存,其地址與容量在生命期內保持不變(當然,使用了realloc()的不算),只有數組的內容可以改變。
指針可以隨時指向任意類型的內存塊,它的特征是“可變”,所以我們常用指針來操作動態內存。
?
5.3.當數組作為函數的參數進行傳遞時,數組就自動退化為同類型的指針。
典型的情況是
?
void func(intA[])
{
//sizeof(A)得到的是4bytes
}
int main()
{
inta[10];//sizeof(a)得到的結果是40bytes
funct(a);
}
?
6.const
const修飾的數據類型是指常類型,常類型的變量或對象的值是不能被更新的。
Const與define的區別如下:
(1)編譯器處理的方式不同。
? define是在預處理階段展開;
? const是在編譯運行階段展開,在編譯的時候確定其值;
(2)類型和安全檢查不同。
? define沒有類型,不進行類型檢查,也不進行安全檢查,這樣在進行替換的時候有可能發生意想不到的錯誤;
? const常量有具體的類型,在編譯階段會進行類型檢查;
(3)存儲方式不同。
? define只是進行展開,有多少地方使用,就替換多少次,它定義的宏常量在內存中有若干個備份;
? const定義的只讀變量在程序運行過程中只有一份備份,所以const可以節省空間,避免不必要的內存分配,同時提高效率。
(4)效率不同。
編譯器通常不為普通const常量分配存儲空間,而是將它們保存在符號表中,這使得它成為一個編譯期間的常量,沒有了存儲與讀內存的操作,使得它的效率也很高,提高了程序的健壯性。
?
(注:)Gcc的編譯流程分為了四個步驟:
1.預處理,生成預編譯文件(.i文件):對源代碼文件中的文件包含(include)、預編譯語句(如宏定義define等)進行分析
何時需要預編譯:
1.1總是使用不經常改動的大型代碼體。
1.2程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個“預編譯頭”
?
??? ??? Gcc –E hello.c –o hello.i
??? 2.編譯,生成匯編代碼(.s文件):
??? ??? Gcc –S hello.i –o hello.s
??? 3.匯編,生成目標文件(.o文件):
??? ??? Gcc –c hello.s –o hello.o
??? 4.鏈接,生成可執行文件:
??? ??? Gcc hello.o –o hello
?
7.C++ 調用c編譯的程序,為何要加extern c?
?
?
程序閱讀:
1.
void main()
{
int a[5] = {1,2,3,4,5};
int *ptr = (int *)(&a + 1);
printf(“%d %d\n”, *(a + 1), *(ptr - 1));
}
?
輸出的結果為2,5.由于a是數組的地址,如果是a + 1,那么步長就是數組一個元素的長度;但是如果是&a + 1,那么步長就是一個數組的長度,此題就是20個字節長度,那么在最后ptr - 1的結果就是數組a的最后一個元素5.
?
對于二維數組a[3][4],哪個不能表示a[1][1]?
*(a[1] + 1); 2.*(&a[1][1]); 3.(*(a + 1)[1]); 4.*(a + 5)
本題選擇4號,因為最后一個的步長是一行,即它代表了數組a[5][0];
其實主要就是看步長,如果是&a + 5那就是二維數組為一個單位,后移5個二維數組的長度。
第一個就是以列為一個單位去移動,正好得到a[1][1]。
?
?
?
(1)OSI七層模型
OSI中的層 功能 TCP/IP協議族?
應用層 文件傳輸,電子郵件,文件服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet?
表示層 數據格式化,代碼轉換,數據加密 沒有協議?
會話層 解除或建立與別的接點的聯系 沒有協議?
傳輸層 提供端對端的接口 TCP,UDP?
網絡層 為數據包選擇路由 IP,ICMP,RIP,OSPF,BGP,IGMP?
數據鏈路層 傳輸有地址的幀以及錯誤檢測功能 SLIP,CSLIP,PPP,ARP,RARP,MTU?
物理層 以二進制數據形式在物理媒體上傳輸數據 ISO2110,IEEE802,IEEE802.2
?
(2)TCP/IP五層模型的協議
應用層?
傳輸層?
網絡層?
數據鏈路層?
物理層?
?
?
TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:
位碼即tcp標志位,有6種表示:
SYN(synchronous建立連接)
ACK(acknowledgement 表示響應、確認)
PSH(push表示有DATA數據傳輸)
FIN(finish關閉連接)
RST(reset表示連接重置)
URG(urgent緊急指針字段值有效)
?
三次握手:
?
第一次握手:客戶端發送syn包(syn=x)到服務器,并進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
? ? ? 握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP?連接都將被一直保持下去。
? ? ? 確認號:其數值等于發送方的發送序號+1(即接收方期望接收的下一個序列號)。
四次揮手:
與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次揮手”。
第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但是,此時主動關閉方還可以接受數據。
第二次揮手:被動關閉方收到FIN包后,發送一個ACK給對方,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號)。
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN后,發送一個ACK給被動關閉方,確認序號為收到序號+1,至此,完成四次揮手。
?
TCP的四次揮手過程(簡言之):主動關閉方向被動關閉方發送不會再給你發數據了的信息;被動關閉方對收到的主動關閉方的報文段進行確認;被動關閉方向主動關閉方發送我也不會再給你發數據了的信息;主動關閉方再次對被動關閉方的確認進行確認。
七層 有哪些重要協議
?
BIOS是一組固化到計算機內主板上一個ROM芯片上的程序,它保存著計算機最重要的基本輸入輸出的程序、開機后自檢程序和系統自啟動程序,它可從CMOS中讀寫系統設置的具體信息。?其主要功能是為計算機提供最底層的、最直接的硬件設置和控制。此外,BIOS還向作業系統提供一些系統參數。
?
?
?
總結
以上是生活随笔為你收集整理的笔试训练第三次知识点汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 笔试训练第二次知识点汇总
- 下一篇: 南京工程学院 Dsp复习