# 資訊科技產業專案設計課程作業 4 > contributed by <`Neo`> > 貢獻者 <`尼歐`> ## [1. MediaTek: Security Software Engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120211125004?langKey=zh-TW) ### 工作介紹 :::info Job Description 1. 進階Security相關模組的軟體設計、開發與維護 2. 維護軟體橫跨於多種平台: Boot loader, Linux, Android, TEE and 3. IC驗證 (emulation & DVT) 4. 優化負責的軟體品質、性能與用戶體驗 5. 撰寫Security軟體設計文件 6. 需要跨部門合作取得1st Tier第三方Security相關認證 Requirement 1. 嵌入式系統軟體開發經驗 2. 具備Linux 系統軟體知識及相關debug 工具技能 3. 精通C/C++程式語言 4. 有使用ARM Instruction Set Architecture以及ARM Trustzone的經驗 5. 有使用Python的經驗 6. Better to have: 了解密碼學相關演算法 ::: ### 職務分析與自身的匹配狀況 1. 旁聽過嵌入式系統課程並完成部分作業。(使用到FreeRTOS的[mutex](https://github.com/chihyu1206/Embedded_OS_Lab1-Traffic-Light)與[semaphore](https://github.com/chihyu1206/Embedded_OS_Lab2-Motion-Sensor)) 2. 大學時的兩堂必修(系統程式、作業系統)有學過。 3. 算熟。 4. 大學時選修組合語言有學過ARM ISA,但沒有ARM Trustzone的經驗。 5. 有。 6. 研究領域是資訊安全相關,熟悉各種常見對稱式/非對稱式密碼學的流程。 ### 面試題目 >來源: 自行改寫 1. 如何判斷密碼系統是否安全? > Ans: 以 (1) ciphertext-only attack (2) known plaintext attack (3) chosen plaintext attack,即可測出密碼系統的安全等級。 2. 串流加密與區塊加密的不同之處? > 1. block cipher: 只用同一份key,把加密文件一次用一個block進行加密,利用換位、替換等方式,讓相同內容的明文,產生差異極大的密文。 > 2. stream cipher: 加密用的key不斷變更,每次針對同一個bit/byte進行加密。加解密的雙方,可以同時產生相同的random key stream。 ## [2. MediaTek: 5G Tool Firmware Engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120210122001?langKey=zh-TW) :::info Job Description: (略) 你將專注於 - 設計與開發嵌入性軟體,實現高效率資訊收集與分析 - 制定軟體開發規範和最佳做法 - 以敏捷式開發,設計兼具彈性/可延展性/可維護性的開放式軟體工具平台架構 - 與世界最新進的通訊團隊合作,定位未來的軟體架構 Requirement: - 熟悉C/C++/Python任一種語言 - 軟體設計和開發經驗, 困難問題解決充滿興趣 - 對於工作和新挑戰態度積極負責 - 快速學習且能夠主動溝通內外團隊 - 具備嵌入式系統開發經驗 - 具備大型軟體架構設計, 硬體驗證經驗 尤佳 ::: ### 職務分析與自身的匹配狀況 優: 對C/C++/Python皆熟悉,態度積極,學習快速。 缺: 不具備大型軟體架構設計與硬體驗證經驗。 ### 面試題目 > 引用自: [4G工具軟體工程師面試](https://wubui.pixnet.net/blog/post/41242054) > 🧔:interviewer 👶:interviewee 🧔: 可以說明一下#error的作用嗎? 👶: #error可以搭配其他macro,在預處理階段停止編譯,並發出使用者自定義的警告。例如: ```c= #include <stdio.h> # define DEBUG int main(void) { #ifndef DEBUG #error Debug is not defined #endif return 0; } ``` 就可在preprocessing時,判斷DEBUG是否有被定義。 🧔: 請問struct和union的不同之處? 👶: struct所佔的空間為member相加,union所佔空間由最大size的member決定,同一時間只會儲存一個member的資料。 🧔: 請問你知不知道在不用除法和取模運算的前提下,要如何判斷一個整數是否是3的倍數? 👶: ```c= bool is_mul_of_3(int n) { while (n > 0) n -= 3; while (n < 0) n += 3; return n == 0; } ``` 🧔: 請問一個變數是否可以同時宣告成const和volatile?如果可以,請舉例。 👶: 可以,例如當我們設計一個只能讀的暫存器就能使用,可以防止意想不到的變化以及限制程式修改該變數。 🧔: 那麼一個指標可以被宣告成volatile嗎? 如果可以,請舉例。 👶: 一樣可以。當一個執行中的process修改指向buffer的指標時,就能避免意想不到的變化。 🧔: 好的。最後請你用C語言寫出如何(1) 設定指定位元 (2) 清除指定位元 (3) 反轉指定位元 👶: ```c= // set the specific bit unsigned char a |= (1 << n); // clear the specific bit unsigned char b &= ~(1 << n); // inverse the specific bit (1 -> 0, 0 -> 1) unsinged char c ^= (1 << n); ```