# 資訊科技產業專案設計課程作業 3
## Resume
## 自身評估
* 私立大學EE、四大碩CS偏所。
* 大學成績中段。
* 大學專題 (Machine Learning) 碩士研究方向 (Database System)
## 相關工作職缺項目
### [MediaTek 軟韌體開發 Embedded System software](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120240902008?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3DWorkExp%26order%3Ddescending%26page%3D4%26searchKey%3Dsystem%26category%3D%26workExp%3D%26branch%3D%26program%3D)
### Description
- 資工/資管/電子/電機/電信/通訊/電控相關研究所背景
- 對行動通訊、無線及寛頻連結、家庭娛樂晶片解決方案有濃厚興趣的2025年應屆畢業生
### Requirement
- 資工/資管/電機/電子/通訊相關研究所畢
- 嵌入式系統 (Embedded System)
- Computer Organization & Architecture (計算機組織 & 結構)
- 作業系統 (Operating System)
- 資料結構 (Data Structure)
- 程式語言 (Programming Language)
- RTOS (Real-time Operating System)
- Linux
- Android
### 自身能力適配程度
#### 符合
* C 語言能力尚可。
* 嵌入式系統用修課經驗
* 作業系統、資料結構課程,但是仍須複習
#### 不符合
* 無RTOS、Linux經驗
* 無計算機組織 & 結構課程
-----
### [NovaTek車載韌體系統工程師](https://www.104.com.tw/job/8ixbk?jobsource=n104bank1)
:::spoiler Job Discription
### 產品線描述
1. 車載 LCD/OLED TCON & TCON embedded Driver IC
2. 車載 LCD Local Dimming embedded TCON & DDIC
3. 車載 TDDI (Touch and Display Driver Integration)
### 工作內容
1. 開發 LCD Local dimming 顯示器所需之韌體工程
2. 藉由 MCU 開發車載 TCON and DDIC 所需之 ASIL (Automotive Safety Integrity Level) function
3. 開發 TCON Module Test 所需之韌體工程
### 工作說明
1. 車載 DDIC and TCON MCU 規格制訂及 FPGA and IC 驗證
2. 開發 LCD Local dimming 功能,藉由 MCU 對接 Local Dimming 背光模組
3. 車載 ASPICE、ISO26262 韌體開發工程
4. 車載 Common FW 的整合
5. 建立及維護韌體專案
6. 客戶 design-in 工程支援
### 必要條件
歡迎無經驗碩士以上,電子、電機、資工、控制相關系所畢業同學投遞履歷,若您具備以下經驗尤佳
1. 熟悉 C 語言程式開發
2. 對於 KeilC (8051)、Andes 或 32bits MCU 有興趣或相關開發經驗
3. 對於 Local dimming 背光模組開發有興趣或相關工作經驗
4. 對於平面顯示器驅動原理與相關技術有興趣或相關工作經驗
5. 有基礎電子電路知識及示波器、邏輯分析儀之使用經驗
6. 對工作有熱忱、負責任並具良好溝通技巧與客戶應對能力
7. 對 Polarion , EA Tool , Coverity 或是 LDRA 相關軟體有使用經驗
8. 對 SVN / GIT 版本控管軟體有使用經驗
:::
### 自身能力適配程度
#### 符合
* C 語言能力尚可。
* 32bits MCU應用修課經驗
* 基礎電子電路知識及示波器之使用經驗。
#### 不符合
* 無GIT 版本控管軟體使用經驗
* 無平面顯示器驅動原理知識
----
### TSMC
[IT Software Engineer](https://careers.tsmc.com/zh_TW/careers/JobDetail?jobId=461&source=External%2BCareer%2BSite)
:::spoiler Job Discription
### 職務說明
1. Develop state-of-the-art applications.
2. Continue to refactor existing applications.
3. Write and pass various kinds of tests (unit/feature/integration) to ensure software quality.
4. Apply software design principles, such as 12-factor app, to ensure software quality.
5. Ensure sustainability and performance of applications by working with SRE to define SLI/SLO and providing metrics for monitoring/alerting.
6. Collaborate with peers in design, pair programming and code reviews.
7. Willing to learn new IT technology.
### 職務要求
1. BS degree or above in Computer Science, Information engineering, Industry Engineering, Statistics or Mathematic related fields, similar technical field of study, or equivalent practical experience.
2. Experience in TypeScript/JavaScript, Kotlin, Java, F#, C#, Python, Rust or other relevant programming languages.
3. Good at algorithms and data structures.
4. Good communication and interpersonal skills with proactive problem-solving capability.
5. Experience with managing container-based workloads, using Kubernetes or other orchestration software is a plus.
6. Familiar with Functional Programming, Object-oriented programming or other programming paradigms is a plus.
7. AI or related experience is a plus.
8. Familiar with source code version control tools or services like Git, GitLab, GitHub, etc.
9. Personal Attributes:Highly motivated, critical thinking, and team player.
:::
### 自身能力適配程度
#### 符合
* 研究方向為資料庫 與 AI 應用相關
#### 不符合
* 演算法與資料結構仍需加強。
* 無 Git 版控軟體使用經驗。
* 沒有 Container 的使用經驗。
## 面試題目
🥸 面試官
🤑 面試者
🥸:解釋以下C語言的概念並舉例說明:
1. `volatile`
:::success
🤑ans:
`volatile`讓編譯器知道這個變數的值可能因為外部因素改變,例如:硬體裝置的暫存器(timer...)、多執行緒的共享變數、中斷處理程式ISR或DMA操作
這麼做的好處是
1. 保每次使用這個變數時會到Memory讀取資料,而非直接使用暫存器中的值,但是如果多執行緒同時更新變數,可能會導致 Race Condition。
2. 避免編譯器修改、重新排序程式
```c=
int hardware_flag = 0;
while (hardware_flag == 0) {
// 等待硬體更新旗標
}
// 處理硬體旗標為1的情況
```
可能被修改成
```c=
int hardware_flag = 0;
if (hardware_flag == 0) {
while (1) {
// 無窮迴圈
}
}
```
:::
2. `const` 和 `volatile`是否可以同時使用在一個變數上?
:::success
🤑ans:
`const`表示一個變數的值是不可被程式直接修改
如果將`const` 和 `volatile`以起使用,如:
```c=
volatile int sensor_status; // sensor_status 的值可能由外部因素改變
```
表示該變數的值不能由程式邏輯改變,但是會因為外部因素變
:::
3. 結構體(struct)和聯合體(union)的差異
:::success
🤑ans:
結構體(struct)成員變數擁有獨立的記憶體空間,而聯合體(union)成員變數共用最大成員的記憶體空間
```C=
struct example_struct {
int a; // 4 byte
float b; // 4 byte
char c; // 1 byte
};
// 所有變數空間獨立,總大小為9 byte
```
```C=
union example_union {
int a; // 4 byte
float b; // 4 byte
char c; // 1 byte
};
// 所有變數空間共用,故總大小為4 byte
```
:::
🥸:4. 編寫一段程式碼,實現以下功能:
* 設置特定位元為1。
* 清除特定位元為0。
* 翻轉特定位元(從0變1或從1變0)。
🤑ans:
我預計使用C語言來回答問題,這3個功能希望我的程式碼能夠只修改單一的位元
我應該寫成函式來呼叫嗎?
🥸:是的,寫成函式並且假設原本的值是`010101`
🤑ans:
```c=
#define SET_BIT(value, bit) ((value) |= (1 << (bit))) // 設置特定位元為 1
#define CLEAR_BIT(value, bit) ((value) &= ~(1 << (bit))) // 清除特定位元為 0
#define TOGGLE_BIT(value, bit) ((value) ^= (1 << (bit))) // 翻轉特定位元 (0->1 或 1->0)
int main(){
unsigned int value=010101;
CLEAR_BIT(value,3); // 結果變成010001
//其他的功能使用方法同上
}
```