1. 結(jié)構(gòu)體敬肚、共用體亿蒸、類
C++中結(jié)構(gòu)體與類的區(qū)別:
結(jié)構(gòu)體中的成員訪問權(quán)限不聲明時候默認(rèn)是 public 的,而類是 private
值得注意的地方是 C++中結(jié)構(gòu)體內(nèi)是可以有析構(gòu)函數(shù)的缔刹。而C中的結(jié)構(gòu)體與C++中不同之處有很多兢孝。
結(jié)構(gòu)體和union的區(qū)別:
1.struct和union都是由多個不同的數(shù)據(jù)類型成員組成, 但在任何同一時刻, union中只存放了一個被選中的成員, 而struct的所有成員都存在诅诱。在struct中壹置,各成員都占有自己的內(nèi)存空間孕似,它們是同時存在的踩娘。一個struct變量的總長度等于所有成員長度之和。在Union中喉祭,所有成員不能同時占用它的內(nèi)存空間养渴,它們不能同時存在。Union變量的長度等于最長的成員的長度泛烙。
2.對于union的不同成員賦值, 將會對其它成員重寫, 原來成員的值就不存在了, 而對于struct的不同成員賦值是互不影響的理卑。
2.在for循環(huán)的最后一個條件中 ++i 和 i++的區(qū)別
i++由于是在使用當(dāng)前值之后再+1,所以會需要一個臨時變量來轉(zhuǎn)儲蔽氨,而++i則直接+1藐唠,不存在這樣的問題。
但是現(xiàn)在的編譯器都會進(jìn)行優(yōu)化鹉究,所以實際的效果是一樣的宇立。
3. 尋找1-n中缺失的X
在從1到n的n個數(shù)字以無序的狀態(tài)排列,并且缺少了其中的一個數(shù)X自赔,現(xiàn)在要求找出缺失的這個數(shù)字妈嘹。
1.可以分別計算1-n的n項和,以及缺失數(shù)字后的n-1項的和绍妨,并求出它們之間的差润脸。這個差值即為缺失的數(shù)字柬脸。
缺點是當(dāng)n很大時,可能出現(xiàn)內(nèi)存溢出的狀況毙驯。
2.利用位運算倒堕,異或。使用循環(huán)
for(int i=1; i<=n; ++i)
sum=(inumber[i]);
這和在一個數(shù)組中只有一個數(shù)字是單獨的一個尔苦,剩下的數(shù)字都成對存在涩馆, 是一個道理。成對存在的數(shù)字在異或的過程中已經(jīng)為0了允坚,最后剩下的數(shù)字就是單獨存在的那個魂那。
3.可以用哈希表,訪問一個數(shù)字就將相應(yīng)的置為1.最后遍歷一遍哈希表稠项,為0的那個就是缺失的那個涯雅。
4.尋找1-n中缺失的X、Y
假定我們迷失的數(shù)字是S1,S2展运。那么我們?nèi)慨惢蛑蟮玫降木褪荢1S2的值活逆。分析一下就可以知道,S1!=S2拗胜,也就是說S1S2!=0; 這樣也就是說S1S2的這個值有二進(jìn)制位有一位是1蔗候,那么我們就可以把這些所有的數(shù)字分成2組,一組這個二進(jìn)制位是1埂软,另一個這個二進(jìn)制位是0的來重新做異或锈遥。這樣就可以把其中一個S1求出來了,那再S1(S1^S2)一下勘畔,S2也就得到了所灸。
5. 100個人報數(shù)
100個人列隊報數(shù),報單數(shù)的離隊炫七,留下的再依據(jù)報數(shù)爬立,單數(shù)的再離隊,這樣重復(fù)多少次万哪,直至最后只留下一個人侠驯,請問此人在第一次報數(shù)時是第幾號?
探尋規(guī)律發(fā)現(xiàn)壤圃,每次留下的都應(yīng)是上一次報數(shù)中的偶數(shù)項陵霉,即每次離隊后,2的倍數(shù)必然會留下伍绳。最后剩下的應(yīng)該是1~100中2n的最大值,即報數(shù)6次后留下第64號乍桂。
6.計算機(jī)網(wǎng)絡(luò)7層結(jié)構(gòu)
應(yīng)用層
與其它計算機(jī)進(jìn)行通訊的一個應(yīng)用冲杀,它是對應(yīng)應(yīng)用程序的通信服務(wù)的效床。例如,一個沒有通信功能的字處理程序就不能執(zhí)行通信的代碼权谁,從事字處理工作的程序員也不關(guān)心OSI的第7層剩檀。但是,如果添加了一個傳輸文件的選項旺芽,那么字處理器的程序員就需要實現(xiàn)OSI的第7層沪猴。示例:telnet,HTTP,FTP,NFS,SMTP等采章。
表示層
這一層的主要功能是定義數(shù)據(jù)格式及加密运嗜。例如,F(xiàn)TP允許你選擇以二進(jìn)制或ASCII格式傳輸悯舟。如果選擇二進(jìn)制担租,那么發(fā)送方和接收方不改變文件的內(nèi)容。如果選擇ASCII格式抵怎,發(fā)送方將把文本從發(fā)送方的字符集轉(zhuǎn)換成標(biāo)準(zhǔn)的ASCII后發(fā)送數(shù)據(jù)奋救。在接收方將標(biāo)準(zhǔn)的ASCII轉(zhuǎn)換成接收方計算機(jī)的字符集。示例:加密反惕,ASCII等尝艘。
會話層
它定義了如何開始、控制和結(jié)束一個會話姿染,包括對多個雙向消息的控制和管理背亥,以便在只完成連續(xù)消息的一部分時可以通知應(yīng)用,從而使表示層看到的數(shù)據(jù)是連續(xù)的盔粹,在某些情況下隘梨,如果表示層收到了所有的數(shù)據(jù),則用數(shù)據(jù)代表表示層舷嗡。示例:RPC轴猎,SQL等。
傳輸層
這層的功能包括是否選擇差錯恢復(fù)協(xié)議還是無差錯恢復(fù)協(xié)議进萄,及在同一主機(jī)上對不同應(yīng)用的數(shù)據(jù)流的輸入進(jìn)行復(fù)用捻脖,還包括對收到的順序不對的數(shù)據(jù)包的重新排序功能。示例:TCP中鼠,UDP可婶,SPX。
網(wǎng)絡(luò)層
這層對端到端的包傳輸進(jìn)行定義援雇,它定義了能夠標(biāo)識所有結(jié)點的邏輯地址矛渴,還定義了路由實現(xiàn)的方式和學(xué)習(xí)的方式。為了適應(yīng)最大傳輸單元長度小于包長度的傳輸介質(zhì),網(wǎng)絡(luò)層還定義了如何將一個包分解成更小的包的分段方法具温。示例:IP,IPX等蚕涤。
數(shù)據(jù)鏈路層
它定義了在單個鏈路上如何傳輸數(shù)據(jù)。這些協(xié)議與被討論的各種介質(zhì)有關(guān)铣猩。示例:ATM揖铜,F(xiàn)DDI等。
物理層
OSI的物理層規(guī)范是有關(guān)傳輸介質(zhì)的特性標(biāo)準(zhǔn)达皿,這些規(guī)范通常也參考了其他組織制定的標(biāo)準(zhǔn)天吓。連接頭、幀峦椰、幀的使用龄寞、電流、編碼及光調(diào)制等都屬于各種物理層規(guī)范中的內(nèi)容们何。物理層常用多個規(guī)范完成對所有細(xì)節(jié)的定義萄焦。示例:Rj45,802.3等冤竹。
7.TCP和UDP的異同
詳見
http://liangjiabin.com/blog/2015/03/difference-between-tcp-vs-udp-protocol.html