c++常見并且必須記住的問題

一、基礎知識

基本語言

1、說一下static關鍵字的作用

?2、說一下C++和C的區別

3、說一說c++中四種cast轉換

4、請說一下C/C++ 中指針和引用的區別?

5、給定三角形ABC和一點P(x,y,z),判斷點P是否在ABC內,給出思路并手寫代碼

6、怎么判斷一個數是二的倍數,怎么求一個數中有幾個1,說一下你的思路并手寫代碼
7、請你說一下你理解的c++中的smart pointer四個智能指針:

8、請回答一下數組和指針的區別

9、請你回答一下野指針是什么?

10、請你介紹一下C++中的智能指針

11、請你回答一下智能指針有沒有內存泄露的情況

12、請你來說一下智能指針的內存泄漏如何解決

13、請你回答一下為什么析構函數必須是虛函數?為什么C++默認的析構函數不是虛函數

14、請你來說一下函數指針

15、請你來說一下fork函數

16、請你來說一下C++中析構函數的作用

17、請你來說一下靜態函數和虛函數的區別

18、請你來說一說重載和覆蓋

19.、請你說一說strcpy和strlen

20、請你說一說你理解的虛函數和多態

21、請你來回答一下++i和i++的區別

22、請你來說一說++i和i++的實現

23、請你來寫個函數在main函數執行前先運行

34、請你來說一下C++里是怎么定義常量的?常量存放在內存的哪個位置?

25、請你來回答一下const修飾成員函數的目的是什么?

26、請你來說一說隱式類型轉換

27、說說你了解的類型轉換

28、請你來說一說C++函數棧空間的最大值

29、請你來說一說extern“C”

30、請你回答一下new/delete與malloc/free的區別是什么

31、請你說說虛函數表具體是怎樣實現運行時多態的?

32、請你說說C語言是怎么進行函數調用的?

33、請你說說C語言參數壓棧順序?

34、請你說說C++如何處理返回值?

35、請你回答一下C++中拷貝賦值函數的形參能否進行值傳遞?

43、請你回答一下malloc與new區別

36、請你說一說select

37、請你說說fork,wait,exec函數

38、請你回答一下靜態函數和虛函數的區別

容器和算法

1、請你來說一下map和set有什么區別,分別又是怎么實現的

2、請你來介紹一下STL的allocator

3、請你來說一說STL迭代器刪除元素

4、請你說一說STL中MAP數據存放形式

5、請你說說STL中map與unordered_map

6、請你說一說vector和list的區別,應用,越詳細越好

7、請你來說一下STL中迭代器的作用,有指針為何還要迭代器

8、請你說一說epoll原理

9、請你說一說STL中MAP數據存放形式

10、n個整數的無序數組,找到每個元素后面比它大的第一個數,要求時間復雜度為O(N)

11、請你回答一下STL里resize和reserve的區別

類和數據抽象

1.請你來說一下C++中類成員的訪問權限

2、請你來說一下C++中struct和class的區別

3、請你回答一下C++類內可以定義引用數據成員嗎?

面向對象與泛型編程

1、請你回答一下什么是右值引用,跟左值又有什么區別?

2、析構函數可以為 virtual 型,構造函數則不能,為什么?

3、C++中空類默認產生哪些類成員函數?

4、什么是面向對象?

編譯與底層

1、 請你來說一下一個C++源文件從文本到可執行文件經歷的過程?

2、 請你來回答一下include頭文件的順序以及雙引號””和尖括號的區別?

3、 請你回答一下malloc的原理,另外brk系統調用和mmap系統調用的作用分別是什么?

4、 請你說一說C++的內存管理是怎樣的?

5、請你來說一下C++/C的內存分配

6、請你回答一下**如何判斷內存泄漏?

7、請你來說一下什么時候會發生段錯誤

8、請你來回答一下什么是內存泄漏

9、請你來回答一下new和malloc的區別

10、請你來說一下共享內存相關api

11、請你來說一下reactor模型組成

12、請自己設計一下如何采用單線程的方式處理高并發

13、請你說說C++如何處理內存泄漏?

14、請你說說select,epoll的區別,原理,性能,限制都說一說

15、請你說一說C++ STL 的內存優化

C++11

1、請問C++11有哪些新特性?

2、請你詳細介紹一下C++11中的可變參數模板、右值引用這幾個新特性。

