面試

  1. c++和c的區(qū)別

    面向過程局义、面向?qū)ο?/p>

    C++中new和delete是對內(nèi)存分配的運(yùn)算符诞外,取代了C中的malloc和free

    C++中有引用、類的概念藐不,C中沒有

    C++有函數(shù)重載,C中不能

    C變量只能在函數(shù)的開頭處聲明和定義秦效,而C++隨時定義隨時使用雏蛮,C++ 用析構(gòu)函數(shù)回收垃圾,

    函數(shù)重載:

  2. 什么是面向?qū)ο螅棵嫦驅(qū)ο蟮膸状筇匦允鞘裁矗?/strong> 面向?qū)ο笫且环N基于對象的阱州、基于類的的軟件開發(fā)思想挑秉。面向?qū)ο缶哂欣^承、封裝苔货、多態(tài)的特性犀概。

  3. 構(gòu)造函數(shù)和析構(gòu)函數(shù)可否為虛函數(shù)

    構(gòu)造函數(shù)可否調(diào)用虛函數(shù),會有什么后果

    類的內(nèi)存分布夜惭,虛表

    智能指針姻灶,內(nèi)存泄漏怎么檢測

    消息隊列

    算法

    旋轉(zhuǎn)數(shù)組找最小值,如果有重復(fù)值怎么辦诈茧?

    給定東西視圖和南北視圖产喉,求城市體積最大值

    10分鐘后得知通過

  4. 指針和引用的區(qū)別

    指針保存的是指向?qū)ο蟮牡刂罚孟喈?dāng)于變量的別名敢会,引用在定義的時候必須初始化曾沈,指針沒有這個要求

    指針可以改變地址,引用必須從一而終

    不存在空應(yīng)引用鸥昏,但是存在空指針NULL塞俱,相對而言引用更加安全

    引用的創(chuàng)建不會調(diào)用類的拷貝構(gòu)造函數(shù)

  5. 拷貝構(gòu)造函數(shù)

  6. new/delete與malloc/free的區(qū)別

    new是運(yùn)算符,malloc是C語言庫函數(shù)

    new可以重載吏垮,malloc不能重載

    new的變量是數(shù)據(jù)類型障涯,malloc的是字節(jié)大小

    new可以調(diào)用構(gòu)造函數(shù)罐旗,delete可以調(diào)用析構(gòu)函數(shù),malloc/free不能

    new返回的是指定對象的指針唯蝶,而malloc返回的是void*尤莺,因此malloc的返回值一般都需要進(jìn)行類型轉(zhuǎn)化

    malloc分配的內(nèi)存不夠的時候可以使用realloc擴(kuò)容,new沒有這樣的操作

    new內(nèi)存分配失敗拋出bad_malloc生棍,malloc內(nèi)存分配失敗返回NULL值

  7. volatile關(guān)鍵字

    訪問寄存器要比訪問內(nèi)存要塊颤霎,因此CPU會優(yōu)先訪問該數(shù)據(jù)在寄存器中的存儲結(jié)果,但是內(nèi)存中的數(shù)據(jù)可能已經(jīng)發(fā)生了改變涂滴,而寄存器中還保留著原來的結(jié)果友酱。為了避免這種情況的發(fā)生將該變量聲明為volatile,告訴CPU每次都從內(nèi)存去讀取數(shù)據(jù)柔纵。

    一個參數(shù)可以即是const又是volatile的嗎缔杉?可以,一個例子是只讀狀態(tài)寄存器搁料,是volatile是因為它可能被意想不到的被改變或详,是const告訴程序不應(yīng)該試圖去修改他

  8. static關(guān)鍵字的作用

    修飾全局變量

    修飾局部變量

    修飾全局函數(shù)

    修飾局部函數(shù)

    修飾類的成員變量、成員函數(shù)

  9. static修飾全局函數(shù)有什么作用郭计? 限制他的作用域只能在本文件之內(nèi)霸琴。

  10. extern關(guān)鍵字作用 聲明一個外部變量。

  11. const關(guān)鍵字的作用

const修飾全局變量

const修飾局部變量

const修飾指針昭伸,const int *

const修飾指針指向的對象, int * const

const修飾引用做形參

const修飾成員變量梧乘,必須在構(gòu)造函數(shù)列表中初始化

const修飾成員函數(shù),說明該函數(shù)不應(yīng)該修改非靜態(tài)成員庐杨,但是這并不是十分可靠的选调,指針?biāo)傅姆浅蓡T對象值可能會被改變
  1. define/const/inline的區(qū)別 本質(zhì):define只是字符串替換,const參與編譯運(yùn)行灵份,具體的:
define不會做類型檢查仁堪,const擁有類型,會執(zhí)行相應(yīng)的類型檢查  . define僅僅是宏替換填渠,不占用內(nèi)存弦聂,而const會占用內(nèi)存

const內(nèi)存效率更高,編譯器通常將const變量保存在符號表中揭蜒,而不會分配存儲空間横浑,這使得它成為一個編譯期間的常量剔桨,沒有存儲和讀取的操作

本質(zhì):define只是字符串替換屉更,inline由編譯器控制,具體的:

1.  內(nèi)聯(lián)函數(shù)在編譯時展開洒缀,而宏是由預(yù)處理器對宏進(jìn)行展開

2.  內(nèi)聯(lián)函數(shù)會檢查參數(shù)類型瑰谜,宏定義不檢查函數(shù)參數(shù) 欺冀,所以內(nèi)聯(lián)函數(shù)更安全。

3.  宏不是函數(shù)萨脑,而inline函數(shù)是函數(shù)

4.  宏在定義時要小心處理宏參數(shù)隐轩,(一般情況是把參數(shù)用括弧括起來)
  1. 有哪些內(nèi)存泄漏?如何判斷內(nèi)存泄漏渤早?如何定位內(nèi)存泄漏职车?
**全局變量和局部變量的區(qū)別**

**C++智能指針**

**C++動態(tài)內(nèi)存**

**C++11新特性**

**純虛函數(shù)的作用和實現(xiàn)方式**

**STL源碼、vector鹊杖、list悴灵、map、set**

