面試常見(jiàn)問(wèn)題匯總

派生類(lèi)和基類(lèi)中有同名的函數(shù)屯远,但非虛函數(shù)〔端洌基類(lèi)指針會(huì)調(diào)用哪個(gè)的函數(shù)慨丐,如何調(diào)用另一個(gè)類(lèi)的這個(gè)函數(shù)呢。如果是虛函數(shù)有會(huì)怎樣呢泄私?

答:派生類(lèi)和基類(lèi)中有同名的函數(shù)房揭,但非虛函數(shù)∩味耍基類(lèi)指針會(huì)調(diào)用基類(lèi)的函數(shù)捅暴。當(dāng)如果是虛函數(shù)的話,則要看基類(lèi)指針指向的是派生類(lèi)還是基類(lèi)咧纠。是誰(shuí)就調(diào)用誰(shuí)的蓬痒。子類(lèi)不是現(xiàn)基類(lèi)的函數(shù)。會(huì)調(diào)用基類(lèi)的函數(shù)惧盹,基類(lèi)指針指向子類(lèi)對(duì)象乳幸,調(diào)用非虛函數(shù)函數(shù)時(shí),會(huì)調(diào)用基類(lèi)函數(shù)钧椰〈舛希基類(lèi)指針可以通過(guò)子類(lèi)的虛函數(shù)調(diào)用子類(lèi)的非虛函數(shù)。

虛函數(shù)表指針在頭部還是在哪 跟編譯器有關(guān)嗎嫡霞?

** 答:****虛函數(shù)的地址存放于虛函數(shù)表之中瓶埋。運(yùn)行期多態(tài)就是通過(guò)虛函數(shù)和虛函數(shù)表實(shí)現(xiàn)的。**

類(lèi)的對(duì)象內(nèi)部會(huì)有指向類(lèi)內(nèi)部的虛表地址的指針诊沪。通過(guò)這個(gè)指針調(diào)用虛函數(shù)养筒。目前gcc 和微軟的編譯器都是將vptr放在對(duì)象內(nèi)存布局的最前面。

函數(shù)重載的條件

答:同一個(gè)作用域下 ****函數(shù)名稱相同 ****函數(shù)參數(shù)類(lèi)型不同 或者 個(gè)數(shù)不同 或者 順序不同 函數(shù)的返回值不可以作為函數(shù)重載的條件

STL容器常見(jiàn)的時(shí)間復(fù)雜度端姚。

map, set, multimap, and multiset

上述四種容器采用紅黑樹(shù)實(shí)現(xiàn)晕粪,紅黑樹(shù)是平衡二叉樹(shù)的一種。不同操作的時(shí)間復(fù)雜度近似為:

插入: O(logN) ****查看:O(logN) ****刪除:O(logN)

hash_map, hash_set, hash_multimap, and hash_multiset

上述四種容器采用哈希表實(shí)現(xiàn)渐裸,不同操作的時(shí)間復(fù)雜度為:

插入:O(1)巫湘,最壞情況O(N)。 ****查看:O(1)昏鹃,最壞情況O(N)尚氛。 ****刪除:O(1),最壞情況O(N)洞渤。

多繼承虛函數(shù)表

答:多繼承情況下阅嘶,派生類(lèi)中有多個(gè)虛函數(shù)表,虛函數(shù)的排列方式和繼承的順序一致载迄。派生類(lèi)重寫(xiě)函數(shù)將會(huì)覆蓋所有虛函數(shù)表的同名內(nèi)容讯柔,派生類(lèi)自定義新的虛函數(shù)將會(huì)在第一個(gè)類(lèi)的虛函數(shù)表的后面進(jìn)行擴(kuò)充抡蛙。

深拷貝、淺拷貝

深拷貝優(yōu)點(diǎn):每一個(gè)對(duì)象的指針都有指向的內(nèi)存空間磷杏,而不是共享溜畅,所以在對(duì)象析構(gòu)的時(shí)候就不存在重復(fù)釋放和內(nèi)存泄漏的問(wèn)題。

缺點(diǎn):內(nèi)存開(kāi)銷(xiāo)大

淺拷貝優(yōu)點(diǎn):通過(guò)拷貝構(gòu)造函數(shù)實(shí)例化對(duì)象的時(shí)候极祸,指針數(shù)據(jù)變量指向共享的內(nèi)存空間慈格,也就是拷貝的時(shí)候采用了值傳遞的方式,因此內(nèi)存開(kāi)銷(xiāo)小

缺點(diǎn):對(duì)象析構(gòu)的時(shí)候就可能會(huì)重復(fù)釋放或造成內(nèi)存泄漏遥金;

strcpy()的代碼實(shí)現(xiàn)

