阿里巴巴2011筆試題+答案解析

1、有一個虛擬存儲系統,若進程在內存中佔3頁(開始時內存爲空),若採用先進先出(FIFO)頁面淘汰算法,當執行如下訪問頁號序列後1,2,3,4,5,1,2,5,1,2,3,4,5,會發生多少缺頁?
A、7                       B、8                            C、9                           D、10

 

2、設有一個順序棧S,元素s1、s2、s3、s4、s5、s6依次進棧,如果6個元素的出棧順序爲s2、s3、s4、s6、s5、s1,則順序棧的容量至少應爲多少?
A、2                      B、3                             C、4                           D、5

 

3、下列關於文件索引結構的敘述中,哪一個是錯誤的?
A、採用索引結構,邏輯上連續的文件存放在連續的物理塊中
B、系統爲每個文件建立一張索引表
C、索引結構的優點是訪問速度快,文件長度可以動態變化
D、索引結構的缺點是存儲開銷大

 

4、【0、2、1、4、3、9、5、8、6、7】是以數組形式存儲的最小堆,刪除堆頂元素0後的結果是()
A、【2、1、4、3、9、5、8、6、7】
B、【1、2、5、4、3、9、8、6、7】
C、【2、3、1、4、7、9、5、8、6】
D、【1、2、5、4、3、9、7、8、6】

 

5、某頁式存儲管理系統中,地址寄存器長度爲24位,其中頁號佔14位,則主存的分塊大小是()字節。
A、10                     B、2^10                      C、2^14                     D、2^24

 

6、在一個長爲33釐米的光滑凹軌上,在第3釐米、第6釐米、第19釐米、第22釐米、第26釐米處各有一個鋼珠,凹軌很細,不能同時通過兩個鋼珠,開始時,鋼珠運動方向是任意的。兩個鋼珠相撞後,以相同速度反向運動。假設所有鋼珠初始速度爲每秒運動1釐米,那麼所有鋼珠離開凹軌的最長可能時間是()
A、30                     B、26                        C、38                      D、33

 

7、std::vector::iterator重載了下面哪些運算符?
A、++                     B、>>                       C、*(前置)                   D、==

 

8、下列運算符,在C++語言中不能重載的是()
A、*                        B、?:                    C、::                           D、delete

 

9、在排序方法中,元素比較次數與元素的初始排列無關的是()
A、Shell 排序         B、歸併排序              C、直接插入排序                D、選擇排序

 

10、給定如下代碼: int x[4]={0}; int y[4]={1}; 數組x和y的值爲()
A、{0,0,0,0},{1,1,1,1}
B、{0,0,0,0},{1,0,0,0}
C、{0,不確定},{1,不確定}
D、與編譯器相關

 

10、給出以下定義,下列哪些操作是合法的?
const char *p1 = "hello";
char* const p2 = "world";
A、p1++                      B、p1[2]='w';                     C、p2[2]='l';                    D、p2++

 

11、假設在n進制下,下面的等式成立,n值是() 567*456=150216
A、9                B、10                 C、12                     D、18

 

12、關於struct和class,下列說法正確的是()
A、struct的成員默認是public,class的成員默認是private
B、struct不能繼承,class可以繼承
C、struct可以有無參構造函數
D、struct的成員變量只能是public

 

13、定義一個函數指針,指向的函數有兩個int形參並且返回一個函數指針,返回的指針指向一個有一個int形參且返回int的函數?
A、int (*(*F)(int, int))(int)
B、int (*F)(int, int)
C、int (*(*F)(int, int))
D、*(*F)(int, int)(int)

 

14、聲明一個指向含有10個元素的數組的指針,其中每個元素是一個函數指針,該函數的返回值是int,參數是int*,正確的是()
A、(int *p[10])(int*);
B、int [10]*p(int *);
C、int (*(*p)[10])(int *);
D、int ((int *)[10])*p;
E、以上選項都不正確

 

15、一個棧的輸入序列爲123.....n,若輸出序列的第一個元素是n,輸出第i(1<=i<=n)個元素是()
A、不確定
B、n-i+1
C、i
D、n-i

 

16、下列代碼編譯時會產生錯誤的是()

  1. #include <iostream> 
  2. using namespace std; 
  3. struct Foo 
  4.     Foo() {  } 
  5.     Foo(int) {  } 
  6.     void fun()   {  } 
  7. }; 
  8. int main(void) 
  9.     Foo a(10);    //語句1 
  10.     a.fun();      //語句2 
  11.     Foo b();      //語句3 
  12.     b.fun();      //語句4 
  13.     return 0; 

A、語句1             B、語句2           C、語句3             D、語句4        


17、在32位機器上,下列代碼中

  1. #pragma pack(2) 
  2. class A 
  3.     int i; 
  4.     union U 
  5.     { 
  6.         char buff[13]; 
  7.         int i; 
  8.     }u; 
  9.     void foo() {    } 
  10.     typedef char* (*f)(void*); 
  11.     enum{red, green, blue} color; 
  12. }a; 

sizeof(a)的值是()

A、20       B、21       C、22        D、24           E、非以上選項

 

18、下面描述中,錯誤的是()
A、基類定義的public成員在公有繼承的派生類中可見,也能在類外被訪問
B、基類定義的public和protected成員在私有繼承的派生類中可見,在類外可以被訪問
C、基類定義的public和protected成員在保護繼承的派生類中不可見
D、基類定義的protected成員在protected繼承的派生類中可見,也能在類外被訪問

 

19、當很頻繁地對序列中部進行插入和刪除操作時,應該選擇使用的容器是()
A、vector     B、list      C、deque      D、stack

 