**字節(jié)對齊的原則**
  1. 從0位置開始存儲骂蓖;

  2. 變量存儲的起始位置是該變量大小的整數(shù)倍积瞒;

  3. 結(jié)構(gòu)體總的大小是其最大元素的整數(shù)倍,不足的后面要補(bǔ)齊登下;

  4. 結(jié)構(gòu)體中包含結(jié)構(gòu)體茫孔,從結(jié)構(gòu)體中最大元素的整數(shù)倍開始存;

  5. 如果加入pragma pack(n) 被芳,取n和變量自身大小較小的一個缰贝。

  6. 空結(jié)構(gòu)體的sizeof()返回值 答案是1

  7. 靜態(tài)連接與動態(tài)鏈接的區(qū)別

  8. 靜態(tài)鏈接 所謂靜態(tài)鏈接就是在編譯鏈接時直接將需要的執(zhí)行代碼拷貝到調(diào)用處,優(yōu)點(diǎn)就是在程序發(fā)布的時候就不需要依賴庫畔濒,也就是不再需要帶著庫一塊發(fā)布揩瞪,程序可以獨(dú)立執(zhí)行,但是體積可能會相對大一些篓冲。

  9. 動態(tài)鏈接 所謂動態(tài)鏈接就是在編譯的時候不直接拷貝可執(zhí)行代碼李破,而是通過記錄一系列符號和參數(shù),在程序運(yùn)行或加載時將這些信息傳遞給操作系統(tǒng)壹将,操作系統(tǒng)負(fù)責(zé)將需要的動態(tài)庫加載到內(nèi)存中嗤攻,然后程序在運(yùn)行到指定的代碼時,去共享執(zhí)行內(nèi)存中已經(jīng)加載的動態(tài)庫可執(zhí)行代碼诽俯,最終達(dá)到運(yùn)行時連接的目的妇菱。優(yōu)點(diǎn)是多個程序可以共享同一段代碼,而不需要在磁盤上存儲多個拷貝暴区,缺點(diǎn)是由于是運(yùn)行時加載闯团,可能會影響程序的前期執(zhí)行性能。

  10. 多態(tài)是什么仙粱?舉一個多態(tài)的例子

  11. 多態(tài)性與虛函數(shù)表

  12. 靜態(tài)多態(tài)和動態(tài)多態(tài) 多態(tài)分為靜態(tài)多態(tài)和動態(tài)多態(tài)房交。靜態(tài)多態(tài)是通過重載和模板技術(shù)實現(xiàn),在編譯的時候確定伐割。動態(tài)多態(tài)通過虛函數(shù)和繼承關(guān)系來實現(xiàn)候味,執(zhí)行動態(tài)綁定刃唤,在運(yùn)行的時候確定。

  13. 重寫白群、重載與隱藏的區(qū)別 重載的函數(shù)都是在類內(nèi)的尚胞。只有參數(shù)類型或者參數(shù)個數(shù)不同,重載不關(guān)心返回值的類型帜慢。 覆蓋(重寫)派生類中重新定義的函數(shù)笼裳,其函數(shù)名,返回值類型粱玲,參數(shù)列表都跟基類函數(shù)相同侍咱,并且基類函數(shù)前加了virtual關(guān)鍵字。 隱藏是指派生類的函數(shù)屏蔽了與其同名的基類函數(shù)密幔,注意只要同名函數(shù)楔脯,不管參數(shù)列表是否相同,基類函數(shù)都會被隱藏胯甩。有兩種情況:(1)參數(shù)列表不同昧廷,不管有無virtual關(guān)鍵字,都是隱藏偎箫;(2)參數(shù)列表相同木柬,但是無virtual關(guān)鍵字,也是隱藏淹办。

  14. 構(gòu)造函數(shù)為什么不能定義為虛函數(shù)眉枕,析構(gòu)函數(shù)為什么可以

  15. 虛函數(shù)的執(zhí)行依賴于虛函數(shù)表。而虛函數(shù)表需要在構(gòu)造函數(shù)中進(jìn)行初始化工作怜森,即初始化vptr速挑,讓他指向正確的虛函數(shù)表。而在構(gòu)造對象期間副硅,虛函數(shù)表還沒有被初始化姥宝,將無法進(jìn)行。

  16. 在類的繼承中恐疲,如果有基類指針指向派生類腊满,那么用基類指針delete時,如果不定義成虛函數(shù)培己,派生類中派生的那部分無法析構(gòu)碳蛋。

  17. 構(gòu)造函數(shù)不要調(diào)用虛函數(shù)。在基類構(gòu)造的時候省咨,虛函數(shù)是非虛肃弟,不會走到派生類中,既是采用的靜態(tài)綁定茸炒。顯然的是:當(dāng)我們構(gòu)造一個子類的對象時愕乎,先調(diào)用基類的構(gòu)造函數(shù)阵苇,構(gòu)造子類中基類部分壁公,子類還沒有構(gòu)造感论,還沒有初始化,如果在基類的構(gòu)造中調(diào)用虛函數(shù)紊册,如果可以的話就是調(diào)用一個還沒有被初始化的對象比肄,那是很危險的,所以C++中是不可以在構(gòu)造父類對象部分的時候調(diào)用子類的虛函數(shù)實現(xiàn)囊陡。但是不是說你不可以那么寫程序芳绩,你這么寫,編譯器也不會報錯撞反。只是你如果這么寫的話編譯器不會給你調(diào)用子類的實現(xiàn)妥色,而是還是調(diào)用基類的實現(xiàn)。

  • 必須在構(gòu)造函數(shù)初始化式里進(jìn)行初始化的數(shù)據(jù)成員有哪些 1) 常量成員遏片,因為常量只能初始化不能賦值嘹害,所以必須放在初始化列表里面 2) 引用類型,引用必須在定義的時候初始化吮便,并且不能重新賦值笔呀,所以也要寫在初始化列表里面 3) 沒有默認(rèn)構(gòu)造函數(shù)的類類型,因為使用初始化列表可以不必調(diào)用默認(rèn)構(gòu)造函數(shù)來初始化髓需,而是直接調(diào)用拷貝構(gòu)造函數(shù)初始化

  • C++四種類型轉(zhuǎn)換 static_cast, dynamic_cast, const_cast, reinterpret_cast

  • const_cast用于將const變量轉(zhuǎn)為非const

  • static_cast用的最多许师,對于各種隱式轉(zhuǎn)換,非const轉(zhuǎn)const僚匆,void*轉(zhuǎn)指針等, static_cast能用于多態(tài)想上轉(zhuǎn)化微渠,如果向下轉(zhuǎn)能成功但是不安全,結(jié)果未知咧擂;

  • dynamic_cast用于動態(tài)類型轉(zhuǎn)換敛助。只能用于含有虛函數(shù)的類,用于類層次間的向上和向下轉(zhuǎn)化屋确。只能轉(zhuǎn)指針或引用纳击。向下轉(zhuǎn)化時,如果是非法的對于指針返回NULL攻臀,對于引用拋異常焕数。要深入了解內(nèi)部轉(zhuǎn)換的原理绝淡。

  • reinterpret_cast幾乎什么都可以轉(zhuǎn)蛮浑,比如將int轉(zhuǎn)指針搔谴,可能會出問題抵代,盡量少用并淋;

  • 為什么不使用C的強(qiáng)制轉(zhuǎn)換?C的強(qiáng)制轉(zhuǎn)換表面上看起來功能強(qiáng)大什么都能轉(zhuǎn)鹏氧,但是轉(zhuǎn)化不夠明確池户,不能進(jìn)行錯誤檢查,容易出錯换团。

  • 如何讓一個類不能實例化悉稠? 將類定義為抽象基類或者將構(gòu)造函數(shù)聲明為private。

  • 如何讓main函數(shù)之前執(zhí)行函數(shù)艘包? 1)C++中在main函數(shù)之前定義一個全局對象的猛,調(diào)用構(gòu)造函數(shù)。 2) C語言中使用gcc的attribute關(guān)鍵字想虎,聲明constructor和destructor卦尊。

  • C++如何創(chuàng)建一個類,使得他只能在堆或者棧上創(chuàng)建舌厨?

  • 只能在堆上生成對象:將析構(gòu)函數(shù)設(shè)置為私有岂却。 原因:C++是靜態(tài)綁定語言,編譯器管理棧上對象的生命周期裙椭,編譯器在為類對象分配楑锪ǎ空間時,會先檢查類的析構(gòu)函數(shù)的訪問性骇陈。若析構(gòu)函數(shù)不可訪問震庭,則不能在棧上創(chuàng)建對象。

  • 只能在棧上生成對象:將new 和 delete 重載為私有你雌。 原因:在堆上生成對象器联,使用new關(guān)鍵詞操作,其過程分為兩階段:第一階段婿崭,使用new在堆上尋找可用內(nèi)存拨拓,分配給對象;第二階段氓栈,調(diào)用構(gòu)造函數(shù)生成對象渣磷。將new操作設(shè)置為私有,那么第一階段就無法完成授瘦,就不能夠再堆上生成對象醋界。

C++命名空間,命名空間的嵌套 可作為附加信息來區(qū)分不同庫中相同名稱的函數(shù)提完、類形纺、變量等。使用了命名空間即定義了上下文徒欣。

  • C++多線程

  • explict關(guān)鍵字的作用

    算法

    鏈表

    • 輸出鏈表中倒數(shù)第k個節(jié)點(diǎn)

    • 找到鏈表環(huán)結(jié)點(diǎn)入口

    • 單鏈表的倒置

    • 排序算法

      • 手寫快速排序(快速排序的基準(zhǔn))

      • 歸并排序

      • 堆排序

      • void shuffle(int cards[],int n)

{

<pre spellcheck="false" class="md-fences md-end-block ty-contain-cm modeLoaded" cid="n173" mdtype="fences" style="box-sizing: border-box; overflow: visible; font-family: Monaco, Consolas, "Andale Mono", "DejaVu Sans Mono", monospace; margin-top: 0px; margin-bottom: 20px; font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; white-space: normal; background: rgb(51, 51, 51); position: relative !important; padding: 10px 10px 10px 30px; width: inherit; color: rgb(184, 191, 198); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" lang="">if(cards==NULL)

return ;

srand(time(0));

for(int i=0;i<n-1;++i)

{

//保證每次第i位的值不會涉及到第i位以前

int index=i+rand()%(n-i);

int temp=cards[i];

cards[i]=cards[index];

cards[index]=temp;

}</pre>

}

哈希表

  • 哈希處理沖突的解決方法

  • 開放地址法

  • 鏈表法

二叉樹

  • 二叉樹的非遞歸前序遍歷逐样,中序遍歷,后續(xù)遍歷,層序遍歷

  • 二叉樹的高度

  • 二叉樹的鏡像

  • 二叉樹的前k大個節(jié)點(diǎn)(堆排序)

  • 紅黑樹和平衡二叉樹

高級數(shù)據(jù)結(jié)構(gòu)

  • 紅黑樹

  • 前綴樹

    算法

    • 找到數(shù)組中第一次出現(xiàn)1次的值

    • 背包九講

    • 最大回文子串(動態(tài)規(guī)劃)

    • 最長公共子序列(動態(tài)規(guī)劃)

    • 最長重復(fù)子序列(find和rfind的應(yīng)用)

    • 找零錢問題(動態(tài)規(guī)劃&貪心算法)

    • 排列組合問題(遞歸&回溯)

      海量數(shù)據(jù)處理問題

網(wǎng)絡(luò)技術(shù)(TCP/IP)

  • OSI七層網(wǎng)絡(luò)模型

  • TCP三次握手過程脂新,為什么需要三次挪捕?

  • 首先Client向Server發(fā)送請求報文段,同時同步自己的SYN(x)争便,Client進(jìn)入SYN_SENT狀態(tài)级零。

  • Server接收到Client的請求報文段,返回CLient自己的seq(y)及ack(x+1)始花,Server進(jìn)入SYN_REVD狀態(tài)妄讯。

  • CLinet收到Server的SYN+ACK包孩锡,向服務(wù)器發(fā)送一個序列號seq(x+1)酷宵,確認(rèn)號為ack(y+1),此包發(fā)送完畢躬窜,Client和Server進(jìn)入ESTABLISHED(TCP連接成功)狀態(tài)浇垦,完成三次握手。

    需要三次的原因:防止已失效的報文段出現(xiàn)在本連接中荣挨。

  • TCP四次揮手的過程

  • 客戶端發(fā)送斷開TCP連接請求的報文男韧,其中報文中包含seq序列號,是由發(fā)送端隨機(jī)生成的默垄,并且還將報文中的FIN字段置為1此虑,表示需要斷開TCP連接。(FIN=1口锭,seq=x朦前,x由客戶端隨機(jī)生成)

  • 服務(wù)端會回復(fù)客戶端發(fā)送的TCP斷開請求報文,其包含seq序列號鹃操,是由回復(fù)端隨機(jī)生成的韭寸,而且會產(chǎn)生ACK字段,ACK字段數(shù)值是在客戶端發(fā)過來的seq序列號基礎(chǔ)上加1進(jìn)行回復(fù)荆隘,以便客戶端收到信息時恩伺,知曉自己的TCP斷開請求已經(jīng)得到驗證。(FIN=1椰拒,ACK=x+1晶渠,seq=y,y由服務(wù)端隨機(jī)生成)

  • 服務(wù)端在回復(fù)完客戶端的TCP斷開請求后燃观,不會馬上進(jìn)行TCP連接的斷開褒脯,服務(wù)端會先確保斷開前,所有傳輸?shù)紸的數(shù)據(jù)是否已經(jīng)傳輸完畢仪壮,一旦確認(rèn)傳輸數(shù)據(jù)完畢憨颠,就會將回復(fù)報文的FIN字段置1,并且產(chǎn)生隨機(jī)seq序列號。(FIN=1爽彤,ACK=x+1养盗,seq=z,z由服務(wù)端隨機(jī)生成)

  • 客戶端收到服務(wù)端的TCP斷開請求后适篙,會回復(fù)服務(wù)端的斷開請求往核,包含隨機(jī)生成的seq字段和ACK字段,ACK字段會在服務(wù)端的TCP斷開請求的seq基礎(chǔ)上加1嚷节,從而完成服務(wù)端請求的驗證回復(fù)聂儒。(FIN=1,ACK=z+1硫痰,seq=h衩婚,h為客戶端隨機(jī)生成) 至此TCP斷開的4次揮手過程完畢

  • 為什么TCP建立連接需要三次握手,而斷開連接需要四次揮手效斑? 因為當(dāng)Server端收到Client端的SYN連接請求報文后非春,可以直接發(fā)送SYN+ACK報文。其中ACK報文是用來應(yīng)答的缓屠,SYN報文是用來同步的奇昙。但是關(guān)閉連接時,當(dāng)Server端收到FIN報文時敌完,很可能并不會立即關(guān)閉SOCKET储耐,所以只能先回復(fù)一個ACK報文,告訴Client端滨溉,”你發(fā)的FIN報文我收到了”什湘。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文业踏,因此不能一起發(fā)送禽炬。故需要四步握手。

  • TIME_WAIT的意義勤家,為什么等于2MSL腹尖? MSL是最長報文段壽命,設(shè)置的目的是:

  • 保證A發(fā)送的最后一個ACK能夠到達(dá)B

  • 防止已失效的報文段出現(xiàn)在本連接中

  • ==TCP頭部校驗的原理伐脖,安全嗎热幔,可以仿造嗎== TCP校驗和是一個端到端的校驗和,由發(fā)送端計算讼庇,然后由接收端驗證绎巨。其目的是為了發(fā)現(xiàn)TCP首部和數(shù)據(jù)在發(fā)送端到接收端之間發(fā)生的任何改動。如果接收方檢測到校驗和有差錯蠕啄,則TCP段會被直接丟棄场勤。 可以仿造戈锻。

  • TCP、UDP的區(qū)別和媳?服務(wù)器和客戶端建立的過程格遭? TCP---傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)留瞳。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前拒迅,必須先在雙方之間建立一個TCP連接,之后才能傳輸數(shù)據(jù)她倘。TCP提供超時重發(fā)璧微,丟棄重復(fù)數(shù)據(jù),檢驗數(shù)據(jù)硬梁,流量控制等功能前硫,保證數(shù)據(jù)能順序地從一端傳到另一端。 UDP---用戶數(shù)據(jù)報協(xié)議靶溜,是一個簡單的面向數(shù)據(jù)報的運(yùn)輸層協(xié)議开瞭。UDP不提供可靠性懒震,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去罩息,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接个扰,且沒有超時重發(fā)等機(jī)制瓷炮,不保證數(shù)據(jù)按順序傳遞,故而傳輸速度很快递宅。

UDP編程的服務(wù)器端一般步驟

  1. 創(chuàng)建一個socket娘香,用函數(shù)socket();

  2. 設(shè)置socket屬性办龄,用函數(shù)setsockopt();* 可選

  3. 綁定IP地址烘绽、端口等信息到socket上,用函數(shù)bind();

  4. 循環(huán)接收數(shù)據(jù)俐填,用函數(shù)recvfrom();

  5. 關(guān)閉網(wǎng)絡(luò)連接安接;

UDP編程的客戶端一般步驟是

  1. 創(chuàng)建一個socket,用函數(shù)socket()英融;

  2. 設(shè)置socket屬性盏檐,用函數(shù)setsockopt();* 可選

  3. 綁定IP地址、端口等信息到socket上驶悟,用函數(shù)bind();* 可選

  4. 設(shè)置對方的IP地址和端口等屬性;

  5. 發(fā)送數(shù)據(jù)胡野,用函數(shù)sendto();

  6. 關(guān)閉網(wǎng)絡(luò)連接;

TCP編程的服務(wù)器端一般步驟是

  1. 創(chuàng)建一個socket痕鳍,用函數(shù)socket()硫豆;

  2. 設(shè)置socket屬性,用函數(shù)setsockopt(); * 可選

  3. 綁定IP地址、端口等信息到socket上熊响,用函數(shù)bind();

  4. 開啟監(jiān)聽恭应,用函數(shù)listen();

  5. 接收客戶端上來的連接耘眨,用函數(shù)accept()昼榛;

  6. 收發(fā)數(shù)據(jù),用函數(shù)send()和recv()剔难,或者read()和write();

  7. 關(guān)閉網(wǎng)絡(luò)連接胆屿;

  8. 關(guān)閉監(jiān)聽.

