面試問答
白板題--racing condition:給2個function,都會改變某變數的值,問該變數最後的可能的值為何?
由於正在runnin...
會先寫一張C的考題,內容包含:
stack和heap的差別
structure內的變數如何擺放較省空
間
bitwise operation
給一段code,問你怎麼改對GCC而言較有效率(很多題)
sizeof(char*)、sizeof(char a[10])等等各為多少
#include<filename.h>和#include "filename.h"的差異
寫完後會有一位主管進來,先請你就研究所或大學專題擇一做說明,接著考幾題白板題,最後說明部門的工作內容及產品,然後看有沒有甚麼問題,整個面試大約花了2個小時左右。
面試問答
白板題--racing condition:給2個function,都會改變某變數的值,問該變數最後的可能的值為何?
由於正在running的thread可能在任何時刻被其他thread給中斷,因此他對該變數的改動不一定已經寫回memory了,所以其他thread可能基於該變數的舊值,或是改動過後的值進行更改,因此該變數最後可能只被某一thread修改,又或是可以看到所有threads更改後的結果。
白板題--no extra memory allocation的string reverse
從字串的開頭開始,直到找到字串的結尾止,記住字串結尾的位置、字串長度,接著將指標head、tail分別指向字串的頭、尾,然後用for迴圈跑(字串長度/2)次,每次皆對head和tail做swap,並更新head為head+sizeof(char)、tail為tail-sizeof(char)便可完成。
面試建議
建議對自己研究所/大學做過的專題有足夠的認識可以說明,並熟悉C語言的知識,如一些資料型態的大小,以compiler的角度來看怎麼寫會較有效率等。