外派去微軟MS面試

來源:互聯網
上載者:User

1. 我問一下Windows方面的問題,安全性方面的。帳戶登入Windows後,個人資訊是怎樣被載入到進程中的,是怎麼實現的? Windows資源分派和執行的最小單位是什嗎?檔案夾的許可權是什麼時候、怎樣被確定的,Windows是怎麼實現這個許可權的?

第一個問題就傻眼,我只回答了,資源分派的最小單位是進程,執行的最小單位是線程,不知道對不對(關於(1)系統與進程、(2)進程和線程的關係,我在想是不是可以這樣來類比:(1)的關係就像(2)的關係;一個系統裡可以同時進行N多個進程,一個進程有N>=1個線程。)

這裡我自然而來又想到另外一個問題,到底什麼是進程同步,什麼是線程同步,進程同步和線程同步有什麼區別?

這個問題中的其它子問題我一概不知,請賜教。

2. 聽說過Kerberos嗎?是什麼東西?用來幹什麼的?

沒有聽說過。網上查過之後,說是什麼用來加密的,對稱式加密什麼的,不是很懂。

3. 什麼是Fiber?

Fiber是光纖的意思(我是念物理的,我估計面試官那時已經FT了)。

Fiber是纖程,是UNIX裡的一些概念,類似於Windows裡面的線程,但是要把代碼從UNIX移植到Windows裡面時,需要進行ConvertThreadToFiber的轉換(這是書上看來的,我就覺得奇怪了,為什麼不是ConvertFiberToThread? 因為是從UNIX移植到Windows!)

4. 怎樣在一個單向鏈表的當前指標前面插入一個結點?

我就奇了怪了,怎麼可能在單向鏈表中的當前指標前面插入一個結點呢,我看的資料結構的書上,是同時記住兩個指標的,一個是currPtr(當前指標),另一個是prevPtr,所以這樣是很容易辦到的。但是面試官要求就一個當前指標,這可怎麼操作啊?可能是我理解錯了,或者是他要什麼答案。我當時回答時,只說了從head一個個找直到找到當前head為此(其實這樣也是要使用prevPtr的)

5. 在User Mode時,調用Windows API, 就轉入了Kernel層面,請問有些什麼變化?

什麼什麼變化啊?什麼叫做User Mode,什麼叫做Kernel層面啊?

6. 你知道try catch這些東西的嵌套使用嗎?怎樣使用,應注意些什嗎?

不知道。從來沒有用try catch.可能平常寫的都是小程式,也用不著,所以當時就載了,因為不懂錯誤處理的面試者,面試官看了肯定亂搖頭。估計他又FT了。

7. 一個已經編譯的程式在運行時,怎樣對它進行調試?

編譯好了脫離了編譯器而運行了,還能調試嗎?我FT了。

8. 在調試一個迴圈時,如果設定斷點,那麼每次進入迴圈碰到這個斷點都會停下來,當然可以在裡面設定監視變數,但是這樣做修改了原始碼,請問有什麼辦法嗎?

還真沒有這麼調試過,我都是直接設定監視變數的。用assert()?

9. C/C++中有兩套動態分配:(1)malloc() free() (2)new delete 請問能互動使用嗎,要注意些什麼,你能作些什麼評論嗎?

FT,我的原則是用了malloc就一要用free來釋放,用了new就用delete,這個應該總歸沒有錯的吧?這兩個的唯一區別是,在使用抽象類別型Class時,前者不會調用Constructor/Destructor,而後者會。我還能作些什麼評論呢?

10. 用free可不可以翻譯鏈表記憶體?

不可以,但是我知道只是這樣回答應該是不對的。我又說,如果只是free(head)了,那麼只是把頭結點給釋放了,其它後面所有的結點記憶體還是在的,但是它們由於頭結點的丟失而永遠不會被retrieve到了。(這個就是記憶體流失的一種吧?)
如果確實要用free來釋放鏈表記憶體的話,就應該遍曆鏈表,釋放每個結點。

11. 我們在定義一個函數時:
type f(arglist...)
{
/*
編譯器會在這裡加些什嗎?
*/
int a, b;/* 程式員定義一些函數體現內的變數 */
char x, y;
....
return;
/*
編譯器會在這裡又加些什嗎?
*/
}

我其實是不懂他要問些什麼。我只知道,從main()過來執行f()時,要進行f參數的初始化(副本Copy),退出時撤銷內建變數和副本Copy。編譯器還做些什麼呢?

12. C/C++編譯器對沒有初始化的記憶體地區是怎樣處理的,有哪些初始化工作?(實際上是進行了初始化,請問有哪幾種)

這個我倒真是不知道,我就隨便說了,我看到過一個沒有初始化的變數用來輸出調試時,會看到0xcccccccc。面試官說這幾是其中一種,請問還有其它的嗎?我說不知道。

13. 多個檔案中的全域變數是什麼時候定義、分配空間和初始化?

這個東西我不知道怎麼回答,我只知道全域變數是跟static變數是分配在同一記憶體類型地區中的。

 