TCP編程的客戶端一般步驟是

  1. 創(chuàng)建一個socket,用函數(shù)socket()偶宫;

  2. 設(shè)置socket屬性非迹,用函數(shù)setsockopt();* 可選

  3. 綁定IP地址、端口等信息到socket上纯趋,用函數(shù)bind();* 可選

  4. 設(shè)置要連接的對方的IP地址和端口等屬性憎兽;

  5. 連接服務(wù)器,用函數(shù)connect()吵冒;

  6. 收發(fā)數(shù)據(jù)纯命,用函數(shù)send()和recv(),或者read()和write();

  7. 關(guān)閉網(wǎng)絡(luò)連接.

  • socket中的close是一次就關(guān)閉的嗎痹栖?半關(guān)閉狀態(tài)是怎么產(chǎn)生的亿汞? 不是,當(dāng)A發(fā)送給B控制FIN的時候揪阿,A到B這個方向的連接就關(guān)閉了疗我,這個時候處于半關(guān)閉的狀態(tài),但是B到A這個方向的連接并沒有關(guān)閉南捂,因為B要等到將數(shù)據(jù)全部發(fā)送完畢之后才會發(fā)送FIN給A吴裤。

  • TCP擁塞控制 重點(diǎn)掌握慢開始、擁塞避免溺健、快重傳麦牺、快恢復(fù)。

  • TCP流量控制,采用滑動窗口會用什么問題矿瘦? 流量控制是為了讓發(fā)送方的發(fā)送速率不要太快枕面,要讓接收方來得及接收。 Nagle算法:①當(dāng)發(fā)送方首都哦啊哦對第一個數(shù)據(jù)字符的確認(rèn)后缚去,再把發(fā)送緩存中的所有數(shù)據(jù)組裝成一個報文段發(fā)送出去潮秘,同時繼續(xù)對隨后到到達(dá)的數(shù)據(jù)進(jìn)行緩存。②當(dāng)?shù)竭_(dá)的數(shù)據(jù)已達(dá)到發(fā)送窗口大小的一半或已達(dá)到報文段的長度的時候就立即發(fā)送一個報文段易结。 糊涂窗口綜合征:就是由于發(fā)送端和接收端上的處理不一致枕荞,導(dǎo)致網(wǎng)絡(luò)上產(chǎn)生很多的小包柜候,結(jié)果報文段包含了一個大大的頭部,攜帶數(shù)據(jù)很少躏精。數(shù)據(jù)傳輸效率低渣刷。處理方法是等待窗口大小滿足一定的條件之后(能夠接收一個最大報文,或者緩沖區(qū)的一半)矗烛,再來發(fā)送窗口通告辅柴,這樣就不會產(chǎn)生小報文。

    滑動窗口機(jī)制為端到端設(shè)備間的數(shù)據(jù)傳輸提供了可靠的流量控制機(jī)制瞭吃。然而碌嘀,它只能在源端設(shè)備和目的端設(shè)備起作用,當(dāng)網(wǎng)絡(luò)中間設(shè)備(例如路由器等)發(fā)生擁塞時歪架,滑動窗口機(jī)制將不起作用股冗。

  • 擁塞控制和流量控制的區(qū)別?

  • 擁塞控制就是防止過多的數(shù)據(jù)注入到網(wǎng)絡(luò)中和蚪,這樣可以使網(wǎng)絡(luò)中的路由器或鏈路不會過載

  • 流量控制往往是點(diǎn)對點(diǎn)通信量的控制止状,是一個端到端的問題,流量控制要做的是抑制發(fā)送端發(fā)送數(shù)據(jù)的速率攒霹,以便接收端來得及接收怯疤。

  • TCP怎么保證可靠性?

  • 應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊

  • 超時重傳:當(dāng)TCP發(fā)出一個段后剔蹋,它啟動一個定時器旅薄,等待目的端確認(rèn)收到這個報文段。如果不能及時收到一個確認(rèn)泣崩,將重發(fā)這個報文段

  • TCP給發(fā)送的每一個包進(jìn)行編號,接收方對數(shù)據(jù)包進(jìn)行排序洛口,把有序數(shù)據(jù)傳送給應(yīng)用層

  • 校驗和:TCP將保持它首部和數(shù)據(jù)的檢驗和矫付。這是一個端到端的檢驗和,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化第焰。如果收到段的檢驗和有差錯买优,TCP將丟棄這個報文段和不確認(rèn)收到此報文段

  • TCP的接收端會丟棄重復(fù)的數(shù)據(jù)

  • 流量控制:讓發(fā)送方的發(fā)送速率不要太快,要讓接收方來得及接收

  • 擁塞控制:當(dāng)網(wǎng)絡(luò)擁塞時挺举,減少數(shù)據(jù)的發(fā)送

  • TCP滑動窗口協(xié)議

  • “窗口”對應(yīng)的是一段可以被發(fā)送者發(fā)送的字節(jié)序列杀赢,其連續(xù)的范圍稱之為“窗口”

  • “滑動”則是指這段“允許發(fā)送的范圍”是可以隨著發(fā)送的過程而變化的,方式就是按順序“滑動”

  • http協(xié)議與TCP協(xié)議的聯(lián)系 TPC協(xié)議是傳輸層協(xié)議湘纵,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸脂崔,而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)梧喷。 Http協(xié)議是建立在TCP協(xié)議基礎(chǔ)之上的砌左,當(dāng)瀏覽器需要從服務(wù)器獲取網(wǎng)頁數(shù)據(jù)的時候脖咐,會發(fā)出一次Http請求。Http會通過TCP建立起一個到服務(wù)器的連接通道汇歹,當(dāng)本次請求需要的數(shù)據(jù)完畢后屁擅,Http會立即將TCP連接斷開,這個過程是很短的产弹。所以Http連接是一種短連接派歌,是一種無狀態(tài)的連接。

  • http/1.0和http/1.1的區(qū)別痰哨?

  • http1.1提供永久性連接硝皂,即1.0使用非持久連接

  • http1.1增加host頭

  • http1.1還提供了身份認(rèn)證,狀態(tài)管理和cache緩存機(jī)制等相關(guān)的請求頭和響應(yīng)頭作谭。

  • http請求方法有哪些稽物?get和post的區(qū)別

  • OPTIONS 返回服務(wù)器針對特定資源所支持的HTTP請求方法,也可以利用向web服務(wù)器發(fā)送‘*’的請求來測試服務(wù)器的功能性

  • HEAD 向服務(wù)器索與GET請求相一致的響應(yīng)折欠,只不過響應(yīng)體將不會被返回贝或。這一方法可以再不必傳輸整個響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)小消息頭中的元信息锐秦。

  • GET 向特定的資源發(fā)出請求咪奖。注意:GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在Web Application中酱床,其中一個原因是GET可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問羊赵。Loadrunner中對應(yīng)get請求函數(shù):web_link和web_url

  • POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中扇谣。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改昧捷。 Loadrunner中對應(yīng)POST請求函數(shù):web_submit_data,web_submit_form

  • PUT 向指定資源位置上傳其最新內(nèi)容

  • DELETE 請求服務(wù)器刪除Request-URL所標(biāo)識的資源

  • TRACE 回顯服務(wù)器收到的請求,主要用于測試或診斷

  • CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器罐寨。

(1)根據(jù)HTTP規(guī)范靡挥,GET用于信息獲取,而且應(yīng)該是安全的和冪等的 (2)根據(jù)HTTP規(guī)范鸯绿,POST表示可能修改變服務(wù)器上的資源的請求

  • http狀態(tài)碼

  • http和https的區(qū)別跋破?由http升級到https需要哪些操作? HTTP 指的是超文本傳輸協(xié)議瓶蝴,https 指的是超文本傳輸安全協(xié)議毒返。HTTPS 就是將 HTTP 中的傳輸內(nèi)容進(jìn)行了加密,然后通過可靠的連接舷手,傳輸?shù)綄Ψ降臋C(jī)器上拧簸。加密的協(xié)議是 TLS,其前身是 SSL。

  • https具體怎么實現(xiàn)聚霜?狡恬,怎么確保安全性珠叔?

  • http中瀏覽器一個URL的流程,這個過程中瀏覽器做些什么弟劲,URL包括哪三個部分祷安?

  • 瀏覽器向DNS服務(wù)器查找輸入URL對應(yīng)的IP地址。

  • DNS服務(wù)器返回網(wǎng)站的IP地址兔乞。

  • 瀏覽器根據(jù)IP地址與目標(biāo)web服務(wù)器在80端口上建立TCP連接

  • 瀏覽器獲取請求頁面的html代碼汇鞭。

  • 瀏覽器在顯示窗口內(nèi)渲染HTML。

  • 窗口關(guān)閉時庸追,瀏覽器終止與服務(wù)器的連接霍骄。 URL包括:①協(xié)議(或稱為服務(wù)方式);②存有該資源的主機(jī)IP地址(有時也包括端口號)淡溯;③主機(jī)資源的具體地址读整,如目錄和文件名等。

  • http四個會話過程咱娶?

  • 建立tcp連接

  • 發(fā)出請求文檔

  • 發(fā)出響應(yīng)文檔

  • 釋放tcp連接

  • 網(wǎng)頁解析的過程

  • ==一個機(jī)器能使用的端口號上限是多少米间?為什么?可以改變嗎膘侮?如果想要用的端口超過這個限制怎么辦屈糊?== 端口號最多是65535個,端口號2個字節(jié),16位琼了,所以最大表示65535.不能改變

  • 對稱加密和非對稱加密 對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法逻锐。有時又叫傳統(tǒng)密碼算法,就是加密密鑰能夠從解密密鑰中推算出來雕薪,同時解密密鑰也可以從加密密鑰中推算出來昧诱。 非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對蹦哼,如果用公開密鑰對數(shù)據(jù)進(jìn)行加密鳄哭,只有用對應(yīng)的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進(jìn)行加密,那么只有用對應(yīng)的公開密鑰才能解密纲熏。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法锄俄。

  • 數(shù)字證書的了解(高頻)

  • 客戶端為什么信任第三方證書局劲?

  • RSA加密算法,MD5原理

  • 單條記錄高并發(fā)訪問的優(yōu)化

  • 介紹一下ping的過程奶赠,分別用到了那些協(xié)議鱼填? ping用來測試兩臺主機(jī)之間的連通性。ICMP協(xié)議

  • TCP/IP分片粘包過程

  • 正常情況:如果Socket Client 發(fā)送的數(shù)據(jù)包毅戈,在Socket Server端也是一個一個完整接收的苹丸,那個就不會出現(xiàn)粘包和分包情況愤惰,數(shù)據(jù)正常讀取。

  • 粘包情況:Socket Client發(fā)送的數(shù)據(jù)包赘理,在客戶端發(fā)送和服務(wù)器接收的情況下都有可能發(fā)送宦言,因為客戶端發(fā)送的數(shù)據(jù)都是發(fā)送的一個緩沖buffer,然后由緩沖buffer最后刷到數(shù)據(jù)鏈路層的商模,那么就有可能把數(shù)據(jù)包2的一部分?jǐn)?shù)據(jù)結(jié)合數(shù)據(jù)包1的全部被一起發(fā)送出去了奠旺,這樣在服務(wù)器端就有可能出現(xiàn)這樣的情況,導(dǎo)致讀取的數(shù)據(jù)包包含了數(shù)據(jù)包2的一部分?jǐn)?shù)據(jù)施流,這就產(chǎn)生粘包响疚,當(dāng)然也有可能把數(shù)據(jù)包1和數(shù)據(jù)包2全部讀取出來。

  • 分包情況:意思就是把數(shù)據(jù)包2或者數(shù)據(jù)包1都有可能被分開一部分發(fā)送出去瞪醋,接著發(fā)另外的部分忿晕,在服務(wù)器端有可能一次讀取操作只讀到一個完整數(shù)據(jù)包的一部分。

  • 在數(shù)據(jù)包發(fā)送的情況下银受,有可能后面的數(shù)據(jù)包分開成2個或者多個践盼,但是最前面的部分包,黏住在前面的一個完整或者部分包的后面蚓土,也就是粘包和分包同時產(chǎn)生了宏侍。

  • 有沒有抓過TCP包,描述一下

  • ==一個IP配置多個域名蜀漆,靠什么識別谅河?== 主機(jī)頭

  • 路由器的工作原理和作用,交換機(jī)的工作原理和作用

  • 對路由協(xié)議的了解與介紹确丢。內(nèi)部網(wǎng)關(guān)協(xié)議IGP包括RIP绷耍,OSPF和外網(wǎng)網(wǎng)關(guān)協(xié)議EGP和BGP

  • 路由協(xié)議使用的算法

  • 服務(wù)器攻擊(DDos攻擊)

  • TCP為什么最后要等2MSL


