Linux測試

 前些天老師說我們要進行linux基礎知識的筆試測試,因爲都沒看過多少書,瞭解的知識僅限於課堂上講的知識,所以考試結果可想而知,對我來說是一次教訓,讓我明白知識是需要自己去課後學習並加以總結的,所以僅對此次測試題目所涉及的內容做以下總結:
1.簡述如下目錄的功能
 [1]. /boot:放置linux系統啓動時用到的一些文件。
 [2]. /etc:系統配置文件存放的目錄,不建議在此目錄下存放可執行文件。
 [3]. /mnt:光盤默認掛載點,通常光盤掛載於 /mnt/cdrom 下,也不一定,可以選擇任意位置進行掛載。
 [4]. /lib:/usr/lib: /usr/local/lib:系統使用的函數庫的目錄,程序在執行過程中,需要調用一些額外的參數時需要函數庫的協助。
 [5]. /bin: /usr/bin: 可執行二進制文件的目錄,如常用的命令ls、tar、mv、cat等。
 [6]. /proc:此目錄的數據都在內存中,如系統核心,外部設備,網絡狀態,由於數據都存放於內存中,所以不佔用磁盤空間。
 [7]. /root:系統管理員root的家目錄,系統第一個啓動的分區爲 /,所以最好將 /root和 /放置在一個分區下。
 [8]. /usr:應用程序存放目錄,/usr/bin 存放應用程序,/usr/share 存放共享數據,/usr/lib 存放不能直接運行的,卻是許多程序運行所必需的一些函數庫文件。/usr/local: 存放軟件升級包。/usr/share/doc: 系統說明文件存放目錄。/usr/share/man: 程序說明文件存放目錄,使用 man ls 時會查詢 /usr/share/man/man1/ls.1.gz 的內容建議單獨分區,設置較大的磁盤空間。
 [9]. /home:系統默認的用戶家目錄,新增用戶賬號時,用戶的家目錄都存放在此目錄下,~表示當前用戶的家目錄,~edu 表示用戶 edu 的家目錄。建議單獨分區,並設置較大的磁盤空間,方便用戶存放數據。
 [10]. /tmp:一般用戶或正在執行的程序臨時存放文件的目錄,任何人都可以訪問,重要數據不可放置在此目錄下。
 [11]. /var:放置系統執行過程中經常變化的文件,如隨時更改的日誌文件 /var/log,/var/log/message:所有的登錄文件存放目錄,/var/spool/mail:郵件存放的目錄,/var/run:程序或服務啓動後,其PID存放在該目錄下。建議單獨分區,設置較大的磁盤空間。
 [12]. /dev:存放linux系統下的設備文件,訪問該目錄下某個文件,相當於訪問某個設備,常用的是掛載光驅 mount /dev/cdrom /mnt。
2.寫15個熟悉的linux命令,並簡述其功能
 [1]. ls:列出當前目錄下所有文件內容
 [2]. madir:創建目錄
 [3]. touch:創建文件
 [4]. rm:刪除目錄或文件
 [5]. cp:複製文件
 [6]. mv:移動文件
 [7]. cd:進入目錄,切換路徑
 [8]. man:查看幫助手冊
 [9]. history:查看終端中所有使用過的命令的歷史記錄
 [10]. mount:將某一設備掛載
 [11]. umount:將某一設備從掛載點上移除
 [12]. top:查看當前系統進程信息
 [13]. cat:cat 代表了連結(Concatenation),連接兩個或者更多文本文件或者以標準輸出形式打印文件的內容
 [14]. pwd:在終端中顯示當前工作目錄的全路徑
 [15]. chmod:改變文件的權限
3.linux有哪些文件類型
 [1]. 普通文件:-
 [2]. 純文本文件
 [3]. 二進制文件
 [4]. 數據格式文件
 [5]. 目錄文件:d
 [6]. 連接文件:l
 [7]. 設備文件
  塊設備文件:b
  字符設備文件:c
 [8]. 套接字文件:s
 [9]. 管道文件:p
