# 凌陽面試心得 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 大致把這三種通訊界面會使用到的訊號寫出來,比較一下快慢,以及常被使用在哪些場景。 ![](https://i.imgur.com/nDSGrDg.png) >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 ![](https://i.imgur.com/5OTLj6Y.png) 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這些封包的內容是甚麼...所以我只畫了: ![](https://i.imgur.com/uwFCCtu.png) `面試官要的答案:` ![](https://i.imgur.com/HHSA745.png) 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