2025美國New Grad 嵌入式/韌體工程師分享

南加州大學
在這幾年對NG不phonre screen友善的市場裡 最近終於收到Offer Letter了... 想說趁on board前分享在美國2023~2025找 Embedded Software Engineer/ Firmware Engineer (含 Intern)的心得 希望可以幫助到台灣or美國想找軟韌工程師的新鮮人們, 祝大家上岸!!
#背景:
中央工院&電機(雙主修) -> University of Southern California (USC) Computer Engineering
光寶科(TW)實習兩個月
______________________________________________________________________________________________
#面試數量和結果:
------------------------Intern 9 (忘記投多少了)------------------------
-Interview:
-Nvidia*2
-Tesla*2 (其中一個有先OA)
-Microsoft(TW)*1
-MTK(TW)*1
-DELL(TW)*1
-光寶科(TW)*1--- get
-達發科(TW)*1--- get
------------------New Grad 23 ( 2024/10~2025/10不含Linkedin Easy apply 大約600)------------------
-Online Assessment: 7
-Amazon*2
-Cepton*1
-Cisco*2 (他們的NG感覺有投就會給OA)
-Green Hills*1
-Mujin Corp*1
-Interview: 18
-First Round:
-Tesla*2 (1個只有hr, 1個technical)
-Capgemini*1
-Qualcomm*2 (其中一個是hr就被刷掉 因為EAD上工時間填太晚)
-Universal Electronics*1 (臨時約隔天還要onsite 沒空就拒絕了)
-Arm*1
-Microsoft*1
-Apple*3
-Rivian and Volkswagen*1 (選了Qualcomm 就沒繼續了)
-Second Round:
-Matic*1
-Tesla*1
-Panel:
-Apple (1+4 rounds)
-Apple (1+5 rounds)
-Qualcomm*2 (1+4 rounds) ----get
實習Offer: 光寶科
New Grad Offer: Qualcomm (Embedded Software Engineer)
全部都是海投拿到的... 內推的完全都沒有消息
面試到現在9.9成coding都是考C, 還有OS的觀念少部分問了一點Computer Architecture
Apple的面試每個team都不一樣網路上也沒什麼面經可以看而且Apple好像Panel只要有一關feedback是negative就沒了... coding寫對後還要連follow-up答對才可以拿到positive的感覺
______________________________________________________________________________________________
記得履歷越早投越好不要等到說履歷改到完美的時候, 履歷沒有完美的時候, 很多時候你履歷一晚投, 別人可能已經到第2次 phone screen 或 panel. 就算你到了panel 如果 headcount只有1個 還是會先被前面的人搶走!
#履歷:
為了能讓HR區分embedded software engineer和一般的SDE, 我一開始是先放兩句話的Summary先寫說自己是embedded software engineer with甚麼甚麼技能
接著為了不要浪費履歷空間, 工作經驗或project的每個bullet point盡量寫滿一行把你每個經歷最精華的部分用1~3個 bullet point 然後用"STAR原則"來寫故事
有時候大家會習慣把project的細節講出來而且希望越細越好但我認為大部分第一關都是HR (過了ATS之後). HR 不見得知道這些技術細節, 他們比較想知道你 "大概" 用了甚麼技術, 解決甚麼問題, 達成了甚麼目的(最好用數字呈現成果).這樣印象會比純說技術細節的還深刻.
之後等拿到面試再和面試官聊project技術細節就好
另外, 每次自己看履歷都覺得沒問題, 但給別人看又會發現一堆 bug
最好多把履歷拿給別人看, 背景不相同也可以, 我會覺得讓越多人一眼就知道你的project大概在幹嘛、達到甚麼成果代表你的履歷是有記憶點的! HR就會知道這個人是不是他們需要的
如果別人看完你的履歷還是不清楚你的強項或是你的project在做甚麼那就代表你的履歷沒甚麼記憶點就會比較不好!
______________________________________________________________________________________________
#面試準備
- C 語言
- Leetcode
- Data structure
- OS
- Multithread
- Computer Architecture
- Peripheral
C 語言:
對C語言要很熟真的要熟到不行!!!
每個type的大小, Macro, Struct (通常會一起問memory alignment), pointer, wild pointer, dangling pointer, double pointer, Pointer Arithmetics, casting, volatile, static (declare in variable and function各自代表甚麼), C和C++中 static差別 (這個apple面試被問到), extern, sizeof(), strcmp(), strcpy(), strlen() 這些東西可以講太多太多,就連 jserv大神都有一系列C語言講座可以說了.
(我還記得jserv說不要把 * 叫成星星要叫做 dereference operator , 我以前還真的都說星星, 好險知道後也比較好和面試官解釋我的code 不然講star感覺很糗 哈哈哈)
希望大家要走軟韌能把C學得越透澈越好
被考過手寫一個memcpy 然後如果有duplicate的話要怎麼處理
Leetcode:
相對要找SDE的人我刷的題目其實不算多Embedded Software Engineer/Firmware Engineer 要刷的題目基本就是Bit Manipulation, Linkedlist, String, Array, 有多的時間刷一下BST聽別人會考但我目前是沒有被考到過
記得所有題目要考慮edge cases!
1. Linkedlist - 常考到不行, 如果screening沒考到 panel某一關8成也會考到甚至不只一次
除了基本的push, add, delete, pop, print, 我還被考過:
-reverse 這一題已經被問過n次了 (有人面試被要求只能用recursive解 可以稍微看一下)
被問過如何reverse doubly-linkedlist沒要求實作
-reverse a sublist of a linked list
-merge two linked lists
-merge k linkedlist (O(n) optimize -> O(klog(n)) )
-swap node in pairs
-rotate linked list
-detect cycle
-Palindrome Linked List
-Odd Even Linked List
-Middle of the linked list
解題的時候瞭解甚麼時候用dummy node 甚麼時候只需要pointer, 不要背leetcode解答
因為到時候面試官問你為什麼的時候會答不出來
2. Bit Manipulation - 也是常考的題目底層語言常常要用到bit的轉換 基本要會的set, clear, togger, mask, shift, AND, OR, XOR 還有被考到過
-reverse bit
-bit swap
-bit count (有人被問過提供兩種解法)
-print_32bit
-把偶數位的bit和奇數位的bit交換
-implement 2's complement
-implement sum without using +, -,*, / operator
最後把GeeksforGeeks bit manipulation的easy和medium的題目看過一次就行 hard的題目太tricky了
3. String - 基本上學會two pointer, hashmap, sliding window, 大小寫的轉換, 然後會使用strlen(), strcpy(),strcmp()剩下就是看面試官自己發明甚麼題目
-給一個string output重複的字元出現幾次
ex: string="abbbccddd" return " b:3 c:2 d:3" (format隨便但 b要3次 c要2次 d要3次就對了)
-給兩個string 然後 string1裡面remove所有string2出現過的character return string1
ex: string1 = "this is a pencil", string2 = "asc" -> return "thi i penil"
-atoi, itoa(有人被考到過)
4. Array - 我被考到的不多
-寫一個func create二維矩陣然後回傳
-matmul
-二維matrix flatten成一維 (column-major 或 row-major 都要會)
Data structure:
Stack, Queue, Circular Buffer 這些資料結構在甚麼問題下適合使用
我被叫過用linkedlist 實作上面三個data structre, stack還是搭配 leetcode 20 一起考的
也被問過用stack implement queue
queue和 circular queue通常會牽涉到producer-consumer的問題
理解一下通常甚麼情況是producer-consumer問題還有在multithread的環境要注意甚麼
還要考慮mutex
Graph 幾乎沒有被考到過 (除了有一次Apple HR找我去面SDE, screening考 topology sorting, 完全不會還硬用C寫 沒有像python有 dict 或是 C++的STL 直接掛掉...)
Tree完全沒有被問過, 但網路上有人被問到BST 所以還是學了一點基本的
OS:
- Process和thread的差別
- 甚麼是atomic
- 甚麼是kernel
- embedded system booting process
- context switch (不要只說換個thread或是process就好, 深入一點把hardware怎麼處裡也了解一
下是甚麼register被 push到甚麼地方甚麼時候pop出來 是誰叫出 context switch, 另外在RTOS是PendSV在處理context switch)
- ISR (流程是甚麼, 不建議裡面放甚麼, 用途是甚麼, 可不可以reentrant)
- Interrupt (真的很重要!! 也是常考題 Interrupt是甚麼 流程是甚麼 越細越好)
- Interrupt Latency (是甚麼, 如何decrease)
- Mutex, Semaphore, Spinlock 差別, 甚麼時候適合用哪一個 (這一定要搞懂每次被問每次都會
followup問它們的細節)
- Ciritcal Section (如果在ISR也有share variable會被改到怎麼辦)
- Inter-Thread-Communication (有甚麼方法可以達成, 給一個scenario 你要用哪種方法會比較好)
- Inter-Process-Communication
- Priority Inversion 是甚麼? 怎麼解決?
- Memory layout (RAM裡面stack, heap, .data, .bss 在幹嘛哪裡存甚麼variable)
- Deadlock (哪四種條件, 要如何避免)
- 這個function 是否reentrant或是thread safe
- Strvation 怎麼解決
- general purpose OS vs. RTOS
- RTOS (scheduler, preemptive or cooperative, 是誰做context switch, systick)
- 甚麼時候適合RTOS 甚麼時候只需要bare-metal就好
- Segmentation Fault (甚麼時候會造成, 要怎麼debug)
Multithread:
我發現大廠越來越常考multithread的coding的題目所以最好的話自己用手寫一個multithread的程式了解pthread_create 這些API和 parameter要放甚麼 join 要怎麼寫, mutex怎麼寫還有lock, unlock
-用兩個thread print出1~50 (thread1 print 奇數, thread2 print 偶數) worker function可以是一個
或是兩個
可以請Chatgpt 想幾個簡單的例子來實作
- 只有一個core的時候還需不需要multithread
- 只有一個thread需不需要Mutex
Computer Architecture:
這方面我被問到的不多
比較重要的就是甚麼是Endian
-寫 Endian Detection的function
-Endian Swap (常考題我沒被問到過)
-What is PC
-Ram 和 Rom 差別
-What is 5 stage pipeline
-每個stage在幹嘛
-甚麼是st, lw
-lw怎麼在5 stage pipline實現 講一次過程
-3 種 data hazard
-CISC vs. RISC
我沒被問過Cache但還是理解一下3種cache mapping, 3種cache miss, Write Back/ Write Through
MMU, TLB, Virtual Memory 也理解一下
Peripheral:
如果履歷上有出現 I2C, SPI, UART的話, 那就要有被問到的心裡打算
-各自運作原理
-哪個傳輸速度較快
-各自的pros and cons
-甚麼時候選擇用哪個protocol
-I2C arbitration
-I2C Clock stretching
-如果某個protocol不work你會怎麼debug
______________________________________________________________________________________________
#網路資源
1. [A ‘C’ Test: The 0x10 Best Questions for Would-be Embedded Programmers]0x10應該對在準備的人不陌生 真的很值得看熟, 我也真的有被考到裡面的題目還不只一次
2. [[北美] Firmware Embedded 大量面試心得]3. [Crushing the Firmware & Embedded Systems Interview]4. [從面試官角度來看程式面試:兩大能力與七個階段]面試過程最重要的是看你怎麼思考還有怎麼和面試官溝通, 能寫出正確答案是好事但你要怎麼和面試官說你的思路才是重點!
不然問了follow-up就會掛掉!
5. [Coding interview 怎麼跟面試官全程保持互動?]這篇裡面有些句子真的滿好用的如果coding到一半不知道怎麼說還滿好用的
6. [亞馬遜面試官親自分享面試技巧!高薪工程師如何拿到offer?|Kelly Tsai]實際演練可以參考Kelly的這個影片雖然題目是Graph, 但重點是她怎麼和面試官講述她的想法, 還有另一個影片是和Terry的也可以參考一下!
7. [一畝三分地]大廠OA面試題庫, 哪個 team 面試 Leetcode 哪一題都有很多人分享, 雖然沒有命中過
但還是裡面很多資訊, 例如:幫忙內推, 各公司的 hiring process, 內部文化
就算找到工作後幫助還是很大
但註冊帳號後不能直接看文章, 每天要簽到回答問題累積大米, 到數量才可以看文章
可以先開始慢慢養帳號
8. [半路工程師在矽谷]真的有很多人願意幫忙內推 (在這邊也感謝願意幫我內推的前輩們!!)
雖然我內推的都沒拿到面試 哈哈哈
______________________________________________________________________________________________
#心得分享
我還記得第一次拿到美國的面試又緊張又興奮, 故意把面試時間拉到兩個禮拜後, 想說認真準備,
結果下場真的是慘不忍睹, coding練習不充分, 回答的也亂七八糟, 英文爛到不會解釋自己的code
但隨著面試次數變多, 每次復盤把每次面試遇到的問題都記錄下來避免下次不要犯錯, 平常還要準備一個list把所有可能會被問到的問題還有答案記下來然後還要自己動口講一次, 光作筆記沒有練是沒有用的!!!! 一定要動手 + 動嘴練!!
面試Panel前一天正常準備就好, 太過度準備或太緊張導致隔天精神不好還要面臨4~5小時的精神轟炸真的會扛不住...
如果panel 要超過4輪 (對就是 Apple) 可以問問看recrutier可不可以分兩天, 我試過它們會幫你分兩天安排面試
另外認識一起找工作的朋友也很重要, 那種一起奮鬥的感覺會比孤軍奮戰還要有動力的多, 就像準備學測時晚自習的那種氛圍!! 也算是一種國外的心靈寄託 哈哈哈
這方面印度人是真的猛, 我認識的印度老哥們都是有任何資源就互相分享, 不管是學業上的考古題還是面試工作方面, 面過甚麼題目都是毫不吝嗇的分享出來.
最後祝大家可以順利上岸!!!


