一、 單項(xiàng)選擇題
1) 給定3個(gè)int類型的正整數(shù)x,y,z,對如下4組表達(dá)式判斷正確的選項(xiàng)()
Int a1=x+y-z; int b1=x*y/z;
Int a2=x-z+y; int b2=x/z*y;
Int c1=x<>z; int d1=x&y|z;
Int c2=x>>z<
A) a1一定等于a2
B) b1一定定于b2
C) c1一定等于c2
D) d1一定等于d2
2) 程序的完整編譯過程分為是:預(yù)處理,編譯,匯編等,如下關(guān)于編譯階段的編譯優(yōu)化的說法中不正確的是()
A)死代碼刪除指的是編譯過程直接拋棄掉被注釋的代碼;
B) 函數(shù)內(nèi)聯(lián)可以避免函數(shù)調(diào)用中壓棧和退棧的開銷
C) For循環(huán)的循環(huán)控制變量通常很適合調(diào)度到寄存器訪問
D)強(qiáng)度削弱是指執(zhí)行時(shí)間較短的指令等價(jià)的替代執(zhí)行時(shí)間較長的指令
3) 如下關(guān)于進(jìn)程的面熟不正確的是()
A)進(jìn)程在退出時(shí)會(huì)自動(dòng)關(guān)閉自己打開的所有文件
B) 進(jìn)程在退出時(shí)會(huì)自動(dòng)關(guān)閉自己打開的網(wǎng)絡(luò)鏈接
C) 進(jìn)程在退出時(shí)會(huì)自動(dòng)銷毀自己創(chuàng)建的所有線程
D)進(jìn)程在退出時(shí)會(huì)自動(dòng)銷毀自己打開的共享內(nèi)存
4) 計(jì)算表達(dá)式x6+4x4+2x3+x+1最少需要做()次乘法
A)3
B)4
C)5
D)6
5) 在如下8*6的矩陣中,請計(jì)算從A移動(dòng)到B一共有多少種走法?要求每次只能向上揮著向右移動(dòng)一格,并且不能經(jīng)過P;
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
|
P |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
A)492
B)494
C)496
D)498
6) SQL語言中刪除一個(gè)表的指令是()
A)DROP TABLE
B) DELETE TABLE
C) DESTROY TABLE
D)REMOVE TABLE
7)某產(chǎn)品團(tuán)隊(duì)由美術(shù)組、產(chǎn)品組、client程序組和server程序組4個(gè)小組構(gòu)成,每次構(gòu)建一套完整的版本時(shí),需要各個(gè)組發(fā)布如下資源。美術(shù)組想客戶端提供圖像資源(需要10分鐘),產(chǎn)品組向client組合server提供文字內(nèi)容資源(同時(shí)進(jìn)行,10分鐘),server和client源代碼放置在不同工作站上,其完整編譯時(shí)間均為10分鐘切編譯過程不依賴于任何資源,client程序(不包含任何資源)在編譯完畢后還需要完成對程序的統(tǒng)一加密過程(10分鐘)?梢哉垎枺瑥囊瓿梢淮伟姹緲(gòu)建(client與server的版本代碼與資源齊備),至少需要多少時(shí)間()
A)60分鐘
B)40分鐘
C)30分鐘
D)20分鐘
8)如下關(guān)于編譯鏈接的說法錯(cuò)誤的是()
A)編譯優(yōu)化會(huì)使得編譯速度變慢
B) 預(yù)編譯頭文件可以優(yōu)化程序的性能
C) 靜態(tài)鏈接會(huì)使得可執(zhí)行文件偏大
D)動(dòng)態(tài)鏈接庫會(huì)使進(jìn)程啟動(dòng)速度偏慢
9)如下關(guān)于鏈接的說法錯(cuò)誤的是()
A)一個(gè)靜態(tài)庫中不能包含兩個(gè)同名全局函數(shù)的定義
B)一個(gè)動(dòng)態(tài)庫中不能包含兩個(gè)同名全局函數(shù)的定義
C)如果兩個(gè)靜態(tài)庫都包含一個(gè)同名全局函數(shù),他們不能同時(shí)被鏈接
D)如果兩個(gè)動(dòng)態(tài)庫都包含一個(gè)同名全局函數(shù),他們不能同時(shí)被鏈接
10)某火車站要通過一條棧道(先進(jìn)后出)來調(diào)換進(jìn)入車站的列車順序,若進(jìn)站的列車順序?yàn)锳、B、C,則下列哪個(gè)出站順序不可能?()
A)ABC
B)ACB
C)CAB
D)CBA
11)棧是一種智能在某一端插入和刪除的特殊線性表,它按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,若6元素為A、B、C、D、E、F出棧順序?yàn)锽、D、C、F、E、A,則S棧的最小容量為()
A)3
B)4
C)5
D)6
12)找工作的季節(jié)馬上就到了,很多同學(xué)去圖書館借閱《面試寶典》這本書,現(xiàn)在圖書館外有6名同學(xué)排隊(duì),其中3名同學(xué)要將手中的《面試寶典》還至圖書館,有3名同學(xué)希望從圖書館中可以借到《面試寶典》,若當(dāng)前圖書館內(nèi)已無庫存《面試寶典》,要保證借書的3名同學(xué)可以借到書,請問這6位同學(xué)有多少種排隊(duì)方式()
A)60
B)120
C)180
D)360
13)若完全二叉樹的節(jié)點(diǎn)個(gè)數(shù)為2N-1,則葉節(jié)點(diǎn)個(gè)數(shù)為()
A)N-1
B)2×N
C)2N-1
D)2N
14)排序算法的穩(wěn)定是指,關(guān)鍵碼相同的記錄排序前后相對位置不發(fā)生改變,下面哪種排序算法是不穩(wěn)定的()
A)插入排序
B)冒泡排序
C)快速排序
D)歸并排序
15)下列說法中錯(cuò)誤的是:()
A)插入排序某些情況下復(fù)雜度為O(n)
B)排序二叉樹元素查找的復(fù)雜度可能為O(n)
C)對于有序列表的排序最快的是快速排序
D)在有序列表中通過二分查找的復(fù)雜度一定是O(n log2n)
16)在程序設(shè)計(jì)中,要對兩個(gè)16K×16K的多精度浮點(diǎn)數(shù)二維數(shù)組進(jìn)行矩陣求和時(shí),行優(yōu)先讀取和列優(yōu)先讀取的區(qū)別是()
A)沒區(qū)別
B)行優(yōu)先快
C)列優(yōu)先快
D)2種讀取方式速度為隨機(jī)值,無法判斷
17)在下圖的多邊形ABCDE中從哪一點(diǎn)出發(fā),可以遍歷圖上的每條邊一次,而且僅遍歷一次
A)A點(diǎn)
B) B點(diǎn)
C) C點(diǎn)
D)D點(diǎn)
18)字符串www.qq.com所有非空子串(兩個(gè)子串如果內(nèi)容相同則只算一個(gè))個(gè)數(shù)是()
A)1024
B)1018
C)55
D)50
19)TCP的關(guān)閉過程,說法正確的是()
A)TIME_WAIT狀態(tài)稱為MSL(Maximum Segment Lifetime)等待狀態(tài)
B)對一個(gè)established狀態(tài)的TCP連接,在調(diào)用shutdown函數(shù)之前調(diào)用close接口,可以讓主動(dòng)調(diào)用的一方進(jìn)入半關(guān)閉狀態(tài)
C)主動(dòng)發(fā)送FIN消息的連接端,收到對方回應(yīng)ack之前不能發(fā)只能收,在收到對方回復(fù)ack之后不能發(fā)也不能收,進(jìn)入CLOSING狀態(tài)
D)在已經(jīng)成功建立連接的TCP連接上,如果一端收到RST消息可以讓TCP的連潔端繞過半關(guān)閉狀態(tài)并允許丟失數(shù)據(jù)。
20)操作系統(tǒng)的一些特別端口要為特定的服務(wù)做預(yù)留,必須要root權(quán)限才能打開的端口描述正確的是()
A)端口號(hào)在64512-65535之間的端口
B)所有小于1024的每個(gè)端口
C)RFC標(biāo)準(zhǔn)文檔中已經(jīng)聲明特定服務(wù)的相關(guān)端口,例如http服務(wù)的80端口,8080端口等
D)所有端口都可以不受權(quán)限限制打開
二、填空題
21)除了10進(jìn)制、2進(jìn)制之外,16進(jìn)制表達(dá)式在計(jì)算機(jī)領(lǐng)域中也經(jīng)常使用(例如各種字符集的定義描述),下式:(2012)10+(AF1)16的結(jié)果是( )(請用10進(jìn)制表示)。
22)仔細(xì)閱讀以下一段遞歸的函數(shù)定義:
in tack(int m,int n)
{
if(m==0)
{
return n+1;
}
Else if(n==0)
{
return ack(m-1,1);
}
else
{
retrun ack(m-1,ack(m,n-1));
}
}
請問ack(3,3)的返回值是( )。
23)某互聯(lián)網(wǎng)產(chǎn)品(例如,一款網(wǎng)絡(luò)游戲)同時(shí)在線曲線(Average Concurrency Users,ACU)24小時(shí)數(shù)據(jù)如下圖所示。現(xiàn)已知全天平均在線人數(shù)為5000人,玩家每次登陸后平均在線時(shí)長為2小時(shí)。請你估計(jì)一下,平均下來每分鐘約有( )個(gè)玩家登錄。
24)如下SQL語句是需要列出一個(gè)論壇版面第一頁(每頁顯示20個(gè))的帖子(post)標(biāo)題(title),并按照發(fā)布(create_time)降序排列:
SELECT title FROM post( )create_time DESC( )0,20
25、為了某項(xiàng)目需要,我們準(zhǔn)備構(gòu)造了一種面向?qū)ο蟮哪_本語言,例如,對所有的整數(shù),我們都通過Integer類型的對象來描述。在計(jì)算“1+2”時(shí),這里的“1”,“2”和結(jié)果“3”分別為一個(gè)Integer對象。為了降低設(shè)計(jì)復(fù)雜度,我們決定讓Integer對象都是只讀對象,也即在計(jì)算a=a+b后,對象a引用的是一個(gè)新的對象,而非改a所指對象的值?紤]到性能問題,我們又引入兩種優(yōu)化方案:(1)對于數(shù)值相等的Integer對象,我們不會(huì)重復(fù)創(chuàng)建。例如,計(jì)算“1+1”,這里兩個(gè)“1”的引用的是同一個(gè)對象——這種設(shè)計(jì)模式叫做( );(2)腳本語言解析器啟動(dòng)時(shí),默認(rèn)創(chuàng)建數(shù)值范圍[1,32]的32個(gè)Integer對象,F(xiàn)在,假設(shè)我們要計(jì)算表達(dá)式“1+2+3+…+40”,在計(jì)算過程需要?jiǎng)?chuàng)建的Integer對象個(gè)數(shù)是( )。
26)A、B兩人玩猜字游戲,游戲規(guī)則如下:
A選定一個(gè) [1,100]之間的數(shù)字背對B寫在紙上,然后讓B開始猜;
如果B猜的偏小,A會(huì)提示B這次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不會(huì)再提示,只回答猜對與否。
請問:B至少要猜( )次才能保證猜對?在這種策略下,B第一次猜測的數(shù)字是( )。
27)仔細(xì)閱讀以下函數(shù)
Int fuc(int m,int n)
{
if(m%n)==0
{
return n;
}
else
{
return fuc(n,m%n)
}
}
請問func(2012,2102)的結(jié)果是( )。
三 、加分題
28)給定一耳光數(shù)組a[N],我們希望構(gòu)造數(shù)組b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在構(gòu)造過程中,不允許使用除法:
要求O(1)空間復(fù)雜度和O(n)的時(shí)間復(fù)雜度;
除遍歷計(jì)數(shù)器與a[N] b[N]外,不可使用新的變量(包括棧臨時(shí)變量、堆空間和全局靜態(tài)變量等);
青銅程序(主流編程語言任選)實(shí)現(xiàn)并簡單描述。
29)20世紀(jì)60年代,美國心理學(xué)家米爾格蘭姆設(shè)計(jì)了一個(gè)連鎖信件實(shí)驗(yàn)。米爾格蘭姆把信隨即發(fā)送給住在美國各城市的一部分居民,信中寫有一個(gè)波士頓股票經(jīng)紀(jì)人的名字,并要求每名收信人把這封信寄給自己認(rèn)為是比較接近這名股票經(jīng)紀(jì)人的朋友。這位朋友收到信后再把信寄給他認(rèn)為更接近這名股票經(jīng)紀(jì)人的朋友。最終,大部分信件都寄到了這名股票經(jīng)紀(jì)人手中,每封信平均經(jīng)受6.2詞到達(dá)。于是,米爾格蘭姆提出六度分割理論,認(rèn)為世界上任意兩個(gè)人之間建立聯(lián)系最多只需要6個(gè)人。
假設(shè)QQ號(hào)大概有10億個(gè)注冊用戶,存儲(chǔ)在一千臺(tái)機(jī)器上的關(guān)系數(shù)據(jù)庫中,每臺(tái)機(jī)器存儲(chǔ)一百萬個(gè)用戶及其的好友信息,假設(shè)用戶的平均好友個(gè)數(shù)大約為25人左右。
第一問:請你設(shè)計(jì)一個(gè)方案,盡可能快的計(jì)算存儲(chǔ)任意兩個(gè)QQ號(hào)之間是否六度(好友是1度)可達(dá),并得出這兩位用戶六度可達(dá)的話,最短是幾度可達(dá)。
第二問:我們希望得到平均每個(gè)用戶的n度好友個(gè)數(shù),以增加對用戶更多的了解,現(xiàn)在如果每臺(tái)機(jī)器一秒鐘可以返回一千條查詢結(jié)果,那么在10天的時(shí)間內(nèi),利用給出的硬件條件,可以統(tǒng)計(jì)出用戶的最多幾度好友個(gè)數(shù)?如果希望得到更高的平均n度好友個(gè)數(shù),可以怎樣改進(jìn)方案?
騰訊2012年校園招聘筆試
一. 單選題(每題4分,15題,共60分)
1.考慮函數(shù)原型void hello(int a,int b=7,char* pszC="*"),下面的函數(shù)調(diào)用鐘,屬于
不合法調(diào)用的是:
A hello(5) B.hello(5,8) C.hello(6,"#") D.hello(0,0,"#")
2.下面有關(guān)重載函數(shù)的說法中正確的是:
A.重載函數(shù)必須具有不同的返回值類型 B.重載函數(shù)形參個(gè)數(shù)必須不同
C.重載函數(shù)必須有不同的形參列表 D.重載函數(shù)名可以不同
3.分析一下程序的運(yùn)行結(jié)果:
#include
class CBase
{
public:
CBase(){cout<<”constructing CBase class”<
~CBase(){cout<<”destructing CBase class”<
};
class CSub : public CBase
{
public:
CSub(){cout<<”constructing CSub class”<
~CSub(){cout<<”destructing CSub class”<
};
void main()
{
CSub obj;
}
A. constructing CSub class B. constructing CBase class
constructing CBase class constructing CSub class
destructing CSub class destructing CBase class
destructing CBase class destructing CSub class
C. constructing CBase class
constructing CSub class
destructing CSub class
destructing CBase class
D. constructing CSub class
constructing CBase class
destructing CBase class
destructing CSub class
4.在一個(gè)cpp文件里面,定義了一個(gè)static類型的全局變量,下面一個(gè)正確的描述是:
A.只能在該cpp所在的編譯模塊中使用該變量
B.該變量的值是不可改變的
C.該變量不能在類的成員函數(shù)中引用
D.這種變量只能是基本類型(如int,char)不能是C++類型
5.觀察下面一段代碼:
class ClassA
{
public:
virtual ~ ClassA(){};
virtual void FunctionA(){};
};
class ClassB
{
public:
virtual void FunctionB(){};
};
class ClassC : public ClassA,public ClassB
{
public:
};
ClassC aObject;
ClassA* pA=&aObject;
ClassB* pB=&aObject;
ClassC* pC=&aObject;
關(guān)于pA,pB,pC的取值,下面的描述中正確的是:
A.pA,pB,pC的取值相同. B.pC=pA+pB
C.pA和pB不相同 D.pC不等于pA也不等于pB
6.參照1.5的代碼,假設(shè)定義了ClassA* pA2,下面正確的代碼是:
A.pA2=static_cast(pB);
B.void* pVoid=static_cast(pB);
pA2=static_cast(pVoid);
C.pA2=pB;
D.pA2=static_cast(static_cast(pB));
7.參照1.5的代碼,下面那一個(gè)語句是不安全的:
A.delete pA B.delete pB C.delete pC
8.下列程序的運(yùn)行結(jié)果為:
#include
void main()
{
int a=2;
int b=++a;
cout<
}
A.0.5 B.0 C0.7 D.0.6666666-
9.有如下一段代碼:
#define ADD(x,y) x+y
int m=3;
m+=m*ADD(m,m);
則m的值為:
A.15 B.12 C.18 D.58
10.如下是一個(gè)帶權(quán)的圖,圖中結(jié)點(diǎn)A到結(jié)點(diǎn)D的關(guān)鍵路徑的長度是:
A.13 B.15 C.28 D.58
11.下面的模板聲明中,正確的是:
A.template
B.template
C.template
D.template
12.在Windows編程中下面的說法正確的是:
A.兩個(gè)窗口,他們的窗口句柄可以是相同的 B.兩個(gè)窗口,他們的處理函數(shù)可以是相同
的
C.兩個(gè)窗口,他們的窗口句柄和窗口處理函數(shù)都不可以相同.
13.下面哪種情況下,B不能隱式轉(zhuǎn)換為A?
A.class B:public A{} B.class A:public B{}
C.class B{operator A();} D.class A{A(const B&);}
14.某公司使用包過濾防火墻控制進(jìn)出公司局域網(wǎng)的數(shù)據(jù),在不考慮使用代理服務(wù)器的情
況下,下面描述錯(cuò)誤的是”該防火墻能夠( )”.
A.使公司員工只能訪問Internet上與其業(yè)務(wù)聯(lián)系的公司的IP地址.
B.僅允許HTTP協(xié)議通過,不允許其他協(xié)議通過,例如TCP/UDP.
C.使員工不能直接訪問FTP服務(wù)器端口號(hào)為21的FTP地址.
D.僅允許公司中具有某些特定IP地址的計(jì)算機(jī)可以訪問外部網(wǎng)絡(luò)
15.數(shù)字字符0的ASCII值為48,若有以下程序:
main()
{
char a=’1’,b=’2’;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
}
程序運(yùn)行之后的輸出結(jié)果是:
A.3,2 B.50,2 C.2,2 D.2,50
二. 填空題(共40分)
本程序從正文文件text.in讀入一篇英文短文,統(tǒng)計(jì)該短文中不同單詞和它的出現(xiàn)次數(shù),并
按詞典編輯順序?qū)卧~及它的出現(xiàn)次數(shù)輸出到正文文件word.out中.
程序用一棵有序二叉樹存儲(chǔ)這些單詞及其出現(xiàn)的次數(shù),一邊讀入一邊建立.然后中序遍歷
該二叉樹,將遍歷經(jīng)過的二叉樹上的節(jié)點(diǎn)的內(nèi)容輸出.
程序中的外部函數(shù)
int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);
從與pFile所對應(yīng)的文件中讀取單詞置入pszWordBuffer,并返回1;若單詞遇文件尾,已無
單詞可讀時(shí),則返回0.
#include
#include
#include
#include
#define SOURCE_FILE "text.in"
#define OUTPUT_FILE "word.out"
#define MAX_WORD_LEN 128
typedef struct treenode
{
char szWord[MAX_WORD_LEN];
int nCount;
struct treenode* pLeft;
struct treenode* pRight;
}BNODE;
int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen);
void binary_tree(BNODE** ppNode,char* pszWord)
{
if(ppNode != NULL && pszWord != NULL)
{
BNODE* pCurrentNode = NULL;
BNODE* pMemoNode = NULL;
int nStrCmpRes=0;
____(1)_____;pCurrentNode=*ppNode
while(pCurrentNode)
{
/*尋找插入位置*/
nStrCmpRes = strcmp(pszWord, ___(2)___ );pCurrentNode-
>nCount
if(!nStrCmpRes)
{
___(3)___; pCurrentNode->nCount++
return;
}
else
{
___(4)___; pMemoNode=pCurrentNode
pCurrentNode = nStrCmpRes>0? pCurrentNode-
>pRight : pCurrentNode->pLeft;
}
}
}
pCurrent=new BNODE;
if(pCurrentNode != NULL)
{
memset(pCurrentNode,0,sizeof(BNODE));
strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);
pCurrentNode->nCount=1;
}
if(pMemoNode==NULL)
{
___(5)___; *ppNode= pCurrentNode
}
else if(nStrCmpRes>0)
{
pMemoNode->pRight=pCurrentNode;
}
else
{
pMemoNode->pLeft=pCurrentNode;
}
}
void midorder(FILE* pFile,BNODE* pNode)
{
if(___(6)___) return;!pNode||!pFile
midorder(pFile,pNode->pLeft);
fprintf(pFile,"%s %d\n",pNode->szWord,pNode->nCount);
midorder(pFile,pNode->pRight);
}
void main()
{
FILE* pFile=NULL;
BNODE* pRootNode=NULL;
char szWord[MAX_WORD_LEN]={0};
pFile=fopen(SOURCE_FILE,"r");
if(pFile==NULL)
{
printf("Can't open file %s\n",SOURCE_FILE);
return;
}
while(getword(pFile,szWord,MAX_WORD_LEN)==1)
{
binary_tree(___(7)___);// pRootNode,szWord
}
fclose(pFile);
pFile=fopen(OUTPUT_FILE,"w");
midorder(pFile,pRootNode);
fclose(pFile);
}
三. 附加題(每題30分,2題,共60分)
1.從程序健壯性進(jìn)行分析,下面的FillUserInfo函數(shù)和Main函數(shù)分別存在什么問
題?
#include
#include
#define MAX_NAME_LEN 20
struct USERINFO
{
int nAge;
char szName[MAX_NAME_LEN];
};
void FillUserInfo(USERINFO* parUserInfo)
{
stu::cout<<"請輸入用戶的個(gè)數(shù):";
int nCount=0;
std::cin>>nCount;
for(int i=0;i
{
std::cout<<"請輸入年齡:";
std::cin>>parUserInfo[i]->nAge;
std::string strName;
std::cout<<"請輸入姓名:";
std::cin>>strName;
strcpy(parUserInfo[i].szName,strName.c_str());
}
}
int main(int argc,char* argv[])
{
USERINFO arUserInfos[100]={0};
FillUserInfo(arUserInfos);
printf("The first name is:");
printf(arUserInfos[0].szName);
printf("\n");
return 0;
}
2. 假設(shè)你在編寫一個(gè)使用多線程技術(shù)的程序,當(dāng)程序中止運(yùn)行時(shí),需要怎樣一個(gè)機(jī)
制來安全有效的中止所有的線程?請描述其具體流程