其安全版本為strcpy_s()函數(shù)浴捆,(第二個(gè)參數(shù),為字符串dst的長(zhǎng)度)稿械。

image

多進(jìn)程與多線程的區(qū)別

強(qiáng)相關(guān)的處理用線程选泻,弱相關(guān)的處理用進(jìn)程。

線程同步方式:互斥鎖美莫、條件變量页眯、信號(hào)量,讀寫(xiě)鎖

1>互斥鎖:一個(gè)時(shí)間內(nèi)只準(zhǔn)一個(gè)線程進(jìn)入關(guān)鍵代碼

2>條件變量:利用線程之間共享一個(gè)全局變量是實(shí)現(xiàn)同步厢呵;基本操作有:觸發(fā)條件(當(dāng)條件為true時(shí))窝撵,等待條件,掛起線程直到其他線程觸發(fā)條件

3> 信號(hào)量:跟進(jìn)程的信號(hào)量一樣

4>讀寫(xiě)鎖:多個(gè)讀鎖可以共享一個(gè)臨界區(qū)襟铭,寫(xiě)鎖與寫(xiě)鎖互斥碌奉,寫(xiě)鎖與讀鎖互斥

image

哈希沖突產(chǎn)生的原因

哈希是通過(guò)對(duì)數(shù)據(jù)進(jìn)行再壓縮,提高效率的一種解決方法寒砖。但由于通過(guò)哈希函數(shù)產(chǎn)生的哈希值是有限的赐劣,而數(shù)據(jù)可能比較多,導(dǎo)致經(jīng)過(guò)哈希函數(shù)處理后仍然有不同的數(shù)據(jù)對(duì)應(yīng)相同的值哩都。這時(shí)候就產(chǎn)生了哈希沖突魁兼。

1.開(kāi)放地址方法:就是在發(fā)生沖突的key上加1或者n的平方或者一個(gè)隨機(jī)值;

2.鏈?zhǔn)降刂贩ǎ℉ashMap的哈希沖突解決方法):對(duì)于相同的值漠嵌,使用鏈表進(jìn)行連接璃赡。使用數(shù)組存儲(chǔ)每一個(gè)鏈表。

3.建立公共溢出區(qū): 建立公共溢出區(qū)存儲(chǔ)所有哈希沖突的數(shù)據(jù)献雅。

4.再哈希法:對(duì)于沖突的哈希值再次進(jìn)行哈希處理,直至沒(méi)有哈希沖突塌计。

static

**答:分為兩種 **

面向過(guò)程中的static:

static局部變量 將一個(gè)變量聲明為函數(shù)的局部變量挺身,那么這個(gè)局部變量在函數(shù)執(zhí)行完成之后不會(huì)被釋放,而是繼續(xù)保留在內(nèi)存中

static 全局變量 表示一個(gè)變量在當(dāng)前文件的全局內(nèi)可訪問(wèn)

static 函數(shù) 表示一個(gè)函數(shù)只能在當(dāng)前文件中被訪問(wèn)

(1)函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體锌仅,該變量的內(nèi)存只被分配一次章钾,因此其值在下次調(diào)用時(shí)仍維持上次的值墙贱;

(2)在模塊內(nèi)的static全局變量和函數(shù)可以被模塊內(nèi)的函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn)贱傀;

面向?qū)ο蟮膕tatic關(guān)鍵字:static對(duì)象 類(lèi)內(nèi)聲明 類(lèi)外初始化 編譯階段分配內(nèi)存 所有對(duì)象共享同一份數(shù)據(jù)惨撇。

** static函數(shù):在類(lèi)中的static成員函數(shù)屬于整個(gè)類(lèi)所擁有,這個(gè)函數(shù)不接收this指針府寒,只能調(diào)用static成員變量魁衙;程序共享同一個(gè)函數(shù)。**

const:

const 常量:定義時(shí)就初始化株搔,以后不能更改剖淀。

const 形參:func(const int a){};該形參在函數(shù)里不能改變

const修飾類(lèi)成員函數(shù):該函數(shù)對(duì)成員變量只能進(jìn)行只讀操作

(1)阻止一個(gè)變量被改變

(2)聲明常量指針和指針常量

(3)const修飾形參,表明它是一個(gè)輸入?yún)?shù)纤房,在函數(shù)內(nèi)部不能改變其值纵隔;

(4)對(duì)于類(lèi)的成員函數(shù),若指定其為const類(lèi)型炮姨,則表明其是一個(gè)常函數(shù)捌刮,不能修改類(lèi)的成員變量;

(5)對(duì)于類(lèi)的成員函數(shù)舒岸,有時(shí)候必須指定其返回值為const類(lèi)型绅作,以使得其返回值不為”左值”。