4. 增加一個用戶使用哪個命令,它會修改哪些系統文件?
  命令:useradd
  系統文件:/etc/shadow:用戶密碼文件
       /etc/group:用戶組文件
5. 系統關機和重啓的命令,su是用來做什麼的?
  關機命令:shutdown
  重啓命令:reboot
  su:用來切換用戶
6. 簡述makefile文件的功能
  makefile文件用於對多個源文件進行編譯鏈接,生成可執行文件。
7. 調試程序用什麼工具?說明工具中常用的命令及功能。
linux中的調試工具是gdb,
 1). debug版本:可調式版本 (文件較大) 編譯階段決定是否生成debug版本
  eg:gcc -o main*.o -g —>release gcc -o .o—>debug gcc -o exe .c -g —>debug
 2). release:發行版本 (文件較小)
  gdb main 調試
  list 顯示主函數所在.c文件的代碼
  list filename:num 顯示指定.c文件的代碼
  b +行號(N) 將斷點添加到最近一次顯示的文件的第N行上
  b +funtion_name 將斷點添加到指定函數執行的第一行代碼處
  b +代碼行號 if(條件) 添加條件斷點
  bt 查看函數調用堆棧關係
  info b 查看斷點信息
  disable +斷點號 暫停,斷點不起作用 enable+斷點號 斷點繼續起作用
  d + 斷點號 刪除斷點 (delete 1)
  r 運行程序 (run)
  p +變量名 查看變量值
  p +數組名 顯示數組內容 p+ &變量名 顯示數組的地址 p *指針名@len 通過指針顯示數組元素或者堆區空間的值 p+變量名.成員變量名 顯示結構體變量的成員變量值
 n 下一行執行(next)
  c 執行到下一個段點處(continue)
  s 進入將要被調用的函數裏執行
  finish 退出函數
  display +變量名 以展臺顯示變量的值
  info +display 查看display信息
  undisplay num 退出顯示
  x /n f(四個字節顯示) b(一個字節顯示) 查看內存中的值
  ptype +變量名 查看變量類型
  q 退出gdb調試(quit)
進程
  set follow-fork-mode mode (mode 的值可選項爲parent和child) 跟蹤父進程或子進程
線程
  info threads 顯示當前線程
  thread n 切換到第n個線程(注:n是線程編號)
  set scheduler-locking [off/on/step] off 表示不鎖定任何線程 on 表示只當前被調試的線程會繼續執行 step 表示在單步執行的時候,只有這個線程會繼續執行
8. 什麼是庫,請簡述共享庫和靜態庫的區別。使用庫文件時,“-L”和“-l”選項分別用來指定什麼?
  這裏的庫也稱爲函數庫,很多的軟件之間都會相互使用彼此提供的函數庫來進行特殊功能的運行。函數庫依據是否被編譯到程序內部而分爲動態與靜態函數庫。動態函數庫又稱爲共享庫。
  靜態函數庫與共享庫的區別如下:
  [1]. 擴展名:靜態庫的擴展名通常爲.a,而共享庫的擴展名通常爲.so;
  [2]. 編譯行爲:靜態庫在編譯時會直接整合到執行程序中,所以利用靜態庫進行編譯的可執行文件會大一些;而共享庫是在編譯的文件中只有一個“指向”,也就會說共享庫沒有被整合到可執行文件中,而是當可執行文件要使用到共享庫中的機制時,程序纔會根據“指向”去讀取共享庫,因此它的可執行文件會小一些。
  [3]. 獨立執行的狀態:使用靜態庫編譯的可執行文件可以獨立執行,而不需要再向外部要求讀取函數庫的內容。而共享庫編譯出的可執行文件不能獨立執行,只有用到共享庫的機制時,纔會去讀取共享庫,所以共享庫必須存在,且目錄不能改變,因爲我們的可執行文件中只有“指向”,用到該共享庫時,纔會主動去某個路徑下讀取,所以共享庫不能移動也不能刪除。
  [4]. 升級難以程度:由於使用靜態庫編譯的可執行文件被整合到該文件中,所以升級庫後,必須將可執行文件進行重新編譯整合到該文件中,所以升級難度相對較大;而使用共享庫的可執行文件只有“指向”,所以在升級了共享庫之後,不需要對可執行文件進行重新編譯看,所以難度就較小。
gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld
上面這句表示在編譯hello.c時-I /home/hello/include表示將/home/hello/include目錄作爲第一個尋找頭文件的目錄,
 尋找的順序是:/home/hello/include–>/usr/include–>/usr/local/include
-L /home/hello/lib表示將/home/hello/lib目錄作爲第一個尋找庫文件的目錄,
 尋找的順序是:/home/hello/lib–>/lib–>/usr/lib–>/usr/local/lib
-lworld表示在上面的lib的路徑中尋找庫文件(如果gcc編譯選項中加入了“-static”表示尋找libworld.a靜態庫文件)
 但注意:-static顯得有些暴力,因爲他會把命令行中-static後面的所有-l指明的庫都靜態鏈接。而一般的是採用如-Wl,-Bstatic告訴鏈接器使用-Bstatic選項,該選項是告訴鏈接器,對接下來的-l選項使用靜態鏈接;-Wl,-Bdynamic就是告訴鏈接器對接下來的-l選項使用動態鏈接
 .#include <>直接到 指定的某些目錄中去找某些頭文件。 注意-I 屬於該類型
 .#include “”先到源文件所在文件夾去找,然後再到系統指定的某些目錄中去找某些頭文件。
“”中可以用類似“../inc/bluetooth/hci.h”:包含源文件上層目錄中Inc下Bluetooth中的hci.h.
頭文件搜索順序:
 1.由參數-I指定的路徑(指定路徑有多個路徑時,按指定路徑的順序搜索)
 2.然後找gcc的環境變量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH
 3.再找內定目錄
  /usr/include
  /usr/local/include
 當對動態庫與靜態庫混合連接的時候,使用-static會導致所有的庫都使用靜態連接的方式。這時需要作用-Wl的方式: gcc test.cpp -L. -Wl,-Bstatic -ltestlib -Wl,-Bdynamic -ltestlib ,另外還要注意系統的運行庫使用動態連接的方式,所以當動態庫在靜態庫前面連接時,必須在命令行最後使用動態連接。
庫搜索路徑搜索的先後順序是:
 1.編譯目標代碼時指定的動態庫搜索路徑;
 2.環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
 3.配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;
 4.默認的動態庫搜索路徑/lib;
 5.默認的動態庫搜索路徑/usr/lib。
 通過設定環境變量# export LD_LIBRARY_PATH=/zz/mydir/,可以指定動態庫搜索路徑,(運行時)。
9.什麼是進程,什麼是進程描述符,linux系統最多可以運行多少個進程?
 進程是運行中的程序,而進程描述符是表示一個進程的唯一標識。linux系統最多可以運行64個進程,我們可以使用ulimit -a查看我們系統的所有限制。
10. 畫出進程的狀態轉移圖(三個狀態模型)
這裏寫圖片描述
 1.就緒到執行:處於就緒狀態的進程,在調度程序爲之分配了處理器之後,該進程就進入執行狀態;
 2.執行到就緒:正在執行的進程,如果分配給它的時間片用完,則暫停執行,該進程就由執行狀態轉變爲就緒狀態;
 3.執行到阻塞:如果正在執行的進程因爲發生某事件(例如:請求I/O,申請緩衝空間等)而使進程的執行受阻,則該進程將停止執行,由執行狀態轉變爲阻塞狀態;
 4.阻塞到就緒:處於阻塞狀態的進程, 如果引起其阻塞的事件發生了, 則該進程將解除阻塞狀態而進入就緒狀態。
