C/C++筆試題(很多)__C++

來源:互聯網
上載者:User
微軟亞洲技術中心的面試題。。。
1.進程和線程的差別。


線程是指進程內的一個執行單元,也是進程內的可調度實體.
與進程的區別:
(1)調度:線程作為調度和分配的基本單位,進程作為擁有資源的基本單位
(2)並發性:不僅進程之間可以並發執行,同一個進程的多個線程之間也可並發執行
(3)擁有資源:進程是擁有資源的獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源. 
(4)系統開銷:在建立或撤消進程時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤消線程時的開銷。
2.測試方法


人工測試:個人複查、抽查和會審
機器測試:黑箱測試和白盒測試
2.Heap與stack的差別


Heap是堆,stack是棧。
Stack的空間由作業系統自動分配/釋放,Heap上的空間手動分配/釋放。
Stack空間有限,Heap是很大的自由儲存區
C中的malloc函數分配的記憶體空間即在堆上,C++中對應的是new操作符。
程式在編譯期對變數和函數分配記憶體都在棧上進行,且程式運行過程中函數調用時參數的傳遞也在棧上進行
3.Windows下的記憶體是如何管理的。

4.介紹.Net和.Net的安全性。


5.用戶端如何訪問.Net組件實現Web Service。
6.C/C++編譯器中虛表是如何完成的。

7.談談COM的執行緒模式。然後討論進程內/外組件的差別。

8.談談IA32下的分頁機制


小頁(4K)兩級分頁模式,大頁(4M)一級
9.給兩個變數,如何找出一個帶環單鏈表中是什麼地方出現環的。


一個遞增一,一個遞增二,他們指向同一個接點時就是環出現的地方   。。
10.在IA32中一共有多少種辦法從使用者態跳到核心態。


通過調用門,從ring3到ring0,中斷從ring3到ring0,進入vm86等等
11.如果只想讓程式有一個執行個體運行,不能運行兩個。像winamp一樣,只能開一個視窗,怎樣實現。

用記憶體映射或全域原子(互斥變數)、尋找視窗控制代碼.. 
FindWindow,互斥,寫標誌到檔案或註冊表,共用記憶體。. 
12.如何截取鍵盤的響應,讓所有的‘a’變成‘b’。


鍵盤鉤子SetWindowsHookEx
13.Apartment在COM中有什麼用。為什麼要引入。

14.預存程序是什麼。有什麼用。有什麼優點。

 

    預存程序(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經編譯後儲存在資料庫。中使用者通過指定預存程序的名字並給出參數(如果該預存程序帶有參數)來執行它。

預存程序用於實現頻繁使用的查詢、商務規則、被其他過程使用的公用例行程式

預存程序在建立時即在伺服器上進行編譯,所以執行起來比單個 SQL 語句快

15.Template有什麼特點。什麼時候用。
16.談談Windows DNA結構的特點和優點。

17.網路編程中設計並發伺服器,使用多進程與多線程 ,請問有什麼區別。


1,進程:子進程是父進程的複製品。子進程獲得父進程資料空間、堆和棧的複製品。
2,線程:相對與進程而言,線程是一個更加接近與執行體的概念,它可以與同進程的其他線程共用資料,但擁有自己的棧空間,擁有獨立的執行序列。
區別:兩者都可以提高程式的並發度,提高程式運行效率和回應時間。線程和進程在使用上各有優缺點:線程執行開銷小,但不利於資源管理和保護;而進程正相反。同時,線程適合於在SMP機器上運行,而進程則可以跨機器遷移。

 

  MSRA Interview Written Exam(December 2003,Time:2.5 Hours)
1寫出下列演算法的時間複雜度。


(1)冒泡排序; 
(2)選擇排序; 
(3)插入排序; 
(4)快速排序; 
(5)堆排序; 
(6)歸併排序;

  2寫出下列程式在X86上的運行結果。

 

struct mybitfields 

unsigned short a : 4; 
unsigned short b : 5; 
unsigned short c : 7; 
}test

void main(void)  

int i; 
test.a=2; 
test.b=3; 
test.c=0;

i=*((short *)&test); 
printf("%d/n",i); 
}

  3寫出下列程式的運行結果。

 

unsigned int i=3; 
cout<<i * -1;

  4寫出下列程式所有可能的運行結果。

int a; 
int b; 
int c;

void F1() 

b=a*2; 
a=b; 
}

void F2() 

c=a+1; 
a=c; 
}

main() 