操作系統(tǒng)

  • 什么是臨界區(qū)?進(jìn)程進(jìn)入臨界區(qū)的調(diào)度原則是鲜侥? 臨界區(qū)是一段對共享資源的保護(hù)代碼褂始,該保護(hù)代碼在任意時刻只允許一個線程對共享資源訪問。 進(jìn)程進(jìn)入臨界區(qū)的調(diào)度原則是: ①如果有若干進(jìn)程要求進(jìn)入空閑的臨界區(qū)描函,一次僅允許一個進(jìn)程進(jìn)入崎苗。②任何時候,處于臨界區(qū)內(nèi)的進(jìn)程不可多于一個舀寓。如已有進(jìn)程進(jìn)入自己的臨界區(qū)胆数,則其它所有試圖進(jìn)入臨界區(qū)的進(jìn)程必須等待。③進(jìn)入臨界區(qū)的進(jìn)程要在有限時間內(nèi)退出互墓,以便其它進(jìn)程能及時進(jìn)入自己的臨界區(qū)必尼。④如果進(jìn)程不能進(jìn)入自己的臨界區(qū),則應(yīng)讓出CPU,避免進(jìn)程出現(xiàn)“忙等”現(xiàn)象判莉。

  • 互斥對象挣跋、臨界區(qū)和事件的區(qū)別带迟? 互斥是一種用途非常廣泛的內(nèi)核對象以政。能夠保證多個線程對同一共享資源的互斥訪問项郊。 事件對象也是屬于內(nèi)核對象,它的主要成員包括:1.使用計數(shù) 2.指明該事件是一個自動重置事件還是一個人工重置事件的布爾值3.指明該事件處于已通知狀態(tài)還是未通知狀態(tài)的布爾值渗饮。

    互斥對象但汞、事件對象與臨界區(qū)的比較:

  • 互斥對象、事件對象都是屬于內(nèi)核對象互站,利用內(nèi)核對象進(jìn)行線程同步私蕾,速度較慢,但可以在多個進(jìn)程中的多個線程間可以進(jìn)行同步胡桃。

  • 臨界區(qū)屬于在用戶模式下踩叭,同步速度較快,但是很容易進(jìn)入死鎖狀態(tài)翠胰,因為在等待進(jìn)入臨界區(qū)時無法設(shè)定超時值容贝。

  • 進(jìn)程和線程的區(qū)別?進(jìn)程和程序的區(qū)別之景? 進(jìn)程是資源(CPU斤富、內(nèi)存等)分配的基本單位,它是程序執(zhí)行時的一個實例锻狗。程序運(yùn)行時系統(tǒng)就會創(chuàng)建一個進(jìn)程满力,并為它分配資源,然后把該進(jìn)程放入進(jìn)程就緒隊列轻纪,進(jìn)程調(diào)度器選中它的時候就會為它分配CPU時間油额,程序開始真正運(yùn)行。 線程是程序執(zhí)行時的最小單位刻帚,它是進(jìn)程的一個執(zhí)行流潦嘶,是CPU調(diào)度和分派的基本單位,一個進(jìn)程可以由很多個線程組成崇众,線程間共享進(jìn)程的所有資源掂僵,每個線程有自己的堆棧和局部變量。線程由CPU獨(dú)立調(diào)度執(zhí)行顷歌,在多CPU環(huán)境下就允許多個線程同時運(yùn)行看峻。同樣多線程也可以實現(xiàn)并發(fā)操作,每個請求分配一個線程來處理衙吩。

    進(jìn)程和程序的區(qū)別

  • 進(jìn)程是動態(tài)的,而程序是靜態(tài)的溪窒。

  • 進(jìn)程有一定的生命期坤塞,而程序是指令的集合冯勉,本身無“運(yùn)動”的含義。沒有建立進(jìn)程的程序不能作為1個獨(dú)立單位得到操作系統(tǒng)的認(rèn)可摹芙。

  • 1個程序可以對應(yīng)多個進(jìn)程灼狰,但1個進(jìn)程只能對應(yīng)1個程序。進(jìn)程和程序的關(guān)系猶如演出和劇本的關(guān)系浮禾。

  • 一個進(jìn)程可以創(chuàng)建多少個線程交胚?和什么有關(guān)? 一個進(jìn)程可以創(chuàng)建的線程數(shù)由可用虛擬空間和線程的棧的大小共同決定

  • 僵尸進(jìn)程盈电?

  • 什么是死鎖蝴簇?死鎖產(chǎn)生的原因?死鎖四個必要條件匆帚?死鎖的解除熬词、死鎖控制? 死鎖是指多個進(jìn)程因競爭資源而造成的一種僵局(互相等待)吸重,若無外力作用互拾,這些進(jìn)程都將無法向前推進(jìn)。

    死鎖產(chǎn)生的原因

  • 系統(tǒng)資源的競爭 系統(tǒng)資源的競爭導(dǎo)致系統(tǒng)資源不足嚎幸,以及資源分配不當(dāng)颜矿,導(dǎo)致死鎖。

  • 進(jìn)程運(yùn)行推進(jìn)順序不合適 進(jìn)程在運(yùn)行過程中嫉晶,請求和釋放資源的順序不當(dāng)骑疆,會導(dǎo)致死鎖。

死鎖的四個條件

  1. 互斥條件:一個資源每次只能被一個進(jìn)程使用车遂,即在一段時間內(nèi)某 資源僅為一個進(jìn)程所占有封断。此時若有其他進(jìn)程請求該資源,則請求進(jìn)程只能等待舶担。

  2. 請求與保持條件:進(jìn)程已經(jīng)保持了至少一個資源坡疼,但又提出了新的資源請求,而該資源 已被其他進(jìn)程占有衣陶,此時請求進(jìn)程被阻塞柄瑰,但對自己已獲得的資源保持不放。

  3. 不可剝奪條件:進(jìn)程所獲得的資源在未使用完畢之前剪况,不能被其他進(jìn)程強(qiáng)行奪走教沾,即只能 由獲得該資源的進(jìn)程自己來釋放(只能是主動釋放)。

  4. 循環(huán)等待條件: 若干進(jìn)程間形成首尾相接循環(huán)等待資源的關(guān)系 這四個條件是死鎖的必要條件译断,只要系統(tǒng)發(fā)生死鎖授翻,這些條件必然成立,而只要上述條件之一不滿足,就不會發(fā)生死鎖堪唐。

死鎖的避免與預(yù)防

  1. 死鎖避免的基本思想 系統(tǒng)對進(jìn)程發(fā)出每一個系統(tǒng)能夠滿足的資源申請進(jìn)行動態(tài)檢查,并根據(jù)檢查結(jié)果決定是否分配資源,如果分配后系統(tǒng)可能發(fā)生死鎖,則不予分配,否則予以分配巡语。這是一種保證系統(tǒng)不進(jìn)入死鎖狀態(tài)的動態(tài)策略。 理解了死鎖的原因淮菠,尤其是產(chǎn)生死鎖的四個必要條件男公,就可以最大可能地避免、預(yù)防和解除死鎖合陵。所以枢赔,在系統(tǒng)設(shè)計、進(jìn)程調(diào)度等方面注意如何讓這四個必要條件不成立拥知,如何確定資源的合理分配算法踏拜,避免進(jìn)程永久占據(jù)系統(tǒng)資源。此外举庶,也要防止進(jìn)程在處于等待狀態(tài)的情況下占用資源执隧。因此,對資源的分配要給予合理的規(guī)劃户侥。

  2. 死鎖避免和死鎖預(yù)防的區(qū)別 死鎖預(yù)防是設(shè)法至少破壞產(chǎn)生死鎖的四個必要條件之一,嚴(yán)格的防止死鎖的出現(xiàn),而死鎖避免則不那么嚴(yán)格的限制產(chǎn)生死鎖的必要條件的存在,因為即使死鎖的必要條件存在,也不一定發(fā)生死鎖镀琉。死鎖避免是在系統(tǒng)運(yùn)行過程中注意避免死鎖的最終發(fā)生。

