匯頂軟件開發初面總結20180921

博客參考:C++中的多態和內部實現:https://www.cnblogs.com/qiaoconglovelife/p/5128523.html

? ? ? ? ? ? ? ? ? ? 虛函數表存放的地址:https://blog.csdn.net/jiary5201314/article/details/52627630

? ? ? ? ? ? ? ? ? ?為什么STL和linux都采用紅黑樹作為平衡樹的實現:https://www.zhihu.com/question/20545708

? ? ? ? ? ? ? ? ? 進程關系:父子進程之間的數據共享:http://blog.sina.com.cn/s/blog_1550922e60102z7gm.html

? ? ? ? ? ? ? ? ?

(1)C++語言中多態的實現:一個接口,多種行為(向不同對象發送同一消息,可以產生不同的行為)

? ? ? ? ? ? ? ? 1)編譯時多態:函數的重載和模板實現,編譯器在編譯的時候,通過實參的個數和類型,選擇最終調用的函數;

? ? ? ? ? ? ? ? 2)運行時多態:通過虛函數實現,基類的某個成員函數為虛函數,派生類又定義一成員函數,除函數體的其余部分都與基類的成員函數相同;

? ? ? ? ? ? ? ? ? ? ? 每一個含有虛函數的類,都會生成虛表(virtual table)。這個表,記錄了對象的動態類型,決定了執行此對象的虛成員函? ?數的時候,真正執行的那一個成員函數。

? ? ? ? ? ? ? ? ? ? ?對于有多個基類的類對象,會有多個虛表,每一個基類對應一個虛表,同時,虛表的順序和繼承時的順序相同。

? ? ? ? ? ? ? ? ? ? 在每一個類對象所占用的內存中,虛指針位于最前邊,每個虛指針指向對應的虛表。

? ? ? ? ? ? ? ? ?3)虛指針存放在內存的哪里:虛函數表是全局共享的一個元素,即全局只有一個,存放在內存的靜態/全局變量區

? ? ? ? ? ? ? ? ? ? ?函數表類似一個數組,類對象中存儲vptr指針,指向虛函數表.即虛函數表不是函數,不是程序代碼,不肯能存儲在代碼段.。

? ? ? ? ? ? ? ? ? ?.虛函數表存儲虛函數的地址,即虛函數表的元素是指向類成員函數的指針。

(2)STL容器的底層實現:

? ? ? ? ? ? ? 1)map的底層實現用紅黑樹,而不用AVL

? ? ? ? ? ? ? ? ? ? ?a)AVL是一個高度平衡的樹,對樹進行插入和刪除更容易導致樹的unbalance,因此AVL需要rebalance的概率更大,AVL插入最多也只需要兩次旋轉;而紅黑樹插入只要兩次旋轉,刪除至多三次旋轉;雖然使用AVL樹搜索的效率非常穩定,但選取紅黑樹,是一個折中的方案;

? ? ? ? ? ? ? ? ? ? ? b)插入一個節點導致樹的不平衡,AVL和紅黑樹都最多只需要兩次旋轉操作;但刪除節點引起樹的不平衡,最壞情況,AVL需要維護從被刪節點到root這條路徑上所有節點的平衡性,因此旋轉量級為O(logN),而紅黑樹至多需要三次旋轉;

? ? ? ? ? ? ? ? ? ? ? c)紅黑樹在需要大量插入和刪除節點的場景下,效率更高;AVL由于高度平衡,所有搜索的效率更高;

? ? ? ? ? ? ? ? ? ? ? d)map的實現是折中了兩者在搜索,插入,刪除的效率,總體來說紅黑樹更好;

(3)ucos操作系統和linux操作系統的區別

? ? ? ? ? ? 參考博客:ucos ii和linux操作系統的區別:https://blog.csdn.net/chen_geng/article/details/51556459

(4)全局變量在多任務之間可以共享嗎?

? ? ? ? ? ? 1)對于多進程而言(父子進程和兄弟進程):如果其中一方調用了exec族函數(進程的代碼和數據,全部替換,實際使用的物理內存也會重新申請),此時進程的代碼段,數據段和堆棧都是獨立的,沒有任何關系;

? ? ? ? ? ? 2)對于父子進程,其全局變量遵循“讀時共享,寫時獨享”的原則,因此,如果在父子進程中有修改全局變量的情況,系統會再給變化的全局變量分配不同的物理內存;

