# 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 ![image](https://hackmd.io/_uploads/Skw_ESYUkl.png) 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)