1 [單選題]
關於c++的inline關鍵字,以下說法正確的是()
A使用inline關鍵字的函數會被編譯器在調用處展開
B可以在同一個項目的不同源文件內定義函數名相同但實現不同的inline函數
C定義在Class聲明內的成員函數默認是inline函數
D優先使用Class實現的內inline函數的實現
參考答案:D
解析:
A項錯誤,因為使用inline關鍵字的函數只是用戶希望它成為內聯函數,但編譯器有權忽略這個請求,比如:若此函數體太大,則不會把它作為內聯函數展開的。
B項錯誤,頭文件中不僅要包含inline函數的聲明,而且必須包含定義,且在定義時必須加上inline。【關鍵字inline必須與函數定義體放在一起才能使函數成為內聯,僅將inline放在函數聲明前面不起任何作用】
C項錯誤,inline函數可以定義在源文件中,但多個源文件中的同名inline函數的實現必須相同。一般把inline函數的定義放在頭文件中更加合適。
D項正確,類內的成員函數,默認都是inline的。【定義在類聲明之中的成員函數將自動地成為內聯函數】
EF項無意思,不管是class聲明中定義的inline函數,還是class實現中定義的inline函數,不存在優先不優先的問題,因為class的成員函數都是inline的,加了關鍵字inline也沒什麼特殊的。
2 [單選題]
對N個數進行排序,在各自最優條件下以下算法複雜度最低的是()
A快速排序
B堆排序
C冒泡排序
D插入排序
E選擇排序
F歸併排序
參考答案:D
3 [單選題]
甲乙兩個一樣大小的杯子各自分別裝著小於一半容積的水和酒精.現將甲杯子裡的一部分水倒入乙杯子;之後將乙杯子的混合液倒入一些到甲杯子,此時甲杯子的液體恢復到最初的狀態.假定水和酒精混合之後的體積等於混合之前的體積之和。那麼以下說法正確的是()
A甲杯子裡的酒精體積等於乙杯子裡的水的體積
B甲杯子裡的酒精的體積等於乙杯子裡的酒精的體積
C甲杯子裡的水的體積等於乙杯子裡的酒精的體積
D甲杯子裡的水的體積等於乙杯子裡的水的體積
E甲杯子裡的液體高於乙杯子裡的液位
F以上都不對
參考答案:A
解析:
最初,甲杯子只有酒精,乙杯子只有水。
最後,甲杯子恢復到最初的高度,只是混入了一些酒精。
所以從乙杯子拿出多少酒精給甲杯子,乙杯子就有多少甲杯子的水。
ps:題目已經假設 酒精和水混合後等於兩者容量之和
4 [單選題]
main()
{
char*a[]={"work","at","alibaba"};
char**pa=a;
pa++;
printf("%s",*pa);
}
下列程序的執行結果是()
A at
B atalibaba
C ork
D orkatalibaba
E編譯錯誤
F運行溢出
參考答案:A
解析:
5 [單選題]
一個黑盒子裡有若干紅球和黑球,隨機取出一個球是紅球的概率是p.現在從黑盒子中拿出等量的紅球和黑球后,隨機取出一個球是紅球的概率是q,如果p<q,那麼以下說法正確的是()
A最初紅球的個數小於黑球的個數
B最初紅球的個數大於黑球的個數
C最初紅球的個數是黑球的的2倍
D最初紅球的個數是黑球的1/2
E無法判斷最初紅球和黑球誰多誰少
參考答案:B
解析:極端想,假如拿過只後只剩下黑球,那麼再次取紅球的概率將為0,所以剩下的肯定只能是紅球,此時概率為1,當然會大於p。所以紅球一定比黑球多
6 [單選題]
以下二叉樹的後序遍歷結果是()
A (ABCDEF)
B (ABDECF)
C (FCEDBA)
D (DEBFCA)
E (FEDCBA)
F (EDBFCA)
參考答案:D
7[單選題]
在TCP/IP建立連接過程中,客戶端和服務器端的狀態轉移說法錯誤的是?
A經歷SYN_RECV狀態
B經歷SYN_SEND狀態
C經歷ESTABLISHED狀態
D經歷TIME_WAIT狀態
E服務器在收到syn包時將加入半連接隊列
F服務器接受到客戶端的ack包後將從半連接隊列刪除
參考答案:D
解析:
TCP建立連接時,首先客戶端和服務器處於close狀態。然後客戶端發送SYN同步位,此時客戶端處於SYN-SEND狀態,服務器處於lISTEN狀態,當服務器收到SYN以後,向客戶端發送同步位SYN和確認碼ACK,然後服務器變為SYN-RCVD,客戶端收到服務器發來的SYN和ACK後,客戶端的狀態變成ESTABLISHED(已建立連接),客戶端再向服務器發送ACK確認碼,服務器接收到以後也變成ESTABLISHED。然後服務器客戶端開始數據傳輸
8 [單選題]
假設在n進制下,下面的等式成立,n值是()240*12=2880
A 19
B 18
C 17
D 16
E 15
F 以上都對
參考答案:F
解析:假設為n進值則 [2*(n^2)+4*(n^1)+0] * [1*n+2]=2*(n^3)+8*(n^2)+8*(n^1)
化簡後居然為很等式 ,n為任一值
9 [單選題]
下面關於系統調用的描述中,錯誤的是()
A系統調用把應用程序的請求傳輸給系統內核執行
B系統調用中被調用的過程運行在"用戶態"中
C利用系統調用能夠得到操作系統提供的多種服務
D是操作系統提供給編程人員的接口
E系統調用給用戶屏蔽了設備訪問的細節
F系統調用保護了一些只能在內核模式執行的操作指令
參考答案:B
解析:用戶空間與系統空間所在的內存區間不一樣,同樣,對於這兩種區間,CPU的運行狀態也不一樣。在用戶空間中,CPU處於"用戶態";在系統空間中,CPU處於"系統態"。
10 [單選題]
關於linux的I/O複用接口select和epoll,下列說法錯誤的是()
A select調用時會進行線性遍歷,epoll採用回調函數機制,不需要線性遍歷
B select的最大連接數為FD_SETSIZE
C select較適合於有大量併發連接,且活躍鏈接較多的場景
D epoll較適用於有大量併發連接,但活躍連接不多的場景
E epoll的效率不隨FD數目增加而線性下降
F epoll通過共享存儲實現內核和用戶的數據交互
參考答案:C
解析:
select 和 epoll效率差異的原因:select採用輪詢方式處理連接,epoll是觸發式處理連接。
Select:
1.Socket數量限制:該限制可操作的Socket數由FD_SETSIZE決定,內核默認32*32=1024.
2.操作限制:通過遍歷FD_SETSIZE(1024)個Socket來完成調度,不管哪個Socket是活躍的,都遍歷一遍。
Epoll
1.Socket數量無限制:該模式下的Socket對應的fd列表由一個數組來保存,大小不限制(默認4k)。
2.操作無限制:基於內核提供的反射模式,有活躍Socket時,內核訪問該Socket的callback,不需要遍歷輪詢。
但當所有的Socket都活躍的時候,所有的callback都被喚醒,會導致資源的競爭。既然都是要處理所有的Socket,
那麼遍歷是最簡單最有效的實現方式。
11 [單選題]
有無限的水源,一個5L無刻度桶和一個7L無刻度桶,則只利用這兩個無刻度桶,將不能獲得()L水
A 2
B 3
C 6
D 8
E 11
F以上均能獲得
參考答案:F
解析:只要滿足5a+7b=t即可。a, b可取任意整數,t就是能獲得的容量數。
12 [單選題]
7的2014次方這個整數的十位數字數是()
A 0
B 1
C 3
D 4
E 5
F 7
參考答案:D
解析:7^0=01
7^1=07
7^2=49
7^3=x43
7^4=x01
從此進入以4為週期的循環,2014=4*503+2,所以末尾2位應該是49。
13 [單選題]
在100-999這900個自然數中,若將組成這個數的三個數字認為是三條線段的長度,那麼是三條線段組成一個等腰三角形(包括等邊)的共有()個.
A 45
B 91
C 121
D 142
E 156
F 165
參考答案:F
解析;
先考慮等邊三角形情況
則a=b=c=1,2,3,4,5,6,7,8,9,此時n有9個
再考慮等腰三角形情況,若a,b是腰,則a=b
當a=b=1時,c<a+b=2,則c=1,與等邊三角形情況重複;
當a=b=2時,c<4,則c=1,3(c=2的情況等邊三角形已經討論了),此時n有2個;
當a=b=3時,c<6,則c=1,2,4,5,此時n有4個;
當a=b=4時,c<8,則c=1,2,3,5,6,7,有6個;
當a=b=5時,c<10,有c=1,2,3,4,6,7,8,9,有8個;
由加法原理知n有2+4+6+8+8+8+8+8=52個
同理,若a,c是腰時,c也有52個,b,c是腰時也有52個
所以n共有9+3×52=165個
14 [單選題]
下面哪個不是線性表?
A循環鏈表
B隊列
C棧
D關聯數組
E空字符串數組
F雙向鏈表
參考答案:D
15 [單選題]
下面的哪種排序算法在算複雜度平均不是O(nlogn)的?
A快速排序
B桶排序
C合併排序
D二叉樹排序樹排序
E堆排序
參考答案:B
解析:
桶排序的平均時間複雜度為線性的O(N+C),其中C=N*(logN-logM)。如果相對於同樣的N,桶數量M越大,其效率越高,最好的時間複雜度達到O(N)。 當然桶排序的空間複雜度 為O(N+M),如果輸入數據非常龐大,而桶的數量也非常多,則空間代價無疑是昂貴的。此外,桶排序是穩定的。
16 [單選題]
某創業團隊的一個很大的辦公室(障礙和遮擋可以忽略)裡有一個WIFI源,有1個工位由於距離WIFI源太遠而接收不到信號.為了提高該工位的聯網質量,準備在工位和WIFI信號源之間安裝一個無線AP(相當於中繼的,可以中轉該工位上的計算機和WIFI之間的信號).只考慮從WIFI發出的信號,如果AP離WIFI源太近,就起不到中繼的作用,如果AP離工位太遠則可能連不上WIFI.因此AP有一個最佳的安裝位置,那麼關於AP最佳安裝位置的說法正確的是()
A如果WIFI源功率越大,那麼AP最佳安裝位置越靠近WIFI源
B如果WiFi源功率越大,那麼AP最佳的安裝位置越靠近工位
C WIFI源功率和AP最佳安裝位置無關.
D AP最佳安裝位置在工位和WIFI信號源連線之外
E AP最佳安裝位置在工位和WIFI信號源連線中點
F以上說法都不對
參考答案:B
解析:
無線AP是用於接收WiFi信號,並將之傳遞給工位的。將WiFi源信號強弱範圍看作一個圓,那麼WiFi源功率越大,所能輻射到的範圍也即圓的半徑越大,越靠近工位。無線AP就是要物盡其用,在能接收到WiFi信號的前提下,將信號傳遞給工位,故在WiFi源功率越大時,AP最佳位置越靠近工位
17[單選題]
有100個金幣,分給10個人.第一個金幣等概率地分給10個人之一.之後的每一個金幣分配給第K個人的概率正比於這個人已經持有的金幣數+1.在這樣的分配機制下,關於每個人最終的金幣個數的分佈的說法錯誤的是()
A每個人得到的金幣的個數的期望是相等的
B每個人的金幣個數接近均勻分佈
C第一個金幣給哪個人,哪個人的最終金幣個數的期望就會更大
D在中間的某個階段金幣個數越多的人,未來獲得金幣的可能性越大
參考答案:B
解析:
A。由於第一個金幣是隨機等概率給人,所以每個人拿到第一個金幣的概率是一樣的,所以每個人的期望相同。
B。這種馬太效應的分佈模式怎麼可能是均勻分佈呢
C。第一個拿到金幣的人,拿到第二個金幣的概率要比其他人高一倍。
D。中間某個階段拿到較多金幣的人,他後面拿到金幣的概率也比其他人高
18 [單選題]
在自由交換的情況下,只考慮偏好,小張用自己的小刀換了小王的橡皮.關於這個交換以下說法錯誤的是:
A小張覺得橡皮比小刀更好
B小王覺得小刀比橡皮更好
C小張和小王總的財富里沒有發生變化
D小張和小王的效用值增加了
E如果把小王換成小吳,那麼這個交換可能就不會發生
F小刀和橡皮等值
參考答案:F
解析:
選項AB是對稱的,所以肯定正確,由AB可以看出題目的意圖是,這次交換靠的是物品的相對價值相當(小張覺得橡皮比小刀更好,小王覺得小刀比橡皮更好),但明顯最後一個選項等值指的是他們的絕對價值
所以,選最後一項
19 [單選題]
struct st
{
int *p;
int i;
char a;
};
int sz=sizeof(struct st);
如下C程序,在64位處理器上運行後sz的值是什麼?
A 24
B 20
C 16
D 14
E 13
F 12
參考答案:C
解析:
考點:1.struct的對齊原則,注意不同的編譯器有不同的效果。
2。不同的數據類型在32位和64位下所佔字節的區別
32位編譯器:
char :1個字節
char*(即指針變量): 4個字節(32位的尋址空間是2^32, 即32個bit,也就是4個字節。同理64位編譯器)
short int : 2個字節
int: 4個字節
unsigned int : 4個字節
float: 4個字節
double: 8個字節
long: 4個字節
long long: 8個字節
unsigned long: 4個字節
64位編譯器:
char :1個字節
char*(即指針變量): 8個字節
short int : 2個字節
int: 4個字節
unsigned int : 4個字節
float: 4個字節
double: 8個字節
long: 8個字節
long long: 8個字節
unsigned long: 8個字節
此處指針先佔用8字節。int佔用4字節,滿足要求不用補齊,char佔用一個字節,同時總的字節數必須滿足8的倍數即16
20 [單選題]
#include <iostream> #include <vector>using namespace std;int main(void){ vector<int>array; array.push_back(100); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(300); array.push_back(500); vector<int>::iterator itor; for(itor=array.begin();itor!=array.end();itor++) { if(*itor==300) { itor=array.erase(itor); } } for(itor=array.begin();itor!=array.end();itor++) { cout<<*itor<<""; } return 0;} |
下面這個代碼輸出的是()
A 100 300 300 300 300 500
B 100 3OO 300 300 500
C 100 300 300 500
D 100 300 500
E 100 500
F程序錯誤
參考答案:C
解析:
vector::erase():從指定容器刪除指定位置的元素或某段範圍內的元素
vector::erase()方法有兩種重載形式
如下:
iterator erase( iterator _Where);
iterator erase( iterator _First, iterator _Last);
如果是刪除指定位置的元素時:
返回值是一個迭代器,指向刪除元素下一個元素;
如果是刪除某範圍內的元素時:返回值也表示一個迭代器,指向最後一個刪除元素的下一個元素;
在本題中,當 *itor==300成立時,刪除第一個值為300的元素,同時itor指向下一個元素(即是第二個值為300的元素),
在for(;;itor++)執行itor,itor指向第三個值為300的元素,進入下一個循環
進入循環滿足*itor==300,重複上面的過程,執行完循環,itor執行值為500的元素。
所有整個過程中,只刪除了2個值為300的元素。
21 [單選題]
下面關於一個類的靜態成員描述中,不正確的是()
A 靜態成員變量可被該類的所有方法訪問
B 該類的靜態方法只能訪問該類的靜態成員函數
C該類的靜態數據成員變量的值不可修改
D靜態成員無多態特性
參考答案:C
解析:
類的靜態成員屬於整個類 而不是某個對象,可以被類的所有方法訪問,子類當然可以父類靜態成員;
靜態方法屬於整個類,在對象創建之前就已經分配空間,類的非靜態成員要在對象創建後才有內存,所有靜態方法只能訪問靜態成員,不能訪問非靜態成員;
靜態成員可以被任一對象修改,修改後的值可以被所有對象共享。
22 [單選題]
給定的一個長度為N的字符串str,查找長度為P(P<N)的字符串在str中的出現次數.下面的說法正確的是()
A不存在比最壞時間複雜度O(NP)好的算法
B不存在比最壞時間複雜度O(N^2)好的算法
C不存在比最壞時間複雜度O(P^2)好的算法
D存在最壞時間複雜度為O(N+P)的算法
E存在最壞時間複雜度為O(log(N+P))的算法
F以上都不對
參考答案:D
解析:
樸素匹配算法 時間複雜度O((N-P+1)*P)
KMP匹配算法 時間複雜度為O(N+P)
23[單選題]
某體校選擇校服,每套校服都包括短袖運動衫,長袖運動衫,厚外套,運動長褲和運動短褲組成.每種運動服有3個備選方案.老師請了部分學生來挑選自己喜歡的校服.結果發現任意3個學生都至少在一種運動服上選擇互不相同,那麼老師最多邀請了()名學生參加挑選.
A 7
B 8
C 9
D 10
E 11
F 12
參考答案:B
解析:
每套校服都包括短袖運動衫,長袖運動衫,厚外套,運動長褲和運動短褲組成.“每種運動服”有個備選方案。說明校服一共有2^5=32種選擇方案。
任意3個學生都至少在一種運動服上選擇互不相同,假設有老師邀請了n個學生參加挑選,說明Cn 2 <32<Cn 3,得出n=8。
24 [單選題]
有4副相同的牌,每副牌有4張不同的牌.先從這16張牌中,隨機選4張出來.然後,在這4張牌中隨機選擇一張牌,然後把抽出的一張放回3張中,再隨機選擇一張牌.與上次選出的牌一樣的概率是()
A 1/4
B 1/3
C 2/5
D 1/2
E 2/3
F 3/4
參考答案:C
解析: 直接看第二次抽樣即可,與第一次抽的是同一張牌的概率是1/4,不同張的概率是3/4,同一張的話肯定是一樣,不同張的時候如果抽中一樣的牌的概率是3/15,所以答案是1/4+3/4 * 3/15 = 2/5