# 資訊科技產業專案設計課程作業 3 ## [Google - Software Engineer II, Diagnostics, Tools, Google Cloud Platform](https://www.google.com/about/careers/applications/jobs/results/93255956128768710-software-engineer-ii-diagnostics-tools-google-cloud-platform?location=Taiwan&target_level=EARLY) ::: spoiler Job Description **Minimum qualifications:** * Bachelor’s degree or equivalent practical experience. * 1 year of experience with software development in one or more programming languages (e.g., Python, C, C++, Java, JavaScript). * 1 year of experience with data structures or algorithms. **Preferred qualifications:** * Experience in software development experience with performance, systems data analysis, diagnostics tools, and debugging. * Experience in developing on Linux. * Experience with C/C++, Python and Golang. * Experience in system health, diagnosis and resolution, and software test engineering. **About the job** Google's software engineers develop the next-generation technologies that change how billions of users connect, explore, and interact with information and one another. Our products need to handle information at massive scale, and extend well beyond web search. We're looking for engineers who bring fresh ideas from all areas, including information retrieval, distributed computing, large-scale system design, networking and data storage, security, artificial intelligence, natural language processing, UI design and mobile; the list goes on and is growing every day. As a software engineer, you will work on a specific project critical to Google’s needs with opportunities to switch teams and projects as you and our fast-paced business grow and evolve. We need our engineers to be versatile, display leadership qualities and be enthusiastic to take on new problems across the full-stack as we continue to push technology forward. Behind everything our users see online is the architecture built by the Technical Infrastructure team to keep it running. From developing and maintaining our data centers to building the next generation of Google platforms, we make Google's product portfolio possible. We're proud to be our engineers' engineers and love voiding warranties by taking things apart so we can rebuild them. We keep our networks up and running, ensuring our users have the best and fastest experience possible. **Responsibilities** * Develop tools and diagnostics in support of system health verification, performance characterization, and on-going reliability of machine learning and AI acceleration platforms. * Develop software that executes in multiple systems in parallel, and develop dashboards to analyze the results. * Enable the testing and decision making on hardware and software design and deployment. * Enhance the quality, performance processes, or coverage of the diagnostic tool or utility of the Google Cloud platform. * Collaborate with Google Software, Firmware, and Hardware teams to design, plan, implement and debug. ::: ### 分析職缺 #### 工作內容分析 * 開發及維護**診斷工具**,確保 ML/AI 平台的效能和穩定性。 * 開發能在多個系統上**並行**執行的軟體,以及分析用的 dashboard。 * 跨團隊合作(軟體、韌體、硬體),進行系統的設計、規劃、實作和除錯。 #### 符合 * Bachelor’s degree. * Experience with C/C++, Python, data structures and algorithms. * Experience in developing on **Linux**. * Experience in software development experience with performance, systems data analysis and debugging. #### 不符合 * Experience in software development experience with diagnostics tools. * Experience in system health, diagnosis and resolution, and software test engineering. #### Key words * Diagnostics tools, systems analysis (performance and health), Linux, parallel. ## [Nvidia - System Software Engineer, GPU Server Diag - New College Graduate](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/System-Software-Engineer--GPU-Server-Diag---New-College-Graduate_JR1987112?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0) ::: spoiler Job Description We are seeking software engineers to work on next-generation graphics and computing products. Our charter is to build the most stressful set of applications a GPU or high performance computing server would see in its life cycle. The best candidates will have strong C++ and python programming skills, thorough knowledge of graphics concepts and algorithms, a solid foundation of systems software with emphasis on OS fundamentals, and a deep understanding of current generation PC/hardware architecture. Excellent communication skills and a dedication to meticulous engineering practices are a requirement. As a system software engineer, you will extensively use your knowledge of operating systems, algorithms, and computer architecture to provide robust and efficient solutions to validate and test next generation processors. **What you'll be doing:** * Working closely with architecture, hardware and driver teams through the product development lifecycle of computing and graphics processors, as well as compute products. * Responsible for crafting software tools and infrastructure required for new chip development, validation, and productization. * You will assess new hardware features and architect manufacturing diagnostic tests using pre-beta CUDA and OpenGL extensions. **What we need to see:** * BS or MS degree in one of the areas of Electrical Engineering, Computer Engineering, Computer Science or equivalent experience * Strong C/C++ and python programming skills * Familiarity with PC architecture, and ability to work close to the hardware * Background with PCIE, Nvlink or server product technologies like Infiniband, Ethernet is a plus * Previous experience of working on a large system software code base is preferable * Very strong problem solving and debugging skills * Ability to self-manage, show leadership, and have good interpersonal skills ::: ### 分析職缺 #### 工作內容分析 * 與架構、硬體和驅動程式的團隊合作,參與整個產品的開發生命週期。 * 開發用於**晶片開發、驗證和產品化的軟體工具**和架構。 * 使用預發布版本的 CUDA 和 OpenGL **評估新硬體功能**。 #### 符合 * BS degree in Computer Science. * Experience in C/C++ and python. * problem solving and debugging skills. #### 不符合 * Familiarity with PC architecture, and ability to work close to the hardware. * Background with PCIE, Nvlink or server product technologies like Infiniband, Ethernet. * Previous experience of working on a large system software code base. #### Key words * Graphics concepts, OS, PC/hardware architecture, diagnostic tests, PCIE, Nvlink. ## [Nvidia - GPU Firmware Engineer - New College Graduate](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/GPU-Firmware-Engineer---New-College-Graduate_JR1985923?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0) ::: spoiler Job Description We are now looking for a Software GPU/Server/Security Engineer. The GPU firmware team is searching for FW Engineer to develop security, server, or MCU firmware/software for the next generation of NVIDIA DGX server, GPU baseboard, and Tesla boards. You will participate in a focused effort to develop and productize ground-breaking solutions that will be applied on many NVIDIA products. You'll find the work is exciting, fun, and meaningful challenging. We have deadlines, customers, and competitions. We are the leading artificial intelligence computing company and are paving the way with innovations in gaming, visualization, supercomputing and self-driving cars. As a key member of GPU Firmware Team, you will be a key leader responsible for DGX/GPU software stack. **What you'll be doing:** * Be involved in the definition, architectural design, and development of security firmware for NVIDIA DGX products with an opportunity to craft its future. * Assist with defining and making sure software development process meeting security standards. * Perform security threat modelling for our software. * Design and/or make recommendations for security solutions that apply to the software to satisfy DGX/GPU server security guidelines and requirements. **What we need to see:** * Bachelors or higher in electrical engineering, computer science, or computer engineering (or equivalent experience). * Have software design, development, analysis or equivalent experiences. * Experience in building and implementing secure software. Familiar with DMTF PLDM, MCTP, SPDM standards is a plus. * Background in embedded software development in Linux environment. Background with FreeRTOS. Background with security technologies: Root of Trust, etc. * Experience in threat modeling and modeling attack-vectors. * Background with SBIOS and BMC firmware is a plus. Strong programming skills in Ada/Spark, C/C++, algorithms, and data structures. * Strength being hands-on with development in addition to experience in software security. Deep understanding of computer architecture, operating system fundamentals. * A strong teammate; self-motivated with positive attitude with a motivation to learn, grow and build. **Ways to stand out from the crowd:** * A successful candidate should be able to work independently and highly self-motivated. He or she should drive issues with little or no supervision. * A key success for this position is not only a thorough understanding of system architecture, security and software, but also solid grasp of system design, use case requirements and software stacks. * Excellent communication skills, flexible in task assignments and working under pressures are also indispensable for this candidate. ::: ### 分析職缺 #### 工作內容分析 * 參與 DGX/GPU 產品的韌體設計和開發。 * 確保開發流程符合安全標準,並進行軟體安全測試。 #### 符合 * BS degree in Computer Science. * Have software design, development, analysis or equivalent experiences. * Programming skills in C/C++, algorithms, and data structures. #### 不符合 * Experience in: * Building and implementing secure software. Familiar with DMTF PLDM, MCTP, SPDM standards is a plus. * Embedded software development in Linux environment. * FreeRTOS security technologies: Root of Trust, etc. * Threat modeling and modeling attack-vectors. * SBIOS and BMC firmware is a plus. * Strong programming skills in Ada/Spark. * Deep understanding of computer architecture, operating system fundamentals. #### Key words * Security firmware, DGX, GPU, embedded software, Linux, FreeRTOS, system design. ## [Mediatek - Computer Vision Software Engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120240325009?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3D%26order%3D%26page%3D1%26searchKey%3D%26category%3D9020%26workExp%3D0011%26branch%3D0000009255%26program%3D) ::: spoiler Job Description **Job Description** 1. Design, implement, and optimize DSP code to enhance AI and computer vision algorithm performance. 2. Engage and collaborate with global AI and computer vision technology partners. 3. Validate hardware IP and perform detailed performance evaluations. **Requirement** 1. Excellent mastery of C/C++ programming skills. 2. Familiar with the technologies of computer vision and AI. 3. Experience in parallel programming and multithreading. 4. Experience with GPU, VPU, DSP, or APU accelerators is a plus. 5. Experience with OpenCL programming is a plus. ::: ### 分析職缺 #### 工作內容分析 * 設計**數位訊號處理 (DSP)** 的程式碼,來優化 AI 和電腦視覺演算法的效能。 * 對於 DSP 相關的 **hardware IP** 進行驗證和效能評估。 #### 符合 * Experience in C/C++. * Experience in computer vision and AI. * Experience in parallel programming and multithreading. #### 不符合 * Experience with GPU, VPU, DSP, or APU accelerators is a plus. * Experience with OpenCL programming is a plus. #### Key words * DSP, AI, computer vision, parallel, multithreading. #### 參考資料 * [intellectual property core (IP core)](https://www.techtarget.com/whatis/definition/IP-core-intellectual-property-core) ## 自我評估與改進方向 ### 需加強的自身能力 * 四個職缺皆需 C/C++,因此要持續刷題 (C++) 同時熟練演算法與資料結構,並複習 C 語言。 * [grind 75](https://www.techinterviewhandbook.org/grind75/) * [你所不知道的 C 語言](https://hackmd.io/@sysprog/c-prog/) * [C 語言考古題](https://hackmd.io/@JJJJJJ/Sk4s24gIT) * 改進 Linux 核心實作的期末專題 (concurrency),使用診斷工具進行多方面效能分析 (perf, valgrind, gprof),並複習課堂講義。 * [Linux 效能分析工具 - perf 原理和實務](/qDsVNbZwQia8UGW1ItAhEg) * [並行和多執行緒程式設計系列講座](https://hackmd.io/@sysprog/concurrency/%2F%40sysprog%2Fconcurrency-concepts) * 複習 OS 與計算機組織。 * [考研筆記 - 計算機組織 (大碩張凡)](/NyKLISh4TeyVbQnZVppPDQ) * [作業系統 Operating System 筆記](/FYFDfZJOR3-SQl07jJ5vcg) ### 需學習的新領域 * GPU 架構 * GPU 互連技術 (PCIe, NVLink) * 嵌入式系統 (FreeRTOS) * 系統安全設計 ## 模擬面試 >R: Interviewer >E: Interviewee ### C 語言 --- R: What is the output of the following program? ```c void fun(int *p) { static int q = 10; p = &q; } int main() { int r = 20; int *p = &r; fun(p); printf("%d", *p); getchar(); return 0; } ``` E: 20. The function fun(p) receives the value of the pointer p, not the address of the pointer p. As a result, it cannot change the memory location that the pointer p points to. R: Write a function to determine if the input number is a power of 2 without using division. E: ```c int define2N(int n){ return (!(n&n-1) && n!=0) } ``` ### Operating System --- R: 請說明 program, process, thread 的差異。 E: Process 與 program 最主要的差異,在於是否處於執行狀態。 * Program 是儲存於 disk 中,尚未被執行的程式碼。 * Process 則是位於記憶體中的正在被執行的程式,具有生命周期。 * 而 thread 是使用 CPU 的最小單位,同個 process 的 threads 有共享的記憶體空間。 R: 那在一個多執行緒的應用程式中,以下哪些資源是被 threads 共享的?哪些是每個 thread 獨立的? ``` - Stack - Heap - File descriptors - Program counter - Registers - Global variables - Static variables - Thread-local storage ``` E: 共享的資源包括 * Heap * File descriptors * Global/Static variables * Code section E: 獨立的資源包括 * Stack * Program counter * Registers * Thread-local storage R: 若兩個 thread 需要同時存取 critical section,可以怎麼處理? E: 可以使用 mutex lock 來確保同一時間只有一個 thread 能進入 critical section。 R: 如果改用自旋鎖 spinlock 會有什麼優缺點? E: Mutex lock 會讓沒有取得鎖的 thread 進入 sleep 狀態,等釋放後再喚醒,因此可能有較高的 context switch 開銷。而 spinlock 優點是可以避免 context switch,但缺點是會持續消耗 CPU 資源,所以適用於 critical section 執行時間很短的情況。 ### 面試題目參考資料 * [C 語言考古題](https://hackmd.io/@JJJJJJ/Sk4s24gIT) * [考研筆記 - 計算機組織 (大碩張凡)](/NyKLISh4TeyVbQnZVppPDQ) * [作業系統 Operating System 筆記](/FYFDfZJOR3-SQl07jJ5vcg) ## RESUME [resume](https://drive.google.com/file/d/1uD-IzJ8v5OK7CgnLleyEJnVh58cbtox_/view?usp=sharing)