一、 單項選擇題
1) 給定3個int類型的正整數(shù)x,y,z,對如下4組表達(dá)式判斷正確的選項()
Int a1=x+y-z; int b1=xy/z;
Int a2=x-z+y; int b2=x/zy;
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í)行時間較短的指令等價的替代執(zhí)行時間較長的指令
3) 如下關(guān)于進(jìn)程的面熟不正確的是()
A)進(jìn)程在退出時會自動關(guān)閉自己打開的所有文件
B) 進(jìn)程在退出時會自動關(guān)閉自己打開的網(wǎng)絡(luò)鏈接
C) 進(jìn)程在退出時會自動銷毀自己創(chuàng)建的所有線程
D)進(jìn)程在退出時會自動銷毀自己打開的共享內(nèi)存
4) 計算表達(dá)式x6+4x4+2x3+x+1最少需要做()次乘法
A)3
B)4
C)5
D)6
5) 在如下86的矩陣中,請計算從A移動到B一共有多少種走法?要求每次只能向上揮著向右移動一格,并且不能經(jīng)過P;
|
|
|
|
|
|
| B |
|
|
|
|
|
|
|
|
|
|
| P |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
|
|
|
A)492
B)494
C)496
D)498
6) SQL語言中刪除一個表的指令是()
A)DROP TABLE
B) DELETE TABLE
C) DESTROY TABLE
D)REMOVE TABLE
7)某產(chǎn)品團(tuán)隊由美術(shù)組、產(chǎn)品組、client程序組和server程序組4個小組構(gòu)成,每次構(gòu)建一套完整的版本時,需要各個組發(fā)布如下資源。美術(shù)組想客戶端提供圖像資源(需要10分鐘),產(chǎn)品組向client組合server提供文字內(nèi)容資源(同時進(jìn)行,10分鐘),server和client源代碼放置在不同工作站上,其完整編譯時間均為10分鐘切編譯過程不依賴于任何資源,client程序(不包含任何資源)在編譯完畢后還需要完成對程序的統(tǒng)一加密過程(10分鐘)?梢哉垎,從要完成一次版本構(gòu)建(client與server的版本代碼與資源齊備),至少需要多少時間()
A)60分鐘
B)40分鐘
C)30分鐘
D)20分鐘
8)如下關(guān)于編譯鏈接的說法錯誤的是()
A)編譯優(yōu)化會使得編譯速度變慢
B) 預(yù)編譯頭文件可以優(yōu)化程序的性能
C) 靜態(tài)鏈接會使得可執(zhí)行文件偏大
D)動態(tài)鏈接庫會使進(jìn)程啟動速度偏慢
9)如下關(guān)于鏈接的說法錯誤的是()
A)一個靜態(tài)庫中不能包含兩個同名全局函數(shù)的定義
B)一個動態(tài)庫中不能包含兩個同名全局函數(shù)的定義
C)如果兩個靜態(tài)庫都包含一個同名全局函數(shù),他們不能同時被鏈接
D)如果兩個動態(tài)庫都包含一個同名全局函數(shù),他們不能同時被鏈接
10)某火車站要通過一條棧道(先進(jìn)后出)來調(diào)換進(jìn)入車站的列車順序,若進(jìn)站的列車順序為A、B、C,則下列哪個出站順序不可能?()
A)ABC
B)ACB
C)CAB
D)CBA
11)棧是一種智能在某一端插入和刪除的特殊線性表,它按照后進(jìn)先出的原則存儲數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,若6元素為A、B、C、D、E、F出棧順序為B、D、C、F、E、A,則S棧的最小容量為()
A)3
B)4
C)5
D)6
12)找工作的季節(jié)馬上就到了,很多同學(xué)去圖書館借閱《面試寶典》這本書,現(xiàn)在圖書館外有6名同學(xué)排隊,其中3名同學(xué)要將手中的《面試寶典》還至圖書館,有3名同學(xué)希望從圖書館中可以借到《面試寶典》,若當(dāng)前圖書館內(nèi)已無庫存《面試寶典》,要保證借書的3名同學(xué)可以借到書,請問這6位同學(xué)有多少種排隊方式()
A)60
B)120
C)180
D)360
13)若完全二叉樹的節(jié)點個數(shù)為2N-1,則葉節(jié)點個數(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)下列說法中錯誤的是:()
A)插入排序某些情況下復(fù)雜度為O(n)
B)排序二叉樹元素查找的復(fù)雜度可能為O(n)
C)對于有序列表的排序最快的是快速排序
D)在有序列表中通過二分查找的復(fù)雜度一定是O(n log2n)
16)在程序設(shè)計中,要對兩個16K×16K的多精度浮點數(shù)二維數(shù)組進(jìn)行矩陣求和時,行優(yōu)先讀取和列優(yōu)先讀取的區(qū)別是()
A)沒區(qū)別
B)行優(yōu)先快
C)列優(yōu)先快
D)2種讀取方式速度為隨機(jī)值,無法判斷
17)在下圖的多邊形ABCDE中從哪一點出發(fā),可以遍歷圖上的每條邊一次,而且僅遍歷一次
A)A點
B) B點
C) C點
D)D點
18)字符串www.qq.com所有非空子串(兩個子串如果內(nèi)容相同則只算一個)個數(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)對一個established狀態(tài)的TCP連接,在調(diào)用shutdown函數(shù)之前調(diào)用close接口,可以讓主動調(diào)用的一方進(jìn)入半關(guān)閉狀態(tài)
C)主動發(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)端口號在64512-65535之間的端口
B)所有小于1024的每個端口
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ī)領(lǐng)域中也經(jīng)常使用(例如各種字符集的定義描述),下式:(2015)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ò)游戲)同時在線曲線(Average Concurrency Users,ACU)24小時數(shù)據(jù)如下圖所示,F(xiàn)已知全天平均在線人數(shù)為5000人,玩家每次登陸后平均在線時長為2小時。請你估計一下,平均下來每分鐘約有( )個玩家登錄。
24)如下SQL語句是需要列出一個論壇版面第一頁(每頁顯示20個)的帖子(post)標(biāo)題(title),并按照發(fā)布(create_time)降序排列:
SELECT title FROM post( )create_time DESC( )0,20
25、為了某項目需要,我們準(zhǔn)備構(gòu)造了一種面向?qū)ο蟮哪_本語言,例如,對所有的整數(shù),我們都通過Integer類型的對象來描述。在計算“1+2”時,這里的“1”,“2”和結(jié)果“3”分別為一個Integer對象。為了降低設(shè)計復(fù)雜度,我們決定讓Integer對象都是只讀對象,也即在計算a=a+b后,對象a引用的是一個新的對象,而非改a所指對象的值?紤]到性能問題,我們又引入兩種優(yōu)化方案:(1)對于數(shù)值相等的Integer對象,我們不會重復(fù)創(chuàng)建。例如,計算“1+1”,這里兩個“1”的引用的是同一個對象——這種設(shè)計模式叫做( );(2)腳本語言解析器啟動時,默認(rèn)創(chuàng)建數(shù)值范圍[1,32]的32個Integer對象。現(xiàn)在,假設(shè)我們要計算表達(dá)式“1+2+3+…+40”,在計算過程需要創(chuàng)建的Integer對象個數(shù)是( )。
26)A、B兩人玩猜字游戲,游戲規(guī)則如下:
A選定一個 [1,100]之間的數(shù)字背對B寫在紙上,然后讓B開始猜;
如果B猜的偏小,A會提示B這次猜的偏小;
一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不會再提示,只回答猜對與否。
請問: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(2015,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)的時間復(fù)雜度;
除遍歷計數(shù)器與a[N] b[N]外,不可使用新的變量(包括棧臨時變量、堆空間和全局靜態(tài)變量等);
青銅程序(主流編程語言任選)實現(xiàn)并簡單描述。
29)20世紀(jì)60年代,美國心理學(xué)家米爾格蘭姆設(shè)計了一個連鎖信件實驗。米爾格蘭姆把信隨即發(fā)送給住在美國各城市的一部分居民,信中寫有一個波士頓股票經(jīng)紀(jì)人的名字,并要求每名收信人把這封信寄給自己認(rèn)為是比較接近這名股票經(jīng)紀(jì)人的朋友。這位朋友收到信后再把信寄給他認(rèn)為更接近這名股票經(jīng)紀(jì)人的朋友。最終,大部分信件都寄到了這名股票經(jīng)紀(jì)人手中,每封信平均經(jīng)受6.2詞到達(dá)。于是,米爾格蘭姆提出六度分割理論,認(rèn)為世界上任意兩個人之間建立聯(lián)系最多只需要6個人。
假設(shè)QQ號大概有10億個注冊用戶,存儲在一千臺機(jī)器上的關(guān)系數(shù)據(jù)庫中,每臺機(jī)器存儲一百萬個用戶及其的好友信息,假設(shè)用戶的平均好友個數(shù)大約為25人左右。
第一問:請你設(shè)計一個方案,盡可能快的計算存儲任意兩個QQ號之間是否六度(好友是1度)可達(dá),并得出這兩位用戶六度可達(dá)的話,最短是幾度可達(dá)。
第二問:我們希望得到平均每個用戶的n度好友個數(shù),以增加對用戶更多的了解,現(xiàn)在如果每臺機(jī)器一秒鐘可以返回一千條查詢結(jié)果,那么在10天的時間內(nèi),利用給出的硬件條件,可以統(tǒng)計出用戶的最多幾度好友個數(shù)?如果希望得到更高的平均n度好友個數(shù),可以怎樣改進(jìn)方案?
騰訊校園招聘筆試
一. 單選題(每題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ù)形參個數(shù)必須不同
C.重載函數(shù)必須有不同的形參列表 D.重載函數(shù)名可以不同
3.分析一下程序的運行結(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.在一個cpp文件里面,定義了一個static類型的全局變量,下面一個正確的描述是:
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的代碼,下面那一個語句是不安全的:
A.delete pA B.delete pB C.delete pC
8.下列程序的運行結(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+=mADD(m,m);
則m的值為:
A.15 B.12 C.18 D.58
10.如下是一個帶權(quán)的圖,圖中結(jié)點A到結(jié)點D的關(guān)鍵路徑的長度是:
A.13 B.15 C.28 D.58
11.下面的模板聲明中,正確的是:
A.template
B.template
C.template
D.template
12.在Windows編程中下面的說法正確的是:
A.兩個窗口,他們的窗口句柄可以是相同的 B.兩個窗口,他們的處理函數(shù)可以是相同
的
C.兩個窗口,他們的窗口句柄和窗口處理函數(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ù)器的情
況下,下面描述錯誤的是”該防火墻能夠( )”.
A.使公司員工只能訪問Internet上與其業(yè)務(wù)聯(lián)系的公司的IP地址.
B.僅允許HTTP協(xié)議通過,不允許其他協(xié)議通過,例如TCP/UDP.
C.使員工不能直接訪問FTP服務(wù)器端口號為21的FTP地址.
D.僅允許公司中具有某些特定IP地址的計算機(jī)可以訪問外部網(wǎng)絡(luò)
15.數(shù)字字符0的ASCII值為48,若有以下程序:
main()
{
char a=’1’,b=’2’;
printf(“%c,”,b++);
printf(“%d\n”,b-a);
}
程序運行之后的輸出結(jié)果是:
A.3,2 B.50,2 C.2,2 D.2,50
二. 填空題(共40分)
本程序從正文文件text.in讀入一篇英文短文,統(tǒng)計該短文中不同單詞和它的出現(xiàn)次數(shù),并
按詞典編輯順序?qū)卧~及它的出現(xiàn)次數(shù)輸出到正文文件word.out中.
程序用一棵有序二叉樹存儲這些單詞及其出現(xiàn)的次數(shù),一邊讀入一邊建立.然后中序遍歷
該二叉樹,將遍歷經(jīng)過的二叉樹上的節(jié)點的內(nèi)容輸出.
程序中的外部函數(shù)
int getword(FILE pFile,char pszWordBuffer,int nBufferLen);
從與pFile所對應(yīng)的文件中讀取單詞置入pszWordBuffer,并返回1;若單詞遇文件尾,已無
單詞可讀時,則返回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<<"請輸入用戶的個數(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è)你在編寫一個使用多線程技術(shù)的程序,當(dāng)程序中止運行時,需要怎樣一個機(jī)
制來安全有效的中止所有的線程?請描述其具體流程