C++后台知識點總結(一)


C++基礎部分:

1.數組和指針的區別

(1)數組本身體現出來的就是一個 指針常量的 “特性”,即不能對數組的首地址進行修改,內存上的地址就已經是確定了的。而指針本身是一個變量,他指向了一個地址,這個是可以變化的,也就說他可以重新賦值指向新的地址;
(2)當調用sizeof函數時,對於數組,得到的是數組元素個數*數據類型的大小,而對於指針,得到的是指針類型的大小,這個取決於機器的位數,比如32位機,對應的指針就是4字節的大小;
(3)指針相比數組更加靈活。
相同之處:比如當作為形參的時候,定義成 指針還是數組都是一樣的,因為這個時候傳入的都是數組的首地址,也就是這個數組名,反映出來的就等於是一個指針。在傳參過程中,數組會退化成指針,所以實參為數組,對應的形參可以定義為數組或者指針。

2. C++中struct和class的區別

(1)如果不申明訪問權限,class的默認權限是private,而struct是public
(2)對於繼承,如果也沒有明確是public繼承還是private繼承或者是protected繼承,class
默認是private的繼承,而struct是public繼承。
(3)從抽象上來說,class更像是對象的實現體,而struct更像是數據結構的實現體。

3.構造函數能不能是虛函數?

      不可以,因為虛函數的調用必須通過虛函數表查找來實現,只有通過類對象前4個字節(32位系統)虛函數表指針找到對應類的虛函數表,才能訪問虛函數,而虛函數表指針的生成是在構造函數中完成的,如果構造函數是虛函數,那么就只能通過虛表指針才能訪問到,關鍵是此時就需要讓構造函數產生出虛表指針。陷入了先有蛋還是現有雞的問題。

4.析構函數可不可以是純虛函數?

     不建議是,因為我們知道純虛函數是沒有實現體的,那么子類對象在析構的時候,父類組成部分就沒辦法釋放,顯然不行。但是對於大部分編譯器來說,可以將析構函數申明為純虛函數,然后在類外寫純虛函數的實現體,從語法上不會報錯。

5.構造函數和析構函數的調用順序

  C++標准規定構造函數是先調用基類的再調用子類的,而析構函數則是先調用子類的再調用基類的。

數據庫部分:

1.索引的優缺點

 優點: (1) 可以有效減少數據檢索的時間,提高查詢效率;

             (2) 建立索引的列可以保證行的唯一性;

             (3) 可以加快表與表的連接,提高表與表之間的聯合查詢效率;

缺點:  (1)創建索引、維護索引都需要花費時間和空間成本,每條索引都要占據數據庫的存儲空間;

             (2)在增刪改的時候都需要對索引進行動態維護,也會花費時間和空間成本;

2.索引的應用場景

接觸比較多的主要有以下三個場景:(1) 數據量大並且查詢頻率較高的建議使用索引

                                                          (2) 表與表聯合查詢時,用於約束條件的字段建議使用索引

                                                          (3) 用於排序的字段建議使用索引

3.索引的原理

其實就是回答B樹或者B+樹的工作原理,這兩種數據結構適合磁盤索引文件和元素。

4.事務的定義和基本使用

(1)基本定義:事務是一種數據庫操作的機制,一般來說是指一組數據庫操作的集合,實際表現為多個sql語句的集合,當數據庫引擎執行該事務時,要么就全部不執行,要么就全部執行。事務是一個不可分割的工作邏輯單元。在數據庫系統上執行並發操作時事務是作為最小的控制單元來使用的。(多用戶登錄系統一般采用事務機制)在執行的時候,如果事務執行成功,數據庫引擎會提交該事務,即將事務的執行結果提交到數據庫中,但是,如果執行不成功,我們可以進行回滾,即將數據庫恢復到事務執行之前的狀態。

(2)使用:不同數據庫的事務實現有所不同,但大體上是相似的,一般分為四個操作:開啟事務,執行事務,提交事務和回滾事務。

具體可以參考以下博客:

 https://www.cnblogs.com/cold-ice/p/6039595.html

Linux部分

1.常用命令

 (1)與CPU、內存和磁盤相關命令:top、free、df、fdisk

 (2)查找相關命令:grep(可以搭配正則表達式)、find

 (3)與文本處理相關的命令:sed(用於格式化修改)、awk(可以用於統計)、tr命令(可以實現簡單的文本處理,包括替換、刪除、去重、截斷等功能),具體可以參考下面的資料:

 http://man.linuxde.net/tr

 https://blog.csdn.net/m0_37814112/article/details/80492076

 (4)與網絡相關:netstat(可以用於查看系統網絡連接狀態)、tcpdump(可以用於抓包分析)

 2.共享內存

  Linux下共享內存主要有兩種實現機制,一種是采用mmap,另一種是采用XSI機制中的共享內存方法。mmap是內存文件映射,將一個文件映射到進程的地址空間,用戶進程的地址空間的管理是通過vm_area_struct結構體進行管理的。mmap通過映射一個相同的文件到兩個不同的進程,就能實現這兩個進程的通信,采用該方法可以實現任意進程之間的通信。mmap也可以采用匿名映射,不指定映射的文件,但是只能在父子進程間通信。XSI的內存共享實際上也是通過映射文件實現,只是其映射的是一種特殊文件系統下的文件,該文件是不能通過read和write訪問的。 

 

 ------------------------------------------------------未完待續-------------------------------------------------------------

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM