1. 程式人生 > >阿里巴巴筆試題

阿里巴巴筆試題

               

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、選擇排序A、C肯定不選的,歸併排序的在merge中是跟序列有關,如果有序,比較次數最少n/2,最糟是元素錯落n-1。而選擇排序比較次數與關鍵字的初始狀態無關,總的比較次數N=(n-1)+(n-2)+...+1=n*(n-1)/2。所以 應該是選擇排序!

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=150216A、9                B、10                 C、12                     D、18

假設是X進位制,則567=7+6*X+5*X^2,456=6+5*X+4*X^2,所以564*456=(7+6*X+5*X^2)*(6+5*X+4*X^2)而150216=6+X+2*X^2+5*x^4+X^5,由於567*456=150216,則6+X+2*X^2+5*x^4+X^5=(7+6*X+5*X^2)*(6+5*X+4*X^2),最後解出來X=18

12、關於struct和class,下列說法正確的是()A、struct的成員預設是public,class的成員預設是privateB、struct不能繼承,class可以繼承C、struct可以有無參建構函式D、struct的成員變數只能是public

若不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;都可使用public/private/protected修飾符,都可以有無參建構函式

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+1C、iD、n-i

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

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

A、語句1             B、語句2           C、語句3             D、語句4        17、在32位機器上,下列程式碼中

#pragma pack(2)class A{ int i; union U {  char buff[13];  int i; }u; void foo() {    } typedef char* (*f)(void*); enum{red, green, blue} color;}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

-1的二進位制形式就是全1表示

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

class A{public: A()  {    cout<<"A"<<endl;    } ~A() {    cout<<"~A"<<endl;   }};class B:public A{public: B(A &a):_a(a) {  cout<<"B"<<endl; } ~B() {  cout<<"~B"<<endl; }private: A _a;};int main(void){ A a;       //很簡單,定義a的時候呼叫了一次建構函式 B b(a);    //這裡b裡面的_a是通過成員初始化列表構造起來的 //而且是通過copy constructor構造的是b的成員物件_a的,這裡是編譯器預設的,因此在構造好_a前,先呼叫基類建構函式    //然後才是構造自身,順序就是A()->_a->B()(區域性)    //因此這裡有兩個A,一個B  //在return之前進行析構    /************************************************************************/    /*析構是按照定義物件的反順序來的,而且同一個物件按照構造的反順序來的,因此這裡先    析構b然後才是a,那麼b的構造順序是上面的A()->_a->B()(區域性),反過來,就是B()(區域性)->_a->A()    因此得到的就是~B->~A->~A    在b之後就是析構a    最後結果就是    ~B->~A->~A->~A*/ return 0;}

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

24、一個有趣的拋硬幣問題假設有一個硬幣,丟擲字(背面)和花(正面)的概率都是0.5,而且每次拋硬幣與前次結果無關。現在做一個遊戲,連續地拋這個硬幣,直到連續出現兩次字為止,問平均要拋多少次才能結束遊戲?注意,一旦連續丟擲兩個“字”向上遊戲就結束了,不用繼續拋。上面這個題目我第一次見到是在pongba的TopLanguage的一次討論上,提出問題的人為Shuo Chen,當時我給出了一個解法,自認為已經相當簡單了,先來考慮一下拋硬幣的過程:首先先拋一枚硬幣,如果是花,那麼需要重頭開始;如果是字,那麼再拋一枚硬幣,新拋的這枚如果也是字,則遊戲結束,如果是花,那麼又需要重頭開始。根據這個過程,設拋硬幣的期望次數為T,可以得到關係:  T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T) 解方程可得到 T = 6。或者根據公式,需要連續丟擲n個字的一般情形,結果相當簡潔:Tn = 2^(n+1) - 2,其中Tn為首次出現連續的n個字的期望投擲數。參考連結    http://www.cnblogs.com/atyuwen/archive/2010/09/12/coin.html25、問題描述:12個高矮不同的人,排成兩排,每排必須是從矮到高排列,而且第二排比對應的第一排的人高,問排列方式有多少種?這個筆試題,很YD,因為把某個遞迴關係隱藏得很深。

問題分析:我們先把這12個人從低到高排列,然後,選擇6個人排在第一排,那麼剩下的6個肯定是在第二排。用0表示對應的人在第一排,用1表示對應的人在第二排,那麼含有6個0,6個1的序列,就對應一種方案。比如000000111111就對應著第一排:0 1 2 3 4 5第二排:6 7 8 9 10 11010101010101就對應著第一排: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)。