【筆試題精選】_1

32位機上根據下面的代碼,問哪些說法是正確的?
signed char a   = 0xe;
unsigned int b  = a;
unsigned char c = a;
A. a > 0 && c > 0
B. a == c 爲真
C. b 的十六進制表示爲: 0xffffffE0
D. 上面都不對

答案: 【C】
輸出:算法

a - dec: -32
b - hex: ffffffe0   // 高字節補符號位
c - dex: 224

說明:
有符號與無符號segmentfault


下面哪些選項能夠編譯經過?
int i;
char a[10];
string f();
string g(string& str);
A. if(!!i){f();}
B. g(f());
C. a=a+1;
D.g("abc");

答案:【A】
說明:數組

B. 只有 const 引用才能夠被臨時變量(對象)初始化(string f() 將返回一個臨時string對象)
C. 數組名可看做指向第一個元素的常量指針,沒法進行賦值操做
D. "abc" ==> const char* 類型

int a[10]; 問下面哪些地址不能夠表示a[1]的地址?
A. a + sizeof(int)
B. &a[0] + 1
C. (int*)&a + 1
D. (int*)((char*)&a + sizeof(int))

答案:【A】
說明:函數

Type* p;
p+n; <--> (unsigned int)p + n * sizeof(Type)

數組名可看做指向第一個元素的常量指針
a     類型 ==> int*
&a    類型 ==> int(*)[10]
a[0]  類型 ==> int

A. a + sizeof(int) ==> (unsigned int)a + 4 * sizeof(int)
B. &a[0] + 1       ==> (unsigned int)(&a[0]) + 1 * sizeof(int) 
C. (int*)&a + 1    ==> a + 1 ==> (unsigned int)a + 1 * sizeof(int)
D. (int*)((char*)&a + sizeof(int)) ==> (int*)((unsigend int)a + 4 * sizeof(char))

下面的 數據存放在哪些存儲區?
int main()
{
    char* p = "hello, word";
    return 0;
}
A. 代碼段
B. 棧
C. 常量取
D. 堆

答案:【B C】
說明:spa

棧: p
常量區:"hello, word"

下面哪些函數調用必須進入內核才能完成?
A. fopen
B. exit
C. memcpy
D. strlen

答案:【A B】
說明:線程

A. 打開設備、文件。將觸發設備驅動程序的調用,驅動程序運行於內核中。
B. 退出進程。由內核管理。
C. 內核空間可完成。
D. 內核空間可完成。

死鎖發生的必要條件?
A. 互斥條件
B. 請求和保持
C. 不可剝奪
D. 循環等待

答案:【A B C D】指針


有兩個線程,最初 n=0, 一個線程執行 n++; n++; 另外一個執行 n+=2; 問,最後可能的 n 值?
A. 1
B. 2
C. 3
D. 4

答案:【B C D】
說明:code

++ 非原子操做,實際會對應多條彙編語句,其中每一條彙編語句執行完成後均可能被打斷。

例 n++ 分解三步:取n值,加1,寫 n 值回內存。   

B. 線程1 n++;線程1 n++ 將要寫 n(2) 值回內存以前被線程2打斷,此時線程2完成n++(1+2),回寫內存3,線程1繼續運行,回寫內存2 ==> 2
C. 線程1 n++;線程2 n+=2, 將要回寫n(3)值回內存以前被線程1打斷,線程1 n++,回寫內存2,線程2繼續執行,回寫內存3 ==>3 
D. 線程1 n++, n++, 線程2 n+=2  ==> 4

下面哪些說法正確?
A. 數組和鏈表均可以隨機訪問
B. 數組的插入和刪除能夠達到 O(1)
C. 哈希表沒法進行範圍查找
D. 二叉樹沒法進行線性訪問

答案:【C】
說明:
A. 鏈表只能夠進行順序訪問
B. 數組的插入和刪除伴隨着相應元素的移動 O(n)
D. 二叉樹能夠進行線索化後進行線性訪問對象


基於比較排序的時間複雜度下限是多少?
A. O(n)
B. O(n^2)
C. O(nlogn)
D. O(logn)

答案:【C】
說明:排序

排序算法 時間複雜度 穩定性
選擇排序 O(n2) 不穩定
插入排序 O(n2) 穩定
冒泡排序 O(n2) 穩定
希爾排序 O(n2/3) 不穩定
歸併排序 O(nlogn) 穩定
快速排序 O(nlogn) 不穩定

對於下列程序,在一個 big endia 的32位機器上, b 的結果是?
unsigned int a = 0x1234;
char b = *((char*)&a);
A. 0x12
B. 0x34
C. 0x00
D. 程序崩潰

答案:【C】
說明:

大端:數據高位,保存在低地址處;數據低位,保存在高地址處

clipboard.png


編寫函數求兩個整數 a 和 b 之間的較大值。要求不能使用 if,while, switch, for, ?; 以及任何的比較語句。
int max(int a, int b)
{
    int d = a - b;
    int flag = ((unsigned int)d) >> 31;
    int array[] = {a, b};

    return array[flag];
}

(unsigned int)d 緣由: 有符號整型數的右移操做,低位被移除,高位補符號位。

相關文章
相關標籤/搜索