1. 程式人生 > >嵌入式面試總結

嵌入式面試總結

1.memcpy和strcpy的區別

(1).複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。
(2).複製的方法不同。strcpy不需要指定長度,它遇到被複制字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製的長度。
(3).用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy

2.用變數a定義

 一個整型數    int a;
 一個指向整型數的指標   int *a;
 一個指向指標的指標,它指向的指標式指向一個整型數   int **a;
 一個有10個整型數的陣列    int a[10];

 一個有10指標的陣列,該指標是指向一個整型數   int *a[10];

 一個指向有10個整型數陣列的指標    int (*a)[10];
 一個指向函式的指標,該函式有一個整型數引數並返回一個整型數     int (*a)(int);
 一個有10個指標的陣列,該指標指向一個函式,該函式有一個整型數引數並返回一個整型    int (*a[10])(int);

3.memcpy、strcpy和strncpy的區別

(1).複製的內容不同。strcpy只能複製字串,而memcpy可以複製任意內容,例如字元陣列、整型、結構體、類等。
(2).複製的方法不同。strcpy不需要指定長度,它遇到被複制字元的串結束符"\0"才結束,所以容易溢位。memcpy則是根據其第3個引數決定複製 的長度。

(3).用途不同。通常在複製字串時用strcpy,而需要複製其他型別資料時則一般用memcpy。

(4).strncpy引數可以設定複製字串的長度。

4.TCP/UDP的區別

TCP---傳輸控制協議,提供的是面向連線、可靠的位元組流服務。當客戶和伺服器彼此交換資料前,

必須先在雙方之間建立一個TCP連線,之後才能傳輸資料。TCP提供超時重發,丟棄重複資料,
檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。

UDP---使用者資料報協議,是一個簡單的面向資料報的運輸層協議。UDP不提供可靠

性,它只是把應用程式傳給IP層的資料報傳送出去,但是並不能保證它們能到達
目的地。由於UDP在傳輸資料報前不用在客戶和伺服器之間建立一個連線,且沒有

超時重發等機制,故而傳輸速度很快。

5.程序和執行緒的區別

(1).地址空間和其它資源:程序間相互獨立,同一程序的各執行緒間共享。某程序內的執行緒在其它程序不可見。
(2).通訊:程序間通訊IPC,通過管道、訊號量、訊息佇列、訊號、套接字、共享記憶體通訊,執行緒間可以直接讀寫程序資料段            (如全域性變數)來進行通訊——需要程序同步和互斥手段的輔助,以保證資料的一致性。
(3).一個執行緒可以建立和撤銷另一個執行緒,同一個程序中的多個執行緒之間可以併發執行。

6.下面定義dPS 和 tPS指標那種比較好,為什麼? 

  #define dPS struct s *

  typedef struct s * tPS;

        答:typedef更好,

      dPS p1,p2;     //p1是指向結構體的指標,P2是結構體

  tPS p3,p4;     //P3,P4都是指標

7.寫出strcpy函式原型。

    char* ctrcpy( char *dest,const char *src)
    {
        int i;
        if(!(dest&&src))
        return;

        while(*dest[i++]=*src++)
        return dest;
    }

8.氣泡排序和快速排序

    氣泡排序:

void bubble(int a[], int n)
{
int i,j,temp;

for(i=0; i<n-1; i++)
{
for(j=i+1; j<n; j++)
{
if(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
return 0;
}