# 2023 年「資訊科技產業專案設計」作業 3
## 履歷
[Resume](https://docs.google.com/document/d/1cQgZc9cdMziFEpnWeuQfYvg3AX3olngxOkQdj0KfWmg/edit?usp=sharing)
## Google
### [CPU Compiler and Performance Architect, Devices and Services](https://www.google.com/about/careers/applications/jobs/results/141595920413139654-cpu-compiler-and-performance-architect-devices-and-services)
:::spoiler Job Description
**Minimum qualifications:**
* Master's degree in Electrical Engineering, Computer Science, or equivalent practical experience.
* 3 years of experience in backend compiler design for CPU scalar and vector engines.
* Experience with LLVM internals, back-end specifics, compiler loop improvement, resource management, scheduling, code generation.
* Experience in C or C++ and in Python or other scripting languages.
**Preferred qualifications:**
* 7 years of experience in compiler design for CPU scalar and vector engines.
* Experience with hardware architectures of CPU scalar and vector engines, including vector engines with machine learning support.
* Experience with the following technologies: XLA, TVM, MLIR, LLVM, deep learning models, and algorithms.
* Experience with CPU pipeline structure and hazards, cache, and memory organization.
* Expertise in LLVM scalar and vector code generation including instruction scheduling, software pipelining, register allocation, TableGen, LLVM IR, Machine IR.
**About the job**
As a CPU Compiler and Performance Architect, you'll be the key contributor to improve processor instruction set architecture, to develop innovative microarchitecture features, and to deliver Google’s advanced SoC products. You will collaborate with system performance and software teams to plan and conduct application and benchmark performance analysis and to project their performance at various design phases. Leveraging your CPU-specific knowledge and leadership, you’ll help guide junior CPU architects and work with engineers in power, thermal, security, physical design, and other subsystem teams to determine the CPU subsystem configuration and features, and to support the integration of CPU subsystem into the SoCs.
:::
#### 工作要求
需要對編譯器後端、LLVM、CPU scalar、CPU vector、C/C++、腳本語言有一定的掌握。並且編譯器需要有 3~7 年與 CPU scalar CPU vector 的經驗,如果會其他深度學習或編譯器開發工具更加分。
#### 自我能力分析
曾經課堂作業有寫過單核 CPU,但對 CPU scalar、CPU vector 僅停留在教科書的階段,也沒有過多的著墨,因此掌握度不高。
編譯器與 LLVM 在過去沒有碰過,但與實驗室的研究領域有重疊,因此在未來的一年可以有一定的掌握。
C/C++ 相較其他要求有更高的掌握度。曾使用 C 撰寫過簡單的 RISC-V OS。同時,對於機器學習模型與演算法再過去大學的時候有寫過相關的專題,但事實上沒有過多深入的了解。
其他的要求像是 XLA, TVM, MLIR 等則完全沒有經驗。因此目前我認為匹配程度大概 1/5,但在一年後應該可以有 3/5。
### [Software Engineer, Embedded System, Pixel BSP](https://www.google.com/about/careers/applications/jobs/results/113527440426312390-software-engineer-embedded-system-pixel-bsp?location=Taiwan&employment_type=FULL_TIME&skills=Computer)
:::spoiler Job Description
**Minimum qualifications:**
* Bachelor's degree in Computer Science, Computer Engineering, a relevant technical field, or equivalent practical experience.
* 4 years of experience working with software development in C/C++.
* Experience in development, testing, and deployment of Android BSP.
**Preferred qualifications:**
* Master's degree or PhD in Computer Science, Electrical Engineering, or related technical field.
* Experience with developing, testing, and deployment of Android BSP, Linux device drivers, and Linux kernel modules.
* Ability to communicate in English fluently.
**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.
With your technical expertise you will manage project priorities, deadlines, and deliverables. You will design, develop, test, deploy, maintain, and enhance software solutions.
The Google Pixel team has designed and built premium mobile devices and services that showcase the potential of the Android platform.
:::
#### 工作要求
C/C++ 開發經驗與 Android BSP 經驗
#### 自我能力分析
目前沒有任何 Android BSP 開發經驗,也沒有太多 Driver 撰寫經驗,唯一比較有相關的是曾經寫小型作業系統時有寫過 UART 的 Driver。C/C++ 的經驗相對豐富,有用 Linux API 寫過簡單的 Socket Application。因此我認為匹配程度大概 2/5
## MediaTek
### [5G NR communication software development engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120200728002?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3D%26order%3D%26page%3D1%26searchKey%3D%26category%3D%26workExp%3D%26branch%3D%26program%3D)
:::spoiler Job Description
**Job Description**
1. Develop multi-mode NR/LTE L1/DSP software, including state machine, channel scheduling and modem/RF control SW
2. Implement OFDM communication signal processing and theory in embedded system
3. Realize digital communication in ASIP/DSP architecture
**Requirement**
1. Familiar with C Language and Data Structure
2. Familiar with digital communication
3. Better if have studied 3GPP NR/LTE Spec or have experience in L1 and Protocol(> 3 years)
:::
#### 工作要求
需要熟悉通訊技術、C/C++ 與資料結構。工作內容需要實做各種通訊技術與演算法。
#### 自我能力分析
除了 C/C++ 以外,通訊技術的相關經驗是 0,而且通訊技術需要很多知識是我過去沒有接觸過的。不過這個工作完全不需要工作經歷,因此我認為這應該是給新鮮人的職缺,我認為批配程度可以稍微高一點 2/5。在一年後把相關知識補齊後可以到 4/5
## Nvidia
### [Senior System Software Engineer - GPU](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Senior-System-Software-Engineer---GPU_JR1968663?locationHierarchy1=2fcb99c455831013ea52ed162d4932c0)
:::spoiler Job Description
**What you'll be doing:**
* Leading the design, developing, and verifying bleeding edge technology into our next-gen GPU chips; collaborating to various degree with different teams, such as HW Arch/System engineers, SW fellow engineers, etc.
* Be heavily involved with the early modeling and simulation required to produce our world-class GPU chips.
* Follow the GPU devices all the way through the development process to all of NV’s platforms, such as desktops, notebooks, workstations, data centers, and gaming console products that are used throughout the world.
* Own roadmap tracking, document technology and strategy changes, and rationale for decisions and drive alignment across teams across the globe.
* Provide helps and recommendations or feedback to teams regarding decisions surrounding topics such as high-quality, infrastructure, continuous integration, and testing strategy.
**What we need to see:**
* BS, MS or PhD degree in Computer Engineering, Computer Science, or related degree, or equivalent experience.
* 5+ years of significant software development experience.
* Excellent C programming, C++, and low-level driver experience as well as having shown initiative in pursuing independent coding projects.
* Familiarity with computer system architecture, microprocessor, microcontroller fundamentals (caches, buses, memory controllers, DMA, embedded system, RISCV, RTOS, etc) and kernel experience (Linux, Android, Chrome, or Windows).
* Outstanding technical skills in designing and implementing high-quality complex system is invaluable.
* Excellent communication skills and the ability to lead multi-functional efforts.
**Ways to stand out from the crowd:**
* Background and strength with complex AI or GPU computing system architecture successful design is invaluable.
* Familiarity with Open systems, Kernel level security concepts, or Enterprise level security domain.
* Validated leadership and communication skills with multi-functional teams across organizational boundaries and geographies.
:::
#### 工作要求
C/C++ 與撰寫 Driver 經驗,需要熟悉電腦架構與作業系統,同時要具備複雜系統開發的能力及五年的軟體開發經驗。
如果對系統層面安全更為加分,如果有設計 AI、GPU 運算架構的背景更好。
#### 自我能力分析
我大概只有C/C++的經驗有符合,感覺這份工作要求對電腦架構的知識要求更高,因此我過去撰寫 OS 與 CPU 的經驗可能不足,並且我沒有五年的軟體開發經驗,同時對於其他加分項目也沒有接觸過,因此我認為匹配程度大概 0.5/5。
## 模擬面試
**R**: interviewer **E**: interviewee
### Algorithm
> leetcode: [Top google question](https://leetcode.com/problem-list/top-google-questions/)
> 偶然發現只要打出網址,就可以直接看到題目,這樣就不用花錢買 Premium
#### [Palindrome Number](https://leetcode.com/problems/palindrome-number/description/?envType=featured-list&envId=top-google-questions?envType=featured-list&envId=top-google-questions)
**R**: 敘述題目
**E**: 檢查是否是正數,另 A 為輸入,B 為 int 變數,B=0。不斷迭代並執行 `B = B*10 + A%10; A /= 10;`,直到 `B >= A`
### Computer Architecture
> https://hackmd.io/@accdlab/HkBANw4PP
**R**: 請問 System Call 流程
**E**: 先將 system call ID 放到暫存器中,執行特權指令使 CPU PC 跳到 Kernel 的記憶體位置執行相對應的程式。
**R**: 不同頻率的晶片如何進行溝通,例如 CPU 與 RAM。
**E**: