Try   HackMD

群聯面試 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:

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:

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

struct{ int a; int b; char t; char b; };

5. output

判斷下列程式的 output 為何?

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


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)

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)

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

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

結果: 感謝函