二、操作系統

1、請你說一下進程與線程的概念,以及為什么要有進程線程,其中有什么區別,他們各自又是怎么同步的

2、請你說一說Linux虛擬地址空間

3、請你說一說操作系統中的程序的內存結構

4、請你說一說操作系統中的缺頁中斷

5、請你回答一下fork和vfork的區別

6、請問如何修改文件最大句柄數?

7、請你說一說并發(concurrency)和并行(parallelism)

8、請問MySQL的端口號是多少,如何修改這個端口號

9、請你說一說操作系統中的頁表尋址

10、請你說一說有了進程,為什么還要有線程?

11、請問單核機器上寫多線程程序,是否需要考慮加鎖,為什么?

12、請問線程需要保存哪些上下文,SP、PC、EAX這些寄存器是干嘛用的

13、請你說一說線程間的同步方式,最好說出具體的系統調用

14、游戲服務器應該為每個用戶開辟一個線程還是一個進程,為什么?

15、請你說一說OS缺頁置換算法

16、請你說一下多進程和多線程的使用場景

17、請你說一說死鎖發生的條件以及如何解決死鎖

18、請問虛擬內存和物理內存怎么對應

19、請你說一說操作系統中的結構體對齊,字節對齊

20、請問進程間怎么通信

23、請你說一下虛擬內存置換的方式

24、請你說一下多線程,線程同步的幾種方式

25、請你講述一下互斥鎖(mutex)機制,以及互斥鎖和讀寫鎖的區別

26、請你說一說進程狀態轉換圖,動態就緒,靜態就緒,動態阻塞,靜態阻塞

27、A a = new A; a->i = 10;在內核中的內存分配上發生了什么?

28、給你一個類,里面有static,virtual,之類的,來說一說這個類的內存分布

29、請你回答一下軟鏈接和硬鏈接區別

30、請問什么是大端小端以及如何判斷大端小端

31、請你回答一下靜態變量什么時候初始化

32、請你說一說用戶態和內核態區別

33、請問如何設計server,使得能夠接收多個客戶端的請求

34、死循環+來連接時新建線程的方法效率有點低,怎么改進?

35、請問怎么喚醒被阻塞的socket線程?

36、請問怎樣確定當前線程是繁忙還是阻塞?

37、空閑的進程和阻塞的進程狀態會不會在喚醒的時候誤判?

38、請問就緒狀態的進程在等待什么?

39、請你說一說多線程的同步,鎖的機制

40、兩個進程訪問臨界區資源,會不會出現都獲得自旋鎖的情況?

41、假設臨界區資源釋放,如何保證只讓一個線程獲得臨界區資源而不是都獲得?

42、C++的鎖你知道幾種?

43、說一說你用到的鎖

44、請你說一說死鎖產生的必要條件?

45、請你來說一說協程

46、系統調用是什么,你用過哪些系統調用,和庫函數有什么區別?

47、請你來說一說用戶態到內核態的轉化原理

48、請你說一下源碼到可執行文件的過程

49、請你來說一下微內核與宏內核

50、請你說一下僵尸進程

51、請問GDB調試用過嗎,什么是條件斷點

52、請你來介紹一下5種IO模型

53、請你說一說異步編程的事件循環

54、請你回答一下操作系統為什么要分內核態和用戶態

55、請你回答一下為什么要有page cache,操作系統怎么設計的page cache

56、server端監聽端口,但還沒有客戶端連接進來,此時進程處于什么狀態?

57、請問如何設計server,使得能夠接收多個客戶端的請求

58、死循環+來連接時新建線程的方法效率有點低,怎么改進?

59、兩個進程訪問臨界區資源,會不會出現都獲得自旋鎖的情況?

60、假設臨界區資源釋放,如何保證只讓一個線程獲得臨界區資源而不是都獲得?

61、請問怎么實現線程池

62、Linux下怎么得到一個文件的100到200行

63、請你來說一下awk的使用

64、請你來說一下linux內核中的Timer 定時器機制

三、計算機網絡

1、請問怎么確保節點傳輸存儲的可靠性

2、請你說一下TCP怎么保證可靠性,并且簡述一下TCP建立連接和斷開連接的過程

3、請你說一說TCP的模型,狀態轉移

