汇顶软件开发初面总结20180921
博客參考:C++中的多態(tài)和內(nèi)部實(shí)現(xiàn):https://www.cnblogs.com/qiaoconglovelife/p/5128523.html
? ? ? ? ? ? ? ? ? ? 虛函數(shù)表存放的地址:https://blog.csdn.net/jiary5201314/article/details/52627630
? ? ? ? ? ? ? ? ? ?為什么STL和linux都采用紅黑樹(shù)作為平衡樹(shù)的實(shí)現(xiàn):https://www.zhihu.com/question/20545708
? ? ? ? ? ? ? ? ? 進(jìn)程關(guān)系:父子進(jìn)程之間的數(shù)據(jù)共享:http://blog.sina.com.cn/s/blog_1550922e60102z7gm.html
? ? ? ? ? ? ? ? ?
(1)C++語(yǔ)言中多態(tài)的實(shí)現(xiàn):一個(gè)接口,多種行為(向不同對(duì)象發(fā)送同一消息,可以產(chǎn)生不同的行為)
? ? ? ? ? ? ? ? 1)編譯時(shí)多態(tài):函數(shù)的重載和模板實(shí)現(xiàn),編譯器在編譯的時(shí)候,通過(guò)實(shí)參的個(gè)數(shù)和類型,選擇最終調(diào)用的函數(shù);
? ? ? ? ? ? ? ? 2)運(yùn)行時(shí)多態(tài):通過(guò)虛函數(shù)實(shí)現(xiàn),基類的某個(gè)成員函數(shù)為虛函數(shù),派生類又定義一成員函數(shù),除函數(shù)體的其余部分都與基類的成員函數(shù)相同;
? ? ? ? ? ? ? ? ? ? ? 每一個(gè)含有虛函數(shù)的類,都會(huì)生成虛表(virtual table)。這個(gè)表,記錄了對(duì)象的動(dòng)態(tài)類型,決定了執(zhí)行此對(duì)象的虛成員函? ?數(shù)的時(shí)候,真正執(zhí)行的那一個(gè)成員函數(shù)。
? ? ? ? ? ? ? ? ? ? ?對(duì)于有多個(gè)基類的類對(duì)象,會(huì)有多個(gè)虛表,每一個(gè)基類對(duì)應(yīng)一個(gè)虛表,同時(shí),虛表的順序和繼承時(shí)的順序相同。
? ? ? ? ? ? ? ? ? ? 在每一個(gè)類對(duì)象所占用的內(nèi)存中,虛指針位于最前邊,每個(gè)虛指針指向?qū)?yīng)的虛表。
? ? ? ? ? ? ? ? ?3)虛指針存放在內(nèi)存的哪里:虛函數(shù)表是全局共享的一個(gè)元素,即全局只有一個(gè),存放在內(nèi)存的靜態(tài)/全局變量區(qū)。
? ? ? ? ? ? ? ? ? ? ?函數(shù)表類似一個(gè)數(shù)組,類對(duì)象中存儲(chǔ)vptr指針,指向虛函數(shù)表.即虛函數(shù)表不是函數(shù),不是程序代碼,不肯能存儲(chǔ)在代碼段.。
? ? ? ? ? ? ? ? ? ?.虛函數(shù)表存儲(chǔ)虛函數(shù)的地址,即虛函數(shù)表的元素是指向類成員函數(shù)的指針。
(2)STL容器的底層實(shí)現(xiàn):
? ? ? ? ? ? ? 1)map的底層實(shí)現(xiàn)用紅黑樹(shù),而不用AVL
? ? ? ? ? ? ? ? ? ? ?a)AVL是一個(gè)高度平衡的樹(shù),對(duì)樹(shù)進(jìn)行插入和刪除更容易導(dǎo)致樹(shù)的unbalance,因此AVL需要rebalance的概率更大,AVL插入最多也只需要兩次旋轉(zhuǎn);而紅黑樹(shù)插入只要兩次旋轉(zhuǎn),刪除至多三次旋轉(zhuǎn);雖然使用AVL樹(shù)搜索的效率非常穩(wěn)定,但選取紅黑樹(shù),是一個(gè)折中的方案;
? ? ? ? ? ? ? ? ? ? ? b)插入一個(gè)節(jié)點(diǎn)導(dǎo)致樹(shù)的不平衡,AVL和紅黑樹(shù)都最多只需要兩次旋轉(zhuǎn)操作;但刪除節(jié)點(diǎn)引起樹(shù)的不平衡,最壞情況,AVL需要維護(hù)從被刪節(jié)點(diǎn)到root這條路徑上所有節(jié)點(diǎn)的平衡性,因此旋轉(zhuǎn)量級(jí)為O(logN),而紅黑樹(shù)至多需要三次旋轉(zhuǎn);
? ? ? ? ? ? ? ? ? ? ? c)紅黑樹(shù)在需要大量插入和刪除節(jié)點(diǎn)的場(chǎng)景下,效率更高;AVL由于高度平衡,所有搜索的效率更高;
? ? ? ? ? ? ? ? ? ? ? d)map的實(shí)現(xiàn)是折中了兩者在搜索,插入,刪除的效率,總體來(lái)說(shuō)紅黑樹(shù)更好;
(3)ucos操作系統(tǒng)和linux操作系統(tǒng)的區(qū)別
? ? ? ? ? ? 參考博客:ucos ii和linux操作系統(tǒng)的區(qū)別:https://blog.csdn.net/chen_geng/article/details/51556459
(4)全局變量在多任務(wù)之間可以共享嗎?
? ? ? ? ? ? 1)對(duì)于多進(jìn)程而言(父子進(jìn)程和兄弟進(jìn)程):如果其中一方調(diào)用了exec族函數(shù)(進(jìn)程的代碼和數(shù)據(jù),全部替換,實(shí)際使用的物理內(nèi)存也會(huì)重新申請(qǐng)),此時(shí)進(jìn)程的代碼段,數(shù)據(jù)段和堆棧都是獨(dú)立的,沒(méi)有任何關(guān)系;
? ? ? ? ? ? 2)對(duì)于父子進(jìn)程,其全局變量遵循“讀時(shí)共享,寫(xiě)時(shí)獨(dú)享”的原則,因此,如果在父子進(jìn)程中有修改全局變量的情況,系統(tǒng)會(huì)再給變化的全局變量分配不同的物理內(nèi)存;
? ? ? ? ? ? 3)對(duì)于不同進(jìn)程的線程,不能通過(guò)全局變量來(lái)通信;
? ? ? ? ? ? 4)對(duì)于同一進(jìn)程的線程,可以通過(guò)全局變量來(lái)銅線的,它們共享進(jìn)程的代碼段、數(shù)據(jù)段、BSS段。頁(yè)目錄和頁(yè)表使用進(jìn)程的頁(yè)目錄和頁(yè)表;
(5)進(jìn)程之間共享的內(nèi)容有哪些?
? ? ? ? ? ? 1)對(duì)于沒(méi)有聯(lián)系的進(jìn)程之間的數(shù)據(jù)是相互獨(dú)立的;
? ? ? ? ? ? 2)對(duì)于父子進(jìn)程:相同的地方:全局變量,堆棧,環(huán)境變量,用戶id,宿主目錄,進(jìn)程工作目錄,信號(hào)處理方式;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不同的地方:進(jìn)程id,fork返回值,父進(jìn)程id,進(jìn)程運(yùn)行時(shí)間,鬧鐘,未決信號(hào)集;
? ? ? ? ? ? ? ? ? ?可以理解成,子進(jìn)程拷貝了父進(jìn)程0~3G用戶空間的內(nèi)容,以及父進(jìn)程的pcb,但是pid不同,然后再映射到物理內(nèi)存;
(6)虛擬內(nèi)存和物理內(nèi)存的映射
? ? ? ? ? ? 參考博客:虛擬地址和物理地址的轉(zhuǎn)換:https://blog.csdn.net/a8316124/article/details/56485642? ?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的汇顶软件开发初面总结20180921的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C/C++之vector的内存管理和效率
- 下一篇: 宫腹腔镜手术费用