置頂隨筆
摘要: virtual function是很多公司面試題的重點(diǎn)考察內(nèi)容,雖然對(duì)于C++而言這是一個(gè)老生常談的話題了,但是工作中我發(fā)現(xiàn)還是有很多人理解的不透徹。
先看下面的一個(gè)例子
閱讀全文
摘要: 上午一個(gè)師弟在QQ上問我一道筆試題,是他前兩天去KONAMI面試時(shí)做的,這道題大致是這樣的:
解釋以下語(yǔ)句的含義:
1、new A;
2、new A();
也許很多人包括我自己,都可以馬上給出第一種情況的答案:在堆上為A類分配內(nèi)存,然后調(diào)用A的構(gòu)造函數(shù)。這種說法被大家所熟知,因?yàn)榘ā禨TL源碼剖析》等大作在內(nèi)也都是這么寫的(但是你認(rèn)為這種說法完全正確嗎?其實(shí)不盡然,答案后面揭曉)
第二種情況,對(duì)象構(gòu)造的時(shí)候初始化列表為空會(huì)和第一種有什么不同呢?對(duì)于這種在實(shí)際工程中很少使用的情況,我一時(shí)還真給不出確切的答案。
閱讀全文
摘要: 昨天在一個(gè)論壇里看到一個(gè)帖子,是關(guān)于無(wú)限循環(huán)的選擇問題,之前也看到過很多次說空for比while(1)效率高的論述,只是之前一直沒有功夫去考證。
話不多說,直入正題。
閱讀全文
摘要: 前段時(shí)間在寫《段錯(cuò)誤造成的常見詭異宕機(jī)情況總結(jié)(中)》時(shí),分析到 程序中數(shù)據(jù)寫超時(shí)有可能寫到this指針?biāo)诘牡刂防锩妫瑢?dǎo)致最終詭異的宕機(jī)。其實(shí)網(wǎng)絡(luò)攻防里常用的緩沖區(qū)溢出攻擊也是這個(gè)道理,除了使用戶程序甚至計(jì)算機(jī)掛掉外,還有可能執(zhí)行攻擊者想執(zhí)行的任何程序,這篇文章主要詳細(xì)剖析一下第二種攻擊的方法以及現(xiàn)在Linux(包括各種修改版本,例如Android)、Windows下常使用的防范措施。
閱讀全文
摘要: 國(guó)慶長(zhǎng)假終于結(jié)束了,從擁堵的噩夢(mèng)中醒來,該收收心重新回到工作中來了(順便吐槽一下鬧心的長(zhǎng)假,平時(shí)工作沒時(shí)間出去,放了長(zhǎng)假了 又不敢出去,路上耗費(fèi)大量的時(shí)間和金錢也算了,弄的整個(gè)人也身心疲憊的……)
言歸正傳,接著上回宕機(jī)情況說。之前比較難找的宕機(jī)錯(cuò)誤已經(jīng)在前兩篇隨筆里說過了,這次要說的是前不久一個(gè)同事遇到的。他要做一個(gè)錄像功能,每次把客戶端的消息轉(zhuǎn)儲(chǔ)成文件時(shí)掛掉。大致代碼如下:
閱讀全文
摘要: 最近在做一個(gè)軍團(tuán)系統(tǒng)的資料片開發(fā),因?yàn)椴邉澨岢隽撕芏啾闅v某一軍團(tuán)當(dāng)前所有在線玩家的操作(例如發(fā)公告、拉人、給獎(jiǎng)勵(lì)),所以就想到了用回調(diào)。
脫離實(shí)際項(xiàng)目代碼,先看一下示例實(shí)現(xiàn):
閱讀全文
摘要: 前幾天回答一個(gè)問題,是關(guān)于我們項(xiàng)目中使用的epoll模式的,因?yàn)橛洸淮笄辶耍杏X應(yīng)該使用的就是epoll的高速模式,也就是ET(edge-trigger)模式。這兩天閑暇的時(shí)候,打開代碼又看了一下,在epoll事件注冊(cè)時(shí)并未標(biāo)記ET模式,看來實(shí)際使用的是epoll默認(rèn)的LT(level-trigger )模式,為什么呢?使用LT意味著 只要 fd 處于 readable/writable 狀態(tài),每次 epoll_wait 時(shí)都會(huì)返回該 fd,系統(tǒng)開銷不說,自己處理時(shí)每次都要把這些fd輪詢一遍,如果fd很多的話,不管這些fd有沒有事件發(fā)生,epoll_wait 都會(huì)觸發(fā)這些fd的輪詢判斷。
閱讀全文
摘要: 工作兩年中,關(guān)于查找敏感型的代碼不少用到了hash_map,關(guān)于它的實(shí)現(xiàn)細(xì)節(jié)和需要注意的地方這里梳理一下。因?yàn)楣ぷ髟趌inux環(huán)境下,所以這里hash_map的評(píng)述都是根據(jù)SGI的源碼。
hash_map說簡(jiǎn)單一點(diǎn)就是一個(gè)hashtable桶和對(duì)于這個(gè)桶基本操作的再次封裝。即包含(圖片太麻煩,文字代替吧):1、_Hashtable* _M_ht;2、erase()、find()等函數(shù)。對(duì)應(yīng)的iterator包含:1、_hashtable* _M_ht(這個(gè)就是hash_map中的hashtable指針);2、_Node* _M_cur(指向當(dāng)前hashtable桶的某個(gè)節(jié)點(diǎn))。_Node的結(jié)構(gòu)為:
閱讀全文