4、請回答一下HTTP和HTTPS的區別,以及HTTPS有什么缺點?

5、請你說一說HTTP和HTTPS的不同

6、請你說一說HTTP返回碼

7、請你說一說IP地址作用,以及MAC地址作用

8、請介紹一下操作系統中的中斷

9、請回答OSI七層模型和TCP/IP四層模型,每層列舉2個協議

10、請你說一說TCP的三次握手和四次揮手的過程及原因

11、搜索baidu,會用到計算機網絡中的什么層?每層是干什么的

12、請你說一說TCP擁塞控制?以及達到什么情況的時候開始減慢增長的速度?

13、請問TCP用了哪些措施保證其可靠性

14、請你說說TCP/IP數據鏈路層的交互過程

15、請你說說傳遞到IP層怎么知道報文該給哪個應用程序,它怎么區分UDP報文還是TCP報文

16、請問你有沒有基于做過socket的開發?具體網絡層的操作該怎么做?(其實就是網絡編程的基本步驟)

17、請問server端監聽端口,但還沒有客戶端連接進來,此時進程處于什么狀態?

18、請問TCP三次握手是怎樣的?

19、請問tcp握手為什么兩次不可以?為什么不用四次?

22、請你來說一下TCP擁塞控制?

20、TCP和UDP的區別和各自適用的場景

21、請你來說一下TCP三次握手四次揮手的過程,為什么tcp連接握手需要三次, time_wait狀態

22、請你來說一說http協議

23、請你來說一下GET和POST的區別

24、請你來說一下socket編程中服務器端和客戶端主要用到哪些函數

25、請你來說一下數字證書是什么,里面都包含那些內容

26、請你來介紹一下UDP的connect函數

27、請你講述一下TCP三次握手,四次揮手,以及為什么用三次握手?

28、請你說一下阻塞,非阻塞,同步,異步

29、請你講述一下Socket編程的send() recv() accept() socket()函數?

30、請你說一下http協議會話結束標志怎么截出來?

31、time_wait狀態什么時候產生?有什么危害?

32、linux如何觀察連接狀態?

四、數據庫

數據庫基礎

1、請你說一下數據庫事務以及四個特性

2、請你說一說數據庫的三大范式

3、請你介紹一下數據庫的ACID特性

4、請你說一說數據庫索引

5、請你說一說數據庫事務

6、請你說一說數據庫事務隔離

7、請你說一說inner join和left join

8、請你聊一聊數據庫事物的一致性

9、請你說說索引是什么,多加索引一定會好嗎

10、k-v存儲中,key有哪些要求?

11、介紹數據庫中的WAL技術

Mysql

1.請你說一說mysql的四種隔離狀態

2.請你介紹一下mysql的MVCC機制

3、請問SQL優化方法有哪些

4、請你說一下MySQL引擎和區別

5、知道SQL注入嗎?有哪些防御手段?

Redis

1.請你回答一下mongodb和redis的區別

2、請你來說一說Redis的定時機制怎么實現的

3、請你來說一說Redis是單線程的,但是為什么這么高效呢?

4、請問Redis的數據類型有哪些,底層怎么實現?

5、請問Redis的rehash怎么做的,為什么要漸進rehash,漸進rehash又是怎么實現的?

6、請問Redis怎么實現的定期刪除功能

7、redis的持久化方式有哪幾種,分別有什么特點?

五、算法與數據結構

1、請你來說一說紅黑樹和AVL樹的定義,特點,以及二者區別

2、請你聊一聊哈夫曼編碼

3、請你回答一下map底層為什么用紅黑樹實現

4、請你介紹一下B+樹

5、請你回答一下map和unordered_map優點和缺點

6、請你回答一下epoll怎么實現的

7、請你說一說紅黑樹的性質還有左右旋轉

8、請你說一說紅黑樹的原理以及erase以后迭代器的具體分布情況?

9、請你實現二叉樹的層序遍歷并輸出

堆與棧

1、請說一說你理解的stack overflow,并舉個簡單例子導致棧溢出

2、請你回答一下棧和堆的區別,以及為什么棧要快

3、手寫代碼:兩個棧實現一個隊列

4、請你來說一下堆和棧的區別

5、請你說一說小根堆特點

數組

1、請你回答一下Array&List, 數組和鏈表的區別

