部分真题整理5
1、 java關(guān)于異常處理機(jī)制的敘述哪些正確(BC)
catch部分捕捉到異常情況時,才會執(zhí)行finally部分
當(dāng)try區(qū)段的程序發(fā)生異常時,才會執(zhí)行catch區(qū)段的程序
在try區(qū)段不論程序是否發(fā)生錯誤及捕獲到異常錯誤,都會執(zhí)行finally部分
以上都是
解析:
1.try和catch語句
●將要處理的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表。如果生成都異常與catch中提到的相匹配,那么catch條件中的塊語句就被執(zhí)行。try塊后可能有許多catch塊,每個都處理不同的異常。每個catch中的參數(shù)都是Exception的子類。
2.finally語句
●finally語句定義一個總是執(zhí)行的代碼,而不考慮異常是否被捕獲。
3.throw引起一個異常
●調(diào)用申明拋出異常
●throw語句強(qiáng)制拋出異常
2、下面哪一個選項(xiàng)是應(yīng)用層的協(xié)議(B)
TCP
FTP
UDP
ARP
解析:
看下面圖就一切了然了。
最下面的一層是網(wǎng)絡(luò)層,包括IP,ICMP,ARP等等。
第二層是傳輸層,包括TCP,UDP
第三層是應(yīng)用層,包括BGP,FTP,TELNET等等(MTME是通用因特網(wǎng)郵件擴(kuò)充,是在電子郵件協(xié)議SMTP的基礎(chǔ)上提出的。也是應(yīng)用層協(xié)議)。
3、瀏覽器和服務(wù)器在基于https進(jìn)行請求鏈接到數(shù)據(jù)傳輸過程中,用到了如下哪些技術(shù):(ABCD)
非對稱加密技術(shù)
對稱加密技術(shù)
散列(哈希)算法
數(shù)字證書
解析:
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議,更是一件經(jīng)過藝術(shù)家精心設(shè)計(jì)的藝術(shù)品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:
1.瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。
2.網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。
3.獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a) 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機(jī)數(shù)的密碼,并用證書中提供的公鑰加密。
c) 使用約定好的HASH計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
4.網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來的握手消息,并驗(yàn)證HASH是否與瀏覽器發(fā)來的一致。
b) 使用密碼加密一段握手消息,發(fā)送給瀏覽器。
5.瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
轉(zhuǎn)自: http://www.guokr.com/post/114121/
4、爸爸去哪兒中的3對父子站成一排,各自父子之間不能相鄰,比如石頭不能和郭濤挨著,以此類推,共有幾種站法?(C)
120
48
240
144
解析:
假設(shè)三對父子分別是Aa、Bb、Dd;
第一個位置有6種選擇,假設(shè)為A;
第二個位置有4種選擇(因?yàn)椴荒転閍),假設(shè)為B;
第三個位置需要分類討論一下,如果為a,則可以確定后面三位只有兩種選擇了,如果不為a,第三個位置有兩種選擇(D和d),假設(shè)為D,進(jìn)而再確定后面三個位置的選擇數(shù)。
那么結(jié)果是:6*4*(2+2*4)=240。
5、請找出下面程序中有哪些錯誤:(C)
int main() { int i=10; int j=1; const int *p1;//(1) int const *p2=&i; //(2) p2=&j;//(3) int *const p3=&i;//(4) *p3=20;//(5) *p2=30;//(6) p3=&j;//(7) return 0; }1,2,3,4,5,6,7
1,3,5,6
6,7
3,5
解析:
const在前,內(nèi)容不能變;
const在后,指針不能變;
const* ,指針指向?yàn)槌A?#xff1b;
*const ,指針本身為常量。
constint*p1表示p1的內(nèi)容為常量不可變
intconst*p2表示p2的內(nèi)容為常量不可變
int*constp3表示p3指針本身為常量不可變
其中(6)改變了p2的內(nèi)容(7)改變了p3的指針,所以錯誤
6、 設(shè)k1,k2是矩陣A的兩個不同的特征值,a與b是A的分別屬于k1,k2的特征向量,則由a與b是:(B)
線性相關(guān)
線性無關(guān)
對應(yīng)分量成比例
可能有零向量
解析:
不同特征值得特征向量不是正交嗎,既然正交當(dāng)然是線性無關(guān)的。
7、有如下C++代碼:
struct A{ void foo(){printf("foo");} virtual void bar(){printf("bar");} A(){bar();} }; struct B:A{ void foo(){printf("b_foo");} void bar(){printf("b_bar");} };那么
1
2
3 A *p=new B;
p->foo();
p->bar();
輸出為: (A)
barfoob_bar
foobarb_bar
barfoob_foo
foobarb_fpp
解析:
A *p=newB;// A類指針指向一個實(shí)例化對象B, B類繼承A類,先調(diào)用父類的無參構(gòu)造函數(shù),bar()輸出bar,B類沒有自己顯示定義的構(gòu)造函數(shù)。
p->foo();//執(zhí)行B類里的foo()函數(shù),因?yàn)閒oo不是虛函數(shù),所以直接調(diào)用父類的foo函數(shù),輸出foo
p->bar();//執(zhí)行B類的bar()函數(shù), 該函數(shù)為虛函數(shù),調(diào)用子類的實(shí)現(xiàn),輸出b_bar
8、哪些設(shè)計(jì)模式是降低資源使用率:(BC)
prototype
singleton
flyweight
abstract factory
解析:
首先單例模式肯定降低了資源使用率,保證該類的實(shí)例永遠(yuǎn)只有一個!
原型模式適用于在初始化信息不發(fā)生變換的情況,克隆的方法比較適合,主要的目的是避免重新初始化對象,如果后面需要對新對象進(jìn)行,還需要區(qū)分深拷貝和淺拷貝。無論是深拷貝還是淺拷貝只是復(fù)制了資源,并沒有降低資源使用率。
享元模式(Flyweight): 基于共享技術(shù)用于把一些共同的信息(或模塊)抽象出來,避免了大量相似類的開銷,也降低了資源的使用率。
如Java和C++ 初始化一個string類的信息,以C++為例: string s ="hello"; string p = "hello"。(這個在C++中有問題,容易混淆,特此說明,也有考察C++中string實(shí)現(xiàn)的問題。建議用C來描述 char *s = "hello"和char *p = "hello",s和p指向同一個地址),他們其實(shí)是一個相同的實(shí)例,字符串對象在內(nèi)存中的共享
BC吧 單例和享元
降低資源使用率 應(yīng)該是強(qiáng)調(diào)代碼的復(fù)用
A是原型模式,每個類都要有一個克隆方法
D抽象工廠就是換了個地方
9、 n個頂點(diǎn),m條邊的全連通圖,至少去掉____邊才能構(gòu)成一棵樹?(C)
n-1
m-1
m-n+1
m-n-1
解析:
Google面試題,n個頂點(diǎn)的樹一定有n-1條邊(證明可以看任何一本圖論書),所以需要去掉m-(n-1)=m-n+1條邊
10、以下代碼是否完全正確,執(zhí)行可能得到的結(jié)果是____。(C)
class A{ int i; }; class B{ A *p; public: B(){p=new A;} ~B(){delete p;} }; void sayHello(B b){ } int main(){ B b; sayHello(b); }程序正常運(yùn)行
程序編譯錯誤
程序崩潰
程序死循環(huán)
解析:
默認(rèn)的拷貝構(gòu)造函數(shù)是淺拷貝,直接把指針的值復(fù)制了一份。
調(diào)用sayHello,離開作用域,調(diào)用析構(gòu)函數(shù)delete了一次。main函數(shù)中,又delete了一次。因此程序崩潰。
11、 在C++面向?qū)ο缶幊陶Z言中,以下闡述不正確的是:(AD)
接口中可以用虛方法
一個類可以實(shí)現(xiàn)多個接口
接口不能被實(shí)例化
接口中可以包含已經(jīng)實(shí)現(xiàn)的方法
解析:
這道題正確答案AD,首先所謂的接口是指只包含純虛函數(shù)的抽象類,和普通的抽象類含不一樣。所以A不對,必須是純虛函數(shù)。然后B是正確的沒有問題。然后是C,剛才說接口是特殊的抽象類,抽象類的唯一左右就是創(chuàng)建派生類,不能定義抽象類的對象,所以C是正確的。對于D,接口即只包含純虛函數(shù)的抽象類,所以D是不對的。
12、下面關(guān)于HTTP協(xié)議的說法正確的是:(AC)
HTTP是基于TCP協(xié)議之上的應(yīng)用層協(xié)議
HTTP是一個普通用在瀏覽器和web服務(wù)器之間進(jìn)行數(shù)據(jù)交換的流式二進(jìn)制協(xié)議
HTTP協(xié)議的ETAG響應(yīng)頭主要用于信息的過期驗(yàn)證
HTTP1.0中的cache-control響應(yīng)頭主要用于控制信息在瀏覽器的緩存
解析:
HTTP是文本協(xié)議,不是二進(jìn)制協(xié)議,B是錯的;cache-control是在HTTP1.1中才有的,D是錯的。答案是AC
13、關(guān)于多線程和多進(jìn)程編程,下面描述正確的是(ACD):
多進(jìn)程里,子進(jìn)程可獲得父進(jìn)程的所有堆和棧的數(shù)據(jù);而線程會與同進(jìn)程的其他線程共享數(shù)據(jù),擁有自己的棧空間
線程因?yàn)橛凶约旱莫?dú)立棧空間且共享數(shù)據(jù),所有執(zhí)行的開銷相對較大,同時不利于資源管理和保護(hù)
線程的通信速度更快,切換更快,因?yàn)樗麄冊谕坏刂房臻g內(nèi)
線程使用公共變量/內(nèi)存時需要使用同步機(jī)制,因?yàn)樗麄冊谕坏刂房臻g內(nèi)
因多線程里,每個子進(jìn)程有自己的地址空間,因此相互之間通信時,線程不如進(jìn)程靈活和方便
解析:
線程和進(jìn)程的區(qū)別聯(lián)系:
1,進(jìn)程:子進(jìn)程是父進(jìn)程的復(fù)制品。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。
2,線程:相對與進(jìn)程而言,線程是一個更加接近與執(zhí)行體的概念,它可以與同進(jìn)程的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。
兩者都可以提高程序的并發(fā)度,提高程序運(yùn)行效率和響應(yīng)時間。
線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源管理和保護(hù);而進(jìn)程正相反。同時,線程適合于在SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。
根本區(qū)別就一點(diǎn):用多進(jìn)程每個進(jìn)程有自己的地址空間(address space),線程則共享地址空間。所有其它區(qū)別都是由此而來的:
1、速度:線程產(chǎn)生的速度快,線程間的通訊快、切換快等,因?yàn)樗麄冊谕粋€地址空間內(nèi)。
2、資源利用率:線程的資源利用率比較好也是因?yàn)樗麄冊谕粋€地址空間內(nèi)。
3、同步問題:線程使用公共變量/內(nèi)存時需要使用同步機(jī)制還是因?yàn)樗麄冊谕粋€地址空間內(nèi)
14、已知n階矩陣A的行列式滿足|A|=1,求|A^(-1)|(A^(-1)表示A的逆矩陣)=?(C)
正無窮
0
1
-1
解析:
|A|等于他的|逆矩陣|的倒數(shù)還是1
15、已知一對夫婦有兩個孩子,如果知道有一個是男孩,那么兩個都是男孩的概率?(B)
0.25
0.33
0.50
0.40
解析:
一對夫婦有兩個孩子,有大有小,孩子可能性有 A男B女、A女B男、A男B男、A女B女
已知其中有一個男孩,所以只有 A男B女、A女B男、A男B男 三種情況
兩個都是男的概率1/3
若改為第一個小孩是男的,則只有 A男B女、A男B男
兩個都是男的概率1/2
A:都是男孩
B:一個男孩
P(A | B) = P(B | A)*P(A) / P (B)
= 1* (1/4) / (3/4)
=1/3
16、人工批量種植盆景虎皮蘭,已知它們植株高度平均70cm,標(biāo)準(zhǔn)差5cm。現(xiàn)在從中隨機(jī)輸出100盆景到市場銷售,則下面說法錯誤的是(C):
估計(jì)100盆中至少有75盆高度在60到80cm之間
有較高把握估測這100盆的平均高度在69到72cm之間
估計(jì)100盤中至少有70盆高度在65到75cm之間
解析:
正態(tài)分布曲線性質(zhì)中有 :P(μ-σ<X≤μ+σ)=68.3%P(μ-2σ<X≤μ+2σ)=95.4%P(μ-3σ<X≤μ+3σ)=99.7%;依照題意,落在 [65,75]之間 平均有 有68盆,落在[60,80]之間 平均 有95盆,
17、給定初始點(diǎn)x0=(1,1),用最速下降法求函數(shù)f(x)=4*x1+6*x2-2*x1^2-2*x1*x2-2*x2^2的極大值,則迭代一次后x1=?(B)
(-1/2,1)
(1/2,1)
(-1,1)
(2,1)
解析:
對x1求偏導(dǎo) 4-4x1-2x2 代入(1,1)結(jié)果為-2
對x2求偏導(dǎo) 6-2x1-4x2 代入(1,1)結(jié)果為0
所以x1為 【1+2a,1】
代入原來的方程 4(1+2a)+6-2(1+2a)^2-2(1+2a)-2=4-8a^2-4a
求導(dǎo) -16a-4=0 a=-1/4;
迭代一次之后x1為(1-1/2,1)=(1/2,1);
18、一個盒子裝有6只乒乓球,其中4只是新球(即:未使用過的球)。第一次比賽時隨機(jī)從盒子中取出2只乒乓球,使用后放回盒子。第二次比賽時又隨機(jī)地從盒子中取出2只乒乓球。求:第二次取出的球全是新球的概率(B)
13%
16%
11%
5%
解析:
分類別判斷:第一次全是新球,6/15,此時還有兩個新球,第二次全是新球的概率為1/15, 6/15*1/15
第一次一個新球,8/15,此時還有三個新球,第二次全是新球的概率為3/15, 8/15*3/15
第一次沒新球,1/15,此時還有四個新球,第二次全是新球的概率為6/15, 1/15*6/15
所以結(jié)果是加起來,36/225 = 16%
C(2,2)*C(4,2)=6
C(2,1)*C(4,1)*C(3,2)=24
C(4,2)=6
總共C(6,2)*C(6,2)=15*15
result=36/(15*15)=0.16
19、在相同樣本量下,重復(fù)抽樣與不重復(fù)抽樣的抽樣平均誤差大小關(guān)系是(A)
重復(fù)抽樣誤差大
不重復(fù)抽樣誤差大
二者相同
不確定
解析:
20、u檢驗(yàn)的應(yīng)用條件是(A)
樣本例數(shù)n較大或樣本例數(shù)數(shù)量雖小但總體標(biāo)準(zhǔn)差已知
兩樣本來自得總體符合正態(tài)分布
兩樣本來自得總體符合正態(tài)分布,且兩樣本來子的總體方差齊性
兩樣本方差相等
解析:
t檢驗(yàn),主要運(yùn)用于樣本含量較少(一般n<30),總體標(biāo)準(zhǔn)差σ未知的正態(tài)分布資料。
適用條件:
(1) 已知一個總體均數(shù);
(2) 可得到一個樣本均數(shù)及該樣本標(biāo)準(zhǔn)差;
(3) 樣本來自正態(tài)或近似正態(tài)總體。
U檢驗(yàn)應(yīng)用條件和t檢驗(yàn)應(yīng)用條件基本一致, 只是大樣本時用u檢驗(yàn) ,小樣本時用t檢驗(yàn),t檢驗(yàn)可以代替U檢驗(yàn)。
21、客戶端C和服務(wù)器S之間建立了一個TCP連接,TCP最大段長度為1KB,客戶端C當(dāng)前的擁塞窗口是16KB,向服務(wù)器S連續(xù)發(fā)送2個最大段之后,成功收到服務(wù)器S發(fā)送的第一段的確認(rèn)段,確認(rèn)段中通告的接受窗口大小是4KB,那么此時客戶端C還可以向服務(wù)器S發(fā)送的最大字節(jié)數(shù)是:(A)
3KB
4KB
15KB
16KB
22、假設(shè)某商品需求函數(shù)為y1=B0+B1x1+u, 為了考慮包裝外觀因素(黑,藍(lán),白,金四種不同的顏色),引入4個虛擬變量形式形成截距變動模型,則模型的參數(shù)估計(jì)量(D)
是有偏估計(jì)量
是非有效估計(jì)量
是非一致估計(jì)量
無法估計(jì)
解析:
當(dāng)定性變量含有m個類別時,模型不能引入m個虛擬變量。最多只能引入m-1個虛擬變量,否則當(dāng)模型中存在截距項(xiàng)時就會產(chǎn)生完全多重共線性,無法估計(jì)回歸參數(shù)。商品包裝外觀因素有4種顏色,所以這是一個含有4個類別的定性變量,應(yīng)該向模型引入3個虛擬變量,如果引入4個,則無法估計(jì)回歸參數(shù)。
23、對文件名為Test.java的java代碼描述正確的是(C)
class Person { String name = "No name"; public Person(String nm) { name = nm; } } class Employee extends Person { String empID = "0000"; public Employee(String id) { empID = id; } } public class Test { public static void main(String args[]) { Employee e = new Employee("123"); System.out.println(e.empID); } }輸出:0000
輸出:123
編譯報錯
輸出:No name
解析:
Java中子類默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù),此時父類已經(jīng)定義了自己的構(gòu)造函數(shù),這時要顯示的調(diào)用父類的構(gòu)造函數(shù)publicEmployee(String id) {
super(id);
empID = id;
}
24、數(shù)據(jù)庫設(shè)計(jì)里,視圖(View)可以使得我們?yōu)橐粋€或多個數(shù)據(jù)表定義一個特殊的表現(xiàn)形式,視圖在行為上與數(shù)據(jù)表沒啥特別區(qū)別,可以使用基本的select,insert,update等命令修改數(shù)據(jù),但對于update操作,也有一些限制,下面那些是受限的原因(AB)
初始View定義的Select語句里如果包含了GROUP BY,DISTINCT,LIMIT或HAVING等命令時
如果視圖里數(shù)據(jù)來自多張字表時
如果視圖里缺少主鍵索引,唯一索引,外鍵約束條件鎖涉及的全部數(shù)據(jù)列時
當(dāng)Creat View之后又使用Replace View對已存在視圖做了更名操作后
解析:
視圖包含下列結(jié)構(gòu)是不可以更新的
1:集合運(yùn)算符 union,union all, intersect,minus
2:distinct關(guān)鍵字
3:group by,order by,connect by,或者start with
4:子查詢
5:分組函數(shù)
6:需要更新的列不是視圖定義的
7:具有連接查詢(可以更新鍵值保存表的數(shù)據(jù))
8:違反基表的約束條件;連接視圖是指基于多表連接查詢創(chuàng)建的視圖(一般不容易修改,但通用instead of觸發(fā)器可以實(shí)現(xiàn)修改的功能)
25、我們常說的mvc框架是指的什么的?(D)
模塊(module)-視圖(view)-組件(component)
模型(model)-視圖(view)-組件(component)
模塊(module)-視圖(view)-控制器(controller)
模型(model)-視圖(view)-控制器(controller)
26、有一個如下的結(jié)構(gòu)體:
struct A{ long a1; short a2; int a3; int *a4; };請問在64位編譯器下用sizeof(struct A)計(jì)算出的大小是多少?(A)
24
28
16
18
解析:
Win64下:long 8字節(jié)、short 2字節(jié)、int 4字節(jié)、int* 8字節(jié),C++中內(nèi)存對齊,按最大長度對齊:8+(2+4+2(補(bǔ)齊2字節(jié)))+8 = 24字節(jié)
27、以下不屬于tcp連接斷開的狀態(tài)是?(C)
TIME_WAIT
FIN_WAIT_1
SYNC_SENT
FIN_WAIT_2
解析:
當(dāng)某個連接的一端處于TIME_WAIT狀態(tài)時,該連接將不能再被使用。fin_wait1狀態(tài)是在server端主動要求關(guān)閉tcp連接,并且主動發(fā)送fin以后,等待client端回復(fù)ack時候的狀態(tài)。Server端強(qiáng)制斷開Socket時向客戶端發(fā)送了FIN請求,客戶端已經(jīng)沒有能力繼續(xù)回復(fù)ACK,造成了服務(wù)器端大量的端口處在FIN_WAIT_2狀態(tài),
28、下面關(guān)于ICMP協(xié)議的描述中,正確的是(C)
ICMP協(xié)議根據(jù)MAC地址查找對應(yīng)的IP地址
ICMP協(xié)議把公網(wǎng)的IP地址轉(zhuǎn)換為私網(wǎng)的IP地址
ICMP協(xié)議用于控制數(shù)據(jù)報傳送中的差錯情況
ICMP協(xié)議集中管理網(wǎng)絡(luò)中的IP地址分配
解析:
A 是RARP協(xié)議完成的
B 是NAT協(xié)議完成的
D 是DHCP協(xié)議完成的
ICMP是(Internet Control Message Protocol)Internet控制 報文 協(xié)議。它是 TCP/IP協(xié)議族 的一個子協(xié)議,用于在IP 主機(jī)、 路由 器之間傳遞控制消息。控制消息是指 網(wǎng)絡(luò)通 不通、 主機(jī) 是否可達(dá)、 路由 是否可用等網(wǎng)絡(luò)本身的消息
在IPv4協(xié)議中最常用的ICMP消息類型有以下幾種:
? 回顯應(yīng)答(類型0)和回顯請求(類型8):這是Ping程序發(fā)送的信息。
?目標(biāo)不可達(dá)(類型3)
?源抑制(類型4):這是一種用于通知發(fā)送者路由器或者主機(jī)出現(xiàn)阻塞現(xiàn)象的ICMP消息,發(fā)送者需要降低發(fā)送速度。
?重定向(類型5):這個消息用來向可以訪問兩臺路由器的主機(jī)說“請使用另一臺路由器”。
?路由器信息應(yīng)答(類型9)和路由器信息請求(類型10)
?超時(類型11):這個消息有兩種用途。第一,當(dāng)超過IP生存期時向發(fā)送系統(tǒng)發(fā)出錯誤信息。第二,如果分段的IP數(shù)據(jù)報沒有在某種時限內(nèi)重新組合,這個消息將通知發(fā)送系統(tǒng)。
29、22.在一個單CPU的處理機(jī)中,有P1,P3,P5三個作業(yè),有兩個IO設(shè)備IO1,IO2,并且能夠?qū)崿F(xiàn)搶先式多任務(wù)并行工作的多道程序環(huán)境中,投入運(yùn)行優(yōu)先級由高到低P5,P1,P3三個作業(yè),他們使用設(shè)備的先后順序和占用設(shè)備的時間分別為:P1:IO2(10ms) CPU(10ms) IO1(30ms)CPU(10ms)P3:IO1(30ms) CPU(10ms) IO2(30ms)CPU(10ms)P5:CPU(20ms) IO1(30ms) CPU(10ms) IO2(15ms)忽略其他的時間損耗,3個作業(yè)投入到全部完成的情況下。請問下列哪些選項(xiàng)為IO2的設(shè)備利用率?(E)
0.55
0.26
0.48
0.5
0.39
解析:
30、C語言里i=5,j=7,請問i|j等于多少?(D)
1
3
5
7
解析:
i=2^2+2^0
j= 2^2+ 2^1+ 2^0
---------------------------------
2^2+ 2^1+ 2^0=7
位操作符,轉(zhuǎn)化為二進(jìn)制再運(yùn)算
int a = i | j; //令a等于i和j按位或
int b = j & j;//令b等于i和j按位與
31、如下代碼,result變量的輸出結(jié)果是多少?(B)
#include<iostream> using namespace std; int i=1; class MyCls{ public: MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){ m_nThd=i; } void echo(){ cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl; } private: int m_nFir; int m_nSec; int m_nThd; int &m_nFor; }; int main() { MyCls oCls; oCls.echo(); return 0; }10
11
9
12
8
解析:
首先要明白變量初始化的順序是其聲明的順序,跟初始化列表中的順序無關(guān)。所以變量的初始化順序?yàn)閙_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);
i初始值為1,所以經(jīng)過初始化列表初始化以后m_nFir=1,m_nSec=2,m_nThd=3,m_nFor為m_nThd的一個引用。
并且此時i的值為4,構(gòu)造函數(shù)中執(zhí)行語句m_nThd=i后,m_nThd=4,m_nFor是它的一個引用,自然值也為4。
輸出結(jié)果m_nFir+m_nSec+m_nThd+m_nFor=1+2+4+4=11
32、某一速率為100M的交換機(jī)有20個端口,其一個端口上連著一臺筆記本電腦,此電腦從迅雷上下載一部1G的電影需要的時間可能是多久?(DE)
10S
20S
40S
100S
200S
解析:
交換機(jī)為獨(dú)占帶寬,即每個端口數(shù)據(jù)通過率為為最大100Mb/s。注意單位是Mb。因此最短時間為:
1GB/(100Mb/s)=1024MB/(12.5MB/s)=81.92s。
33、在linux編程中,以下哪個TCP的套接字選項(xiàng)與nagle算法的開啟和關(guān)閉有關(guān)?(B)
TCP_MAXSEG
TCP_NODELAY
TCP_SYNCNT
TCP_KEEPALIVE
解析:
當(dāng)有一個TCP數(shù)據(jù)段不足MSS,比如要發(fā)送700Byte數(shù)據(jù),MSS為1460Byte的情況。nagle算法會延遲這個數(shù)據(jù)段的發(fā)送,等待,直到有足夠的數(shù)據(jù)填充成一個完整數(shù)據(jù)段。也許有人會問,這有什么影響呢?沒有太大的影響,總體上來說,這種措施能節(jié)省不必要的資源消耗。但是要發(fā)送的總體數(shù)據(jù)很小時,這種措施就是拖后腿了。比如,用戶請求一個網(wǎng)頁,大約十幾KB的數(shù)據(jù),TCP先發(fā)送了八九個數(shù)據(jù)包,剩下幾百字節(jié)一直不發(fā)送,要等到另一個RTT才發(fā)送,這時候前面發(fā)送數(shù)據(jù)的ACK已經(jīng)返回了。這樣的用戶體驗(yàn)是很不好的。 所以,現(xiàn)在很多服務(wù)器都選擇主動關(guān)閉nagle算法,因?yàn)閹拤虼?#xff0c;資源消耗不是問題,速度反而是個大問題。
從上述描述中,禁用 nagle,實(shí)質(zhì)就是不在延遲 TCP_NODELAY
34、某二叉樹的先根遍歷序列和后根遍歷序列正好相反,則該二叉樹具有的特征是(A)
高度等于其結(jié)點(diǎn)數(shù)
任一結(jié)點(diǎn)無左孩子
任一結(jié)點(diǎn)無右孩子
空或只有一個結(jié)點(diǎn)
解析:
先序遍歷順序是:M-L-R;
后序遍歷順序是:L-R-M;
可以看到,只有中間的結(jié)點(diǎn)(M)順序變化了,左右結(jié)點(diǎn)相對位置是不變的。那可以推斷出,要滿足題意的話“二叉樹的先序序列與后序序列正好相反”,說明整個二叉樹左子樹或者右子樹有一個沒有(遍歷就成了,先:M-L ;后:L-M 或者 先:M-R ;后:R-M )也就是必然是一條鏈。
35、若系統(tǒng)中有五臺打印機(jī),有多個進(jìn)程均需要使用兩臺,規(guī)定每個進(jìn)程一次僅允許申請一臺,則在不發(fā)生死鎖的情況下至多允許______個進(jìn)程參與競爭(B)
5
4
3
2
解析:
哲學(xué)家就餐問題:當(dāng)5個進(jìn)程的時候如果都同時申請到了1臺,就發(fā)生死鎖了。如果是4個進(jìn)程,那必然有一個能申請到2臺。
36、在正方體上任取三個頂點(diǎn)連成三角形,則所得的三角形是直角非等腰三角形的概率為?(D)
1/14
4/7
2/7
3/7
解析:
共有8個頂點(diǎn),總有C(8,3);
任取一頂點(diǎn),過該頂點(diǎn)取其中一個面的對角線,僅有一條過該頂點(diǎn)并且垂直于該面的邊,每個頂點(diǎn)共有3個面,故共有3個三角形,總數(shù)為,8*3
如下圖A點(diǎn)
37、關(guān)于紅黑樹和AVL樹,以下哪種說法不正確?(D)
兩者都屬于自平衡二叉樹
兩者查找,插入,刪除的時間復(fù)雜度相同
包含n個內(nèi)部節(jié)點(diǎn)的紅黑樹的高度是O(log(n))
JDK的TreeMap是一個AVL的實(shí)現(xiàn)
解析:
關(guān)于紅黑樹和AVL樹,來自網(wǎng)絡(luò):
1 好處 及 用途
紅黑樹 并不追求“完全平衡 ”——它只要求部分地達(dá)到平衡要求,降低了對旋轉(zhuǎn)的要求,從而提高了性能。
紅黑樹能夠以 O(log2 n) 的時間復(fù)雜度進(jìn)行搜索、插入、刪除操作。此外,由于它的設(shè)計(jì),任何不平衡都會在三次旋轉(zhuǎn)之內(nèi)解決。當(dāng)然,還有一些更好的,但實(shí)現(xiàn)起來更復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 能夠做到一步旋轉(zhuǎn)之內(nèi)達(dá)到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復(fù)雜度和AVL相同,但統(tǒng)計(jì)性能比AVL樹更高。
當(dāng)然,紅黑樹并不適應(yīng)所有應(yīng)用樹的領(lǐng)域。如果數(shù)據(jù)基本上是靜態(tài)的,那么讓他們待在他們能夠插入,并且不影響平衡的地方會具有更好的性能。如果數(shù)據(jù)完全是靜態(tài)的,例如,做一個哈希表,性能可能會更好一些。
在實(shí)際的系統(tǒng)中,例如,需要使用動態(tài)規(guī)則的防火墻系統(tǒng),使用紅黑樹而不是散列表被實(shí)踐證明具有更好的伸縮性。
典型的用途是實(shí)現(xiàn)關(guān)聯(lián)數(shù)組
2 AVL樹是最先發(fā)明的自平衡二叉查 找樹。在AVL樹中任何節(jié)點(diǎn)的兩個兒子子樹的高度最大差別為一,所以它也被稱為高度平衡樹。查找、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉(zhuǎn)來重新平衡這個樹。AVL樹得名于它的發(fā)明者 G.M. Adelson-Velsky 和 E.M. Landis,他們在 1962 年的論文 "An algorithm for the organization of information" 中發(fā)表了它。
引入二叉樹的目的是為了提高二叉樹的搜索的效率,減少樹的平均搜索長度.為此,就必須每向二叉樹插入一個結(jié)點(diǎn)時調(diào)整樹的結(jié)構(gòu),使得二叉樹搜索保持平衡,從而可能降低樹的高度,減少的平均樹的搜索長度.
AVL樹的定義:
一棵AVL樹滿足以下的條件:
1>它的左子樹和右子樹都是AVL樹
2>左子樹和右子樹的高度差不能超過1
從條件1可能看出是個遞歸定義,如GNU一樣.
性質(zhì):
1>一棵n個結(jié)點(diǎn)的AVL樹的其高度保持在0(log2(n)),不會超過3/2log2(n+1)
2>一棵n個結(jié)點(diǎn)的AVL樹的平均搜索長度保持在0(log2(n)).
3>一棵n個結(jié)點(diǎn)的AVL樹刪除一個結(jié)點(diǎn)做平衡化旋轉(zhuǎn)所需要的時間為0(log2(n)).
從1這點(diǎn)來看 紅黑樹是犧牲了嚴(yán)格的高度平衡的優(yōu)越條件 為 代價紅黑樹能夠以O(shè)(log2 n)的時間復(fù)雜度進(jìn)行搜索、插入、刪除操作。此外,由于它的設(shè)計(jì),任何不平衡都會在三次旋轉(zhuǎn)之內(nèi)解決。當(dāng)然,還有一些更好的,但實(shí)現(xiàn)起來更復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 能夠做到一步旋轉(zhuǎn)之內(nèi)達(dá)到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復(fù)雜度和AVL相同,但統(tǒng)計(jì)性能比AVL樹更高.
38、客戶端C和服務(wù)器S之間建立一個TCP連接,該連接總是以1KB的最大段長發(fā)送TCP段,客戶端C有足夠的數(shù)據(jù)要發(fā)送。當(dāng)擁塞窗口為16KB的時候發(fā)生超時,如果接下來的4個RTT往返時間內(nèi)的TCP段的傳輸是成功的,那么當(dāng)?shù)?個RTT時間內(nèi)發(fā)送的所有TCP段都得到了ACK時,擁塞窗口大小是:(C)
7KB
8KB
9KB
16KB
解析:
16KB超時,閾值變?yōu)?KB,客戶端從1KB開始穿(執(zhí)行快開始算法)
1RTT 結(jié)束,1KB->2KB
2RTT 結(jié)束,2KB->4KB
3RTT 結(jié)束,4KB->8KB(到達(dá)閾值,執(zhí)行擁塞避免算法)
4RTT 結(jié)束,8KB->9KB
當(dāng)擁塞發(fā)生時(超時或收到重復(fù)確認(rèn)),慢啟動門限ssthresh被設(shè)置為當(dāng)前擁塞窗口cwnd大小(題目為16)的一半,即8。同時cwnd重置為1。新的數(shù)據(jù)被接收,則cwnd增加,規(guī)則為ssthresh之前,慢啟動,即cwnd指數(shù)增長;到達(dá)ssthresh之后,擁塞避免,即cwnd加1。
39、關(guān)于epoll和select的區(qū)別,哪些說法是正確的?(ABC)
epoll和select都是I/O多路復(fù)用的技術(shù),都可以實(shí)現(xiàn)同時監(jiān)聽多個I/O事件的狀態(tài)
epoll相比select效率更高,主要是基于其操作系統(tǒng)支持的I/O事件通知機(jī)制,而select是基于輪詢機(jī)制
epoll支持水平觸發(fā)和邊沿觸發(fā)兩種模式
select能并行支持I/O比較小,且無法修改
解析:
epoll,select,poll是io復(fù)用技術(shù)中常見的,具體可google解釋,a正確
select查詢速度較慢,因?yàn)樗看萎a(chǎn)生fd時候會有整體fdset的拷貝,而且每次有回送,select要查詢整個fdset
epoll查詢速度較快,因?yàn)樗麨槊總€fd都regist了一個單獨(dú)的回調(diào)函數(shù),b正確
c選項(xiàng)不是很清楚
select支持io較少,這個是根據(jù)操作系統(tǒng)支持的數(shù)量定的,不過記得那個數(shù)值可以用sysctl修改,所以覺得d不對。
40、TCP鏈接中主動斷開鏈接netstat觀察可能出現(xiàn)的狀態(tài)流轉(zhuǎn)是:(CD)
ESTABLISHED->CLOSE_WAIT->TIME_WAIT->CLOSED
ESTABLISHED->TIME_WAIT->CLOSE_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->TIME_WAIT->CLOSED
41、以下涉及到內(nèi)存管理的代碼段中,有錯誤的是:(ABD)
int *a=new int(12); //..... free(a); int *ip=static_cast<int*>(malloc(sizeof(int))); *ip=10; //..... delete ip; double *a=new double[1]; //.... delete a; int *ip=new int(12); for(int i=0;i<12;++i){ ip[i]=i; } delete []ip;解析:
new 和delete 配套使用 free和malloc配套使用 AB錯誤
D是因?yàn)樯暾埖氖且粋€元素,后面跟的12是初始化值,而不是數(shù)組,所以錯誤。
new和delete與free和malloc的差別是前面2個會分別調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)
42、下面哪些特性可能導(dǎo)致代碼體積膨脹:(ABC)
宏定義
模板
內(nèi)聯(lián)函數(shù)
遞歸
解析:
A宏定義會單純的替換,也就是如果宏定義替換的內(nèi)容會成倍復(fù)制,所以會導(dǎo)致代碼膨脹
B模板的調(diào)用,會根據(jù)調(diào)用的參數(shù),生成模板對應(yīng)的實(shí)際調(diào)用的函數(shù)體,如果調(diào)用的參數(shù)不同,會生成不同的代碼,所以會導(dǎo)致代碼膨脹
C內(nèi)聯(lián)函數(shù)會拷貝至調(diào)用的位置,如果調(diào)用多次回導(dǎo)致代碼膨脹
d選項(xiàng),遞歸不會導(dǎo)致體積膨脹,但是大量遞歸會導(dǎo)致棧區(qū)溢出
catch部分捕捉到異常情況時,才會執(zhí)行finally部分
當(dāng)try區(qū)段的程序發(fā)生異常時,才會執(zhí)行catch區(qū)段的程序
在try區(qū)段不論程序是否發(fā)生錯誤及捕獲到異常錯誤,都會執(zhí)行finally部分
以上都是
解析:
1.try和catch語句
●將要處理的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表。如果生成都異常與catch中提到的相匹配,那么catch條件中的塊語句就被執(zhí)行。try塊后可能有許多catch塊,每個都處理不同的異常。每個catch中的參數(shù)都是Exception的子類。
2.finally語句
●finally語句定義一個總是執(zhí)行的代碼,而不考慮異常是否被捕獲。
3.throw引起一個異常
●調(diào)用申明拋出異常
●throw語句強(qiáng)制拋出異常
2、下面哪一個選項(xiàng)是應(yīng)用層的協(xié)議(B)
TCP
FTP
UDP
ARP
解析:
看下面圖就一切了然了。
最下面的一層是網(wǎng)絡(luò)層,包括IP,ICMP,ARP等等。
第二層是傳輸層,包括TCP,UDP
第三層是應(yīng)用層,包括BGP,FTP,TELNET等等(MTME是通用因特網(wǎng)郵件擴(kuò)充,是在電子郵件協(xié)議SMTP的基礎(chǔ)上提出的。也是應(yīng)用層協(xié)議)。
3、瀏覽器和服務(wù)器在基于https進(jìn)行請求鏈接到數(shù)據(jù)傳輸過程中,用到了如下哪些技術(shù):(ABCD)
非對稱加密技術(shù)
對稱加密技術(shù)
散列(哈希)算法
數(shù)字證書
解析:
HTTPS在傳輸數(shù)據(jù)之前需要客戶端(瀏覽器)與服務(wù)端(網(wǎng)站)之間進(jìn)行一次握手,在握手過程中將確立雙方加密傳輸數(shù)據(jù)的密碼信息。TLS/SSL協(xié)議不僅僅是一套加密傳輸?shù)膮f(xié)議,更是一件經(jīng)過藝術(shù)家精心設(shè)計(jì)的藝術(shù)品,TLS/SSL中使用了非對稱加密,對稱加密以及HASH算法。握手過程的簡單描述如下:
1.瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。
2.網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息。
3.獲得網(wǎng)站證書之后瀏覽器要做以下工作:
a) 驗(yàn)證證書的合法性(頒發(fā)證書的機(jī)構(gòu)是否合法,證書中包含的網(wǎng)站地址是否與正在訪問的地址一致等),如果證書受信任,則瀏覽器欄里面會顯示一個小鎖頭,否則會給出證書不受信的提示。
b) 如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機(jī)數(shù)的密碼,并用證書中提供的公鑰加密。
c) 使用約定好的HASH計(jì)算握手消息,并使用生成的隨機(jī)數(shù)對消息進(jìn)行加密,最后將之前生成的所有信息發(fā)送給網(wǎng)站。
4.網(wǎng)站接收瀏覽器發(fā)來的數(shù)據(jù)之后要做以下的操作:
a) 使用自己的私鑰將信息解密取出密碼,使用密碼解密瀏覽器發(fā)來的握手消息,并驗(yàn)證HASH是否與瀏覽器發(fā)來的一致。
b) 使用密碼加密一段握手消息,發(fā)送給瀏覽器。
5.瀏覽器解密并計(jì)算握手消息的HASH,如果與服務(wù)端發(fā)來的HASH一致,此時握手過程結(jié)束,之后所有的通信數(shù)據(jù)將由之前瀏覽器生成的隨機(jī)密碼并利用對稱加密算法進(jìn)行加密。
這里瀏覽器與網(wǎng)站互相發(fā)送加密的握手消息并驗(yàn)證,目的是為了保證雙方都獲得了一致的密碼,并且可以正常的加密解密數(shù)據(jù),為后續(xù)真正數(shù)據(jù)的傳輸做一次測試。另外,HTTPS一般使用的加密與HASH算法如下:
非對稱加密算法:RSA,DSA/DSS
對稱加密算法:AES,RC4,3DES
HASH算法:MD5,SHA1,SHA256
轉(zhuǎn)自: http://www.guokr.com/post/114121/
4、爸爸去哪兒中的3對父子站成一排,各自父子之間不能相鄰,比如石頭不能和郭濤挨著,以此類推,共有幾種站法?(C)
120
48
240
144
解析:
假設(shè)三對父子分別是Aa、Bb、Dd;
第一個位置有6種選擇,假設(shè)為A;
第二個位置有4種選擇(因?yàn)椴荒転閍),假設(shè)為B;
第三個位置需要分類討論一下,如果為a,則可以確定后面三位只有兩種選擇了,如果不為a,第三個位置有兩種選擇(D和d),假設(shè)為D,進(jìn)而再確定后面三個位置的選擇數(shù)。
那么結(jié)果是:6*4*(2+2*4)=240。
5、請找出下面程序中有哪些錯誤:(C)
int main() { int i=10; int j=1; const int *p1;//(1) int const *p2=&i; //(2) p2=&j;//(3) int *const p3=&i;//(4) *p3=20;//(5) *p2=30;//(6) p3=&j;//(7) return 0; }1,2,3,4,5,6,7
1,3,5,6
6,7
3,5
解析:
const在前,內(nèi)容不能變;
const在后,指針不能變;
const* ,指針指向?yàn)槌A?#xff1b;
*const ,指針本身為常量。
constint*p1表示p1的內(nèi)容為常量不可變
intconst*p2表示p2的內(nèi)容為常量不可變
int*constp3表示p3指針本身為常量不可變
其中(6)改變了p2的內(nèi)容(7)改變了p3的指針,所以錯誤
6、 設(shè)k1,k2是矩陣A的兩個不同的特征值,a與b是A的分別屬于k1,k2的特征向量,則由a與b是:(B)
線性相關(guān)
線性無關(guān)
對應(yīng)分量成比例
可能有零向量
解析:
不同特征值得特征向量不是正交嗎,既然正交當(dāng)然是線性無關(guān)的。
7、有如下C++代碼:
struct A{ void foo(){printf("foo");} virtual void bar(){printf("bar");} A(){bar();} }; struct B:A{ void foo(){printf("b_foo");} void bar(){printf("b_bar");} };那么
1
2
3 A *p=new B;
p->foo();
p->bar();
輸出為: (A)
barfoob_bar
foobarb_bar
barfoob_foo
foobarb_fpp
解析:
A *p=newB;// A類指針指向一個實(shí)例化對象B, B類繼承A類,先調(diào)用父類的無參構(gòu)造函數(shù),bar()輸出bar,B類沒有自己顯示定義的構(gòu)造函數(shù)。
p->foo();//執(zhí)行B類里的foo()函數(shù),因?yàn)閒oo不是虛函數(shù),所以直接調(diào)用父類的foo函數(shù),輸出foo
p->bar();//執(zhí)行B類的bar()函數(shù), 該函數(shù)為虛函數(shù),調(diào)用子類的實(shí)現(xiàn),輸出b_bar
8、哪些設(shè)計(jì)模式是降低資源使用率:(BC)
prototype
singleton
flyweight
abstract factory
解析:
首先單例模式肯定降低了資源使用率,保證該類的實(shí)例永遠(yuǎn)只有一個!
原型模式適用于在初始化信息不發(fā)生變換的情況,克隆的方法比較適合,主要的目的是避免重新初始化對象,如果后面需要對新對象進(jìn)行,還需要區(qū)分深拷貝和淺拷貝。無論是深拷貝還是淺拷貝只是復(fù)制了資源,并沒有降低資源使用率。
享元模式(Flyweight): 基于共享技術(shù)用于把一些共同的信息(或模塊)抽象出來,避免了大量相似類的開銷,也降低了資源的使用率。
如Java和C++ 初始化一個string類的信息,以C++為例: string s ="hello"; string p = "hello"。(這個在C++中有問題,容易混淆,特此說明,也有考察C++中string實(shí)現(xiàn)的問題。建議用C來描述 char *s = "hello"和char *p = "hello",s和p指向同一個地址),他們其實(shí)是一個相同的實(shí)例,字符串對象在內(nèi)存中的共享
BC吧 單例和享元
降低資源使用率 應(yīng)該是強(qiáng)調(diào)代碼的復(fù)用
A是原型模式,每個類都要有一個克隆方法
D抽象工廠就是換了個地方
9、 n個頂點(diǎn),m條邊的全連通圖,至少去掉____邊才能構(gòu)成一棵樹?(C)
n-1
m-1
m-n+1
m-n-1
解析:
Google面試題,n個頂點(diǎn)的樹一定有n-1條邊(證明可以看任何一本圖論書),所以需要去掉m-(n-1)=m-n+1條邊
10、以下代碼是否完全正確,執(zhí)行可能得到的結(jié)果是____。(C)
class A{ int i; }; class B{ A *p; public: B(){p=new A;} ~B(){delete p;} }; void sayHello(B b){ } int main(){ B b; sayHello(b); }程序正常運(yùn)行
程序編譯錯誤
程序崩潰
程序死循環(huán)
解析:
默認(rèn)的拷貝構(gòu)造函數(shù)是淺拷貝,直接把指針的值復(fù)制了一份。
調(diào)用sayHello,離開作用域,調(diào)用析構(gòu)函數(shù)delete了一次。main函數(shù)中,又delete了一次。因此程序崩潰。
11、 在C++面向?qū)ο缶幊陶Z言中,以下闡述不正確的是:(AD)
接口中可以用虛方法
一個類可以實(shí)現(xiàn)多個接口
接口不能被實(shí)例化
接口中可以包含已經(jīng)實(shí)現(xiàn)的方法
解析:
這道題正確答案AD,首先所謂的接口是指只包含純虛函數(shù)的抽象類,和普通的抽象類含不一樣。所以A不對,必須是純虛函數(shù)。然后B是正確的沒有問題。然后是C,剛才說接口是特殊的抽象類,抽象類的唯一左右就是創(chuàng)建派生類,不能定義抽象類的對象,所以C是正確的。對于D,接口即只包含純虛函數(shù)的抽象類,所以D是不對的。
12、下面關(guān)于HTTP協(xié)議的說法正確的是:(AC)
HTTP是基于TCP協(xié)議之上的應(yīng)用層協(xié)議
HTTP是一個普通用在瀏覽器和web服務(wù)器之間進(jìn)行數(shù)據(jù)交換的流式二進(jìn)制協(xié)議
HTTP協(xié)議的ETAG響應(yīng)頭主要用于信息的過期驗(yàn)證
HTTP1.0中的cache-control響應(yīng)頭主要用于控制信息在瀏覽器的緩存
解析:
HTTP是文本協(xié)議,不是二進(jìn)制協(xié)議,B是錯的;cache-control是在HTTP1.1中才有的,D是錯的。答案是AC
13、關(guān)于多線程和多進(jìn)程編程,下面描述正確的是(ACD):
多進(jìn)程里,子進(jìn)程可獲得父進(jìn)程的所有堆和棧的數(shù)據(jù);而線程會與同進(jìn)程的其他線程共享數(shù)據(jù),擁有自己的棧空間
線程因?yàn)橛凶约旱莫?dú)立棧空間且共享數(shù)據(jù),所有執(zhí)行的開銷相對較大,同時不利于資源管理和保護(hù)
線程的通信速度更快,切換更快,因?yàn)樗麄冊谕坏刂房臻g內(nèi)
線程使用公共變量/內(nèi)存時需要使用同步機(jī)制,因?yàn)樗麄冊谕坏刂房臻g內(nèi)
因多線程里,每個子進(jìn)程有自己的地址空間,因此相互之間通信時,線程不如進(jìn)程靈活和方便
解析:
線程和進(jìn)程的區(qū)別聯(lián)系:
1,進(jìn)程:子進(jìn)程是父進(jìn)程的復(fù)制品。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。
2,線程:相對與進(jìn)程而言,線程是一個更加接近與執(zhí)行體的概念,它可以與同進(jìn)程的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。
兩者都可以提高程序的并發(fā)度,提高程序運(yùn)行效率和響應(yīng)時間。
線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源管理和保護(hù);而進(jìn)程正相反。同時,線程適合于在SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。
根本區(qū)別就一點(diǎn):用多進(jìn)程每個進(jìn)程有自己的地址空間(address space),線程則共享地址空間。所有其它區(qū)別都是由此而來的:
1、速度:線程產(chǎn)生的速度快,線程間的通訊快、切換快等,因?yàn)樗麄冊谕粋€地址空間內(nèi)。
2、資源利用率:線程的資源利用率比較好也是因?yàn)樗麄冊谕粋€地址空間內(nèi)。
3、同步問題:線程使用公共變量/內(nèi)存時需要使用同步機(jī)制還是因?yàn)樗麄冊谕粋€地址空間內(nèi)
14、已知n階矩陣A的行列式滿足|A|=1,求|A^(-1)|(A^(-1)表示A的逆矩陣)=?(C)
正無窮
0
1
-1
解析:
|A|等于他的|逆矩陣|的倒數(shù)還是1
15、已知一對夫婦有兩個孩子,如果知道有一個是男孩,那么兩個都是男孩的概率?(B)
0.25
0.33
0.50
0.40
解析:
一對夫婦有兩個孩子,有大有小,孩子可能性有 A男B女、A女B男、A男B男、A女B女
已知其中有一個男孩,所以只有 A男B女、A女B男、A男B男 三種情況
兩個都是男的概率1/3
若改為第一個小孩是男的,則只有 A男B女、A男B男
兩個都是男的概率1/2
A:都是男孩
B:一個男孩
P(A | B) = P(B | A)*P(A) / P (B)
= 1* (1/4) / (3/4)
=1/3
16、人工批量種植盆景虎皮蘭,已知它們植株高度平均70cm,標(biāo)準(zhǔn)差5cm。現(xiàn)在從中隨機(jī)輸出100盆景到市場銷售,則下面說法錯誤的是(C):
估計(jì)100盆中至少有75盆高度在60到80cm之間
有較高把握估測這100盆的平均高度在69到72cm之間
估計(jì)100盤中至少有70盆高度在65到75cm之間
解析:
正態(tài)分布曲線性質(zhì)中有 :P(μ-σ<X≤μ+σ)=68.3%P(μ-2σ<X≤μ+2σ)=95.4%P(μ-3σ<X≤μ+3σ)=99.7%;依照題意,落在 [65,75]之間 平均有 有68盆,落在[60,80]之間 平均 有95盆,
17、給定初始點(diǎn)x0=(1,1),用最速下降法求函數(shù)f(x)=4*x1+6*x2-2*x1^2-2*x1*x2-2*x2^2的極大值,則迭代一次后x1=?(B)
(-1/2,1)
(1/2,1)
(-1,1)
(2,1)
解析:
對x1求偏導(dǎo) 4-4x1-2x2 代入(1,1)結(jié)果為-2
對x2求偏導(dǎo) 6-2x1-4x2 代入(1,1)結(jié)果為0
所以x1為 【1+2a,1】
代入原來的方程 4(1+2a)+6-2(1+2a)^2-2(1+2a)-2=4-8a^2-4a
求導(dǎo) -16a-4=0 a=-1/4;
迭代一次之后x1為(1-1/2,1)=(1/2,1);
18、一個盒子裝有6只乒乓球,其中4只是新球(即:未使用過的球)。第一次比賽時隨機(jī)從盒子中取出2只乒乓球,使用后放回盒子。第二次比賽時又隨機(jī)地從盒子中取出2只乒乓球。求:第二次取出的球全是新球的概率(B)
13%
16%
11%
5%
解析:
分類別判斷:第一次全是新球,6/15,此時還有兩個新球,第二次全是新球的概率為1/15, 6/15*1/15
第一次一個新球,8/15,此時還有三個新球,第二次全是新球的概率為3/15, 8/15*3/15
第一次沒新球,1/15,此時還有四個新球,第二次全是新球的概率為6/15, 1/15*6/15
所以結(jié)果是加起來,36/225 = 16%
C(2,2)*C(4,2)=6
C(2,1)*C(4,1)*C(3,2)=24
C(4,2)=6
總共C(6,2)*C(6,2)=15*15
result=36/(15*15)=0.16
19、在相同樣本量下,重復(fù)抽樣與不重復(fù)抽樣的抽樣平均誤差大小關(guān)系是(A)
重復(fù)抽樣誤差大
不重復(fù)抽樣誤差大
二者相同
不確定
解析:
20、u檢驗(yàn)的應(yīng)用條件是(A)
樣本例數(shù)n較大或樣本例數(shù)數(shù)量雖小但總體標(biāo)準(zhǔn)差已知
兩樣本來自得總體符合正態(tài)分布
兩樣本來自得總體符合正態(tài)分布,且兩樣本來子的總體方差齊性
兩樣本方差相等
解析:
t檢驗(yàn),主要運(yùn)用于樣本含量較少(一般n<30),總體標(biāo)準(zhǔn)差σ未知的正態(tài)分布資料。
適用條件:
(1) 已知一個總體均數(shù);
(2) 可得到一個樣本均數(shù)及該樣本標(biāo)準(zhǔn)差;
(3) 樣本來自正態(tài)或近似正態(tài)總體。
U檢驗(yàn)應(yīng)用條件和t檢驗(yàn)應(yīng)用條件基本一致, 只是大樣本時用u檢驗(yàn) ,小樣本時用t檢驗(yàn),t檢驗(yàn)可以代替U檢驗(yàn)。
21、客戶端C和服務(wù)器S之間建立了一個TCP連接,TCP最大段長度為1KB,客戶端C當(dāng)前的擁塞窗口是16KB,向服務(wù)器S連續(xù)發(fā)送2個最大段之后,成功收到服務(wù)器S發(fā)送的第一段的確認(rèn)段,確認(rèn)段中通告的接受窗口大小是4KB,那么此時客戶端C還可以向服務(wù)器S發(fā)送的最大字節(jié)數(shù)是:(A)
3KB
4KB
15KB
16KB
22、假設(shè)某商品需求函數(shù)為y1=B0+B1x1+u, 為了考慮包裝外觀因素(黑,藍(lán),白,金四種不同的顏色),引入4個虛擬變量形式形成截距變動模型,則模型的參數(shù)估計(jì)量(D)
是有偏估計(jì)量
是非有效估計(jì)量
是非一致估計(jì)量
無法估計(jì)
解析:
當(dāng)定性變量含有m個類別時,模型不能引入m個虛擬變量。最多只能引入m-1個虛擬變量,否則當(dāng)模型中存在截距項(xiàng)時就會產(chǎn)生完全多重共線性,無法估計(jì)回歸參數(shù)。商品包裝外觀因素有4種顏色,所以這是一個含有4個類別的定性變量,應(yīng)該向模型引入3個虛擬變量,如果引入4個,則無法估計(jì)回歸參數(shù)。
23、對文件名為Test.java的java代碼描述正確的是(C)
class Person { String name = "No name"; public Person(String nm) { name = nm; } } class Employee extends Person { String empID = "0000"; public Employee(String id) { empID = id; } } public class Test { public static void main(String args[]) { Employee e = new Employee("123"); System.out.println(e.empID); } }輸出:0000
輸出:123
編譯報錯
輸出:No name
解析:
Java中子類默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù),此時父類已經(jīng)定義了自己的構(gòu)造函數(shù),這時要顯示的調(diào)用父類的構(gòu)造函數(shù)publicEmployee(String id) {
super(id);
empID = id;
}
24、數(shù)據(jù)庫設(shè)計(jì)里,視圖(View)可以使得我們?yōu)橐粋€或多個數(shù)據(jù)表定義一個特殊的表現(xiàn)形式,視圖在行為上與數(shù)據(jù)表沒啥特別區(qū)別,可以使用基本的select,insert,update等命令修改數(shù)據(jù),但對于update操作,也有一些限制,下面那些是受限的原因(AB)
初始View定義的Select語句里如果包含了GROUP BY,DISTINCT,LIMIT或HAVING等命令時
如果視圖里數(shù)據(jù)來自多張字表時
如果視圖里缺少主鍵索引,唯一索引,外鍵約束條件鎖涉及的全部數(shù)據(jù)列時
當(dāng)Creat View之后又使用Replace View對已存在視圖做了更名操作后
解析:
視圖包含下列結(jié)構(gòu)是不可以更新的
1:集合運(yùn)算符 union,union all, intersect,minus
2:distinct關(guān)鍵字
3:group by,order by,connect by,或者start with
4:子查詢
5:分組函數(shù)
6:需要更新的列不是視圖定義的
7:具有連接查詢(可以更新鍵值保存表的數(shù)據(jù))
8:違反基表的約束條件;連接視圖是指基于多表連接查詢創(chuàng)建的視圖(一般不容易修改,但通用instead of觸發(fā)器可以實(shí)現(xiàn)修改的功能)
25、我們常說的mvc框架是指的什么的?(D)
模塊(module)-視圖(view)-組件(component)
模型(model)-視圖(view)-組件(component)
模塊(module)-視圖(view)-控制器(controller)
模型(model)-視圖(view)-控制器(controller)
26、有一個如下的結(jié)構(gòu)體:
struct A{ long a1; short a2; int a3; int *a4; };請問在64位編譯器下用sizeof(struct A)計(jì)算出的大小是多少?(A)
24
28
16
18
解析:
Win64下:long 8字節(jié)、short 2字節(jié)、int 4字節(jié)、int* 8字節(jié),C++中內(nèi)存對齊,按最大長度對齊:8+(2+4+2(補(bǔ)齊2字節(jié)))+8 = 24字節(jié)
27、以下不屬于tcp連接斷開的狀態(tài)是?(C)
TIME_WAIT
FIN_WAIT_1
SYNC_SENT
FIN_WAIT_2
解析:
當(dāng)某個連接的一端處于TIME_WAIT狀態(tài)時,該連接將不能再被使用。fin_wait1狀態(tài)是在server端主動要求關(guān)閉tcp連接,并且主動發(fā)送fin以后,等待client端回復(fù)ack時候的狀態(tài)。Server端強(qiáng)制斷開Socket時向客戶端發(fā)送了FIN請求,客戶端已經(jīng)沒有能力繼續(xù)回復(fù)ACK,造成了服務(wù)器端大量的端口處在FIN_WAIT_2狀態(tài),
28、下面關(guān)于ICMP協(xié)議的描述中,正確的是(C)
ICMP協(xié)議根據(jù)MAC地址查找對應(yīng)的IP地址
ICMP協(xié)議把公網(wǎng)的IP地址轉(zhuǎn)換為私網(wǎng)的IP地址
ICMP協(xié)議用于控制數(shù)據(jù)報傳送中的差錯情況
ICMP協(xié)議集中管理網(wǎng)絡(luò)中的IP地址分配
解析:
A 是RARP協(xié)議完成的
B 是NAT協(xié)議完成的
D 是DHCP協(xié)議完成的
ICMP是(Internet Control Message Protocol)Internet控制 報文 協(xié)議。它是 TCP/IP協(xié)議族 的一個子協(xié)議,用于在IP 主機(jī)、 路由 器之間傳遞控制消息。控制消息是指 網(wǎng)絡(luò)通 不通、 主機(jī) 是否可達(dá)、 路由 是否可用等網(wǎng)絡(luò)本身的消息
在IPv4協(xié)議中最常用的ICMP消息類型有以下幾種:
? 回顯應(yīng)答(類型0)和回顯請求(類型8):這是Ping程序發(fā)送的信息。
?目標(biāo)不可達(dá)(類型3)
?源抑制(類型4):這是一種用于通知發(fā)送者路由器或者主機(jī)出現(xiàn)阻塞現(xiàn)象的ICMP消息,發(fā)送者需要降低發(fā)送速度。
?重定向(類型5):這個消息用來向可以訪問兩臺路由器的主機(jī)說“請使用另一臺路由器”。
?路由器信息應(yīng)答(類型9)和路由器信息請求(類型10)
?超時(類型11):這個消息有兩種用途。第一,當(dāng)超過IP生存期時向發(fā)送系統(tǒng)發(fā)出錯誤信息。第二,如果分段的IP數(shù)據(jù)報沒有在某種時限內(nèi)重新組合,這個消息將通知發(fā)送系統(tǒng)。
29、22.在一個單CPU的處理機(jī)中,有P1,P3,P5三個作業(yè),有兩個IO設(shè)備IO1,IO2,并且能夠?qū)崿F(xiàn)搶先式多任務(wù)并行工作的多道程序環(huán)境中,投入運(yùn)行優(yōu)先級由高到低P5,P1,P3三個作業(yè),他們使用設(shè)備的先后順序和占用設(shè)備的時間分別為:P1:IO2(10ms) CPU(10ms) IO1(30ms)CPU(10ms)P3:IO1(30ms) CPU(10ms) IO2(30ms)CPU(10ms)P5:CPU(20ms) IO1(30ms) CPU(10ms) IO2(15ms)忽略其他的時間損耗,3個作業(yè)投入到全部完成的情況下。請問下列哪些選項(xiàng)為IO2的設(shè)備利用率?(E)
0.55
0.26
0.48
0.5
0.39
解析:
30、C語言里i=5,j=7,請問i|j等于多少?(D)
1
3
5
7
解析:
i=2^2+2^0
j= 2^2+ 2^1+ 2^0
---------------------------------
2^2+ 2^1+ 2^0=7
位操作符,轉(zhuǎn)化為二進(jìn)制再運(yùn)算
int a = i | j; //令a等于i和j按位或
int b = j & j;//令b等于i和j按位與
31、如下代碼,result變量的輸出結(jié)果是多少?(B)
#include<iostream> using namespace std; int i=1; class MyCls{ public: MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){ m_nThd=i; } void echo(){ cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl; } private: int m_nFir; int m_nSec; int m_nThd; int &m_nFor; }; int main() { MyCls oCls; oCls.echo(); return 0; }10
11
9
12
8
解析:
首先要明白變量初始化的順序是其聲明的順序,跟初始化列表中的順序無關(guān)。所以變量的初始化順序?yàn)閙_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);
i初始值為1,所以經(jīng)過初始化列表初始化以后m_nFir=1,m_nSec=2,m_nThd=3,m_nFor為m_nThd的一個引用。
并且此時i的值為4,構(gòu)造函數(shù)中執(zhí)行語句m_nThd=i后,m_nThd=4,m_nFor是它的一個引用,自然值也為4。
輸出結(jié)果m_nFir+m_nSec+m_nThd+m_nFor=1+2+4+4=11
32、某一速率為100M的交換機(jī)有20個端口,其一個端口上連著一臺筆記本電腦,此電腦從迅雷上下載一部1G的電影需要的時間可能是多久?(DE)
10S
20S
40S
100S
200S
解析:
交換機(jī)為獨(dú)占帶寬,即每個端口數(shù)據(jù)通過率為為最大100Mb/s。注意單位是Mb。因此最短時間為:
1GB/(100Mb/s)=1024MB/(12.5MB/s)=81.92s。
33、在linux編程中,以下哪個TCP的套接字選項(xiàng)與nagle算法的開啟和關(guān)閉有關(guān)?(B)
TCP_MAXSEG
TCP_NODELAY
TCP_SYNCNT
TCP_KEEPALIVE
解析:
當(dāng)有一個TCP數(shù)據(jù)段不足MSS,比如要發(fā)送700Byte數(shù)據(jù),MSS為1460Byte的情況。nagle算法會延遲這個數(shù)據(jù)段的發(fā)送,等待,直到有足夠的數(shù)據(jù)填充成一個完整數(shù)據(jù)段。也許有人會問,這有什么影響呢?沒有太大的影響,總體上來說,這種措施能節(jié)省不必要的資源消耗。但是要發(fā)送的總體數(shù)據(jù)很小時,這種措施就是拖后腿了。比如,用戶請求一個網(wǎng)頁,大約十幾KB的數(shù)據(jù),TCP先發(fā)送了八九個數(shù)據(jù)包,剩下幾百字節(jié)一直不發(fā)送,要等到另一個RTT才發(fā)送,這時候前面發(fā)送數(shù)據(jù)的ACK已經(jīng)返回了。這樣的用戶體驗(yàn)是很不好的。 所以,現(xiàn)在很多服務(wù)器都選擇主動關(guān)閉nagle算法,因?yàn)閹拤虼?#xff0c;資源消耗不是問題,速度反而是個大問題。
從上述描述中,禁用 nagle,實(shí)質(zhì)就是不在延遲 TCP_NODELAY
34、某二叉樹的先根遍歷序列和后根遍歷序列正好相反,則該二叉樹具有的特征是(A)
高度等于其結(jié)點(diǎn)數(shù)
任一結(jié)點(diǎn)無左孩子
任一結(jié)點(diǎn)無右孩子
空或只有一個結(jié)點(diǎn)
解析:
先序遍歷順序是:M-L-R;
后序遍歷順序是:L-R-M;
可以看到,只有中間的結(jié)點(diǎn)(M)順序變化了,左右結(jié)點(diǎn)相對位置是不變的。那可以推斷出,要滿足題意的話“二叉樹的先序序列與后序序列正好相反”,說明整個二叉樹左子樹或者右子樹有一個沒有(遍歷就成了,先:M-L ;后:L-M 或者 先:M-R ;后:R-M )也就是必然是一條鏈。
35、若系統(tǒng)中有五臺打印機(jī),有多個進(jìn)程均需要使用兩臺,規(guī)定每個進(jìn)程一次僅允許申請一臺,則在不發(fā)生死鎖的情況下至多允許______個進(jìn)程參與競爭(B)
5
4
3
2
解析:
哲學(xué)家就餐問題:當(dāng)5個進(jìn)程的時候如果都同時申請到了1臺,就發(fā)生死鎖了。如果是4個進(jìn)程,那必然有一個能申請到2臺。
36、在正方體上任取三個頂點(diǎn)連成三角形,則所得的三角形是直角非等腰三角形的概率為?(D)
1/14
4/7
2/7
3/7
解析:
共有8個頂點(diǎn),總有C(8,3);
任取一頂點(diǎn),過該頂點(diǎn)取其中一個面的對角線,僅有一條過該頂點(diǎn)并且垂直于該面的邊,每個頂點(diǎn)共有3個面,故共有3個三角形,總數(shù)為,8*3
如下圖A點(diǎn)
37、關(guān)于紅黑樹和AVL樹,以下哪種說法不正確?(D)
兩者都屬于自平衡二叉樹
兩者查找,插入,刪除的時間復(fù)雜度相同
包含n個內(nèi)部節(jié)點(diǎn)的紅黑樹的高度是O(log(n))
JDK的TreeMap是一個AVL的實(shí)現(xiàn)
解析:
關(guān)于紅黑樹和AVL樹,來自網(wǎng)絡(luò):
1 好處 及 用途
紅黑樹 并不追求“完全平衡 ”——它只要求部分地達(dá)到平衡要求,降低了對旋轉(zhuǎn)的要求,從而提高了性能。
紅黑樹能夠以 O(log2 n) 的時間復(fù)雜度進(jìn)行搜索、插入、刪除操作。此外,由于它的設(shè)計(jì),任何不平衡都會在三次旋轉(zhuǎn)之內(nèi)解決。當(dāng)然,還有一些更好的,但實(shí)現(xiàn)起來更復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 能夠做到一步旋轉(zhuǎn)之內(nèi)達(dá)到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復(fù)雜度和AVL相同,但統(tǒng)計(jì)性能比AVL樹更高。
當(dāng)然,紅黑樹并不適應(yīng)所有應(yīng)用樹的領(lǐng)域。如果數(shù)據(jù)基本上是靜態(tài)的,那么讓他們待在他們能夠插入,并且不影響平衡的地方會具有更好的性能。如果數(shù)據(jù)完全是靜態(tài)的,例如,做一個哈希表,性能可能會更好一些。
在實(shí)際的系統(tǒng)中,例如,需要使用動態(tài)規(guī)則的防火墻系統(tǒng),使用紅黑樹而不是散列表被實(shí)踐證明具有更好的伸縮性。
典型的用途是實(shí)現(xiàn)關(guān)聯(lián)數(shù)組
2 AVL樹是最先發(fā)明的自平衡二叉查 找樹。在AVL樹中任何節(jié)點(diǎn)的兩個兒子子樹的高度最大差別為一,所以它也被稱為高度平衡樹。查找、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉(zhuǎn)來重新平衡這個樹。AVL樹得名于它的發(fā)明者 G.M. Adelson-Velsky 和 E.M. Landis,他們在 1962 年的論文 "An algorithm for the organization of information" 中發(fā)表了它。
引入二叉樹的目的是為了提高二叉樹的搜索的效率,減少樹的平均搜索長度.為此,就必須每向二叉樹插入一個結(jié)點(diǎn)時調(diào)整樹的結(jié)構(gòu),使得二叉樹搜索保持平衡,從而可能降低樹的高度,減少的平均樹的搜索長度.
AVL樹的定義:
一棵AVL樹滿足以下的條件:
1>它的左子樹和右子樹都是AVL樹
2>左子樹和右子樹的高度差不能超過1
從條件1可能看出是個遞歸定義,如GNU一樣.
性質(zhì):
1>一棵n個結(jié)點(diǎn)的AVL樹的其高度保持在0(log2(n)),不會超過3/2log2(n+1)
2>一棵n個結(jié)點(diǎn)的AVL樹的平均搜索長度保持在0(log2(n)).
3>一棵n個結(jié)點(diǎn)的AVL樹刪除一個結(jié)點(diǎn)做平衡化旋轉(zhuǎn)所需要的時間為0(log2(n)).
從1這點(diǎn)來看 紅黑樹是犧牲了嚴(yán)格的高度平衡的優(yōu)越條件 為 代價紅黑樹能夠以O(shè)(log2 n)的時間復(fù)雜度進(jìn)行搜索、插入、刪除操作。此外,由于它的設(shè)計(jì),任何不平衡都會在三次旋轉(zhuǎn)之內(nèi)解決。當(dāng)然,還有一些更好的,但實(shí)現(xiàn)起來更復(fù)雜的數(shù)據(jù)結(jié)構(gòu) 能夠做到一步旋轉(zhuǎn)之內(nèi)達(dá)到平衡,但紅黑樹能夠給我們一個比較“便宜”的解決方案。紅黑樹的算法時間復(fù)雜度和AVL相同,但統(tǒng)計(jì)性能比AVL樹更高.
38、客戶端C和服務(wù)器S之間建立一個TCP連接,該連接總是以1KB的最大段長發(fā)送TCP段,客戶端C有足夠的數(shù)據(jù)要發(fā)送。當(dāng)擁塞窗口為16KB的時候發(fā)生超時,如果接下來的4個RTT往返時間內(nèi)的TCP段的傳輸是成功的,那么當(dāng)?shù)?個RTT時間內(nèi)發(fā)送的所有TCP段都得到了ACK時,擁塞窗口大小是:(C)
7KB
8KB
9KB
16KB
解析:
16KB超時,閾值變?yōu)?KB,客戶端從1KB開始穿(執(zhí)行快開始算法)
1RTT 結(jié)束,1KB->2KB
2RTT 結(jié)束,2KB->4KB
3RTT 結(jié)束,4KB->8KB(到達(dá)閾值,執(zhí)行擁塞避免算法)
4RTT 結(jié)束,8KB->9KB
當(dāng)擁塞發(fā)生時(超時或收到重復(fù)確認(rèn)),慢啟動門限ssthresh被設(shè)置為當(dāng)前擁塞窗口cwnd大小(題目為16)的一半,即8。同時cwnd重置為1。新的數(shù)據(jù)被接收,則cwnd增加,規(guī)則為ssthresh之前,慢啟動,即cwnd指數(shù)增長;到達(dá)ssthresh之后,擁塞避免,即cwnd加1。
39、關(guān)于epoll和select的區(qū)別,哪些說法是正確的?(ABC)
epoll和select都是I/O多路復(fù)用的技術(shù),都可以實(shí)現(xiàn)同時監(jiān)聽多個I/O事件的狀態(tài)
epoll相比select效率更高,主要是基于其操作系統(tǒng)支持的I/O事件通知機(jī)制,而select是基于輪詢機(jī)制
epoll支持水平觸發(fā)和邊沿觸發(fā)兩種模式
select能并行支持I/O比較小,且無法修改
解析:
epoll,select,poll是io復(fù)用技術(shù)中常見的,具體可google解釋,a正確
select查詢速度較慢,因?yàn)樗看萎a(chǎn)生fd時候會有整體fdset的拷貝,而且每次有回送,select要查詢整個fdset
epoll查詢速度較快,因?yàn)樗麨槊總€fd都regist了一個單獨(dú)的回調(diào)函數(shù),b正確
c選項(xiàng)不是很清楚
select支持io較少,這個是根據(jù)操作系統(tǒng)支持的數(shù)量定的,不過記得那個數(shù)值可以用sysctl修改,所以覺得d不對。
40、TCP鏈接中主動斷開鏈接netstat觀察可能出現(xiàn)的狀態(tài)流轉(zhuǎn)是:(CD)
ESTABLISHED->CLOSE_WAIT->TIME_WAIT->CLOSED
ESTABLISHED->TIME_WAIT->CLOSE_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED
ESTABLISHED->FIN_WAIT_1->TIME_WAIT->CLOSED
41、以下涉及到內(nèi)存管理的代碼段中,有錯誤的是:(ABD)
int *a=new int(12); //..... free(a); int *ip=static_cast<int*>(malloc(sizeof(int))); *ip=10; //..... delete ip; double *a=new double[1]; //.... delete a; int *ip=new int(12); for(int i=0;i<12;++i){ ip[i]=i; } delete []ip;解析:
new 和delete 配套使用 free和malloc配套使用 AB錯誤
D是因?yàn)樯暾埖氖且粋€元素,后面跟的12是初始化值,而不是數(shù)組,所以錯誤。
new和delete與free和malloc的差別是前面2個會分別調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)
42、下面哪些特性可能導(dǎo)致代碼體積膨脹:(ABC)
宏定義
模板
內(nèi)聯(lián)函數(shù)
遞歸
解析:
A宏定義會單純的替換,也就是如果宏定義替換的內(nèi)容會成倍復(fù)制,所以會導(dǎo)致代碼膨脹
B模板的調(diào)用,會根據(jù)調(diào)用的參數(shù),生成模板對應(yīng)的實(shí)際調(diào)用的函數(shù)體,如果調(diào)用的參數(shù)不同,會生成不同的代碼,所以會導(dǎo)致代碼膨脹
C內(nèi)聯(lián)函數(shù)會拷貝至調(diào)用的位置,如果調(diào)用多次回導(dǎo)致代碼膨脹
d選項(xiàng),遞歸不會導(dǎo)致體積膨脹,但是大量遞歸會導(dǎo)致棧區(qū)溢出
總結(jié)
- 上一篇: 求集合/字符串中的所有组合 (C语言)
- 下一篇: String.Split()函数