# 群聯面試 Phison Interview contributed by <`kylekylehaha`> `On Site Interview` 面試前一個半小時為考試,主考 C, OS 和 計組。 ## C programing 第一份總共有六題。 ### 1. Bitwise 操作 a.) get `x` the 18th bit -> `return (x & (1 << 17))` b.) set `x` the 18th bit to 1 -> `return (x | (1 << 17))` c.) clear `x` the 18 bit 0 -> `return (x &~(1 << 17))` d.) toggle `x` the 18 bit -> `return (x ^ (1 << 17))` ### 2. Revesrse String `str[] = '12345', please reverse the string.` Solution: ```cpp= int i = 0; int j = strlen(string) - 1; while(i < j){ // swap char tmp = str[i]; str[i] = str[j]; str[j] = tmp; i++; j--; } ``` ### 3. Finish BinarySearch code `bool BinarySearch(int *arr, int startIndex, int endIndex, int target);` Solution: ```cpp= int midIndex = startIndex + (endIndex - startIndex) / 2; if(startIndex < endIndex){ if(arr[midIndex] == target){ return 1; } else if (arr[midIndex] > target){ return BinarySearch(arr, startIndex, midIndex - 1, target); } else{ return BinarySearch(arr, midIndex + 1, endIndex, target) } return 0; } ``` ### 4. struct (記憶是考 struct 佔多少的 byte,但有點忘了。) `請計算下列 struct 佔多少 byte` ```cpp= struct{ int a; int b; char t; char b; }; ``` ### 5. output `判斷下列程式的 output 為何?` ```cpp= unsigned int i; for(i=10; i>=0; i--){ printf("%d\n", i); } ``` Solution ``` 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, 0, .... ``` 因為是 `unsigned int i`,所以 `i` 永遠會 >=0,for 迴圈不會終止。 ### 6. 利用 Linked list 實作 queue 實作下列 function - `push(data)` - `pop()` - `getfront()` - `getrear()` - `isEmpty()` - `getSize()` Solution [Queue - Linked List](https://www.geeksforgeeks.org/queue-linked-list-implementation/) --- ## OS 和 計算機組織 另一份題目有點多,有 25 題。題目有分必寫題(粗體),剩下的題目則是自己選 3 題來寫。 - **cache write through / write back + MESI補充** - **global variable, local variable, static, volatile** - **Call by value, Call by reference** - **stack 和 heap 的不同** - **Race condition** - **Function interrupt & ISR** - RISC 和 CISC 差別是什麼? - TLB(translation lookaside table) - 什麼是 hash map,請舉生活中用 hash map 的場景 --- ## 面試流程 接著就是自我介紹以及主管面談,其中主管還出了一題白板題:(後來發現根本就是 [leetcode #27: remove element](https://leetcode.com/problems/remove-element/description/?envType=study-plan-v2&envId=top-interview-150)) ``` unsorted array arr[] = {1, 2, 3, 3, 5, 7}, target = 3 請把不是 target 的放在前面,並且 return 整個 array。 也就是 array 前面項為 [1, 2, 5, 7] 即可。不需處理後續的資料 ``` 我是用 quicksort 的概念,將不是 target 的值 swap 到前面,target 移到後面. Time complexity = O(n) ```cpp= int* func(int *arr, int size, int target){ int i = -1; int j = 0; for(j=0; j<size; j++){ if(arr[j] != target){ i++; swap(&arr[i], &arr[j]); } } return arr; } ``` 工作內容: - 新人會有三個月的新人訓,期間會走整個產品流程(前, Algo, 後),讓你稍微了解。預計4-5個月。透過影片教學,2-3周會有 meeting 和考試。 - 半年後開始解決小問題,一年後有能力解決問題。 - 考績: 看貢獻,而非年資。一年調一次薪 - 部門目前 17 人,預計成長到 30 人 --- ## 心得 一開始先寫 90 分鐘的考卷,不用一開始就面對主管,其實心裡是放鬆不少。藉著這段時間好好整理思緒、調整心態。考題也和網路上的題目差不多,沒有太大的不同。計組, OS 要好好準備,重點就那些,穩穩念就不需擔心寫不出來。 自我介紹時主管會問有沒有資料可以呈現或提供的,我是有準備一份紙本履歷以及 ppt。ppt 就直接拿自己筆電出來報,沒有限時。重點是要讓主管知道你的為人、個性,如何在短時間讓主管認識你才是自我介紹的目的。 最後總共面了五個小時,途中主管面完後還有大主管也來面。整個過程是自在,主管們不會太刁難,當成一次面談,認識對方,也讓對方認識你的心情來面。 **結果**: 感謝函