11. 什麼是用戶態,什麼是內核態,什麼時候會從用戶態切換到內核態?
 用戶態:應用程序在用戶空間執行,它們只能看到允許它們使用的部分系統資源,並且只能使用某些特定的系統功能,不能直接訪問硬件,也不能訪問內核劃給別人的內存範圍。當執行一個普通用戶程序時,系統將以用戶態進入用戶空間執行。
 內核態:通常一個內核由負責響應中斷的中斷服務程序,負責管理多個進程從而分享處理器時間的調度程序,負責管理進程地址空間的內存管理程序和網絡,進程間通信等系統服務程序共同組成。其獨立於普通應用程序,一般處於系統態,當內核運行時,系統以內核態進入內核空間執行。 
 用戶態切換到內核態有以下三種方式:
 1.系統調用
 2.產生中斷
 3.發生異常
12. linux環境下main函數有幾個參數,並說明各個參數的意義。
 main函數的聲明int main(int argc,char* argv[],char* env[]);
 1. argc代表該程序運行是參數的個數;
 2. argv代表這些參數(字符串);
 3. env代表的是環境變量的字符串(各種路徑)。
13. 什麼是系統調用,它和函數有什麼關係?
 系統調用:通俗的講,說的是操作系統提供給用戶程序調用的一組“特殊”接口。用戶程序可以通過這組“特殊”接口來獲得操作系統內核提供的服務,比如用戶可以通過文件系統相關的調用請求系統打開文件、關閉文件或讀寫文件,可以通過時鐘相關的系統調用獲得系統時間或設置定時器等。
 系統調用與函數的區別如下:
 通俗的講,函數調用是語言本身的一部分,而系統函數是內核提供給應用程序的接口,屬於系統的一部分。函數調用是語言或應用程序的一部分,而系統調用是操作系統的一部分。
 1. 函數調用:在所有的ANSI C編譯器版本中,C庫函數是相同的 ;
   系統調用 :各個操作系統的系統調用是不同的 ;
 2. 函數調用:它調用函數庫中的一段程序(或函數);
   系統調用:它調用系統內核的服務 ,與用戶程序相聯繫, 是操作系統的一個入口點;
 3. 函數調用:在用戶地址空間執行
   系統調用:在內核地址空間執行
 4. 函數調用:它的運行時間屬於“用戶時間”
   系統調用:它的運行時間屬於“系統”時間
 5. 函數調用:屬於過程調用,調用開銷較小
   系統調用:需要在用戶空間和內核上下文環境間切換,開銷較大
 6. 函數調用:在C函數庫libc中有大約300個函數
   系統調用:在UNIX中大約有90個系統調用
 7. 函數調用:典型的C函數庫調用有system fprintfmalloc
   系統調用:典型的系統調用有chdir fork write brk;
14. 進程間通信有哪幾種方式?
 進程間通信的方式有:管道,共享內存,消息隊列,信號量,套接字
15. 簡述有名管道與無名管道的區別,並說明管道是全雙工還是半雙工?
 有名管道與無名管道的區別:有名管道可以在任意兩個進程之間進行通信,而無名管道由於其無名,所以只能以fork出子進程的形式在父子進程之間進行通信。
 管道是半雙工的。
16. 簡述共享內存的實現原理。
 兩個不同進程A、B共享內存的意思是,同一塊物理內存被映射到進程A、B各自的進程地址空間。進程A可以即時看到進程B對共享內存中數據的更新,反之亦然。由於多個進程共享同一塊內存區域,必然需要某種同步機制,互斥鎖和信號量都可以。
 採用共享內存通信的一個顯而易見的好處是效率高,因爲進程可以直接讀寫內存,而不需要任何數據的拷貝。對於像管道和消息隊列等通信方式,則需要在內核和用戶空間進行四次的數據拷貝,而共享內存則只拷貝兩次數據:一次從輸入文件到共享內存區,另一次從共享內存區到輸出文件。實際上,進程之間在共享內存時,並不總是讀寫少量數據後就解除映射,有新的通信時,再重新建立共享內存區域。而是保持共享區域,直到通信完畢爲止,這樣,數據內容一直保存在共享內存中,並沒有寫回文件。共享內存中的內容往往是在解除映射時才寫回文件的。因此,採用共享內存的通信方式效率是非常高的。
