學習嵌入式一來是為興趣,二來就是為了工作了,對于嵌入式工作崗來說,去找一份工作最難的就是面試了,像這種技術性的工作,一般是有筆試的,在這里我總結了一些關于嵌入式操作系統方面的面試題,這是我在微軟亞洲技術中心面試時做的,還有答案哦,可以收藏來學習。
1.什么是進程,線程?它們之間的區別和聯系是什么?
1.進程和線程的差別。
線程是指進程內的一個執行單元,也是進程內的可調度實體.
與進程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
(2)并發性:不僅進程之間可以并發執行,同一個進程的多個線程之間也可并發執行
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬于進程的資源.
(4)系統開銷:在創建或撤消進程時,由于系統都要為之分配和回收資源,導致系統的開銷明顯大于創建或撤消線程時的開銷。
面試題: 線程與進程的區別和聯系? 線程是否具有相同的堆棧? dll是否有獨立的堆棧?
進程是死的,只是一些資源的集合,真正的程序執行都是線程來完成的,程序啟動的時候操作系統就幫你創建了一個主線程。
每個線程有自己的堆棧。
DLL中有沒有獨立的堆棧,這個問題不好回答,或者說這個問題本身是否有問題。因為DLL中的代碼是被某些線程所執行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調用,那么這個時候是不是說這個DLL沒有自己獨立的堆棧?如果DLL中的代碼是由DLL自己創建的線程所執行,那么是不是說DLL有獨立的堆棧?
以上講的是堆棧,如果對于堆來說,每個DLL有自己的堆,所以如果是從DLL中動態分配的內存,最好是從DLL中刪除,如果你從DLL中分配內存,然后在EXE中,或者另外一個DLL中刪除,很有可能導致程序崩潰
2.描述實時系統的基本特性
在特定時間內完成特定的任務,實時性與可靠性
3.測試方法
人工測試:個人復查、抽查和會審
機器測試:黑盒測試和白盒測試
4.如果只想讓程序有一個實例運行,不能運行兩個。像winamp一樣,只能開一個窗口,怎樣實現?
用內存映射或全局原子(互斥變量)、查找窗口句柄..
FindWindow,互斥,寫標志到文件或注冊表,共享內存。.
5.如何截取鍵盤的響應,讓所有的‘a’變成‘b’?
鍵盤鉤子SetWindowsHookEx
6.Apartment在COM中有什么用?為什么要引入?
7.存儲過程是什么?有什么用?有什么優點?
我的理解就是一堆sql的集合,可以建立非常復雜的查詢,編譯運行,所以運行一次后,以后再運行速度比單獨執行SQL快很多
8.Template有什么特點?什么時候用?
9.Windows下的內存是如何管理的?
10.C/C++編譯器中虛表是如何完成的?
11.談談COM的線程模型。然后討論進程內/外組件的差別。
12.談談IA32下的分頁機制
小頁(4K)兩級分頁模式,大頁(4M)一級
13.在IA32中一共有多少種辦法從用戶態跳到內核態?
通過調用門,從ring3到ring0,中斷從ring3到ring0,進入vm86等等
上面都是在面試中最常見的,有些沒有答案,需要你自己來思考,找答案哦。