1. 描述線程跟進(jìn)程的區(qū)別 (Describe the difference between a Thread and a Process?)
進(jìn)程是指處于運(yùn)行狀態(tài)中的程序, 例如在windoe 環(huán)境下Ctrl + Alt + Delete 可以看見此時(shí)本臺(tái)window運(yùn)行中的程序。
線程是指在運(yùn)行狀態(tài)中的程序的一個(gè)可能路徑。
所以一個(gè)進(jìn)程至少有一個(gè)線程,多個(gè)線程可以在一個(gè)進(jìn)程(多線程的程序)。一個(gè)進(jìn)程開始的時(shí)候,會(huì)被分配屬于它自己的內(nèi)存地址,但是線程只能擁有所屬進(jìn)程的內(nèi)存地址。還有同一個(gè)進(jìn)程的線程跟線程之間可以直接訪問。但進(jìn)程跟進(jìn)程之間需要通過interprocess communication才能相互訪問(這一點(diǎn)我沒有用過,也不大明白,google上看到的)。
2. 什么是Windows Service, 跟一般的EXE的生命周期由何不同 (What is a Windows Service and how does its lifecycle differ from a "standard" EXE?)
沒有寫過Windows Service相關(guān)的程序, 不太清楚, 上MSDN, Introduction to Windows Service Applications, 才知道Windows Service是寫給服務(wù)器用的程序. 這種程序沒有用戶界面, 可以設(shè)定隨著服務(wù)器開啟而自動(dòng)啟動(dòng)或重起, 不依賴于登陸的用戶.
至于與EXE生命周期不同的問題, 不是非常得清楚, 有誰了解嗎? 請(qǐng)賜教.
3. 在Windows平臺(tái)下一個(gè)單進(jìn)程最多可獲得的內(nèi)存有多大? 跟這個(gè)系統(tǒng)本省允許的最大虛擬內(nèi)存是一樣的嗎? 知道這些問題的答案對(duì)系統(tǒng)設(shè)計(jì)有什么影響? (What is the maximum amount of memory any single process on Windows can address? Is this different than the maximum virtual memory for the system? How would this affect a system design?)
自己不知道這個(gè)問題的答案, 在Stackoverflow上 http://stackoverflow.com/questions/716798/maximum-net-achievable-memory, 讀到對(duì)于32bit的,是2GB, 對(duì)于64bit的是8TB. MSND上有個(gè)表, 對(duì)不同版本的Windows系統(tǒng)給出一個(gè)介紹, Memory Limits for Windows Releases .
一臺(tái)系統(tǒng)的最大虛擬內(nèi)存取決于很多因素, 在Coding Horror 上有一篇文章講的很詳細(xì), Dude, Where's My 4 Gigabytes of RAM? 對(duì)于32位的系統(tǒng)基本公式是:
232 = 4,294,967,2964,294,967,296 / (1,024 x 1,024) = 4,096所以是4G. 所以系統(tǒng)允許的最大虛擬內(nèi)存不等同于Windwo平臺(tái)下一個(gè)單進(jìn)程可獲得的最大內(nèi)存.
知道這一點(diǎn)對(duì)于系統(tǒng)設(shè)計(jì)的影響是, 當(dāng)你跟一些對(duì)內(nèi)存要求比較大的系統(tǒng)打交道時(shí), 比如數(shù)據(jù)庫之類的, 一定要考慮內(nèi)存這一塊.
4. EXE 和 DLL 有什么區(qū)別 (What is the difference between an EXE and a DLL?)
Exe是Executable, 可執(zhí)行的文件, 其中包括可以讓這個(gè)程序執(zhí)行的起始點(diǎn) Public Static Void Main() in .Net. DLL是一個(gè)exe可以調(diào)用的包含有功能的文件.
5. 什么是強(qiáng)類型跟弱類型? 哪個(gè)好, 為什么? What is strong-typing versus weak-typing? Which is preferred? Why?
strong-typing是指盡量早的檢查變量的類型, 通常在編譯的時(shí)候就檢查. week-typing是指盡量退后對(duì)變量類型的檢查, 通常在運(yùn)行時(shí)檢查. 到底哪個(gè)好? 其實(shí)各有各的好, 像ruby, javascript, 都屬于week-typing, 好處是寫代碼的時(shí)候比較快. C#屬于strong-typing, 好處是如果變量類型不對(duì)的話, 編譯不會(huì)通過, Visual Studio 還會(huì)有提示. 至于寫代碼的速度上講, 自從C# 3.0以來, 使用var來定義變量, 簡(jiǎn)單了很多.
6. Corillian's product is a "Component Container." Name at least 3 component containers that ship now with the Windows Server Family.
誰能回答一下這個(gè)問題, 我不懂.
7. 什么是PID, 在解決系統(tǒng)問題時(shí)有用嗎? (What is a PID? How is it useful when troubleshooting a system?)
PID全稱是 Process Identifier, 就是進(jìn)程的一個(gè)號(hào)碼, 通常當(dāng)系統(tǒng)哪個(gè)程序不聽使喚的時(shí)候, 可以用它來把這個(gè)程序關(guān)閉. 而且Debug的時(shí)候, 也有用.
8. 一個(gè)TCP/IP端口可以被多少個(gè)進(jìn)程分享? (How many processes can listen on a single TCP/IP port?)
一個(gè)
9. 什么是GAC,它的用處是什么? (What is the GAC? What problem does it solve?)
GAC 是指 Global Assembly Cache, 用處是放在這里的程序集可以被多個(gè)程序共同調(diào)用, 就像microsoft的很多程序集都在這里. 解決的問題是, 省點(diǎn)硬盤空間. 但是不好的地方是Why should I NOT use the GAC? 管理起不同版本的程序集很麻煩, 可以升級(jí)了一個(gè), 不只不覺破壞了很多引用它的程序.