a=5; 
//Start F1,F2 in parallel 
F1(); F2(); 
printf("a=%d/n",a); 
}

  5考察了一個CharPrev()函數的作用。

  6對 16 Bits colors的處理,要求:


(1)Byte轉換為RGB時,保留高5、6bits; 
(2)RGB轉換為Byte時,第2、3位置零。

  7一個鏈表的操作,注意代碼的健壯和安全性。要求:


(1)增加一個元素; 
(2)獲得頭元素; 
(3)彈出頭元素(獲得值並刪除)。

  8一個給定的數值由左邊開始升位到右邊第N位,如 0010<<1 == 0100 或者 
0001 0011<<4 == 0011 0000 請用C或者C++或者其他X86上能啟動並執行程式實現。

  附加題(只有在完成以上題目後,才獲准回答)


1。In C++, what does "explicit" mean? what does "protected" mean?

c++中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,在某些情況下,我們要求類的使用者必須顯示調用類的建構函式時就需要使用explicit,反之預設類型轉換可能會造成無法預期的問題。

protected控制的是一個函數對一個類的成員(包括成員變數及成員方法)的存取權限。protected成員只有該類的成員函數及其衍生類別的成員函數可以訪問

 

1.  在C++中有沒有純虛建構函式。

建構函式不能是虛的。只能有虛的解構函式

 

2.  在c++的一個類中聲明一個static成員變數有沒有用。

在C++類的成員變數被聲明為static(稱為靜態成員變數),意味著它為該類的所有執行個體所共用,也就是說當某個類的執行個體修改了該靜態成員變數,也就是說不管建立多少對象,static修飾的變數只佔有一塊記憶體。其修改值為該類的其它所有執行個體所見;而類的靜態成員函數也只能訪問靜態成員(變數或函數)。

static是加了存取控制的全域變數,不被繼承。  


3。在C++的一個類中聲明一個靜態成員函數有沒有用。 (同上?)


4。如何?一個非阻塞的socket?


5。setsockopt, ioctl都可以對socket的屬性進行設定,他們有什麼不同。 (linux)


6。解釋一下進程和線程的區別。 (重複,參見微軟亞洲技術中心筆試)
7。解釋一下多播(組播)和廣播的含義。

組播:主機之間“一對一組”的通訊模式,也就是加入了同一個組的主機可以接受到此組內的所有資料,網路中的交換器和路由器只向有需求者複製並轉寄其所需資料。主機可以向路由器請求加入或退出某個組,網路中的路由器和交換器有選擇的複製並傳輸資料,即只將組內資料轉送給那些加入組的主機。

廣播:主機之間“一對所有”的通訊模式,網路對其中每一台主機發出的訊號都進行無條件複製並轉寄,所有主機都可以接收到所有資訊(不管你是否需要).

 

8。多播採用的協議是什麼。


9。在c++中純虛解構函式的作用是什麼。請舉例說明。


10。編程,請實現一個c語言中類似atoi的函數功能(輸入可能包含非數字和空格)

  百度筆試題

 

一、選擇題:15分 共10題 
1.    在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是    . 
A. Shell排序      B. 歸併排序       C. 直接插入排序     D. 選擇排序

 

2.    以下多線程對int型變數x的操作,哪幾個需要進行同步: 
A. x=y;         B. x++;         C. ++x;            D. x=1;

 

3.    代碼 
void func() { 
        static int val; 
        … } 中,變數val的記憶體位址位於: 
A. 已初始化資料區段    B.未初始化資料區段      C.堆              D.棧

 

4.    同一進程下的線程可以共用以下 
A. stack            B. data section   C. register set        D. thread ID

 

5.    TCP和IP分別對應了 OSI中的哪幾層。 
A.  Application layer 
B.  Data link layer 
C.  Presentation layer 
D.  Physical layer 
E.  Transport layer 
F.  Session layer 
G.  Network layer

 

6.    short a[100],sizeof(a)返回。 
A 2     B 4       C 100       D 200        E 400

 

7.    以下哪種不是基於組件的開發技術_____。 
A XPCOM        B XP           C COM                D CORBA

 

8.    以下代碼列印的結果是(假設運行在i386系列電腦上): 
    struct st_t 
    { 
        int    status; 
        short* pdata; 
        char   errstr[32]; 
    };

    st_t  st[16]; 
    char* p = (char*)(st[2].errstr + 32); 
    printf("%d", (p - (char*)(st)));

A 32          B 114       C 120         D 1112

 

9.    STL中的哪種結構是連續形式的儲存 
A  map      B  set         C  list      D  vector

 

