# 2023資訊科技產業專案設計HW3
###### tags: `資訊科技產業專案設計`
## 相關工作職缺項目
### [Google - Software Engineer, Google Nest](https://www.google.com/about/careers/applications/jobs/results/81809076863804102-software-engineer-google-nest)
:::spoiler
:::info
Minimum qualifications:
* Bachelor's degree in Computer Science, a related field, or equivalent practical experience.
* 3 years of experience with software development in one or more programming languages (e.g., Python, C++, Java).
* Experience working with one or more of the following: Unix/Linux environments, distributed and parallel systems, service development, machine learning.
* Experience with object oriented languages.
Preferred qualifications:
* Experience in algorithms, data infrastructure, data analysis, and system evaluation and testing.
* Excellent ownership, problem solving skills, and willingness to learn/grow.
* Experience in driving product excellence through well-defined quality metrics and metrics-oriented optimization.
* Interest in IoT and smart home technologies.
Responsibilities
* Design and implement a system to do end-to-end eval on Large Language Model (LLM) for the home using both simulate and historical data.
* Build and incorporate new tools into our mission-critical pipelines for algorithm evaluation for home automation generation.
* Build evaluation datasets, metrics, and infrastructure to understand and optimize the behavior of our features and algorithms for home insights.
* Develop feedback systems to retrain algorithm on user input.
:::
### [NVIDIA - AI Computing Software Development Engineer, TensorRT](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/AI-Computing-Software-Development-Engineer--TensorRT_JR1970700?q=ai%20computing)
:::spoiler
:::info
What you'll be doing:
* Craft and develop robust inferencing software that can be scaled to multiple platforms for functionality and performance
* Performance analysis, optimization and tuning
* Closely follow academic developments in the field of artificial intelligence and feature update TensorRT
* Provide feedback into the architecture and hardware design and development
* Collaborate across the company to guide the direction of machine learning inferencing, working with software, research and product teams
* Publish key results in scientific conferences
What we need to see:
* Masters or higher degree in Computer Engineering, Computer Science, Applied Mathematics or related computing focused degree (or equivalent experience)
* 3+ years of relevant software development experience.
* Excellent C/C++ programming and software design skills, including debugging, performance analysis, and test design.
* Strong curiosity about artificial intelligence, awareness of the latest developments in deep learning like LLMs, generative and recommender models
* Experience working with deep learning frameworks like TensorFlow and PyTorch
* Proactive and able to work without supervision
* Excellent written and oral communication skills in English
:::
### [Apple - Senior Machine Learning Compiler Engineer](https://jobs.apple.com/en-us/details/200436475/senior-machine-learning-compiler-engineer?team=HRDWR)
:::spoiler
:::info
Key Qualifications
* Passion for developing and optimizing compilers for modern architectures
* Working knowledge of compiler architecture, front-end and middle-end optimizations, scheduling, register allocation, back-end code generation
* Experience with neural networks inference on dedicated SOC or GPU
* High level C++ programming expertise
* Excellent problem solving and debugging skills
* Proven track record of building high quality production software
* Excellent communication and collaboration skills
Description
We develop compiler technology to accelerate deep learning applications for Apple products.
You will:
* Architect and develop the compiler for Apple proprietary Neural Engine Accelerator architecture, to enable inference of deep learning networks onto this architecture with an emphasis on performance and power.
* Bring up new hardware silicon and add support in the compiler for these hardware features.
* Work on bringing the compiler code to production quality and enable a wide range of applications of deep learning technology, for internal clients and 3rd party developers.
* Evaluate existing hardware blocks and work closely with the platform architecture team on the definition of new hardware features, and hardware specification review.
* Work with the micro-architecture design team,to understand the functional and performance goals of the design.
:::
### [Kronos - Senior Software Engineer, C++ (API)](https://boards.greenhouse.io/kronosresearch/jobs/5735388003?gh_src=d70667e73us)
:::spoiler
:::info
Responsibilities
* Take charge of designing and developing API integrations for crypto exchanges, encompassing the aggregation of quotes and trades, as well as the efficient execution of orders across global exchanges.
* Lead development sprints and release cycles to ensure robust access to live and historical market data.
* Engage directly with traders to convey technology changes, address incidents, and troubleshoot issues.
* Actively participate in technical discussions, conduct code reviews, and promote internal knowledge sharing.
* While not on a 24/7 on-call rotation, be prepared to address occasional urgent issues, typically occurring once per month, with support from the entire team.
Requirements
* Bachelor’s or Master’s degree in Computer Science or related field
* Possess a minimum of 5 years of programming experience using C++ in a Linux environment.
* Exhibit strong analytical and problem-solving abilities.
* Manage multiple tasks effectively in a dynamic, fast-paced environment.
* Showcase strong written communication skills and intermediate oral proficiency in English.
* Demonstrate a genuine passion for quantitative trading and the cryptocurrency markets.
Preferred Qualifications
* Proven expertise in project management.
* Display a high level of accountability and responsibility.
* Understanding of network protocols, like HTTP, WebSocket, FIX, GRPC
* Understanding of signature algorithms, like ECDSA
Interview Process
* Coding assessment (via Codility)
* Technical interview
* Manager & HR interview
:::
---
## 自己在專業上匹配的程度
### 職缺分析
- Google SW 注重演算法 英文
- NVIDA AI Computing 需有相關經驗與背景
- Apple 需有相關經驗與背景
- Kronos C++ 注重 Modern C++, 演算法
### 個人簡歷
- 四大 CS 學碩
- Research Topics: AI Compiler, Edge AI, AI System Software
- Related Courses: Parallel, Unix Programming, RTOS, Software Testing
- Skills: C++, C, Python, Java, Git, Docker
### 優勢
- 有 C++ 大型專案的合作經驗
- 有 AI compiler, AI system 相關背景與實作經驗
### 劣勢
- 學歷不夠好,在學成績不佳
- 沒有實習經歷,沒有比賽經驗
- 題目刷得還不夠
- 英語口語不夠流利
- 不夠熟悉 C++ 14, 17
---
## 面試題目
:::spoiler CPP
- overloading vs. overiding
- static
- local/ global/ class member variable/ class member function
- static vs. extern vs. global variable
- why using virtual destructor
- new/delete vs. malloc/free
- smart pointer
- copy/ move constructor
- upcasting vs. downcasting
- polymorphism(compile time vs runtime)
- friend function
- call by value/ reference
:::
:::spoiler OS
- process vs. thread
- deadlock condition
- multithreading vs multiprocess
- mutex vs. semaphore vs spinlock
- system call
- interprocess communication
:::
:::spoiler Deep Learning
> [[心得] 水果DL Compiler Engineer面試](https://ptthito.com/soft_job/m-1638590872-a-7aa/)
- Common CNN model
- CNN vs RNN
- overfitting vs underfitting
- how to prevent overfitting
- Quantization Benefits?
- quantization-aware training vs. post-training quantization
- 解釋int8 quantization怎麼運作的
- pre-training quantization怎麼做? fake-quant node要記錄那些資訊
- post-training quantization怎麼做
- How to do Operator Fusion? Benefits?
- Common AI compiler & difference
- what's TVM
- Tensor RT
- Weigt/ Output/ Row stationary mapping
- AI accelerator vs CPU vs GPU
- Common AI accelerator
- DSE algorithm
:::
:::spoiler Backend
- 網路七層
- TCP vs UDP
- HTTP vs HTTPS
:::
## 模擬面試
### C++
:smiling_imp: 您好, 我是 xxx, 接下來會和你討論一些 C++ 問題。
:smile:: 我是,很高興今天可以來這邊面試。
:smiling_imp: 請解釋 overloading 和 overiding。
:smile:: overloading 是將 function 作重載,function 名稱一樣,但是參數型別可能不同,會根據參數型態而去呼叫不同的 function。overiding 是 child class 繼承 parent class ,child class 去重新 define virtual function。
:smiling_imp: 請解釋 unique pointer 和 shared pointer 的用途和差異。
:smile:: unique pointer 是 smart pointer 中的一個 pointer,它指向一個 object,當 unique pointer 被銷毀時,資源會被釋放。當 unique pointer 超出使用區域,資源會被自動釋放。 share pointer 可以讓多個指標共享同一資源。share pointer 被銷毀時,資源會被釋放。可以避免資源被重複釋放。
:smiling_imp: 請解釋 vtable 和 vpointer。
:smile:: 這兩個是實現多型的關鍵。假設有一個 parent class ,且有 virtual function。parent class 會有一個 vtable,裡面會存放 virtual function 的地址。另一個 child class 繼承 parent class ,並且去重載 virtual funtion。child class 也會有一個 vtable ,存放 virtual function 的地址。被創建的 object 會有 vpointer,指向 vtable。
:smiling_imp:: 為什麼 destructor 預設不用 virtual function?
:smile:: 因為使用 virtual function ,會耗費更多記憶體(vtable, vpointer),因此只有在需要被繼承的情況下,在設定成 virtual。
### AI Compiler Engineer
:smiling_imp: 您好, 我是 xxx, 接下來會和你討論一些 AI compiler 的問題。
:smile:: 我是 XXX,很高興今天可以來這邊面試。
:smiling_imp: 請你解釋 weight stationary 和 ouput stationary 的 dataflow。
:smile:: weight stationary 是 weight tensor 留在運算單元內,運算完後,將 partial sum 寫出外部 memeory。output stationary 是拆解 input tensor,運算完把結果留在運算單元內累加。
:smiling_imp: 請你舉出一些常見的 AI compiler。
:smile:: TVM, ONNC, TensorRT
:smiling_imp: 請比較 quantization-aware training vs. post-training quantization
:smile:: Quantization是一種減小神經網絡模型的計算和記憶體需求的技術。Quantization-Aware Training (QAT):QAT是一種在模型訓練期間考慮量化的方法。它在模型的反向傳播過程中,將模型的權重和激活量化到較低的位數,以模擬推理期間的量化效果。
:smile:: Post-Training Quantization 是在模型訓練完成後對已有模型進行量化的方法。這種方法不會改變原始模型的架構,而是在推理階段使用量化的權重和激活。
## References