常見筆試題--論述題

1.簡述動態連接庫(dll)和靜態連接庫(lib)的差異。

答:靜態鏈接庫就是把(lib)文件中用到的函數代碼直接連接進目標程序,程序運行的時候再也不須要其它的庫文件;動態連接就是把調用的函數所在文件模塊(DLL)和調用函數在文件中的位置等信息連接進目標程序,程序運行的時候再從DLL中尋找相應函數代碼,所以須要相應DLL文件的支持。  
    靜態連接庫與動態連接庫都是共享代碼的方式,若是採用靜態連接庫,則不管你願不肯意,lib 中的指令都所有被直接包含在最終生成的 EXE 文件中了。可是若使用 DLL,該 DLL 沒必要被包含在最終 EXE 文件中,EXE 文件執行時能夠「動態」地引用和卸載這個與 EXE 獨立的 DLL 文件。靜態連接庫和動態連接庫的另一個區別在於靜態連接庫中不能再包含其餘的動態連接庫或者靜態庫,而在動態連接庫中還能夠再包含其餘的動態或靜態連接庫。

2.

簡述多線程程序對比單線程程序的優勢和缺點。算法

(1)多線程的優勢:
無需跨進程邊界;
程序邏輯和控制方式簡單;
全部線程能夠直接共享內存和變量等;
線程方式消耗的總資源比進程方式好;
(2)多線程缺點:
每一個線程與主程序共用地址空間,受限於2GB地址空間;
線程之間的同步和加鎖控制比較麻煩;
一個線程的崩潰可能影響到整個程序的穩定性;
到達必定的線程數程度後,即便再增長CPU也沒法提升性能;
線程可以提升的總性能有限,並且線程多了以後,線程自己的調度也是一個麻煩事兒,須要消耗較多的CPU
(3)多進程優勢:
每一個進程互相獨立,不影響主程序的穩定性,子進程崩潰不要緊;
能夠儘可能減小線程加鎖/解鎖的影響,極大提升性能,就算是線程運行的模塊算法效率低也不要緊;
經過增長CPU,就能夠容易擴充性能;
每一個子進程都有2GB地址空間和相關資源,整體可以達到的性能上限很是大
(4)多進程缺點:
邏輯控制複雜,須要和主程序交互;
多進程調度開銷比較大;
須要跨進程邊界,若是有大數據量傳送,就不太好,適合小數據量傳送、密集運算

3.

相關文章
相關標籤/搜索