# 資訊科技產業專案設計課程作業3
### [Google Silicon Engineer, University Graduate, 2024](https://www.google.com/about/careers/applications/jobs/results/118684907669988038-silicon-engineer-university-graduate-2024?location=Taiwan&q=2024)
:::spoiler
**Minimum qualifications:**
* Bachelor's degree in Engineering or equivalent practical experience.
* Academic coursework in computer architecture (e.g., core, cache, memory, etc.).
* Experience with C/C++ or RTL.
**Preferred qualifications:**
* Advanced degree in Computer Science, Electrical Engineering, or related field.
* Experience designing/implementing or validating RTL design (e.g., core, cache, fabric, memory, codec, etc.).
* Knowledge of OS, Firmware, or software stack.
* Knowledge of performance or power architecture, power estimation, modeling, or optimization of processor or ASIC.
* Excellent scripting language, C/C++ programming, and software design skills.
:::
#### 自身評估
* 優勢
* 有C/C++長期撰寫的經驗。
* 修過一整學期的RTL verliog碩班課程。
* 基礎學科的部分幾乎都有修習過。
* 有過暑期的軟韌體intern經驗。
* 不足
* 沒有進階的硬體架構實作經驗。
* 對於ASIC不熟悉。
* 並沒有進一步的去完善底層軟韌體設計的技能樹。
### [Nvidia System Software Engineer](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/Embedded-Security-System-Software-Engineer_JR1969065?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0&locationHierarchy2=0c3f5f117e9a0101f6422f0fe79d0000&locationHierarchy2=0c3f5f117e9a0101f63dc469c3010000)
:::spoiler
**What you will be doing:**
* Design/implement security and system software solutions for Tegra Automotive, Embedded and Data Center platforms.
* Develop bare metal software and applications for various security use cases.
* You will be working on Safety(ISO 26262) & Security(ISO 21434) certification of the Software.
* Develop ROT (Root of Trust) SW in the cryptographic security system.
* Develop/enable Trusted Firmware projects such as ATF, Hafnium, other opensource projects, etc.
* Take an active role in the new silicon lifecycle, from pre-silicon simulation/emulation, test validation to power-on bring up phases.
* Specify and implement test cases while actively seeking improvements to test automation and software quality.
* Work closely with the architecture and different software and hardware design teams to improve the next generation of NVIDIA System-on-Chips.
**What we need to see:**
* B.S. or M.S. (or equivalent experience) in Computer Science, Computer Engineering, Electrical Engineering, or related field.
* New Graduates are welcome.
* Strong system software engineering skills combined with a drive to solve hard problems.
* Strong programming and debugging skills in C and C++.
* Good understanding of operating system internals and embedded systems.
* Problem-solving skills to identify complex security issues with software and hardware.
* Strong English written and oral communication skills to collaborate with other engineers (worldwide).
* A great teammate; self-motivated and the ability to work independently with minimal direction.
**Ways to stand out from the crowd:**
* Proficient in advanced and next generation CPU architectures for ARM or RISC_V.
* Good understanding of common cryptographic algorithms and techniques.
* Defensive security programming skills and penetration testing experience.
* Proven interests and attitude to strive for the most secure, reliable and quality firmware/software.
* Background with developing ATF (ARM Trusted Firmware) or ROT (Root of Trust) SW.
* Experience with ISO26262 & ISO21434 certification processes.
:::
#### 自身評估
* 優勢
* 有長達4年的C/C++開發經驗。
* 修習過微算機等嵌入式課程。
* 合作開發過大型軟體系統。
* 不足
* 對於CPU架構如ARM、RISC_V不熟悉。
* 對於圖像加密演算法不夠了解。
* 對於ISO26262 & ISO21434等標準沒有接觸過。
### [Synology Product Developer (網路系統軟體開發)](https://career.synology.com/zh-tw/HQ/position/181)
:::spoiler
**You are expected to have:**
* Proficiency in C/C++
* Familiarity with Unix/Linux environments
* Familiarity with standard network protocols: TCP/UDP/IPv4/IPv6/Ethernet
* Experience in Linux kernel communication between kernel and user space
**We're targeting candidates with:**
* Familiarity with Linux network stack
* Familiarity with wireless networks
* Prior experience in developing web-based user interfaces
* Prior experience in tuning network performance
:::
#### 自身評估
* 優勢
* 對於C/C++的使用時間很長,寫起來得心應手。
* 有在Linux環境開發過系統的經驗。
* 曾經在OS課程的作業裡撰寫過kernel space與user space溝通的程式。
* 不足
* 對於網路協定如:TCP/UDP那類非常不熟悉。
* 沒有開發過web-based UI的經驗。
* 並沒有了解過網路效能類型的問題。
### 模擬面試問答
> interviewer : :smile_cat:
> interviewee : :clown_face:
:smile_cat::你好,今天由我來替公司跟您進行一場面試,在這之前請您先介紹一下自己吧。
:clown_face::好的沒問題,我的名字是ZZZ,目前就讀於成大資訊系大四,近期希望能夠於畢業以前找一份正職工作。我熟悉的語言有C/C++,有產學合作經驗以及軟韌體工程的實習經驗。
:smile_cat::你能夠說明一下你的產學合作經驗是什麼嗎?
:clown_face::沒問題,我的產學合作經驗是與XX光電公司所合作的產線排程最佳化案,在這個案子裡面我們需要解決瓶頸效能機台的利用率問題,主要由C/C++語言實作基因演算法為主的排程系統,並透過python輸出圖像化排程結果。
:smile_cat::想請問你在這個案子中你主要負責什麼部分?以及這份案子主要由多少人共同進行?
:clown_face::這份案子的合作人員有四人,其中主要撰寫程式的工程師則只有兩人其中一位是我。而我在這裡面主要負責程式記憶體使用亮的管理,以及演算法複雜度的最佳化,因為案子初期的時候程式碼的架構不佳問題,導致我們後期需要重建整個專案,所以我在這之中學到很多。
:smile_cat::那你是如何發現程式的記憶體使用量過高的呢?你又是如何解決這個問題的呢?
:clown_face::在開發過程中某次,碩士班學長以及同組的組員說程式跑到一半會被OS殺掉,他們問我能不能想辦法解決。於是我就在程式執行的時候打開工作管理員,後來一查才發現windows系統會在程式使用超過2GB的RAM的時候把它殺掉,所以我才下手去監控程式的記憶體使用問題。而後我也發現了由於前面撰寫程式碼的人員,並沒有在基因演算法迭代的過程中把前一代的資料刪除,造成每一代的舊資料都持續保存,這是其一,其二呢是我發現C++的stl裡面sort這個函式可以讓我們自定義compare的函式,但由於我們當初所撰寫的compare函示是使用pass by value,所以他會把我們所設計的龐大資料結構的資料都複製一次,而我觀察我們並不會更動到他的值,所以我選擇使用pass by reference的方法,如使我就解決了問題。
:smile_cat::看來你對C++的程式撰寫具有一定的經驗,恭喜妳通過了這場面試。