面試 (網路搜尋的資源)


瑞昱藍芽:

  • 語言是C,大部分都是考Function的Return值 主管說他們最重視C code、OS、計算機組織 有通訊、硬體相關經歷加分
  • 指標函式 bitwise sizeof extern oop cstyle string 一些常考問題 以及資料結構如li nk list tree演算法如graph 霍夫曼 等等


1. 考void pointer之casting和call by refer.
unsigned int x = 0xa; 
void* ptr= (void*)&x; 
*(unsigned int*)ptr = 5; 
Call by reference 就不寫了 


2. 跟群聯一樣,第x bit改0

3.考白板題,題目分成C語言的pointer一些操作,考完後我有正確答出,再考如何知道電腦是big endian, little endian,不急不徐寫出後,後來就考一題單向linked list插入,也正確答出。

Q1: 不能用if 和 switch case , 請用你認為最快的方法實作main
extern void func1(void);
extern void func2(void);
extern void func3(void);
extern void func4(void);
extern void func5(void);
void main(int n)
{
  if n==1 execute func1;
  if n==2 execute func2;
  if n==3 execute func3;
  if n==4 execute func4;
  if n==5 execute func5;
}

Ans:

void (*fp[5]) ();
fp[0] = func1;
fp[1] = func2;
fp[2] = func3;
fp[3] = func4;
fp[4] = func5;
fp[n-1]();


Q2: 不使用if, 請用你認為最快的方法實作main
extern void func1(void);
extern void func2(void);
extern void func3(void);
extern void func4(void);
extern void func5(void);


void main(int n)
{
  if n==33 execute func1;
  if n==67 execute func2;
  if n==324 execute func3;
  if n==231 execute func4;
  if n==687 execute func5;
}

Ans:

void main(int n)
{
  if n==33 execute func1;
  if n==67 execute func2;
  if n==231 execute func4;
  if n==324 execute func3;
  if n==687 execute func5;
  if(n<231 else="" func1="" func2="" if="" n="">231)
      if(n!=324)
          func3();
      else
          func5();
  else
      func4();
}

Q3: Explain "#error" 
Q4: Explain "struct" and "union"
Q5: Explain "volatile". 

Q6: the value of v?
unsigned long v1 = 0x00001111;
unsigned long v2 = 0x00001212;
unsigned long v;
v = v1 & (~v2);
v = v | v2;

Q7: the value of *(a+1), (*p-1)?
int a[5] = {1, 2, 3, 4, 5};
int *p = (int*)(&a+1);

Q8: write a code
a) set the specific bit
b) clear the specific bit
c) inverse the specific bit (0->1; 1->0);

