2024/12/25

入園須知: 易春木軟體面試筆記

筆記轉型成部分不對外開放。
閱讀請繳交3,280元,您就會收到授權一年的邀請函Email,以及紙本重點筆記郵寄給您!

匯款帳號請來信詢問, 站長信箱:eeepage@gmail.com
匯款後,請告知您的帳號後三碼與您Gmail作為帳號,易春木會寄出權限開啟之邀請函,三個工作日內可開啟權限。
(或透過蝦皮賣場:易春木《軟韌體工程師面試重點與考題》筆記)
軟體/韌體工程師《面試重點與觀念複習》 
* 使用C, C++, C#, JAVA, Python 透過筆試題目建立資工腦 
* 資料結構, 演算法, 作業系統, 程式語言, 計組硬體, 網路 

目前已陸續遷移移至 http://eepsw.blogspot.com/ 
* 不定期陸續發布新文章, 增加軟體方面的knowledge 
* 近期規劃: 線上閱讀版將陸續新增 AI 內容(deep learning / model training / AI inference ..etc) 


--------- 
謝謝鄉民PTT發文推薦, 小編戰戰兢兢持續維護品質 持續加入更多程式設計的面試重點!
任何問題或考題都歡迎討論研究, 祝大家求職順利!!

2017~陸續更新:

整理得很棒喔,獲益良多! 感謝分享及整理!!!

感謝重點整理, 拿你的東西複習很好用!

感謝版主,獲益良多!! 尤其是bit operation的部分!

恭喜Daniel 錄取Garmin, 也十分感謝您的分享喔!
--------------------------- 
您好,
非常感謝您的網站讓我複習OS跟演算法,並且順利找到自己喜歡的工作。 這裡是我的工作面談一系列的心得文,供您參考! 

------------------------------
恭喜Cinnating好多間公司Offer Get, 也十分感謝您的分享推薦喔!!!
工作面試心得(QNAP、緯穎、正文、 工研院、啟碁、全景、智易、CHTTL) 

------ 
 * 增加更多作業系統:多程序與多執行緒的觀念與實作控制觀念, 這部份真的很常問, 測試對於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 

以下舉例兩個thread之間的作法 (from Neeraj Vaidya): 
可以手動修改程式碼安插這些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, 所以別的檔案也就看不到!



沒有留言:

張貼留言