死鎖的解除

一旦檢測出死鎖蕊唐,就應(yīng)立即釆取相應(yīng)的措施屋摔,以解除死鎖。死鎖解除的主要兩種方法:

  1. 搶占資源替梨。從一個或多個進(jìn)程中搶占足夠數(shù)量的資源钓试,分配給死鎖進(jìn)程,以解除死鎖狀態(tài)副瀑。

  2. 終止(或撤銷)進(jìn)程弓熏。終止(或撤銷)系統(tǒng)中的一個或多個死鎖進(jìn)程,直至打破循環(huán)環(huán)路糠睡,使系統(tǒng)從死鎖狀態(tài)解脫出來挽鞠。

  • Windows內(nèi)存管理方式

  • 分頁存儲 用戶程序的邏輯地址空間被劃分成若干固定大小的區(qū)域,稱為“頁”或者“頁面”狈孔,相應(yīng)地信认,內(nèi)存物理空間也分成相對應(yīng)的若干個物理塊,頁和塊的大小相等均抽。提高了內(nèi)存的利用率嫁赏。

  • 分段存儲 將用戶程序地址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯信息油挥。提高程序的邏輯性潦蝇。

  • 段頁式存儲 兩者結(jié)合款熬。作業(yè)的地址空間首先被分成若干個邏輯分段,每段都有自己的段號护蝶,然后再將每段分成若干個大小相等的頁华烟。

  • 一個程序從開始運(yùn)行到結(jié)束的完整過程(四個過程) 預(yù)處理,編譯持灰,匯編,鏈接负饲。

  • 源代碼.c 文件先經(jīng)過預(yù)處理器堤魁,生成一個中間文件.i 文件,這個階段有兩個作用返十,一是把include的頭文件內(nèi)容進(jìn)行替換妥泉,二是處理宏定義。

  • .i 文件經(jīng)過編譯生成匯編.s 文件

  • .s 的匯編文件經(jīng)過匯編器生成.obj 的目標(biāo)文件

  • .obj 經(jīng)過鏈接器和 lib(靜態(tài)鏈接庫) dll(動態(tài)鏈接庫)文件生成 exe 可執(zhí)行程序

  • 頭文件在編譯過程中的作用洞坑?(網(wǎng)易游戲) 頭文件并不參加鏈接和編譯盲链。編譯器第一步要做的就是簡單的把頭文件在包含它的源文件中展開。不知你是否能理解這句話迟杂。也就是頭文件里面有什么內(nèi)容刽沾,通通把它移到包含這個頭文件的源文件里。(我覺得這是個很重要的概念排拷,可以幫助我們簡化理解編譯鏈接的過程侧漓,包括理解頭文件中定義靜態(tài)變量或靜態(tài)函數(shù)是怎么回事)。編譯器經(jīng)過這一步轉(zhuǎn)換后剩下什么呢监氢?就是一堆cpp文件了布蔗。而頭文件已經(jīng)不再是編譯器需要關(guān)心的東西了。編譯器接下來就要處理這一堆cpp文件了浪腐。 所以第一個階段是預(yù)處理階段纵揍,在正式的編譯階段之前進(jìn)行。預(yù)處理階段將根據(jù)已放置在文件中的預(yù)處理指令來修改源文件的內(nèi)容议街。如#include指令就是一個預(yù)處理指令泽谨,它把頭文件的內(nèi)容添加到.cpp文件中。 第二個階段編譯傍睹、優(yōu)化階段隔盛。

  • 為何不能在頭文件中定義? 防止多重定義拾稳。

  • 進(jìn)程間通信的方法吮炕?

  • 管道pipe:管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動访得,而且只能在具有親緣關(guān)系的進(jìn)程間使用龙亲。進(jìn)程的親緣關(guān)系通常是指父子進(jìn)程關(guān)系陕凹。

  • 命名管道FIFO:有名管道也是半雙工的通信方式,但是它允許無親緣關(guān)系進(jìn)程間的通信鳄炉。

  • 消息隊列MessageQueue:消息隊列是由消息的鏈表杜耙,存放在內(nèi)核中并由消息隊列標(biāo)識符標(biāo)識。消息隊列克服了信號傳遞信息少拂盯、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺點(diǎn)佑女。

  • 共享存儲SharedMemory:共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問的內(nèi)存,這段共享內(nèi)存由一個進(jìn)程創(chuàng)建谈竿,但多個進(jìn)程都可以訪問团驱。共享內(nèi)存是最快的 IPC 方式,它是針對其他進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計的空凸。它往往與其他通信機(jī)制嚎花,如信號兩,配合使用呀洲,來實現(xiàn)進(jìn)程間的同步和通信紊选。

  • 信號量Semaphore:信號量是一個計數(shù)器,可以用來控制多個進(jìn)程對共享資源的訪問道逗。它常作為一種鎖機(jī)制兵罢,防止某進(jìn)程正在訪問共享資源時,其他進(jìn)程也訪問該資源憔辫。因此趣些,主要作為進(jìn)程間以及同一進(jìn)程內(nèi)不同線程之間的同步手段。

  • 套接字Socket:套解口也是一種進(jìn)程間通信機(jī)制贰您,與其他通信機(jī)制不同的是坏平,它可用于不同及其間的進(jìn)程通信。

  • 信號 ( sinal ) : 信號是一種比較復(fù)雜的通信方式锦亦,用于通知接收進(jìn)程某個事件已經(jīng)發(fā)生舶替。

  • 線程同步方法?

  • 鎖機(jī)制

    1. 互斥鎖:提供了以排它方式阻止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法杠园。

    2. 讀寫鎖:允許多個線程同時讀共享數(shù)據(jù)顾瞪,而對寫操作互斥。

    3. 條件變量:可以以原子的方式阻塞進(jìn)程抛蚁,直到某個特定條件為真為止陈醒。對條件測試是在互斥鎖的保護(hù)下進(jìn)行的。條件變量始終與互斥鎖一起使用瞧甩。

  • 信號量機(jī)制:包括無名線程信號量與有名線程信號量

  • 信號機(jī)制:類似于進(jìn)程間的信號處理钉跷。 線程間通信的主要目的是用于線程同步,所以線程沒有象進(jìn)程通信中用于數(shù)據(jù)交換的通信機(jī)制肚逸。

  • 線程創(chuàng)建的方式有幾種爷辙?

  • 進(jìn)程調(diào)度算法彬坏?

  • 先來先去服務(wù)

  • 短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJ(P)F

  • 輪轉(zhuǎn)法

  • 多級反饋隊列算法

  • 頁面置換方法

  • 最優(yōu)頁面置換算法

  • 最近未使用頁面置換算法(NRU)

  • 先進(jìn)先出頁面置換算法(FIFO)及其改進(jìn)

  • 時鐘頁面置換算法(clock)

  • 最近最少使用頁面置換算法(LRU)

  • 工作集算法

  • 布隆過濾器的優(yōu)點(diǎn)與缺點(diǎn)

  • 布隆過濾器處理大規(guī)模問題時的持久化,包括內(nèi)存大小首先膝晾、磁盤換入換出問題

  • 文件讀寫使用的系統(tǒng)調(diào)用

  • 線程池的了解栓始、優(yōu)點(diǎn)、調(diào)度處理方式和保護(hù)任務(wù)隊列的方式 于是為了避免一個程序需要大量創(chuàng)建線程時的不必要浪費(fèi)血当,也就是最好的去避免線程創(chuàng)建與線程銷毀的時間浪費(fèi)幻赚,此時線程池就出現(xiàn)了。線程池的實現(xiàn)就是在初始的時候創(chuàng)建一些線程(業(yè)界通常認(rèn)為創(chuàng)建CPU核心數(shù)的兩倍為最佳歹颓,也有說是兩倍+1)坯屿,創(chuàng)建的線程為掛起狀態(tài)(就緒),當(dāng)我們有任務(wù)要處理的時候巍扛,我們就激活一個就緒的線程去完成任務(wù),完成任務(wù)后乏德,線程又變?yōu)榫途w態(tài)進(jìn)行繼續(xù)等待任務(wù)的到來撤奸。這樣過程使得每個線程一次創(chuàng)建,多次使用喊括,如果你的程序并沒有多次任務(wù)處理胧瓜,使得線程池中的線程長時間處于就緒態(tài),此時就建議你直接使用一個線程就好郑什,不必使用線程池府喳。

  • 線程池怎么創(chuàng)建?

  • 怎么回收線程

  • 多線程同步(項目中可能會問)

  • mencache

  • 異常和中斷的區(qū)別

  • 如何保證線程安全蘑拯?