10.    一個棧的入棧序列是A,B,C,D,E,則棧的不可能的輸出序列是( ) 
A、EDCBA;   B、DECBA;    C、DCEAB;    D、ABCDE

 

參考答案:D /ABC/ A/ BC /EG /D /B/ C/ D/ C

 

二、簡答題:20分,共2題

1.    (5分)重複多次fclose一個開啟過一次的FILE *fp指標會有什麼結果,並請解釋。 
考察點:導致檔案描述符結構中指標指向的記憶體被重複釋放,進而導致一些不可預期的異常。

2.    (15分)下面一段代碼,想在調用f2(1)時列印err1,調用f2(2)時列印err4,但是代碼中有一些問題,請做儘可能少的修改使之正確。 
     
1    static int f1(const char *errstr, unsigned int flag) { 
2        int copy, index, len; 
3        const static char **__err = {“err1”, “err2”, “err3”, “err4”}; 
4     
5        if(flag & 0x10000) 
6            copy = 1; 
7        index = (flag & 0x300000) >> 20; 
8      
9        if(copy) { 
10            len = flag & 0xF; 
11            errstr = malloc(len); 
12            if(errstr = NULL) 
13                return -1; 
14            strncpy(errstr, __err[index], sizeof(errstr)); 
15        } else 
16            errstr =  __err + index;     
17    } 
18 
19    void f2(int c) { 
20        char *err; 
22        swtch(c) { 
23        case 1: 
24            if(f1(err, 0x110004) != -1) 
25                printf(err); 
26        case 2: 
27            if(f2(err, 0x30000D) != -1) 
28                printf(err); 
29        } 
30 }    

三、編程題:30分 共1題    注意:要求提供完整代碼,如果可以編譯運行酌情加分。

1.    求符合指定規則的數。 
給定函數d(n) = n + n的各位之和,n為正整數,如 d(78) = 78+7+8=93。 這樣這個函數可以看成一個產生器,如93可以看成由78產生。  
定義數A:數A找不到一個數B可以由d(B)=A,即A不能由其他數產生。現在要寫程式,找出1至10000裡的所有符合數A定義的數。 
輸出: 


 

四、設計題:35分 共1題 
注意:請儘可能詳細描述你的資料結構、系統架構、設計思路等。建議多寫一些虛擬碼或者流程說明。

1.    假設一個mp3搜尋引擎收錄了2^24首歌曲,並記錄了可收聽這些歌曲的2^30條URL,但每首歌的URL不超過2^10個。系統會定期檢查這些URL,如果一個URL不可用則不出現在搜尋結果中。現在歌曲名和URL分別通過整型的SONG_ID和URL_ID唯一確定。對該系統有如下需求: 
1)    通過SONG_ID搜尋一首歌的URL_ID,給出URL_ID計數和列表 
2)    給定一個SONG_ID,為其添加一個新的URL_ID 
3)    添加一個新的SONG_ID 
4)    給定一個URL_ID,將其置為不可用

限制條件:記憶體佔用不超過1G,單個檔案大小不超過2G,一個目錄下的檔案數不超過128個。

為獲得最佳效能,請說明設計的資料結構、搜尋演算法,以及資源消耗。如果系統資料量擴大,該如何多機分布處理。

  漢略曾考的測試題目


Q:When speaking of software products, how do you define the term“quality”.
問:當說到軟體產品的時候,你如何定義術語“品質”

       Meeting customer requirements
Q:What is the role of software debelopers and quality assuranle engineers in ensuring the quality of the product? How are other functional areas important to developing a quality product?
問:在確定產品的品質方面,什麼是軟體開發工程師和品質保證工程師要做的。其他的功能對如何發展產品品質有什麼重要。

 軟體測試是貫穿整個軟體開發生命週期、對軟體產品(包括階段性產品)進行驗證和確認的活動過程,其目的是儘快儘早地發現在軟體產品中所存在的各種問題——與使用者需求、預先定義的不一致性。Quality assuranle engineers: use a set of activities designed to ensure the development process to meet the requirements.
Q:What is cyclomatic complexity?
問:(這是一個複雜度模型吧)

一種代碼複雜度的衡量標準,中文名稱叫做循環複雜度。循環複雜度“用來衡量一個模組判定結構的複雜程度,數量上表現為獨立現行路徑條數,即合理的預防錯誤所需測試的最少路徑條數,循環複雜度大說明程式碼可能品質低且難於測試和維護,根據經驗,程式的可能錯誤和高的圈複雜

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.