哈嘍,大家好。今天更新一篇驅動筆試面試總結。由於篇幅有限,本文只給出了問題,並沒有給出答案。我把PDF版本,放在了百度網盤群組中,出現問題,可以和我及時反饋。
大家可以在我的主頁找到我的聯系方式,加我好友通過后,發送【資料群】給我,會自動拉進群里。本文內容已同步更新在github,點擊閱讀原文可以直達github。
操作系統
進程和線程
什么是進程?什么是線程?
進程和線程有什么區別?
何時使用多進程,何時使用多線程?
進程有幾種狀態?畫一下進程狀態轉換圖?
創建進程有哪幾種方式?
進程間通信方式?有什么優缺點?
線程間同步方法有哪些?
什么是內核線程和用戶線程?
內核線程和用戶線程的區別?
內核線程和用戶線程有什么優缺點?
什么是僵屍進程,孤兒進程,守護進程?
僵屍進程有什么危害?
如何清理僵屍進程?
如何喚醒被阻塞的socket線程?
如何確定當前線程是繁忙還是阻塞?
空閑的進程和阻塞的進程狀態會不會在喚醒的時候誤判?
請問就緒狀態的進程在等待什么?
如何實現線程池?
請你回答一下fork和vfork的區別
server端監聽端口,但還沒有客戶端連接進來,此時進程處於什么狀態?
堆和棧
什么是代碼段,數據段,bss段,堆,棧?
為什么堆的空間是不連續的?
什么是用戶棧和內核棧?
用戶棧和內核棧,為什么不能共用一個棧?
線程是否具有相同的堆棧?
並發和互斥
驅動里面為什么要有並發、互斥的控制?如何實現?講個例子?
自旋鎖是什么?信號量是什么?二者有何異同?
自旋鎖和信號量可以睡眠嗎?為什么?
自旋鎖和信號量可以用於中斷中嗎?
讀寫鎖是什么?
產生死鎖的原因是什么?
死鎖的4個必要條件是什么?
死鎖的處理方式有哪些?
如何避免死鎖?
請問單核機器上寫多線程程序,是否需要考慮加鎖,為什么?
內存
在1G內存的計算機中能否malloc(1.2G)?為什么?
malloc能申請多大的空間?
內存管理有哪幾種方式?
什么是虛擬內存?
解釋下內存碎片,內碎片,外碎片?
解釋下虛擬地址、邏輯地址、線性地址、物理地址?
請問虛擬內存和物理內存怎么對應?
虛擬內存置換方式是怎么樣的?
給你一個類,里面有static,virtual之類的,來說一說這個類的內存分布?
假設臨界區資源釋放,如何保證只讓一個線程獲得臨界區資源而不是都獲得?
操作系統中的缺頁中斷是什么?
OS缺頁置換算法如何實現的?
系統調用是什么,你用過哪些系統調用,和庫函數有什么區別?
為什么要有page cache,操作系統怎么設計的page cache?
上下文
上下文有哪些?怎么理解?
為什么會有上下文這種概念?
什么情況下進行用戶態到內核態的切換?
中斷上下文代碼中有哪些注意事項?
請問線程需要保存哪些上下文,SP、PC、EAX這些寄存器是干嘛用的?
結語
如果覺得本篇文章對你有幫助,在【收藏】的時候,可以【點贊】支持下作者,這個對我真的很重要!
你的每一個贊我都當成了喜歡,謝謝各位兄弟姐妹啦~
關於作者
本碩雙非,參加了2020年秋招和2021年的春招,投遞崗位是嵌入式軟件(驅動)相關。總共收獲Oppo,小米,海康威視,兆易創新,全志科技等十余家公司的offer。
我把自己的秋招,春招歷程詳細記錄了下來,同時,把自己秋招過程總結的筆試面試資料分享了出來,即嵌入式軟件工程師筆試面試指南。關注我的知乎專欄即可獲取。PDF版本獲取方式在公眾號。