面試題小總結

面向對象特性

封裝、把客觀的事物表示爲類,它有自己的數據成員和函數方法。並可以通過設置爲對外隱藏
繼承、子類繼承父類,它有父類的所有的方法,並且能夠進行功能擴展
多態、把子類的指針賦值給父類的指針,父類根據子類的特性進行不同的運作

進程與線程

1.進程的定義

進程是具有一定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。進程是程序的一次執行活動,是程序運行的實例,屬於動態概念。
(注意:在Mac、Windows NT等採用微內核結構的操作系統中,進程只是資源分配的單位,而不再是調度運行的單位。在微內核系統中,真正調度運行的基本單位是線程。因此,實現併發功能的單位是線程。 )
進程是系統進行資源分配的基本單位。

2.線程的定義

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。
線程是CPU調度和程序執行的最小單位。

3.進程和線程的關係

(1)一個線程只能屬於一個進程,而一個進程可以有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源。
(3)處理機分給線程,即真正在處理機上運行的是線程。
(4)線程在執行過程中,需要協作同步。不同進程的線程間要利用消息通信的辦法實現同步。
(5)線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等於整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變量的併發操作,只能用線程,不能用進程。

4.進程與線程的區別

(1)調度:線程作爲CUP調度和分配的基本單位,進程作爲擁有資源的基本單位。
(2)併發性:不僅進程之間可以併發執行,同一個進程的多個線程之間也可併發執行。
(3)擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統資源,但可以訪問隸屬於進程的資源。
(4) 系統開銷:在創建或撤消進程時,由於系統都要爲之分配和回收資源,導致系統的開銷明顯大於創建或撤消線程時的開銷。在進程切換時,耗費資源較大,效率要差一些。
(5)健壯性:進程有獨立的地址空間,一個進程崩潰後,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個進程死掉就等於所有的線程死掉,所以多進程的程序要比多線程的程序健壯。進程間的crash不會相互影響,但是一個線程的crash會使整個進程都crash,其他線程也跟着都掛了。
5 進程的狀態和線程的狀態

虛函數的使用場景

* 在類成員函數的聲明時,加入virtual,這個函數就會成爲虛函數。
* 加個=0在後面,這個函數就會成爲純虛函數。
* 子類可以重新定義父類的虛函數,我們把它稱爲複寫,override。
* 子類可以提供父類虛函數的實現,純虛函數是必須實現的。
* 使用基類的指針指向子類對象,然後調用子類複寫過的函數,這是c++實現多態的一個經典的方式
* 虛函數與普體哦那個函數是存在不同的位置的,虛函數表是存儲在只讀數據段中
* 純虛函數在基類中的實現倒是與多態無關,只是爲了提供函數接口,語法上的遍歷

4、內核態和用戶態

  • 有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如:清內存、設置時鐘等。如果所有的程序都能使用這些指令
  • cpu特權級別,0表示內核態,3表示用戶態。當一個任務執行系統調用,在內核代碼中執行,就是內核態。執行的內核代碼會使用當前進程的內核棧。當前進程在執行用戶自己的代碼時,也就是用戶態。*
  • 從用戶態到內核態的三種方式:系統調用,中斷,異常。
    5、linux中的內存分配
    系統給進程分配虛擬內存、
    虛擬內存對應頁表
    若無法找到對應物理內存的頁表,就會產生缺頁中斷,真正分配物理地址;;若此時物理地址耗盡,就會通過頁面置換淘汰部分頁面至物理內存中
    6、SQL事務特性
    用於保持邏輯數據一致性與可恢復性。事務具有原子性,一致性,隔離性,持久性。也就是說 去不了終點,回到起點
    7、索引定義
    類似於一種目錄結構。包括聚簇索引和非聚簇索引。聚簇索引用於查找某個範圍內的值
    8、索引的使用
    看鏈接
    9、如何防止多人修改同一個記錄
    加鎖:悲觀鎖和樂觀鎖
  • 悲觀鎖:你在修改資源時將資源鎖定
  • 樂觀鎖:加一個last update字段
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章