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 operator爲private,爲了對稱,最好將operator delete也重載爲private。現在,你也許又有疑問了,難道創建棧對象不需要調用new嗎?是的,不需要,因爲創建棧對象不需要搜索內存,而是直接調整堆棧指針,將對象壓棧,而operator new的主要任務是搜索合適的堆內存,爲堆對象分配空間,
禁止產生棧對象:
前面已經提到了,創建棧對象時會移動棧頂指針以“挪出”適當大小的空間,然後在這個空間上直接調用對應的構造函數以形成一個棧對象,而當函數返回時,會調用其析構函數釋放這個對象,然後再調整棧頂指針收回那塊棧內存。在這個過程中是不需要operator new/delete操作的,所以將operator
new/delete設置爲private不能達到目的。當然從上面的敘述中,你也許已經想到了:將構造函數或析構函數設爲私有的,這樣系統就不能調用構造/析構函數了,當然就不能在棧中生成對象了。
9.C++程序題目。寫出運算結果
10.1是普通函數調用虛函數的結果
10.2是默認參數的問題。類似於這道題,記住:默認參數不參與動態綁定,與虛函數無關。
- #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
#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。
- 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
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的格式問題