# 2022 年「資訊科技產業專案設計」課程第 3 次作業 ## 符合興趣與規劃的職缺、該職缺需要的能力 列出 [IC 產業結構和軟體工程師的機會和](https://hackmd.io/@sysprog/BkE4X5vvF)《[0 到 100 的軟體工程師面試之路](https://ithelp.ithome.com.tw/articles/10288192)》 ### Google: [Software Engineer, University Graduate, 2022](https://careers.google.com/jobs/results/124750385131725510/) 同為 Google 的職缺:[Software Engineer, Silicon](https://careers.google.com/jobs/results/89995286794904262/) <!-- 同為 Google 的職缺:[Google - TPU Architect, Devices and Services, Silicon](https://careers.google.com/jobs/results/118055665483555526/) --> :::info Preferred qualifications: - Experience programming in C, C++, Java, and/or Python. - Experience with Unix/Linux or Windows environments, distributed systems, machine learning, information retrieval and TCP/IP. ::: ### Nvidia: [Developer Technology Engineer, GPU](https://nvidia.wd5.myworkdayjobs.com/zh-TW/NVIDIAExternalCareerSite/job/Taiwan-Taipei/Developer-Technology-Engineer--GPU---New-College-Graduate_JR1958725-1?jobFamilyGroup=0c40f6bd1d8f10ae43ffaefd46dc7e78&locationHierarchy1=2fcb99c455831013ea52ed162d4932c0&workerSubType=ab40a98049581037a3ada55b087049b7) 同為 Nvidia 的職缺 [Developer Technology Engineer, HPU](https://nvidia.wd5.myworkdayjobs.com/zh-TW/NVIDIAExternalCareerSite/job/Taiwan-Taipei/Developer-Technology-Engineer_JR1961769?jobFamilyGroup=0c40f6bd1d8f10ae43ffaefd46dc7e78&locationHierarchy1=2fcb99c455831013ea52ed162d4932c0) :::info - What you’ll be doing: - Study and develop cutting-edge techniques in deep learning, graphs, machine learning, and data analytics, and perform in-depth analysis and optimization to ensure the best possible performance on current and next-generation GPU architectures. - Work directly with key customers to understand the current and future problems they are solving and provide the best AI solutions using GPUs. - Collaborate closely with the architecture, research, libraries, tools, and system software teams at NVIDIA to influence the design of next-generation architectures, software platforms, and programming models. - What we need to see: - A good degree from a leading university or equivalent experience in an engineering or computer science related discipline (MS or PhD preferred). - Experience with parallel programming, ideally CUDA, OpenCL and OpenACC. - Confident knowledge of C/C++ and/or Fortran. - Solid knowledge of software design, programming techniques, and algorithms. - Strong mathematical fundamentals, including linear algebra and numerical methods. - Good communication and organization skills, with a logical approach to problem solving, good time management, and task prioritization skills. - Knowledge in a specific domain is a plus, such as Deep Learning, Machine Learning, Atmospheric Science, Optics and Photonics. ::: ### MediaTek: [Device Driver Engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTB120220309000?langKey=en-US) 同為 MediaTek 的職缺 [SW/FW engineer in multi-core CPU application processor development](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120200710003?langKey=en-US) 同為 MediaTek 的職缺 [GPU compiler developer(Hsinchu/Taipei)](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120220301009?langKey=en-US) :::info 1. Familiar with C programming language 2. Embedded system development experience 3. Driver development experience, such as USB, PCIe, Power Management... 4. System integration experience, such as system bring-up, security, power ::: :::info 1. Define GPU compiler software architecture and interfaces. 2. Development/implement GPU compiler pipeline, linking and various optimizations/transformations. 3. Collaborate with Driver team, HW team to implement new API & HW features. 4. Collaborate with Driver team, HW team to improve/tune performance & power consumption. 5. Execute & deliver to meet milestones/schedules. 6. Analyze and debug code generation issues. 7. Analyze and influence future GPU architectures. 8. Construct reliable & trustable relationships across teams internally & externally. 9. The position can be located at Hsinchu or Taipei ::: ### 其它職缺 #### Mircosoft - 沒有看見 Microsoft 列出相關的職缺 - [台灣微軟 2023 校園徵才線上說明會【完整版】](https://www.youtube.com/watch?v=c6hO9WQUtFo) ### 參考面試心得 - [[面試] 2020新鮮人面試(MixerBox/Nvidia/AWS/Shopee/Google)](https://www.ptt.cc/bbs/Tech_Job/M.1589040307.A.70F.html) - [[心得] 面試 - Google/NCCST/趨勢/NVIDIA/中華資安/華碩](https://www.ptt.cc/bbs/Soft_Job/M.1586938143.A.268.html) - [[心得] google embedded SWE 面試心得 (有年資)](https://www.ptt.cc/bbs/Soft_Job/M.1613548617.A.C70.html) - 資訊科技產業專案設計的校友 ### 分析職缺需要的能力 除了 MTK 的 GPU compiler (需要 4 年以上經驗),從公開網路資料的面試心得來看,皆有固定的面試內容跟流程。 職缺綜合基本要求: - C++, C, Python 語言熟悉 - Linux Kernel (device driver) - 作業系統相關概念 - 計算機結構 相關指定技能要求: - 平行程式設計(OpenCL, Cuda, OpenGL, Vulkan 等等) - GPU 架構 - 編譯器相關 - Machine Learning - 影像處理 從網路上找到的面試分享來看,可以分成兩種方式準備面試: - Google, Nvidia, Mircosoft 為一組 - 常見的軟體工程師面試流程 - MediaTek 為一組 - 從資訊科技產業專案設計課程中得知,MTK 有不一樣的面試方式(主管很忙會出考古題)。 ### 考量自身能力與其職缺相符的程度 現階段相符的程度: - LeetCode 寫了 32 題(Blind 75 的一半) - 粗淺的寫過 Linux 核心設計 - Machine Learning 初學者 - 撰寫 Metal 程式語言使得 iPad 使用 LiDAR 捕捉點雲 (一種 GPU Programming) - 沒有寫過 Computer Architecture 的作業(沒選修) - 沒有修過平行程式設計課程 - 影像處理課程正在修 :::spoiler <a></a> ![](https://i.imgur.com/G0GUywl.png =200x200) 這是 Rejected 的節奏 ### 職涯規劃 四年內: - 以培養專業為主要事項 下個四年: - 可能需要使用 Linkedin 參考類似的人物的職涯發展,目前沒有想法。 ::: ### 職缺的面試題目 這裡列出 Google, Nvidia, Microsoft 可能的題目: - C++ 題目:vtable, STL 實作, C++ 11 , C++ 14, C++ 17 特性 - 基礎 C 語言: volatile, const, function pointer, malloc, C 語言規格書 - LeetCode 題目 - 作業系統概論: Atomic - 平行程式設計 MediaTek 面試題目: - 都在 Linux 核心設計課程裡了 #### 相關連結: - [C++](https://ithelp.ithome.com.tw/articles/10288192) - [Linux 核心設計](http://wiki.csie.ncku.edu.tw/linux/schedule) - [並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency) - [平行程式設計 sslab](https://nycu-sslab.github.io/PP-f20/) - [平行程式設計公開課程](https://ocw.nthu.edu.tw/ocw/index.php?page=course&cid=231) - [Metal on iOS: 30 days tutorials](https://medium.com/@warrenm) ## Mock Interview <!-- ![](https://p2.bahamut.com.tw/B/GUILD/e/5/9525_119c.GIF) --> 預計 Mock Interview 題目: - LeetCode 面試題目 - [21. Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/description/) - [23. Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/description/) - [HetSys Course: Lecture 11: Parallel Patterns: Graph Search (Spring 2022)](https://youtu.be/cvP1aH31ar4) - 指定領域相關提問 - C++11 相關提問 - GPU programming --> 以 iPad 點雲開發程式經驗作為例子。 #### 面試內容 - 第一階段提問: Interviewer: 提問程式碼實作問題 Interviewee: 撰寫程式碼 - 第二階段提問: Interviewer: 如果說有個使用情境,在 Merge k Sorted Lists 中 k 數值非常大,並且每個 lists 擁有大量元素,若要改成平行處理的方式,你會怎麼做? Interviewee: 我會使用 Map-Reduce 方法,輸入兩組 linked lists,輸出一組 linked list。將原本多個 linked list 兩兩一組做平行處理,並且做多次迭代,最終獲得一個 linked list. - 第三階段提問: Interviewer: 你有實際使用 OpenGL, Cuda 經驗? Interviewee: 我未使用 Cuda 的經驗,但有使用類似的平台,我使用 Apple 的 Metal 平台。 我在實驗室中撰寫 iPad App 的點雲掃描應用程式,就是應用 Apple GPU 。iPad 的 LiDAR 相機採樣大量的點雲資料,包含座標空間。利用 GPU 平行處理的能力,去判斷採樣的點雲的點座標是否正確採樣。 另外我依據 Apple 的 Metal 文件,在採樣過程中,將點雲透過 GPU render 到螢幕上即時顯示。目前 iOS App 已在我的 iPhone 安裝,可以現在就來使用功能。 - 第四階段提問: Interviewer: 在撰寫過程中有遇到什麼困難? Interviewee: 第一個困難是:在 Apple Store 中也有使用 Apple LiDAR 採樣應用程式,但是無法針對實驗室特定點雲數據做出調整,因此必須自行撰寫程式碼。 第二個困難是:LiDAR 是近年 Apple 推出的功能,而且需要 GPU, Metal, iOS App 撰寫能力,能參考的 Github 上的專案也較少。 最終的困難是:能源消耗跟記憶體使用率,修改出來的版本也要考慮耗電、跟 iPad 記憶體限制。 - 若採樣頻率極高,很容易產生上千萬顆點雲座標,在採集上容易過於密集,並且 GPU 壓力大,而且考量行動裝置特點,不能太耗電。因此要依據情境調整採樣頻率。 - 不像電腦有 8 GB 以上記憶體,iPad 與 iPhone 單一應用程式記憶體上限為 4 GB(依據作業系統版本,更高版本可以支援 6 GB),並且不支援 mmap 等等系統功能。因此必須在採樣一定數量的點雲後,寫入檔案並減少顯示在螢幕上的點。 ## [Resume](https://docs.google.com/document/d/1btTvsaURR11F4Tk8E0ufGJYq1GuRT0JiMDwyyjJpXr0/edit?usp=sharing) <!-- ## [CV](https://docs.google.com/document/d/1ZljLX_XtnXV2KBB-SuxX0PEVQ4gqM-az2ecZ3DN3NDQ/edit?usp=sharing) --- 其它內容 #### [大一的時候臺大電機系大學長李聖珉](https://ithelp.ithome.com.tw/articles/10309011) - [【人文講堂】20220730 - CTPS解決陌生問題,攸關人生大事 - 李聖珉](https://youtu.be/uUi3RLd-h1w) 2022年7月30日的影片 -->