--- title: 面試考古題+ 面試經驗 description: 紀錄你送頭的過程,看到ㄉ考古題也可以貼上 --- # 面試考古題 ###### tags: `Interview` --- # George ## 盟立自動化 (10/19) * 基本智商測驗 45min * 走迷宮 * 數字規律 * 圖形反轉 * 三角形數量 * 自我介紹 * 問履歷內容 * 問期望薪水 * 結論 : 差評 ## MTK (10/26) * 英文好不好 * 團隊合作經驗(會不會有啦啦隊) * open()和fopen()差別 * 專題問題 * 產學合作負責部分 * system call流程 * 如何切換 kernel mode 和 user mode * 可否將array宣告無限大 -> stack overflow會發生甚麼事 -> 如何知道stack大小 * K8s 證照考試模式,考甚麼 * it幫幫忙有甚麼發文限制 * socket寫甚麼,寫哪一種socket * 有寫過multi-thread經驗嗎 * 當 TA 學到甚麼 * 論文規劃 * 有kernel programming的經驗ㄇ * 為甚麼想來聯發科 * 嵌入式系統開發經驗 * ( 把Raspberry Pi開機流程搞懂 ) * VM & Container 差別 * 有沒有用過Docker以外的container run time (嘴containerD, rkt) * cross compiler的經驗 * 一般run的linux檔案跟 debug用的linux檔案最大差異(權限, dubug info) ## MTK (10/28) * 實習學到甚麼 * process和thread差別 * interrupt 流程 * system call 流程 * u-boot啟動流程 * memory map再做甚麼 * 團隊合作的經驗 * 有沒有團隊衝突的經驗 * 萬一負責的project到deadline無法完成,該如何處理 * 如何分派工作 * 為甚麼要用function pointer,好處是甚麼? (沒答出來啦幹) * 對wifi的認識有多少 * 有multi-thread的開發經驗嗎 * 有寫過kernel driver嗎 * driver & firmware 差異 * TCP & UDP 差異 * copy_to_user & copy_from_user 是甚麼 (跟driver有關,但我不會嘻嘻) --- # Handsome Yen ## Synology (10/26) * 白板 : 兩個sort過的linked list merge成一條 * 白板 : In-Order 不要用 recursive * 白板 : int 1234 reverse (4321) * Process vs thread * spin lock vs mutex vs semaphore * 解釋為什麼 1:3 分配 virtual memory (kernel : user) * [U-boot 怎麼加速?](https://blog.csdn.net/liushuimpc/article/details/51830444) * virtual memeory ? * Copy-On-Write 怎麼做的? * 基本原理是將page設為`read only`,一旦父子進程要改變page內容,就會觸發page fault,將觸發exception的page複製一份(其餘頁還是同父進程共享)。 * 你遇過印象深刻的bug? ## MTK * [封包如何傳遞](https://silverwind1982.pixnet.net/blog/post/356261939) ## Nvidia (11/26) ### 書記官記起來 * 面試官人數:1 * 團體面試:6 * 每個人題目不同 * 考2個小時(中英作答皆可) * Following code initializes all elements of the array "arr" to zero. char c; char str[128]; for (c = 0; c < 128; c++) str[c] = 0; What is wrong with this code? How to fix it with no further variable declarations (without code size increase)? [Ans] char c 的數值範圍為 -128 ~ 127, 在迴圈中不會超過128,導致無窮迴圈 修改方法為宣告 unsigned char c * What is an MMU and what does it do 記憶體管理單元,有時稱作分頁記憶體管理單元。它是一種負責處理中央處理器的記憶體存取請求的電腦硬體。它的功能包括虛擬位址到實體位址的轉換、記憶體保護、中央處理器高速緩衝記憶體的控制,在較為簡單的電腦架構中,負責匯流排的仲裁以及儲存體切換。 維基百科 * ---at is Interrupt Service Routine (ISR)? Can we pass any parameter and return a value from the ISR? Why? Interrupt Service Routine 這跟 Interrupt handler 有什麼差別 ISR不能有返回值(不知道給誰) ((喔是這樣喔? 晚來系安捏 ISR不能傳遞參數(不知道誰呼叫) ```C= * implement the constant time memcmp function // 這明明就用loop比對每一byte 不懂為何是constant int cst_memcmp(const void *m1, const void *m2, size_t n) { const uint8_t *pm1 = (const uint8_t *) m1 + n; const uint8_t *pm2 = (const uint8_t *) m2 + n; int res = 0; if (n) { do { int diff = *--pm1 - *--pm2; res = (res & ((X & ~diff) >> 8)) | Y; } while (pm1 != m1); } return ((res - 1) >> 8) + (res >> 8) + 1; } ``` ``` * What is a cache line? When should we do cache flush? When should we do cache invalid cache line 是 cpu cache 中的最小快取單位。 主流的 CPU Cache 的 Cache Line 大小多為 64 Bytes \* 有些例外,如 ARMv8-A 為基礎的 Cavium ThunderX 的 cache line 為 128 Bytes 假設有一個 512 bytes 的一級快取,那按照 64 Bytes 的快取單位大小來算,這個一级快取所能存放的快取個數就是 512/64 = 8 個。 ``` ``` * what is wrong in the following MIN MACRO definition? Is there any better way to define MIN MACRO? #define MIN(X,Y) ((X) < (Y) ? (X) : (Y)) [Ans] ``` ``` * 找錯並修改 char * SaveString(const char * s) { /* allocate memory for a copy of the input string s */ char * p = malloc(strlen(s)); while (*s) { *p++ = *s++; } return p; } ``` ``` what is the size of the following structure in (x86-64) machine (in Linux OS)? typedef struct s { unsigned char a; long long b; unsigned int c; } s_t; Please re-define this structure if you think you can make it better. (like : for better memory usage ``` ``` 4. A piece of hardware has a one byte status register. The lsb of the register is a 'busy' bit. The driver must wait for the bit to clear before writing any registers in the device. Consider the following code: char *p = remap(MEM_CACHED|MEM_PCI, REG_BASE_ADDRESS, REG_SIZE); while (*p & 1); /* write to hardware */ The code does not work. Often the driver hangs waiting for the hardware to be "ready". Logic analyzer shows that the hardware bit does clear in these cases. What is wrong with this code? REG_BASE_ADDRESS and REG_SIZE values were confirmed to be correct. [Ans] p 要宣告為 volatile ? 疑 volatile不是跟 COMPILER最佳化U關ㄉㄇ volatile是讓compile每次存取變數都要跟memory取值,而不是從register,如果丟register就會有raca condition,這樣就 busy bit 就沒作用了 每個thread都有各自的register,大家要一致就要看memory,然後remap是三小 ``` ``` What is the output of the following code (Assuming running it on a system with a single CPU)? #include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { int p = fork(); if (p < 0) { // fork failed; exit fprintf(stderr, "fork failed\n"); exit(1); } else if (p == 0) { printf("hello, I am child\n"); } else { printf("hello, I am parent\n"); } return 0; } ``` ``` 7. What issue would be caused in the following code? int my_arr[] = { 21, 22, 23, 24, 25, 26 }; #define MY_ARRAY_SIZE (sizeof(my_arr)/sizeof(my_arr[0])) int f(void) { int d = -1; int x = 0; if (d <= MY_ARRAY_SIZE) { x = my_arr[d + 2]; } Return x; } [Ans] ``` ``` Please implement the constant time function to get the absolute value (i.e. no branch required). int const_abs(int x) { /* const_abs(-4), return 4 * const_abs(5), return 5 */ } [Ans] ``` ![](https://i.imgur.com/LcPjsbj[].jpg) # 筱茵 ## 廣達 * 應徵職缺: linux driver * 需要多益成績,沒有的話要考試,隔太久也要重考 * 線上面試:只有主管面談/實體面談:程式題+主管面談 * 自我介紹 * 問投影片的東西 * 碩論細節 * linux kernel有沒有碰過 ## 瑞昱 * 分為RD和FAE * RD: 研發(演算法工程師之類的) * FAE: 使用套件或framework做專案 ### 軟體設計(SRE) * FAE * 面試主管: 宋俊緯 * 應徵職缺: TV - 軟體設計(SRE) * 工作內容: CI/CD 自動化部署測試,會用到Docker, Jenkins, Git * 工時: 12小時 * 薪資福利: 私大+中央研 = 54,000~57,000 (有1.5年的年資變成57000~58,500) * 問題: * 碩論 * CI用過什麼 * 白板題: * 給定一個n,計算出n!的數值從後面數來有幾個連續的0(不能用暴力算法來計算n!的值) * 算法是要產生0的話會是由10產生(10=5*2),通常2的數量會多過於5,所以要計算有幾個5 * 還要考慮25=5*5會產生2個5 * leetcode 172 * 不使用+運算子的情況下計算a+b * 用加法器 * 給一個size為n和alignment值k,使用c來malloc一個size為n記憶體空間,並且配置的空間要對齊k ### 影音串流軟體設計 * RD * 應徵職缺: 網路通訊部門 - 影音串流軟體設計 * 工作內容: 做影音嵌入式系統的framework和套件 * error comcealmen(有點偏向要自己寫通訊協定跟加密技術) * 影音封包傳輸要怎模做到找出packet loss以及重送機制 * 封包加密,如何防竄改,如何偵測... * 影音同步設計 * 封包傳送到後如何還原出影像以及修復錯誤bit * Trust Zone設計 * 問題: * 碩論 * 怎模偵測加密 * os, 計概, 演算法有寫過什麼作業 * 有沒有碰過比較底層的code, 有哪些 * 考試:有給一個考卷,完全看不懂,沒什麼好特別準備的 ### SSD演算法開發 * 面試主管: 陳富信 * 應徵職缺: SSD - SSD演算法開發 * 工作內容: * PCIE SSD framework開發, MIPS framework * 控制NAND flash讀寫 * 支援不同類型的NAND flash * 做記憶體mapping * 測試驗證功能 * 工時: 9-10彈性上班,8點下班(通常),感覺部門不怎麼賺錢也業務量不多,所以相對比較早下班 * 白板題: * array[] 裡面的數字兩兩一組,其中有一個數字是unique的,找出該數為何? * 如何知道n是否為2的冪次方? * M值為何 ```asm= unsign int N = 0xaabbccdd; unsign chat* M; M = &N; what's the *M? ``` * 給一個linked list header找出linked list 1/3 node的地方(if list is 3的倍數) * 程式碼中兩個寫法有什麼不同? ```asm= bool x = a(); bool y = b(); if(x || y){ } if(a() || b()) { } ``` * 給一個天秤和8個球,裡面有一顆比較重,其他重量相同,請問要做幾次天秤能夠找出最重那顆球 * ans: 2次 * 問題: * 說明一下os課程你學到什麼 * deadloack為什麼發生,怎麼解決 * debug習慣 * cpu pipline有哪些hazard並解釋,有什麼解決方法? ### 軟體工程師(處理器) * 面試主管: 陳泳成 * 應徵職缺: 軟體工程師(處理器) * 工作內容: * 白板題: * 指標 *a(++) 跟 *(++a)的問題 * merge sort, quick sort, shell sort, bubble sort時間複雜度 * N!計算 * * 問題: * 碩論要熟 # 映岑 * 以下為面試過程,包含一些問題跟閒聊內容XD * 面試時我都是用簡報做自我介紹,下面問題中的個人經歷為履歷或簡報中有提到的東西,由於每個人經歷不同,所以有些問題就沒特別敘述了(基本上就是履歷中提到的東西要懂,履歷上可能都只寫概要,因此他們都會問一些其中的運作流程或細節等問題) * 我的履歷上有放碩論的概述,在面試時他們都會問其中的細節,若尚未有論文內容可放,需要準備一下未來論文研究的方向之類問題的回答,有可能會被問到。 * 除了MTK為實體面試,其他都是線上面試 ## 台積電 * 職位: Cloud DevOps Engineer * 面試前需要先做程式測驗,像CPE那樣,有三題,作答時間90分鐘 * 工作內容: * infra開發,使用public cloud API設計cloud infra * 主要架構為SDN * 會用到container、devops流程 * 問題 * 個人經歷 * SDN做過啥(詳細功能及內容) * SDN跟傳統的網路有什麼差別 * python做過啥(詳細功能及內容) * 物件導向作業用怎樣的資料結構存物件(太久以前寫的,被問到有點答不出來gg) * 有用過ESXi的cluster嗎? * 其他 * 工時6~8小時,責任制,需輪班(人不用待在公司但要待附近(新竹),會拿值班手機,出事需要到場或聯絡負責的同仁處理) * 有mentor * 需要的能力 * 了解SDN * 了解public cloud產品 (如amazon、azure提供的東西) ## 鴻齡 * 職位: Linux通訊軟體研發: 以Embedded Linux開發5G路由器(5G CPE及5G Mi-Fi)的軟韌體,主要是以C語言為主,如具有網通產品或嵌入式系統相關概念與經驗者尤佳。 * 工作職位1: 底層驅動程式5G modem, Wi-Fi, USB, Ethernet…..的整合開發與除錯 * 工作職位2: 網路通訊層開發,IPv4, IPv6, iptables, Firewall….等,Router相關功能的開發。 * 工作職位3: GUI/Management層開發,WEB GUI, SNMP, TR-069/TR098等上層控管功能的開發與客製化。 * 他們先安排第一個小時先做測驗,第二個小時再面試,測驗內容包含英文測驗(聽力+閱讀)、人格測驗、智力測驗(這個題目超多,有國文、數學計算、幾何等問題),我寫智力測驗寫到時間有點拖到面試時間,後來主管說測驗部分他記得沒排智力測驗,我不知道484被人資搞了,然後主管說英文成績也會影響到人資核薪 * 工作內容: * 根據客戶需求在晶片上做功能的開發,主要平台有MTK和高通的晶片 * 應用的產品範圍 * Server Side * Small cell * Core network * User Side * CPE (應該是Customer Premise Equipment的意思?) * IDU (IndoorUnit): 路由器 * WAN端改成用5G連線 * ODU (OutdoorUnit): IP cam、NB-IoT * MIFI * 5G網卡、WIFi、藍芽等等 * 問題 * 個人經歷 * 其他 * 有mentor * 上班時間 * 午休: 12:00~13:30 * 表定: 8:00~17:30 * 實際上大概是: 8:30~19:30 * 一個project大約是6 ~ 8個月,一年大概1~2個project,在第4、5個月時會比較忙 * 薪資(這個為他的經驗,詳細情況還是要問人資) * 月薪: 52 ~ 56K * 三節: 0.5 + 0.5 + 1 * 四月績效獎金2~3個月 * 分紅3~4個月 * 第一年保底14個月,三年可到20個月 * 可以報加班費或補休 * 鴻齡為鴻海底下的子公司,切出來可以節稅 * MTK的晶片只支援到R15、較便宜(與高通相比)、但省電機制較差(與高通相比); 高通的可支援到R16、性能較好但比較貴 * 主管人感覺不錯,面試過程中覺得很有希望(他說他那邊覺得沒問題),但至今依然沒消息,不知道是死在人資那關,還是主管騙我QQ ## 緯創 * 面試前需要先做數位職能評測,進入系統後會問你幾個問題,會將你的回答錄影給他們看,問題有你遇過最困難的決策,團隊有衝突會如何解決等這類的問題(有夠麻煩==) * 工作內容 * BMC(Board Management Controller)功能開發,BMC可看成是server上的晶片 * 會與許多公司合作,購買他們的source code,然後根據客戶需求再做修改 * 最近使用開源軟體openbmc(可上github搜尋) * 問題 * 個人經歷 * 你遇過最困難的問題 * 如果團隊中有人執意要這麼做,你會怎麼做 * 如果主管的決策是錯的,你會怎麼做 * 有沒有當過團隊的領導者 * 其他 * 按照案子來分配工作 * 彈性上班時間,大概9:20前到公司都可以,待滿9小時就可以走人,午休一小時,偶爾加班 * 工作地點:內湖 * 會跟一些大廠合作(Intel、AMD),可拿到最新的晶片 * 結果: 未錄取 ## 盟創科技-勤創資通 (合勤集團) * 職位: XS_5G NR 軟體研發(高級)工程師 ([104網址](https://www.104.com.tw/job/6xyo7)) * 工作內容 * 5G軟體開發 * 根據用戶需求提供turnkey solution * 問題 * 個人經歷 * 寫個1加到100的程式 * 給10個盒子和1000顆球,如何分配這些球到盒子裡,並且能拿其中的幾個盒子湊出所要的球數 * 其他: * 去年剛成立,發展性高 (他說的) * 預計3~5年上市,前景不錯 (他說的) * 急著用人 (他說的) * 有mentor * 可能會有出差,負責跟客戶溝通,回報客戶的問題 * 履歷上寫讀過3GPP spec(有加分效果) (他說的) * 需要的能力: * 對modem的掌握 * 看log分析 * 用心、持續學習 * 靈活思考 * 結果 * 有錄取,月薪53K ## 群聯 * 職位: PCIe 4.0 SSD 韌體設計工程師 * 工作內容 * SSD FW開發,寫公板code,符合spec且穩定後再交給其他部門 * SSD FW 大約30~40人寫一個IC,工作拆分有上層與notebook的溝通、下層與NAND flash溝通,這個部門主要負責上層 * 問題 * 個人經歷 * 給你c online compiler網頁,他會出題給你,你共享螢幕作答給他看 * bit運算 * 一個int有幾個bit => 32 bits * 最低位為bit 0,最高位為bit 31,給你一個整數,寫程式將bit 10 * set as 1 * clear * 寫一個任意sort演算法,並解釋其時間複雜度 * 寫一個程式,input一個字串,用link list存並將這個字串印出來 * 一個array裡有數字1~50,讓每次印出來的結果都是亂序的(講怎麼做就好,不用寫程式) * 舉例來說,假設現在array包含數字1~5,第一次印出來的結果為25143,第二次為14532,每次結果皆為亂序,且其中數字不重複(不會有如15523這種情況) * 其他 * 新人先讀spec 3個月,每周要報進度,也需要了解FW架構 * 工時表定9 ~ 18,半小時不算遲到,但要待滿9小時才能走人,根據他的經驗平均為9~21(9 ~ 12、12 ~ 18、19 ~ 21) * 可報加班費 * 旅遊補助12000 * 伙食津貼:一餐40元,一天2餐 * 他說新人月薪有8萬,保14,年薪16~18個月 (這是他的經驗,詳情以人資公布為主) * 二面 * 問題 * 個人經歷 * 有沒有修過嵌入式系統? * 用過哪個版本的linux? 對linux的了解到哪邊?(主要是想問你懂不懂較底層的東西) * 他出題目給你,你可以開個記事本之類的東西並共享螢幕給他看作答情況 * bit運算,求v=? ``` int v1 = 0x00001111; int v2 = 0x00001202; v = v1 & (~v2); v = v | v2; ``` * 分別以little endian及big endian回答這兩小題 ![](https://i.imgur.com/eIhl84p.png) * link list和queue的差別為何? 並寫程式來做queue的pop、getfront以及確認queue是否為空的功能 ## 兆勤科技 (合勤集團) * 職位: NS_Wireless Engineer ([104網址](https://www.104.com.tw/job/7bg3x?jobsource=vip)) * 面試流程: 1. 先做一個測驗,大概20分鐘左右,填充題,內容有寫出程式輸出結果、寫個swap程式、電腦連不上google如何排解等等。 2. 面試: 先自我介紹,然後對方會問問題,並講他們的工作內容,然後會問你有沒有問題要問他 * 工作內容 * 他們的AP是for企業的,不是for一般用戶 * 無線AP功能開發(以下舉例): * 相同channel可能會互相干擾,需要做dynamic channel selection * 與其他AP做load balance * session移動(roaming),並不讓服務中斷 * AP管理介面 * security驗證 * 需要自己寫演算法,修改driver,做完後會送到QA做測試 * 問題 * 個人經歷 * TCP/UDP差異、用TCP和UDP來測速,哪個比較高,為什麼? * socket: 當client傳送訊息給server,但server沒有印出訊息結果,可能原因為何? * 電腦連不上google如何排解? * user space和kernel space如何溝通? * 其他 * 他說他們跟交大有合作案 * 用AI偵測WIFI波型,來做防盜系統 * 用AI做dynamic channel selection * 新人1~3個月是學習階段,有mentor,根據學習的結果分配工作 * 基本準時下班,每半年release可能會需要加班 * 人資電談 * 問題 * 這個工作哪裡吸引你? * 面過幾個工作,有offer了嗎? * 若手上有多個offer,會考慮那些因素來決定要哪個工作? * 職涯規劃為何?會想當管理職嗎? * 別人會如何形容你(請舉出三個形容詞) * 家人對於工作的想法 * 其他 * 薪水: * 年薪: 12+0.5+0.5+1(基本+三節)+個人績效+公司分紅,大約可抓15~16個月 * 月薪: 起薪50 ~ 55K,根據學經歷增加或減少,可抓個平均52~53K * 到人資這關還會被刷掉嗎? * 回答: 人資會確認你的履歷是否坦白,而且他們希望適才適所,如果個人意願不高或其他因素,他們進行評估後,有可能不會發offer給你 * 他們是2019出來的,在合勤控股底下 * 切除來的原因: -> 客戶群差別 * 合勤: 電信業 * 兆勤: cloud network ## 聯發科 * 職位: 4G LTE/ 5G NR 軟韌體開發工程師 ([職缺說明](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120180312000?langKey=zh-TW)) * 楷程大大的部門,我請他幫我內推的,面試前一天他有先跟我講一些名詞的解釋跟工作內容 * 工作背景架構、內容等資訊 * 產品為手機晶片SoC (system on chip),晶片上會有音訊driver、網通模組等等功能 * 這個部門負責的部分有上層application processor,下層modem,功能為網路通訊,跟sim卡溝通,然後能與電信商(以下稱之為operator)連線 * 晶片好了會給下游手機廠 * RFC為一個較大的標準,像定義基本的封包格式,而3GPP的spec為3/4/5G的協定,較為細節,但operator不會採用所有3GPP定的spec的內容,只會根據他們自己的需求選擇其中的一部份(這個稱為requirement) * 3G使用circuit switching,4G以後使用packet switching,從LTE開始有IMS(IP multimedia system),語音對話同時還可以傳遞文字訊息。 * 開發功能舉例,手機開機後能attach 4/5G,然後向operator的IMS server註冊,晶片有組成SIP封包的功能,可進行SIP訊息交換等等 架構:![](https://i.imgur.com/9OjD8NF.png =30%x) * 部門組成 * team中有外國人,然後跟其他分布溝通需要用英文 * 3大群 * RD (講中文) <-這個職缺算這個 * 與RD跟PL溝通 (中間的潤滑劑) 有印度人 * customer project lead * 主要負責北美及台灣的客戶 * 有時候需要配合美國那邊開會,可能需要待比較晚,可報加班或調班 * 出差大部分是去美國 * 面試過程 * 在竹科實體面試,首先有一個小時的C語言測驗,總共50分鐘,14題填充+選擇,2題程式題(像CPE那樣,但printf印不出東西,不知道怎debug ㄏ),基本上拿分靠填充跟選擇 * 面試時先自我介紹,然後他會問你個人經歷的問題 * 換他進行工作內容介紹,他問我楷程有沒有跟我講過,我說有,所以他簡單介紹後就直接問我有沒有想問的 * 看成績單,針對一些課程提問 * 開始閒聊,聊論文題目怎麼決定的、聊實驗室研究內容,有沒有人帶等等 * 聊完後請主管下來繼續面,一樣先用簡報做自我介紹,他問一些個人經歷問題,然後開始閒聊,聊修過的課程、聊遇過最困難的事情是什麼、問我有沒有反社會人格(笑)等等 * 下午一點開始考試,面完就四點了 * 其他 * 我有問他測驗考得如何,他說我PR 80 * 客戶趕進度,需要假日加班,通常一個月前會告知 * 有mentor,新人主要是讀spec、trace code,並報告給mentor聽,mentor也會指派一些練習給你,根據訓練結果分配後續工作 * 人資電談 * 他請我先簡單自我介紹一下 * 然後他表示主管也有意願,接下來就會跑offer的流程 * 起薪月薪為76K,明年2月有結構性調薪會調到80K,所以現在如果是預聘的話月薪直接算80K * 楷程建議我可以問報到時間(我那時沒想到要問這個= =) # 參考資料