17. 簡述與信號有關的系統調用signal和kill的功能。
 系統調用signal是進程用來設定某個信號的處理方法,系統調用kill是用來發送信號給指定進程的。
18. 簡述fork進程的流程,及寫時拷貝的意義是什麼?
 fork進程的流程:
 [1]. 爲新進程分配頁表;
 [2]. 爲新進程分配pid;
 [3]. 調用do_fork
 寫時拷貝的意義:
 寫時拷貝是一種可以推遲甚至是免拷貝數據的一種技術,內核此時並不複製整個進程的地址空間,而是讓父進程和子進程共享同一個拷貝。只有在需要寫入的時候,數據纔會被複制,從而使各個進程擁有各自的拷貝,資源的複製只有在需要寫入時才進行,在此之前,只是以只讀的方式共享,這種技術使得地址空間上的頁的拷貝被推遲到實際發生寫入的時候才進行。
19. 調用系統調用後,如何從用戶態切換到內核態。
 [1]:讀取tr寄存器,訪問TSS段
 [2]:從TSS段中的sp0獲取進程內核棧的棧頂指針
 [3]: 由控制單元在內核棧中保存當前eflags,cs,ss,eip,esp寄存器的值。
 [4]:由SAVE_ALL保存其寄存器的值到內核棧
 [5]:把內核代碼選擇符寫入CS寄存器,內核棧指針寫入ESP寄存器,把內核入口點的線性地址寫入EIP寄存器
20. 什麼是僵死進程?怎麼做可以處理僵死進程
 當父進程還未獲取子進程的退出碼,而子進程已經先於父進程結束,此時的子進程稱爲僵死進程。
 處理僵死進程可以使父進程調用wait()或者調用waitpid()來等待子進程結束並獲取退出碼。
21. 什麼是臨界資源,什麼是臨界區?
 某一時刻只能被一個進程訪問的資源稱爲臨界資源。而每個進程中使用臨界資源進行操作的一段程序稱爲臨界區。
22. 什麼是信號量,它的作用是什麼?
 信號量是在多線程環境下使用的一種設施,它的作用是可以用來保證兩個或多個關鍵代碼段不被併發調用。
23. 什麼是虛擬內存,引入虛擬內存後對系統運行程序有什麼作用?
 虛擬內存是指通過分頁分段以及段頁式管理方式,使得在實際物理地址上可能不連續的內存空間映射成爲邏輯上連續的一段空間,每一個進程都感覺自己獨立擁有一塊屬於自己的連續內存空間而不受其他進程的打擾。
 引入虛擬內存之後系統在加載運行程序的時候,可以不必一次性將該進程所需的所有頁全部調入內存,而是採用一定的策略去動態調度所需要的頁信息,而使得進程感覺自己的所有頁是一次性全部調入內存一樣,並且引入虛擬內存,使得系統效率大大提高並且節省開銷,有效合理利用資源。
24. 這條語句fork()&&fork()產生幾個進程?
 產生了2個新進程,算上父進程一共3個進程。
 這裏寫圖片描述
25. 線程是什麼?和進程有什麼區別,簡述線程的實現方式。
 [1]. 線程是線程是進程中的一條執行流,CPU獨立運行和獨立調度的基本單位;
 [2]. 進程是資源分配的基本單位;
 兩者的聯繫:進程和線程都是操作系統所運行的程序運行的基本單元。