2、一個長度為N的整形數組,數組中每個元素的取值范圍是[0,n-1],判斷該數組否有重復的數,請說一下你的思路并手寫代碼

排序

1、請你手寫一下快排的代碼,快排的最差復雜度是怎么樣的?如何避免?

2、請問求第k大的數的方法以及各自的復雜度是怎樣的,另外追問一下,當有相同元素時,還可以使用什么不同的方法求第k大的元素

3、請你來介紹一下各種排序算法及時間復雜度

4、請問海量數據如何去取最大的k個

5、請問快排的時間復雜度最差是多少?什么時候時間最差

6、請你介紹一下快排算法;以及什么是穩定性排序,快排是穩定性的嗎;快排算法最差情況推導公式

哈希

1、請你來說一說hash表的實現,包括STL中的哈希桶長度常數。

2、請你回答一下hash表如何rehash,以及怎么處理其中保存的資源

3、請你說一下哈希表的桶個數為什么是質數,合數有何不妥?

4、請你說一下解決hash沖突的方法

動態規劃

1、請你手寫代碼:最長公共連續子序列

2、手寫代碼:求一個字符串最長回文子串

3、手寫代碼:查找最長回文子串

鏈表

1、請你手寫代碼,如何合并兩個有序鏈表

2、手寫代碼:反轉鏈表

3、判斷一個鏈表是否為回文鏈表,說出你的思路并手寫代碼

4、請你手寫鏈表反轉

5、什么是單向鏈表,如何判斷兩個單向鏈表是否相交

高級算法

1、如果讓你做自然語言理解(NLU),在處理語言規則的時候大概會用到什么算法

2、請問加密方法都有哪些

3、什么是LRU緩存

4、請你說一說洗牌算法

字符串

1、給你一個字符串,找出第一個不重復的字符,如“abbbabcd”,則第一個不重復就是c

2、翻轉字符串

3、字符串轉整數

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

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

相關文章

網絡中典型協議--(DNS,輸入url后, 發生的事情. ,ICMP,NAT)

DNS(Domain Name System) DNS是一整套從域名映射到IP的系統 域名服務器發展背景 TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶. 于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機…

高級IO--1 ---(五種典型IO,阻塞IO,非阻塞IO,信號驅動IO,異步IO, IO多路轉接)

高級IO: 五種典型IO: 阻塞IO/非阻塞IO/信號驅動IO/異步IO/IO多路轉接 IO多路轉接模型:select/poll/epoll 五種典型IO 阻塞IO IO操作的流程:等待IO操作條件具備,然后進行數據拷貝 為了完成IO操作發起調用&#xff…

IO多路轉接模型----(select的模型,select的優缺點,poll的模型,poll的優缺點)

IO多路轉接模型:select/poll/epoll 對大量描述符進行事件監控(可讀/可寫/異常) select模型 用戶定義描述符的事件監控集合 fd_set(這是一個位圖,用于存儲要監控的描述符); 用戶將需要監控的描述符添加到集合中,這個描…

IO多路轉接模型-----epoll

epoll: Linux下性能最高的多路轉接模型 epoll 有3個相關的系統調用. epoll_create 功能:創建epoll,在內核中創建eventpoll結構體,size決定了epoll最多監控多少個描述符,在Linux2.6.8之后被忽略,但是必須…

再寫順序表(c語言實現,外加冒泡排序,二分查找)

概念 順序表是用一段物理地址連續的存儲單元依次存儲數據元素的線性結構,一般情況下采用數組存儲。在數組 上完成數據的增刪查改。 順序表一般可以分為: 靜態順序表:使用定長數組存儲。動態順序表:使用動態開辟的數組存儲。 頭…

再寫單鏈表(不帶頭單鏈表)

單鏈表 實際中鏈表的結構非常多樣,以下情況組合起來就有8種鏈表結構: 單向、雙向帶頭、不帶頭循環、非循環 雖然有這么多的鏈表的結構,但是我們實際中最常用還是兩種結構: 無頭單向非循環鏈表:結構簡單&#xff0…

再寫雙向循環鏈表

#pragma once #include<assert.h> #include<malloc.h> #include<stdio.h> typedef int DLDataType;//定義鏈表結點結構 typedef struct DListNode{DLDataType value;struct DListNode *prev; //指向前一個結點struct DListNode *next; //指向后一個結點 } DL…

