linux 共享内存_盘点那些linux 后台开发类常见问题及知识点
一、linux和os:
netstat :顯示網(wǎng)絡(luò)狀態(tài)
tcpdump:主要是截獲通過本機(jī)網(wǎng)絡(luò)接口的數(shù)據(jù),用以分析。能夠截獲當(dāng)前所有通過本機(jī)網(wǎng)卡的數(shù)據(jù)包。它擁有靈活的過濾機(jī)制,可以確保得到想要的數(shù)據(jù)。
ipcs:檢查系統(tǒng)上共享內(nèi)存的分配
ipcrm:手動(dòng)解除系統(tǒng)上共享內(nèi)存的分配
(如果這四個(gè)命令沒聽說過或者不能熟練使用,基本上可以回家,通過的概率較小 ^_^ ,這四個(gè)命令的熟練掌握程度基本上能體現(xiàn)面試者實(shí)際開發(fā)和調(diào)試程序的經(jīng)驗(yàn))
cpu 內(nèi)存 硬盤 等等與系統(tǒng)性能調(diào)試相關(guān)的命令必須熟練掌握,設(shè)置修改權(quán)限 tcp網(wǎng)絡(luò)狀態(tài)查看 各進(jìn)程狀態(tài) 抓包相關(guān)等相關(guān)命令 必須熟練掌握
awk sed需掌握
1. 共享內(nèi)存的使用實(shí)現(xiàn)原理
(必考必問,然后共享內(nèi)存段被映射進(jìn)進(jìn)程空間之后,存在于進(jìn)程空間的什么位置?共享內(nèi)存段最大限制是多少?)
共享內(nèi)存定義:共享內(nèi)存是最快的可用IPC(進(jìn)程間通信)形式。它允許多個(gè)不相關(guān)的進(jìn)程去訪問同一部分邏輯內(nèi)存。共享內(nèi)存是由IPC為一個(gè)進(jìn)程創(chuàng)建的一個(gè)特殊的地址范圍,它將出現(xiàn)在進(jìn)程的地址空間中。其他進(jìn)程可以把同一段共享內(nèi)存段“連接到”它們自己的地址空間里去。所有進(jìn)程都可以訪問共享內(nèi)存中的地址。如果一個(gè)進(jìn)程向這段共享內(nèi)存寫了數(shù)據(jù),所做的改動(dòng)會(huì)立刻被有訪問同一段共享內(nèi)存的其他進(jìn)程看到。因此共享內(nèi)存對(duì)于數(shù)據(jù)的傳輸是非常高效的。
共享內(nèi)存的原理:共享內(nèi)存是最有用的進(jìn)程間通信方式之一,也是最快的IPC形式。兩個(gè)不同進(jìn)程A、B共享內(nèi)存的意思是,同一塊物理內(nèi)存被映射到進(jìn)程A、B各自的進(jìn)程地址空間。進(jìn)程A可以即時(shí)看到進(jìn)程B對(duì)共享內(nèi)存中數(shù)據(jù)的更新,反之亦然。
2. c++進(jìn)程內(nèi)存空間分布(注意各部分的內(nèi)存地址誰高誰低,注意棧從高到低分配,堆從低到高分配)
3. 使用過哪些進(jìn)程間通訊機(jī)制,并詳細(xì)說明(重點(diǎn))
4. makefile編寫,雖然比較基礎(chǔ),但是會(huì)被問到
5. gdb調(diào)試相關(guān)的經(jīng)驗(yàn),會(huì)被問到
6. 如何定位內(nèi)存泄露?
內(nèi)存泄漏是指堆內(nèi)存的泄漏。堆內(nèi)存是指程序從堆中分配的、大小任意的(內(nèi)存塊的大小可以在程序運(yùn)行期決定)、使用完后必須顯示釋放的內(nèi)存。應(yīng)用程序一般使用malloc、realloc、new等函數(shù)從堆中分配到一塊內(nèi)存,使用完后,程序必須負(fù)責(zé)相應(yīng)的調(diào)用free或delete釋放該內(nèi)存塊。否則,這塊內(nèi)存就不能被再次使用,我們就說這塊內(nèi)存泄漏了。
C++程序缺乏相應(yīng)的手段來檢測(cè)內(nèi)存信息,只能使用top指令觀察進(jìn)程的動(dòng)態(tài)內(nèi)存總額。而且程序退出時(shí),我們無法獲知任何內(nèi)存泄漏信息
使用Linux命令回收內(nèi)存,可以使用ps、kill兩個(gè)命令檢測(cè)內(nèi)存使用情況和進(jìn)行回收。在使用超級(jí)用戶權(quán)限時(shí)使用命令“ps”,它會(huì)列出所有正在運(yùn)行的程序名稱和對(duì)應(yīng)的進(jìn)程號(hào)(PID)。kill命令的工作原理是向Linux操作系統(tǒng)的內(nèi)核送出一個(gè)系統(tǒng)操作信號(hào)和程序的進(jìn)程號(hào)(PID)
7. 動(dòng)態(tài)鏈接和靜態(tài)鏈接的區(qū)別
動(dòng)態(tài)鏈接是指在生成可執(zhí)行文件時(shí)不將所有程序用到的函數(shù)鏈接到一個(gè)文件,因?yàn)橛性S多函數(shù)在操作系統(tǒng)帶的dll文件中,當(dāng)程序運(yùn)行時(shí)直接從操作系統(tǒng)中找。 而靜態(tài)鏈接就是把所有用到的函數(shù)全部鏈接到exe文件中。
動(dòng)態(tài)鏈接是只建立一個(gè)引用的接口,而真正的代碼和數(shù)據(jù)存放在另外的可執(zhí)行模塊中,在運(yùn)行時(shí)再裝入;而靜態(tài)鏈接是把所有的代碼和數(shù)據(jù)都復(fù)制到本模塊中,運(yùn)行時(shí)就不再需要庫了。
8. 32位系統(tǒng)一個(gè)進(jìn)程最多有多少堆內(nèi)存
9. 多線程和多進(jìn)程的區(qū)別
重點(diǎn) 面試官最最關(guān)心的一個(gè)問題,必須從cpu調(diào)度,上下文切換,數(shù)據(jù)共享,多核cup利用率,資源占用,等等各方面回答,然后有一個(gè)問題必須會(huì)被問到:哪些東西是一個(gè)線程私有的?答案中必須包含寄存器,否則悲催
10. 說出你所知道的linux系統(tǒng)的各類同步機(jī)制(重點(diǎn))
11. 什么是死鎖?如何避免死鎖(每個(gè)技術(shù)面試官必問)
12. 死鎖的條件
(互斥條件(Mutual exclusion):
1、資源不能被共享,只能由一個(gè)進(jìn)程使用。
2、請(qǐng)求與保持條件(Hold and wait):已經(jīng)得到資源的進(jìn)程可以再次申請(qǐng)新的資源。
3、非剝奪條件(No pre-emption):已經(jīng)分配的資源不能從相應(yīng)的進(jìn)程中被強(qiáng)制地剝奪。
4、循環(huán)等待條件(Circular wait):系統(tǒng)中若干進(jìn)程組成環(huán)路,該環(huán)路中每個(gè)進(jìn)程都在等待相鄰進(jìn)程正占用的資源。
13. 處理死鎖的策略:
忽略該問題。例如鴕鳥算法,該算法可以應(yīng)用在極少發(fā)生死鎖的的情況下。為什么叫鴕鳥算法呢,因?yàn)閭髡f中鴕鳥看到危險(xiǎn)就把頭埋在地底下,可能鴕鳥覺得看不到危險(xiǎn)也就沒危險(xiǎn)了吧。跟掩耳盜鈴有點(diǎn)像。
檢測(cè)死鎖并且恢復(fù)。
仔細(xì)地對(duì)資源進(jìn)行動(dòng)態(tài)分配,以避免死鎖。
通過破除死鎖四個(gè)必要條件之一,來防止死鎖產(chǎn)生。)
14. 列舉說明linux系統(tǒng)的各類異步機(jī)制
15. exit()與_exit()的區(qū)別?
_exit終止調(diào)用進(jìn)程,但不關(guān)閉文件,不清除輸出緩存,也不調(diào)用出口函數(shù)。exit函數(shù)將終止調(diào)用進(jìn)程。在退出程序之前,所有文件關(guān)閉,緩沖輸出內(nèi)容將刷新定義,并調(diào)用所有已刷新的“出口函數(shù)”(由atexit定義)。
‘exit()’與‘_exit()’有不少區(qū)別在使用‘fork()’,特別是‘vfork()’時(shí)變得很突出。
‘exit()’與‘_exit()’的基本區(qū)別在于前一個(gè)調(diào)用實(shí)施與調(diào)用庫里用戶狀態(tài)結(jié)構(gòu)(user-mode constructs)有關(guān)的清除工作(clean-up),而且調(diào)用用戶自定義的清除程序
16. linux的內(nèi)存管理機(jī)制是什么?
Linux虛擬內(nèi)存的實(shí)現(xiàn)需要6種機(jī)制的支持:地址映射機(jī)制、內(nèi)存分配回收機(jī)制、緩存和刷新機(jī)制、請(qǐng)求頁機(jī)制、交換機(jī)制和內(nèi)存共享機(jī)制
內(nèi)存管理程序通過映射機(jī)制把用戶程序的邏輯地址映射到物理地址。當(dāng)用戶程序運(yùn)行時(shí),如果發(fā)現(xiàn)程序中要用的虛地址沒有對(duì)應(yīng)的物理內(nèi)存,就發(fā)出了請(qǐng)求頁要求。如果有空閑的內(nèi)存可供分配,就請(qǐng)求分配內(nèi)存(于是用到了內(nèi)存的分配和回收),并把正在使用的物理頁記錄在緩存中(使用了緩存機(jī)制)。如果沒有足夠的內(nèi)存可供分配,那么就調(diào)用交換機(jī)制;騰出一部分內(nèi)存。另外,在地址映射中要通過TLB(翻譯后援存儲(chǔ)器)來尋找物理頁;交換機(jī)制中也要用到交換緩存,并且把物理頁內(nèi)容交換到交換文件中,也要修改頁表來映射文件地址。
17. linux的任務(wù)調(diào)度機(jī)制是什么?
18. 標(biāo)準(zhǔn)庫函數(shù)和系統(tǒng)調(diào)用的區(qū)別?
19. 系統(tǒng)如何將一個(gè)信號(hào)通知到進(jìn)程
二、c語言:
宏定義和展開(必須精通)
位操作(必須精通)
指針操作和計(jì)算(必須精通)
內(nèi)存分配(必須精通)
sizeof必考
各類庫函數(shù)必須非常熟練的實(shí)現(xiàn)
哪些庫函數(shù)屬于高危函數(shù),為什么?(strcpy等等)
三、c++:
1. 一個(gè)String類的完整實(shí)現(xiàn)必須很快速寫出來(注意:賦值構(gòu)造,operator=是關(guān)鍵)
2. 虛函數(shù)的作用和實(shí)現(xiàn)原理(必問必考,實(shí)現(xiàn)原理必須很熟)
有虛函數(shù)的類內(nèi)部有一個(gè)稱為“虛表”的指針(有多少個(gè)虛函數(shù)就有多少個(gè)指針),這個(gè)就是用來指向這個(gè)類虛函數(shù)。也就是用它來確定調(diào)用該那個(gè)函數(shù)。
實(shí)際上在編譯的時(shí)候,編譯器會(huì)自動(dòng)加入“虛表”。虛表的使用方法是這樣的:如果派生類在自己的定義中沒有修改基類的虛函數(shù),就指向基類的虛函數(shù);如果派生類改寫了基類的虛函數(shù)(就是自己重新定義),這時(shí)虛表則將原來指向基類的虛函數(shù)的地址替換為指向自身虛函數(shù)的指針。那些被virtual關(guān)鍵字修飾的成員函數(shù),就是虛函數(shù)。虛函數(shù)的作用,用專業(yè)術(shù)語來解釋就是實(shí)現(xiàn)多態(tài)性(Polymorphism),多態(tài)性是將接口與實(shí)現(xiàn)進(jìn)行分離;用形象的語言來解釋就是實(shí)現(xiàn)以共同的方法,但因個(gè)體差異而采用不同的策略。
每個(gè)類都有自己的vtbl,vtbl的作用就是保存自己類中虛函數(shù)的地址,我們可以把vtbl形象地看成一個(gè)數(shù)組,這個(gè)數(shù)組的每個(gè)元素存放的就是虛函數(shù)的地址,
虛函數(shù)的效率低,其原因就是,在調(diào)用虛函數(shù)之前,還調(diào)用了獲得虛函數(shù)地址的代碼。
3. sizeof一個(gè)類求大小(注意成員變量,函數(shù),虛函數(shù),繼承等等對(duì)大小的影響)
4. 指針和引用的區(qū)別(一般都會(huì)問到)
指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址;而引用是某塊內(nèi)存的別名。
相同點(diǎn): 都是地址的概念;
區(qū)別:
指針是一個(gè)實(shí)體,而引用僅是個(gè)別名;
引用使用時(shí)無需解引用(*),指針需要解引用;
引用只能在定義時(shí)被初始化一次,之后不可變;指針可變;
引用沒有 const,指針有 const;
引用不能為空,指針可以為空;
“sizeof 引用”得到的是所指向的變量(對(duì)象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂?的大小;
指針和引用的自增(++)運(yùn)算意義不一樣;
從內(nèi)存分配上看:程序?yàn)橹羔樧兞糠峙鋬?nèi)存區(qū)域,而引用不需要分配內(nèi)存區(qū)域。
5. 多重類構(gòu)造和析構(gòu)的順序
先調(diào)用基類的構(gòu)造函數(shù),在調(diào)用派生類的構(gòu)造函數(shù)
先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)
6. stl各容器的實(shí)現(xiàn)原理(必考)
STL共有六大組件
1、容器。2、算法。3、迭代器。4、仿函數(shù)。6、適配器。
序列式容器:
vector-數(shù)組,元素不夠時(shí)再重新分配內(nèi)存,拷貝原來數(shù)組的元素到新分配的數(shù)組中。
list-單鏈表。
deque-分配中央控制器map(并非map容器),map記錄著一系列的固定長(zhǎng)度的數(shù)組的地址.記住這個(gè)map僅僅保存的是數(shù)組的地址,真正的數(shù)據(jù)在數(shù)組中存放著.deque先從map中央的位置(因?yàn)殡p向隊(duì)列,前后都可以插入元素)找到一個(gè)數(shù)組地址,向該數(shù)組中放入數(shù)據(jù),數(shù)組不夠時(shí)繼續(xù)在map中找空閑的數(shù)組來存數(shù)據(jù)。當(dāng)map也不夠時(shí)重新分配內(nèi)存當(dāng)作新的map,把原來map中的內(nèi)容copy的新map中。所以使用deque的復(fù)雜度要大于vector,盡量使用vector。
stack-基于deque。
queue-基于deque。
heap-完全二叉樹,使用最大堆排序,以數(shù)組(vector)的形式存放。
priority_queue-基于heap。
slist-雙向鏈表。
關(guān)聯(lián)式容器:
set,map,multiset,multimap-基于紅黑樹(RB-tree),一種加上了額外平衡條件的二叉搜索樹。
hash table-散列表。將待存數(shù)據(jù)的key經(jīng)過映射函數(shù)變成一個(gè)數(shù)組(一般是vector)的索引,例如:數(shù)據(jù)的key%數(shù)組的大小=數(shù)組的索引(一般文本通過算法也可以轉(zhuǎn)換為數(shù)字),然后將數(shù)據(jù)當(dāng)作此索引的數(shù)組元素。有些數(shù)據(jù)的key經(jīng)過算法的轉(zhuǎn)換可能是同一個(gè)數(shù)組的索引值(碰撞問題,可以用線性探測(cè),二次探測(cè)來解決),STL是用開鏈的方法來解決的,每一個(gè)數(shù)組的元素維護(hù)一個(gè)list,他把相同索引值的數(shù)據(jù)存入一個(gè)list,這樣當(dāng)list比較短時(shí)執(zhí)行刪除,插入,搜索等算法比較快。
hash_map,hash_set,hash_multiset,hash_multimap-基于hash table。
7. extern c 是干啥的,(必須將編譯器的函數(shù)名修飾的機(jī)制解答的很透徹)
8. volatile是干啥用的,(必須將cpu的寄存器緩存機(jī)制回答的很透徹)
volatile的本意是“易變的” 因?yàn)樵L問寄存器要比訪問內(nèi)存單元快的多,所以編譯器一般都會(huì)作減少存取內(nèi)存的優(yōu)化,但有可能會(huì)讀臟數(shù)據(jù)。當(dāng)要求使用volatile聲明變量值的時(shí)候,系統(tǒng)總是重新從它所在的內(nèi)存讀取數(shù)據(jù),即使它前面的指令剛剛從該處讀取過數(shù)據(jù)。精確地說就是,遇到這個(gè)關(guān)鍵字聲明的變量,編譯器對(duì)訪問該變量的代碼就不再進(jìn)行優(yōu)化,從而可以提供對(duì)特殊地址的穩(wěn)定訪問;如果不使用volatile,則編譯器將對(duì)所聲明的語句進(jìn)行優(yōu)化。(簡(jiǎn)潔的說就是:volatile關(guān)鍵詞影響編譯器編譯的結(jié)果,用volatile聲明的變量表示該變量隨時(shí)可能發(fā)生變化,與該變量有關(guān)的運(yùn)算,不要進(jìn)行編譯優(yōu)化,以免出錯(cuò))
volatile的本質(zhì):
編譯器的優(yōu)化
在本次線程內(nèi), 當(dāng)讀取一個(gè)變量時(shí),為提高存取速度,編譯器優(yōu)化時(shí)有時(shí)會(huì)先把變量讀取到一個(gè)寄存器中;以后,再取變量值時(shí),就直接從寄存器中取值;當(dāng)變量值在本線程里改變時(shí),會(huì)同時(shí)把變量的新值copy到該寄存器中,以便保持一致。
當(dāng)變量在因別的線程等而改變了值,該寄存器的值不會(huì)相應(yīng)改變,從而造成應(yīng)用程序讀取的值和實(shí)際的變量值不一致。
當(dāng)該寄存器在因別的線程等而改變了值,原變量的值不會(huì)改變,從而造成應(yīng)用程序讀取的值和實(shí)際的變量值不一致。
volatile應(yīng)該解釋為“直接存取原始內(nèi)存地址”比較合適,“易變的”這種解釋簡(jiǎn)直有點(diǎn)誤導(dǎo)人。
9. static const等等的用法,(能說出越多越好)
四、數(shù)據(jù)結(jié)構(gòu)或者算法:
各類樹結(jié)構(gòu)的實(shí)現(xiàn)和應(yīng)用
各類排序:大根堆的實(shí)現(xiàn),快排(如何避免最糟糕的狀態(tài)?),bitmap的運(yùn)用等等
hash, 任何一個(gè)技術(shù)面試官必問(例如為什么一般hashtable的桶數(shù)會(huì)取一個(gè)素?cái)?shù)?如何有效避免hash結(jié)果值的碰撞)
五、網(wǎng)絡(luò)編程:
1. tcp與udp的區(qū)別(必問)
基于連接與無連接
對(duì)系統(tǒng)資源的要求(TCP較多,UDP少)
UDP程序結(jié)構(gòu)較簡(jiǎn)單
流模式與數(shù)據(jù)報(bào)模式
TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證
TCP—傳輸控制協(xié)議,提供的是面向連接、可靠的字節(jié)流服務(wù)。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個(gè)TCP連接,之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重發(fā),丟棄重復(fù)數(shù)據(jù),檢驗(yàn)數(shù)據(jù),流量控制等功能,保證數(shù)據(jù)能從一端傳到另一端。
UDP—用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快
2. socket服務(wù)端的實(shí)現(xiàn),select和epoll的區(qū)別(必問)
select的本質(zhì)是采用32個(gè)整數(shù)的32位,即32*32= 1024來標(biāo)識(shí),fd值為1-1024。當(dāng)fd的值超過1024限制時(shí),就必須修改FD_SETSIZE的大小。這個(gè)時(shí)候就可以標(biāo)識(shí)32*max值范圍的fd。
對(duì)于單進(jìn)程多線程,每個(gè)線程處理多個(gè)fd的情況,select是不適合的。
1.所有的線程均是從1-32*max進(jìn)行掃描,每個(gè)線程處理的均是一段fd值,這樣做有點(diǎn)浪費(fèi)
2.1024上限問題,一個(gè)處理多個(gè)用戶的進(jìn)程,fd值遠(yuǎn)遠(yuǎn)大于1024
所以這個(gè)時(shí)候應(yīng)該采用poll,
poll傳遞的是數(shù)組頭指針和該數(shù)組的長(zhǎng)度,只要數(shù)組的長(zhǎng)度不是很長(zhǎng),性能還是很不錯(cuò)的,因?yàn)閜oll一次在內(nèi)核中申請(qǐng)4K(一個(gè)頁的大小來存放fd),盡量控制在4K以內(nèi)
epoll還是poll的一種優(yōu)化,返回后不需要對(duì)所有的fd進(jìn)行遍歷,在內(nèi)核中維持了fd的列表。select和poll是將這個(gè)內(nèi)核列表維持在用戶態(tài),然后傳遞到內(nèi)核中。但是只有在2.6的內(nèi)核才支持。
epoll更適合于處理大量的fd ,且活躍fd不是很多的情況,畢竟fd較多還是一個(gè)串行的操作
epoll哪些觸發(fā)模式,有啥區(qū)別?(必須非常詳盡的解釋水平觸發(fā)和邊緣觸發(fā)的區(qū)別,以及邊緣觸發(fā)在編程中要做哪些更多的確認(rèn))
epoll可以同時(shí)支持水平觸發(fā)和邊緣觸發(fā)(Edge Triggered,只告訴進(jìn)程哪些文件描述符剛剛變?yōu)榫途w狀態(tài),它只說一遍,如果我們沒有采取行動(dòng),那么它將不會(huì)再次告知,這種方式稱為邊緣觸發(fā)),理論上邊緣觸發(fā)的性能要更高一些,但是代碼實(shí)現(xiàn)相當(dāng)復(fù)雜。
epoll同樣只告知那些就緒的文件描述符,而且當(dāng)我們調(diào)用epoll_wait()獲得就緒文件描述符時(shí),返回的不是實(shí)際的描述符,而是一個(gè)代表就緒描述符數(shù)量的值,你只需要去epoll指定的一個(gè)數(shù)組中依次取得相應(yīng)數(shù)量的文件描述符即可,這里也使用了內(nèi)存映射(mmap)技術(shù),這樣便徹底省掉了這些文件描述符在系統(tǒng)調(diào)用時(shí)復(fù)制的開銷。
另一個(gè)本質(zhì)的改進(jìn)在于epoll采用基于事件的就緒通知方式。在select/poll中,進(jìn)程只有在調(diào)用一定的方法后,內(nèi)核才對(duì)所有監(jiān)視的文件描述符進(jìn)行掃描,而epoll事先通過epoll_ctl()來注冊(cè)一個(gè)文件描述符,一旦基于某個(gè)文件描述符就緒時(shí),內(nèi)核會(huì)采用類似callback的回調(diào)機(jī)制,迅速激活這個(gè)文件描述符,當(dāng)進(jìn)程調(diào)用epoll_wait()時(shí)便得到通知。
3. 大規(guī)模連接上來,并發(fā)模型怎么設(shè)計(jì)
4. tcp結(jié)束連接怎么握手,time_wait狀態(tài)是什么,為什么會(huì)有time_wait狀態(tài)?哪一方會(huì)有time_wait狀態(tài),如何避免time_wait狀態(tài)占用資源(必須回答的詳細(xì))
5. tcp頭多少字節(jié)?哪些字段?(必問)
頭20字節(jié),選項(xiàng)12字節(jié)
6. connect會(huì)阻塞,怎么解決?(必考必問)
最通常的方法最有效的是加定時(shí)器;也可以采用非阻塞模式。
設(shè)置非阻塞,返回之后用select檢測(cè)狀態(tài))
如果select返回可讀,結(jié)果只讀到0字節(jié),什么情況?
某個(gè)套接字集合中沒有準(zhǔn)備好,可能會(huì)select內(nèi)存用FD_CLR清該位為0;
今天的內(nèi)容就分享到這里,需要linux后臺(tái)服務(wù)器開發(fā)學(xué)習(xí)資料的可以后臺(tái)私信“資料”,免費(fèi)分享
總結(jié)
以上是生活随笔為你收集整理的linux 共享内存_盘点那些linux 后台开发类常见问题及知识点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel公式 某一个单元格等于另一个单
- 下一篇: feign 第一次调用超时_Feign