筆記轉型成部分不對外開放。
閱讀請繳交3,280元,您就會收到授權一年的邀請函Email,以及紙本重點筆記郵寄給您!
匯款帳號請來信詢問, 站長信箱:eeepage@gmail.com
匯款後,請告知您的帳號後三碼與您Gmail作為帳號,易春木會寄出權限開啟之邀請函,三個工作日內可開啟權限。
(或透過蝦皮賣場:易春木《軟韌體工程師面試重點與考題》筆記)
軟體/韌體工程師《面試重點與觀念複習》
* 使用C, C++, C#, JAVA, Python 透過筆試題目建立資工腦
* 資料結構, 演算法, 作業系統, 程式語言, 計組硬體, 網路
* 不定期陸續發布新文章, 增加軟體方面的knowledge
* 近期規劃: 線上閱讀版將陸續新增 AI 內容(deep learning / model training / AI inference ..etc)
---------
謝謝鄉民
PTT發文推薦,
小編戰戰兢兢持續維護品質 持續加入更多程式設計的面試重點!
任何問題或考題都歡迎討論研究, 祝大家求職順利!!
2017~陸續更新:
整理得很棒喔,獲益良多! 感謝分享及整理!!!
感謝重點整理, 拿你的東西複習很好用!
感謝版主,獲益良多!! 尤其是bit operation的部分!
恭喜Daniel 錄取Garmin, 也十分感謝您的分享喔!
---------------------------
您好,
非常感謝您的網站讓我複習OS跟演算法,並且順利找到自己喜歡的工作。
這裡是我的工作面談一系列的心得文,供您參考!
------
* 回應學員問題&更新考題內容
*增加撲克牌的基本發牌/出牌排型程式碼, 現場考試或上機考會常問到, 建議應知道演算法邏輯!
2017.07
Q: 在第三題時做strcmp函式那題中,如果兩個參數char a[] 和 b[] 是使用如下宣告: char a[4] = "1234",這樣的話就不一定會有'\0'在array的最後面,請問這樣的話該如何處理?
A:本題是要比較字串, 所以基本上字串結尾必須要有一個「\0」字元作為結尾
如果不是字串的話, 則不適用strcmp
若要比較array不是比較字串的話, 也就是說沒有「\0」字元作為結尾
改寫為
len_a = sizeof(a)/sizeof(char);
if(i == len_a){
printf("a[%d] is out of array length.\n", i);
break;
}
但其實已經偏離題目的基本設定, 共勉之
Q: 第40題中的第二個while loop是否是多餘的呢~?
A: 不是多餘的喔!
Q: 您好 : 下面這題的解答似乎怪怪的
1.2 32-bit machine用C語言對位址 0x00005000 的第三個bit設成0,第五個bit設成1。
A: 謝謝提醒!! 已修改
Q: 你好,第十題中的資料型別表
unsigned char 數值範圍是 0~255吧?(非0~256)
A: 謝謝提醒!! 已修改
2017.10
補充一題: 超微公司題目
Q: 假設有一計算機有48KB記憶體,若第一個記憶體的位址為0000(16進位),則最後一個記憶體的位址為何?
A: 48KB → 48*1024 = (2^5+2^4)*2^10 = 110000(2)*10000000000(2) = 1100000000000000(2) = 0xC000(16)
所以最後一個是0xBFFF
0xC000 -1 = 0xBFFF
補充一題常問的Python問題:
Q: 請問 Pthon程式語言的 list 與 tuple 有什麼不同?
A: 這兩者最主要的不同: tuple 是無法被修改的。
串列list是一連串順序性的元素組成, 可以被新增,刪除,修改!
補充一題mutex互斥鎖問題:
Q: Windows driver 怎麼做到基本的mutex 互斥鎖?
A: 最簡單的方法是使用Event方式, Threads是常見的並行處理, 但多threads之下有時候必須做好同步, 否則會出現異常!
第一種情況: 兩個threads 共用某一資料, 但同時間只能一個thread存取
第二種情況: Thread_1 要使用 Thead_2 處理完成的資料, 所以必須要等待Thead_2
可以手動修改程式碼安插這些API:
CreateEvent: 建立一個Event
SetEvent:設定Event使其狀態為set, 用以表示完成
ResetEvent:清除Event使其狀態為Reset, 用以表示未完成
WaitForSingleObject()函數: 在必須等待的地方, 停在此處等著Event被設為set狀態
#include <windows.h>
#include <iostream.h>
/*************GLOBALS************/
HANDLE hThread1 , hThread2;
HANDLE hEvent1 , hEvent2;
int g_nShared = 0; /* Global variable which is
going to be accessed by both Threads */
DWORD WINAPI Thread1(LPVOID lParam)
{
while(1)
{
WaitForSingleObject(hEvent2,INFINITE);
ResetEvent(hEvent2);
cout << "Thread1()::g_nShared = " << ++g_nShared << endl;
SetEvent(hEvent1);
}
return 0;
}
DWORD WINAPI Thread2(LPVOID lParam)
{
while(1)
{
WaitForSingleObject(hEvent1,INFINITE);
ResetEvent(hEvent1);
cout << "Thread2()::g_nShared = " << ++g_nShared << endl;
SetEvent(hEvent2);
}
return 0;
}
void main()
{
// The Events which synchronize the 2 threads
hEvent1 = CreateEvent(NULL,TRUE,FALSE,"Event1");
hEvent2 = CreateEvent(NULL,TRUE,FALSE,"Event2");
// Signal both the Events...so that they're up for grabs before
// the threads are born!!
SetEvent(hEvent1);
SetEvent(hEvent2);
// The Threads are Brought to Life !
hThread1 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&Thread1,NULL,0,0);
hThread2 = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)&Thread2,NULL,0,0);
while(1); // Don't let the Main Thread Die
}
2018 ~
引用心得推廣 by:
HC 分享:
整理面試題目:易春木題庫類 軟韌體工程師面試重點與考題
mropengate 分享:
易春木 - 軟體/韌體工程師面試重點與考題- C語言,資料結構,演算法,以及OS作業系統..等題目(筆試考題)
zmcx16 分享:
專業知識複習:軟韌體工程師面試- C語言與OS作業系統 常見題目(筆試考題)
內容很豐富,因為資工的東西真的很多,裡面的內容可以幫你快速複習OS以及C語言相
關。
RTZU 分享:
這個網頁整理了很多面試時會遇到的不管是筆試/面談常常會被問到的問題
基本上很多考古題和計結資結OS演算法基本概念
這邊都整理得十分清楚了
推薦要去面試之前可以靠這邊的筆記惡補一下
2019/05~
感謝諸位支持,沒有再逐一列出,邀請函已陸續發送。小編也收到來自海外華人轉職的需求(美國科技業界),出乎小編意料之外,其實軟體科技公司不分台商日商美商歐商,都是同一系統的 Computer Science and Information Engineering. 先恭喜與祝福順利轉職。
2019/08~
恭喜 chi****ing, 雖然非本科生
在準備面試的時候覺得需要這樣一個系統的整理XD 謝謝!
謝謝易春木筆記,後來有找到喜歡的職缺了,感謝你!
2019/10~
如果是windows的 kernel mode driver開發, 務必熟記 windbg的指令與細節!!
2019/11
恭喜GJ順利錄取理想職缺, 心得分享如下:
來信試想告知目前已經順利得到這家公司的工作-香港商司亞樂科技亞太有限公司台灣分公司公司
https://www.104.com.tw/job/6kgem?jobsource=pda
之前的講義幫忙許多,也有另外拿到像是 QNAP、中光電、神準口頭offer等。總之感謝您的幫忙!
另外也寫了一篇medium的blog,告訴大家如何準備面試: 我是如何面試軟體工程師
若有人需要的話可以分享,為了也是回饋給大家,謝謝
GJ 2019/11/23
2019/12 ~
為方便閱讀, 程式碼區改為預設密封, 只要點擊一下就會展開!
2020/02
恭喜Sak***順利拿到offer!!
版主您好 :
去年底已順利面試進入一線IC廠,感謝您詳細的筆記分享 !
2020/05
恭喜順利拿到offer!!
您好!謝謝你整理的考古題,幫助很大!此波面試有拿到以下公司的職缺:威達高科、安邁、致茂、聯陽等
2020/10
恭喜順利拿到offer!!
謝謝你的筆記,我已經順利拿到我想要的offer了,真的很感謝,裡面的資料結構那些講得很詳細,也剛好有被考到!
2021/06
恭喜順利拿到offer!!
我是前些日子有和您購買筆記的同學,很感謝你整理的內容,讓我在準備上有更好的方向!
我目前還剩幾個一兩個面試,但算是告一段落了,目前有錄取 synology、synopsys、MTK,都是我很理想的公司跟職缺。
不知道未來有沒有緣份在工作上遇到,再次感謝您!
2022/02
收到回應:
"謝謝版主,這幾天看了您的網站收穫良多,年後如果面試有上,會再分享心得"
加油加油!
2022/04
筆記與考題等基本功扎實, 建議可以多刷leetcode練習, 對面試當中的coding測試很有幫助!
2022/6
收到回應:“最近面試告一段落,拿到工作offer,這陣子真的不是很好面試,機會都有但感覺審核的門檻變得很高,感覺錯過去年混亂的時間點,但我運氣不錯,一直都有面試機會。安霸,一面視訊,二面現場+考試,二面一路面到總經理最後offer get。整體考試,除了安霸考的很廣很雜,其他公司的考試內容與易大整理的相似真的受益良多。”
2022/6
收到回應:“您提供的筆記很有幫助,讓我可以很快就把之前所學複習完。從今年4月開始投履歷後,結果拿到了聯發科、聯詠、群聯的SW offer,跟您分享。”
2022/7
收到回應:“非常感謝您的筆記和協助唷,後來運氣很好拿到多家很好的offer,最後選擇聯發科的軟體部門!真的很開心呢!”
2023
新增了Complexity Analysis複雜度分析, 與binary tree內容, 純軟體公司會很重視!
新增C語言基本功, 韌體工程師必備
新增心態準備
新增5題面試考題於直接列出考古題1
新增C++考題關於STL於深度討論考古題2
新增Python教學
新增Leetcode實戰討論
——————–
* IBM, 趨勢科技, 微軟, Google, Amazon, ..等軟體開發公司都要線上考試
* 緊急寄出支援快要面試的學員!
* 小編從收到各位大大的來信, 就會著手整理印刷然後到郵局郵寄, 需要一定的時間, 請大家耐心等候喔, 謝謝大家不催好棒棒!
* 新增英文履歷範例檔, 讓大家快速簡便完成自己的英文履歷!
——————–
有學員提到若本身背景不是資工系所,該如何準備,是否需要找專題實作呢?
我覺得可以雙管齊下,韌體程式設計師的內功實力在於我們的這一整套教材,含演算法/作業系統/程式實作等,是重要的基本功,像是基礎,有了這塊才能幫助日後往上堆積更多技能。
而搭配硬體的專案經驗也是非常加分的部分,透過基本硬體經驗可以幫助在面試時與主管產生一種特別的共鳴,有點像『原來你也是這樣過來的』的感覺。
至於專案的選擇可以到天龍挑書本有附小電路板的,主題有8051單晶片設計or類似arduino的C語言實作,可以現場挑比較知道自己要什麼唷。共勉之~
---
malloc() 回應學員的說明:
不論有沒有加上強制轉換碼, malloc() 都是回傳被安排的記憶體位址 對, 它就是強制轉換型態, 依照底下的定義可以發現, 預設的回傳指標是 void* , 但是根據每次需要的型別不同就必須要轉換型別!
原始定義 : The C library function void *malloc(size_t size) allocates the requested memory and returns a pointer to it.
void *malloc(size_t size)
參數: size − This is the size of the memory block, in bytes.
回傳值: This function returns a pointer to the allocated memory, or NULL if the request fails.
Q: Link-list範例第32-33行的過程,多建立一個結構指標是否可以省略,直接使用list結構指標來做即可?
LL_NODE *p = list;
while( p->next != NULL){ p = p->next; } // 取得最後一個節點
p->next = node;
A: 這裡會再新建一個p指標, 是因為要保留 list 作為 link-list的Head指標, 所以不希望list移動, 所以也有人把 list 取名為 Head, 就更易閱讀了, 表示這個指標就是這一串列的頭, 不會更改
Q: 請問第12題設置a 的 bit3 或是清除a 的 bit3
#define BIT3(0x1<<3) /*二進未表示:00001000*/
這樣是否是會改寫到第4個bit??
A: 你說的沒錯, bit3即是第4個bit
2022/10 更新:
回答學員來信討論的問題, 收到回應 "非常感謝,看了你解說,讓我茅塞頓開
" 問題(1) 關於link-list章節部分, 為什麼是回傳list而非tmp ?
A:畫了以下三個時間點的指標狀態圖, 需要先了解各指標的用途:
- list 用來回傳整條串列, 所以會固定不動指向第一個node
- tmp 用來逐步移動, 將新的節點加入串列
- newNode用來指向最新的節點
所以為什麼要傳list而非tmp, 因為只有加入第二節點時候list與tmp指向一樣位置
之後就不同了
問題(2) 為什麼list 指向的位址沒有被更新呢?
從代碼看起來, 你做空間配置的malloc是在 CreatNode(), 所以要回傳list這個指標才OK,
因為此處非call-by-address, 如果你要做到call-by-address的更新指標方式, 則必須在main就已經配置空間,
可以參考
筆記的這張圖(程式碼內的變數與function pointer 在記憶體中的配置情況), 由main()內做malloc()動態分配記憶體, 如此一來 main()才知道變數p, 如果你是在別的函式作malloc得到的變數p, 這樣main()不會知道的, 除非你把別的p回傳assign給main()裡面的p
2023/05 補充:
趨勢科技有線上測驗可以選各種語言線上考, 大家可以多練習寫 leetcode 程式碼, 邊寫邊改, 有error再改! 自己練習時可以計時倒數感受看看!
---
考考大家, 假設今天面試過程, 主管突然請您寫出 Linked list 基本功能:
1. 資料結構宣告
2. 空間配置
3. 建立新node於list後面
由於是當場考試, 不可能有機會再上網查, 只能憑印象寫出來, 趕快現在練習試試看吧!
---
考考大家, 基本功處理字串的函式夠熟嗎?
e.g. C語言的 sprintf() 怎麼使用呢
2024/12 更新:
補充: 怎麼透過一行指令做到字串的搜尋與取代 ?
可以使用 linux s//g
(1).在vi編輯器: 檔頭到檔尾用str2取代str1
:1,$s/str1/str2/g
(2). 指令輸入:
sed "s/str1/str2/g" -i FILENAME
補充:
static function 是什麼意思? (常被問到, 請留意喔!)
靜態函數僅在同一文件中可見, 在編譯過程中如果編譯器發現function前有加static關鍵字, 經過編譯後會被隱藏在該檔案的 obj file, 所以之後 linker 找尋 symbol 時, 會忽略這個funciton, 所以別的檔案也就看不到!