2012網易校園招聘筆試試題

 1.長度爲M字符串匹配與長度爲N的字符串匹配的時間複雜度?

我查了查,O(M + N)。KMP能做到。

這裏:http://blog.csdn.net/meixr/article/details/6456896

2.排序的穩定性:選擇排序、快速排序、希爾排序、堆排序不是穩定的排序算法,而冒泡排序、插入排序、歸併排序和基數排序是穩定的排序算法

3.二叉平衡樹的插入問題。

此時,插入3之後,畫出新的二叉樹?

插入3後,變成不平衡的了:如下:




節點5右旋一次:


節點2左旋一次:


4.求兩個集合A和B的公共元素

5.Top K 算法;

6.數據庫的概念:事務的定義?事務的屬性?事務隔離級別的高低?

7.哪種設計模式可以使得調用者不關心具體算法?

   策略模式

8.編程

8.1求解題目:沒有看懂

8.2自己實現一個hashtable表

8.3如何限制棧對象的生成?如何限制堆對象的生成?

     之前轉載的那篇《C++內存管理》最後一章節——《對象內存大會戰》有詳細地描述。我轉錄如下:

     禁止產生堆對象:

     那麼怎樣禁止產生堆對象了?我們已經知道,產生堆對象的唯一方法是使用new操作,如果我們禁止使用new不就行了麼。再進一步,new操作執行時會調用operator new,而operator new是可以重載的。方法有了,就是使new operatorprivate,爲了對稱,最好將operator delete也重載爲private。現在,你也許又有疑問了,難道創建棧對象不需要調用new嗎?是的,不需要,因爲創建棧對象不需要搜索內存,而是直接調整堆棧指針,將對象壓棧,而operator new的主要任務是搜索合適的堆內存,爲堆對象分配空間

     禁止產生棧對象:

     前面已經提到了,創建棧對象時會移動棧頂指針以“挪出”適當大小的空間,然後在這個空間上直接調用對應的構造函數以形成一個棧對象,而當函數返回時,會調用其析構函數釋放這個對象,然後再調整棧頂指針收回那塊棧內存。在這個過程中是不需要operator new/delete操作的,所以將operator new/delete設置爲private不能達到目的。當然從上面的敘述中,你也許已經想到了:將構造函數或析構函數設爲私有的,這樣系統就不能調用構造/析構函數了,當然就不能在棧中生成對象了。

9.C++程序題目。寫出運算結果

10.1是普通函數調用虛函數的結果

10.2是默認參數的問題。類似於這道題,記住:默認參數不參與動態綁定,與虛函數無關。

  1. #include <iostream>   
  2. using namespace std;  
  3.   
  4. class A  
  5. {  
  6. public:  
  7.     virtual void Fun(int number = 10)  
  8.     {  
  9.         std::cout << "A::Fun with number " << number<<endl;  
  10.     }  
  11. };  
  12.   
  13. class B: public A  
  14. {  
  15. public:  
  16.     virtual void Fun(int number = 20)  
  17.     {  
  18.         std::cout << "B::Fun with number " << number<<endl;  
  19.     }  
  20. };  
  21.   
  22. int main()  
  23. {  
  24.     B b;  
  25.     A &a = b;  
  26.     a.Fun();  
  27.  return 0;  
  28. }                 //虛函數動態綁定=>B,非A,缺省實參是編譯時候確定的=>10,非20   
#include <iostream>
using namespace std;

class A
{
public:
    virtual void Fun(int number = 10)
    {
        std::cout << "A::Fun with number " << number<<endl;
    }
};

class B: public A
{
public:
    virtual void Fun(int number = 20)
    {
        std::cout << "B::Fun with number " << number<<endl;
    }
};

int main()
{
    B b;
    A &a = b;
    a.Fun();
 return 0;
}                 //虛函數動態綁定=>B,非A,缺省實參是編譯時候確定的=>10,非20 


10.3是C++各種成員變量的初始化問題。

主要是staitc,const,static const的問題;這裏有詳細地解答

http://blog.csdn.net/yjkwf/article/details/6067267

在C++中,static靜態成員變量不能在類的內部初始化。在類的內部只是聲明,定義必須在類定義體的外部,通常在類的實現文件中初始化,如:double Account::Rate=2.25;static關鍵字只能用於類定義體內部的聲明中,定義時不能標示爲static

      在C++中,const成員變量也不能在類定義處初始化,只能通過構造函數初始化列表進行,並且必須有構造函數。

      const數據成員 只在某個對象生存期內是常量,而對於整個類而言卻是可變的因爲類可以創建多個對象,不同的對象其const數據成員的值可以不同。所以不能在類的聲明中初始化const數據成員,因爲類的對象沒被創建時,編譯器不知道const數據成員的值是什麼。

      const數據成員的初始化只能在類的構造函數的初始化列表中進行。要想建立在整個類中都恆定的常量,應該用類中的枚舉常量來實現,或者static cosnt。

  1. class Test  
  2. {  
  3. public:  
  4.       Test():a(0){}  
  5.       enum {size1=100,size2=200};  
  6. private:  
  7.       const int a;//只能在構造函數初始化列表中初始化  
  8.        static int b;//在類的實現文件中定義並初始化  
  9.       const static int c;//與 static const int c;相同。  
  10. };  
  11.   
  12. int Test::b=0;//static成員變量不能在構造函數初始化列表中初始化,因爲它不屬於某個對象。  
  13. cosnt int Test::c=0;//注意:給靜態成員變量賦值時,不需要加static修飾符。但要加cosnt  
class Test
{
public:
      Test():a(0){}
      enum {size1=100,size2=200};
private:
      const int a;//只能在構造函數初始化列表中初始化
       static int b;//在類的實現文件中定義並初始化
      const static int c;//與 static const int c;相同。
};

int Test::b=0;//static成員變量不能在構造函數初始化列表中初始化,因爲它不屬於某個對象。
cosnt int Test::c=0;//注意:給靜態成員變量賦值時,不需要加static修飾符。但要加cosnt

附加題目

1.

2.XML的格式問題

發佈了93 篇原創文章 · 獲贊 7 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章