extern

只是用來(lái)獲取全局變量(包括全局靜態(tài)變量)的值吁津,不能用于定義變量棚蓄,先在當(dāng)前文件查找有沒(méi)有全局變量,沒(méi)有找到碍脏,才會(huì)去其他文件查找梭依。

排序算法的穩(wěn)定性

答:選擇排序、快速排序典尾、希爾排序役拴、堆排序不是穩(wěn)定的排序算法,而冒泡排序钾埂、插入排序河闰、歸并排序和基數(shù)排序是穩(wěn)定的排序算法。

image

空指針和野指針:

答:空指針指針變量指向內(nèi)存中編號(hào)為0的空間褥紫,一般用來(lái)初始化指針變量姜性,空指針指向的內(nèi)存是不可以訪問(wèn)的。

** 野指針是指針變量指向已銷(xiāo)毀或者受限的內(nèi)存地址(隨機(jī)的空間)髓考,不能通過(guò)是否為null來(lái)判斷部念。當(dāng)指針初始化沒(méi)有置空時(shí),也會(huì)產(chǎn)生野指針±芰叮或者指針超越了作用域妓湘。**


map/unordered_map的區(qū)別

內(nèi)部實(shí)現(xiàn)機(jī)理不同

map: map內(nèi)部實(shí)現(xiàn)了一個(gè)紅黑樹(shù)(紅黑樹(shù)是非嚴(yán)格平衡二叉搜索樹(shù),而AVL是嚴(yán)格平衡二叉搜索樹(shù))乌询,紅黑樹(shù)具有自動(dòng)排序的功能榜贴,因此map內(nèi)部的所有元素都是有序的,紅黑樹(shù)的每一個(gè)節(jié)點(diǎn)都代表著map的一個(gè)元素妹田。因此唬党,對(duì)于map進(jìn)行的查找,刪除秆麸,添加等一系列的操作都相當(dāng)于是對(duì)紅黑樹(shù)進(jìn)行的操作初嘹。map中的元素是按照二叉搜索樹(shù)(又名二叉查找樹(shù)、二叉排序樹(shù)沮趣,特點(diǎn)就是左子樹(shù)上所有節(jié)點(diǎn)的鍵值都小于根節(jié)點(diǎn)的鍵值屯烦,右子樹(shù)所有節(jié)點(diǎn)的鍵值都大于根節(jié)點(diǎn)的鍵值)存儲(chǔ)的,使用中序遍歷可將鍵值按照從小到大遍歷出來(lái)房铭。

unordered_map: unordered_map內(nèi)部實(shí)現(xiàn)了一個(gè)哈希表(也叫散列表驻龟,通過(guò)把關(guān)鍵碼值映射到Hash表中一個(gè)位置來(lái)訪問(wèn)記錄,查找的時(shí)間復(fù)雜度可達(dá)到O(1)缸匪,其在海量數(shù)據(jù)處理中有著廣泛應(yīng)用)翁狐。因此,其元素的排列順序是無(wú)序的凌蔬。哈希表詳細(xì)介紹

優(yōu)缺點(diǎn)以及適用處

map:

優(yōu)點(diǎn):

有序性露懒,這是map結(jié)構(gòu)最大的優(yōu)點(diǎn),其元素的有序性在很多應(yīng)用中都會(huì)簡(jiǎn)化很多的操作

紅黑樹(shù)砂心,內(nèi)部實(shí)現(xiàn)一個(gè)紅黑書(shū)使得map的很多操作在lgn的時(shí)間復(fù)雜度下就可以實(shí)現(xiàn)懈词,因此效率非常的高

缺點(diǎn): 空間占用率高,因?yàn)閙ap內(nèi)部實(shí)現(xiàn)了紅黑樹(shù)辩诞,雖然提高了運(yùn)行效率坎弯,但是因?yàn)槊恳粋€(gè)節(jié)點(diǎn)都需要額外保存父節(jié)點(diǎn)、孩子節(jié)點(diǎn)和紅/黑性質(zhì)译暂,使得每一個(gè)節(jié)點(diǎn)都占用大量的空間

適用處:對(duì)于那些有順序要求的問(wèn)題抠忘,用map會(huì)更高效一些

unordered_map:

優(yōu)點(diǎn): 因?yàn)閮?nèi)部實(shí)現(xiàn)了哈希表,因此其查找速度非常的快

缺點(diǎn): 哈希表的建立比較耗費(fèi)時(shí)間

適用處:對(duì)于查找問(wèn)題外永,unordered_map會(huì)更加高效一些崎脉,因此遇到查找問(wèn)題,常會(huì)考慮一下用unordered_map

