# 群聯面試 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 就直接拿自己筆電出來報,沒有限時。重點是要讓主管知道你的為人、個性,如何在短時間讓主管認識你才是自我介紹的目的。
最後總共面了五個小時,途中主管面完後還有大主管也來面。整個過程是自在,主管們不會太刁難,當成一次面談,認識對方,也讓對方認識你的心情來面。
**結果**: 感謝函