# 資訊科技產業專案設計課程作業 4 ###### tags: `2021 成大 資訊科技產業專案設計` >貢獻者:強尼 Jony [2021 年「資訊科技產業專案設計」課程第 4 次作業](https://hackmd.io/@sysprog/info2021/https%3A%2F%2Fhackmd.io%2F%40sysprog%2Finfo2021-homework4?fbclid=IwAR3_MYAlkdyk3Tmw8zrASerr9TYloQ-hue2oNgZllsYF4BNwXdSrtqVNSok) ## 1. 找出較符合自身興趣/規劃的職務描述 ### MTK Wlan/WiFi 軟體工程師 - 台北-行善 **(在2021/11/16 已關閉職缺,為了這職缺準備很久了,很想面試進入此職缺)** > **分公司地點 台北-行善** > 職類 Software > 工作經驗 無工作經驗 > 教育程度 碩士 > > 職缺說明 > 1. Wi-Fi 驅動程式/韌體開發設計及驗證 > 2. Wi-Fi 等無線晶片之跨層架構介面設計 > 3. 維護量產的產品 > 4. 協助研發軟體新技術與新工具 > 5. 產品量產問題分析與解決以及Tier-1客戶支援 > > 職缺需求 > 1. 碩士以上;電機、電機與控制、資訊科學、資訊工程相關科系畢業為主 > 2. 熟悉嵌入式系統、C/C++ programming > 3. 具兩年以上嵌入式系統程式開發經驗 > 4. 具Linux/Unix 環境程式開發經驗者 > 5. 具下列任一相關經驗者為佳 > a.對Wi-Fi/Wlan 802.11通訊協定有相關經驗 > b.有peripheral device相關經驗,例如**SPI/I2C/USB/SDIO** ### [WIFI系統設計工程師C3](https://recruit.realtek.com/zh/index.php?option=com_content&view=article&id=10443) > 工作項目: > 1. Wifi HAL_API development. > 2. Wifi Firmware development. > > 應徵條件: > 1. 熟System C, C++, python. > 2. wifi background(802.11) or experience. ## 2. 探討自己在專業上匹配的程度 選這兩個職位原因,是因為本人具有 嵌入式系統韌體工作經歷: 1. 維護 MCU 韌體產品 包括 * FreeRTOS * LWIP (ethernet driver) * SD卡功能: SDIO 介面+FatFs 2. 使用 STM32F103 MCU 開發 * USB HID+鍵盤模擬雙介面輸出 * ESP8266 WIFI: TCP UDP 功能 * SPI: RFID 模組溝通 * I2C: EEPROM功能 符合 > **b.有peripheral device相關經驗,例如SPI/I2C/USB/SDIO** 目前缺的是 > a.對Wi-Fi/**Wlan 802.11通訊協定有相關經驗** 在做老師的 [vwifi.c](https://hackmd.io/@sysprog/linux2021-summer-quiz3) 作業,準備當成 side project 面試 ## 3. 面試題目 [面試心得(M/P/R)](https://www.dcard.tw/f/tech_job/p/237530341) 公司:瑞昱 職務說明: BT FW 面試題目: ``` 一面: 白板題 : Linked list 找最大值,找到最大值後在前面加new node (需考慮只有一個node和NULL的狀況) Ex. 395 -> 3695 答出後延伸,若只有一個node 9->69 答出後再延伸,若本來就是NULL ->6 二面: 白板題:Sort linked list ``` 公司:瑞昱 職務說明: DHC 數位IC 面試題目: ``` 一面: 口頭問答: 解釋 synchronous & asynchronous、 blocking & non-blocking ``` 公司:聯發科 職務說明: 5G NR 通訊軟體(modem L1) 面試題目: ``` 一面: 口頭問答: tcp/udp、 通訊系統方塊圖、 決策方法(MD, ML, MAP)、 OFDM優缺點&缺點如何解決 ``` 公司:聯發科 職務說明: 5g multi-mode 通訊協定軟體開發 面試題目: ``` 一面: 主管問答: tcp/udp、pipeline、 白板題: sort array ``` 公司:聯發科 職務說明: wct/cd1 5g、6g modem數位ic ``` 面試題目: 主管問答: 取樣定理、 非基頻取樣定理、 錯誤更正碼 ``` TODO - [x] 作答上述的面試題目 公司:瑞昱 職務說明: BT FW 面試題目: ``` 一面: 白板題 : Linked list 找最大值,找到最大值後在前面加new node (需考慮只有一個node和NULL的狀況) Ex. 395 -> 3695 答出後延伸,若只有一個node 9->69 答出後再延伸,若本來就是NULL ->6 二面: 白板題:Sort linked list ``` :::info 白板題 : Linked list 找最大值,找到最大值後在前面加new ```c struct ListNode { int val; struct ListNode *next; }; struct ListNode* add_node_before_Max_node(struct ListNode* head,struct ListNode* node){ int max_node_index=0,index=1,max_val=0; struct ListNode* tem_node=NULL; if(head==NULL) { //答出後再延伸,若本來就是NULL head=node; return head; } if(head->next==NULL) { //答出後延伸,若只有一個node node->next=head; head=node; return head; } tem_node=head;// max_val=head->val; while(tem_node->next!=NULL) { //尋訪 linked list一遍,找出最大值所在節點index tem_node=tem_node->next; index++; if(tem_node->val>=max_val) { max_val=tem_node->val; max_node_index=index; } } tem_node=head; for(index=1;index<=(max_node_index-1);index++) { //鎖定(max_node_index-1)的位址,就相當於在"最大值節點"的前一步節點位址 tem_node=tem_node->next; } //將資料插入到 "最大值節點"的前一步節點位址 node->next=tem_node->next; tem_node->next=node; return head; } ``` ::: :::info 白板題:Sort linked list [148. Sort List](https://leetcode.com/problems/sort-list/) [花花酱 LeetCode 148. Sort List](https://zxi.mytechroad.com/blog/divide-and-conquer/leetcode-148-sort-list/) 參考用 Merge Sort 寫法 Time complexity: O(nlogn) Space Complexity: O(log n) ```c= /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* merge(struct ListNode* list1, struct ListNode* list2) { struct ListNode dummyHead; dummyHead.val=0; struct ListNode* ptr = &dummyHead; while (list1 && list2) { if (list1->val < list2->val) { ptr->next = list1; list1 = list1->next; } else { ptr->next = list2; list2 = list2->next; } ptr = ptr->next; } if(list1) ptr->next = list1; else ptr->next = list2; return dummyHead.next; } struct ListNode* getMid(struct ListNode* head) { struct ListNode* midPrev = NULL; while (head && head->next) { midPrev = (midPrev == NULL) ? head : midPrev->next; head = head->next->next; } struct ListNode* mid = midPrev->next; midPrev->next = NULL; return mid; } struct ListNode* sortList(struct ListNode* head){ if (!head || !head->next) return head; struct ListNode* mid = getMid(head); struct ListNode* left = sortList(head); struct ListNode* right = sortList(mid); return merge(left, right); } ``` ::: --- 公司:瑞昱 職務說明: DHC 數位IC 面試題目: ``` 一面: 口頭問答: 解釋 synchronous & asynchronous、 blocking & non-blocking ``` :::info 參照 [I/O 事件模型](https://hackmd.io/@sysprog/fast-web-server#IO-%E4%BA%8B%E4%BB%B6%E6%A8%A1%E5%9E%8B) [I/O Models 中文解說](https://rickhw.github.io/2019/02/27/ComputerScience/IO-Models/) > ## 阻塞 (Blocking) 與非阻塞 (Non-Blocking) > 阻塞 (Blocking) 與非阻塞 (Non-Blocking) 描述的是 **請求 在等待結果時的 狀態。** > > * 阻塞 (Blocking):調用的程序或者應用程式發起請求,在獲得結果之前,調用方的程序會懸 (Hang) 住不動,無法回應,直到獲得結果。 > * 非阻塞 (Non-Blocking):概念與阻塞相同,但是調用方不會因為等待結果,而懸著不動。後續通常透過輪詢機制 (Polling) 機制取得結果。 > > ## 同步 (Synchronous) 與 非同步 (Asynchronous) > 同步 (Synchronous) 與 非同步 (Asynchronous) 描述的是:**使用者執行緒與 Kernel 的 通訊模式。** > > * 同步 (Synchronous):使用者執行緒發出 I/O 請求後,要等待、或者輪詢 Kernel I/O 的操作完成後,才能繼續執行。 > 等待 Kernel 回覆:Blocking IO,縮寫成 BIO > 輪詢類似於 Non-Blocking IO,縮寫成 NIO > * 非同步 (Asynchronous):或稱 異步,使用者執行緒發出 I/O 請求後仍然繼續執行下一個操作,當 Kernel I/O 操作結束後,會通知執行緒,或者呼叫 callback 函數。 ::: 公司:聯發科 職務說明: 5G NR 通訊軟體(modem L1) 面試題目: ``` 一面: 口頭問答: tcp/udp、 通訊系統方塊圖、 決策方法(MD, ML, MAP)、 OFDM優缺點&缺點如何解決 ``` :::info **Q: tcp/udp** ANS: TCP:通訊前要先建立三方交握,**和對方建立連線後才能傳送封包** UDP:封包指定 destination IP後,**不用先和對方建立連線,就能直接發送封包**,沒有保證是否成功送達,UDP 常用在廣播發送封包 ::: :::info **Q : 通訊系統方塊圖** ANS: [解析通訊元件:由基頻、中頻、射頻零組件讓你一次看懂手機晶片](https://m.moneydj.com/f1a.aspx?a=c5265d2c-eaab-4b3c-a58d-7a8630a46d24) > ## 通訊系統架構示意圖 > ![](https://hackmd.io/_uploads/H1juWQ8Vh.png) > ## 無線通訊系統架構示意圖 > ![](https://hackmd.io/_uploads/H1Bj-7LV2.png) ::: :::info **Q : OFDM優缺點&缺點如何解決** ANS: [解析通訊技術:3G、4G、5G 背後的科學意義(上)](https://technews.tw/2015/10/06/3g%E3%80%814g%E3%80%815g-meaning/) [解析通訊技術:3G、4G、5G 背後的科學意義(下)](https://technews.tw/2015/10/12/3g%E3%80%814g%E3%80%815g-meaning-part-two/) [解析通訊元件:由基頻、中頻、射頻零組件讓你一次看懂手機晶片](https://m.moneydj.com/f1a.aspx?a=c5265d2c-eaab-4b3c-a58d-7a8630a46d24) > ### 「調變技術(Modulation)」與「多工技術(Multiplex)」 > **數位訊號調變技術(ASK、FSK、PSK、QAM)**:**將類比的電磁波調變成不同的波形來代表 0 與 1 兩種不同的數位訊號。** > * ASK 用振幅大小來代表 0 與 1、 > * FSK 用頻率大小來代表 0 與 1、 > * PSK 用相位(波形)不同來代表 0 與 1、 > * QAM 同時使用振幅大小與相位(波形)不同來代表 0 與 1。 > > **多工技術(TDMA、FDMA、CDMA、OFDM):將電磁波區分給不同的使用者使用。** > * TDMA 用時間先後來區分是你的還是我的, > * FDMA 用不同頻率來區分是你的還是我的, > * CDMA 用不同密碼(正交展頻碼)來區分是你的還是我的, > * **OFDM 用不同正交子載波頻率來區分是你的還是我的。** [OFDM和OFDMA的主要優缺點](https://www.itread01.com/content/1544515264.html) [OFDM是正交分頻多工有什麼優缺點](https://www.stdans.com/a/202101/164509.html) ::: --- 公司:聯發科 職務說明: 5g multi-mode 通訊協定軟體開發 面試題目: ``` 一面: 主管問答: tcp/udp、pipeline、 白板題: sort array ``` :::info **Q: tcp/udp** ANS: TCP:通訊前要先建立三方交握,**和對方建立連線後才能傳送封包** UDP:封包指定 destination IP後,**不用先和對方建立連線,就能直接發送封包**,沒有保證是否成功送達,UDP 常用在廣播發送封包 ::: :::info **Q: pipeline** [面試整理](https://hackmd.io/@g9tdU4gDSTiEZrerd0g7-w/SyCXEfsSE#9) `什麼是pipeline? 用pipeline有什麼好處/壞處?` ![](https://hackmd.io/_uploads/S1thWmLNn.png) `IF:讀取指令,ID:指令解碼,EX:執行,MEM:記憶體存取,WB:寫回暫存器` ![](https://hackmd.io/_uploads/r1laWmUEh.png) `一個氣泡(hiccup)在編號為3的時脈週期中,指令執行被延遲` ``` 是為了讓計算機和其它數位電子裝置能夠加速指令的通過速度(單位時間內被執行的指令數量)而設計的技術。 沒pipeline的架構產生的效率低,因為有些CPU的模組在其他模組執行時是閒置的。 如果一條pipeline能夠在每一個cpu clock週期接納一條新的指令, 被稱為完整管線化(fully pipelined)。 因pipeline中的指令需要延遲處理而要等待數個cpu clock,被稱為非完整管線化。 在執行相同的指令時,非pipeline的指令傳輸延遲時間(The instruction latency)比pipeline處理器明顯較短。 這是因為pipeline的處理器必須在資料路徑(data path)中添加額外正反器(flip-flops) ``` ::: :::info **Q: 白板題 sort array** Ans: [912. Sort an Array](https://leetcode.com/problems/sort-an-array/) [花花酱 LeetCode 912. Sort an Array](https://zxi.mytechroad.com/blog/algorithms/array/leetcode-912-sort-an-array/) ::: --- 公司:聯發科 職務說明: wct/cd1 5g、6g modem數位ic ``` 面試題目: 主管問答: 取樣定理、 非基頻取樣定理、 錯誤更正碼 ``` :::info **Q:取樣定理** ANS: [一、取樣定理(Sampling Theorem)](https://mropengate.blogspot.com/2015/04/sampling-theoremaliasing-effect.html) 如果有一個**有限頻寬(band-limited)之訊號**,並且**採樣頻率大於最高頻率的2倍**,**那麼原來的連續信號可以從採樣樣本中完全重建出來。** ::: :::info **Q:非基頻取樣定理(Nonuniform sampling)** ANS: [**非均勻採樣**](https://zh.wikipedia.org/wiki/%E9%9D%9E%E5%9D%87%E5%8B%BB%E6%8E%A1%E6%A8%A3) 非均勻取樣(Nonuniform sampling)是取樣定理下的產物, 藉由[拉格朗日插值法( Lagrange polynomial )](https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E6%B3%95)及均勻取樣理論的關係,來達成滿足取樣定理的概括化型態。 取樣定理限制了在對連續訊號取樣時的條件,如[奈奎斯特準則(Nyquist–Shannon sampling theorem)](https://zh.wikipedia.org/wiki/%E9%87%87%E6%A0%B7%E5%AE%9A%E7%90%86),以避免取樣後的重構時產生訊號缺陷。 而**非均勻取樣則是在不同時間有不同的取樣間隔,但平均下來,整段取樣滿足取樣定理的限制,根據取樣定理的回推,這樣的作法在有限頻寬訊號重構時不會造成缺陷。** ![](https://hackmd.io/_uploads/SkKpbQI43.png) ::: :::info **Q:錯誤更正碼(Error Correction Codes)** ANS: [What is Error Correction Codes?](http://ctld.nthu.edu.tw/bookclub/blog/?update_id=2084) [錯誤檢測與糾正](https://zh.wikipedia.org/wiki/%E9%94%99%E8%AF%AF%E6%A3%80%E6%B5%8B%E4%B8%8E%E7%BA%A0%E6%AD%A3) **傳輸一筆資料封包時,會帶一個檢查碼**,用來**驗證這筆封包資料內容是否正確而沒損毀。** 常見的檢查碼,驗證方式有 * [parity bit](https://zh.wikipedia.org/wiki/%E5%A5%87%E5%81%B6%E6%A0%A1%E9%AA%8C%E4%BD%8D) : UART 傳輸的封包格式中,有個 parity bit,該 bit 就是用這方法驗證封包正確性 * [Checksum](https://zh.wikipedia.org/wiki/%E6%A0%A1%E9%AA%8C%E5%92%8C) * [CRC](https://zh.wikipedia.org/wiki/%E5%BE%AA%E7%92%B0%E5%86%97%E9%A4%98%E6%A0%A1%E9%A9%97) :::