# 2024 年 「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2024/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FH1-4KbanC)」課程作業 3
## 符合自身興趣/規劃的職務描述
### 1. <font color=green>NVDIA</font> Security Firmware Engineer – Data Center Systems
:::spoiler <font color=gray>**Content**</font><br>
#### **Job Description:**
The GPU, our invention, serves as the visual cortex of modern computers and is at the heart of our products and services. NVIDIA is searching for a highly motivated, creative engineer with experience in system software security to join the Server Platform Software team. In this role, you will focus on securing the management plane for NVIDIA’s Data Center Systems, such as NVIDIA HGX, DGX, and MGX.
#### **Requirement:**
1. Minimum qualifications:
2. BS or MS degree in Computer Engineering, Computer Science, or related degree (or equivalent experience)
3. 4+ years of meaningful software and firmware engineering experience
4. Excellent C/C++ programming and low-level firmware development experience
5. Experience with software development lifecycle standard methodologies, e.g. threat modeling, unit testing, incident response, code audit, CI/CD, and more
6. Effective written and verbal communication regardless of audience or issue complexity
7. Ability to work collaboratively and remotely with others to accomplish complex goals
#### Preferred qualifications:
1. Excellent comprehension of security fundamentals.Experience with ARM or RISC-V based system software development. Familiarity with ARM or RISC-V security and privilege modes, such as ARM TrustZone
2. Experience in developing Root of Trust subsystems and required cryptographic value-adds, OP-TEE Trusted Applications (TA), and interaction with REE & TEE., system software and drivers to interact with SPI, USB, I2C, & PCI. Experience with open-source frameworks such as Keystone, OP-TEE, TCG DICE and with modern server/platform architectures.
3. Proficiency in memory safe programming languages such as Rust. Contribution to industry open-source security initiatives
:::
### 2. <font color=green>META</font> Software Engineering Manager - Avatar Visuals and Performance
:::spoiler <font color=gray>**Content**</font><br>
#### **Job Description:**
Reality Labs mission is “To give people the tools to feel connected anytime, anywhere.” The teams working on augmented and virtual reality technologies at Meta are on a mission to build the next computing platform centered around people. We continue to push the state-of-the-art with groundbreaking research into emerging technologies and hardware that will help bring this vision to life. We are building Avatars focused on how humans are represented and how people communicate on this platform.
The mission of the RL Avatars Pillar is to connect people across realities with personal, meaningful, social presence. We spend our time helping people build equity in their avatars with great personalization options and a growing library of awesome content, making Avatars a core part of identity across all Meta experiences and platforms, and shipping a world class SDK that delivers the gold standard of embodied presence (Avatars, Data, VoIP).
The Avatar Pipeline team is focused on building the core systems that bring Avatars to life across all platforms and devices, and assemble characters from art assets. The team delivers highly scalable and performant graph execution systems, character blueprints, and new capabilities to enable new forms of representations such as fantastical characters.
#### **Requirement:**
1. Bachelor’s degree in Computer Science, Computer Engineering or equivalent combination of education and experience
2. Experience with game engines (Unity, Unreal, etc) and the game development process
3. Experience developing, debugging, and shipping live software that spans multiple platforms
4. 5+ years of software engineering work experience including hands-on technical management
5. 2+ years of technical people management experience
#### Preferred qualifications:
1. Experience with AR/VR products
2. Experience with character animation, avatar systems, and human representation
3. Experience with API design and implementation for realtime 3D applications
4. Experience with game engines graphics and computational geometry techniques
:::
### 3. <font color=green>META</font> Engineering Manager - EX Eyes Experiences
:::spoiler <font color=gray>**Content**</font><br>
#### **Job Description:**
In these role you'll lead XR Eyes - Experiences team of 6-8 engineers, which is part of a bigger XR Eyes team. This team has the following mission:
- Prototype delightful user experiences that are enabled by the eye-tracking technology
- Develop partnerships across Reality Labs for productization of eye-tracking user experiences and deployment on Reality Labs devices
- Deploy core eye tracking pipeline across Reality Labs devices
#### **Requirement:**
1. Bachelor's degree in Computer Science or related discipline
2. 5+ years of industry experience prototyping, developing and shipping user facing applications for for AR, MR or VR devices
3. 2+ years of experience managing, supporting, building and growing teams of individual contributors
4. Proven track record driving project execution in ambiguous and highly complex environment
5. Proven track record of building effective cross-functional collaborations
6. Effectively communicate
7. Coding experience in C++/C#/Rust or other high-level programming language
8. Experience developing applications in Unity 3D
9. Experience developing application for Android or iOS
#### Preferred qualifications:
1. Masters degree in Computer Science or related discipline
2. Prior knowledge and Experience in Computer Vision and Machine Learning
3. Experience in developing, prototyping and shipping user interactions experiences
:::
### 4. <font color=green>META</font> Technical Game Designer
:::spoiler <font color=gray>**Content**</font><br>
#### **Job Description:**
The Horizon Team at Meta is building a social User Generated Content (UGC) platform where people can find people, places, and things they care about - a Metaverse without constraints where people have freedom of identity and expression and can experience living virtual worlds that could not exist in the real world. Our vision is to build a global-scale UGC platform where the world’s creators, performers, and more will be able to create their place, and enable their communities to connect, engage and play in all kinds of ways. We are driven to create a safe and compelling metaverse for never-ending exploration - our journey is just the beginning, come join us. As a Technical Game Designer on the Meta Horizon team, you’ll be at the forefront of prototyping, designing, and shipping VR-best experiences for the ever-expanding Horizon metaverse. You will work with teams of designers, artists, engineers and more to explore innovative core mechanics and game loops for first-party content across Horizon Worlds.
#### **Requirement:**
• 8+ years of game design experience or a minimum of 2 shipped titles on any platform that have been successful (highly rated, critically acclaimed, award-winning, etc.)
• Experience with technical aspects of game design such as coding in Unity with C# or C++
• Experience leading end-to-end development efforts and designing games from concept to launch and live ops
• Experience coordinating and collaborating with diverse cross functional teams to bring a vision to life
• A portfolio that features some games you have prototyped or shipped, and showcases your game design skills
#### Preferred qualifications:
• Experience developing or designing VR or AR games
• General design knowledge across a range of design specializations
• Experience in design strategy in addition to fluency in executing such as tuning the feel of the game
• Experience utilizing research and data to drive strategy and decision making
• Experience with TypeScript
## resume
1.[FW](https://docs.google.com/document/d/1utqxJLGNFCohJd8mfqsWn2c-oUIOHJ7F/edit?usp=drive_link&ouid=103845824987599610991&rtpof=true&sd=true)
2.[VR](https://docs.google.com/document/d/1c4Gc-RUB81wlcW96L6bR-rQGjmQLNWUf/edit?usp=drive_link&ouid=103845824987599610991&rtpof=true&sd=true)
## 需要的能力及匹配的程度
資訊工程、電機工程等相關科系且為碩士以上的學歷,同時具備AI領域的專業知識與技術背景。
### Career 1:
| Requirement | |
| -------- | -------- |
| <font color=red>4+ years of meaningful software and firmware engineering experience</font>| N |
<font color=grey>C/C++ Programming</font>|有待加強|
<font color=red>low-level firmware development experience</font>|N|
<font color=red>Experience with software development lifecycle standard methodologies</font>|N|
<font color=grey>Effective written and verbal communication regardless</font>|要鍛鍊英文口說|
<font color=green>Ability to work collaboratively and remotely with others to accomplish complex goals</font>|Y|
### Career 2&3:
| Requirement | |
| -------- | -------- |
| <font color=green>Experience with game engines (Unity, Unreal, etc)</font>| 需要加強 |
<font color=red>Experience developing, debugging, and shipping live software that spans multiple platforms</font>|N|
<font color=red>5+ years of software engineering work experience including hands-on technical, developing and shipping user facing applications for for AR, MR or VR devices</font>|N|
<font color=red>2+ years of experience managing, supporting, building and growing teams of individual contributors</font>|N|
<font color=red>Experience with software development lifecycle standard methodologies</font>|N|
<font color=red>2+ years of technical people management experience </font>|N|
<font color=green>Coding experience in C++/C#/Rust or other high-level programming language</font>|Y|
<font color=grey>Effectively communicate</font>|要練口說|
<font color=green>Experience developing application for Android or iOS</font>|Y|
## 面試題目
## 面試
> Interviwer:
:man_in_steamy_room:
> Interviwee:
:man_in_tuxedo:
#### Security Firmware Engineer – Data Center Systems
:man_in_steamy_room:: 假設你正在開發一款嵌入式裝置的韌體,該裝置會處理大量的整數數據,並需要在一定時間內對數據進行快速處理。作為嵌入式系統的一部分,該裝置需要經常計算數字的二進位表示中有多少個 1 的位元(稱為「1的數量」或「Hamming Weight」)。這個操作會在許多情境下進行,如檢查數字的錯誤碼、處理通訊協議中的位元標誌,或進行加密解密操作等。由於你的嵌入式裝置資源有限,你需要在保證高效運行的情況下進行實現。
:man_in_tuxedo: : 請問輸入參數的範圍?
:man_in_steamy_room:: 數字範圍是 32 位有符號整數(-2^31 到 2^31-1)。
:man_in_tuxedo: : 我想到的方法是使用迴圈根據每bit做檢查,定一整數oneCount當讀到為1則oneCount++,最後得到的就是1的bits數。
```=c
int hammingWeight(int n) {
int oneCount = 0;
for(int i=0; i<32; i++){
if((n%2)==1)
oneCount+=1;
n = n/2;
}
return oneCount;
}
```
這樣的話每個輸入的參數都會執行32次迴圈,我想可以再縮短,迴圈的執行條件可以改寫成(n!=0),以達到短的執行時間。
```=c
int hammingWeight(int n) {
int oneCount = 0;
for(int i=0; n!=0; i++){
if((n%2)==1)
oneCount+=1;
n = n/2;
}
return oneCount;
}
```
:man_in_steamy_room:: 好的,謝謝。
#### Software Engineering Manager - Avatar Visuals and
:man_in_steamy_room:: 請嘗試設計一個LRU Cache。
:man_in_tuxedo: : 請問需要使用到的function跟輸入的參數有哪些?
:man_in_steamy_room:: 需要使用一function建立cache本身,並且需要使用到put_function進行新增資料,輸入值為key-value一pair,以及get_function來取得資料,會根據輸入的key回傳對應的value,並且兩function都需要在O(1)完成。
:man_in_tuxedo: : 請問key跟value的Range為何?
:man_in_steamy_room:: 0 <= key <= $10^4$, 0 <= value <= $10^5$。
:man_in_tuxedo: : 請問Cache的容量為和?
:man_in_steamy_room:: 1 <= capacity <= 3000。
:man_in_tuxedo: : 了解了,LRU cache的運作方式是在插入新值或呼叫原有值時將其的優先級提高,如果cache容量不足時會淘汰優先級最低的資料,為了完成這件事,我會使用linked list來建立cache,當插入或呼叫時使資料pair移動到linked list的前端,而當容量不足時移除list的尾端。
而為了在O(1)完成前端跟尾端的操作,我會使用double linked list來建立。
因為put跟get都需要使用對照值key來尋找目標,且要求在O(1)完成,我認為會需要設計hash_table,用mapping mem的方式來完成,這邊我為了聚焦在LRU的部分,我先用一足夠大的Table完成兩個function的執行。
```=c
typedef struct DListNode{
int key;
int value;
struct DListNode *pre;
struct DListNode *next;
} DListNode;
typedef struct {
int capacity;
int size;
DListNode* head;
DListNode* tail;
DListNode** hash_table;
} LRUCache;
LRUCache* lRUCacheCreate(int capacity) {
LRUCache* cache = (LRUCache*)malloc(sizeof(LRUCache));
cache -> capacity = capacity;
cache -> size = 0;
cache -> head = (DListNode*)malloc(sizeof(DListNode));
cache -> tail = (DListNode*)malloc(sizeof(DListNode));
cache -> hash_table = (DListNode**)calloc(10001, sizeof(DListNode*));
cache -> head -> next = cache -> tail;
cache -> tail -> pre = cache -> head;
cache -> head -> pre = NULL;
cache -> tail -> next = NULL;
return cache;
}
void lRUToHead(LRUCache* obj, DListNode* node){
node -> next = obj -> head -> next;
obj -> head -> next -> pre = node;
obj -> head -> next = node;
node -> pre = obj -> head;
}
int lRUCacheGet(LRUCache* obj, int key) {
DListNode* node = obj -> hash_table[key];
if(node){
node->pre->next = node->next;
node->next->pre = node->pre;
lRUToHead(obj, node);
return node->value;
}
return -1;
}
void lRUCachePut(LRUCache* obj, int key, int value) {
int returnKey = -1;
DListNode* node = obj -> hash_table[key];
if(node){
obj -> hash_table[key] -> value = value;
node->pre->next = node->next;
node->next->pre = node->pre;
lRUToHead(obj, node);
}
else{
obj->size++;
DListNode* newNode = (DListNode*)malloc(sizeof(DListNode));
newNode->key = key;
newNode->value = value;
obj -> hash_table[key] = newNode;
lRUToHead(obj, newNode);
if((obj->size) > (obj->capacity))
lRUevict(obj);
}
}
void lRUevict(LRUCache* obj){
if(obj->size>0){
obj -> size--;
obj -> tail -> pre = obj -> tail -> pre -> pre;
obj -> hash_table[obj -> tail -> pre -> next->key] = NULL;
free(obj -> tail -> pre -> next);
obj -> tail -> pre -> next = obj -> tail;
}
}
```
:man_in_steamy_room:: 好的。
#### Engineering Manager - EX Eyes Experiences
:man_in_steamy_room:: 在 VR 應用中,視角控制是用戶體驗的關鍵部分。假設你正在開發一個 VR 應用,需要為用戶提供一個第一人稱視角控制系統。請用 C# 設計一個簡單的系統,讓用戶可以用控制器控制視角的旋轉和移動。
:man_in_tuxedo: : 好的,請問這份code是需要使用
:man_in_tuxedo: : 沒問題,我會先建立左右視野的camara物件,用作操作兩眼視線位置及方向,同時判斷當start後,每幀根據控制器上的按鍵及搖桿,這樣應該可以作為一個簡單的視角控制系統。
```=c#
public class CameraControl : MonoBehaviour
{
public Camera _rightCamera;
public Camera _leftCamera;
private bool _gameStart = false;
public float rotationSpeed = 100f;
public float moveSpeed = 5f;
void Start()
{
// To do
_gameStart = true;
}
void Update()
{
if (_gameStart)
{
HandleInput();
}
}
void HandleInput()
{
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");
float rotateX = Input.GetAxis("Mouse X");
float rotateY = Input.GetAxis("Mouse Y");
// 移動相機
Vector3 movement = new Vector3(moveX, 0, moveZ) * moveSpeed * Time.deltaTime;
_rightCamera.transform.Translate(movement, Space.Self);
_leftCamera.transform.Translate(movement, Space.Self);
// 旋轉相機
Vector3 rotation = new Vector3(-rotateY, rotateX, 0) * rotationSpeed * Time.deltaTime;
_rightCamera.transform.Rotate(rotation, Space.Self);
_leftCamera.transform.Rotate(rotation, Space.Self);
}
}
```
:man_in_steamy_room:: 好。
## reference
- [軟韌體工程師面試考題 - 程式碼考題](https://www.raind.blog/c&cpp-zh/c&cpp_interviewexam.html)
- [2024年後軟韌面試分享](https://www.dcard.tw/f/tech_job/p/255721024)
- [embedded engineer interview](https://www.quora.com/I-have-an-interview-tomorrow-for-an-embedded-engineer-position-see-description-What-questions-can-I-expect-in-general-and-on-the-technical-side)
- [15 Virtual Reality Engineer Interview Questions (2024)](https://4dayweek.io/interview-questions/virtual-reality-engineer)
- [Unity 面试](https://www.fantsida.com/d/510)
- [METACareer](https://www.metacareers.com/)