1、已知中國人的血型分佈約爲A型:30%,B型:20%,O型:40%,AB型:10%,則任選一批中國人作爲用戶調研對象,希望他們中至少有一個是B型血的可能性不低於90%,那麼最少需要選多少人?
A、7 B、9 C、11 D、13
2、廣告系統爲了做地理位置定向,將IPV4分割爲627672個區間,並標識了地理位置信息,區間之間無重疊,用二分查找將IP地址映射到地理位置信息,請問在最壞的情況下,需要查找多少次?
A、17 B、18 C、19 D、20
3、有四隻老鼠一塊出去偷食物(每個都偷了),回來時,族長問它們都偷了什麼,老鼠A說:我們每個都偷了奶酪。老鼠B說:我只偷了一顆櫻桃。老鼠C說:我沒偷奶酪。老鼠D說:有些人沒偷奶酪。族長觀察了一下,發現它們當中只有一隻老鼠說了實話,那麼是哪隻老鼠說了實話?
A、老鼠A B、老鼠B C、老鼠C D、老鼠D
4、到商店裏買200的商品返還100的優惠券(可以在本商店代替現金)。如果使用優惠券買東西不能獲得新的優惠券,那麼買200返100優惠券,實際上省多少?
A、50%
B、66.7%
C、75%
D、33.3%
5、在數據庫邏輯設計中,當將E-R圖轉換爲關係模式時,下面的做法哪一個不正確?
A、一個實體類型轉換爲一個關係模式
B、一個聯繫類型轉換爲一個關係模式
C、由實體類型轉換成的關係模式的主鍵是該實體類型的主鍵
D、由聯繫類型轉換成的關係模式的屬性是與該聯繫類型相關的諸實體類型的屬性的全體
6、一家人有兩個孩子,性別未知,現在打電話給其中一個孩子得知是女孩,問另一個孩子也是女孩的概率是多少?
A、1/4 B、1/2 C、1/3 D、1/5
7、關於非空二叉樹的性質,下面哪個結論不正確(D)
A、有兩個節點的節點一定比沒有子節點的節點少一個 n0 = n2 + 1
B、根節點所在的層數爲第0層,則第i層最多有2^i個節點
C、若知道二叉樹的前序遍歷序列和中序遍歷序列,則一定可以退出後序遍歷序列。
D、堆一定是一個完全二叉樹
8、快速排序的平均時間複雜度和最壞時間複雜度是()
A、O(n^2), O(n^2)
B、O(n^2), O(nlgn)
C、O(nlgn) , O(nlgn)
D、O(nlgn) , O(n^2)
9、有一串數字 6 7 4 2 8 1 6 (),請問括號中的數字最可能是()
A、6 B、7 C、8 D、9
10、下面哪項不是鏈表優於數組的特點?
A、方便刪除 B、方便插入 C、長度可變 D、存儲空間小
11、給定聲明 const char * const * pp; 下屬操作或說明正確的是()
A、pp++
B、(*pp)++
C、(**pp) = 'c';
D、以上都不對
12、有下列代碼正確的是()
- std::string name1 = "youku";
- const char* name2 = "youku";
- char name3[] = {'y','o','u','k','u'};
- size_t l1 = name1.size();
- size_t l2 = strlen(name2);
- size_t l3 = sizeof(name2);
- size_t l4 = sizeof(name3);
- size_t l5 = strlen(name3);
std::string name1 = "youku";
const char* name2 = "youku";
char name3[] = {'y','o','u','k','u'};
size_t l1 = name1.size();
size_t l2 = strlen(name2);
size_t l3 = sizeof(name2);
size_t l4 = sizeof(name3);
size_t l5 = strlen(name3);
A、l1 = 5 l2 = 5 l3 = 4 l4 = 5 l5 = 不確定B、l1 = 5 l2 = 5 l3 = 5 l4 = 5 l5 = 不確定
C、l1 = 5 l2 = 6 l3 = 5 l4 = 5 l5 = 5
D、l1 = 5 l2 = 6 l3 = 5 l4 = 5 l5 = 6
13、Test執行後的輸出是:
- void Test()
- {
- class B
- {
- public:
- B(void)
- {
- cout<<"B\t";
- }
- ~B(void)
- {
- cout<<"~B\t";
- }
- };
- struct C
- {
- C(void)
- {
- cout<<"C\t";
- }
- ~C(void)
- {
- cout<<"~C\t";
- }
- };
- struct D : B
- {
- D()
- {
- cout<<"D\t";
- }
- ~D()
- {
- cout<<"~D\t";
- }
- private:
- C c;
- };
- D d;
- }
void Test()
{
class B
{
public:
B(void)
{
cout<<"B\t";
}
~B(void)
{
cout<<"~B\t";
}
};
struct C
{
C(void)
{
cout<<"C\t";
}
~C(void)
{
cout<<"~C\t";
}
};
struct D : B
{
D()
{
cout<<"D\t";
}
~D()
{
cout<<"~D\t";
}
private:
C c;
};
D d;
}
A、B C D ~D ~ C ~BB、D C B ~B ~C ~D
C、C D B ~B ~D ~C
D、C ~C D ~D B ~B
14、下列四種排序中(D)的空間複雜度最大
A、快速排序 B、冒泡排序 C、希爾排序 D、堆
15、設一棵二叉樹的深度爲k,則該二叉樹最多有(D)個節點。
A、2k-1 B、2^k C、2^(k-1) D、2^k-1
16、下面函數的功能是()
- int fun(char *x)
- {
- char *y = x;
- while(*y++);
- return (y-x-1);
- }
int fun(char *x)
{
char *y = x;
while(*y++);
return (y-x-1);
}
A、求字符串的長度B、比較兩個字符串的大小
C、將字符串x複製到字符串y
D、將字符串x連接到字符串y後面
17、k爲int類型,以下while循環執行()次。
- unsigned int k = 20;
- while(k >= 0)
- --k;
unsigned int k = 20;
while(k >= 0)
--k;
A、20次 B、一次也不執行
C、死循環 D、21次18、關於Cookie 和 Session的概念哪一個是對的
A、Cookie 存儲在客戶端,但過期時間設置在服務器上
B、Session 存儲在客戶端,但過期時間設置在服務器上
C、Cookie 中可以存儲ASCII空格‘ ’,而Session中不行
D、Cookie可以設置生效的路徑,而 Session則不能
19、以下關於鏈式存儲結構的敘述中哪一條是不正確的?
A、結點除自身信息外還包括指針域,因此存儲密度小於順序存儲結構
B、邏輯上相鄰的結點物理上不必鄰接
C、可以通過計算直接確定第i個結點的存儲地址
D、插入、刪除運算操作方便,不必移動結點
20、32位機器上,定義 int **a[3][4],這個數組佔多大的空間()
A、64 B、12 C、48 D、128
填空題
1、設數組定義爲a[60][70],每個元素佔2個存儲單元,數組按照列優先存儲,元素a[0][0]的地址爲1024,那麼元素a[32][58]的地址爲(8048)
2、在一個娛樂節目上,主持人提供有三扇門(假設爲A、B、C),只有1扇門後面有獎品,另兩扇門後面是空的,而主持人知道具體哪扇門後有獎品。首先,當你選擇了一扇門之後(假設A),主持人會把剩下兩扇門中的一扇沒有獎品的門打開(假設打開的空門爲B),現在你有一次機會決定是否要交換重新選擇,如果你堅持選擇A,你中獎的概率是(1/3),如果你交換選擇C,你中獎的概率是(2/3) http://en.wikipedia.org/wiki/Monty_Hall_problem
假設你選擇的1門,而主持人打開的是3門,則獎品在2門後面的概率是
3、一棵深度爲h的滿二叉樹,其最末一層共有(2^h)個節點(根節點深度爲0)
4、下面程序的運行結果爲(1 3 2)
- void foo(int *a , int *b)
- {
- *a = *a + *b;
- *b = *a - *b;
- *a = *a - *b;
- }
- void main()
- {
- int a = 1 , b = 2 , c = 3;
- foo(&a , &b);
- foo(&b , &c);
- foo(&c , &a);
- printf("%d %d %d\n",a,b,c);
- }
void foo(int *a , int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void main()
{
int a = 1 , b = 2 , c = 3;
foo(&a , &b);
foo(&b , &c);
foo(&c , &a);
printf("%d %d %d\n",a,b,c);
}
5、4個結點可以構造出(14)個不同的二叉樹 Catalan數
6、設有n個無序的記錄關鍵字,則直接插入排序的時間複雜度爲(O(n^2)),快速排序的平均時間複雜度爲(O(nlgn))
7、設一組初始記錄關鍵字序列爲(20,18,22,16,30,19),則以20爲中軸的一趟快速排序結果爲(19,18,16,20,30,22)
8、C語言的函數參數傳遞方式有傳遞 值 和 傳遞 地址
9、分配在堆上和棧上的內存,哪一個需要手動進行內存釋放? 堆上的內存
問答題:
一、有一個單向循環鏈表隊列,從頭開始報數,當報到m或者m的倍數的元素出列,根據出列的先後順序重新組成單向循環鏈表。
函數原型: void reorder(Node **head , int m)
二、優酷是中國第一的視頻網站,每天有上億的視頻被觀看,現在公司請研發人員找出最熱門的視頻。
該問題的輸入可以簡化爲一個字符串文件,每一行都表示一個視頻id,然後要找出出現次數最多的前100個視頻id,將其輸出,同時輸出該視頻的出現次數。
1、假設每天的視頻播放次數爲3億次,被觀看的視頻數量爲一百萬個,每個視頻ID的長度爲20個字節,限定使用的內存爲1G。請先描述做法,再寫代碼。
2、假設每個月的視頻播放次數爲100億次,被觀看的視頻數量爲1億個,每個視頻ID的長度爲20個字節,一臺機器被限定使用的內存爲1G。
那麼想找這個月被播放次數最多的前100個視頻,應該怎麼做?請描述清楚可能的辦法。
解析:海量數據的處理。無法一次性裝入內存,可先hash之分爲多個文件處理,堆或者Trie樹統計次數,求出每個文件中的Top 100。歸併之求出總的top 100。
對於第二問:還可以hadoop mapReduce處理之。
首先統計每個視頻被觀看次數,得到<id, cnt>鍵值對,其中id爲視頻id,cnt爲視頻被觀看次數。
以cnt作爲關鍵字建立最小堆。遍歷所有鍵值對,若堆的size小於100,則將鍵值對直接插入堆,否則比較鍵值對和堆頂元素大小,若cnt大於堆頂元素的cnt,則彈 出堆頂元素並將鍵值對插入堆。
對於第一問,由於id個數較少,統計部分可直接使用stl的map容器。
對於第二問,由於id個數太大,直接hash內存不夠,需要mapReduce。
三、給你一個由n-1個整數組成的未排序的序列,其元素都是1到n中的不同的整數。請寫出一個尋找序列中缺失整數的線性時間算法。
異或運算就可以解決了