## 2023 年「資訊科技產業專案設計」作業 3
## 相關工作職缺項目
[Software Engineer, Embedded Systems, Google Nest](https://www.google.com/about/careers/applications/jobs/results/141399940786987718-software-engineer-embedded-systems-google-nest?location=Taiwan&q=%22Software%20Engineer%22)
<details>
<summary>詳細內容</summary>
### Minimum qualifications:
* Bachelor’s degree in Computer Science, Electrical Engineering, a related technical field, or equivalent practical experience.
* 2 years of experience with embedded systems and Kernel or Linux development.
* Experience with software development in C/C++.
### Preferred qualifications:
* Master's degree in Computer Science or a related technical field.
* 3 years of experience with system level software development (consumer or enterprise).
* Experience working with global teams located in other regions and time zones around the world
* Passion for smart home and IoT technology.
* Excellent ownership, problem solving skills, and willingness to learn/grow.
Responsibilities
* Design and build the next generation of exceptional Nest branded devices.
* Develop Linux and Android system level software, including but not limited to bootloader, operating system, and device drivers.
* Conduct system integration tasks to achieve efficient, cost-effective, and delightful product solutions.
* Develop, enhance, debug, and maintain components, system and user features.
* Collaborate on projects with cross-functional teams and external SoC vendors, etc.
</details>
[Switch/Router/Gateway軟軔體設計工程師, Realtek
](https://recruit.realtek.com/Job/JobDetail?jobid=202)
<details>
<summary>詳細內容</summary>
大學以上,電機、資訊相關系所畢,具下列任一條件者佳:
(1)熟C、C++、Assembly、Linux。
(2)具網路embedded system開發經驗。
(3)對網路如Ethernet, TCP/IP, NAT, QoS, Network processor/protocols/Architecture有興趣者。
(4)對網路產品,程式設計有興趣者。
</details>
[System Software Engineering Intern - GPU, NVIDIA
](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/System-Software-Engineering-Intern---GPU_JR1974669?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0)
<details>
<summary>詳細內容</summary>
### What you’ll be doing:
You'd work with our GPU chips fellow SW engineers to enhance and develop our GPU chips Features and Tools for production use and next-gen GPUs use.
You'd refactor code to take advantage of NV's good frameworks to reduce complexity, improve consistency and modularity for all NV's GPU chips use.
You'd work closely with both hardware engineers and other system software engineers to design, develop, and debug features for our GPUs and mobile system-on-chip (SOC) devices.
### What we need to see:
Currently pursuing BS, MS or PhD in Computer Science or a closely related field at a university.
0 to 2 years of significant software development experience.
Demonstrate a hand on technical background; excellent C programming, C++, Perl/Python, and low-level driver experience.
You are an asset if you have familiarity with computer system architecture, microprocessor, and microcontroller fundamentals (caches, buses, memory controllers, DMA, etc).
Kernel experience with Linux, Android, Chrome, or Windows systems.
Experience with complex system-level debugging is invaluable.
### Ways to stand out from the crowd:
Understanding of Windows/System Programming/Compiler techniques.
Experience on big complex system-level SW build flow/maintenance/Open-Source Project.
Familiarity with large scale code refactoring
Experience with embedded system SW concepts, e.g.: RTOS and overlay programming models.
</details>
## Assessment
### System Job
* 系統端的軟體開發經驗
* 透過系統整合來優化系統的經驗
* Linux, Android, Chrome, Windows 的 kernel 經驗
* 系統端的除錯經驗
* 熟悉大規模程式重構
* 嵌入式系統軟體開發經驗,像是 RTOS 等等
### Self-assessment
* 混血四大電資
* linux kernel 相關專案開發經驗
* 曾在中研院資訊科學研究所,做 Neurosim 相關研究
* 缺乏 Android, Chrome, Windows 的 kernel 經驗
* 缺乏系統端的除錯經驗
* 不熟悉大規模程式重構
* 缺乏 RTOS 開發經驗
## 模擬面試
😎: 面試官 😀: 面試者
😎: 您好,先前在您履歷中有看到您,曾參與 linux 相關專案的開發,請您針對這部分說明一下。
😀:您好,面試官,(開始透過簡報說明),我是華鑫,過去在曾經在 fibdrv 進行開發,他是一個 device driver,目標是如何以高效率的方式計算 fibonacci 至第一百萬,我們會透過分析 fibdrv 的時間效能,並嘗試透過 Q-matrix 來改進 fibdrv 的計算,經過實驗後,時間可以改進 6%。
😎:很好,那關於您提到使用系統效能分析工具 valgrind 協助您進行開發,這部分你可以說明一下。
😀:像之前使用 linked list 來開發 queue 時,我們就會使用 valgrind 來幫助我們確認記憶體是否有正確釋放,或是在初始化時記憶體有無正確配置,避免存取到非法記憶體區域。
😎:理解,這部分確實很重要,那在這些專案開發中,分享您最印象深刻的部分
😀:目前正在學習專案上的除錯,這部分在大型專案時,特別重要也相當仰賴經驗,一開始其實是不太熟悉如何針對這些問題採取適當的除錯步驟,到後來漸漸上手,也獲得一定的成就感,我認為這是我值得深耕的部分。
😎: 那今天的面試到這裡
## 相關面試整理
1. process, thread的差異
2. spinlock, mutex, semophore 之間的差異及適用情況
3. 在開發時對 process, thread 考慮是什麼
4. 解釋 DeadLock
5. 解釋 Hazard
6. [準備工作面試(C語言)分享](https://www.dcard.tw/f/tech_job/p/238789639?cid=cab3300c-7a4e-4b5a-b533-2887ec512e51&fbclid=IwAR3fgbzke8Q2VeLGF4GMcC9YSKAYjCVWE_3JO_WvDAJp-9WFqwDD4jkFWcY)
7. [P公司](https://hackmd.io/@ds-algo/r1dKhTnb5#%E7%BE%A4%E8%81%AF%E4%B8%89%E9%A1%8C)