C++:
多態(tài):
多態(tài)性都有哪些?(靜態(tài)和動(dòng)態(tài),然后分別敘述了一下虛函數(shù)和函數(shù)重載)
c語(yǔ)言和c++有什么區(qū)別?(大體講了 一下,繼承、多態(tài)、封裝、異常處理等)
C++多態(tài)怎么實(shí)現(xiàn)的?C++的虛表存放在哪里?
虛函數(shù)相關(guān),虛析構(gòu)函數(shù),運(yùn)行時(shí)多態(tài)。
多態(tài)是怎么樣的?寫個(gè)樣例?
虛函數(shù)的內(nèi)存管理(常見(jiàn)問(wèn)題,建議把虛函數(shù)表、多態(tài)的實(shí)現(xiàn)過(guò)程這些都講一講)
C++ 與C/java:
c語(yǔ)言和c++有什么區(qū)別?(大體講了 一下,繼承、多態(tài)、封裝、異常處理等)
Java的是怎樣解決循環(huán)引用的,那C++怎么解決呢
c++中有哪四種類型轉(zhuǎn)換,舉例說(shuō)明,
四種類型轉(zhuǎn)換機(jī)制?
靜態(tài)成員函數(shù)和數(shù)據(jù)成員有什么意義?
全局與局部靜態(tài)變量區(qū)別(感覺(jué)面試官是想問(wèn)比較深入的內(nèi)容,但我當(dāng)時(shí)就答了作用域以及內(nèi)存分配......請(qǐng)大神指點(diǎn))
全局變量 | 靜態(tài)全局變量 | 靜態(tài)局部變量 | 局部變量 | |
---|---|---|---|---|
數(shù)據(jù)保存位置 | 內(nèi)存靜態(tài)儲(chǔ)存區(qū) | 內(nèi)存靜態(tài)儲(chǔ)存區(qū) | 內(nèi)存靜態(tài)儲(chǔ)存區(qū) | 內(nèi)存的棧區(qū) |
作用域 | 整個(gè)工程文件內(nèi) | 定義他的文件內(nèi) | 定義他的函數(shù)內(nèi)(程序僅分配一次內(nèi)存,函數(shù)返回后數(shù)據(jù)不會(huì)清零 | 定義他的函數(shù)內(nèi),但函數(shù)返回后會(huì)失效 |
初始化值 | 0 | 0 | 0 | 不可知 |
類如何實(shí)現(xiàn)只能靜態(tài)分配和只能動(dòng)態(tài)分配(前者是把new、delete運(yùn)算符重載為private屬性。后者是把構(gòu)造、析構(gòu)函數(shù)設(shè)為protected屬性,再用子類來(lái)動(dòng)態(tài)創(chuàng)建)
-
C++標(biāo)準(zhǔn)庫(kù)的sort做了哪些優(yōu)化,用sort處理文本的各種參數(shù)
參考:sort源碼剖析- 在數(shù)據(jù)量很大時(shí)采用正常的快速排序,此時(shí)效率為O(logN)。
- 一旦分段后的數(shù)據(jù)量小于某個(gè)閾值,就改用插入排序,因?yàn)榇藭r(shí)這個(gè)分段是基本有序的,這時(shí)效率可達(dá)O(N)。
- 在遞歸過(guò)程中,如果遞歸層次過(guò)深,分割行為有惡化傾向時(shí),它能夠自動(dòng)偵測(cè)出來(lái),使用堆排序來(lái)處理,在此情況下,使其效率維持在堆排序的O(N logN),但這又比一開(kāi)始使用堆排序好。
const關(guān)鍵字的作用?(const成員函數(shù),函數(shù)傳遞,和define的區(qū)別)
const在類中方法后面的作用,想改變成員的值怎么做。
const int *, int * const有啥區(qū)別
const char* fff(const char * const t ) const;每個(gè)const的作用
new與malloc的區(qū)別,delet和free的區(qū)別?
如何實(shí)現(xiàn)申請(qǐng)一大片連續(xù)空間,避免多次使用new等調(diào)用(當(dāng)時(shí)說(shuō)的是allocator,不知道還有沒(méi)有其他答案)
淺拷貝與深拷貝(介紹完按位拷貝等內(nèi)容后,最好再指出按位拷貝會(huì)導(dǎo)致內(nèi)存多次釋放等風(fēng)險(xiǎn))
空類默認(rèn)生成哪些函數(shù)(構(gòu)造函數(shù)、析構(gòu)函數(shù)、拷貝構(gòu)造函數(shù)、以及拷貝賦值函數(shù),參考《Effective C++》)
l 必須在構(gòu)造函數(shù)初始化式里進(jìn)行初始化的數(shù)據(jù)成員有哪些?
操作符重載(+操作符),具體如何去定義,?(讓把操作符重載函數(shù)原型說(shuō)一遍)
new 重載?
編譯器如何識(shí)別函數(shù)重載(overload,不是override)
深層復(fù)制與淺層復(fù)制?
類的封裝:private,protected,public
迭代器刪除元素的會(huì)發(fā)生什么?
為什么要用static_cast轉(zhuǎn)換而不用c語(yǔ)言中的轉(zhuǎn)換?
內(nèi)存溢出有那些因素?
模版特化的概念,為什么特化?
explicit是干什么用的?
異常機(jī)制是怎么回事?
如何實(shí)現(xiàn)只能動(dòng)態(tài)分配類對(duì)象,不能定義類對(duì)象?(這個(gè)牛客上的題目,我把如何只能動(dòng)態(tài)分配和只能靜態(tài)分配都講了一下)
繼承機(jī)制中對(duì)象之間是如何轉(zhuǎn)換的?、
鏈接指示:extern “C”(作用)
內(nèi)聯(lián)函數(shù)(講了一下內(nèi)聯(lián)函數(shù)的優(yōu)點(diǎn)以及和宏定義的區(qū)別)
模版怎么實(shí)現(xiàn)?
-
內(nèi)存對(duì)齊的原則?(原則敘述了一下并舉例說(shuō)明)
·sizeof原則:
1.vector與string只返回類型固定大小:vector<int> a(10); vectro<string> b; string c = "dfdfdfd"; string d = "sd"; map<int,string> e; sizeof(a) = 16; sizeof(b) = 16; sizeof(c) = 28; sizeof(b) = 28; sizeof(e) = 12; int f[10]; sizeof(f) = 40; sizeof(f)/sizeof(f[0]) = 10;(元素個(gè)數(shù))
Lambda
volatile關(guān)鍵字的作用,被質(zhì)疑這個(gè)關(guān)鍵字真的有用嗎
虛函數(shù):
虛函數(shù)、純虛函數(shù)、虛函數(shù)與析構(gòu)函數(shù)?(純虛函數(shù)如何定義,為什么析構(gòu)函數(shù)要定義成虛函數(shù))
虛函數(shù),虛函數(shù)表里面內(nèi)存如何分配)?
C++中虛函數(shù)與虛繼承,指針與引用區(qū)別,C++11了解不,泛型編程用過(guò)沒(méi)有,override是做什么的,智能指針介紹下,一般怎么調(diào)試程序,用什么工具。
虛函數(shù),虛表,虛析構(gòu)函數(shù),派生類的虛表,override之后怎么樣,純虛基類的實(shí)例對(duì)象大小
C++虛函數(shù)的實(shí)現(xiàn)
C++內(nèi)存模型,類的數(shù)據(jù)放在什么地方,類的函數(shù)放在什么地方,虛函數(shù)表,虛函數(shù)表指針,虛繼承情況下的虛函數(shù)表,
虛函數(shù)表指針初始化是在什么時(shí)候
四種類型轉(zhuǎn)換(static_cast, dynamic_cast,const_cast,reinterpret_cast)
虛析構(gòu)函數(shù)
編譯器如何判斷兩個(gè)類的指針或引用轉(zhuǎn)換是不是父子類(虛函數(shù)表之前會(huì)有類型信息)
構(gòu)造函數(shù)中可以調(diào)用虛函數(shù)方法嗎
虛函數(shù)的內(nèi)存管理(常見(jiàn)問(wèn)題,建議把虛函數(shù)表、多態(tài)的實(shí)現(xiàn)過(guò)程這些都講一講)
虛繼承的底層原理,成員變量怎么共享的; 在執(zhí)行main函數(shù)之前,都會(huì)執(zhí)行哪些操作
inline和virtual能夠同時(shí)修飾嗎
Virtual能修飾構(gòu)造函數(shù)
static相關(guān)知識(shí)
explicit關(guān)鍵字的作用(修飾構(gòu)造函數(shù),用于抑制隱式轉(zhuǎn)換,“原則上應(yīng)該在所有的構(gòu)造函數(shù)前加explicit” ----《C++ Primer》)
函數(shù)調(diào)用過(guò)程
靜態(tài)鏈接與動(dòng)態(tài)鏈接
STL :
stl有哪些容器,了解哪一些,展開(kāi)說(shuō)一說(shuō)?
對(duì)比vector和set的實(shí)現(xiàn),介紹一下紅黑樹(shù)
vector和list區(qū)別,vector如何開(kāi)辟的時(shí)候內(nèi)存滿了怎么辦?
vector的push_back為什么要擴(kuò)容2倍或者1.5倍??jī)?nèi)存擴(kuò)展的參數(shù)為什么是2倍,最佳倍數(shù)是多少(大于1且小于2間的任意數(shù)字)
內(nèi)存擴(kuò)展導(dǎo)致發(fā)生拷貝時(shí),具體是如何拷貝的(STL算法copy函數(shù)實(shí)現(xiàn)以及模板偏特化)
Vector用法
vector如何實(shí)現(xiàn)動(dòng)態(tài)增長(zhǎng)(面過(guò)的幾家公司都問(wèn)到這個(gè)問(wèn)題,感覺(jué)不能只說(shuō)resize之類的函數(shù),還需要細(xì)化到vector內(nèi)部的allocator如何工作等細(xì)節(jié),具體可參考《STL源碼剖析》)
map的key和value的類型選擇,都有哪些限制(key要支持operator<,如果沒(méi)有,那么map模板必須增加第三個(gè)模板參數(shù),value類型要支持operator=,此map要支持拷貝構(gòu)造并有默認(rèn)的構(gòu)造函數(shù)。樓主想到的是這些,歡迎補(bǔ)充)
STL中map與unordered_map
map\set\unorder_map\unorder_set的區(qū)別
map與hashmap底層實(shí)現(xiàn)(紅黑樹(shù)以及哈希表),哈希碰撞是如何解決的,兩種實(shí)現(xiàn)各自的優(yōu)缺點(diǎn)
STL中迭代器的作用,有指針為何還要迭代器。
strcpy函數(shù)的編寫?
strcpy返回類型是干嘛用的?
哈希表解決沖突的方法(開(kāi)放定址、再哈希、鏈表、公共溢出區(qū),可以適當(dāng)深入,比如分析各自的優(yōu)缺點(diǎn))
STL 內(nèi)存池,nginx內(nèi)存池,兩個(gè)各自優(yōu)缺點(diǎn) ,deque底層實(shí)現(xiàn)
哈希沖突的原理和哈希沖突的解決方法
指針/智能指針:
動(dòng)態(tài)綁定怎么實(shí)現(xiàn)?(就是問(wèn)了一下基類與派生類指針和引用的轉(zhuǎn)換問(wèn)題)
指針和const
的用法?(就是四種情況說(shuō)了一下)
繼承機(jī)制中引用和指針之間如何轉(zhuǎn)換?
智能指針,auto_ptr與share_prt,auto_ptr類
如果要你設(shè)計(jì),你會(huì)怎么設(shè)計(jì)智能指針
樹(shù):
紅黑樹(shù)的定義和解釋?
二叉平衡樹(shù)是怎么實(shí)現(xiàn)平衡的?
判斷二叉平衡樹(shù)
AVL樹(shù)是什么?怎么判斷兩顆AVL樹(shù)里含的數(shù)據(jù)是一樣的(這里樹(shù)的結(jié)構(gòu)可能不一樣的)?
b樹(shù)怎么遍歷,多少次io
算法:
很多底層實(shí)現(xiàn)面試官也沒(méi)指望你全部答出來(lái),只要整體的知識(shí)脈絡(luò)把握清楚,再想辦法轉(zhuǎn)到自己了解更多的問(wèn)題就行。
數(shù)據(jù)結(jié)構(gòu)中二叉樹(shù)的前/中/后非遞歸遍歷?(現(xiàn)場(chǎng)畫(huà)圖舉例講解的,所以大家面試的時(shí)候盡量多動(dòng)筆)
求一棵樹(shù)中最大的距離,在一顆樹(shù)中,兩個(gè)結(jié)點(diǎn)之間所經(jīng)歷的邊數(shù)(即從一個(gè)節(jié)點(diǎn)到另一個(gè)節(jié)點(diǎn)需要經(jīng)過(guò)多少條邊)稱為距離(遞歸求解,當(dāng)前節(jié)點(diǎn)的左右子樹(shù)深度之和,即為經(jīng)過(guò)當(dāng)前節(jié)點(diǎn)的最大距離,然后同步更新所求的最大距離)。
-
環(huán)形加油站問(wèn)題LeetCode
已解決:加油站答案
洗牌算法,如何證明洗牌的隨機(jī)性
A*算法,尋路,八數(shù)碼問(wèn)題
x軸上有n個(gè)點(diǎn),已知每個(gè)點(diǎn)的位置p和速度v(正表示向右,負(fù)表示向左),每當(dāng)兩個(gè)點(diǎn)相碰就消失,問(wèn)最后碰撞的時(shí)間t和兩個(gè)點(diǎn)
給n個(gè)不相交的區(qū)間,查詢給定的一個(gè)值落在哪個(gè)區(qū)間,可以預(yù)處理區(qū)間,要支持多次查詢。顯然排序加二分
n個(gè)區(qū)間可以相交,求落在的所有區(qū)間段?把相交的部分 分離成單獨(dú)的區(qū)間,完全覆蓋的記個(gè)數(shù)就行,然后就變成上一題了。
如何得到鏈表倒數(shù)第k個(gè)元素
已解決:鏈表倒數(shù)第k個(gè)數(shù)-答案最大子段和(DP經(jīng)典問(wèn)題)
二維最大子段和(上一題的拓展,把所有可能的數(shù)組兩兩相加即可,時(shí)間復(fù)雜度O(n3))
一千萬(wàn)游戲玩家,有一個(gè)積分排行榜,積分范圍在0-99999,找到重復(fù)的積分;考慮內(nèi)存不足,空間復(fù)雜度盡量低,如果內(nèi)存充足?
股票買賣問(wèn)題
給10w行數(shù)據(jù),每行數(shù)據(jù)都是由<ipstart,ipend,location>的字段構(gòu)成,<ipstart,ipend>是一個(gè)ip范圍字段(ipstart<=ipend),這個(gè)范圍對(duì)應(yīng)一個(gè)唯一的地址location,每個(gè)ip范圍字段不存在交集。問(wèn):輸入一個(gè)ip地址,怎么得出它對(duì)應(yīng)的地址locaiton ?如果ip范圍字段存在交集要怎么處理?
Bfs/dfs
十大排序原理,平均時(shí)間復(fù)雜度,最差時(shí)間復(fù)雜度/何時(shí)會(huì)差
最長(zhǎng)遞增子系列 優(yōu)化
馬走日字,走到特定點(diǎn)最少用了D歩,問(wèn)給定任意K是否存在一個(gè)路徑走了K歩也可以走到(小于肯定不行,K-D是偶數(shù)隨便,要討論的是K-D是奇數(shù)情況)
數(shù)組中只有一個(gè)數(shù)出現(xiàn)了兩次,求這個(gè)數(shù),并使得空間 效率最優(yōu)
有一個(gè)3階魔方,設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)儲(chǔ)存,并設(shè)計(jì)一個(gè)算法來(lái)求解魔方
有500W個(gè)QQ號(hào),設(shè)計(jì)一個(gè)合適的數(shù)據(jù)結(jié)構(gòu)進(jìn)行儲(chǔ)存、查找與維護(hù)(這里考慮到查找的高效性,我想的是字典樹(shù),但和面試官探討的過(guò)程中,感覺(jué)他不是很滿意這個(gè)答案,大家如有更高效的結(jié)構(gòu)歡迎分享)
設(shè)計(jì)題(設(shè)計(jì)游戲邏輯,麻將/棋牌/玩過(guò)的游戲中的技能,特色玩法實(shí)現(xiàn))
a) 設(shè)計(jì)一個(gè)具有g(shù)etmaxvalue()功能的隊(duì)列。
b) 設(shè)計(jì)一個(gè)游戲排行榜的實(shí)現(xiàn):1、獲取前K名玩家的信息2、輸入一個(gè)玩家id,能獲取玩家當(dāng)前的排名
兩個(gè)函數(shù),不互相關(guān)聯(lián),一個(gè)寫在一個(gè)循環(huán)中調(diào)用N次,一個(gè)分別寫在兩個(gè)循環(huán)中調(diào)用N次,問(wèn)什么情況下第二種比第一種快
簡(jiǎn)單概率題,一個(gè)圓,往里面隨機(jī)生成點(diǎn),要求均勻,怎么辦?
怎么判斷一個(gè)點(diǎn)是否在三角形內(nèi)部?
不用碰撞檢測(cè)怎么檢測(cè)兩個(gè)平面相交?
網(wǎng)絡(luò):(網(wǎng)絡(luò)socket編程不一定要求,但基礎(chǔ)知識(shí)要了解)
TCP和UDP區(qū)別?為什么TCP能保證可靠傳輸?
TCP三次握手四次揮手流程圖,TCP為什么不是兩次握手?
TCP三次握手有沒(méi)有被攻擊的可能(如果一個(gè)惡意攻擊的ip一直請(qǐng)求連接,服務(wù)器會(huì)發(fā)送ack確認(rèn),但永遠(yuǎn)等不到回復(fù),就會(huì)導(dǎo)致服務(wù)器資源浪費(fèi))
TCP四次揮手時(shí)最后一次等待要多久,為什么(如A向B發(fā)送揮手,則A需要等待2MSL,MSL為最大報(bào)文生命期,這是為了確保A的揮手能到達(dá)B,不然B會(huì)重傳第三次揮手的信息。另外也是確保所有此次通話相關(guān)報(bào)文在網(wǎng)絡(luò)中消失)
socket流程?
網(wǎng)絡(luò)編程的阻塞模式與非阻塞模式區(qū)別?
IP是干嗎用的
ssh協(xié)議以及如何預(yù)防中間人攻擊、如何免去使用密碼(這個(gè)網(wǎng)上很多都有介紹,回答時(shí)記得理清順序即可)
http和https有什么區(qū)別(前者運(yùn)行在TCP,后者運(yùn)行在SSL/TLS上,安全性更高)
select,poll,epoll的區(qū)別?io?
寫一個(gè)簡(jiǎn)單的服務(wù)端客戶端偽代碼,哪里可能會(huì)阻塞,怎么解決阻塞的問(wèn)題?
nginx 和 tomcat的原理,優(yōu)化....
操作系統(tǒng):
線程與進(jìn)程區(qū)別與聯(lián)系,進(jìn)程間的通訊方式有哪些。
線程間同步
線程沖突怎么處理
進(jìn)程切換
多線程的優(yōu)勢(shì)
互斥鎖與自旋鎖的區(qū)別
long的大小,不同位數(shù)機(jī)器上
虛擬內(nèi)存與物理內(nèi)存
函數(shù)調(diào)用堆棧的變化的整個(gè)過(guò)程,源文件到可執(zhí)行文件的整個(gè)過(guò)程,機(jī)器為什么使用補(bǔ)碼?
二級(jí)索引查數(shù)據(jù)的流程
微內(nèi)核與宏內(nèi)核
行程編碼的英文縮寫是什么,怎么實(shí)現(xiàn)的。
打開(kāi)文件流寫入磁盤的過(guò)程,機(jī)械磁盤的查找過(guò)程
圖形學(xué):(除非表示會(huì)不然已更改不會(huì)問(wèn))
了解多少
渲染管線流程
圖像處理中時(shí)空域與頻率域各自的操作方法。
圖像處理中邊緣檢測(cè)的算法知道不
視頻編碼與圖像編碼問(wèn)題,接觸過(guò)沒(méi)有,傅立葉變換公式?(接觸過(guò)Jpeg與Jpeg2000,問(wèn)了下怎么實(shí)現(xiàn)壓縮的)
圖形與圖像有什么區(qū)別
光柵化的過(guò)程,作用,細(xì)分是什么,shader編程的知識(shí),以及鋸齒如何解決。
宏觀問(wèn)題:
怎么學(xué)習(xí)新技術(shù),對(duì)業(yè)務(wù)和技術(shù)的理解
聊一下你簡(jiǎn)歷的項(xiàng)目
介紹一下自己最深刻的項(xiàng)目經(jīng)歷
玩過(guò)什么游戲
對(duì)國(guó)內(nèi)游戲行業(yè)、公司的了解和看法,具體講講自己的見(jiàn)解
設(shè)計(jì)模式
linux命令
sql查詢,流程