置頂隨筆
摘要: virtual function是很多公司面試題的重點考察內(nèi)容,雖然對于C++而言這是一個老生常談的話題了,但是工作中我發(fā)現(xiàn)還是有很多人理解的不透徹。
先看下面的一個例子
閱讀全文
摘要: 上午一個師弟在QQ上問我一道筆試題,是他前兩天去KONAMI面試時做的,這道題大致是這樣的:
解釋以下語句的含義:
1、new A;
2、new A();
也許很多人包括我自己,都可以馬上給出第一種情況的答案:在堆上為A類分配內(nèi)存,然后調(diào)用A的構(gòu)造函數(shù)。這種說法被大家所熟知,因為包括《STL源碼剖析》等大作在內(nèi)也都是這么寫的(但是你認(rèn)為這種說法完全正確嗎?其實不盡然,答案后面揭曉)
第二種情況,對象構(gòu)造的時候初始化列表為空會和第一種有什么不同呢?對于這種在實際工程中很少使用的情況,我一時還真給不出確切的答案。
閱讀全文
摘要: 昨天在一個論壇里看到一個帖子,是關(guān)于無限循環(huán)的選擇問題,之前也看到過很多次說空for比while(1)效率高的論述,只是之前一直沒有功夫去考證。
話不多說,直入正題。
閱讀全文
摘要: 前段時間在寫《段錯誤造成的常見詭異宕機情況總結(jié)(中)》時,分析到 程序中數(shù)據(jù)寫超時有可能寫到this指針?biāo)诘牡刂防锩妫瑢?dǎo)致最終詭異的宕機。其實網(wǎng)絡(luò)攻防里常用的緩沖區(qū)溢出攻擊也是這個道理,除了使用戶程序甚至計算機掛掉外,還有可能執(zhí)行攻擊者想執(zhí)行的任何程序,這篇文章主要詳細(xì)剖析一下第二種攻擊的方法以及現(xiàn)在Linux(包括各種修改版本,例如Android)、Windows下常使用的防范措施。
閱讀全文
摘要: 國慶長假終于結(jié)束了,從擁堵的噩夢中醒來,該收收心重新回到工作中來了(順便吐槽一下鬧心的長假,平時工作沒時間出去,放了長假了 又不敢出去,路上耗費大量的時間和金錢也算了,弄的整個人也身心疲憊的……)
言歸正傳,接著上回宕機情況說。之前比較難找的宕機錯誤已經(jīng)在前兩篇隨筆里說過了,這次要說的是前不久一個同事遇到的。他要做一個錄像功能,每次把客戶端的消息轉(zhuǎn)儲成文件時掛掉。大致代碼如下:
閱讀全文
摘要: 最近在做一個軍團系統(tǒng)的資料片開發(fā),因為策劃提出了很多遍歷某一軍團當(dāng)前所有在線玩家的操作(例如發(fā)公告、拉人、給獎勵),所以就想到了用回調(diào)。
脫離實際項目代碼,先看一下示例實現(xiàn):
閱讀全文
摘要: 前幾天回答一個問題,是關(guān)于我們項目中使用的epoll模式的,因為記不大清了,感覺應(yīng)該使用的就是epoll的高速模式,也就是ET(edge-trigger)模式。這兩天閑暇的時候,打開代碼又看了一下,在epoll事件注冊時并未標(biāo)記ET模式,看來實際使用的是epoll默認(rèn)的LT(level-trigger )模式,為什么呢?使用LT意味著 只要 fd 處于 readable/writable 狀態(tài),每次 epoll_wait 時都會返回該 fd,系統(tǒng)開銷不說,自己處理時每次都要把這些fd輪詢一遍,如果fd很多的話,不管這些fd有沒有事件發(fā)生,epoll_wait 都會觸發(fā)這些fd的輪詢判斷。
閱讀全文
摘要: 工作兩年中,關(guān)于查找敏感型的代碼不少用到了hash_map,關(guān)于它的實現(xiàn)細(xì)節(jié)和需要注意的地方這里梳理一下。因為工作在linux環(huán)境下,所以這里hash_map的評述都是根據(jù)SGI的源碼。
hash_map說簡單一點就是一個hashtable桶和對于這個桶基本操作的再次封裝。即包含(圖片太麻煩,文字代替吧):1、_Hashtable* _M_ht;2、erase()、find()等函數(shù)。對應(yīng)的iterator包含:1、_hashtable* _M_ht(這個就是hash_map中的hashtable指針);2、_Node* _M_cur(指向當(dāng)前hashtable桶的某個節(jié)點)。_Node的結(jié)構(gòu)為:
閱讀全文
2015年2月10日
摘要: bash shell有很多命令是和locale相關(guān),本篇文章就來研究一下這種相關(guān)性的具體表現(xiàn)。
閱讀全文
2015年1月14日
摘要: 項目中和自己代碼中大量使用了STL的容器,平時也沒怎么關(guān)注alloc的具體實現(xiàn)細(xì)節(jié),主觀認(rèn)識上還停留在侯捷大師的《STL源碼剖析》中的講解。
但是目前編譯器的實現(xiàn),早已經(jīng)不是書中所言……
閱讀全文
2014年3月26日
摘要: 對于服務(wù)器程序而言,尤其是云計算時代的服務(wù)器程序,三高標(biāo)準(zhǔn)(高可用、高性能、高擴展)往往是衡量一個優(yōu)秀的服務(wù)器程序的重要指標(biāo)。本篇文章主要聊聊服務(wù)宕機恢復(fù)(高可用的重要內(nèi)容)、負(fù)載均衡(高擴展、高可用的主要內(nèi)容)。以下內(nèi)容均屬個人工作中的見解,如有不妥之處,歡迎指正。 ----peakflys
閱讀全文
2013年12月1日
摘要: virtual function是很多公司面試題的重點考察內(nèi)容,雖然對于C++而言這是一個老生常談的話題了,但是工作中我發(fā)現(xiàn)還是有很多人理解的不透徹。
先看下面的一個例子
閱讀全文
2013年5月27日
摘要: 項目終于上線了,伴隨著人數(shù)的逐步上升,最近查看日志,發(fā)現(xiàn)了大量連接超時的日志。項目中使用的是TCP長連接,為了保證網(wǎng)絡(luò)資源及時有效的釋放,程序中是1分鐘一次心跳,3分鐘無心跳即認(rèn)為超時。此為本文的背景
相對于TCP連接建立時的三次握手,我想很多人對斷開連接的四次招呼就不是那么熟了,這里先談一下TCP的斷開,下面給出TCP斷開連接的過程圖:
閱讀全文
2013年4月8日
摘要: 上午一個師弟在QQ上問我一道筆試題,是他前兩天去KONAMI面試時做的,這道題大致是這樣的:
解釋以下語句的含義:
1、new A;
2、new A();
也許很多人包括我自己,都可以馬上給出第一種情況的答案:在堆上為A類分配內(nèi)存,然后調(diào)用A的構(gòu)造函數(shù)。這種說法被大家所熟知,因為包括《STL源碼剖析》等大作在內(nèi)也都是這么寫的(但是你認(rèn)為這種說法完全正確嗎?其實不盡然,答案后面揭曉)
第二種情況,對象構(gòu)造的時候初始化列表為空會和第一種有什么不同呢?對于這種在實際工程中很少使用的情況,我一時還真給不出確切的答案。
閱讀全文
2013年2月4日
摘要: 前兩篇blog介紹了P2P的原理和libjingle庫的基本情況,如果直接看代碼,很多細(xì)節(jié)可能不會注意到,這種時候最有效的方法當(dāng)然是看它的開發(fā)文檔,因為庫是由Google開發(fā)和維護,所以這方面我們不用擔(dān)心,文檔首頁見這里。但是如果要深入了解庫代碼為什么這么寫,為什么這么約定時,還需要了解相應(yīng)的協(xié)議。
便于大家了解,特整理如下。(轉(zhuǎn)載請注明作者和出處 by peakflys)
閱讀全文
2013年1月30日
摘要: 國內(nèi)現(xiàn)在很多語音聊天工具都是基于TURN方式實現(xiàn)的,包括YY、AK等等,這種方式對于服務(wù)器的性能要求很高,而且在用戶量增大的時候,服務(wù)器壓力也會越來越大,用戶的語音質(zhì)量也會受到很大影響。而基于P2P方式實現(xiàn)的語聊服務(wù)器,就可以極大的避免這種情況的發(fā)生,而且用戶的語音體驗也會非常好。
閱讀全文
2013年1月25日
摘要: 為了項目的后期IM應(yīng)用,最近在研究libjingle,中間看了也收集了很多資料,感慨網(wǎng)上很多資料要么太過于糾結(jié)協(xié)議(如STUN、ICE等)實現(xiàn)細(xì)節(jié),要么中間有很多紕漏。最后去偽存真,歸納總結(jié)了一下,希望對以后的同行有些許幫助。
如果有什么需要討論或者指正的,歡迎留言或者郵件peakflys@gmail.com
閱讀全文
2013年1月5日
摘要: 昨天在一個論壇里看到一個帖子,是關(guān)于無限循環(huán)的選擇問題,之前也看到過很多次說空for比while(1)效率高的論述,只是之前一直沒有功夫去考證。
話不多說,直入正題。
閱讀全文