(以下填目是我面試歸來自己想出來的,覺得很重要,但是網上又搜尋不到很直接很通俗的答案,非常消耗時間,請大家幫幫忙)
14. C中的static與C++中的static有什麼區別?

15. vtable的基本原理?

16. C/C++和C#中的Class與Struct的區別有什麼不同?

17. 國安字型檔中共有91251個漢字,那麼Unicode裡是怎樣表示這些漢字的呢,因為兩位元組(65536個組合)根本就不夠用?Linux裡用UTF-8肯定是可以的,Windows裡是怎麼實現的?我一直沒有明白為什麼會用Unicode來表示世界上所有的文字,再怎麼蠢的設計師也應該知道字型檔要擴充的,再說MS裡總歸用中國人吧,是中國人總歸應該知道所有的漢字是不能只用兩個位元組的Unicode表示的。

18. 指標操作時,比方說定義了一個指標:
type* p;
那麼執行:
p++;
就會使p移動sizeof(type)個位元組。
我就在想了,系統是怎麼知道要移動這麼些個位元組的?肯定是在記憶體的某些地方記住了這個指標的類型,請問在哪裡記住的呢? 是不是程式一開始運行就有一張表記住了每個變數的屬性?
這個其實是跟定義一個非指標變數也是同樣的:
int x;
系統是怎麼知道要取4個位元組呢(32位機)

19. 磁碟分割的FAT32(NTFS又是幾位的呢) vs. 物理CPU的32位 vs. 作業系統核心的32位它們之間有什麼聯絡?

20. 微軟會不會在以後的作業系統中用UTF-8呢?基於相容性和商業市場操作,可能不太會吧?

21. 現在兩種結構體:
typedef struct _S1
{
int x;
char y;
char z;
}S1;

typedef struct _S2
{
char x;
int y;
char z;
}S2;

sizeof(S1) = ?
sizeof(S2) = ?

答案:
sizeof(S1) = 8
sizeof(S2) = 8

我的問題是到底是怎樣對齊的,空位元組的地方的值是什麼呢,有初始化嗎?

typedef struct _TEST
{
     char x1;
     short x2;
     float x3;
     char x4;
}TEST;

sizeof(TEST)又是多少呢?(答案12)

22. malloc()是怎樣實現的?我看過VS6中的原始碼,實在是太複雜了,看不懂,能講講思路嗎?

23. 怎樣測試一台Coke Machine(這是我電話面試時的一個問題)?有哪些Test Cases?

24. 作業系統中PV操作的問題,請問怎樣來確定是互斥還是同步?PV操作的順序怎樣來排放和確定?應該設定幾個訊號量?怎樣來設定?請用通俗的語言回答。這裡:
http://www.ahtvu.ah.cn/jxc1/zhykch/5103/kc2.htm
可能已經講得很清楚了,可是我還是不懂?五哲學家進餐的問題我還是沒有搜到稱心如意的解釋,疑問重重。請幫幫我吧。
引申的問題:進程同步和線程同步到底有什麼區別?
 

 

 

 

Q. 我問一下Windows方面的問題,安全性方面的。帳戶登入Windows後,個人資訊是怎樣被載入到進程中的,是怎麼實現的? Windows資源分派和執行的最小單位是什嗎?檔案夾的許可權是什麼時候、怎樣被確定的,Windows是怎麼實現這個許可權的?
A: 主要由winlogon.exe進程負責載入使用者資訊,windows資源分派和執行的最小單位是頁(page), 檔案夾的許可權由系統控制代碼掛鈎,詳見Native API - NtQueryInforamtionFile

Q. 聽說過Kerberos嗎?是什麼東西?用來幹什麼的?
A. 安全性憑證加密驗證.參見<<Windows 2000分布式管理>>

Q. 什麼是Fiber?
A. 纖程. 參見 <<Windows 核心編程>>

Q. 在User Mode時,調用Windows API, 就轉入了Kernel層面,請問有些什麼變化?
A. 主要變化是在User mode下訪問記憶體是受OS保護的32/64位虛擬位址, 而在核心層是不受保護的實模式.

Q. 你知道try catch這些東西的嵌套使用嗎?怎樣使用,應注意些什嗎?
A. 異常捕獲需要注意的是分清楚結構化異常(例如, 被零除)還是win32異常.特別注意的是堆棧的處理, 詳見<<C++ Primer>>

Q. 一個已經編譯的程式在運行時,怎樣對它進行調試?
A. WinDbg.exe, SoftICE, etc.

Q. 在調試一個迴圈時,如果設定斷點,那麼每次進入迴圈碰到這個斷點都會停下來,當然可以在裡面設定監視變數,但是這樣做修改了原始碼,請問有什麼辦法嗎?
A. Visual C++ IDE提供了條件斷點設定.

Q. C/C++中有兩套動態分配:(1)malloc() free() (2)new delete 請問能互動使用嗎,要注意些什麼,你能作些什麼評論嗎?
A. Refer to MSDN: The new operator is used to allocate objects and arrays of objects. The new operator allocates from a program memory area called the “free store.” In C, the free store is often referred to as the “heap.”

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.