區別:
 [1]. 進程具有獨立的空間地址,一個進程崩潰後,在保護模式下不會對其它進程產生影響。
 [2]. 線程只是一個進程的不同執行路徑,線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉。
 線程的實現方式:用戶級線程,內核級線程以及組合模型
26. 同步線程有哪些方法?
 同步線程的方法包括信號量,互斥鎖以及條件變量。
27. 請描述OSI模型的分層結構以及各層功能
 物理層:規定通信設備的機械、電氣、功能和過程的特性,用以建立、維持和釋放數據鏈路層實體間的連接,它的任務就是提供網絡的物理連接進行二進制傳輸。
 數據鏈路層:數據鏈路連接的建立與釋放,構成數據鏈路數據單元,數據鏈路連接的分裂、定界與同步,順序和流量控制,差錯的檢測和恢復等。通俗來講,就是輸入介質
 網絡層:關心通信子網的運行控制,選擇合適的路由使得發送站的運輸層分送下來的分組能夠正確無誤的按照地址找到目的站,並交付目的站的運輸層,以及實現擁塞控制,網絡互聯等功能。簡單來說就是尋址以及找到最短路徑。
 運輸層:傳輸地址到網絡地址的映射,多路複用與分割,傳輸連接的建立與釋放,分段與重新組裝,組塊與分塊,實現端到端的連接。
 會話層:會話連接到傳輸連接的映射,數據傳送,會話連接的恢復與釋放,會話管理,令牌管理和活動管理。通俗來講就是互聯主機通信
 表示層:進行數據語法轉換,語法表示。表示層連接管理,數據加密和數據壓縮。簡單來說就是數據表示
 應用層:提供應用進程所需要的信息交換和遠程操作,並且作爲互相作用的應用進程的用戶代理來完成一些進行語義上有意義的信息交換所必須的功能。簡單來講就是處理網絡應用。
28. 畫出tcp協議三次握手以及四次揮手的過成圖,簡述TIME_WAIT狀態的意義
這裏寫圖片描述
TIME_WAIT狀態系統大約會持續兩分鐘,其意義在於:
   a) 可靠地終止TCP的連接。
   b) 讓遲來的報文能夠有足夠時間被識別,並且被丟棄。
   可靠地終止TCP的連接意思是說當最後確認服務器關閉連接的最後一個tcp報文段丟失,那麼服務器會重新發送結束報文,所以客戶端需要停留在某個階段來處理這些重複收到的結束報文段,即向服務器端發送確認結束報文段。
   讓遲來的報文能夠有足夠的時間被識別並丟棄是說如果沒有TIME_WAIT狀態,那麼該端口會立即被其他連接所使用,重新建立一個與本連接具有相同的ip地址以及端口號的新連接,本連接一些遲來的數據報文便可能會被該新連接所接收,但這是不正確的,所以這就是對於遲到的報文爲什麼要被丟棄的原因。
29. 簡述tcp與udp協議的特點與區別
 tcp是面向連接的,可靠地流式服務;udp是面向非連接的,不可靠的流式服務。tcp比較適合用於傳輸大量數據,但速度比較慢,建立連接需要相對較大的開銷,而udp傳輸數據的速度比較快,用於傳輸少量數據,但不保證數據可達。
30. 簡述tcp協議中慢啓動,快速重傳以及快速恢復的功能。
 慢啓動是說在流量控制時,我們需要初始化一個擁塞窗口的初始值,然後發送端每收到一個來自接收方的ack確認,便按照一定的規則或公式增加數值,當tcp模塊剛開始發送數據時並不知道網絡狀況,需要用一種試探的方式來平緩的增加CWND的值。
 快重傳算法首先要求接收方每收到一個失序的報文段後就立即發出重複確認(爲的是使發送方及早知道有報文段沒有到達對方)而不要等到自己發送數據時才進行捎帶確認。
 快速恢復是說當接收到新的數據的確認時,設置擁塞窗口CWND等於慢啓動門限值ssthresh,即新的慢啓動門限值(使其回到擁塞避免階段而非慢啓動階段)。
