# 資訊科技產業專案設計課程作業 3 contributed by <`TonyLinX`> ## 工作職缺 >自 IC 產業結構和軟體工程師的機會和《0 到 100 的軟體工程師面試之路》所及的公司對應的官方網站中,找出較符合自身興趣/規劃的職務描述 (即 JD [Job Description],至少找出 3 份),分析上述職缺所需要的能力,探討自己在專業上匹配的程度。 ## TSMC - Intelligent Manufacturing System Engineer (IMC) [職缺網址](https://careers.tsmc.com/en_US/careers/JobDetail/Intelligent-Manufacturing-System-Engineer-IMC/16026) ### 職務內容與能力需求分析 #### 智慧製造系統開發與 AI 整合能力 職缺說明將主要工作歸納為「System Development and AI Integration」,包含: * 開發具備自動化與進階控制的智慧製造系統、 * 將 AI 模型導入產線以提升生產力與品質、 * 建立即時資料系統支援決策。 所需能力包括: * 熟悉軟體系統設計與實作,能在實際製造環境中部署與維護系統。 * 具備使用機器學習/深度學習模型解決實務問題的經驗,且能與既有製程與設備整合。 * 理解自動化與製程控制的基本概念,能將感測資料、設備狀態與決策邏輯串接成完整流程。 #### 製造問題分析、資料科學與統計能力 職缺在「Problem Solving」部分強調:需要將 business 需求轉化為技術解法,並透過大數據分析找出與解決製造挑戰。 其他平台對同職缺的描述,也明確指出熟悉 machine learning、data visualization、statistical analysis 和 system development 是關鍵能力。 所需能力包括: * 能處理大規模製程/設備資料,進行資料清理、特徵萃取與統計分析。 * 能利用機器學習或統計方法建構預測、分類或異常偵測模型。 * 能將分析結果轉化為具體的改善方案(如派工策略調整、設備維護策略優化)。 #### 專案管理與跨部門溝通協作能力 職缺中的「Project Management」內容包含: (1) 確保團隊與使用者間的溝通清楚順暢, (2) 主導跨部門解決方案的整合,並關注系統整體效能與穩定性。 所需能力包括: * 能理解製造端、設備端與 IT/資料科學端的語言與需求,扮演 technical translator。 * 能在專案中主動追蹤需求、時程與風險,協調不同角色完成同一目標。 #### 關鍵系統與技術領域 職缺進一步列出多個核心系統與功能,揭露了此職位的技術重點: * Production Scheduling and Manufacturing System 透過排程與派工演算法最佳化工單流程、縮短 cycle time、確保準時交貨。 * Advanced Process and Equipment Control System 以奈米級精度控制製程與設備,並透過 real-time anomaly detection and diagnostics 維持晶片品質。 * Quality Control and Defense System 使用資料分析與機器學習提升產品品質、降低不良率。 * Vision AI Applications 透過 Vision AI 進行缺陷偵測、樣式辨識與自動化檢測,以提高良率並支援預測性維護。 * Workflow Automation 以自動化方式簡化流程、減少人工操作、提升整體運營效率。 這些系統背後共同指向幾個核心能力: 對半導體製程與設備的基本理解、異常偵測與品質管控的統計/機器學習能力,以及將演算法落地為穩定系統的工程實作能力。 ### 自身專業背景與職缺需求的匹配度 * 智慧製造系統開發與 AI 整合的匹配度 * 碩士階段的研究主題為「Unsupervised Anomaly Detection and Domain Generalization for High-Resolution Industrial Images」,並參與 Silicon Carbide (SIC) Ingot Defect Inspection,平時就在研究異常偵測或缺陷檢測相關的領域。 * 在「Image Recognition and Optimization System for Medications in Transparent Packaging」專案中,負責開發多視角、多光源的影像蒐集與系統整合,解決因反光與光照不一致導致的模型失效問題,證明不只會實做別人的方法,還能把分細語驗證問題,並提出自己方法進行改善。 * 資料科學、異常偵測與製造問題分析的匹配度 * 碩士研究本身即聚焦於「異常偵測」與「domain generalization」: * 對高解析度工業影像設計 Unsupervised Anomaly Detection 架構。 * 研究如何在光照、反光、domain shift 下保持模型穩定,這與職缺中提到的 real-time anomaly detection、品質防禦系統本質相同,只是資料型態從設備/製程 log 延伸到影像。 * Vision AI、缺陷偵測與品質防禦系統的匹配度 * 職缺在「Vision AI Applications」段落中明確指出:使用 Vision AI 進行缺陷偵測、樣式辨識與自動化檢測,以提升良率並支援預測性維護。 * 大學專題到碩士研究,整體主軸一直圍繞 Computer Vision 與 Anomaly/Defect Detection: * 透明藥包系統:影像取得、反光處理、顏色校正與藥物辨識整合為一套系統。 * 工業影像 UAD 與 SIC 缺陷檢測:對應到實務上的 wafer/ingot 類缺陷問題,只是材質與設備不同。 * 技術技能欄位中亦明確列出「Computer Vision」與「Anomaly Detection」作為核心能力之一。 ### 模擬面試 面試官:為什麼你會選擇 unsupervised 的設定,而不是直接做 supervised segmentation 或 classification 呢?你怎麼看這兩種方法在工廠裡的 trade-off? 我:主要有兩個考量,標註成本跟 scalability。 在工廠裡,異常樣本本來就非常少,而且 defect 類型又具備多樣性。要對每一種缺陷都做 pixel-level mask,其實很難 scale,也不 realistic。而 Unsupervised / one-class 的設定只需要正常品,符合實際產線比較常見的情境。雖然 unsupervised 的 anomaly score 很難直接對應到 defect type,也比較敏感於 domain shift。我的設計就是在這個框架下,盡量把「對正常變異 robust」和「對真正缺陷敏感」這兩件事拉出 gap。 面試官:那你具體講一下你整個 model 的架構流程。從一張原始影像進來,到最後產出 anomaly map,中間每個步驟在做什麼? 我:流程可以簡單拆成幾個階段,Patch-based 切片與前處理,Teacher feature 抽取,Student 重建以及後處理與 thresholding。 面試官:你剛講 reverse knowledge distillation。為什麼要用 teacher–student,而不是直接用 autoencoder 或 reconstruction-based 方法?Teacher 帶來的好處是什麼? 我:我自己的理解是這樣,傳統 AE 要從 raw pixel 學 representation,容易學到比較低階、局部的東西,而且常常 reconstruction 太強,連缺陷都一起重建回去。而DINOv2 這類 self-supervised ViT 已經學過大規模自然影像,feature 比較 semantic,也對微小噪聲比較不敏感。拿這種 feature 當 target,比從 0 開始學要穩定很多。 第二原因是 teacher–student 這種方法分工結構很清楚,Teacher 負責提供一個有結構的 feature space,student 只要學會 fit 正常 feature 分佈。如果 student 也看不到 anomalous feature,它在異常區域就會用「錯誤的預測」填補,這正好給我們 anomaly signal。 第三個原因是訓練上的穩定度Teacher 凍結,實際訓練只更新 student,訓練比較穩定,也利於日後換 student 架構或做 test-time adaptation。 面試官:那你覺得你這個設計最大的弱點是什麼?如果我直接講一句「你這個架構在 domain shift 底下會爛掉」,你會怎麼回? 我:我會承認,原始 RD 架構在某些 domain shift(尤其是光照)下確實會爛掉。原因是DINOv2 在 pretrain 時,對顏色、亮度、風格有某種 invariance,但那是針對自然影像的 augment。在工業影像裡,有些 illumination 變化會被 teacher 當成style 差異,feature 會有明顯 shift;student 沒看過這種 style,就把它當成異常。 ### 不足與未來補強方向 * 依公開資訊推測,IMC 團隊在部分系統會大量使用雲端、大數據與生產級 MLOps/DevOps 工具(如 container orchestration、CI/CD 等),此部分我並沒有相關經驗。 * 雖然已有工業影像與品質檢測經驗,但對半導體製程細節、設備種類與 fab 現場實際運作模式沒有任相關經驗以及知識。 ## MediaTek - AI and Computing Platform [職缺網址](https://www.104.com.tw/job/8tg72?jobsource=ref_chatgpt) ### 職務內容與能力需求分 * 研究與開發最先進的演算法 * 深度學習 * 數據分析 * 機器學習 * 自然語言處理 (NLP) * 影像識別 (Computer Vision) * 把 AI/LLMs 實際用在 IC 產品上 * 行動通訊 * 無線與寬頻連結 * 家庭娛樂晶片解決方案 ### 自身專業背景與職缺需求的匹配度 職缺要的是:研究、分析並致力於最先進的演算法:深度學習、數據分析、機器學習、影像識別。 而我目前的研究與專題幾乎完全落在這條線上: * 碩士研究主題:Unsupervised Anomaly Detection and Domain Generalization for High-Resolution Industrial Images * 聚焦在高解析度工業影像的 深度學習異常偵測,以 Dinov2-based knowledge distillation 架構結合對比學習與 domain generalization。 * 面對的問題包含光照變化、反光、domain shift 等,屬於非常實際的 Computer Vision 問題,也牽涉到 representation learning 與不平衡資料。 * Chest X-ray Unsupervised Anomaly Detection * 在醫療影像領域上實作 unsupervised anomaly detection,透過模擬異常與 latent space 的對比學習,將 AUROC 從 ~50% 提升到 ~76%。 * 過程中實際處理大量影像資料,設計 loss、評估指標,屬於典型的 deep learning / representation learning 任務。 * 透明藥包影像辨識系統 + IEEE Access 論文 * 結合影像蒐集、反光去除、顏色校正與分類模型,將 Top-1 accuracy 從 15.19% 拉到 96.85%。 * 這個專案既是 Computer Vision,又是完整 AI 系統的實作與優化案例。 這些經驗對職缺要求的 深度學習、機器學習、數據分析、影像識別 是直接對應的,差別只在於 domain 從醫療 / 工業影像,換成電信 /多媒體 / SoC 應用,本質一樣是「用 deep learning 解決實際訊號 / 影像問題」。 ### 模擬面試 面試官: 你挑一個最代表你的 AI 專案,簡單介紹目標、你的角色,以及你實際解決了什麼技術問題。 我: 我會選 透明藥包影像辨識系統,這個專案最後有發表在 IEEE Access。目標是醫院在核對藥餐包的時候,希望有一個自動辨識藥品內容 的系統,減少藥師反覆人工確認的負擔。實務上最困難的地方不是模型,而是藥包是透明塑膠袋,很容易產生 強反光與光照不一致,如果照明與拍攝條件沒處理好,模型會完全失效。 我主要負責的是整個影像蒐集與硬體控制流程,包含設計多光源、多角度的拍攝平台,調整光源位置與曝光參數。減少反光以及讓藥物外觀在不同拍攝條件下仍然穩定,再把反光去除、顏色校正與後端的辨識模型整合成一條 pipeline。 最後,我們這組的結果是 Top-1 accuracy 從大約 15% 提升到 96% 以上。這個專案讓我很有感的是:AI 不是只有 model,如果前端的資料 acquisition 與系統設計沒有做對,再強的模型也救不起來。 面試官: 你現在做的是工業影像的 unsupervised anomaly detection,domain 主要是工廠、SiC 這種場景。 你怎麼看這些背景跟我們 AI & Computing Platform 要做的晶片應用之間的關係?要怎麼轉移? 我: 我覺得 domain 不同沒錯,但問題型態是類似的,都是實體系統 + 資料 + 品質/異常的組合。我現在做的:CT 設備、工業相機 → 產生投影、影像 → 做缺陷與異常偵測。MediaTek 這邊是 modem、sensory data、畫面、語音 → 一樣是 data,最後要判斷品質、user experience 或做某種智慧功能。 我已經習慣先理解 裝置/sensor 的特性(幾何、雜訊、光照),再設計資料處理與 model,最後看怎麼放進一個可部署的系統。 在方法層面,我用到的技術(representation learning、對比學習、domain generalization、anomaly detection)都是可轉移的。 換成 MediaTek 的場景,可能就變成,對 RF/baseband 資料做 anomaly 或品質監控,對多媒體、影像、sensor 做增強與辨識,或是用 ML 去優化內部研發流程。 所以我不會說我只會工業影像,比較像是我已經有一套處理真實訊號 + 限制條件 + AI 的工作方式,domain 換成聯發科的應用,是可以被搬過來的。 面試官: 你的履歷有一個 CPU-based Parallel Matrix Multiplication System,看起來是偏系統與效能優化。 你可以講一下這個專案在做什麼?你做了哪些關鍵設計?為什麼不用直接上 OpenMP 或 CUDA? 我: 這個專案一開始是課程作業,但我把它當成一個從零設計改善效能 CPU side compute system 的練習。 我做的事情包括 * Thread pool 設計 * 實作一個 lock-free thread pool,每個 worker 有自己的 ring buffer, * 用 CAS 實作無鎖入隊 / 出隊,減少在高併發時的 lock contention。 * Work-stealing 機制 * 當某些 worker 沒事做時,可以從其他 queue 偷 work, * 降低負載不均的情況,提升 overall utilization。 * SIMD + cache-friendly blocking * 在運算核心用 AVX2 做 SIMD, * 搭配 block-based matrix multiplication,讓資料利用 cache locality。 * 效能評估 * 用 perf 看 cache miss、context switch、branch miss, * 跟 baseline 的 lock-based thread pool 比,效能大約提升 50%。 不用 OpenMP / CUDA 的原因很簡單: 目標是練習自己設計併行系統的能力,了解底層 contention、cache、排程這些細節,而不是靠現成 library。 這對我來說是一個補強:除了會寫 ML code 以外,我也知道如何去分析運算成本以及效能瓶頸是怎麼來的。 ### 職務內容與能力需求分 ### 不足與未來補強方向 * LLM、NLP、分散式訓練的實戰經驗 * JD 有明寫 AI/LLMs、分散式計算是加分項。 * 我現在的重心在 Computer Vision、UAD 與系統效能,對 LLM 與大規模分散式 training 的實務經驗比較少。 * 這部分可以透過 side project 或課程,補一些 LLM fine-tuning、分散式訓練與 on-device LLM 的實作。 * MediaTek 特定應用 domain(modem、多媒體、邊緣裝置)的背景 * 目前我在工業影像與醫療影像上比較熟,對 modem、無線通訊、多媒體編碼等領域還不算熟悉。 * 不過我已經習慣先補 domain 再設計模型,這在醫院藥包與 SiC 計畫都做。 * 未來進到 MediaTek 可以用同樣的方式快速補齊相關背景。 ## Google – Software Engineer, University Graduate, 2026(Taipei / New Taipei) [職缺網址](https://www.google.com/about/careers/applications/jobs/results/135117392874218182-software-engineer-university-graduate-2026?degree=BACHELORS&location=Taiwan&q=Software%20Engineer%2C%20University%20Graduate%2C%202026) ### 職務內容與能力需求分 * 學歷與 Computer Science 基礎 * 需具備 Computer Science 或相關技術領域學士學位,或同等實務經驗。 * 需有 computer science、data structures、algorithms、software design 相關經驗與訓練。 * 程式與系統開發能力 * 需有 software development 經驗,能在至少一種 general-purpose language(例如 C/C++/Java/Python 等)中進行實作與開發。 * 依照 Google 官方對 Software Engineer, University Graduate 這個角色的描述: * 開發 next-generation 技術,處理 大規模系統設計、網路、資料儲存、安全、AI/ML、NLP、UI 和行動裝置 等範疇。 * 針對公司關鍵專案設計、實作、測試、部署與維護軟體。 * 需要能在小而多元的團隊中,對 scalability、access to data、performance 等議題提出解決方案。 * 期望工程師具備: * 技術上的廣度與彈性 * 能快速切換專案 * 願意主動承擔問題並展現 leadership qualities。 ### 自身專業背景與職缺需求的匹配度 #### 學歷與 CS 基礎:完全符合且略高於職缺門檻 * 職缺要求 CS 或相關領域學士,而我目前是 * 國立成功大學 資工所碩士生(GPA 4.3/4.3), * 大學為國立東華大學 資工系(GPA 4.38/4.5,系排前三名)。 * 系統性修過演算法、資料結構、作業系統、系統程式、電腦視覺等核心科目,並在專題與研究中實際應用。 在「學歷與 CS 基礎」這一項,我不只是符合 minimum qualifications,而是符合部分 regions JD 裡的 preferred(Master in CS / advanced degree) 要求。 #### 程式與演算法能力:具備新鮮人要求,另有分析效能的經驗 對照 JD:需要 general-purpose language + CS core。 我目前的對應情況: * 程式語言與開發實務 * Python: * 碩士研究、Chest X-ray UAD、MVTec AD 2、SiC CT pipeline 全部使用 Python / PyTorch。 * 實作完整 training / evaluation / visualization / data pipeline,不是只跑別人的 notebook。 * C / C++: * 在「CPU-based Parallel Matrix Multiplication System」專案中,以 C 語言搭配 Pthreads、AVX2 SIMD 寫出高效能矩陣乘法系統,實作 lock-free thread pool、per-thread ring buffer、work-stealing scheduling。 * 實測對 baseline lock-based thread pool 有顯著效能提升,並利用 perf 分析 cache misses、context switches、CPU utilization 等指標。 #### AI / ML / Computer Vision 經驗:屬於加分項,剛好是我的強項 對這個職缺來說,AI/ML 不是硬性 requirement,而是加分能力。 我在這個面向的優勢: * 工業影像 UAD(MVTec AD 2) * 碩士主題為 Unsupervised Anomaly Detection and Domain Generalization for High-Resolution Industrial Images。 * 使用 DINOv2 register + reverse knowledge distillation + contrastive learning,設計在光照變化、反光、陰影等 domain shift 下仍穩定的 anomaly detection pipeline。 * 醫療影像 UAD(Chest X-ray) * 與醫院合作的胸腔 X 光異常偵測,從 baseline AUROC 約 50% 提升至 76%,實際證明自己有能力在 noisy data 上設計可行模型與訓練流程。 * SiC Ingot CT Defect Inspection * 結合 3D CT reconstruction 與 defect analysis,從資料擷取、重建、切片到缺陷偵測,實際把 computer vision 應用到半導體品質測試場景。 這些經驗讓我在 Google 內部若分配到 ML/CV/品質監控/anomaly detection 等相關專案時,能快速上手,也能和 ML team 有有效的技術溝通。 ### 模擬面試 Interviewer: Pick one project from your resume that you’re most proud of, and walk me through the technical details and the main challenges. Me: I’ll choose my CPU-based Parallel Matrix Multiplication System. The goal was to go beyond a naive multi-threaded implementation and really understand how to design a high-performance compute engine on CPU. So instead of using OpenMP or a simple thread-per-task model, I implemented my own lock-free thread pool in C with the following components: * Per-thread ring buffers for tasks Each worker thread owns a ring buffer to store tasks. The ring buffer supports lock-free push/pop using atomic operations (CAS), which avoids global locks and reduces contention. * Work-stealing scheduler When a worker finishes its own queue, it can steal tasks from other workers’ queues. This balances the load when some threads get more tasks than others. * Hybrid busy-spin + semaphore If the queue is empty for a short time, the worker spins briefly to avoid context switch overhead. If it stays idle longer, it sleeps on a semaphore to save CPU. This hybrid strategy reduces both latency and CPU waste. * SIMD + block-based matrix multiplicationSIMD On the compute side, I used AVX2 intrinsics and blocked the matrices to fit better in cache, which significantly improved memory locality. In the end, my system achieved around 50% performance improvement over a baseline that used a simple lock-based thread pool. Interviewer: Your research is in unsupervised anomaly detection. Can you explain that project, but focus on the software engineering aspects rather than just the machine learning part? Me: Sure. The research question is: how to detect anomalies in high-resolution industrial images without labeled defects, and make the model robust to domain shifts like lighting changes. From a software engineering perspective, I had to build a fairly complete pipeline: * Data pipeline * I designed a dataset structure for multiple domains: regular lighting, overexposed, shadows, reflections, etc. * I implemented a custom PyTorch Dataset and DataLoader to handle large high-res images, including patch-based cropping and sliding windows to keep memory under control. * Modular model code * The encoder is based on DINOv2, and the student is a transformer-based decoder. * I separated the code into modules: encoder wrapper, student model, loss functions (distillation loss, contrastive loss), and evaluation scripts, so I could swap components without rewriting everything. * Experiment management * I used configuration files (YAML) to track different settings: patch size, overlap ratio, learning rate schedule, augmentation parameters, etc. * I wrote logging utilities to record metrics, loss curves, and sample anomaly maps so I could compare experiments. * Evaluation and debugging tools * I implemented metrics like AUROC and AU-PRO@0.05, and visualized feature spaces with PCA/UMAP to debug whether the encoder was actually learning lighting-invariant representations. * When performance dropped, I could quickly reproduce a run and bisect changes. The ML side is important, but in practice, what made the project move forward was treating it as a software system: clear abstractions, reproducible experiments, and good tooling for debugging and comparison. ### 不足與未來補強方向 * 缺乏真正的大規模 production system 經驗 * 目前主要在 academic / lab 專案與課程作業,還沒有參與數十人以上團隊維護的 production codebase。 * 這會是進公司初期需要花時間適應的部分,包括 code review 流程、deploy pipeline、oncall、SLO 等。 * 英文口說與系統設計表達 * 閱讀與書寫英文 paper、文件沒有問題,但在全英文面試下,解釋 system design 與 trade-off 的流暢度還有提升空間。 ## Resume > 這個 resume 我會在 objective 去放關於我要應徵的職位內容,例如我想應徵 IMC 我就會在開頭就表明我要應徵哪個職缺。所以如果我今天要換成 MediaTek or Google,我就會針對那個職缺進行改動。 [TonyLinX Resume](https://docs.google.com/document/d/1D5xC7Y1xlrBPdp4pmVUn62KnT2g0BOqv/edit?usp=sharing&ouid=105565369668107352711&rtpof=true&sd=true)