常見筆試題--論述題(持續更新)

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.





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