---
title: 資訊科技產業專案設計課程作業 4
tags: 資訊科技產業專案設計
---
# **2021 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2021)」作業四**
> contributed by <`Dubdoo`>
> 貢獻者 <`大波肚`>
## [Waymo,Embedded Software Engineer, Infrastructure](https://waymo.com/joinus/3273970/?gh_src=1s2va2sx1)
### 職務描述 Job Description
- Develop C++ for safety-critical embedded automotive systems
- Bring up new MCUs, peripherals, chips, compilers, and development tools
- Develop libraries and tools for embedded software development
- Develop unit tests, integration tests, and test functionality on simulators and in-vehicle
- Interact with System Engineers, Electrical Engineers, and Operations Team on design, reliability and safety goals
>此工作會使用C++來開發車用嵌入式系統,其中包含開發微處理器、外圍設備、晶片 、編譯器等等;此外,撰寫函式庫和嵌入式系統的軟體工具也是工作內容之一。
>開發元件的功能測試會在模擬器和實車上做測試,因此會和其他系統工程師和測試團隊有密集的討論與接觸。
### 職務分析 Job analysis
At the minimum, we'd like you to have:
- Degree in Computer Science, Computer Engineering, or equivalent practical experience
- 2+ years of C++ programming experience
- Hands-on experience with embedded systems, including resource-constrained microcontrollers
- An understanding of how digital systems work sufficient for developing bare-metal microcontroller code
It's preferred if you have:
- Experience working with communication busses, sensors, chips, and peripherals commonly used in automotive or robotic systems
- Experience with safety critical systems and functional safety
- OS-level development experience, including details of RTOSes or Linux kernel
- Automotive industry experience
> 此工作會需要使用到C++做為開發的程式語言,求職者除了需要有2年以上的C++編寫經驗外,還要對於運算資源有限的微處理器實作經驗,此外,對於微處理器的底層程式有一定的理解。
>如果有使用不同通訊匯流排、感測器的經驗、處理系統安全的經驗、作業系統開發經驗或汽車產業相關經驗者為佳。
### 自我檢視 self-examination
- 對於C++的編寫算熟悉
- 有修過使用8051微處理器的相關課程,使用過assembly code和C編寫程式控制8051
- 實驗室是在做自駕車的相關題目,有實車測試演算法和感測器的相關經驗
- 沒有真正的使用C++開發微處理器的實務經驗
### 面試題目 Interview questions
1. const int* a 和 int* const b 兩者之差別:
Ans: a指標指向不能改變的int,b是不能改變的指標
2. 指標運算
```cpp=0
char s[] = "0113256";
char *p = s;
printf("%c",*p++);//顯示0 s[0]=0 p指向s[1]
printf("%c",*(p++);//顯示1 s[1]=1 p指向s[2]
printf("%c",(*p)++);//顯示1 s[2]=2 p指向s[2]
printf("%c",*++p);//顯示3 s[3]=3 p指向s[3]
printf("%c",*(++p);//顯示2 s[4]=2 p指向s[4]
printf("%c",++*p);//顯示3 s[4]=3 p指向s[4]
printf("%c",++(*p);//顯示4 s[4]=4 p指向s[4]
printf("\n");
printf(s);
```
Ans:
第一行 0113234
第二行 0123456
## [Mediatek,System software engineer](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120210601002?langKey=en-US)
### 職務描述 Job Description
Responsible for mobile SoC kernel to support MediaTek Smart Phone. Major responsibilities will be:
1. Android system integration
2. Linux system software development
3. Linux kernel driver development
> 此工作負責開發支援智慧型手機的晶片核心,需要對安卓系統和Linux系統的核心區動和軟體開發有一定的認識。
### 職務分析 Job analysis
1) Strong programming skills in C/C++, Python or JavaScript
2) Knowledge and experience with Linux kernel and embedded system
3) Experience with Android is a plus
4) Good communication skill and can collaborate with many people
> 此工作會使用C/C++, Python和JavaScript作為主要的程式語言,此外,求職者對於Linux核心和嵌入式系統要有相關知識和經驗,如果對安卓有相關開發經驗為佳。
### 自我檢視 self-examination
- 對於C++和Python的編寫算熟悉,沒有使用過JavaScript
- 實驗室是在做自駕車的相關題目,使用的是Ubuntu作業系統來控制自駕車,但對於Linux核心和嵌入式系統缺乏深入的了解。
- 沒有開發過使用安卓作業系統的設備的經驗
### 面試題目 Interview questions
1. What's the differences between "process" and "thread" ?
Ans:
process是系統進行排程的基本單位
thread是CPU進行資源分配的基本單位
一個process可以有多個thread但一個thread只能屬於一個process。
Process內部的thread可以共享記憶體,但不同process的thread要透過process間的溝通來實現同步。
2. What's deadlock ?
Ans:
當2個thread或process在獲取資源時(讀取記憶體),互相等待對方停止執行以釋放資源,此時若其中一方沒有釋放資源,就會產生”死結”的情況。
產生死結的4個條件:
1. No preemption : 系統資源不能從一個process中被強制釋放
2. Hold and wait : 一個process或thread可以在等待時佔有系統資源
3. Mutual exclusion : 系統資源只能同時分配給一個process或thread
4. Circular waiting : 多個行process或thread互相佔有其所需的系統資源
3. Why deadlock happened ?
4.