鏈表題目--1 刪除鏈表中所有等于val的值

注意事項 要刪除的結點相鄰第一個結點就是要刪除的結點 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* removeElements(struct ListNode* head, int val){if(headNULL){return NULL;}struct …

鏈表題目--2 求鏈表的中間結點 和 求鏈表中倒數第k個結點

求鏈表的中間結點 思路 一個走兩步&#xff0c;一個走一步。一個走到尾&#xff0c;另外一個就走到了中間 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* middleNode(struct ListNode* head…

鏈表題目---3 合并兩個有序單鏈表 和 分割鏈表

合并兩個有序單鏈表 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){if(l1 NULL){return l2;}else if(l2 NULL){return l1;}struc…

鏈表題目---4 刪除鏈表中重復的結點 和 判斷鏈表是否為回文鏈表

刪除鏈表中重復的結點 /* struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {} }; */ class Solution { public:ListNode* deleteDuplication(ListNode* pHead){if(pHead NULL){return NULL;}ListNode *prev NULL; //用于刪除的結點, 是…

鏈表題目----5 相交鏈表 和 環形鏈表 和 返回鏈表開始入環的第一個節點

相交鏈表 思路 鏈表交叉不可能是x型因為有可能兩個鏈表不等長&#xff0c;所以我們必須讓他們從同一起跑位置去起跑從同一起跑位置出發&#xff0c;依次比較每個結點的地址是否相同 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct L…

鏈表題目---6 復制帶隨機指針的鏈表

思路 將新結點放在老結點的后面 復制random 將鏈表拆開 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node() {}Node(int _val, Node* _next, Node* _random) {val _val;next _next;random _random;} }; */ class Solution { publi…

括號匹配問題(c和c++版本實現)

括號匹配問題 思路 遇見左括號入棧&#xff0c;遇見一個右括號彈出棧頂元素右括號入棧前如果棧已經為空&#xff0c;則不匹配如果不為空則讀取并彈出&#xff0c;彈出來的元素與右括號做比較&#xff0c;必須匹配&#xff0c;不匹配返回false;如果最后棧里還有元素&#xff0c…

用隊列實現棧 AND 用棧實現隊列

用隊列實現棧 思路 入隊列就是入棧出隊列的時候&#xff0c;就是把前面size-1個隊列中的元素先出&#xff0c;這樣最后一個元素就成隊首元素了&#xff0c;再把出去的元素再次入隊列讀棧頂元素&#xff0c;過程和第二步是一樣的&#xff0c;就是彈出后&#xff0c;再把它入隊列…

最小棧的實現(設計一個支持 push,pop,top 操作,并能在常數時間內檢索到最小元素的棧。)

最小棧的實現 思路 兩個棧&#xff0c;左邊棧接受元素&#xff0c;右邊棧存最小的元素入棧時&#xff0c;先入左邊棧&#xff0c;隨后進行比較&#xff0c;左邊和右邊棧頂元素進行比較&#xff0c;如果新元素小&#xff0c;就把新元素放在右邊的棧頂位置&#xff0c;如果新元素…

再寫循環隊列----c++實現

再寫循環隊列 class MyCircularQueue { public:/** Initialize your data structure here. Set the size of the queue to be k. */MyCircularQueue(int k) {array (int *)malloc(sizeof(int)*k);capacity k;size 0;front 0;rear 0;}/** Insert an element into the circu…

再談二叉樹(二叉樹概念,二叉樹的性質,二叉樹的存儲結構)

樹的概念 樹的概念 樹是一種非線性的數據結構&#xff0c;它是由n&#xff08;n>0&#xff09;個有限結點組成一個具有層次關系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹&#xff0c;也就是說它是根朝上&#xff0c;而葉朝下的。它具有以下的特點&#xff1a;每個…

二叉樹題目----1 前序中序后序遍歷二叉樹并返回相應的遍歷(不是打印)

前序遍歷 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*//*** Note: The returned array must be malloced, assume caller calls free().*/ int *array; int size;void _preorde…

二叉樹題目----2 檢查兩顆樹是否相同 和 對稱二叉樹的判定

檢查兩顆樹是否相同 思路 根要相等 p->val q->val左子樹相等 isSameTree(p->left,q->left)右子樹也要相等 isSameTree(p->right,q->right) /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* …