---
# System prepended metadata

title: 群聯面試 Phison Interview
tags: [interview]

---

# 群聯面試 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 就直接拿自己筆電出來報，沒有限時。重點是要讓主管知道你的為人、個性，如何在短時間讓主管認識你才是自我介紹的目的。

最後總共面了五個小時，途中主管面完後還有大主管也來面。整個過程是自在，主管們不會太刁難，當成一次面談，認識對方，也讓對方認識你的心情來面。

**結果**: 感謝函

