TX相关
3. TCP的三次握手
4. 現(xiàn)在的最新技術(shù),多線程,數(shù)據(jù)庫(kù),緩沖技術(shù)
5. 未來五年的職業(yè)規(guī)劃
6. 熟不熟悉網(wǎng)絡(luò)編程,
7. TCP靠什么來保證數(shù)據(jù)傳輸?shù)目煽?#xff1b;
8. 說一下,客戶端和服務(wù)器端用socket的通信過程;進(jìn)程間通信的方式,你都用過哪些來寫進(jìn)程間通信;
9. 關(guān)于項(xiàng)目的各種問題,項(xiàng)目中有沒有用緩沖技術(shù),并介紹一下;
10. 數(shù)據(jù)庫(kù)中的事務(wù)概念和作用,有什么性質(zhì),原子性通過什么來體現(xiàn)的;
11. 為什么要建立索引;
12. 會(huì)不會(huì)算法和數(shù)據(jù)結(jié)構(gòu)
?
2. 針對(duì)簡(jiǎn)歷上的內(nèi)容提了一些問題:做過哪些項(xiàng)目?印象最深的項(xiàng)目是哪個(gè)?那個(gè)項(xiàng)目采用的是什么架構(gòu),設(shè)計(jì)思想等等
3. 熟不熟悉linux,有哪些指令,邊寫邊解釋下;TCP和UDP的區(qū)別,TCP的三次握手,socket編程,寫一個(gè)簡(jiǎn)單的socket通信思路;
4. 用過哪些數(shù)據(jù)庫(kù);什么是索引,它有什么作用;
5. 問了下現(xiàn)在最新的技術(shù),比如云計(jì)算之類的,還有海量數(shù)據(jù)處理的一些技術(shù),
6. 進(jìn)程間通信的方式,有沒有具體使用過那些通信方式;有沒有用過多線程;
7. 快速寫出冒泡排序。
Linux的同步機(jī)制從2.0到2.6以來不斷發(fā)展完善。從最初的原子操作,到后來的信號(hào)量,從大內(nèi)核鎖到今天的自旋鎖。這些同步機(jī)制的發(fā)展伴隨Linux從單處理器到對(duì)稱多處理器的過渡;
伴隨著從非搶占內(nèi)核到搶占內(nèi)核的過度。Linux的鎖機(jī)制越來越有效,也越來越復(fù)雜。
Linux的內(nèi)核鎖主要是自旋鎖和信號(hào)量。
自旋鎖最多只能被一個(gè)可執(zhí)行線程持有,如果一個(gè)執(zhí)行線程試圖請(qǐng)求一個(gè)已被爭(zhēng)用(已經(jīng)被持有)的自旋鎖,那么這個(gè)線程就會(huì)一直進(jìn)行忙循環(huán)——旋轉(zhuǎn)——等待鎖重新可用。要是鎖未被爭(zhēng)用,請(qǐng)求它的執(zhí)行線程便能立刻得到它并且繼續(xù)進(jìn)行。自旋鎖可以在任何時(shí)刻防止多于一個(gè)的執(zhí)行線程同時(shí)進(jìn)入臨界區(qū)。
Linux中的信號(hào)量是一種睡眠鎖。如果有一個(gè)任務(wù)試圖獲得一個(gè)已被持有的信號(hào)量時(shí),信號(hào)量會(huì)將其推入等待隊(duì)列,然后讓其睡眠。這時(shí)處理器獲得自由去執(zhí)行其它代碼。當(dāng)持有信號(hào)量的進(jìn)程將信號(hào)量釋放后,在等待隊(duì)列中的一個(gè)任務(wù)將被喚醒,從而便可以獲得這個(gè)信號(hào)量。
信號(hào)量的睡眠特性,使得信號(hào)量適用于鎖會(huì)被長(zhǎng)時(shí)間持有的情況;只能在進(jìn)程上下文中使用,因?yàn)橹袛嗌舷挛闹惺遣荒鼙徽{(diào)度的;另外當(dāng)代碼持有信號(hào)量時(shí),不可以再持有自旋鎖。
1.從 a.log 文件中提取包含“WARNING”或”FATAL”,同時(shí)不包含“IGNOR”的行,然后,提取以“:”分割的第五個(gè)字段?
grep?-E ‘WARNING|FATAL’ a.log?|?grep-v’IGNOR’?|?awk?-F?:?’{print $5 }’
2.添加一個(gè)新組為class01,然后,添加屬于這個(gè)組的30個(gè)用戶,用戶名的形式為stdXX,其中,XX從 01到 30?
#!/bin/bash
groupadd class01
for((i=1;i<=9;i++))
do
useradd std0$i?-G class01
done
for((i=10;i<=30;i++))
do
useradd std$i?-G class01
done
3.在每個(gè)月的第一天備份并壓縮/etc目錄下的所有內(nèi)容,存放在/root/backup目錄里,且文件名為如下形式y(tǒng)ymmdd_etc,yy為年,mm為月,dd為日。shell程序 fileback存放在/usr/bin 目錄下?
tar?-zcf?/root/backup/`date+%y%m%d`_etc?/etc
4.用shell編程,判斷一文件是不是字符設(shè)備文件,如果是將其拷貝到/dev目錄下?
#!/bin/bash
if?test$#?-ne1
then
echo?”ERROR”
exit?1
fi
if?test?-c?$1
then
/bin/cp -a?$1?/dev/
exit0
fi
exit?1
5.某系統(tǒng)管理員需要每天做一定的重復(fù)工作,編制一個(gè)解決方案:
(1).從下午 4:50 刪除/abc 目錄下的全部子目錄和全部文件;
(2).從早上 8:00~下午 6:00每小時(shí)讀取/xyz目錄下x1 文件中每行第一個(gè)域的全部數(shù)據(jù)加入到/backup目錄下的 back01.txt文件內(nèi);
(3).每逢周一下午 5:50 將/data目錄下的所有目錄和文件歸檔并壓縮為文件backup.tar.gz;
(4).在下午 5:55 將IDE接口的CD-ROM缷載(假設(shè)CD-ROM的設(shè)備名為 hdc);
(5).在早上 8:00 開機(jī)后啟動(dòng)。
使用計(jì)劃任務(wù)來完成:
crontab-e
———————–
50 16?*?*?*?rm-rf/abc/*
00 08-18?*?*?*?awk ‘{print$1 }’?/xyz/x1?>>?/backup/back01.txt
50 17?*?*?01 tar-zcf/backup/backup.tar.gz?/data
55 17?*?*?*?umount/dev/hdc
———————–
設(shè)定BIOS每日上午 08:00開機(jī)
騰訊筆試題:const的含義及實(shí)現(xiàn)機(jī)制
const的含義及實(shí)現(xiàn)機(jī)制,比如:const int i,是怎么做到i只可讀的?
const用來說明所定義的變量是只讀的。
這些在編譯期間完成,編譯器可能使用常數(shù)直接替換掉對(duì)此變量的引用。
更多閱讀:
http://www.92ask.net/Archive/?action=show&id=18
初探編譯器static、const之實(shí)現(xiàn)原理
騰訊筆試題:買200返100優(yōu)惠券,實(shí)際上折扣是多少?
到商店里買200的商品返還100優(yōu)惠券(可以在本商店代替現(xiàn)金)。請(qǐng)問實(shí)際上折扣是多少?
由于優(yōu)惠券可以代替現(xiàn)金,所以可以使用200元優(yōu)惠券買東西,然后還可以獲得100元的優(yōu)惠券。
假設(shè)開始時(shí)花了x元,那么可以買到 x + x/2 + x/4 +?…的東西。所以實(shí)際上折扣是50%.(當(dāng)然,大部分時(shí)候很難一直兌換下去,所以50%是折扣的上限)
如果使用優(yōu)惠券買東西不能獲得新的優(yōu)惠券,那么
總過花去了200元,可以買到200+100元的商品,所以實(shí)際折扣為 200/300 = 67%.
騰訊筆試題:tcp三次握手的過程,accept發(fā)生在三次握手哪個(gè)階段?
accept發(fā)生在三次握手之后。
第一次握手:客戶端發(fā)送syn包(syn=j)到服務(wù)器。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=j+1),同時(shí)自己也發(fā)送一個(gè)ASK包(ask=k)。
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=k+1)。
三次握手完成后,客戶端和服務(wù)器就建立了tcp連接。這時(shí)可以調(diào)用accept函數(shù)獲得此連接。
騰訊筆試題:用UDP協(xié)議通訊時(shí)怎樣得知目標(biāo)機(jī)是否獲得了數(shù)據(jù)包
用UDP協(xié)議通訊時(shí)怎樣得知目標(biāo)機(jī)是否獲得了數(shù)據(jù)包?
可以在每個(gè)數(shù)據(jù)包中插入一個(gè)唯一的ID,比如timestamp或者遞增的int。
發(fā)送方在發(fā)送數(shù)據(jù)時(shí)將此ID和發(fā)送時(shí)間記錄在本地。
接收方在收到數(shù)據(jù)后將ID再發(fā)給發(fā)送方作為回應(yīng)。
發(fā)送方如果收到回應(yīng),則知道接收方已經(jīng)收到相應(yīng)的數(shù)據(jù)包;如果在指定時(shí)間內(nèi)沒有收到回應(yīng),則數(shù)據(jù)包可能丟失,需要重復(fù)上面的過程重新發(fā)送一次,直到確定對(duì)方收到。
關(guān)于UDP協(xié)議的簡(jiǎn)單介紹,可以參考
http://baike.baidu.com/view/30509.htm
騰訊筆試題:統(tǒng)計(jì)論壇在線人數(shù)分布
求一個(gè)論壇的在線人數(shù),假設(shè)有一個(gè)論壇,其注冊(cè)ID有兩億個(gè),每個(gè)ID從登陸到退出會(huì)向一個(gè)日志文件中記下登陸時(shí)間和退出時(shí)間,要求寫一個(gè)算法統(tǒng)計(jì)一天中論壇的用戶在線分布,取樣粒度為秒。
一天總共有 3600*24 = 86400秒。
定義一個(gè)長(zhǎng)度為86400的整數(shù)數(shù)組int delta[86400],每個(gè)整數(shù)對(duì)應(yīng)這一秒的人數(shù)變化值,可能為正也可能為負(fù)。開始時(shí)將數(shù)組元素都初始化為0。
然后依次讀入每個(gè)用戶的登錄時(shí)間和退出時(shí)間,將與登錄時(shí)間對(duì)應(yīng)的整數(shù)值加1,將與退出時(shí)間對(duì)應(yīng)的整數(shù)值減1。
這樣處理一遍后數(shù)組中存儲(chǔ)了每秒中的人數(shù)變化情況。
定義另外一個(gè)長(zhǎng)度為86400的整數(shù)數(shù)組int online_num[86400],每個(gè)整數(shù)對(duì)應(yīng)這一秒的論壇在線人數(shù)。
假設(shè)一天開始時(shí)論壇在線人數(shù)為0,則第1秒的人數(shù)online_num[0] = delta[0]。第n+1秒的人數(shù)online_num[n] = online_num[n-1] + delta[n]。
這樣我們就獲得了一天中任意時(shí)間的在線人數(shù)。
騰訊筆試題:從10G個(gè)數(shù)中找到中數(shù)
在一個(gè)文件中有 10G 個(gè)整數(shù),亂序排列,要求找出中位數(shù)。內(nèi)存限制為 2G。
不妨假設(shè)10G個(gè)整數(shù)是64bit的。
2G內(nèi)存可以存放256M個(gè)64bit整數(shù)。
我們可以將64bit的整數(shù)空間平均分成256M個(gè)取值范圍,用2G的內(nèi)存對(duì)每個(gè)取值范圍內(nèi)出現(xiàn)整數(shù)個(gè)數(shù)進(jìn)行統(tǒng)計(jì)。這樣遍歷一邊10G整數(shù)后,我們便知道中數(shù)在那個(gè)范圍內(nèi)出現(xiàn),以及這個(gè)范圍內(nèi)總共出現(xiàn)了多少個(gè)整數(shù)。
如果中數(shù)所在范圍出現(xiàn)的整數(shù)比較少,我們就可以對(duì)這個(gè)范圍內(nèi)的整數(shù)進(jìn)行排序,找到中數(shù)。如果這個(gè)范圍內(nèi)出現(xiàn)的整數(shù)比較多,我們還可以采用同樣的方法將此范圍再次分成多個(gè)更小的范圍(256M=2^28,所以最多需要3次就可以將此范圍縮小到1,也就找到了中數(shù))。
訊筆試題:兩個(gè)整數(shù)集合A和B,求其交集
兩個(gè)整數(shù)集合A和B,求其交集。
1. 讀取整數(shù)集合A中的整數(shù),將讀到的整數(shù)插入到map中,并將對(duì)應(yīng)的值設(shè)為1。
2. 讀取整數(shù)集合B中的整數(shù),如果該整數(shù)在map中并且值為1,則將此數(shù)加入到交集當(dāng)中,并將在map中的對(duì)應(yīng)值改為2。
通過更改map中的值,避免了將同樣的值輸出兩次。
騰訊筆試題:找出1到10w中沒有出現(xiàn)的兩個(gè)數(shù)字
有1到10w這10w個(gè)數(shù),去除2個(gè)并打亂次序,如何找出那兩個(gè)數(shù)?
申請(qǐng)10w個(gè)bit的空間,每個(gè)bit代表一個(gè)數(shù)字是否出現(xiàn)過。
開始時(shí)將這10w個(gè)bit都初始化為0,表示所有數(shù)字都沒有出現(xiàn)過。
然后依次讀入已經(jīng)打亂循序的數(shù)字,并將對(duì)應(yīng)的bit設(shè)為1。
當(dāng)處理完所有數(shù)字后,根據(jù)為0的bit得出沒有出現(xiàn)的數(shù)字。
首先計(jì)算1到10w的和,平方和。
然后計(jì)算給定數(shù)字的和,平方和。
兩次的到的數(shù)字相減,可以得到這兩個(gè)數(shù)字的和,平方和。
所以我們有
x + y = n
x^2 + y^2 = m
解方程可以得到x和y的值。
騰訊筆試題:需要多少只小白鼠才能在24小時(shí)內(nèi)找到毒藥
有1000瓶水,其中有一瓶有毒,小白鼠只要嘗一點(diǎn)帶毒的水24小時(shí)后就會(huì)死亡,至少要多少只小白鼠才能在24小時(shí)時(shí)鑒別出那瓶水有毒?
最容易想到的就是用1000只小白鼠,每只喝一瓶。但顯然這不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就應(yīng)該每只小白鼠喝多瓶。那每只應(yīng)該喝多少瓶呢?
首先讓我們換種問法,如果有x只小白鼠,那么24小時(shí)內(nèi)可以從多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活這兩種結(jié)果,所以x只小白鼠最大可以表示2^x種結(jié)果。如果讓每種結(jié)果都對(duì)應(yīng)到某瓶水有毒,那么也就可以從2^x瓶水中找到有毒的那瓶水。那如何來實(shí)現(xiàn)這種對(duì)應(yīng)關(guān)系呢?
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶….以此類推。
回到此題,總過1000瓶水,所以需要最少10只小白鼠。
騰訊筆試題:根據(jù)上排的數(shù)填寫下排的數(shù),并滿足要求。
根據(jù)上排給出十個(gè)數(shù),在其下排填出對(duì)應(yīng)的十個(gè)數(shù), 要求下排每個(gè)數(shù)都是上排對(duì)應(yīng)位置的數(shù)在下排出現(xiàn)的次數(shù)。上排的數(shù):0,1,2,3,4,5,6,7,8,9。
騰訊筆試題:判斷數(shù)字是否出現(xiàn)在40億個(gè)數(shù)中?
給40億個(gè)不重復(fù)的unsigned int的整數(shù),沒排過序的,然后再給幾個(gè)數(shù),如何快速判斷這幾個(gè)數(shù)是否在那40億個(gè)數(shù)當(dāng)中?
答案:
unsigned int 的取值范圍是0到2^32-1。我們可以申請(qǐng)連續(xù)的2^32/8=512M的內(nèi)存,用每一個(gè)bit對(duì)應(yīng)一個(gè)unsigned int數(shù)字。首先將512M內(nèi)存都初始化為0,然后每處理一個(gè)數(shù)字就將其對(duì)應(yīng)的bit設(shè)置為1。當(dāng)需要查詢時(shí),直接找到對(duì)應(yīng)bit,看其值是0還是1即可。
?
1、請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b?的大小,不能使用大于、小于、if?語句
2、如何輸出源文件的標(biāo)題和目前執(zhí)行行的行數(shù)
3、兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法
4、寫一個(gè)病毒
5、有A、B、C、D?四個(gè)人,要在夜里過一座橋。他們通過這座橋分別需要
耗時(shí)1、2、5、10?分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過橋。
請(qǐng)問,如何安排,能夠在17?分鐘內(nèi)這四個(gè)人都過橋?
2005?年騰訊招聘
選擇題(60)
c/c++ os linux?方面的基礎(chǔ)知識(shí)c?的Sizeof?函數(shù)有好幾個(gè)!
程序填空(40)
1.(20) 4?空x5
不使用額外空間,將A,B?兩鏈表的元素交叉歸并
2.(20) 4?空x5
MFC?將樹序列化轉(zhuǎn)存在數(shù)組或鏈表中!
基本都是基礎(chǔ)題目,看來騰訊不準(zhǔn)備放棄那些有思想但是
還沒有開始苦練基本功的人,只涉及到語言問題和簡(jiǎn)單的
數(shù)據(jù)結(jié)構(gòu),其他的操作系統(tǒng),編譯原理,離散數(shù)學(xué),軟件
?
工程,計(jì)算機(jī)原理,體系結(jié)構(gòu)等等無一涉及,題目很多,
有1?個(gè)選擇題想不來起來是什么了,題號(hào)不與原試題相符
希望師弟師妹可以探討探討答案,從中學(xué)到筆試的經(jīng)驗(yàn)
聲明:以下問題僅供本校園網(wǎng)校內(nèi)師弟師妹為了考察自己學(xué)習(xí)的參考,不要
傳播
1?計(jì)算a^b<< 2 (運(yùn)算符優(yōu)先級(jí)問題)
2?根據(jù)先序中序求后序
3 a[3][4]哪個(gè)不能表示a[1][1]: *(&a[0][0]) *(*(a+1)+1) *(&a[1]+1)
*(&a[0][0]+4)
4 for(int i…)
for(int j…)
printf(i,j);
printf(j)
會(huì)出現(xiàn)什么問題
5 for(i=0;i<10;++i,sum+=i);的運(yùn)行結(jié)果
6 10?個(gè)數(shù)順序插入查找二叉樹,元素62?的比較次數(shù)
7 10?個(gè)數(shù)放入模10hash?鏈表,最大長(zhǎng)度是多少
8 fun((exp1,exp2),(exp3,exp4,exp5))有幾個(gè)實(shí)參
9?希爾冒泡快速插入哪個(gè)平均速度最快
10?二分查找是順序存儲(chǔ)鏈存儲(chǔ)按value?有序中的哪些
11?順序查找的平均時(shí)間
?
12 *p=NULL *p=new char[100] sizeof(p)各為多少
13?頻繁的插入刪除操作使用什么結(jié)構(gòu)比較合適,鏈表還是數(shù)組
14 enum?的聲明方式
其他1?個(gè)選擇暫時(shí)想不起來了
大題:
1?把字符串轉(zhuǎn)換為小寫,不成功返回NULL,成功返回新串
char* toLower(char* sSrcStr)
{
char* sDest= NULL;
if( __1___)
{
int j;
sLen = strlen(sSrcStr);
sDest = new [_______2_____];
if(*sDest == NULL)
return NULL;
sDest[sLen] = ‘\0′;
while(_____3____)
sDest[sLen] = toLowerChar(sSrcStr[sLen]);
}
return sDest;
}
2?把字符串轉(zhuǎn)換為整數(shù)例如:”-123″ -> -123
main()
{
…..
if( *string == ‘-’ )
n = ____1______;
else
n = num(string);
?
…..
}
int num(char* string)
{
for(;!(*string==0);string++)
{
int k;
k = __2_____;
j = –sLen;
while( __3__)
k = k * 10;
num = num + k;
}
return num;
}
附加題:
1 linux?下調(diào)試core?的命令,察看堆棧狀態(tài)命令
2?寫出socks?套接字服務(wù)端客戶端通訊程序
3?填空補(bǔ)全程序,按照我的理解是添入:win32?調(diào)入dll?的函數(shù)名查找函數(shù)
入口的函數(shù)名找到函數(shù)的調(diào)用形式把formView?加到singledoc?的聲明將
singledoc?加到app?的聲明
4?有關(guān)系s(sno,sname) c(cno,cname) sc(sno,cno,grade)
1?問上課程”db”的學(xué)生no
2?成績(jī)最高的學(xué)生號(hào)
3?每科大于90?分的人數(shù)
試一共60?分鐘,分發(fā)試卷和收回試卷費(fèi)時(shí)5?分鐘,實(shí)際考試時(shí)間55?分鐘。
?
?
?
選擇題36?道(都是5?個(gè)選項(xiàng)的),計(jì)算題14?道(一道題會(huì)有好幾個(gè)問),
題量比較大,我還有最后兩個(gè)空沒填寫,實(shí)在是沒時(shí)間了~~
題目考查的范圍比較全面,但是有所側(cè)重,例如:如果外匯相對(duì)于本國(guó)
貨幣升值,一般來說,本國(guó)的通貨膨脹率將會(huì)怎樣?下面就是5?個(gè)選項(xiàng)。
總體來說,試題本身難度不大,但是很費(fèi)時(shí)間,閱讀的速度非常重要,
邏輯判斷的能力要求很高,要求快速閱讀、快速判斷、快速計(jì)算,而且還不
能粗心導(dǎo)致計(jì)算失誤(我一般出現(xiàn)的情況就是計(jì)算失誤~~,希望這次不會(huì)出
現(xiàn)~~)
騰訊這次的試卷可能字體印刷的比較小了,我的視力是5.3?的,看上去
不會(huì)有任何問題,但是坐在我后面的老兄就不好了,完全是模糊的一片,不
斷的縮減和紙張之間的距離才能看到,可能騰訊公司在這方面的成本應(yīng)該適
當(dāng)放寬(也許也是一種測(cè)試吧,身體素質(zhì)的測(cè)試~~)
?
1.哪一個(gè)聲明是錯(cuò)誤的( )
char * const p = 0;
char const * p = 0;
const char * p = 0;
char * p const = 0;
2.下面的結(jié)構(gòu)體所占內(nèi)存是( )
#pragma pack(4)
struct {
unino {
char ch1;
double num;
} bbb;
char ch2;
}aaa;
#pragma pack()
3.x = 0xffffffff,則 x = (x&0xffff0000) >> 16 的結(jié)果是( )
4.#define TEST(x) (x*2+1),則 TEST(1+1)的結(jié)果是( )
5.有15個(gè)結(jié)點(diǎn)的滿二叉樹,葉子數(shù)是( )
6.程序片段的輸出結(jié)果( )
class A {
public:
A() { printf(“A1 “); }
~A() { printf(“A2 “); }
};
class B : public A {
public:
B() { printf(“B1 “); }
~B() { printf(“B2 “); }
};
B b = new B;
delete b;
7.int Func(const char *)的重載函數(shù)是( ) (選項(xiàng)略)
8.按順序A, B, C進(jìn)棧,出棧的結(jié)果是( )
9.程序片段的輸出結(jié)果( )
class A {
public:
virtual int func() { return 1; }
};
class B : public A {
public:
virtual int func() { return 2; }
};
A *a = new B;
printf(“%d %d\n”, a->func(), a->A::func());
delete a;
10.程序片段的執(zhí)行描述中正確的是( )
class A {
public:
virtual void func(A& ra);
};
class B : public A {
public:
virtual void func(B& rb);
};
B b;
A &a = b;
a.func(b);
(有點(diǎn)記不清了,反正俺錯(cuò)了這題,以為引用和指針是不同的…>_<)
11.關(guān)于哈希表特點(diǎn)錯(cuò)誤的是( ) (選項(xiàng)略)
12.函數(shù)功能描述正確的是( )
int whatido(char * str)
{
return *str ? whatido(++str)+1 : 0;
}
二、程序填空(5×8)
1.二叉樹的遍歷
2.靜態(tài)單鏈表Appand元素
三、附加題(20×3)
1.寫出3D的鏡象轉(zhuǎn)置矩陣(什么東東?看不懂題意…)
2.SQL的簡(jiǎn)單東東(俺全忘了…哭)
3.商場(chǎng)“買200送100”算折扣(還是不懂…)
?
c/c++ os linux 方面的基礎(chǔ)知識(shí) c的Sizeof函數(shù)有好幾個(gè)!
程序填空(40)
1.(20) 4空x5
不使用額外空間,將 A,B兩鏈表的元素交叉歸并
2.(20) 4空x5
MFC ?將樹序列化 轉(zhuǎn)存在數(shù)組或 鏈表中!
1.請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句
// 這樣轉(zhuǎn)向定義應(yīng)該不算違規(guī)吧!^_^
#include “stdafx.h”
#include <string.h>
#include <iostream>
using namespace std;
#define Cmp(x,y) compare(x,y)
int compare( int a, int b)
{
a^=(1<<31); b^=(1<<31);
int i=31;
while ((i^-1) && !((a&(1<<i))^(b&(1<<i)))) ? ? i–;
return (i^-1)?(((a>>i)&1)?1:-1):0;
}
int _tmain()
{
int c;
c = Cmp(5,4);
cout<<c<<endl;
return 0;
}
jruv ? (~~~一葉落而知天下秋~~~) 的答案:
#define ? COMPARE(a,b) ? ((a)-(b)) ? ? ? ? //<0: ? a<b ? =0:a==b>0:a>b
2.如何輸出源文件的標(biāo)題和目前執(zhí)行行的行數(shù)
cout ? << ? “Filename ? ” ? << ? __FILE__ ? << ? ” ? Line ? ” ? << ? __LINE__ ? << ? endl;
3.兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法
算法提示:
輸入 string a, string b; 計(jì)算string c=a*b; 返回 c;
1, ? ?紀(jì)錄小數(shù)點(diǎn)在a,b中的位置l1,l2, 則需要小數(shù)點(diǎn)后移動(dòng)位置數(shù)為l=length(a)+length(b)-l1-l2-2;
2, ? ?去掉a,b中的小數(shù)點(diǎn),(a,b小數(shù)點(diǎn)后移,使a,b變?yōu)檎麛?shù))
3, ? ?計(jì)算c=a*b; (同整數(shù)的大數(shù)相乘算法)
4, ? ?輸出c,(注意在輸出倒數(shù)第l個(gè)數(shù)時(shí),輸出一個(gè)小數(shù)點(diǎn)。若是輸出的數(shù)少于l個(gè),就補(bǔ)0)
du51(郁郁思揚(yáng))的答案:
變?yōu)檎麛?shù)求就行了.輸入的時(shí)候記一下,小數(shù)點(diǎn)位置..輸出再做點(diǎn)文章就行了.
下面的是大整數(shù)的運(yùn)算.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
int data;
Node *next;
};
void output(Node *head)
{
if(!head->next&&!head->data)return;
output(head->next);
cout<<head->data;
}
void Mul(char *a,char *b,int pos)
{
char *ap=a,*bp=b;
Node *head=0;
head=new Node;head->data=0,head->next=0; ? //頭
Node *p,*q=head,*p1;
int temp=0,temp1,bbit;
while(*bp) ? ? ? ? ? ? ? ?//若乘數(shù)不為空 ,繼續(xù).
{
p=q->next;p1=q;
bbit=*bp-48; ? ? ? ? ?//把當(dāng)前位轉(zhuǎn)為整型
while(*ap||temp) ? ? ? ? ? ?//若被乘數(shù)不空,繼續(xù)
{
if(!p) ? ? ? ? ? ?//若要操作的結(jié)點(diǎn)為空,申請(qǐng)之
{
p=new Node;
p->data=0;
p->next=0;
p1->next=p;
}
if(*ap==0)temp1=temp;
else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
p1->data=temp1%10; ? ?//留當(dāng)前位
temp=temp1/10; ? ?//進(jìn)位以int的形式留下.
p1=p;p=p->next; ? ? ? ? ? ? ? ? //被乘數(shù)到下一位
}
ap=a;bp++;q=q->next; ? ? ? ? ? ? ? ?//q進(jìn)下一位
}
p=head;
output(p); ? ? ? ? ? ? ? ? ? //顯示
cout<<endl;
while(head) ? ? ? ? ? ? ? ? //釋放空間
{
p=head->next;
delete head;
head=p;
}
}
int main()
{
cout<<”請(qǐng)輸入兩個(gè)數(shù)”<<endl;
char test1[MAX],test2[MAX];
cin.getline(test1,MAX,’\n’);
cin.getline(test2,MAX,’\n’);
Mul(strrev(test1),strrev(test2));
system(“PAUSE”);
return 0;
}
上面大整數(shù)已經(jīng)寫了.你加幾個(gè)東西就行了.
#include<iostream>
using namespace std;
#define MAX 10000
struct Node{
int data;
Node *next;
};
void output(Node *head,int pos)
{
if(!head->next&&!head->data)return;
output(head->next,pos-1);
cout<<head->data;
if(!pos)cout<<”.”;
}
void Mul(char *a,char *b,int pos)
{
char *ap=a,*bp=b;
Node *head=0;
head=new Node;head->data=0,head->next=0; ? //頭
Node *p,*q=head,*p1;
int temp=0,temp1,bbit;
while(*bp) ? ? ? ? ? ? ? ?//若乘數(shù)不為空 ,繼續(xù).
{
p=q->next;p1=q;
bbit=*bp-48; ? ? ? ? ?//把當(dāng)前位轉(zhuǎn)為整型
while(*ap||temp) ? ? ? ? ? ?//若被乘數(shù)不空,繼續(xù)
{
if(!p) ? ? ? ? ? ?//若要操作的結(jié)點(diǎn)為空,申請(qǐng)之
{
p=new Node;
p->data=0;
p->next=0;
p1->next=p;
}
if(*ap==0)temp1=temp;
else { temp1=(p1->data)+(*ap-48)*bbit+temp;ap++; }
p1->data=temp1%10; ? ?//留當(dāng)前位
temp=temp1/10; ? ?//進(jìn)位以int的形式留下.
p1=p;p=p->next; ? ? ? ? ? ? ? ? //被乘數(shù)到下一位
}
ap=a;bp++;q=q->next; ? ? ? ? ? ? ? ?//q進(jìn)下一位
}
p=head;
output(p,pos); ? ? ? ? ? ? ? ? ? //顯示
cout<<endl;
while(head) ? ? ? ? ? ? ? ? //釋放空間
{
p=head->next;
delete head;
head=p;
}
}
int main()
{
cout<<”請(qǐng)輸入兩個(gè)數(shù)”<<endl;
char test1[MAX],test2[MAX],*p;
int pos=0;
cin.getline(test1,MAX,’\n’);
cin.getline(test2,MAX,’\n’);
if(p=strchr(test1,’.'))
{
pos+=strlen(test1)-(p-test1)-1;
do
{
p++;
*(p-1)=*p;
}while(*p);
}
if(p=strchr(test2,’.'))
{
pos+=strlen(test2)-(p-test2)-1;
do
{
p++;
*(p-1)=*p;
}while(*p);
}
Mul(strrev(test1),strrev(test2),pos);
system(“PAUSE”);
return 0;
}
4.寫一個(gè)病毒
cout<<”一個(gè)病毒”<<endl;
(開玩笑的,沒搞過,^_^)
5.讓你在100000000個(gè)浮點(diǎn)數(shù)中找出最大的10000個(gè),要求時(shí)間復(fù)雜度優(yōu)。
//本算法使用快排,O(n*lg(n))
//最低可以找到線性算法,使用預(yù)先區(qū)域統(tǒng)計(jì)劃分!類試于構(gòu)造Quad Trees! 寫起來代碼會(huì)長(zhǎng)些!
#include <stdio.h>
#include <stdlib.h>
#define Max 100000000
int a[Max+10];
int cmp( const void *a, const void *b)
{
int *x = ( int *) a;
int *y = ( int *) b;
return *x-*y;
}
int main()
{
int n=0;
while (scanf(“%d”,&a[n])==1) ? ? n++;
qsort(a,n,4,cmp);
for ( int i=0;i<3;i++) ? ? printf(“%d”,a[ i ]);
return 1;
}
5 、有 A 、 B 、 C 、 D 四個(gè)人,要在夜里過一座橋。他們通過這座橋分別需要耗時(shí) 1 、 2 、 5 、 10 分鐘,只有一支手電,并且同時(shí)最多只能兩個(gè)人一起過橋。請(qǐng)問,如何安排,能夠在 17 分鐘內(nèi)這四個(gè)人都過橋?
Solution:關(guān)鍵是時(shí)間最長(zhǎng)的兩個(gè)人必須同時(shí)過橋
The First Time : ? ? ? A(1) 和 B(2) 過橋, A(1) 返回 Cost : 1+2
The Second Time : ? ?C(5) 和 D(10) 過橋, B(2) 返回 Cost : 10+2
The Third Time ? ? A(1) 和 B(2) 過橋 Cost : 2
Total Time Cost : ? ?(1+2)+(10+2)+2=17 minutes
1.請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句
2.如何輸出源文件的標(biāo)題和目前執(zhí)行行的行數(shù)
3.兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法
數(shù)據(jù)控制語言(DCL):是用來設(shè)置或者更改數(shù)據(jù)庫(kù)用戶或角色權(quán)限的語句,這些語句包括GRANT、DENY、REVOKE等語句,在默認(rèn)狀態(tài)下,只有sysadmin、dbcreator、db_owner或db_securityadmin等角色的成員才有權(quán)利執(zhí)行數(shù)據(jù)控制語言。
數(shù)據(jù)操縱語言(DML):數(shù)據(jù)操縱語言是指用來查詢、添加、修改和刪除數(shù)據(jù)庫(kù)中數(shù)據(jù)的語句,這些語句包括Select、Insert、Update、Delete等。在默認(rèn)情況下,只有sysadmin、dbcreator、db_owner或db_datawriter等角色的成員才有權(quán)利執(zhí)行數(shù)據(jù)操縱語言。
數(shù)據(jù)定義語言(DDL):數(shù)據(jù)定義語言是指用來定義和管理數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)中的各種對(duì)象的語句,這些語句包括Create、Alter和Drop等語句。在SQL Server 2000中,數(shù)據(jù)庫(kù)對(duì)象包括表、視圖、觸發(fā)器、存儲(chǔ)過程、規(guī)則、缺省、用戶自定義的數(shù)據(jù)類型等。這些對(duì)象的創(chuàng)建、修改和刪除等都可以通過使用Create、Alter、Drop等語句來完成。
編譯執(zhí)行和解釋執(zhí)行的區(qū)別:
1、解釋程序
所謂解釋程序是高級(jí)語言翻譯程序的一種,它將源語言(如BASIC)書寫的源程序作為輸入,解釋一句后就提交計(jì)算機(jī)執(zhí)行一句,并不形成目標(biāo)程序。就像外語翻譯中的“口譯”一樣,說一句翻一句,不產(chǎn)生全文的翻譯文本。這種工作方式非常適合于人通過終端設(shè)備與計(jì)算機(jī)會(huì)話,如在終端上打一條命令或語句,解釋程序就立即將此語句解釋成一條或幾條指令并提交硬件立即執(zhí)行且將執(zhí)行結(jié)果反映到終端,從終端把命令打入后,就能立即得到計(jì)算結(jié)果。這的確是很方便的,很適合于一些小型機(jī)的計(jì)算問題。但解釋程序執(zhí)行速度很慢,例如源程序中出現(xiàn)循環(huán),則解釋程序也重復(fù)地解釋并提交執(zhí)行這一組語句,這就造成很大浪費(fèi)。
2、編譯程序
這是一類很重要的語言處理程序,它把高級(jí)語言(如FORTRAN、COBOL、Pascal、C等)源程序作為輸入,進(jìn)行翻譯轉(zhuǎn)換,產(chǎn)生出機(jī)器語言的目標(biāo)程序,然后再讓計(jì)算機(jī)去執(zhí)行這個(gè)目標(biāo)程序,得到計(jì)算結(jié)果。
編譯程序工作時(shí),先分析,后綜合,從而得到目標(biāo)程序。所謂分析,是指詞法分析和語法分析;所謂綜合是指代碼優(yōu)化、存儲(chǔ)分配和代碼生成。為了完成這些分析綜合任務(wù),編譯程序采用對(duì)源程序進(jìn)行多次掃描的辦法,每次掃描集中完成一項(xiàng)或幾項(xiàng)任務(wù),也有一項(xiàng)任務(wù)分散到幾次掃描去完成的。
值得一提的是,大多數(shù)的編譯程序直接產(chǎn)生機(jī)器語言的目標(biāo)代碼,形成可執(zhí)行的目標(biāo)文件,但也有的編譯程序則先產(chǎn)生匯編語言一級(jí)的符號(hào)代碼文件,然后再調(diào)用匯編程序進(jìn)行翻譯加工處理,最后產(chǎn)生可執(zhí)行的機(jī)器語言目標(biāo)文件。
在實(shí)際應(yīng)用中,對(duì)于需要經(jīng)常使用的有大量計(jì)算的大型題目,采用招待速度較快的編譯型的高級(jí)語言較好,雖然編譯過程本身較為復(fù)雜,但一旦形成目標(biāo)文件,以后可多次使用。相反,對(duì)于小型題目或計(jì)算簡(jiǎn)單不太費(fèi)機(jī)時(shí)的題目,則多選用解釋型的會(huì)話式高級(jí)語言,如BASIC,這樣可以大大縮短編程及調(diào)試的時(shí)間。
最后的附加題是一個(gè)“背包問題”
?
總結(jié)
- 上一篇: 国内外主流的三维GIS软件集锦
- 下一篇: 武警部队公安应急人防安监三维可视化交互电