# 凌陽面試心得
2023 軟韌體工程師_USB(ID0300)
今年真的比較不好找工作,主要因為美國終端需求減少,很多IC廠面臨必須裁員的情況,這個時候面試官都會比較挑一點,但我根據104開出的職缺內容認真準備了兩周,面試寫考卷的時候雖然還是有些不會,但面試官說我答對率很高!趁我還記得的時候記錄一下面試的題目,這次去有兩份考卷(好硬),一個小時內要寫完,一份是C語言一份是USB,寫完考卷的時候HR說USB那份是重點。因為網路上比較少USB這部分的面試考題,希望我的提供對將來要面試USB的人有所幫助!
## C語言面試題
1. ASCII code
```
char a ='B'
printf("%c", a=255); //B
```
2. pointer array
```
int a[]={1,2,3};
int *p = (&a+1);
printf("%d",*(a+1)); //2
printf("%d",*(p-1); //3
```
3. call by value,call by address code!
```
void funA(int a){
a = 5;
}
void funB(int* b){
*b = 5;
}
int main(){
int c = 1;
funA(c); //call by value c still 1
funB(&c); //call by address c become 5
}
```
4. SPI UART I2C difference
大致把這三種通訊界面會使用到的訊號寫出來,比較一下快慢,以及常被使用在哪些場景。

>REF: https://www.totalphase.com/blog/2021/12/i2c-vs-spi-vs-uart-introduction-and-comparison-similarities-differences/
5. power on sequence explanation with i2C signal
6. #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)
```
它返回基於地址 0 的指定結構成員的偏移量。首先,它將地址 0 強制轉換為正確的類型(即 (TYPE*) 強制轉換),然後將指定成員的偏移量添加到該基地址。 由於基地址為 0,您可以有效地獲得您在指定的成員的偏移量。
```
>REF: https://stackoverflow.com/questions/18554721/how-to-understand-size-t-type-0-member
7. When use "switch" better than "if"?
```
1.如果判斷的具體值不多,並且是byte、int、short、char類型的數值,建議使用switch case
2.區間判斷、boolean類型判斷,選用if else比較常見
```
8. array linked list pros and cons

9. what audio interface or format you know?
```
i2S
```
10. infinite loop
```
unsigned int i;
for(i=10;i>=0;--i){
printf("%d",i);
}
無限迴圈
```
11. calculate the size of struct and union
```
union A{
char a; //1
int b; //4
double c; //8
} //total : 8
struct B{
char[9]; //9
A a; //8
int y; //4
} //total : 12+8+4=24
```
12. When will happen memory leak? how to avoid?
```
一個已經廢棄的物件因為一些原因無法被回收,導致它一直占用記憶體造成浪費,即稱為記憶體洩漏。
如果在使用了 malloc ,程式執行完了,沒做啥其他的事情,就會 leak。那就是寫 C 時要有的習慣,寫完記得要 free()。
```
## USB面試考題
1. What information during USB Enumeration?
題目主要是問USB列舉的時候需要告知Host甚麼資訊,寫出兩個就行了,我大概列了幾個描述符資訊內容。
```
-端點能夠接收或發送的最大數據包的大小。
-端點傳送類型。
-端點能夠接收或發送的最大數據包的大小。
-此裝置屬於哪個Class。
-此裝置下有幾個interface,有幾個Configuration,有幾個endpoint。
```
(描述符的內容真的很多)
2. What kinds of transfer type in USB 2.0?
總共四種
```
-Control Transfers
-Interrupt Transfers
-Isochronous Transfers
-Bulk Transfers
```
3. Draw "Get report descriptor" packet
我當下忘記SETUP/IN這些封包的內容是甚麼...所以我只畫了:

`面試官要的答案:`

4. What packet device will reply that the endpoint has halted, or a control pipe does not support a certain request?
```
STALL handshake packet
(面試官說他用這題來篩選是否有USB開發經驗!)
```
>REF: https://community.silabs.com/s/article/the-role-of-stall-handshake-packet-in-usb-transfer?language=en_US