總結(jié):

內(nèi)存占有率的問(wèn)題就轉(zhuǎn)化成紅黑樹(shù) VS hash表 , 還是unorder_map占用的內(nèi)存要高伯顶。

但是unordered_map執(zhí)行效率要比map高很多

對(duì)于unordered_map或unordered_set容器荧嵌,其遍歷順序與創(chuàng)建該容器時(shí)輸入的順序不一定相同呛踊,因?yàn)楸闅v是按照哈希表從前往后依次遍歷的

map和unordered_map的使用

unordered_map的用法和map是一樣的,提供了 insert啦撮,size,count等操作汪厨,并且里面的元素也是以pair類(lèi)型來(lái)存貯的赃春。其底層實(shí)現(xiàn)是完全不同的,上方已經(jīng)解釋了劫乱,但是就外部使用來(lái)說(shuō)卻是一致的织中。


strcpy和memcpy和strncpy

strcpy和memcpy主要有以下3方面的區(qū)別。

1衷戈、復(fù)制的內(nèi)容不同狭吼。strcpy只能復(fù)制字符串,而memcpy可以復(fù)制任意內(nèi)容殖妇,例如字符數(shù)組刁笙、整型、結(jié)構(gòu)體谦趣、類(lèi)等疲吸。

2、復(fù)制的方法不同前鹅。strcpy不需要指定長(zhǎng)度摘悴,它遇到被復(fù)制字符的串結(jié)束符"\0"才結(jié)束,所以容易溢出舰绘。memcpy則是根據(jù)其第3個(gè)參數(shù)決定復(fù)制的長(zhǎng)度蹂喻。

3、用途不同捂寿。通常在復(fù)制字符串時(shí)用strcpy口四,而需要復(fù)制其他類(lèi)型數(shù)據(jù)時(shí)則一般用memcpy

strncpy 的標(biāo)準(zhǔn)用法為:(手工寫(xiě)上 \0)

strncpy(path, src, sizeof(path) - 1);

path[sizeof(path) - 1] = '\0';

len = strlen(path);

1. 好的程序猿用strncpy, 先定義并初始化char str[MAX + 1] = {0};者蠕, 如果在程序中間需要再往str中拷貝串窃祝,一定要用memset清零。 拷貝范式為:strncpy(str, p, sizeof(str) - 1); , 流氓程序猿用strcpy踱侣, 當(dāng)然我經(jīng)常在寫(xiě)博客時(shí)這么干.

2. strncpy拷貝的是字符粪小,不拷貝串,所以最后一個(gè)\0沒(méi)有拷貝抡句,所以探膊,拷貝的時(shí)候需要對(duì)串進(jìn)行清零處理,一定要養(yǎng)成好習(xí)慣待榔。

3. strncpy拷貝時(shí)逞壁,可能會(huì)導(dǎo)致截?cái)嗔骷茫绦虿粫?huì)崩潰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腌闯,一起剝皮案震驚了整個(gè)濱河市绳瘟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姿骏,老刑警劉巖糖声,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異分瘦,居然都是意外死亡蘸泻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)嘲玫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悦施,“玉大人,你說(shuō)我怎么就攤上這事去团÷盏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵渗勘,是天一觀的道長(zhǎng)沐绒。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旺坠,這世上最難降的妖魔是什么乔遮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮取刃,結(jié)果婚禮上蹋肮,老公的妹妹穿的比我還像新娘。我一直安慰自己璧疗,他們只是感情好坯辩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著崩侠,像睡著了一般漆魔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上却音,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天改抡,我揣著相機(jī)與錄音,去河邊找鬼系瓢。 笑死阿纤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夷陋。 我是一名探鬼主播欠拾,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼胰锌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了藐窄?” 一聲冷哼從身側(cè)響起资昧,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎荆忍,沒(méi)想到半個(gè)月后榛搔,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡东揣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腹泌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘶卧。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖凉袱,靈堂內(nèi)的尸體忽然破棺而出芥吟,到底是詐尸還是另有隱情,我是刑警寧澤专甩,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布钟鸵,位于F島的核電站,受9級(jí)特大地震影響涤躲,放射性物質(zhì)發(fā)生泄漏棺耍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一种樱、第九天 我趴在偏房一處隱蔽的房頂上張望蒙袍。 院中可真熱鬧,春花似錦嫩挤、人聲如沸害幅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)以现。三九已至,卻和暖如春约啊,著一層夾襖步出監(jiān)牢的瞬間邑遏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工棍苹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留无宿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓枢里,卻偏偏與公主長(zhǎng)得像孽鸡,于是被迫代替她去往敵國(guó)和親蹂午。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354