Q9: Re-write typedef _____;
void(*(*papf)[3](char *);
pf(*papf)[3];

Q10: write a code that check the input is a multiple of 3 or not without using division or mod

Q11: Explain lvalue and rvalue

Q12: 寫一個 function 可傳入正整數參數 N,回傳 1 + 2 + 3 +…+N 的和
Q14: reverse a linked list
Q15: 下面是一個 union ,請問要參考 ival 的值語法為何 ?
Q16: 寫一個“標準”巨集MIN ,這個巨集輸入兩個參數並返回較小的一個。
Q17: Write a code to swap integer a, b, without temporary variable.
Q18: Write a MARCO to calculate the square of integer a.
4. 何謂指標

指標是一種資料類型,用來表示物件或者變數的記憶體位置
5. 

機智問答大致內容如下
(a) 有九顆看起來一模一樣的球 但是有一顆不一樣重 也不知道它是比較輕還比較重 用一個天秤最少要量幾次可以"確保"找出這顆球?
Answer:
3次。

將9顆球分成A,B,C共3堆,每堆3顆球
A.ooo    B.ooo   C.ooo

                                                                  
[第1次]
拿A,B堆共6顆球分別放在天秤兩端
(i)假設不一樣重,就能知道想找的球在A,B其中之一
(ii)假設一樣重,就知道不一樣重的球是剩下沒秤的3顆其中之一


[第2次]
換掉輕的3顆(假設B較A輕),拿另外C堆的3顆上來量
假設天秤平衡了,就能知道不一樣重的球較輕
是剛剛被換掉的B堆3顆其中之一                                                 

                                                                                  
[第3次]    
拿B堆3顆的其中2顆來量
如果平衡了,那麼要找的就是剩下的第3顆較輕的球


PS
如果已知不一樣重的球是比較輕的
只需要兩次可確保找出,運氣好一次即可找出。


(b) 從1數到100 喊到100的人獲勝 每一次最少喊一個數 最多喊七個數 先攻的人喊到幾時便保證必勝?

Answer:                                                                        
如果自己要喊100,對方必須只能喊99~93,
        自己要喊  92,對方必須只能喊91~85,
        ...........................
        自己要喊  12,對方必須只能喊11~  5,
        自己要喊    4

因此只要先喊到4,則先喊的人必獲勝
往後原則就是喊 [8-對方喊幾次]

例如 A喊4
         B喊1次到5
         A喊(8-1=7次)到12
         直到A喊到92時,B不管怎樣都不會贏


(c) 就是FB上有出現過的假錢問題 有個商品賣30元 成本25元 客人用100元紙鈔跟商人買了商品 商人沒錢找所以拿了這張紙鈔去跟隔壁攤販換零錢找給客人後來隔壁攤販跑來說那是假鈔 所以商人又賠了100元給隔壁攤販 試問商人總共虧多少錢?
70+25 = 95

(d) 用若干個砝碼組合出1~100公克,請問砝碼最少數量為幾個?
7個 (1,2,4,8,16,32,64)


群聯:
題目有sizeof集錦(二維陣列的各大小)、bitwise operation (給你一個大小為4的陣列unsigned int,問你若要set 128 bit裡面其中一個bit的函式要怎麼寫。)、 linked list的刪除雙向鏈結、link是拿來幹嘛的、volatile的概念、有extern要如何拒 絕外部函數更改(使用static)。

1. 群聯三題
題目一:
題目會給一個int a[20]已排序的陣列,
請寫一個function(a, size)能印出0~500的數字,且不包含a陣列內的元素,
請用最少的時間和空間複雜度完成。
時間是O(n)空間是O(1);
第三題: 2. 白板題給一個 8-bit size的值求最高位元是在第幾個bit

3. (白板) 給你一個數字要你算數字的1bit有多少個? 進階: 不能用除法和乘法和模數運算子

4. (白板) if(a() &&b()) 這樣的寫法會有啥問題?
if會先判斷b在判斷a。
這樣會有什麼問題呢? (不是就跟上面一樣嗎?)
假若a是(ptr_1 != 0),b是(ptr_1->data == ptr_2->data)。
不先判斷a是否成立而先判斷 ptr_1 和 ptr_2 內容資料是否相等,
若(ptr_1 != 0)不成立則會發生記憶體讀取錯誤。

5. 0~500個數字每次隨機 取一個數字出來,但下次在抽出時不可以出現已經抽過的數字,問你如何時實現。
答出來後,會接著給予空間或時間限制,再叫你想新的做法,並討論其空間、時間複雜度。
用洗牌方法,首先宣告一個array裡面賦予0~500個值,接著srandom的方法取index,每次index= rand() % i,並做SWAP(i, idx)。
i = 9 餘數等於 0~8
SWAP(9,0~8)
i = 8
SWAP(8, 0~7)
i = 7
SWAP(7, 0~6)
.....

6. 金字塔
999999999
7777777 55555 333 1




7. (白板)


假設32位元系統,Little-Endian


uint32_t a =0x12345678;


uint8_t *p;


p =(uint8_t*)&a;


*p = ?


8. (白板)

假設32位元系統,Little-Endian
uint32_t a =0x12345678;
uint32_t *p;
a_address =0x5A6000;
p = &a;
問p+1 = ?

uint32_t  = 4 bytes;
又是little Endian 所以 位址+4bytes





9.  給兩個array塞數字,取差距最近的pair,答出來後,會問有沒有更快的方法

10. 判斷big endian 和 little endian? 先解釋再寫一個function判斷電腦是哪種類型。

11. 字串reverse

留言

這個網誌中的熱門文章

bitwise operation 面試考題