? ? ? ? ? ? 3)對于不同進程的線程,不能通過全局變量來通信;

? ? ? ? ? ? 4)對于同一進程的線程,可以通過全局變量來銅線的,它們共享進程的代碼段、數據段、BSS段。頁目錄和頁表使用進程的頁目錄和頁表;

(5)進程之間共享的內容有哪些?

? ? ? ? ? ? 1)對于沒有聯系的進程之間的數據是相互獨立的;

? ? ? ? ? ? 2)對于父子進程:相同的地方:全局變量,堆棧,環境變量,用戶id,宿主目錄,進程工作目錄,信號處理方式;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?不同的地方:進程id,fork返回值,父進程id,進程運行時間,鬧鐘,未決信號集;

? ? ? ? ? ? ? ? ? ?可以理解成,子進程拷貝了父進程0~3G用戶空間的內容,以及父進程的pcb,但是pid不同,然后再映射到物理內存;

(6)虛擬內存和物理內存的映射

? ? ? ? ? ? 參考博客:虛擬地址和物理地址的轉換:https://blog.csdn.net/a8316124/article/details/56485642? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382286.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382286.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382286.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode 21. 合并兩個有序鏈表 golang

遞歸 func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {if nil l1 {return l2}if nil l2 {return l1}if l1.Val < l2.Val {l1.Next mergeTwoLists(l1.Next, l2)return l1} else {l2.Next mergeTwoLists(l1, l2.Next)return l2} }Me(存在問題)非遞歸版本實現…

深信服C/C++技術一面二面20180924

技術一面&#xff1a;主要是一些關于數據結構和C/C相關的內容 1)鏈表和數組的相同點和不同點&#xff1b; 2&#xff09;了解靜態鏈表嗎&#xff1f;怎么用數組實現靜態鏈表&#xff1f; 3&#xff09;使用庫函數strcpy應該注意的問題有哪些&#xff1f; 4&#xff09;鏈表…

83. 刪除排序鏈表中的重復元素 golang

83. 刪除排序鏈表中的重復元素 golang Me func deleteDuplicates(head *ListNode) *ListNode {if head nil || head.Next nil {return head}result : headfor head ! nil && head.Next ! nil {for head.Val head.Next.Val {head.Next head.Next.Nextif head.Next…

《C++ Primer第五版》習題答案

博客轉載&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53786215 第一章&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200001 第二章&#xff1a; 1~10題&#xff1a;https://blog.csdn.net/misayaaaaa/article/details/53200773 11~…

《C++ Primer第五版》第一章-------IO機制和注釋縮進

C Primer第一章的內容相對來說比較基礎&#xff0c;主要是對C中程序編譯的流程、C中的IO機制&#xff0c;for和while循環的介紹、類的構成和注釋方法及縮進方法做了簡要的介紹&#xff0c;本次博客主要從C中的IO機制和注釋縮進等方面做一個總結記錄&#xff0c;如果在總結過程中…

19.刪除鏈表的倒數第N個節點 golang

官解 一遍寫出來有難度。 [1,2] 2 [2][1,2]1 [1]func removeNthFromEnd(head *ListNode, n int) *ListNode {if n < 0 || head nil {return head}fast : headfor i : 1; i < n && fast ! nil; i{fast fast.Next}if fast nil {return head.Next}slow : headfor…

《C++ Primer 第五版》第二章(1-4小節)------基本內置類型,初始化和賦值及聲明和定義,指針和引用,const和constexpr

C Primer第二章的內容主要介紹了變量和基礎類型&#xff0c;包括C語言定義的基礎內置類型、變量的定義及聲明、符合類型如指針及引用的介紹和const及常量表達式constexpr的介紹&#xff0c;本次博客也從這四個方面進行系統的介紹&#xff0c;如果有不足之處&#xff0c;還望其他…

455. 分發餅干 golang

455. 分發餅干 Me func findContentChildren(g []int, s []int) int {if len(s) 0 {return 0}sort.Ints(g)sort.Ints(s)var count, i, j int 0, 0, 0for { if g[i] < s[j] {i, j, count i1, j1, count1} else {j}if i > len(g) || j > len(s) {return count}}re…

《C++ Primer 第五版》第二章(第5小節)——using和typedef,auto和decltype總結

1.using和typedef&#xff08;作用&#xff1a;定義類型別名&#xff09; 1)typedef和using都可以用來定義一個類型別名&#xff0c;二者在類型別名上定義沒有區別。只是需要注意的是類型和類型別名的順序&#xff0c;使用typedef定義類型別名的結構為 typedef 類型 類型別名&a…

204. 計數質數 golang

一次嘗試&#xff0c;如何擊敗100%用戶&#xff08;用時&#xff0c;內存&#xff09; func countPrimes(n int) int {if n 499979 {return 41537}if n 11 {return 4}if n 12 {return 5}if n 13 {return 5}if n 14 {return 6}if n 15 {return 6}if n 10 {return 4}if n …

leetcode內存消耗

leetcode內存消耗最是多少 執行用時 :0 ms, 在所有 Go 提交中擊敗了100.00%的用戶 內存消耗 :1.9 MB, 在所有 Go 提交中擊敗了94.81%的用戶測試鏈接 Test

《C++ Primer 第五版》(第2.5節,第3.1-3.4節) ——采用預處理功能編寫頭文件,string初始化和字符操作,vector初始化和迭代器

1.采用預處理功能編寫頭文件 在頭文件定義(頭文件中的內容是只能被定義一次的實體)過程中&#xff0c;為了防止頭文件重復包含的情況&#xff0c;采用預處理器的一個頭文件保護符功能,格式為&#xff1a;{ #ifndef 預處理變量(通常大寫) #define 預處理變量 #end…

《C++ Primer 第五版》(第3.5-3.6節) ——C++中的內置數組類型,string對象和C風格字符串

1.C中的內置數組類型 C中的數組是內置數據類型&#xff0c;但不是基礎數據類型而是構造數據類型&#xff0c;是有限個相同數據、占據著連續物理存儲空間的有序集合。而內置數據類型定義的下標運算符可以處理負值運算(只要在數組范圍之內)&#xff0c;這和vector及string的下標運…

793. 階乘函數后K個零 golang

Me(AC 33 / 44 個通過測試用例) func preimageSizeFZF(K int) int {count : 0for i : 0; i < 1000000; i {if trailingZeroes(i) K {count}}fmt.Println(count)//fmt.Println(trailingZeroes(25))return count}func trailingZeroes(n int) int {if n 0 {return 0}return …

小程序radio單選框回顯

話不多說&#xff0c;效果圖如下&#xff1a; 具體代碼如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

172. 階乘后的零 golang

官解 一般很難想到這個方向&#xff0c;有點類似數學歸納法&#xff1f; func trailingZeroes(n int) int {if n 0 {return 0}return trailingZeroes(n / 5) n / 5 }

《C++ Primer 第五版》(第4.11節類型轉換) ————關于無符號數和有符號數的運算探究

1.關于無符號數和有符號數的運算 關于無符號數和有符號數的運算&#xff0c;在我看來一直是覺得只要有無符號數和有符號數的運算&#xff0c;有符號數就轉化為無符號數&#xff0c;但是在《C Primer 第五版》的p142介紹&#xff0c;關于無符號數和有符號數的運算如下規定的&…

《C++ Primer 第五版》(第4.1-4.11節) ——運算符的執行順序問題,負值坐商取余問題,數值的移位操作

1.運算符的執行順序問題 在C語言中&#xff0c;沒有明確規定大多數二元運算符的求值順序&#xff0c;這給編譯器留下了余地&#xff0c;這種策略是在代碼生成效率和程序潛在缺陷之間的權衡。 對于運算符而言&#xff0c;如果運算符的兩個對象中&#xff0c;存在表達式指向并修改…

543. 二叉樹的直徑 golang

文章目錄543. 二叉樹的直徑example正確解法question代碼&#xff08;wrong)543. 二叉樹的直徑 概要: 借鑒了這個題的代碼。可是有一個測試用例過不去 https://blog.csdn.net/csdn_kou/article/details/104122067 example 給定一棵二叉樹&#xff0c;你需要計算它的直徑長度。一…

《C++ Primer 第五版》(第4.11-4.12節)——static_cast,const_cast和reinterpret_cast類型轉換, 運算符優先級表

1.static_cast,const_cast和reinterpret_cast類型轉換 static_cast:強制的類型轉換(不能用于底層的const轉換),以前C語言中的強制類型轉換都可以使用static_cast來完成。如&#xff1a;int i3; double jstatic_cast<double>(i); const_cast&#xff1a;改變底層const(指針…