20、判斷一個單向鏈表中是否存在環的最佳方法是()
A、兩重遍歷      B、快慢指針      C、路徑記錄       D、哈希表輔助


21、給你1、2、3 這三個數字 可以使用C的各種運算符 你能表示的最大的整數是()

A、2*3*sizeof(1)  B、3<<(2<<sizeof(1))   C、sizeof(3)<<(sizeof(2)<<(sizeof(1)))   D、(unsigned long)(2-3)*1

 

22、下面代碼的輸出是多少?

  1. class A 
  2. public: 
  3.     A()  {    cout<<"A"<<endl;    } 
  4.     ~A() {    cout<<"~A"<<endl;   } 
  5. }; 
  6.  
  7. class B:public A 
  8. public: 
  9.     B(A &a):_a(a) 
  10.     { 
  11.         cout<<"B"<<endl; 
  12.     } 
  13.     ~B() 
  14.     { 
  15.         cout<<"~B"<<endl; 
  16.     } 
  17. private: 
  18.     A _a; 
  19. }; 
  20.  
  21. int main(void) 
  22.     A a;
  23.     B b(a);
  24.     return 0;

 

23、一個骰子,6面,1個面是 1, 2個面是2, 3個面是3, 問平均擲多少次能使1、2、3都至少出現一次!

 

 

 

 

 

24、問題描述:
12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?

 參考答案(歡迎討論)轉載請註明來源http://www.cnblogs.com/jerry19880126/

  1. D。剛開始沒有頁的時候,也算缺頁。
  2. B。
  3. A。文件不一定在內存中連續存儲。
  4. D。堆排序,刪堆頂元素是用最後一個元素替換的,然後再比較堆頂元素和他的左右孩子,交換,如此遞推下去。
  5. B。
  6. A。看上去很煩,但可以換一種思維,A向右,B向左,碰後,A向左,B向右óA向右,B向左,碰後,交換兩球身份,A繼續向右,B繼續向左。這樣好像就沒有相碰一樣,最長時間是由距左側3釐米的球產生。
  7. ACD。
  8. BC。共有四個不能重載的,帶“點”的都不能重載。
  9. D。雖然網友給的答案是B,但我堅持認爲是D。
  10. B。未顯示初始化的元素自動爲0,但前提是有元素顯示初始化了,否則都是垃圾值。

          A。C是不可發的,因爲字符串常量不可以修改。

 

11. D。看最後一位數7*6=42 然後分別假設餘9、12、18,看結果對不對,比如42%9=6,A是可以的,第一次都可以,再試右邊倒數第二個數就能看出結果了。

12. A。

13. A。語法基礎,看書。

14. C。語法基礎,看書。

15. B。

16. D。語句3就已經不對了,應該沒有後面的括號的,但編譯器會認爲這是函數的聲明,所以3本身不報錯,4基於3的認識上出錯。

17. C。字節對齊問題。Union是取最大的字節數,取13字節,因爲pack(2),以2字節對齊,必須是2的倍數,所以對齊後是14。函數以及類型重定義不佔字節,外層的struct的字節是4+14+(3+1),這裏enum要是2的倍數,所以+1對齊,結果是22字節。

18. BCD。

19. B。vector和deque都是動態數組實現方式,但deque比vector更適合在頭部插入和刪除操作。Stack顯然不適合中部插刪。

20. B。快慢指針是指:一個一次步進兩級的快指針和一個一次只步進一級的慢指針。當快指針第二次碰到慢指針時,說明鏈表是循環的,算法複雜度爲 O(n),CD都還需要額外的空間存儲代價。

21. D。C是2^4 * 2^4 *4,顯然小於D的2^32-1。

22. AAB~B~A~A~A。注意A雖然沒有成員對象,但還是要析構的。

23. 不會。下面給出網友的答案:

平均的話是679/75次

1/6*(1+6/5*(2/5*(1+6/3)+3/5*(1+6/2)))

+2/6*(1+6/4*(1/4*(1+6/3)+3/4*(1+6/1)))

+3/6*(1+6/3*(1/3*(1+6/2)+2/3*(1+6/1)))=679/75

PS:事件A發生的概率爲p(0<p<1),則在重複獨立事件中,事件A第一次發生平均需要的次數爲1/p=p*(1+(1-p)*2+(1-p)^2*3+(1-p)^3*4+...)

 

24. 也不會。下面給出網友的答案:

問題分析:
我們先把這12個人從低到高排列,然後,選擇6個人排在第一排,那麼剩下的6個肯定是在第二排.
用0表示對應的人在第一排,用1表示對應的人在第二排,那麼含有6個0,6個1的序列,就對應一種方案.
比如000000111111就對應着
第一排:0 1 2 3 4 5
第二排:6 7 8 9 10 11
010101010101就對應着
第一排:0 2 4 6 8 10
第二排:1 3 5 7 9 11
問題轉換爲,這樣的滿足條件的01序列有多少個.
觀察1的出現,我們考慮這一個出現能不能放在第二排,顯然,在這個1之前出現的那些0,1對應的人
要麼是在這個1左邊,要麼是在這個1前面.而肯定要有一個0的,在這個1前面,統計在這個1之前的0和1的個數.
也就是要求,0的個數大於1的個數.
OK,問題已經解決.
如果把0看成入棧操作,1看成出棧操作,就是說給定6個元素,合法的入棧出棧序列有多少個.
這就是catalan數,這裏只是用於棧,等價地描述還有,二叉樹的枚舉,多邊形分成三角形的個數,圓括弧插入公式中的
方法數,其通項是c(2n, n)/(n+1)。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章