# 2024 年「[資訊科技產業專案設計](https://hackmd.io/@sysprog/info2024/https%3A%2F%2Fhackmd.io%2F%40sysprog%2FH1-4KbanC)」作業 3
## resume
[MyResume(github)](https://github.com/caspersyu/resume/blob/main/Resume.pdf)
[MyResume直接下載](https://raw.githubusercontent.com/caspersyu/resume/main/Resume.pdf)
## 相關工作、職缺
因為覺得自己實力比起其他人稍嫌不足,且還尚未當兵,因此決定朝研替的方向找,有以下好處。第一,競爭者只剩同屆且未當兵的男生。雖然職缺相比正常工作也少了許多,但我覺得對我來說是優勢。第二,解決兵役問題。因為我尚未服兵役,所以大部分公司可能會希望當完兵再投履歷,或是實力夠好才能拿到預聘。第三,簽一年半的約。這部分對一些人來說可能是一項限制,因為不好跳槽。但我認為對我來說,我實力不足的原因,若有這一年半可以讓我無後顧之憂的去學習業界的東西,不用擔心被裁員,且我希望透過研替的職缺進入大一點的公司,若能成功,依我比較追求穩定的更性來說,應該是不太會跳槽。總結,可能最終畢業會有不同想法,但目前碩一的我,目標是研發替代役,且有大公司的話是最好的。我找了以下三個職缺:第一個是我認我現在的我有機會的職缺; 後面二個是現在實力應該八成不會上,但我希望畢業後可以有機會應徵上的職缺,現在列出來看自己哪裡不足,可以朝那個方向學習。第二個是最夢幻的職缺,第三個是我希望的畢業後的比較實際的落腳處。
### [聯華電子_114年度研發替代役_AI演算法及模型開發工程師_南科](https://www.1111.com.tw/job/130375368)
**職缺描述**
1. 數據分析與演算法開發
2. 深度學習模型設計與訓練
3. 生成式 AI 相關技術導入(RAG, Agent, Local LLM)
4. 利用演算法及模型開發系統雛形
**學歷要求**
碩士、博士
**科系要求**
數學統計學門、資訊工程學類
**工作經驗**
不拘
**外語能力**
英文 - 聽| 中等、 説| 中等、 讀| 中等、 寫| 中等
**電腦專長**
Word、Excel、PowerPoint
**工作技能**
不拘
**自我評估**
大學時我的專題是跟yolo辨識有關的,目前碩一實驗室在做的計劃,我負責的部分也是yolo模型訓練及辨識,因此自認為對深度學習的模型設計及開發蠻有經驗的。不足的地方應該是ai方面的知識,因為我比較偏向應用方面,沒有很熟記深度學習背後的知識,像捲基層之類的。
### [NVIDA_BaseOS Foundry Engineer_RDSS Intern](https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Taiwan-Taipei/BaseOS-Foundry-Engineer--RDSS-Intern-_JR1991929?q=RDSS&locationHierarchy1=2fcb99c455831013ea52ed162d4932c0)
**職缺描述**
1. NVIDIA BaseOS 開發:
* NVIDIA BaseOS 是 NVIDIA GPU 平台的 Linux 發行版,應用於 AI、數據分析和自動駕駛汽車等行業。
* 作為實習生,您將參與基礎設施的關鍵功能組件和工具構建,進行作業系統級的定制化,並調整 Kubernetes 環境下 AI 工作負載的性能。
2. 團隊合作:
與系統與軟體開發團隊緊密合作,構建基礎設施自動化,並使用最新的行業標準工具。
3. 學習與發展:
您將有機會參與有趣的專案,並從行業中最努力且多才多藝的工程師身上學習。
**學歷要求**
正在攻讀碩士、博士
**科系要求**
計算機科學或相關領域
**工作技能**
* 精通 Python 和 Go 編程技能。對此角色來說,精通編碼是成功的關鍵。
* 熟悉至少一個主要的 Linux 發行版(如 Ubuntu、RedHat、CentOS)。
* 了解 Kubernetes 和 CI/CD 概念,並能使用開源工具構建流水線。
* 具有處理複雜系統級調試的經驗,這是一項非常有價值的技能。
* 讓您在競爭中脫穎而出的特質:
* 出色的溝通和規劃能力。
* 具備部署虛擬化和容器技術工具的基本知識(優先考慮)。
* 熟悉開源工具(如 cloud-init 和 packer),以及擁有雲平台(如 AWS、Azure、GCP)經驗者更佳。
* 曾在 GitHub 上進行過軟體開發,並參與開源開發生命周期。如果能為 GitHub 項目創建自己的 Debian 或 RPM 軟件包和倉庫,則更具競爭力。
**自我評估**
此職缺與我們實驗室研究方向蠻符合的,但我們最近主要在做的都是firmware或middleware方面的,而且我也都還在學習,這方面都沒有很熟。但是熟悉python和Linux應該是沒問題,其他的部分可以當成未來學習的目標!此職缺對我來說比較像是夢幻的那種。
### [聯發科_軟韌體開發_Camera/ Smart Display /Multimedia/Audio/Video_研發替代役](https://careers.mediatek.com/eREC/JobSearch/JobDetail/MTK120240902000?returnUrl=%2FeREC%2FJobSearch%3FsortBy%3D%26order%3D%26page%3D1%26searchKey%3D%25E7%25A0%2594%25E7%2599%25BC%25E6%259B%25BF%25E4%25BB%25A3%25E5%25BD%25B9%26category%3D%26workExp%3D%26branch%3D%26program%3D)
**職缺描述**
沒有描述的很詳細,只有說是行動通訊、無線及寛頻連結、家庭娛樂晶片解決方案方面的。
**學歷要求**
應屆碩士/博士畢業生
**科系要求**
資工/資管/電子/電機/電信/通訊/電控相關研究所
**工作技能**
歡迎具備以下經驗及專長的你: 多媒體相關課程(Multi-Media)、影像處理原理 (Image Processing)、作業系統原理(Operation system)、物件導向程式設計(C++)、Multi-Thread Programming Skill;Computer Graphics、Computer Vision、Image Processing、Software Engineering、Data Structure、Algorithm、Operation system、Multi-Thread Programming 、Digital Signal Processing、Computer Architecture;有 Linux kernel driver開發或Linux kernel/open source upstream經驗者佳
**自我評估**
大學有修過Image Processing和Data Structure,而目前在實驗室負責的計劃也讓我對Operation system, C++, Multi-Thread Programming Skill都有基本的認識。Linux沒有到非常熟,且沒有kernel開發的經驗。Digital Signal Processing就幾乎0基礎了。此職缺對我來說,有需多東西是現在正在學習的,因此碩士畢業後應該能符合要求!
## mock interview
> c語言考試,題目分成選擇/填充跟上機考,考古命中的比例相當高,因此從考古題抓一年的考題出來。只記錄我的答案跟對幾題,正確答案在reference裡能找到。
### C - 選擇題
#### 1
```cpp
int funA(int &a,int b) //認知中C不能這樣用但選項中沒有compile error
{
a = (a%7==0) ? (a/7):(a%7);
b = (b%17==0) ? (b/17):(b%17);
return a+b;
}
int main(int argc, char *argv[])
{
int a=41;
int b=61;
int c=funcA(a,b);
printf("%d %d",a,c);
return 0;
}
```
我的答案: 6, 16
#### 2
```cpp
#include <stdio.h>
int func()
{
static int i=5;
if(--i)
{
func();
printf("%d ",i);
}
}
int main(int argc, char *argv[])
{
func();
return 0;
}
```
~~我的答案: 1234~~,正確答案是0000
#### 3
```cpp
void main()
{
char str[20] = "ABCDEF";
printf("%d %d",sizeof(str),strlen(str));
}
```
我的答案: 20, 6
#### 4
```cpp
#include <stdio.h>
int main()
{
int a[10][20][30]={0};
a[5][2][1] = 2;
return 0;
// which following will print the value 2?
A. printf("%d",*(((a+5)+2)+1));
B. printf("%d",***((a+5)+2)+1);
C. printf("%d",*(*(*(a+5)+2)+1));
D. None of these;
}
```
我的答案: C
#### 5
```cpp
#define N 5
#define Y(n) ((N+1)*n)
int main()
{
int z = 2*(N+Y(3+2));
z = ?
}
```
~~我的答案: 70~~,正確答案是50
> Y(3+2),會是Y(3)+2
> 所以,z = 2*(N+Y(3+2))=2*(5+(6*3)+2)=50
#### 6
```cpp
void main()
{
int i,j,m,n;
i=8;
j=10;
m=++i;
n=j++;
printf("%d,%d,%d,%d",i,j,m,n);
}
```
我的答案: 9, 11, 9, 10
#### 7
```cpp
#define num 100
int change()
{
#undef num
#define num 10
return num;
}
int main()
{
int a=0;
printf("num = %d, ",num);
a = change();
printf("Sum = %d",num+a);
getch();
return 0;
}
```
~~我的答案: num = 100, Sum = 20~~,正確答案是num = 10, Sum = 20
> 應該是因為編譯問題,編譯的時候會從頭看到尾,num已經被定義成10了
#### 8
```cpp
#include <stdio.h>
void f(char**);
#define num 100
int main()
{
char *argv[] ={"ab","cd","ef","gh","ij","kl"};
f(argv);
return 0;
}
void f(char **p)
{
char *t;
t = (p+= sizeof(int))[-1];
printf("%s",t);
}
```
~~我的答案: 不會~~,正確答案是gh
> sizeof(int)是4(byte),所以從argv[0]移到argv[4],最後[-1]再往回移一格,所以最終在argv[3],為"gh"
**總共對4/8題**。
### C - 填充題
#### 1 請問sum為多少
```cpp
#include <stdio.h>
int fun(int a,int *b)
{
static int c=0;
a += *b;
*b += a;
c += a + *b;
return c;
}
int main() {
int x,y,z,sum;
x = 5;
y = 7;
x = fun(x,&y);
z = fun(x,&y);
sum = x + y + z;
printf("%d",sum);
return 0;
}
```
~~我的答案: 219~~,正確答案是250
> 有static int c,這個在整個程式的執行時間中只會初始化宣告一次。
#### 2 請問output
```cpp
#include <stdio.h>
#define THRD 0x8
int main() {
int ch = 26;
if(ch & 0xF > THRD)
{
printf("MORE %d",ch & 0xF);
}
else
{
printf("LESS %d",ch & 0xF);
}
return 0;
}
```
~~我的答案: "MORE 10"~~,正確答案是"LESS 10"
> 26是11010->00011010->0x1A
> 跟0xF做and,先擴充到一樣位數,00001111
> 做完and是00001010,即0xA
> 正常是10>8,進MORE
> 但是在 C/C++ 中,位元運算符"&"的優先級 低於比較運算符">"。
> 所以條件式`if(ch & 0xF > THRD)`會先做後面,15>8,回傳1,ch與1做and,結果是0,所以跳到下面else
> 輸出"LESS 10"
> 可以補括號,`if((ch & 0xF) > THRD)`,就會是我想的這樣
#### 3 請問output
```cpp
#include <stdio.h>
#define INC(x) x*=2,x+=1
int main() {
int i,j;
for(i=0;i<5;++i)
INC(j);
printf("%d",j);
return 0;
}
```
我的答案: 31(假設j初始為0)
> 應該是編譯器有先把j初始成0
#### 4 請問result,count
```cpp
#include <stdio.h>
int count = 0;
int calc(int x)
{
count++;
return x>0 ? calc(x-1)+calc(x-2)+1 : 1;
}
int main() {
int result = calc(5);
printf("%d %d",result,count);
return 0;
}
```
我的答案: 25, 25
#### 5 請問output
```cpp
#include <stdio.h>
#include <string.h>
char src[] = "Hello World";
char dst[20];
int main() {
strncpy(dst, src, sizeof(dst));
printf(":%zu:", strlen(dst));
memcpy(dst, src, 5);
printf(":%zu:", strlen(dst));
strncpy(dst, src, 5);
printf(":%zu:", strlen(dst));
return 0;
}
```
~~我的答案: 不會~~,正確答案是":11::11::11:"
> %z輸出size_t類別的變數,%u是輸出無號數
> 第一個copy,會把"Hello World\0"全部都複製過來
> 後面的二個複製,都不會複製到"\0",所以strlen()的值不變
#### 6 請問output
```cpp
#include <stdio.h>
void func(void)
{
static int i=0;
i++;
printf("%d",i);
}
int main() {
for(int a=0; a<8; a++)
{
func();
}
return 0;
}
```
我的答案: 12345678
#### 7 請填1跟2

P is an unsigned integer array, and len is the length of the p array.
Please complete the program in the blank space, so that the fun function can confirm that whether p has data with low 8 bits as 0 and high 8 bits as not 0, return 1 if there is, otherwise return 0.
Please complete the statement at _____.
```cpp
int fun(unsigned int *p, int len)
{
for (int i = 0; i < len; i++)
{
if (_____1_____)
{
return 1;
}
p++;
}
return 0;
}
int main(int argc, _TCHAR* argv[])
{
int ret = 0;
unsigned int test[] = {0x00560000, 0x34022500, 0x100fee03};
ret = fun(&test[0], _____2_____);
return ret;
}
```
我的答案: , 正確答案: ((*p & 0xFF) == 0) && ((*p & 0xFF000000) != 0), sizeof(test) / sizeof(test[0])
#### 8 請問輸出
```cpp
#include <iostream>
union MyUnion
{
int a[2];
char b[8];
};
int main() {
MyUnion temp;
temp.a[0] = 3406;
std::cout << temp.b[0];
return 0;
}
```
~~我的答案: 不會~~,正確答案: N
> 3406 的二進位為 110101001110 int佔4 bytes,擴充到4 bytes-> 00000000 00000000 00001101 01001110
> union 的特性:
> * union 的所有成員共享相同的記憶體空間。
> * 成員的起始地址相同,但存取方式不同。
> * 更新一個成員時,會改變記憶體中共享區域的值,從而影響其他成員的值。
> char佔1 byte,所以只讀1個byte,01001110=78=N
**總共對3/8題**。
### project
> 第二部分比較偏聊天,介紹自己做過的project之類的,還有CS知識題問答(常見的包含thread vs process, stack vs heap, tcp vs udp)。這裡我大概介紹一下自己,然後因為我還沒有碩論,所以先用大學專題代替。
#### My project
我的大學專題是做校園安全辨識。在我們璇校的校園內,最外圍有一圈道路,稱為外環,是可以騎機車的,也因此事故率不低。此專題的初衷是想藉由外環的攝影機,做影像辨識,像是偵測違規或是有無倒車摔車的狀況,在第一時間通知相關單位。
但最後完成的只有能辨識到機車以及其車牌資訊而已。原因是因為本來是一組四個人進行開發,但是最後其他三人退出團隊,想要再努力一年,隔年再到專題展上發表,所以最後只剩我一個,我把我負責的這個部分,也就是辨識機車和車牌,稍微建個網頁來呈現,就完成了這個專題。
此專題有讓我學到yolo和opencv如何使用,在目前研究所實驗室負責的智慧交通計畫中,我負責的也是模型訓練這部分,因此我在yolo模型應用上面是蠻熟悉的!
#### thread vs process
process是系統分配資源的最小單,一個process有自己獨立的memory空間。而一個process內可以生成很多個threads,這些threads都共享同一個process的資源,共享其memory空間。process可以生成多個threads去做不同的工作,加速運行。
#### stack vs heap
stack是自動由編譯器分配,在呼叫函數時分配,函數return時就釋放。而heap是programer手動動態分配,需要手動釋放,資料儲存的較久。
#### tcp vs udp
TCP要三次握手才能連線,斷開連結時也要握手。而UDP不需要建立連線,可以直接傳輸資料。在傳送資料時,TCP會保證資料案正確順序到達,且不會遺失。而UDP就一直傳,資料可能會遺失,但其速度較快,延遲較低。
## reference
[研發替代役面試心得 (聯發科)](https://medium.com/hungys-blog/mediatek-rdss-interview-562697e9fc03)
[聯發科 線上C測驗 2023版](https://hackmd.io/@OCALa44CQ_KkE5_XJNef2Q/rkdwgwex3)
[2023 年後面試分享(聯發科、群聯、群暉、知微科技](https://www.dcard.tw/f/tech_job/p/241606966)