# 2024 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2024-homework3)」作業 3 ## 個人背景 我大學就讀電子系,碩士轉換領域到工科資訊組,一直對於要走哪個領域不是很明確,一直在探索自己到底想要甚麼,就甚麼都碰,但也都沒有很深,過去的經驗和作品都沒有清楚的面向。 因為自己比較想要留在台灣,也不想要遠端工作,所以外商的職缺也是鎖定台灣的缺,也有去搜尋目前台灣廠的職缺都想要甚麼,目前的決定是想要往嵌入式或是純軟的方向走,慢慢依照需求去累積自己的實力。 ## [聯詠 - AI/ML 軟體工程師(S4G)](https://www.104.com.tw/job/87jfo?jobsource=pda_b) ### 職缺需求 【必要條件】 1. MS/Ph.D. in CS/EE (or related major) 2. 熟悉 深度學習的概念, 演算法 與架構 3. 具深度學習工具的使用經驗. (ex. python, tensorflow, pytorch, caffe,....) 【其他條件】 1. 具有LLM或是diffusion相關經驗 2. 具有遊戲引擎使用經驗或熟悉Ray tracing --- ### 自我評估 這是比較面向於我過去開發的經驗和能力所選擇的職缺,也是最近才剛出來的職缺,資訊比較少 * 符合條件 * 修過機器學習與深度學習相關課程,對深度學習的概念、演算法與架構有充分理解。 * 修過生成式 AI 課程,並以大型語言模型(LLM)為專案方向。 * 熟悉 Python,曾使用過 TensorFlow 與 PyTorch。 * 碩士研究以 VR 為主,熟悉 Unity 遊戲引擎的開發,並曾在大學期間利用 Unity 開發小型遊戲專案,具備遊戲引擎使用經驗。 * 待改善 * 在電腦視覺領域的實務經驗有所不足,在該職缺中需要加強的部分,可先持續透過 OpenCV 等傳統圖像處理基礎的學習切入,再深入 CNN 與 Transformer 等深度學習模型在影像辨識、物體偵測及分割等多樣化應用場景,再去 Kaggle 或真實專案的競賽,強化電腦視覺領域的理論與實務能力。 * 雖然具備遊戲引擎使用經驗,但對於Ray Tracing的理解與實務應用尚缺乏具體經驗,未來可以看光線追蹤技術原理(如路徑追蹤、全局照明演算法等)的相關資料、 GPU 裝置的硬體加速功能並實際實作小型射線追蹤引擎或使用現有的引擎範例專案等等,累積實作的經驗,並加強對 Ray Tracing 在即時渲染與視覺特效應用上的理解與實作能力。 --- ## [GOOGLE - Software Engineer, Embedded Systems, Platforms](https://www.google.com/about/careers/applications/jobs/results/108754608012042950-software-engineer-embedded-systems-platforms?location=Taiwan&page=4) ### 職缺需求 * Minimum qualifications: * Bachelor's degree in Computer Science, a related technical field, or equivalent practical experience. * 2 years of experience with software development in C or C++. * 2 years of experience working with embedded operating systems. * Preferred qualifications: * Experience working with upstream linux, bootloader, or embedded firmware. * Experience in the BMC development, machine management software development. * Knowledge of high-speed IOs Peripherals (e.g., PCIe, USB, Ethernet, eMMC) or low-speed IOs Peripherals (e.g., UART, SPI, I2C, I3C, JTAG). * Familiarity with Linux kernel and driver development. * OOB manageability knowledge with exposure to standards like DMTF (PLDM, MCTP (over PCIe, I2C), Redfish, SPDM, etc.). ### 職缺自我評估 * 符合條件 * 之前大學是電子系,大學和碩士都有修過嵌入式系統相關的課程 * 待改善 * 對於上游 Linux 的開發流程和提交要求並不熟悉,要學習上游 Linux 的開發流程,熟悉原始碼的下載、編譯、測試及提交過程,探索如何進行 Linux 核心修改。瞭解引導程式(如 U-Boot)的啟動邏輯,包括硬體初始化、引導流程與系統配置,學會定制啟動參數和處理啟動問題的基本方法。同時學習嵌入式韌體的核心設計架構、更新機制和整體的韌體開發流程,強化對韌體功能實現及維護的整體能力。 * 在 BMC 核心功能的系統性知識和實作上較為缺乏,需要深入學習 BMC 的核心功能與架構,包含電源管理、硬體狀態監控及系統重置等基礎功能,並熟悉常用的管理協議和標準如 IPMI、Redfish、PLDM 和 MCTP,進一步探索 BMC 韌體開發的實作細節,特別是如何透過這些協議實現硬體監控、遠端管理、韌體更新等功能。 * 需要熟悉高速 IO 接口(如 PCIe、USB)的初始化過程、資料通道的配置與吞吐量調整,瞭解其性能優化方法。學習低速 IO 接口(如 UART、SPI、I2C)的訊號時序控制、錯誤檢測及中斷處理機制。掌握裝置驅動程式的撰寫方式,熟悉從裝置樹描述到內核模組載入、用戶態與內核態 API 的整合,進一步提升對多樣化周邊裝置的開發與維護能力。 * 需要學習 OOB管理的基本概念,架構與操作方式。 PLDM、MCTP 和 Redfish 等 DMTF 標準的技術細節,瞭解這些協議的數據結構、命令集及傳輸流程,還要學會如何利用標準化方法實現硬體監控、遠端管理和韌體升級功能。並進一步掌握多協議協作的設計模式,提升在標準化環境下進行系統集成和管理方案開發的能力。 --- ## [Meta - Embedded Software Engineer](https://www.metacareers.com/jobs/1068355194852881/) ### 職缺需求 * Minimum Qualifications: * B.S. degree in Computer Science, Computer Engineering or Electrical Engineering * 2+ years of experience in embedded software development * Experience with design and programming in C or C++ for development, debugging, testing and performance analysis * Strong debugging and troubleshooting skills on complex issues involving multiple components in hardware and firmware * Experience with embedded micro-controllers such as ARM Cortex M0/M3/M4 architecture and their boot mechanisms * Experience with peripherals such as USB, SPI, MIPI CSI/DSI, I2C, UART, GPIO etc. and their interrupt priorities * Experience developing with modern Real Time Operating Systems * Experience working collaboratively in cross-functional teams. * Fluent in English and Mandarin both verbal and written * Preferred Qualifications: * Experience with lab instrumentation such as oscilloscopes, logic/protocol analyzers for debugging embedded systems at HW level * Experience developing, debugging, and shipping software products on large code bases that span platforms and tools. * Experience leading complex features or projects across multiple teams * Experience with wireless or wired communication protocols such as USB, PCIe, Ethernet, Bluetooth and WiFi * Prior full life cycle firmware development experience to bring a high volume product from design to mass production * Prior experience in supporting large volume electronics manufacturing ### 職缺自我評估 這是比較新的職缺,同樣也是面向嵌入式的職缺,而且研究的產品是VR,AR,我對於此方向是有興趣的,實驗室的研究主題也是VR,屬於想要走的嵌入式職缺,而研究的產品也是我有興趣的 符合條件和待改善的部份也和Google的嵌入式職缺差不多 --- ## [GOOGLE - Software Engineer, University Graduate](https://www.google.com/about/careers/applications/jobs/results/137721392706527942-software-engineer-university-graduate-2025?location=Taiwan&page=3) ### 職缺需求 * Minimum Qualifications: * Bachelor's degree in Computer Science, related technical field, or equivalent practical experience. * Experience in computer science, data structures, algorithms, and software design. * Experience in Software Development and coding in a general purpose programming language. * Preferred Qualifications: * Master's degree or PhD in Computer Science or a related technical field. * Experience programming in C, C++, Java, or Python. * Experience with Unix/Linux or Windows environments, distributed systems, machine learning, information retrieval, and TCP/IP. --- ### 自我評估 個人對於刷題不會排斥,對於表達也很有信心,所以也有面向Google SWE的職缺,而且Google的Embedded Systems也是會考刷題的,所以打算一起準備 * 符合條件 * 符合職缺對學歷的要求,擁有計算機科學相關領域的碩士學位,具備扎實的計算機基礎知識,包括資料結構、演算法及軟體設計能力。 * 過去的經歷和作品偏向純打code的流程,碩論的系統也是做VR的應用系統開發。 * 擁有機器學習基礎知識及經驗,對應在機器學習與相關應用的需求。 * 待改善 * 加強對分散式系統的理解,可專注於學習負載平衡、資料一致性與容錯機制等技術,去研究節點之間的協作方式以及要怎麼通過分佈式演算法來提升系統的高可用性和高效性。特別是針對高併發環境中的延遲問題、服務切換策略以及故障恢復的方案,去探討最佳的設計模式與實現策略等等。 * 需要加強網路協議的理論與實踐,深入理解從應用層到傳輸層,再到網路層的封包交換過程,掌握不同層之間的功能。關注 TCP 的連接管理、流量控制、擁塞控制等等細節,以及如何在複雜的網路環境中優化通訊效率。還要學習安全性協議的應用(如 TLS)、網路地址解析機制(如 DNS),以及各種網路堆疊協定如何互相協作等。 * 還不熟悉 Linux 環境,可著重於學習 Shell 腳本及常見工具的運用模式,如如何有效應用pipe和重導向,以及在複雜情境下進行系統監控、資源管理和錯誤診斷的流程。透過更深入地研究 Linux 在核心層面的記憶體管理、行程與執行緒調度、系統呼叫與中斷機制等。 --- ## [瑞鼎 - 軟體設計工程師](https://www.104.com.tw/job/7b7kc?jobsource=index_s_cs) ### 職缺需求 * 工作內容: * 負責 C# 之分析設計及程式撰寫 * 負責 Android APP/SDK 之分析設計及程式撰寫 * 負責 Linux Kernel Driver 開發 * 量產測試軟體開發和維護 * 客製化軟體需求開發 * 協助客戶解決專案量產問題 * 其他條件: * 程式設計技能:Java,C,xml,C# * 熟悉 Android Studio,Android ADB command * 熟悉 Linux Kernal Driver,具備 display driver或指紋辨識 driver經驗者佳 * 具有 Windows 驅動程式開發經驗佳 * 具備建立 Android BSP 實務經驗者佳 * 具有韌體程式設計經驗者佳 * 具有Display或指紋辨識相關產業經驗者佳 --- ### 自我評估 * 符合條件 * 具備C與C#程式開發經驗 * 待改善 * 由於對 Android APP/SDK 的開發經驗有限,需學習 Android Studio 的專案設定與架構,包括 UI 設計工具的應用、程式碼調試與模擬器測試的完整操作流程,也需要熟悉 Android ADB command 的使用,例如設備連線、日誌查看及應用程式安裝,還要了解 Android BSP 的製作與調試過程,特別是 bootloader、kernel 和 device tree 的配置與修改方法。 * 缺乏 Linux Kernel Driver 的開發經驗,學習 Linux Kernel 的內部架構與模組設計原則,掌握設備驅動程式的開發框架、內核 API 的使用,以及 I2C 和 SPI 等硬體通訊協議的原理與實作方式,還要進行實際的驅動程式開發與測試練習,以加強對底層硬體與軟體整合的實務能力,並能應對多樣化的硬體驅動需求。 * 沒有測試軟體的開發與維護方面經驗,測試案例的撰寫、自動化測試工具的使用及測試環境的搭建,還需熟悉如何開發穩定且可維護的測試工具,並瞭解常見的品質控制方法。 * 對 Display 或指紋辨識相關技術的理解不足,要學習顯示面板與指紋模組的核心運作原理,包括影像處理技術、硬體驅動程式的開發及性能優化技巧,同時需掌握如 MIPI 或 UART 的通訊協議規範,並通過實踐學習相關硬體驅動與應用整合的設計與測試流程,以提升在這些技術領域中的專業能力與實務經驗。 --- ## [聯詠 - 系統應用工程師(S4)](https://www.104.com.tw/job/8kiu4?jobsource=joblist_bact_n) ### 職缺需求 * 產品線描述: * Mobile ASIC 產品線,將ASIC導入 Mobile 平台,如手機平台等,讓使用者感受到新的視覺效果提升的體驗。 * 工作說明: * Embedded 系統程式開發 * Android Display/Graphics framework 客製化 * 平台系統問題分析與效能優化 * 必要條件: * 碩士以上,資訊、電子、電機相關系所畢業 * 熟悉 Embedded Linux 系統程式開發 * 熟悉 C/C++/Java程式語言 * 具有Android Framework/HAL/driver 開發經驗尤佳 --- ### 自我評估 * 符合條件 * 具備C與C++程式開發經驗 * 待改善 * 對 Embedded Linux 系統程式開發的了解有限,要系統化學習 Linux 系統的基本架構與嵌入式的開發流程,其中包括了交叉編譯工具鏈的配置、文件系統的建立,以及核心驅動模組的開發與調試,同時需要掌握如何進行系統資源管理與操作介面的設計,去強化開發與部署嵌入式應用的能力。 * 在 Android Display/Graphics framework 的客製化開發沒有經驗,應學習 Android 系統的圖形架構原理,理解其 Framework 層與 HAL 層的互動機制,同時也需要研究顯示驅動的開發與優化技術,還應熟悉 Android 驅動層的開發工具與調試方法,以能進行從硬體到應用層的完整系統整合與功能調校。 * 缺乏平台系統問題分析與效能優化的經驗,需要學習系統性能瓶頸分析的基本方法,包括使用 profiling 工具進行效能監控、記憶體與 CPU 資源的分析,以及軟硬體協作的優化技巧,同時應掌握常見問題的排查流程,結合效能分析數據設計出具針對性的解決方案,以提升整體系統的穩定性與效能表現。 --- ## 面試題目 #### GOOGLE - Software Engineer, Embedded Systems, Platforms [[請益求職準備]google的embedded 職缺需要什麼水平](https://www.dcard.tw/f/tech_job/p/256850576) [2023 Google SWE Embedded面試分享](https://medium.com/@k2345777/google%E8%BF%BD%E5%A4%A2%E8%A8%88%E7%95%AB-f5d62664a0d0) #### GOOGLE - Software Engineer, University Graduate [SWE心得分享 - 從面試到1年Googler - 面試篇](https://www.dcard.tw/f/tech_job/p/253013106) [Google Software Engineer University Graduate 2022 面試心得](https://www.dcard.tw/f/tech_job/p/238108219) ## 模擬面試 👨‍💼 : interviewer 👨‍🎓 : interviewee --- 👨‍💼 : 請解釋深度學習中過擬合的原因以及如何減少過擬合的影響? 👨‍🎓 : 過擬合的原因是因為如果模型比較複雜,且訓練集也比較少的情況下,會導致模型在訓練集上表現的特別好,太過於變成訓練集的模樣,導致在測試集上表現會不好。 而減少過擬合的影響,在我過去期末訓練CNN的專案中,我有使用Batch Normalization,並且我也有適當調整模型的複雜度 👨‍💼 : Batch Normalization的功用是? 👨‍🎓 : Batch Normalization可以讓每一層的輸入更為穩定,幫助模型更快、更穩定的學習,也不會太依賴某些特定的輸入特徵,能更好的學到整體規律 👨‍💼 : 那Adam和SGD有什麼主要區別?什麼情況下會選擇使用Adam而不是SGD? 👨‍🎓 : SGD是只有依照目前的梯度去更新權重,比較適合處理簡單損失函數,但在不平滑或稀疏的損失函數中可能收斂速度比較慢。 Adam是會根據動量和動態調整學習率,動量會考慮到過去的梯度,適合不平滑的損失函數,並能更快收斂。 會選擇Adam的情況是在一開始的訓練階段,因為Adam通常可以加速收斂。 當模型架構較深或數據稀疏時,Adam的動態調整學習率的特性更有效。 但是如果需要更高的梯度的精確度,SGD進行微調可能比較有效。