國立中正大學 資訊工程學系

# RE 韌體工程師是不是都考C語言?

2019年6月29日 19:23
前情提要
先簡短說一下原 Po 因為不太清楚原 Po 除了語言之外還會什麼 先假定暫時只會 C 語言 (其他如硬體沒碰過/ OS觀念沒有...etc) 台大理工非本科碩要找系統廠基本上是有投有上 像華碩仁寶鴻海正文系維...等等公司 但一線 design house 或是需要即戰力的小公司可能要充實一下和有點運氣 只是投系統廠的話 學歷基本上佔優勢 70% 以上 所以先別怕自己年紀大 你反而要擔心的是錢景不好XD 打得有點沒頭沒尾 需要補充的就勞煩廣大的卡友幫忙補充了 # 那面試可能問些什麼呢 ? 撇開智力測驗/性向測驗/期望薪水/為啥來應徵等等問題 專業性的問題大致會有幾種考法: 1. 手寫 可能選擇或申論 像是要你簡單實作 Linked-list 或是給你一段程式碼 希望你找出可能潛在的問題 最刺激的就是白板題, 有時候在考官面前要手寫出來並說明真的會讓人很緊張 2. 口頭 通常是比較是考觀念 你要解釋某些觀念或是專項的知識 或是講述你的專案經驗 不過有時候會問碩論的內容 還是要稍微看一下 3. 上機考 我是沒遇過, 不過聽我朋友說有外商/新創除了skype面談 還會當場要你 online coding, 順便看你解題思路 大致就以上三種考法 # 當務之急 先假設原 Po 已經大致會基本的 c/c++ 語法 那麼那些重點是國內系統廠可能會考的重點呢? 以下是我遇過的問題, 有些可能不是 junior 會遇到的 答案大部分書上網路上都有 但是準備充足點總是好的 你可以試著看看把它當作 check list 數值系統: 數值範圍(char/int/float/double 的上下限, 數值比較) 有號無號(二補數概念, 常見陷阱: unsigned wraparound) IEEE754(單精度浮點的上下限, 表示法, 浮點計算, 常見陷阱: floating truncated, floating comparing) promotion(各型數值的 promotion, 常見陷阱: implicit promotion) 數值系統的效能(從軟硬體分析效能 e.g. 為何乘除法運算比加減法慢) 簡易數值計算(實作積分求面積, 用加法取代乘法, 判斷奇數偶數, 求GCD/LCM ...etc) 型別: 型別轉換(常見陷阱: unsigned and signed addition) 型別與記憶體(sizeof 問題) primitive 型別可能會合併數值系統問題一起考 derived 型別就會與 pointer 等概念一起考 struct, union, enum, typedef 務必熟練 刁鑽一點的會考void type 其他可能會考型別的 portable 如使用 uint32_t, int16_t 等等 operator 常考 bitwise operation, prefix/suffix increment/decrement, side effect, 預處理器 #if, #elif, #else, #ifdef, #ifndef, #pragma, #include, #define, #, ## 等等... 其中最常考 #define macro 各種技巧及陷阱 const, static, extern 常考相關概念有 duration time, linkage scope, design abstraction...等等 pointer 必考中的必考, 取值, 取址的概念要牢記 盡量各種陷阱誤區都要了解透徹 pointer to pointer, function pointer, pointer points to const, an array of pointer, pointer to an array 是常考的題型 有時候也考複雜宣告的判讀如經典的 signal function pointer 宣告, 要特別注意符號的優先權, 稍難一點的會考 void pointer 相關如與 malloc, memset, calloc 衍伸的問題, 如double free, dangling pointer, memory leaks...也可能會考 volatile/inline/register/auto/restrict 少考 但建議至少知道原理 不過實務上 volatile/inline 很常見就是了 c99/c11 specificed keywords macro 少考 但常見就 alignof/static_assert/atomic/complex/generic了解一下 Gnu 一些attribute也知道更好 loop/conditional loop 基本上是不會單獨出來考, 都是當你基本功本來就該會的 真要考的話是考一些使用上的小陷阱 至多考到 goto Libc 其實蠻少考的, 大概就會問Libc安全性如strcpy, memcpy 及是否thread safe等等 會用懂原理比較重要 可能會考到的難題就 setjump/longjump 要不然就是搭配系統呼叫來考之類的概念 對了 基本上不會考 printf這種(實際上也沒拿來真的用) 頂多考 vsprintf, error msg threading and synchronzition 通常是問有沒有寫過或用那一種library, 分析各種鎖的優缺點及使用時機 判斷會不會造成 deadlock, starvation... 問一下process, thread的區別 什麼是thread pool 說明linux的同步機制等等... 語言概念 大概就分辨argument,parameter 什麼是call by value, call by reference, 什麼是undefined behavior, sequence points..etc 刁鑽一點的就要你大概c語言轉譯asm吧 其他 可能當作加分題或是只有某些專項可能會問 基本 linux 應該要會使用會下 cmd CPU/FPGA 平台 (通常只是問使用過那些平台) 通訊協議(TCP/IP, RFID, HCI, ATT, BUS protocol: 常考I2C, SPI, CAN) 多人協作(git, perforce) 平行/異質計算(Intel mmx/sse intrinsics, SIMD, openMP, openMPI 的概念與操作) toolchain and IDE (GNU toolchain/Keil/visual studio..etc) 基本焊接/示波器三相電錶使用/基本電學 其他專項的知識(如影像處理/數值分析/濾波..etc) algo, data strcture 必考大概就是 linked-list , binary search tree, stack, queue 的實作 這些要你現場手寫也不難 其他常考就蠻多種了 基本上學校教過的也有可能出現 少部分外商會多考一些較難的資結算法(如 bit vector, b+ tree, skip-list, bloom filiter, K-D tree, A star path searching, KMP, huffman encoding 及經典的NP問題) 至於要不要刷leetcode 我覺得非純軟非算法 刷easy就好 這不是搞fw要鑽研的 至於硬體與系統部分 真的就太多要知道了 打也打不完 建議買本書有機會就K吧 走韌體遲早要知道的 必考就可能是 memory, cache, synchronize, interrupt, timer 等方面的吧
128
留言 25
文章資訊
Logo
每天有 6 則貼文
共 25 則留言
南臺科技大學 電子工程系
推一個,雖然我看不懂還是跪了
國立清華大學
推 真的大部分都考這些
國立高雄第一科技大學 資訊管理學系
推 想知道 資管系的學生 可是都在走 嵌入式 玩過 nrf52 跟 stm32 這樣跟資工比 是不是比較劣勢?
國立清華大學 資訊工程學系
STL??
原 PO - 國立中正大學 資訊工程學系
B4 我覺得哪個科系沒差 B5 你說的對 用詞不佳有誤導之嫌 C 語言應該改成 libc
國立臺北科技大學 機電整合研究所
國立臺北商業大學 資訊管理系
這邊是神的世界
國立臺灣科技大學 機械工程學研究所
推目前也在自學c++ 沒人帶有時都不知道那些是重點....
國立交通大學
推 已收藏
國立臺灣大學
b0 感謝大神指點 目前已經開始刷題 用C++刷發現STL的東西 還真的要花點時間去研究怎麼用 目前要把簡單的刷一刷感覺至少也要花一兩個月 還是有點猶疑不曉得該不該把那麼多時間花在刷題學STL... 還是直接針對你講的那些東西去加強
原 PO - 國立中正大學 資訊工程學系
B11 上班偷閒回一下 我覺得以迫切工作需求來看 走韌體真的可以不用c++ C++每個改版的幅度之大 C++11/14/17/20都新增非常多的features 而且oop的概念又深又多 光一個template、memory model、design pattern 、STL都能出一本書了 你可以把c和c++分開成兩種語言來看 Leetcode刷easy基本上用c來硬幹是沒什麼問題的 我再強調一次 fw工作沒這麼看重刷題 沒時間刷也不會怎樣 行有餘力再刷就好 你這樣是本末倒置 Fw工作未必會用到多高深的ds algo FW工作很多是要和硬體打交道 你對硬體與系統的了解多深造決定你面試的成功 平常幹的可能是一堆trade off 即便最"軟"的搞kernel,driver 也要非常熟悉硬體 如果語言部分熟了 就可以找個cpu平台(你爽fpga也行)來實現最基本的跑馬燈 或是對系統有興趣 找本unix,linux system programming books看
國立臺灣大學
b12 好的 感謝大大 之前也是猶疑很久要不要學C++刷題 最近看完一本C++ 才發現很多韌體工程師面試刷題好像都還好 反而都是在問你說的那些比較多 所以我如果不刷題 就把那些資料結構重要的 自己用C實際去把它刻出來 若出白板題 應該不會遇到太大問題?
原 PO - 國立中正大學 資訊工程學系
B13 不用擔心太多 直接現實一點講 來面試你的 leader 非常忙 白板題要花他們寶貴的時間 白板題不會誇張到要你一字不漏甚至去一定compile過 甚至寫個 pseudo code都沒差 臨場緊張他們也會引導你 除非是他們有明確講一定要寫真的 不然白板題主要是考你的思維解題概念 如果是出考卷的手寫題 就盡量以寫真的code為主 然後你說後面那部分 那是基本功必須的 即便是本科系都是要經過這個歷程 會刷題跟會真實解決問題完全是兩碼子事 刷題只是訓練你的抽象思維 跟你未來遇到真實工程世界差多了 很多人刷題到最後根本是背題目 除非你是要比競賽或是準備外商 刷題才真的有幫助
國立臺灣大學
B14 了解 謝謝前輩開導 目前還在努力中 雖然時間不多但還是希望盡全力拼一波 就算沒有轉領域成功至少也努力嘗試過了! 總之感謝您花那麼多時間告訴我這些資訊
國立臺灣大學
b0 大大想再請問一下 資料結構圖形Graph這個章節 是不是比較沒那麼重要 不曉得可不可以直接跳過這章 去看比較常考的tree、sorting、hash那些 還是至少BFS跟DFS看一下比較好
原 PO - 國立中正大學 資訊工程學系
B16 其實圖論很重要 我建議還是要會 不過一般韌體少考 當然優先hashing tree sort會好一點 這三個更常考 Dfs bfs 也可以先準備
國立臺灣大學
b17 好的 感謝你的建議!
南臺科技大學 電子工程系
B17 圖論是不是先用c踏實跑一遍比較好? 還是直接用stl
原 PO - 國立中正大學 資訊工程學系
B19 我建議基本的還是要自己手刻幾次當練習 而不是只針對某些面試較少考的章節 再者, 你怎麼能保證未來一定用不到呢 雖然用 library 很方便 但你很有可能遇到有些環境根本不允許你用 library
國立臺灣大學
感謝 b0 大大的幫助 那時給了我很好的方向 對我幫助很大 最近找工作一二線豬屎屋offer都有收到 之後找完我也來寫一篇非本科轉職心得 把愛傳下去XD
國立臺灣科技大學
B21 等你發文 最近也想轉職 想多參考一些人的學習經驗😂
國立交通大學
B21有發心得文了嗎QQ 很想參考你的準備方向
國立臺灣大學
b22 B23 我想說做幾個月 如果上手覺得沒問題的話就來發個 最近覺得做得還不錯 應該會找時間寫一篇 到時再來更新
國立交通大學
B24 感恩 等你