31. 簡述tcp滑動窗口協議的功能
 提高數據傳輸效率,進行差錯控制和流量控制。其基本思想是:發送方發送完一幀後,不是停下來等待確認幀,而是可以接着發送數據幀。由於減少了等待時間,整個通信的吞吐量就提高了。在此過程中有發送窗口與接收窗口,發送方根據接收方接收窗口的大小來計算最多發送多長的數據。
32. 簡述bind,connect,listen以及accept的功能。
 bind:將一個接收客戶端請求的服務器套接字關聯上一個衆所周知的地址。
 connect:在開始交換數據之前,在請求服務的進程套接字(客戶端)和提供服務的進程套接字(服務器)之間建立一個連接。
 listen:服務器用來監聽請求的連接並宣告是否願意接受連接請求。
 accept:服務器調用該函數獲得連接請求並建立連接。
33. 簡述select和epoll實現上有什麼區別,並說明epoll的LI模式和ET模式的區別?
 select是採用輪詢的方式來關注文件描述符上是否有事件發生,而epoll是在每個關心的文件描述符上註冊一個回調函數,等到事件發生後進行相應處理;select監聽的事件類型比epoll少。
 LI模式是默認工作模式,當epoll_wait檢測到數據就緒並將此事件通知給應用程序之後,應用程序不必立即處理,因爲後續該函數會一直嚮應用程序通知這件事,直到該事件被處理。而ET模式在epoll_wait檢測到數據就緒之後,只嚮應用程序通知一次,所以應用程序必須立即處理。ET模式降低了epoll事件被重複觸發的次數,效率更高一些。
34. 端口是什麼,協議是什麼?
 端口是設備與外界通訊交流的出口,一般在應用層被指定。
 協議是通信雙方必須共同遵守的一組約定。
35. http協議是那一層的協議,它使用的端口號是多少?http應答狀態碼都有哪些,分別代表什麼意思,請求方法有哪些,功能分別是什麼?
 http協議是應用層協議,使用80端口。
 http應答碼及意義:
 這裏寫圖片描述
 http請求方法及功能:
 這裏寫圖片描述
36. 在瀏覽器中輸入www.baidu.com敲回車,接下來會發生什麼,描述整個過程。
 首先先通過瀏覽器緩存,系統緩存或DNS找到要訪問的服務器的ip地址,進行三次握手建立連接,瀏覽器向服務器發送http請求報文,服務器接收到該請求併發送一個應答報文並將網頁數據發送給瀏覽器,由瀏覽器通過解析將目標百度網頁呈現出來,如果爲短連接,則關閉連接,如果爲長連接,則完成請求,不做後續。
37. 描述多線程與線程池的不同點
 線程池是一種對象池的思想,開闢一塊內存空間,裏面存放了衆多(未死亡)的線程,池中線程執行調度由池管理器來處理。當有線程任務時,從池中取一個,執行完成後線程對象歸池,這樣可以避免反覆創建線程對象所帶來的性能開銷,節省了系統的資源。
 多線程解決多任務同時執行的需求,合理使用CPU資源。多線程的運行是根據CPU切換完成,如何切換由CPU決定,因此多線程運行具有不確定性。
38. 由寫好的c代碼到可執行程序,都經過了哪幾個階段,每個階段的作用是什麼?
 [1]. 預編譯:執行宏替換,頭文件複製替換,以及刪除註釋等工作,生成.i文件
 [2]. 編譯:進行詞法分析,語法分析,語義分析,並將高級語言翻譯爲彙編語言,生成.o文件
 [3]. 彙編:將彙編語言翻譯爲機器語言,即二進制文件
 [4]. 鏈接:鏈接外部文件,重定向生成可執行文件,即.exe文件

發佈了64 篇原創文章 · 獲贊 20 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章