第一部分 單選題(前10題,每題2分;后10題,每題3分;共50分。選對(duì)得滿分,選錯(cuò)倒扣一分,不選得0分。)
1、字符串”alibaba”有 個(gè)不同的排列。
A. 5040 B. 840 C. 14 D.420
2、下列一段C++代碼的輸出是 。
class Base
{
public:
int Bar(char x) {return (int)(x);}
virtual int Bar(int x) {return(2*x);}
};
class Derived :public Base
{
public:
int Bar(char x) {return(int)(-x);}
int Bar(int x) {return (x/2);}
};
void main(void)
{
Derived Obj;
Base*pObj=&Obj;
printf(“%d,”,pObj->Bar((char)(100)));
printf(“%d,”,pObj->Bar(100));
}
A. 100,50 B. -100,200 C. -100,50 D. 100,200
3、有一個(gè)二維數(shù)組A[10][5],每個(gè)數(shù)據(jù)元素占1個(gè)字節(jié),且A[0][0]的存儲(chǔ)地址是1000,則A[i][j]的地址是 。
A. 1000+10i+j B. 1000+i+j C. 1000+5i+j D. 1000+10i+5j
4、下列 不是線性表?
A. 隊(duì)列 B. 棧 C. 關(guān)聯(lián)數(shù)組 D. 鏈表
5. 下列有關(guān)在一個(gè)處理器(processor)上跑兩個(gè)線程(thread)的說法中,正確的是 。
A. 一個(gè)線程可以改變另一個(gè)線程的程序計(jì)數(shù)器(program counter)
B. 一個(gè)線程既不能讀也不能寫另一個(gè)線程的棧(stack)
C. 一個(gè)線程可以讀寫另一個(gè)線程的寄存器(register)
D. 以上都不對(duì)
6、關(guān)于雙鏈表的搜索給定元素操作的說法正確的是 。
A. 從兩個(gè)方向搜索雙鏈表,比從一個(gè)方向搜索雙鏈表的速度慢
B. 從兩個(gè)方向搜索雙鏈表,比從一個(gè)方向搜索雙鏈表的方差要小
C. 從兩個(gè)方向搜索雙鏈表,比從一個(gè)方向搜索雙鏈表速度要快
D. 以上說法都不正確
7、對(duì)n個(gè)數(shù)字進(jìn)行排序,期中兩兩不同的數(shù)字的個(gè)數(shù)為k,n遠(yuǎn)遠(yuǎn)大于k,而n的取值區(qū)間長度超過了內(nèi)存的大小,時(shí)間復(fù)雜度最小可以是 。
A. O(nlogk) B. O(nk) C. O(n) D. O(nlogn)
8、一臺(tái)指針式鐘表的時(shí)鐘和分鐘的指向重合的時(shí)間間隔是 。
A. 720/13分鐘 B. 720/11分鐘 C. 60分鐘 D. 以上都不正確
分析:分鐘比時(shí)鐘多走了60分鐘,又分鐘的速度是時(shí)鐘的12倍,故12x-x=60,所以12x為B
9、兩個(gè)大小不同的杯子R和S,R中裝著一定量的小米,S中裝著一定量的沙子。一名兒童用勺子從S中取出一勺沙子放入R,與小米混合之后,再從R中取出等體積的一勺混合物放入S。假定兩勺物品的體積相等,且R和S都沒有發(fā)生溢出。則以下說法中正確的是 。
A. R中的沙子和S中的小米一樣多
B. R中的沙子比S中的小米少
C. R中的沙子比S中的小米多
D. 無法判斷
10、假定拋出的硬幣落地之后正反兩面出現(xiàn)的概率分別是1/2。那么拋10次和100次硬幣(分別稱為T10和T100)相比,以下說法正確的是 。
A. T100出現(xiàn)一半的正面比T10出現(xiàn)一半正面的概率更大
B. T100前3次都是正面的概率比T10前3次都是正面的可能性大
C. T100正面次數(shù)的方差小于T10出現(xiàn)正面次數(shù)的方差
D. T100出現(xiàn)正面的比例比T10出現(xiàn)正面的比例在(0.45,0.55)區(qū)間中的可能性更大。
11、某福彩機(jī)構(gòu)推出了一款簡(jiǎn)單的猜謎游戲:游戲玩家只需交納n元,賭紅或者黑。如果開獎(jiǎng)結(jié)果與游戲玩家所賭的顏色相同,則玩家除得到交納的n元賭資外,還可以獲得n元作為獎(jiǎng)勵(lì);否則該玩家失去交納的n元賭資。為了游戲公平,開獎(jiǎng)是紅或者黑的概率均為1/2。某游戲玩家想出了一個(gè)玩法:開始出100元參與賭博,然后按照如下規(guī)則進(jìn)行游戲,如果輸?shù)簦⑶屹€資充足,就把已經(jīng)輸了的總錢數(shù)翻倍作為賭資進(jìn)行賭博;否則,就停止該游戲。假定該機(jī)構(gòu)賭資無限,而玩家的賭資比較有限,以下關(guān)于該玩家退出游戲時(shí)的情形的評(píng)論中合理的是: 。
A. 該玩家的策略可以保證游戲結(jié)束時(shí)贏錢數(shù)的期望為正數(shù)
B. 該福彩機(jī)構(gòu)長期會(huì)賠錢
C. 該玩家會(huì)有一定概率在游戲結(jié)束時(shí)輸錢,但輸?shù)貌欢?/p>
D. 該玩家贏的可能性比輸?shù)目赡苄源?/p>
12、有16瓶水,其中只有一瓶水有毒,小白鼠喝一滴之后一小時(shí)會(huì)死。請(qǐng)問最少用 只小白鼠,在1小時(shí)內(nèi)一定可以找出至少14瓶無毒的水?
A. 1只
B. 3只
C. 4只
D. 16只
13、有一臺(tái)4核CPU的服務(wù)器,上面運(yùn)行著1種在線服務(wù)。如果該在線服務(wù)處理一個(gè)請(qǐng)求在非獨(dú)占IO上的等待時(shí)間和CPU計(jì)算上消耗的時(shí)間比為2:1,假定IO帶寬充足,那么至少開 個(gè)線程能最大化性能地使用該服務(wù)器?
A. 4 B. 8 C. 12 D. 線程越多越好
14、有一種語言稱為lua,里面的數(shù)字只有一種類型(number),實(shí)際上是雙精度浮點(diǎn)數(shù)。沒有各種位數(shù)的整數(shù),如32位、64位整數(shù)等。那么關(guān)于該語言的說法錯(cuò)誤的是 。
A. 該語言可以用number類型的變量作為數(shù)組下標(biāo)
B. 該語言可以表示任意32位數(shù)字整數(shù)的數(shù)字ID
C. 該語言無法實(shí)現(xiàn)32位數(shù)字整數(shù)的按位與、或、異或運(yùn)算
D. 該語言可以正常進(jìn)行雙精度浮點(diǎn)數(shù)運(yùn)算
15、一個(gè)在線服務(wù)通常需要讀取存儲(chǔ)著海量數(shù)據(jù)的數(shù)據(jù)庫。為了提高服務(wù)的處理速度,通常需要加cache(緩存)。以下場(chǎng)景中不合適使用cache的是 。
A. 數(shù)據(jù)庫中每條數(shù)據(jù)被訪問到的概率近似相等,且獨(dú)立
B. 使用了多線程機(jī)制的服務(wù)
C. 單條數(shù)據(jù)尺寸大小的數(shù)據(jù)
D. 有著大量訪問的服務(wù)
16、如下一段神奇的代碼實(shí)現(xiàn)的功能是 。
int miracle(unsigned int n)
{
int m=n==0 ? 0:1;
while (n=(n&(n-1)))
{
m++;
}
return m;
}
A. n的二進(jìn)制表示中”0″的個(gè)數(shù)
B. n的二進(jìn)制表示的倒序值
C. n的二進(jìn)制表示中”1″的個(gè)數(shù)
D. 一個(gè)均勻的哈希函數(shù)
17、有1023個(gè)兩兩不同的整數(shù),取值范圍是1到1024,其按位異或的結(jié)果的取值范圍是 。
A. 0到1024
B. 0,1025到2047
C. 1到1024
D. 2到2048之前的全部偶數(shù)
分析:首先把1到1024所有的進(jìn)行異或,得到的結(jié)果是s = 1024;題目要求是1023個(gè)數(shù),由于異或的特殊性,缺哪個(gè)數(shù),相當(dāng)于s和該數(shù)的異或,所以最后的結(jié)果就是1024和1~1024的異或。
18、七夕節(jié)n對(duì)戀人(n>=2)圍成一圈舉行篝火晚會(huì)。晚會(huì)的規(guī)則是:男女相同,且每對(duì)戀人處在相鄰的位置上。請(qǐng)問有多少種不同的圈子?
A. (2n-1)!/2 B. 2(n-1)! C. 2n(n-1)! D. (2n)!
分析:首先把每對(duì)戀人看成是一個(gè)整體,由于是一個(gè)圓圈,所以只能固定一個(gè),假設(shè)把A當(dāng)作第一個(gè),則B、C、D、E……等進(jìn)行全排列,故有(n-1)!種排法;而每對(duì)戀人之間的位置可以呼喚,故選C
19、星期天有10個(gè)朋友約好一起郊游,在車站的集合時(shí)間是早晨9:50:00到10:00:00。已知每個(gè)人到達(dá)車站的時(shí)間是9:50:00到10:00:00內(nèi)的均勻分布,且彼此獨(dú)立。那么最后一人最可能到達(dá)的時(shí)間是 (精確到分鐘,向下取整)。
A. 各個(gè)分鐘概率相等 B. 9:57 C. 9:58 D. 9:59
20、已知某國家每年出生人口數(shù)每年遞增3%,且男女比例為1:1。如果每個(gè)男性都希望找比自己小0.5到 3歲的女性結(jié)婚,且每個(gè)女性都希望找比自己大0.5到3歲的男性結(jié)婚,適婚年齡為20到30歲,那么對(duì)該國適婚男女婚配方面的說法正確的是 。
A. 男女會(huì)比較均衡
B. 會(huì)產(chǎn)生較多剩女
C. 會(huì)產(chǎn)生較多剩男
D. 信息不足,無法判斷
第二部分 不定向選項(xiàng)(4題,每題5分。每題有1-5個(gè)正確選項(xiàng),完全正確計(jì)5分,漏選計(jì)2分,不選計(jì)0分,多選、錯(cuò)選計(jì)-2分)
1、要提高多線程程序的效率,對(duì)鎖的控制策略非常重要。一種策略是在鎖的個(gè)數(shù)不太多、控制結(jié)構(gòu)不太復(fù)雜的情況下,盡可能降低加鎖的粒度;另一種策略是在合適的條件下取消用鎖。以下情況中不可能取消鎖的是 。
A. 多線程寫一個(gè)共同的數(shù)據(jù)結(jié)構(gòu),且寫操作是原子操作
B. 多線程寫一個(gè)共同的數(shù)據(jù)結(jié)構(gòu),且寫操作不是原子操作
C. 多線程讀一個(gè)共同的數(shù)據(jù)結(jié)構(gòu),且讀操作不是原子操作
D. 一個(gè)線程寫,多個(gè)線程讀一個(gè)共同的數(shù)據(jù)結(jié)構(gòu),寫操作是原子操作,讀操作不是原子操作
E. 一個(gè)線程寫、多個(gè)線程讀一個(gè)共同的數(shù)據(jù)結(jié)構(gòu),寫操作不是原子操作,讀操作是原子操作
2、一顆非空的二叉樹的先序遍歷序列與后序遍歷序列正好相反,則該二叉樹可能是 。
A. 所有的結(jié)點(diǎn)均無右孩子
B. 只有一個(gè)葉子結(jié)點(diǎn)
C. 是一顆二叉樹索樹
D. 所有的結(jié)點(diǎn)均無左孩子
3、以下數(shù)字在表示為double(8字節(jié)的雙精度浮點(diǎn)數(shù))時(shí)存在舍入誤差的有 。
A.B. 10的30次方 C. 0.1 D. 0.5 E. 100
4、給定如下C程序:
typedef struct node_s{
int item;
struct node_s* next;
}node_t;
void reverse_list(node_t* head)
{
node_t* n=head;
head=NULL;
while(n){
}
return head;
}
以下哪項(xiàng)能實(shí)現(xiàn)該函數(shù)的功能
A. node_t* m=head; head=n; head->next=m; n=n->next;
B. node_t* m=n; n=n->next; m->next=head; head=m;
C. node_t* m=n->next; n->next=head; n=m; head=n;
D. head=n->next; head->next=n; n=n->next;
第三部分 填空與問答(5題,共30分)
(4分)某無聊的程序員在玩Windows上的記事本程序,不用鼠標(biāo),每次可以按以下鍵或組合之一:A、Ctrl+A(全選)、Ctrl+C(拷貝)、Ctrl+V(粘貼),那么在10次按鍵只能可以制造的最長文本長度為 。
(4分)若初始序列為gbfcdae,那么至少需要 5 次兩兩交換,才能使該序列變?yōu)閍bcdefg。任給一個(gè)自由a