Linux

命令 作用
pwd 顯示當(dāng)前目錄
rm 刪除
touch 生成文件
cat 讀取指定文件的內(nèi)容并打印到終端輸出
mkdir 新建目錄make directory
file 查看文件類型
whereis势腮,which联贩,find 和 locate 查找
chown 改變文件所有者
df 查看磁盤容量
wc 計數(shù)工具
tr 刪除一段文本信息中的某些文字∩诱或者將其進(jìn)行轉(zhuǎn)換
join 連接兩個文件
paste 它是在不對比數(shù)據(jù)的情況下泪幌,簡單地將多個文件合并一起,以Tab隔開
  • grep署照、awk祸泪、sed掌握程度?

  • grep命令用于打印輸出文本中匹配的模式串建芙,它使用正則表達(dá)式作為模式匹配的條件没隘。

  • sed用于過濾和轉(zhuǎn)換文本的流編輯器。

  • AWK是一種用于處理文本的編程語言工具禁荸。

  • Linux是如何避免內(nèi)存碎片的

  • 伙伴算法右蒲,用于管理物理內(nèi)存,避免內(nèi)存碎片;

  • 高速緩存Slab層用于管理內(nèi)核分配內(nèi)存赶熟,避免碎片瑰妄。

  • 文件權(quán)限的查看與修改?

  • 文件權(quán)限查看ls -l映砖,查看文件所有者间坐,所屬組,其他的文件權(quán)限邑退,rwx為777

  • 修改使用chmod命令

  • Linux如何打開一個文件竹宋?如何處理一個正在動態(tài)增長的文件?

  • IO復(fù)用的三種方法,poll瓜饥、epoll和select的特點(diǎn)和區(qū)別 select逝撬,poll,epoll都是IO多路復(fù)用的機(jī)制乓土。I/O多路復(fù)用就通過一種機(jī)制宪潮,可以監(jiān)視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒)趣苏,能夠通知程序進(jìn)行相應(yīng)的讀寫操作狡相。但select,poll食磕,epoll本質(zhì)上都是同步I/O尽棕,因為他們都需要在讀寫事件就緒后自己負(fù)責(zé)進(jìn)行讀寫,也就是說這個讀寫過程是阻塞的彬伦,而異步I/O則無需自己負(fù)責(zé)進(jìn)行讀寫滔悉,異步I/O的實現(xiàn)會負(fù)責(zé)把數(shù)據(jù)從內(nèi)核拷貝到用戶空間伊诵。

  • select:是最初解決IO阻塞問題的方法。用結(jié)構(gòu)體fd_set來告訴內(nèi)核監(jiān)聽多個文件描述符回官,該結(jié)構(gòu)體被稱為描述符集曹宴。由數(shù)組來維持哪些描述符被置位了。對結(jié)構(gòu)體的操作封裝在三個宏定義中歉提。通過輪尋來查找是否有描述符要被處理笛坦,如果沒有返回。

    存在的問題:

    1. 內(nèi)置數(shù)組的形式使得select的最大文件數(shù)受限與FD_SIZE苔巨;

    2. 每次調(diào)用select前都要重新初始化描述符集版扩,將fd從用戶態(tài)拷貝到內(nèi)核態(tài),每次調(diào)用select后侄泽,都需要將fd從內(nèi)核態(tài)拷貝到用戶態(tài)礁芦;

    3. 輪尋排查當(dāng)文件描述符個數(shù)很多時,效率很低悼尾;

  • poll:通過一個可變長度的數(shù)組解決了select文件描述符受限的問題宴偿。數(shù)組中元素是結(jié)構(gòu)體,該結(jié)構(gòu)體保存描述符的信息诀豁,每增加一個文件描述符就向數(shù)組中加入一個結(jié)構(gòu)體,結(jié)構(gòu)體只需要拷貝一次到內(nèi)核態(tài)窥妇。poll解決了select重復(fù)初始化的問題舷胜。輪尋排查的問題未解決。

  • epoll:輪尋排查所有文件描述符的效率不高活翩,使服務(wù)器并發(fā)能力受限烹骨。因此,epoll采用只返回狀態(tài)發(fā)生變化的文件描述符材泄,便解決了輪尋的瓶頸沮焕。

  • 為什么使用IO多路復(fù)用,最主要的原因是什么拉宗?

  • epoll有兩種觸發(fā)模式峦树?這兩種觸發(fā)模式有什么區(qū)別?編程的時候有什么區(qū)別旦事?

  • 上一題中編程的時候有什么區(qū)別魁巩,是在邊緣觸發(fā)的時候要把套接字中的數(shù)據(jù)讀干凈,那么當(dāng)有多個套接字時姐浮,在讀的套接字一直不停的有數(shù)據(jù)到達(dá)谷遂,如何保證其他套接字不被餓死(面試網(wǎng)易游戲的時候問的一個問題,答不上來卖鲤,印象賊深刻)肾扰。

  • GDB調(diào)試

  • Linux進(jìn)程和線程如何創(chuàng)建畴嘶、退出?進(jìn)程退出的時候集晚,自己沒有釋放的資源(如內(nèi)存沒有free)會怎樣窗悯?


數(shù)據(jù)庫

  • 存儲過程 我們常用的關(guān)系型數(shù)據(jù)庫是MySQL,操作數(shù)據(jù)庫的語言一般為SQL語句甩恼,SQL在執(zhí)行的時候需要要先編譯蟀瞧,然后執(zhí)行,而存儲過程(Stored Procedure)是一組為了完成某種特定功能的SQL語句集条摸,經(jīng)編譯后存儲在數(shù)據(jù)庫中悦污,用戶通過指定存儲過程的名字并給定參數(shù)(如果該存儲過程帶有參數(shù))來調(diào)用執(zhí)行它。 一個存儲過程是一個可編程的函數(shù)钉蒲,它在數(shù)據(jù)庫中創(chuàng)建并保存切端。它可以有SQL語句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺上執(zhí)行相同的函數(shù)顷啼,或者封裝特定功能時踏枣,存儲過程是非常有用的。數(shù)據(jù)庫中的存儲過程可以看做是對面向?qū)ο蠓椒ǖ哪M钙蒙,它允許控制數(shù)據(jù)的訪問方式茵瀑。 ==存儲過程的優(yōu)點(diǎn):==

  • 存儲過程增強(qiáng)了SQL語言的功能和靈活性:存儲過程可以用流控制語句編寫,有很強(qiáng)的靈活性躬厌,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算马昨。

  • 存儲過程允許標(biāo)準(zhǔn)組件式編程:存儲過程被創(chuàng)建后,可以在程序中被多次調(diào)用扛施,而不必重新編寫該存儲過程的SQL語句鸿捧。而且可以隨時對存儲過程進(jìn)行修改,對應(yīng)用程序源代碼毫無影響疙渣。

  • 存儲過程能實現(xiàn)較快的執(zhí)行速度:如果某一操作包含大量的Transaction-SQL代碼或分別被多次執(zhí)行匙奴,那么存儲過程要比批處理的執(zhí)行速度快很多。因為存儲過程是預(yù)編譯的妄荔。在首次運(yùn)行一個存儲過程時泼菌,優(yōu)化器對其進(jìn)行分析優(yōu)化,并且給出最終被存儲在系統(tǒng)表中的執(zhí)行計劃懦冰。而批處理的Transaction-SQL語句在每次運(yùn)行時都要進(jìn)行編譯和優(yōu)化灶轰,速度相對要慢一些。

  • 存儲過程能減少網(wǎng)絡(luò)流量:針對同一個數(shù)據(jù)庫對象的操作(如查詢刷钢、修改)笋颤,如果這一操作所涉及的Transaction-SQL語句被組織成存儲過程,那么當(dāng)在客戶計算機(jī)上調(diào)用該存儲過程時,網(wǎng)絡(luò)中傳送的只是該調(diào)用語句伴澄,從而大大增加了網(wǎng)絡(luò)流量并降低了網(wǎng)絡(luò)負(fù)載赋除。

  • 存儲過程可被作為一種安全機(jī)制來充分利用:系統(tǒng)管理員通過執(zhí)行某一存儲過程的權(quán)限進(jìn)行限制,能夠?qū)崿F(xiàn)對相應(yīng)的數(shù)據(jù)的訪問權(quán)限的限制非凌,避免了非授權(quán)用戶對數(shù)據(jù)的訪問举农,保證了數(shù)據(jù)的安全。

  • 索引 索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)敞嗡;在數(shù)據(jù)之外颁糟,數(shù)據(jù)庫系統(tǒng)還維護(hù)著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù)喉悴,可以在這些數(shù)據(jù)結(jié)構(gòu)上實現(xiàn)高級查找算法棱貌,提高查詢速度,這種數(shù)據(jù)結(jié)構(gòu)箕肃,就是索引婚脱。 B-Tree 索引:最常見的索引類型,大部分引擎都支持B樹索引勺像。 HASH 索引:只有Memory引擎支持障贸,使用場景簡單。 R-Tree 索引(空間索引):空間索引是MyISAM的一種特殊索引類型吟宦,主要用于地理空間數(shù)據(jù)類型篮洁。 Full-text (全文索引):全文索引也是MyISAM的一種特殊索引類型,主要用于全文索引殃姓,InnoDB從MySQL5.6版本提供對全文索引的支持嘀粱。

  • 事物是什么? 事務(wù)(Transaction)是并發(fā)控制的基本單位辰狡。所謂的事務(wù),它是一個操作序列垄分,由一條或者多條sql語句組成宛篇,這些操作要么都執(zhí)行,要么都不執(zhí)行薄湿,它是一個不可分割的工作單位叫倍。

  • acid特性?

  • 原子性(Atomicity):指整個數(shù)據(jù)庫事務(wù)是不可分割的工作單位豺瘤。只有事務(wù)中所有的數(shù)據(jù)庫操作都執(zhí)行成功吆倦,整個事務(wù)的執(zhí)行才算成功。事務(wù)中任何一個sql語句執(zhí)行失敗坐求,那么已經(jīng)執(zhí)行成功的sql語句也必須撤銷蚕泽,數(shù)據(jù)庫狀態(tài)應(yīng)該退回到執(zhí)行事務(wù)前的狀態(tài)。

  • 一致性(Consistency):事務(wù)應(yīng)確保數(shù)據(jù)庫的狀態(tài)從一個一致狀態(tài)轉(zhuǎn)變?yōu)榱硪粋€一致狀態(tài)。一致狀態(tài)的含義是數(shù)據(jù)庫中的數(shù)據(jù)應(yīng)滿足完整性約束须妻,也就是說在事務(wù)開始之前和事務(wù)結(jié)束以后仔蝌,數(shù)據(jù)庫的完整性約束沒有被破壞

  • 隔離性(Isolation):隔離性也叫做并發(fā)控制、可串行化或者鎖荒吏。事務(wù)的隔離性要求每個讀寫事務(wù)的對象與其它事務(wù)的操作對象能相互分離敛惊,即該事務(wù)提交前對其它事務(wù)都不可見,這通常使用鎖來實現(xiàn)多個事務(wù)并發(fā)執(zhí)行時绰更,一個事務(wù)的執(zhí)行不應(yīng)影響其他事務(wù)的執(zhí)行瞧挤。

  • 持久性(Durability):表示事務(wù)一旦提交了,其結(jié)果就是永久性的儡湾,也就是數(shù)據(jù)就已經(jīng)寫入到數(shù)據(jù)庫了特恬,如果發(fā)生了宕機(jī)等事故,數(shù)據(jù)庫也能將數(shù)據(jù)恢復(fù)盒粮。

  • 數(shù)據(jù)庫中的“主屬性”鸵鸥、“碼”、“主碼”的區(qū)別是什么丹皱?

  • 在數(shù)據(jù)庫的表(關(guān)系)中能夠用于唯一區(qū)分開每個記錄(元組)的屬性或?qū)傩缘募隙恃ǎ覀兎Q之為碼(候選碼)。

  • 當(dāng)我們指定其中一個用來區(qū)分開每個記錄(元組)的碼為主碼摊崭。

  • 主屬性是指包含在候選碼中的屬性讼油。 換句話說:主碼和碼的關(guān)系就像班長和班長候選人之間的關(guān)系。 每個班長候選人呢簸,我們可稱之為主屬性矮台,只不過在數(shù)據(jù)庫中蛀恩,候選碼可能是多個屬性共同組成的遇八。

  • 100層樓,2個雞蛋梁肿,雞蛋從某一個臨界樓層丟下會摔碎蛤迎,請設(shè)計方案确虱,能用最小的次數(shù)找到臨界樓層

  • 用3,4,5,6,7,8組成不重復(fù)的4位奇數(shù),按照從小到大的順序排序替裆,第62個數(shù)字是校辩? 首先是奇數(shù)的話,末位只能是3,5,7中的一種辆童,則有C*{3}^{1}種方法宜咒。前面3個數(shù)是A*{5}^{3}排列方法,那么總的方法數(shù)為C*{3}^{1}×A*{5}^{3} = 180種方法把鉴,組成的奇數(shù)按照從小到大排序故黑。當(dāng)?shù)谝晃皇?的時候,末位一定是5或者7,那么這樣的數(shù)一共有C*{2}^{1}×A*{4}^{2} = 24種方法倍阐,當(dāng)?shù)谝晃皇?的時候概疆,末位一定是3或者5或者7,這樣的數(shù)一共有C*{3}^{1}×A*{4}^{2} = 36種方法峰搪,那么這里一共就有24+36=60種方法岔冀,當(dāng)?shù)谝晃皇?的時候,末位一定是3或者7概耻,取較小的數(shù)使套,第二位是3,最后一位是7鞠柄,那么第61個數(shù)是5347侦高,第62個數(shù)為5367.

  • 24點(diǎn)游戲

  • 25匹馬,5個跑道厌杜,如何通過最少的比賽次數(shù)確定前3名奉呛?

  • 一家人過橋問題

  • 瀏覽器輸入URL后的流程

  • .什么是IO復(fù)用,什么是非阻塞IO

  • 作者:東東兒 鏈接:https://www.nowcoder.com/discuss/383932?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack 來源:藕痪。客網(wǎng)

    .什么是IO復(fù)用瞧壮,什么是非阻塞IO 2.TCP和UDP 3.流量控制解決了什么問題,怎么實現(xiàn)匙握,接收窗口為0了怎么辦 4.哈希表的作用咆槽,怎么解決哈希沖突 5.布隆過濾器原理作用 6.redis的線程模型 7.項目結(jié)構(gòu) 8.判定是否是鏡像二叉樹

    作者:東東兒 鏈接:https://www.nowcoder.com/discuss/383932?type=all&order=time&pos=&page=1&channel=-1&source_id=search_all_nctrack 來源:牛客網(wǎng)

    聊項目圈纺,reactor模型秦忿,線程模型 2.epoll高效嗎?為什么蛾娶?什么情況高效 3.LRU置換算法實現(xiàn)(說思路灯谣,不實現(xiàn)) 3.http?無狀態(tài)蛔琅?無狀態(tài)怎么實現(xiàn)用戶登錄酬屉? 4.session,cookie揍愁,token 5.csrf攻擊,怎么防御 6.linux進(jìn)程空間分布 7.簡單題(從一個棋盤的左上角走到右下角有多少種走法杀饵,只能向右和向下走)

    5.url訪問網(wǎng)頁的過程莽囤,用了哪些協(xié)議? 6.算法切距,不用乘除運(yùn)算實現(xiàn)除法(一開始用減法朽缎,面試官讓優(yōu)化,提醒了用位運(yùn)算) 7.算法,判斷4張撲克牌是不是順子话肖,大小王可以作為任意牌

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末北秽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子最筒,更是在濱河造成了極大的恐慌贺氓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件床蜘,死亡現(xiàn)場離奇詭異辙培,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)邢锯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門扬蕊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丹擎,你說我怎么就攤上這事尾抑。” “怎么了蒂培?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵再愈,是天一觀的道長。 經(jīng)常有香客問我毁渗,道長践磅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任灸异,我火速辦了婚禮府适,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肺樟。我一直安慰自己檐春,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布么伯。 她就那樣靜靜地躺著疟暖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪田柔。 梳的紋絲不亂的頭發(fā)上俐巴,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音硬爆,去河邊找鬼欣舵。 笑死,一個胖子當(dāng)著我的面吹牛缀磕,可吹牛的內(nèi)容都是我干的缘圈。 我是一名探鬼主播劣光,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼糟把!你這毒婦竟也來了绢涡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遣疯,失蹤者是張志新(化名)和其女友劉穎雄可,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另锋,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡滞项,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夭坪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片文判。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖室梅,靈堂內(nèi)的尸體忽然破棺而出戏仓,到底是詐尸還是另有隱情,我是刑警寧澤亡鼠,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布赏殃,位于F島的核電站,受9級特大地震影響间涵,放射性物質(zhì)發(fā)生泄漏仁热。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一勾哩、第九天 我趴在偏房一處隱蔽的房頂上張望抗蠢。 院中可真熱鬧,春花似錦思劳、人聲如沸迅矛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秽褒。三九已至,卻和暖如春威兜,著一層夾襖步出監(jiān)牢的瞬間销斟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工椒舵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚂踊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓逮栅,卻偏偏與公主長得像悴势,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子措伐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容