chinesefreesexvideos高潮,欧美极品少妇性运交,久久久国产一区二区三区,99久久婷婷国产综合精品,成人国产一区二区三区

APP推廣合作
聯(lián)系“鳥哥筆記小喬”
字節(jié)跳動(dòng)用戶運(yùn)營面試(字節(jié)跳動(dòng)面試題匯總)
2022-10-04 10:36:55

?字節(jié)跳動(dòng)面試題匯總

字節(jié)跳動(dòng)用戶運(yùn)營面試(字節(jié)跳動(dòng)面試題匯總)
  malloc和new的區(qū)別

  new/delete 是 C++關(guān)鍵字,需要編譯器支持。malloc/free 是庫函數(shù),需要頭文件支持 使用 new 操作符申請(qǐng)內(nèi)存分配時(shí)無須指定內(nèi)存塊的大小,編譯器會(huì)根據(jù)類型信息自行計(jì)算。而 malloc 則需要顯式地指出所需內(nèi)存的尺寸 new 操作符內(nèi)存分配成功時(shí),返回的是對(duì)象類型的指針,類型嚴(yán)格與對(duì)象匹配,無須進(jìn)行類型轉(zhuǎn)換,故 new 是符合類型安全性的操作符。而 malloc 內(nèi)存分配成功則是返回 void * ,需要通過強(qiáng)制類型轉(zhuǎn)換將 void*指針轉(zhuǎn)換成我們需要的類型 new 內(nèi)存分配失敗時(shí),會(huì)拋出 bad_alloc 異常。malloc 分配內(nèi)存失敗時(shí)返回 NULL new 會(huì)先調(diào)用 operator new 函數(shù),申請(qǐng)足夠的內(nèi)存(通常底層使用 malloc實(shí)現(xiàn))。然后調(diào)用類型的構(gòu)造函數(shù),初始化成員變量,最后返回自定義類型指針。delete 先調(diào)用析構(gòu)函數(shù),然后調(diào)用 operator delete 函數(shù)釋放內(nèi)存(通常底層使用 free 實(shí)現(xiàn))。malloc/free 是庫函數(shù),只能動(dòng)態(tài)的申請(qǐng)和釋放內(nèi)存,無法強(qiáng)制要求其做自定義類型對(duì)象構(gòu)造和析構(gòu)工作

  排序算法時(shí)間復(fù)雜度

  編輯切換為居中

  添加圖片注釋,不超過 140 字(可選)

  如何用Linux shell命令統(tǒng)計(jì)一個(gè)文本中各個(gè)單詞的個(gè)數(shù)

  more log.txt | tr ' ' '
' | sort | uniq -c

  Linux下需要打開或者查看大文件

  查看文件的幾行到幾行 sed -n '10,10000p' log # 查看第10到10000行的數(shù)據(jù)

  linux 怎么查看進(jìn)程,怎么結(jié)束進(jìn)程?原理是什么?

  top, kill

  ps -e 查看進(jìn)程詳細(xì)信息

  Linux怎么查看當(dāng)前的負(fù)載情況

  uptime命令主要用于獲取主機(jī)運(yùn)行時(shí)間和查詢linux系統(tǒng)負(fù)載等信息

  cat /proc/loadavg

  tload

  top

  Http Code

  MySQL的底層索引結(jié)構(gòu),InnoDB里面的B+Tree

  不同引擎索引的區(qū)別

  i++是否原子操作

  鎖的底層實(shí)現(xiàn)

  B Tree 和 B+ Tree的區(qū)別

  b樹和b+樹

  B樹(B-tree)是一種樹狀數(shù)據(jù)結(jié)構(gòu),它能夠存儲(chǔ)數(shù)據(jù)、對(duì)其進(jìn)行排序并允許以O(shè)(log n)的時(shí)間復(fù)雜度運(yùn)行進(jìn)行查找、順序讀取、插入和刪除的數(shù)據(jù)結(jié)構(gòu)。B樹,概括來說是一個(gè)節(jié)點(diǎn)可以擁有多于2個(gè)子節(jié)點(diǎn)的二叉查找樹。與自平衡二叉查找樹不同,B-樹為系統(tǒng)最優(yōu)化大塊數(shù)據(jù)的讀和寫操作。B-tree算法減少定位記錄時(shí)所經(jīng)歷的中間過程,從而加快存取速度。普遍運(yùn)用在數(shù)據(jù)庫和文件系統(tǒng)。 B 樹可以看作是對(duì)2-3查找樹的一種擴(kuò)展,即他允許每個(gè)節(jié)點(diǎn)有M-1個(gè)子節(jié)點(diǎn)。M階B樹具有以下特征:

  根節(jié)點(diǎn)至少有兩個(gè)子節(jié)點(diǎn)每個(gè)節(jié)點(diǎn)有M-1個(gè)key,并且以升序排列位于M-1和M key的子節(jié)點(diǎn)的值位于M-1 和M key對(duì)應(yīng)的Value之間其它節(jié)點(diǎn)至少有M/2個(gè)子節(jié)點(diǎn)

  ?

  編輯切換為居中

  添加圖片注釋,不超過 140 字(可選)

  B+樹 B+樹是對(duì)B樹的一種變形樹,它與B樹的差異在于:

  有k個(gè)子結(jié)點(diǎn)的結(jié)點(diǎn)必然有k個(gè)關(guān)鍵碼非葉結(jié)點(diǎn)僅具有索引作用,跟記錄有關(guān)的信息均存放在葉結(jié)點(diǎn)中樹的所有葉結(jié)點(diǎn)構(gòu)成一個(gè)有序鏈表,可以按照關(guān)鍵碼排序的次序遍歷全部記錄

  ?

  編輯切換為居中

  添加圖片注釋,不超過 140 字(可選)

  B樹與B+樹的區(qū)別:

  B樹每個(gè)節(jié)點(diǎn)都存儲(chǔ)數(shù)據(jù),所有節(jié)點(diǎn)組成這棵樹。B+樹只有葉子節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)(B+數(shù)中有兩個(gè)頭指針:一個(gè)指向根節(jié)點(diǎn),另一個(gè)指向關(guān)鍵字最小的葉節(jié)點(diǎn)),葉子節(jié)點(diǎn)包含了這棵樹的所有數(shù)據(jù),所有的葉子結(jié)點(diǎn)使用鏈表相連,便于區(qū)間查找和遍歷,所有非葉節(jié)點(diǎn)起到索引作用。B樹中葉節(jié)點(diǎn)包含的關(guān)鍵字和其他節(jié)點(diǎn)包含的關(guān)鍵字是不重復(fù)的,B+樹的索引項(xiàng)只包含對(duì)應(yīng)子樹的最大關(guān)鍵字和指向該子樹的指針,不含有該關(guān)鍵字對(duì)應(yīng)記錄的存儲(chǔ)地址。B樹中每個(gè)節(jié)點(diǎn)(非根節(jié)點(diǎn))關(guān)鍵字個(gè)數(shù)的范圍為m/2(向上取整)-1,m-1,并且具有n個(gè)關(guān)鍵字的節(jié)點(diǎn)包含(n+1)棵子樹。B+樹中每個(gè)節(jié)點(diǎn)(非根節(jié)點(diǎn))關(guān)鍵字個(gè)數(shù)的范圍為m/2(向上取整),m,具有n個(gè)關(guān)鍵字的節(jié)點(diǎn)包含(n)棵子樹。B+樹中查找,無論查找是否成功,每次都是一條從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的路徑。B樹的優(yōu)點(diǎn):

  B樹的每一個(gè)節(jié)點(diǎn)都包含key和value,因此經(jīng)常訪問的元素可能離根節(jié)點(diǎn)更近,因此訪問也更迅速。B+樹的優(yōu)點(diǎn):

  所有的葉子結(jié)點(diǎn)使用鏈表相連,便于區(qū)間查找和遍歷。B樹則需要進(jìn)行每一層的遞歸遍歷。相鄰的元素可能在內(nèi)存中不相鄰,所以緩存命中性沒有B+樹好。b+樹的中間節(jié)點(diǎn)不保存數(shù)據(jù),能容納更多節(jié)點(diǎn)元素。B樹與B+樹的共同優(yōu)點(diǎn):

  考慮磁盤IO的影響,它相對(duì)于內(nèi)存來說是很慢的。數(shù)據(jù)庫索引是存儲(chǔ)在磁盤上的,當(dāng)數(shù)據(jù)量大時(shí),就不能把整個(gè)索引全部加載到內(nèi)存了,只能逐一加載每一個(gè)磁盤頁(對(duì)應(yīng)索引樹的節(jié)點(diǎn))。所以我們要減少IO次數(shù),對(duì)于樹來說,IO次數(shù)就是樹的高度,而“矮胖”就是b樹的特征之一,m的大小取決于磁盤頁的大小。MySQL索引的發(fā)展過程?是一來就是B+Tree的么?從 沒有索引、hash、二叉排序樹、AVL樹、B樹、B+樹

  MySQL里面的事務(wù),說說什么是事務(wù)

  數(shù)據(jù)庫事務(wù)(Database Transaction) ,是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,要么完全地執(zhí)行,要么完全地不執(zhí)行。 事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。一個(gè)邏輯工作單元要成為事務(wù),必須滿足所謂的 ACID(原子性、一致性、隔離性和持久性)屬性。事務(wù)是數(shù)據(jù)庫運(yùn)行中的邏輯工作單位,由 DBMS 中的事務(wù)管理子系統(tǒng)負(fù)責(zé)事務(wù)的處理。

  MySQL里面有那些事務(wù)級(jí)別,并且不同的事務(wù)級(jí)別會(huì)出現(xiàn)什么問題

  讀未提交 (臟讀):最低的隔離級(jí)別,什么都不需要做,一個(gè)事務(wù)可以讀到另一個(gè)事務(wù)未提交的結(jié)果。所有的并發(fā)事務(wù)問題都會(huì)發(fā)生 讀提交 (讀舊數(shù)據(jù),不可重復(fù)讀問題):只有在事務(wù)提交后,其更新結(jié)果才會(huì)被其他事務(wù)看見??梢越鉀Q臟讀問題。 可重復(fù)讀 (解決了臟讀但是有幻影讀):在一個(gè)事務(wù)中,對(duì)于同一份數(shù)據(jù)的讀取結(jié)果總是相同的,無論是否有其他事務(wù)對(duì)這份數(shù)據(jù)進(jìn)行操作,以及這個(gè)事務(wù)是否提交??梢越鉀Q臟讀、不可重復(fù)讀。 串行化:事務(wù)串行化執(zhí)行,隔離級(jí)別最高,犧牲了系統(tǒng)的并發(fā)性??梢越鉀Q并發(fā)事務(wù)的所有問題。

  不可重復(fù)讀和幻讀的區(qū)別

  不可重復(fù)讀是讀異常,但幻讀則是寫異常不可重復(fù)讀是讀異常的意思是,如果你不多select幾次,你是發(fā)現(xiàn)不了你曾經(jīng)select過的數(shù)據(jù)行已經(jīng)被其他人update過了。避免不可重復(fù)讀主要靠一致性快照幻讀是寫異常的意思是,如果不自己insert一下,你是發(fā)現(xiàn)不了其他人已經(jīng)偷偷insert過相同的數(shù)據(jù)了。解決幻讀主要靠間隙鎖數(shù)據(jù)庫持久性是怎么實(shí)現(xiàn)的?

  詳細(xì) 持久性是指一個(gè)事務(wù)一旦被提交了,那么對(duì)數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的,即便是在數(shù)據(jù)庫系統(tǒng)遇到故障的情況下也不會(huì)丟失提交事務(wù)的操作。 MySQL采用了一種叫WAL(Write Ahead Logging)提前寫日志的技術(shù)。意思就是說,發(fā)生了數(shù)據(jù)修改操作先寫日志記錄下來,等不忙的時(shí)候再持久化到磁盤。這里提到的日志就是redo log。 redo log稱為重做日志,當(dāng)有一條記錄需要修改的時(shí)候,InnoDB引擎會(huì)先把這條記錄寫到redo log里面。redo log是物理格式日志,它記錄的是對(duì)于每個(gè)頁的修改。 redo log是由兩部分組成的:一是內(nèi)存中的重做日志緩沖(redo log buffer);二是用來持久化的重做日志文件(redo log file)。為了消耗不必要的IO操作,事務(wù)再執(zhí)行過程中產(chǎn)生的redo log首先會(huì)redo log buffer中,之后再統(tǒng)一存入redo log file刷盤進(jìn)行持久化,這個(gè)動(dòng)作稱為fsync binlog記錄了mysql執(zhí)行更改了所有操作,但不包含select和show這類本對(duì)數(shù)據(jù)本身沒有更改的操作。但是不是說對(duì)數(shù)據(jù)本身沒有修改就不會(huì)記錄binlog日志。

  binlog是mysql自帶的,他會(huì)記錄所有存儲(chǔ)引擎的日志文件。而redo log是InnoDB特有的,他只記錄該存儲(chǔ)引擎產(chǎn)生的日志文件binlog是邏輯日志,記錄這個(gè)語句具體操作了什么內(nèi)容。Redo log是物理日志,記錄的是每個(gè)頁的更改情況redo log是循環(huán)寫,只有那么大的空間。binlog采用追加寫入,當(dāng)一個(gè)binlog文件寫到一定大小后會(huì)切換到下一個(gè)文件更新一條語句的流程

  首先執(zhí)行器調(diào)用引擎獲取數(shù)據(jù),如果數(shù)據(jù)在內(nèi)存中就直接返回;否則先從磁盤中讀取數(shù)據(jù),寫入內(nèi)存后再返回。修改數(shù)據(jù)后再調(diào)用引擎接口寫入這行數(shù)據(jù)引擎層將這行數(shù)據(jù)更新到內(nèi)存中,然后將更新操作寫入redo log,這時(shí)候redo log標(biāo)記為prepare狀態(tài)。然后告訴執(zhí)行器我處理完了,可以提交事務(wù)了。執(zhí)行器生成這個(gè)操作的binlog,并把binlog寫入磁盤,然后調(diào)用引擎提交事務(wù)引擎收到commit命令后,把剛才寫入的redo log改成commit狀態(tài) 這里使用了兩階段提交prepare階段和commit階段相關(guān)視頻推薦

  【mysql數(shù)據(jù)庫】C++程序員眼中MySQL的索引和事務(wù)

  內(nèi)存泄漏的3個(gè)解決方案與原理實(shí)現(xiàn),知道一個(gè)可以輕松應(yīng)用開發(fā)工作

  網(wǎng)絡(luò)原理tcp/udp,網(wǎng)絡(luò)編程epoll/reactor,面試中正經(jīng)“八股文”

  需要C/C++ Linux服務(wù)器架構(gòu)師學(xué)習(xí)資料及大廠面試題加qun812855908獲?。ㄙY料包括C/C++,Linux,golang技術(shù),Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協(xié)程,DPDK,ffmpeg等),免費(fèi)分享

  ?數(shù)據(jù)庫回表是什么?

  詳細(xì) Innodb的索引存在兩類,一類是聚簇索引一類是非聚簇索引,Innodb有且僅有一個(gè)聚簇索引。1. 如果表定義了PK,則PK就是聚集索引;2. 如果表沒有定義PK,則第一個(gè)not NULL unique列是聚集索引;否則,InnoDB會(huì)創(chuàng)建一個(gè)隱藏的row-id作為聚集索引; InnoDB 聚集索引 的葉子節(jié)點(diǎn)存儲(chǔ)行記錄,而普通索引的葉子節(jié)點(diǎn)存儲(chǔ)主鍵值 在使用聚簇索引時(shí),可以一步直接獲取到記錄值,而使用普通索引時(shí),會(huì)首先獲取記錄的PK,然后再從聚簇索引中查找對(duì)應(yīng)的記錄,這個(gè)過程叫做回表

  索引覆蓋

  理解方式一:就是select的數(shù)據(jù)列只用從索引中就能夠取得,不必讀取數(shù)據(jù)行,換句話說查詢列要被所建的索引覆蓋 理解方式二:索引是高效找到行的一個(gè)方法,但是一般數(shù)據(jù)庫也能使用索引找到一個(gè)列的數(shù)據(jù),因此它不必讀取整個(gè)行。畢竟索引葉子節(jié)點(diǎn)存儲(chǔ)了它們索引的數(shù)據(jù);當(dāng)能通過讀取索引就可以得到想要的數(shù)據(jù),那就不需要讀取行了。一個(gè)索引包含了(或覆蓋了)滿足查詢結(jié)果的數(shù)據(jù)就叫做覆蓋索引 理解方式三:是非聚集復(fù)合索引的一種形式,它包括在查詢里的Select、Join和Where子句用到的所有列(即建索引的字段正好是覆蓋查詢條件中所涉及的字段,也即,索引包含了查詢正在查找的數(shù)據(jù))。 總結(jié):要查找的數(shù)據(jù)可以都在索引中出現(xiàn),而不需要再去查表獲取完整記錄 為了實(shí)現(xiàn)索引覆蓋可以將被查詢的字段,建立到聯(lián)合索引里去

  數(shù)據(jù)庫讀寫鎖發(fā)生死鎖的情景

  詳細(xì)

  MyISAM中不會(huì)出現(xiàn)死鎖 在MyISAM中只用到表鎖,不會(huì)有死鎖的問題,鎖的開銷也很小,但是相應(yīng)的并發(fā)能力很差。 解析:MyISAM不支持事務(wù),即每次的讀寫都會(huì)隱性的加上讀寫鎖,而我們知道讀鎖是共享的,寫鎖是獨(dú)占的,意味著當(dāng)一個(gè)Session在寫時(shí),另一個(gè)Session必須等待。InnoDB中會(huì)出現(xiàn)死鎖 InnoDB中實(shí)用了行鎖和表鎖,當(dāng)未命中索引時(shí),會(huì)自動(dòng)退化為表鎖。 解決方法為InnoDB中的MVCC機(jī)制為什么推薦主鍵使用自增的整型,MySQL為什么主鍵自增好

  為什么推薦主鍵:Innodb底層是B+樹,數(shù)據(jù)和索引放在一起,因此需要一個(gè)主鍵作為索引,從而存儲(chǔ)數(shù)據(jù) 為什么要自增:當(dāng)新存儲(chǔ)一條數(shù)據(jù)時(shí),只需要向B+樹后面的葉子節(jié)點(diǎn)插入即可,而不需要B+ 樹為保持有序而進(jìn)行旋轉(zhuǎn) 為什么要整型:整形作為索引,容易直接判斷大小而保持有序,使用String,相對(duì)于整數(shù)而言,不易判斷大小

  vector的底層實(shí)現(xiàn),擴(kuò)容機(jī)制

  詳細(xì) 使用一段連續(xù)的內(nèi)存來存儲(chǔ)數(shù)據(jù),同時(shí)在數(shù)據(jù)結(jié)構(gòu)中保存了三個(gè)指針來標(biāo)記內(nèi)存地址,首先是指向vector中數(shù)據(jù)的起始位置的_Myfirst指針,最后一個(gè)數(shù)據(jù)的位置的_Mylst指針,以及一個(gè)指向連續(xù)內(nèi)存空間末尾的_Myend指針 當(dāng) vector 的大小和容量相等(size==capacity)也就是滿載時(shí),如果再向其添加元素,那么 vector 就需要擴(kuò)容。vector 容器擴(kuò)容的過程需要經(jīng)歷以下 3 步:

  完全棄用現(xiàn)有的內(nèi)存空間,重新申請(qǐng)更大的內(nèi)存空間;將舊內(nèi)存空間中的數(shù)據(jù),按原有順序移動(dòng)到新的內(nèi)存空間中;最后將舊的內(nèi)存空間釋放 不同的編譯器,vector 有不同的擴(kuò)容大小。在 vs 下是 1.5 倍,在 GCC 下是 2 倍 采用成倍方式擴(kuò)容,可以保證常數(shù)的時(shí)間復(fù)雜度,而增加指定大小的容量只能達(dá)到O(n)的時(shí)間復(fù)雜度,因此,使用成倍的方式擴(kuò)容 過大的倍數(shù)將導(dǎo)致大量空間的浪費(fèi) 為什么擴(kuò)容二倍MySQL中如果使用like進(jìn)行模糊匹配的時(shí)候,是否會(huì)使用索引

  mysql在使用like查詢的時(shí)候只有使用后面的%時(shí),才會(huì)使用到索引

  Volatile的作用,Volatile如何保證可見性的?以及如何實(shí)現(xiàn)可見性的機(jī)制

  volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng)、硬件或者其它線程等。遇到這個(gè)關(guān)鍵字聲明的變量,編譯器對(duì)訪問該變量的代碼就不再進(jìn)行優(yōu)化,從而可以提供對(duì)特殊地址的穩(wěn)定訪問。聲明時(shí)語法:int volatile vInt; 當(dāng)要求使用 volatile 聲明的變量的值的時(shí)候,系統(tǒng)總是重新從它所在的內(nèi)存讀取數(shù)據(jù),即使它前面的指令剛剛從該處讀取過數(shù)據(jù)。而且讀取的數(shù)據(jù)立刻被保存 volatile 用在如下的幾個(gè)地方:

  中斷服務(wù)程序中修改的供其它程序檢測的變量需要加 volatile;多任務(wù)環(huán)境下各任務(wù)間共享的標(biāo)志應(yīng)該加 volatile;存儲(chǔ)器映射的硬件寄存器通常也要加 volatile 說明,因?yàn)槊看螌?duì)它的讀寫都可能有不同意義 詳細(xì). volatile作用: 鎖總線,其它CPU對(duì)內(nèi)存的讀寫請(qǐng)求都會(huì)被阻塞,直到鎖釋放,不過實(shí)際后來的處理器都采用鎖緩存替代鎖總線,因?yàn)殒i總線的開銷比較大,鎖總線期間其他CPU沒法訪問內(nèi)存 lock后的寫操作會(huì)回寫已修改的數(shù)據(jù),同時(shí)讓其它CPU相關(guān)緩存行失效,從而重新從主存中加載最新的數(shù)據(jù) 不是內(nèi)存屏障卻能完成類似內(nèi)存屏障的功能,阻止屏障兩遍的指令重排序如果大量的使用Volatile存在什么問題

  操作系統(tǒng)的線程,以及它的狀態(tài)

  線程的基本狀態(tài): 1.新建 new語句創(chuàng)建的線程對(duì)象處于新建狀態(tài),此時(shí)它和其他java對(duì)象一樣,僅被分配了內(nèi)存。 2.等待 當(dāng)線程在new之后,并且在調(diào)用start方法前,線程處于等待狀態(tài)。 3.就緒 當(dāng)一個(gè)線程對(duì)象創(chuàng)建后,其他線程調(diào)用它的start()方法,該線程就進(jìn)入就緒狀態(tài)。處于這個(gè)狀態(tài)的線程位于Java虛擬機(jī)的可運(yùn)行池中,等待cpu的使用權(quán)。 4.運(yùn)行狀態(tài) 處于這個(gè)狀態(tài)的線程占用CPU,執(zhí)行程序代碼。在并發(fā)運(yùn)行環(huán)境中,如果計(jì)算機(jī)只有一個(gè)CPU,那么任何時(shí)刻只會(huì)有一個(gè)線程處于這個(gè)狀態(tài)。只有處于就緒狀態(tài)的線程才有機(jī)會(huì)轉(zhuǎn)到運(yùn)行狀態(tài)。 5. 阻塞狀態(tài) 阻塞狀態(tài)是指線程因?yàn)槟承┰蚍艞塁PU,暫時(shí)停止運(yùn)行。當(dāng)線程處于阻塞狀態(tài)時(shí),Java虛擬機(jī)不會(huì)給線程分配CPU,直到線程重新進(jìn)入就緒狀態(tài),它才會(huì)有機(jī)會(huì)獲得運(yùn)行狀態(tài)。 6.死亡狀態(tài) 當(dāng)線程執(zhí)行完run()方法中的代碼,或者遇到了未捕獲的異常,就會(huì)退出run()方法,此時(shí)就進(jìn)入死亡狀態(tài),該線程結(jié)束生命周期。

  進(jìn)程和線程(進(jìn)程與線程)的區(qū)別以及使用場景

  線程產(chǎn)生的原因:進(jìn)程可以使多個(gè)程序能并發(fā)執(zhí)行,以提高資源的利用率和系統(tǒng)的吞吐量;但是其具有一些缺點(diǎn):

  進(jìn)程在同一時(shí)間只能干一件事進(jìn)程在執(zhí)行的過程中如果阻塞,整個(gè)進(jìn)程就會(huì)掛起,即使進(jìn)程中有些工作不依賴于等待的資源,仍然不會(huì)執(zhí)行。因此,操作系統(tǒng)引入了比進(jìn)程粒度更小的線程,作為并發(fā)執(zhí)行的基本單位,從而減少程序在并發(fā)執(zhí)行時(shí)所付出的時(shí)空開銷,提高并發(fā)性進(jìn)程是資源分配的最小單位,線程是操作系統(tǒng)進(jìn)行執(zhí)行和調(diào)度的最小單位

  同一進(jìn)程的線程共享本進(jìn)程的地址空間,而進(jìn)程之間則是獨(dú)立的地址空間;同一進(jìn)程內(nèi)的線程共享本進(jìn)程的資源,但是進(jìn)程之間的資源是獨(dú)立的;一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對(duì)其他進(jìn)程產(chǎn)生影響,但是一個(gè)線程崩潰整個(gè)進(jìn)程崩潰,所以多進(jìn)程比多線程健壯;進(jìn)程切換,消耗的資源大。所以涉及到頻繁的切換,使用線程要好于進(jìn)程;兩者均可并發(fā)執(zhí)行;每個(gè)獨(dú)立的進(jìn)程有一個(gè)程序的入口、程序出口。但是線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制 使用場景

  需要頻繁創(chuàng)建銷毀的優(yōu)先用線程 最常見的應(yīng)用就是 Web 服務(wù)器了,來一個(gè)連接建立一個(gè)線程,斷了就銷毀線程需要進(jìn)行大量計(jì)算的優(yōu)先使用線程 所謂大量計(jì)算,當(dāng)然就是要耗費(fèi)很多 CPU,切換頻繁了,這種情況下線程是最合適的 最常見的是圖像處理、算法處理強(qiáng)相關(guān)的處理用線程,弱相關(guān)的處理用進(jìn)程可能要擴(kuò)展到多機(jī)分布的用進(jìn)程,多核分布的用線程線程私有:線程棧,寄存器,程序寄存器 共享:堆,地址空間,全局變量,靜態(tài)變量 進(jìn)程私有:地址空間,堆,全局變量,棧,寄存器 共享:代碼段,公共數(shù)據(jù),進(jìn)程目錄,進(jìn)程 ID

  為什么線程創(chuàng)建和撤銷開銷大

  當(dāng)從一個(gè)線程切換到另一個(gè)線程時(shí),不僅會(huì)發(fā)生線程上下文切換,還會(huì)發(fā)生特權(quán)模式切換。 既然是線程切換,那么一定涉及線程狀態(tài)的保存和恢復(fù),包括寄存器、棧等私有數(shù)據(jù)。另外,線程的調(diào)度是需要內(nèi)核級(jí)別的權(quán)限的(操作CPU和內(nèi)存),也就是說線程的調(diào)度工作是在內(nèi)核態(tài)完成的,因此會(huì)有一個(gè)從用戶態(tài)到內(nèi)核態(tài)的切換。而且,不管是線程本身的切換還是特權(quán)模式的切換,都要進(jìn)行CPU的上下文切換

  線程和協(xié)程的由來和作用

  協(xié)程,又稱微線程。協(xié)程看上去也是子程序,但執(zhí)行過程中,在子程序內(nèi)部可中斷,然后轉(zhuǎn)而執(zhí)行別的子程序,在適當(dāng)?shù)臅r(shí)候再返回來接著執(zhí)行。 和多線程比,協(xié)程最大的優(yōu)勢就是協(xié)程極高的執(zhí)行效率。因?yàn)樽映绦蚯袚Q不是線程切換,而是由程序自身控制,因此,沒有線程切換的開銷,和多線程比,線程數(shù)量越多,協(xié)程的性能優(yōu)勢就越明顯 第二大優(yōu)勢就是不需要多線程的鎖機(jī)制,因?yàn)橹挥幸粋€(gè)線程,也不存在同時(shí)寫變量沖突,在協(xié)程中控制共享資源不加鎖,只需要判斷狀態(tài)就好了,所以執(zhí)行效率比多線程高很多 在協(xié)程上利用多核 CPU —— 多進(jìn)程+協(xié)程,既充分利用多核,又充分發(fā)揮協(xié)程的高效率, 可獲得極高的性能

  多線程的通信和同步,多線程訪問同一個(gè)對(duì)象怎么辦

  互斥鎖條件變量讀寫鎖信號(hào)查看端口號(hào)或者進(jìn)程號(hào),使用什么命令

  查看程序?qū)?yīng)的進(jìn)程號(hào): ps -ef | grep 進(jìn)程名字 查看進(jìn)程號(hào)所占用的端口號(hào): netstat -nltp | grep 進(jìn)程號(hào) 查看端口號(hào)所使用的進(jìn)程號(hào): lsof -i:端口號(hào)

  信號(hào)量與mutex和自旋鎖的區(qū)別

  信號(hào)量(semaphore)用在多線程多任務(wù)同步的,一個(gè)線程完成了某一個(gè)動(dòng)作就通過信號(hào)量告訴別的線程,別的線程再進(jìn)行某些動(dòng)作。而互斥鎖(Mutual exclusion,縮寫 Mutex)是用在多線程多任務(wù)互斥的,一個(gè)線程占用了某一個(gè)資源,那么別的線程就無法訪問,直到這個(gè)線程unlock,其他的線程才開始可以利用這個(gè)資源 自旋鎖與前兩者的區(qū)別是自旋鎖不會(huì)引起調(diào)用者睡眠,如果自旋鎖已經(jīng)被別的執(zhí)行單元保持,調(diào)用者就一直循環(huán)在那里看是否該自旋鎖的保持者已經(jīng)釋放了鎖

  非對(duì)稱加密與對(duì)稱加密

  對(duì)稱加密算法:加密效率高,速度快,適合大數(shù)據(jù)量加密。DES/AES 非對(duì)稱加密算法:算法復(fù)雜,加密速度慢,安全性更高。結(jié)合對(duì)稱加密使用。RSA、DH

  在兩列屬性上分別建索引,則某個(gè)查詢語句使用 where att1 = * and att2 = * 會(huì)怎么使用索引

  一次查詢只使用一個(gè)索引,因?yàn)槊總€(gè)索引都代表了一顆樹,使用多個(gè)索引所帶來的增益遠(yuǎn)小于增加的性能消耗。 對(duì)于聯(lián)合索引來說會(huì)使用最左匹配 -- 在MySQL的user表中,對(duì)a,b,c三個(gè)字段建立聯(lián)合索引,根據(jù)查詢字段的位置不同來決定,如查詢a, a,b a,b,c a,c 都可以走索引,其他條件的查詢不能走索引 對(duì)于多個(gè)單列索引來說,MySQL會(huì)試圖選擇一個(gè)限制最嚴(yán)格的索引。但是,即使是限制最嚴(yán)格的單列索引,它的限制能力也肯定遠(yuǎn)遠(yuǎn)低于在多列上的多列索引

  通過兩個(gè)索引查詢出來的結(jié)果,會(huì)進(jìn)行什么要的操作?交集,并集

  MySQL中遇到一些慢查詢,有什么解決方法

  定位慢查詢根據(jù)慢查詢?nèi)罩径ㄎ宦樵僺ql

  slow_query_log 默認(rèn)是off關(guān)閉的,使用時(shí),需要改為on 打開slow_query_log_file 記錄的是慢日志的記錄文件long_query_time 默認(rèn)是10S,每次執(zhí)行的sql達(dá)到這個(gè)時(shí)長,就會(huì)被記錄優(yōu)化方案優(yōu)化數(shù)據(jù)庫結(jié)構(gòu) 分解關(guān)聯(lián)查詢: 很多高性能的應(yīng)用都會(huì)對(duì)關(guān)聯(lián)查詢進(jìn)行分解,就是可以對(duì)每一個(gè)表進(jìn)行一次單表查詢,然后將查詢結(jié)果在應(yīng)用程序中進(jìn)行關(guān)聯(lián),很多場景下這樣會(huì)更高效。 增加索引 建立視圖 優(yōu)化查詢語句 添加存儲(chǔ)過程 冗余保存數(shù)據(jù)

  有了解過IO多路復(fù)用技術(shù)是個(gè)什么樣的原理

  I/O多路復(fù)用,I/O就是指的我們網(wǎng)絡(luò)I/O,多路指多個(gè)TCP連接(或多個(gè)Channel),復(fù)用指復(fù)用一個(gè)或少量線程。串起來理解就是很多個(gè)網(wǎng)絡(luò)I/O復(fù)用一個(gè)或少量的線程來處理這些連接。

  通過一個(gè)線程,同時(shí)連接多個(gè)線程會(huì)不會(huì)存在多個(gè)線程切換

  在操作系統(tǒng)中,有高速緩存,主存,虛擬內(nèi)存,外存,有知道它們之間有什么樣的關(guān)系,以及它們的作用是啥

  緩存: 在CPU同時(shí)處理很多數(shù)據(jù),而又不可能同時(shí)進(jìn)行所有數(shù)據(jù)的傳輸?shù)那闆r,把優(yōu)先級(jí)低的數(shù)據(jù)暫時(shí)放入緩存中,等優(yōu)先級(jí)高的數(shù)據(jù)處理完畢后再把它們從緩存中拿出來進(jìn)行處理 主存:主存就是內(nèi)存,是直接與CPU交換信息的存儲(chǔ)器,指CPU能夠通過指令中的地址碼直接訪問的存儲(chǔ)器,常用于存放處于活動(dòng)狀態(tài)的程序和數(shù)據(jù) 虛擬內(nèi)存:當(dāng)運(yùn)行數(shù)據(jù)超過內(nèi)存限度,部分?jǐn)?shù)據(jù)自動(dòng)“溢出”,這時(shí)系統(tǒng)會(huì)將硬盤上的部分空間模擬成內(nèi)存——虛擬內(nèi)存,并且將暫時(shí)不運(yùn)行的程序或不使用的數(shù)據(jù)存放到虛擬內(nèi)存中等待需要時(shí)調(diào)用 輔存就是外存: 硬盤與磁盤、光盤、軟盤、U盤等

  缺頁的產(chǎn)生和換頁算法

  缺頁中斷:進(jìn)程線性地址空間里的頁面不必常駐內(nèi)存,在執(zhí)行一條指令時(shí),如果發(fā)現(xiàn)他要訪問的頁沒有在內(nèi)存中(存在位為0),那么停止該指令的執(zhí)行,并產(chǎn)生一個(gè)頁不存在異常,對(duì)應(yīng)的故障處理程序可通過從外存加載該頁到內(nèi)存的方法來排除故障,之后,原先引起的異常的指令就可以繼續(xù)執(zhí)行,而不再產(chǎn)生異常 頁面置換算法:將新頁面調(diào)入內(nèi)存時(shí),如果內(nèi)存中所有的物理頁都已經(jīng)分配出去,就要按某種策略來廢棄某個(gè)頁面,將其所占據(jù)的物理頁釋放出來,好的算法,讓缺頁率降低。

  先進(jìn)先出調(diào)度算法(FIFO)最近最少調(diào)度算法(LFU,根據(jù)時(shí)間判斷):利用局部性原理,根據(jù)一個(gè)作業(yè)在執(zhí)行過程中過去的頁面訪問歷史來推測未來的行為。它認(rèn)為過去一段時(shí)間里不曾被訪問過的頁面,在最近的將來可能也不會(huì)再被訪問。所以,這種算法的實(shí)質(zhì)是:當(dāng)需要淘汰一個(gè)頁面時(shí),總是選擇在最近一段時(shí)間內(nèi)最久不用的頁面予以淘汰。最近最不常用調(diào)度算法(LRU,根據(jù)使用頻率判斷最佳置換算法(OPT):從主存中移出永遠(yuǎn)不再需要的頁面;如無這樣的頁面存在,則選擇最長時(shí)間不需要訪問的頁面。于所選擇的被淘汰頁面將是以后永不使用的,或者是在最長時(shí)間內(nèi)不再被訪問的頁面,這樣可以保證獲得最低的缺頁率面向?qū)ο蟛捎玫脑O(shè)計(jì)模式有哪些

  在軟件工程中,軟件設(shè)計(jì)模式是通用的,可重用的在給定上下文中解決軟件設(shè)計(jì)中常見問題的解決方案單例模式(有的叫單元素模式,單態(tài)模式) 工廠模式 觀察者模式 命令鏈模式 策略模式

  設(shè)計(jì)模式的六大原則

  為什么要有補(bǔ)碼? (為了更方便的實(shí)現(xiàn)減法運(yùn)算)

  一致性哈希

  面向?qū)ο笥心男┰O(shè)計(jì)原則

  OCP原則(也叫開閉原則): 開閉原則就是說對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。 SRP原則(職責(zé)單一原則): 一個(gè)類只負(fù)責(zé)一項(xiàng)職責(zé),可以降低類的復(fù)雜度,提高類的可讀性,提高系統(tǒng)的可維護(hù)性,當(dāng)修改一個(gè)功能時(shí),可以顯著降低對(duì)其他功能的影響。 OCP原則(里氏替換原則):任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。通俗的理解即為子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能。 DIP原則(依賴倒置原則):高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。通俗點(diǎn)說:要求對(duì)抽象進(jìn)行編程,不要對(duì)實(shí)現(xiàn)進(jìn)行編程,這樣就降低了客戶與實(shí)現(xiàn)模塊間的耦合。 LoD法則(迪米特法則):一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象保持最少的了解。通俗的來講,就是一個(gè)類對(duì)自己依賴的類知道的越少越好。也就是說,對(duì)于被依賴的類來說,無論邏輯多么復(fù)雜,都盡量地的將邏輯封裝在類的內(nèi)部,對(duì)外除了提供的public方法,不對(duì)外泄漏任何信息。 接口隔離原則:建立單一接口,不要建立龐大臃腫的接口,盡量細(xì)化接口,接口中的方法盡量少。也就是說,我們要為各個(gè)類建立專用的接口,而不要試圖去建立一個(gè)很龐大的接口供所有依賴它的類去調(diào)用。

  說說你對(duì)于 “不要用共享內(nèi)存來通信,而應(yīng)該用通信來共享內(nèi)存” 的理解

  在鎖模式中,一塊內(nèi)存可以被多個(gè)線程同時(shí)看到,所以叫共享內(nèi)存。線程之間通過改變內(nèi)存中的數(shù)據(jù)來通知其他線程發(fā)生了什么,所以是通過共享內(nèi)存來通信。鎖是為了保護(hù)一個(gè)線程對(duì)內(nèi)存操作的邏輯完整性而引入的一種約定,注意是一種約定而不是規(guī)則(一個(gè)線程可以不獲取鎖就操作內(nèi)存,也可以解鎖其他線程加的鎖從而破壞保護(hù),這種錯(cuò)誤很難發(fā)現(xiàn))。這種約定要每個(gè)線程的編寫人員自覺遵守,否則就會(huì)出現(xiàn)多線程問題,如數(shù)據(jù)被破壞,死鎖,饑餓等。 在go模式中,一塊內(nèi)存同一時(shí)間只能被一個(gè)線程看到,另外一個(gè)線程要操作這塊內(nèi)存,需要當(dāng)前線程讓渡所有權(quán),這個(gè)所有權(quán)的讓渡過程是“通信”。通信的原子性由channel封裝好了,內(nèi)存同一時(shí)間只能被同一線程使用,所以這種模式下不需要顯示的鎖。然而go模式也有約定,如果傳遞的是內(nèi)存的指針,或者是控制消息,還是等于共享了內(nèi)存,還是要保證將所有權(quán)讓渡后, 不能再操作這塊內(nèi)存。

  什么是雙向鏈表

  雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。所以,從雙向鏈表中的任意一個(gè)結(jié)點(diǎn)開始,都可以很方便地訪問它的前驅(qū)結(jié)點(diǎn)和后繼結(jié)點(diǎn)。

  操作系統(tǒng)內(nèi)存管理(分頁、分段、段頁式)

  頁式內(nèi)存管理,內(nèi)存分成固定長度的一個(gè)個(gè)頁片。操作系統(tǒng)為每一個(gè)進(jìn)程維護(hù)了一個(gè)從虛擬地址到物理地址的映射關(guān)系的數(shù)據(jù)結(jié)構(gòu),叫頁表,頁表的內(nèi)容就是該進(jìn)程的虛擬地址到物理地址的一個(gè)映射。頁表中的每一項(xiàng)都記錄了這個(gè)頁的基地址。通過頁表,由邏輯地址的高位部分先找到邏輯地址對(duì)應(yīng)的頁基地址,再由頁基地址偏移一定長度就得到最后的物理地址,偏移的長度由邏輯地址的低位部分決定。一般情況下,這個(gè)過程都可以由硬件完成,所以效率還是比較高的。 頁式內(nèi)存管理的優(yōu)點(diǎn)就是比較靈活,內(nèi)存管理以較小的頁為單位,方便內(nèi)存換入換出和擴(kuò)充地址空間。 分段存儲(chǔ)管理方式的目的,主要是為了滿足用戶(程序員)在編程和使用上多方面的要求,其中有些要求是其他幾種存儲(chǔ)管理方式所難以滿足的。因此,這種存儲(chǔ)管理方式已成為當(dāng)今所有存儲(chǔ)管理方式的基礎(chǔ)

  分頁與分段的區(qū)別 頁是信息的物理單位,分頁是為實(shí)現(xiàn)離散分配方式,以消減內(nèi)存的外零頭,提高內(nèi)存的利用率。或者說,分頁僅僅是由于系統(tǒng)管理的需要而不是用戶的需要。段則是信息的邏輯單位,它含有一組其意義相對(duì)完整的信息。分段的目的是為了能更好地滿足用戶的需要 頁的大小固定且由系統(tǒng)決定,而段的長度卻不固定 分頁的作業(yè)地址空間是一維的,即單一的線性地址空間;而分段的作業(yè)地址空間則是二維的 分頁系統(tǒng)能有效地提高內(nèi)存利用率,而分段系統(tǒng)則能很好地滿足用戶需求。段頁式系統(tǒng)的基本原理,是分段和分頁原理的結(jié)合,即先將用戶程序分成若干個(gè)段,再把每個(gè)段分成若干個(gè)頁,并為每一個(gè)段賦予一個(gè)段名。在段頁式系統(tǒng)中,地址結(jié)構(gòu)由段號(hào)、段內(nèi)頁號(hào)和頁內(nèi)地址三部分所組成。

  瀏覽器輸入網(wǎng)址到渲染的過程

  詳細(xì)

  瀏覽器構(gòu)建HTTP Request請(qǐng)求網(wǎng)絡(luò)傳輸服務(wù)器構(gòu)建HTTP Response 響應(yīng)網(wǎng)絡(luò)傳輸瀏覽器渲染頁面DNS解析URL地址、生成HTTP請(qǐng)求報(bào)文、構(gòu)建TCP連接、使用IP協(xié)議選擇傳輸路線、數(shù)據(jù)鏈路層保證數(shù)據(jù)的可靠傳輸、物理層將數(shù)據(jù)轉(zhuǎn)換成電子、光學(xué)或微波信號(hào)進(jìn)行傳輸

  DNS解析過程

  DNS 協(xié)議運(yùn)行在 UDP 協(xié)議之上,使用端口號(hào) 53,用于將域名轉(zhuǎn)換為IP地址瀏覽器先檢查自身緩存中有沒有被解析過這個(gè)域名對(duì)應(yīng)的 ip 地址如果瀏覽器緩存沒有命中,瀏覽器會(huì)檢查操作系統(tǒng)緩存中有沒有對(duì)應(yīng)的已解析過的結(jié)果。在 windows 中可通過 c 盤里 hosts 文件來設(shè)置還沒命中,請(qǐng)求本地域名服務(wù)器來解析這個(gè)域名,一般都會(huì)在本地域名服務(wù)器找到本地域名服務(wù)器沒有命中,則去根域名服務(wù)器請(qǐng)求解析根域名服務(wù)器返回給本地域名服務(wù)器一個(gè)所查詢域的主域名服務(wù)器本地域名服務(wù)器向主域名服務(wù)器發(fā)送請(qǐng)求接受請(qǐng)求的主域名服務(wù)器查找并返回這個(gè)域名對(duì)應(yīng)的域名服務(wù)器的地址域名服務(wù)器根據(jù)映射關(guān)系找到 ip 地址,返回給本地域名服務(wù)器本地域名服務(wù)器緩存這個(gè)結(jié)果本地域名服務(wù)器將該結(jié)果返回給用戶https講一下?密鑰怎么交換的?私鑰存儲(chǔ)在哪里

  HTTPs 是以安全為目標(biāo)的 HTTP 通道,簡單講是 HTTP 的安全版,即HTTP 下加入 SSL 層,HTTPS 的安全基礎(chǔ)是 SSL,因此加密的詳細(xì)內(nèi)容就需要 SSL HTTPs的握手過程包含五步

  瀏覽器請(qǐng)求連接服務(wù)器返回證書:證書里面包含了網(wǎng)站地址,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息,服務(wù)器采用非對(duì)稱加密算法(RSA)生成兩個(gè)秘鑰,私鑰自己保留瀏覽器收到證書后作以下工作: 3.1 驗(yàn)證證書的合法性 3.2 生成隨機(jī)(對(duì)稱)密碼,取出證書中提供的公鑰對(duì)隨機(jī)密碼加密;瀏覽器即客戶端使用非對(duì)稱加密來加密對(duì)稱加密規(guī)則,對(duì)稱加密用于加密后續(xù)傳輸?shù)男畔?3.3 將之前生成的加密隨機(jī)密碼等信息發(fā)送給網(wǎng)站服務(wù)器收到消息后作以下的操作 4.1 使用自己的私鑰解密瀏覽器用公鑰加密后的消息,并驗(yàn)證 HASH 是否與瀏覽器發(fā)來的一致;獲得瀏覽器發(fā)過來的對(duì)稱秘鑰 4.2 使用加密的隨機(jī)對(duì)稱密碼加密一段消息,發(fā)送給瀏覽器瀏覽器解密并計(jì)算握手消息的 HASH:如果與服務(wù)端發(fā)來的 HASH 一致,此時(shí)握手過程結(jié)束,之后進(jìn)行通信http的流程

  每個(gè)萬維網(wǎng)的網(wǎng)點(diǎn)都有一個(gè)服務(wù)器進(jìn)程,它不斷的監(jiān)聽TCP端口80,以便發(fā)現(xiàn)是否有瀏覽器向它發(fā)出連接請(qǐng)求,一旦監(jiān)聽到連接建立請(qǐng)求,就通過三次握手建立TCP連接,然后瀏覽器會(huì)向服務(wù)器發(fā)出瀏覽某個(gè)頁面的請(qǐng)求,服務(wù)器接著返回所請(qǐng)求的頁面作為響應(yīng),然后TCP連接就被釋放了。 這些響應(yīng)和請(qǐng)求報(bào)文都遵循一定的格式,這就是HTTP協(xié)議所規(guī)定的。

  SSL加密

  客戶端向服務(wù)器端索要并驗(yàn)證公鑰雙方協(xié)商生成”對(duì)話密鑰”??蛻舳擞霉€對(duì)對(duì)話秘鑰進(jìn)行加密服務(wù)器通過私鑰解密出對(duì)話秘鑰雙方采用”對(duì)話密鑰”進(jìn)行加密通信對(duì)稱加密算法: 加密效率高,速度快,適合大數(shù)據(jù)量加密。DES/AES非對(duì)稱加密算法:算法復(fù)雜,加密速度慢,安全性更高。結(jié)合對(duì)稱加密使用。RSA、DH私鑰存儲(chǔ)在服務(wù)器上session和cookie

  cookie 是一種發(fā)送到客戶瀏覽器的文本串句柄,并保存在客戶機(jī)硬盤上,可以用來在某個(gè)WEB站點(diǎn)會(huì)話間持久的保持?jǐn)?shù)據(jù)。Session的本質(zhì)上也是cookie,但是不同點(diǎn)是存在服務(wù)器上的。這就導(dǎo)致,你如果使用cookie,你關(guān)閉瀏覽器之后,就丟掉Cookie了,但是如果關(guān)掉瀏覽器,重新打開之后,發(fā)現(xiàn)還有相應(yīng)的信息,那就說明用的是Session。因?yàn)閏ookie是存在本地的,所以也會(huì)有相應(yīng)的安全問題,攻擊者可以去偽造他,填寫相應(yīng)的字段名,就能登錄你的賬戶,還有如果cookie的有效期很長的話,也不安全。session 由服務(wù)器產(chǎn)生,對(duì)于客戶端,只存儲(chǔ)session id在cookie中http和https的區(qū)別

  https 協(xié)議需要到 ca 申請(qǐng)證書,一般免費(fèi)證書較少,因而需要一定費(fèi)用http 是超文本傳輸協(xié)議,信息是明文傳輸,https 則是具有安全性的 ssl 加密傳輸協(xié)議http 和 https 使用的是完全不同的連接方式,用的端口也不一樣,前者是 80,后者是 443http 的連接很簡單,是無狀態(tài)的;HTTPS 協(xié)議是由 SSL+HTTP 協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比 http 協(xié)議安全https的安全外殼是怎么實(shí)現(xiàn)的

  HTTPS就是在原HTTP的基礎(chǔ)上加上一層用于數(shù)據(jù)加密、解密、校驗(yàn)、身份認(rèn)證的安全層SSL/TSL,用于解決HTTP存在的安全隱患 信息加密:所有信息都是加密傳播,第三方無法竊聽;內(nèi)容經(jīng)過對(duì)稱加密,每個(gè)連接生成一個(gè)唯一的加密密鑰; 身份認(rèn)證:配備了身份認(rèn)證,第三方無法偽造服務(wù)端(客戶端)的身份 數(shù)據(jù)完整性校驗(yàn):內(nèi)容傳輸經(jīng)過完整性校驗(yàn),一旦報(bào)文被篡改,通信雙方會(huì)立刻發(fā)現(xiàn)

  TCP TIMEWAIT講一下?為啥需要這個(gè)?

  當(dāng)斷開連接時(shí),客戶端發(fā)送完ACK將處于TIME WAIT狀態(tài),保持2MSL,之后完全斷開意義在于:

  保證最后一次握手報(bào)文能到服務(wù)端,能進(jìn)行超時(shí)重傳2MSL 后,這次連接的所有報(bào)文都會(huì)消失,不會(huì)影響下一次連接說一下TCP/IP

  TCP/IP協(xié)議是包含TCP協(xié)議和IP協(xié)議,UDP(User Datagram Protocol)協(xié)議、ICMP(Internet Control Message Protocol) 協(xié)議和其他一些的協(xié)議的協(xié)議組 TCP/IP定義了電子設(shè)備(如計(jì)算機(jī))如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn).它是互聯(lián)網(wǎng)中的基本通信語言或協(xié)議,在私網(wǎng)中它也被用作通信協(xié)議,當(dāng)用戶直接網(wǎng)絡(luò)連接時(shí),計(jì)算機(jī)應(yīng)提供一個(gè)TCP/IP程序的標(biāo)準(zhǔn)實(shí)現(xiàn),而且接受所發(fā)送的信息的計(jì)算機(jī)也應(yīng)只有一個(gè)TCP/IP程序的標(biāo)準(zhǔn)實(shí)現(xiàn) TCP/IP協(xié)議并不完全符合OSI 標(biāo)準(zhǔn)定制的七層參考模型,它采取了四層的層級(jí)結(jié)構(gòu) 網(wǎng)絡(luò)接口層:接收IP數(shù)據(jù)包并進(jìn)行傳輸,從網(wǎng)絡(luò)上接收物理幀,抽取IP 轉(zhuǎn)交給下一層,對(duì)實(shí)際網(wǎng)絡(luò)的網(wǎng)絡(luò)媒體的管理,定義如何使用物理網(wǎng)絡(luò) ,如以太網(wǎng)。 網(wǎng)際層IP: 負(fù)責(zé)提供基本的數(shù)據(jù)封包傳送功能,讓每一塊數(shù)據(jù)包都能打到目的主機(jī),但不檢查是否被正確接收,主要表現(xiàn)為IP協(xié)議 傳輸層:在此層中,它提供了節(jié)點(diǎn)的數(shù)據(jù)傳送,應(yīng)用程序之間的通信服務(wù),主要是數(shù)據(jù)格式化,數(shù)據(jù)確認(rèn)和丟失重傳等。主要協(xié)議包括TCP和UDP 應(yīng)用層:應(yīng)用程序間溝通單層,如萬維網(wǎng)(WWW)、簡單電子郵件傳輸(SMTP)、文件傳輸協(xié)議(FTP)、網(wǎng)絡(luò)遠(yuǎn)程訪問協(xié)議(Telnet)等

  fread和read的區(qū)別

  read/write 操作文件描述符 (int型) fread/fwrite 操作文件流 (FILE*型) fread/fwrite 調(diào)用 read/write read/write是系統(tǒng)調(diào)用,要自己分配緩存,也就是說效率要自己根據(jù)實(shí)際情況來控制。 fread/fwrite是標(biāo)準(zhǔn)輸入/輸出函數(shù),不需要自己分配緩存,對(duì)于一般情況具有較高的效率。

  什么是內(nèi)存柵欄

  內(nèi)存柵欄(Memory Barrier)就是從本地或工作內(nèi)存到主存之間的拷貝動(dòng)作。 僅當(dāng)寫操作線程先跨越內(nèi)存柵欄而讀線程后跨越內(nèi)存柵欄的情況下,寫操作線程所做的變更才對(duì)其他線程可見。關(guān)鍵字 synchronized 和 volatile 都強(qiáng)制規(guī)定了所有的變更必須全局可見,該特性有助于跨越內(nèi)存邊界動(dòng)作的發(fā)生,無論是有意為之還是無心插柳。 在程序運(yùn)行過程中,所有的變更會(huì)先在寄存器或本地 cache 中完成,然后才會(huì)被拷貝到主存以跨越內(nèi)存柵欄。此種跨越序列或順序稱為 happens-before。 寫操作必須要 happens-before 讀操作,即寫線程需要在所有讀線程跨越內(nèi)存柵欄之前完成自己的跨越動(dòng)作,其所做的變更才能對(duì)其他線程可見

  TCP擁塞控制

  擁塞控制的最終受控變量是發(fā)送端向網(wǎng)絡(luò)一次連續(xù)寫入的數(shù)據(jù)量(收到其中第一個(gè)數(shù)據(jù)報(bào)的確認(rèn)之前),稱之為發(fā)送窗口(SWND),SWND 受接收方接受窗口(RWND)的影響。同時(shí)也受控于發(fā)送方的擁塞窗口(CWND)。SWND = min(RWND, CWND )

  當(dāng) cwnd < 慢開始門限(ssthresh) 時(shí),使用慢開始算法當(dāng) cwnd > ssthresh 時(shí),改用擁塞避免算法快重傳要求接收方在收到一個(gè)失序的報(bào)文段后就立即發(fā)出重復(fù)確認(rèn)(為的是使發(fā)送方及早知道有報(bào)文段沒有到達(dá)對(duì)方)而不要等到自己發(fā)送數(shù)據(jù)時(shí)捎帶確認(rèn)??熘貍魉惴ㄒ?guī)定,發(fā)送方只要一連收到三個(gè)重復(fù)確認(rèn)就應(yīng)當(dāng)立即重傳對(duì)方尚未收到的報(bào)文段,而不必繼續(xù)等待設(shè)置的重傳計(jì)時(shí)器時(shí)間到期。快重傳配合使用的還有快恢復(fù)算法,是將 ssthresh減半,然后將 cwnd 設(shè)置為 ssthresh 的大小,之后執(zhí)行擁塞避免算法TCP為什么要三次握手、但是要四次揮手,握手第二步拆開行不行,揮手2 3步合并行不行,第三次握手確認(rèn)的是什么能力

  三次握手是為了避免僵尸連接,四次揮手是為了確保被斷開方的數(shù)據(jù)能夠全部完成傳輸,握手的第二部可以分開,不過需要增加一下狀態(tài)。如果服務(wù)端沒有數(shù)據(jù)要發(fā)送,揮手的2,3步可以合并,因?yàn)門CP是全雙工的。第三次握手確認(rèn)的是客戶端時(shí)真實(shí)IP

  TCP和UDP的區(qū)別

  TCP 是面向連接的傳輸層協(xié)議,即傳輸數(shù)據(jù)之前必須先建立好連接, UDP 無連接 TCP 是點(diǎn)對(duì)點(diǎn)的兩點(diǎn)間服務(wù),即一條 TCP 連接只能有兩個(gè)端點(diǎn);UDP 支持一對(duì)一,一對(duì)多,多對(duì)一,多對(duì)多的交互通信 TCP 是可靠交付:無差錯(cuò),不丟失,不重復(fù),按序到達(dá);UDP 是盡最大努力交付,不保證可靠交付 TCP 有擁塞控制和流量控制保證數(shù)據(jù)傳輸?shù)陌踩?;UDP 沒有擁塞控制,網(wǎng)絡(luò)擁塞不會(huì)影響源主機(jī)的發(fā)送效率 TCP 是動(dòng)態(tài)報(bào)文長度,即 TCP 報(bào)文長度是根據(jù)接收方的窗口大小和當(dāng)前網(wǎng)絡(luò)擁塞情況決定的。UDP 面向報(bào)文,不合并,不拆分,保留上面?zhèn)飨聛韴?bào)文的邊界 TCP 首部開銷大,首部 20 個(gè)字節(jié);UDP 首部開銷小,8 字節(jié) 如果數(shù)據(jù)完整性更重要,如文件傳輸、重要狀態(tài)的更新等,應(yīng)該選用 TCP 協(xié)議。如果通信的實(shí)時(shí)性較重要,如視頻傳輸、實(shí)時(shí)通信等,則使用 UDP 協(xié)議

  用udp會(huì)有什么問題

  不可靠,不穩(wěn)定 因?yàn)楸旧頉]有重傳的控制機(jī)制,所以丟包率的可能是其最主要的問題

  TCP是可靠的,為什么UDP還要去實(shí)現(xiàn)可靠連接

  Linux查看網(wǎng)絡(luò)連接的命令

  使用netstat查看存在的網(wǎng)絡(luò)連接 使用ping判斷主機(jī)間聯(lián)通情況

  tcp可靠性傳輸怎么實(shí)現(xiàn)

  序列號(hào)、確認(rèn)應(yīng)答、超時(shí)重傳 窗口控制與高速重發(fā)控制/快速重傳(重復(fù)確認(rèn)應(yīng)答) 擁塞控制 流量控制

  虛函數(shù)的實(shí)現(xiàn)原理,繼承的時(shí)候怎么實(shí)現(xiàn)的

  在有虛函數(shù)的類中,類的最開始部分是一個(gè)虛函數(shù)表的指針,這個(gè)指針指向一個(gè)虛函數(shù)表,表中放了虛函數(shù)的地址,實(shí)際的虛函數(shù)在代碼段(.text)中。當(dāng)子類繼承了父類的時(shí)候也會(huì)繼承其虛函數(shù)表,當(dāng)子類重寫父類中虛函數(shù)時(shí)候,會(huì)將其繼承到的虛函數(shù)表中的地址替換為重新寫的函數(shù)地址。使用了虛函數(shù),會(huì)增加訪問內(nèi)存開銷,降低效率。

  局部變量分配在哪

  分配在棧區(qū)

  進(jìn)程的棧有多大

  32位Windows,一個(gè)進(jìn)程棧的默認(rèn)大小是1M,在vs的編譯屬性可以修改程序運(yùn)行時(shí)進(jìn)程的棧大小 inux下進(jìn)程棧的默認(rèn)大小是10M,可以通過 ulimit -s查看并修改默認(rèn)棧大小 默認(rèn)一個(gè)線程要預(yù)留1M左右的棧大小,所以進(jìn)程中有N個(gè)線程時(shí),Windows下大概有N M的棧大小 堆的大小理論上大概等于進(jìn)程虛擬空間大小-內(nèi)核虛擬內(nèi)存大小。windows下,進(jìn)程的高位2G留給內(nèi)核,低位2G留給用戶,所以進(jìn)程堆的大小小于2G。Linux下,進(jìn)程的高位1G留給內(nèi)核,低位3G留給用戶,所以進(jìn)程堆大小小于3G

  進(jìn)程的最大線程數(shù)

  32位windows下,一個(gè)進(jìn)程空間4G,內(nèi)核占2G,留給用戶只有2G,一個(gè)線程默認(rèn)棧是1M,所以一個(gè)進(jìn)程最大開2048個(gè)線程。當(dāng)然內(nèi)存不會(huì)完全拿來做線程的棧,所以最大線程數(shù)實(shí)際值要小于2048,大概2000個(gè) 32位Linux下,一個(gè)進(jìn)程空間4G,內(nèi)核占1G,用戶留3G,一個(gè)線程默認(rèn)8M,所以最多380個(gè)左右線程(ps:ulimit -a 查看電腦的最大進(jìn)程數(shù),大概7000多個(gè))

  怎么快速把進(jìn)程的棧用完

  對(duì)函數(shù)進(jìn)行遞歸調(diào)用 在函數(shù)中定義大對(duì)象

  C++內(nèi)存對(duì)齊

  為什么要內(nèi)存對(duì)齊:

  平臺(tái)原因(移植原因):不是所有的硬件平臺(tái)都能訪問任意地址上的任意數(shù)據(jù)的;某些硬件平臺(tái)只能在某些地址處取某些特定類型的數(shù)據(jù),否則拋出硬件異常性能原因:數(shù)據(jù)結(jié)構(gòu)(尤其是棧)應(yīng)該盡可能地在自然邊界上對(duì)齊。原因在于,為了訪問未對(duì)齊的內(nèi)存,處理器需要作兩次內(nèi)存訪問;而對(duì)齊的內(nèi)存訪問僅需要一次訪問如何進(jìn)行內(nèi)存對(duì)齊

  分配內(nèi)存的順序是按照聲明的順序每個(gè)變量相對(duì)于起始位置的偏移量必須是該變量類型大小的整數(shù)倍,不是整數(shù)倍空出內(nèi)存,直到偏移量是整數(shù)倍為止最后整個(gè)結(jié)構(gòu)體的大小必須是里面變量類型最大值的整數(shù)倍引用和指針的區(qū)別?對(duì)const型常量可以取引用嗎

  首先引用可以視作對(duì)象的別名,指針擁有自己的地址空間,其中保存著所指對(duì)象的地址 區(qū)別:

  指針有自己的一塊空間,而引用只是一個(gè)別名使用 sizeof 看一個(gè)指針的大小是 4,而引用則是被引用對(duì)象的大小指針可以被初始化為 NULL,而引用必須被初始化且必須是一個(gè)已有對(duì)象的引用作為參數(shù)傳遞時(shí),指針需要被解引用才可以對(duì)對(duì)象進(jìn)行操作,而直接對(duì)引用的修改都會(huì)改變引用所指向的對(duì)象指針在使用中可以指向其它對(duì)象,但是引用只能是一個(gè)對(duì)象的引用,不能被改變指針可以有多級(jí)指針(**p),而引用只有一級(jí)指針和引用使用++運(yùn)算符的意義不一樣如果返回動(dòng)態(tài)內(nèi)存分配的對(duì)象或者內(nèi)存,必須使用指針,引用可能引起內(nèi)存泄露http請(qǐng)求格式

  HTTP 請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行 和 請(qǐng)求包體 4 個(gè)部分組成

  ?get post的區(qū)別 put delete 知道嗎 put和post

  http 1.X 2.0區(qū)別 ( 幀 流 推送 頭部壓縮 安全性等等

  聯(lián)合索引:b+樹是什么狀態(tài)

  HTTP頭部字段

  詳細(xì)

  http頭部可以包含二進(jìn)制嗎

  http2支持二進(jìn)制,http1.x不支持

  http 2 和 http 1 的區(qū)別HTTP2使用的是二進(jìn)制傳送,HTTP1.X是文本(字符串)傳送。 二進(jìn)制傳送的單位是幀和流。幀組成了流,同時(shí)流還有流ID標(biāo)示HTTP2支持多路復(fù)用 因?yàn)橛辛鱅D,所以通過同一個(gè)http請(qǐng)求實(shí)現(xiàn)多個(gè)http請(qǐng)求傳輸變成了可能,可以通過流ID來標(biāo)示究竟是哪個(gè)流從而定位到是哪個(gè)http請(qǐng)求HTTP2頭部壓縮 HTTP2通過gzip和compress壓縮頭部然后再發(fā)送,同時(shí)客戶端和服務(wù)器端同時(shí)維護(hù)一張頭信息表,所有字段都記錄在這張表中,這樣后面每次傳輸只需要傳輸表里面的索引Id就行,通過索引ID查詢表頭的值HTTP2支持服務(wù)器推送 HTTP2支持在未經(jīng)客戶端許可的情況下,主動(dòng)向客戶端推送內(nèi)容MYSQL的事務(wù)

  ACID特性,原子性、一致性、隔離性、持久性

  多級(jí)緩存的由來和使用

  計(jì)算機(jī)結(jié)構(gòu)中CPU和內(nèi)存之間一般都配有一級(jí)緩存、二級(jí)緩存來增加交換速度,這樣當(dāng)CPU調(diào)用大量數(shù)據(jù)時(shí),就可避開內(nèi)存直接從CPU緩存中調(diào)用,加快讀取速度。 根據(jù)CPU緩存得出多級(jí)緩存的特點(diǎn):

  每一級(jí)緩存中儲(chǔ)存的是下一級(jí)緩存的一部分讀取速度按級(jí)別依次遞減,成本也依次遞減,容量依次遞增當(dāng)前級(jí)別未命中時(shí),才會(huì)去下一級(jí)尋找項(xiàng)目文件傳輸時(shí)怎么限速

  在客戶端進(jìn)行文件傳輸時(shí),每當(dāng)上傳限制大小數(shù)據(jù),就sleep一下

  用戶態(tài)和內(nèi)核態(tài),為啥這樣做,好處是什么

  用戶態(tài)和內(nèi)核態(tài)是操作系統(tǒng)的兩種運(yùn)行級(jí)別,兩者最大的區(qū)別就是特權(quán)級(jí)不同。用戶態(tài)擁有最低的特權(quán)級(jí),內(nèi)核態(tài)擁有較高的特權(quán)級(jí)。運(yùn)行在用戶態(tài)的程序不能直接訪問操作系統(tǒng)內(nèi)核數(shù)據(jù)結(jié)構(gòu)和程序。內(nèi)核態(tài)和用戶態(tài)之間的轉(zhuǎn)換方式主要包括:系統(tǒng)調(diào)用,異常和中斷進(jìn)程

  堆和棧的區(qū)別

  堆是由低地址向高地址擴(kuò)展;棧是由高地址向低地址擴(kuò)展 堆中的內(nèi)存需要手動(dòng)申請(qǐng)和手動(dòng)釋放;棧中內(nèi)存是由 OS 自動(dòng)申請(qǐng)和自動(dòng)釋放,存放著參數(shù)、局部變量等內(nèi)存 堆中頻繁調(diào)用 malloc 和 free,會(huì)產(chǎn)生內(nèi)存碎片,降低程序效率;而棧由于其先進(jìn)后出的特性,不會(huì)產(chǎn)生內(nèi)存碎片 堆的分配效率較低,而棧的分配效率較高 棧是操作系統(tǒng)提供的數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)底層對(duì)棧提供了一系列支持:分配專門的寄存器存儲(chǔ)棧的地址,壓棧和入棧有專門的指令執(zhí)行;而堆是由 C/C++函數(shù)庫提供的,機(jī)制復(fù)雜,需要一些列分配內(nèi)存、合并內(nèi)存和釋放內(nèi)存的算法,因此效率較低

  五種IO模型

  阻塞IO:調(diào)用者調(diào)用了某個(gè)函數(shù),等待這個(gè)函數(shù)返回,期間什么也不做,不停的去檢查這個(gè)函數(shù)有沒有返回,必須等這個(gè)函數(shù)返回才能進(jìn)行下一步動(dòng)作非阻塞IO:非阻塞等待,每隔一段時(shí)間就去檢測 IO 事件是否就緒。沒有就緒就可以做其他事異步IO:信號(hào)驅(qū)動(dòng)IO:linux 用套接口進(jìn)行信號(hào)驅(qū)動(dòng) IO,安裝一個(gè)信號(hào)處理函數(shù),進(jìn)程繼續(xù)運(yùn)行并不阻塞,當(dāng) IO 時(shí)間就緒,進(jìn)程收到 SIGIO 信號(hào)。然后處理 IO 事件多路復(fù)用IO:linux 用 select/poll 函數(shù)實(shí)現(xiàn) IO 復(fù)用模型,這兩個(gè)函數(shù)也會(huì)使進(jìn)程阻塞,但是和阻塞 IO 所不同的是這兩個(gè)函數(shù)可以同時(shí)阻塞多個(gè) IO 操作。而且可以同時(shí)對(duì)多個(gè)讀操作、寫操作的 IO 函數(shù)進(jìn)行檢測。知道有數(shù)據(jù)可讀或可寫時(shí),才真正調(diào)用 IO 操作函數(shù)bio nio aio 區(qū)別

  詳細(xì) BIO (Blocking I/O):同步阻塞I/O模式,數(shù)據(jù)的讀取寫入必須阻塞在一個(gè)線程內(nèi)等待其完成。這里使用那個(gè)經(jīng)典的燒開水例子,這里假設(shè)一個(gè)燒開水的場景,有一排水壺在燒開水,BIO的工作模式就是, 叫一個(gè)線程停留在一個(gè)水壺那,直到這個(gè)水壺?zé)_,才去處理下一個(gè)水壺。但是實(shí)際上線程在等待水壺?zé)_的時(shí)間段什么都沒有做。 NIO (New I/O):同時(shí)支持阻塞與非阻塞模式,但這里我們以其同步非阻塞I/O模式來說明,那么什么叫做同步非阻塞?如果還拿燒開水來說,NIO的做法是叫一個(gè)線程不斷的輪詢每個(gè)水壺的狀態(tài),看看是否有水壺的狀態(tài)發(fā)生了改變,從而進(jìn)行下一步的操作。 AIO ( Asynchronous I/O):異步非阻塞I/O模型。異步非阻塞與同步非阻塞的區(qū)別在哪里?異步非阻塞無需一個(gè)線程去輪詢所有IO操作的狀態(tài)改變,在相應(yīng)的狀態(tài)改變后,系統(tǒng)會(huì)通知對(duì)應(yīng)的線程來處理。對(duì)應(yīng)到燒開水中就是,為每個(gè)水壺上面裝了一個(gè)開關(guān),水燒開之后,水壺會(huì)自動(dòng)通知我水燒開了。

  Select poll epoll

  I/O 多路復(fù)用的特點(diǎn)是通過一種機(jī)制一個(gè)進(jìn)程能同時(shí)等待多個(gè)文件描述符,而這些文件描述符(套接字描述符)其中的任意一個(gè)進(jìn)入讀就緒狀態(tài),select()函數(shù)就可以返回 I/O 多路復(fù)用和阻塞 I/O 其實(shí)并沒有太大的不同,事實(shí)上,還更差一些。因?yàn)檫@里需要使用兩個(gè) system call (select 和 recvfrom),而 blocking IO 只調(diào)用了一個(gè) system call (recvfrom)。但是,用 select 的優(yōu)勢在于它可以同時(shí)處理多個(gè) connection。 所以,如果處理的連接數(shù)不是很高的話,使用 select/epoll 的 web server 不一定比使用 multi-threading + blocking IO 的 web server 性能更好,可能延遲還更大。select/epoll 的優(yōu)勢并不是對(duì)于單個(gè)連接能處理得更快,而是在于能處理更多的連接。 select 是最初解決 IO 阻塞問題的方法。用結(jié)構(gòu)體 fd_set 來告訴內(nèi)核監(jiān)聽多個(gè)文件描述符,該結(jié)構(gòu)體被稱為描述符集。由數(shù)組來維持哪些描述符被置位了。對(duì)結(jié)構(gòu)體的操作封裝在三個(gè)宏定義中。通過輪尋來查找是否有描述符要被處理 存在的問題:

  內(nèi)置數(shù)組的形式使得 select 的最大文件數(shù)受限于 FD_SIZE;每次調(diào)用 select 前都要重新初始化描述符集,將 fd 從用戶態(tài)拷貝到內(nèi)核態(tài),每次調(diào)用select 后,都需要將 fd 從內(nèi)核態(tài)拷貝到用戶態(tài)輪尋排查當(dāng)文件描述符個(gè)數(shù)很多時(shí),效率很低select 會(huì)修改傳入的參數(shù)數(shù)組,這個(gè)對(duì)于一個(gè)需要調(diào)用很多次的函數(shù),是非常不友好的select 不是線程安全的,如果你把一個(gè)sock加入到select, 然后突然另外一個(gè)線程發(fā)現(xiàn)這個(gè)sock不用,要收回。對(duì)不起,這個(gè)select 不支持的,如果你要關(guān)掉這個(gè)sock, select的標(biāo)準(zhǔn)行為是不可預(yù)測的poll 與 select 相比,poll 使用鏈表保存文件描述符,一沒有了監(jiān)視文件數(shù)量的限制,但其他三個(gè)缺點(diǎn)依然存在 epoll epoll 使用一個(gè)文件描述符管理多個(gè)描述符,將用戶關(guān)系的文件描述符的事件存放到內(nèi)核的一個(gè)事件表中,這樣在用戶空間和內(nèi)核空間的 copy 只需一次。Epoll 是事件觸發(fā)的,不是輪詢查詢的。沒有最大的并發(fā)連接限制,內(nèi)存拷貝,利用 mmap() 文件映射內(nèi)存加速與內(nèi)核空間的消息傳遞。 epoll 對(duì)文件描述符的操作有兩種模式:LT(level trigger)和 ET(edge trigger LT 模式是默認(rèn)模式 LT(level triggered)是缺省的工作方式,并且同時(shí)支持 block 和 no-block socket.在這種做法中,內(nèi)核告訴你一個(gè)文件描述符是否就緒了,然后你可以對(duì)這個(gè)就緒的 fd 進(jìn)行 IO 操作。如果你不作任何操作,內(nèi)核還是會(huì)繼續(xù)通知你的 ET 模式 ET(edge-triggered)是高速工作方式,只支持 no-block socket。在這種模式下,當(dāng)描述符從未就緒變?yōu)榫途w時(shí),內(nèi)核通過 epoll 告訴你。然后它會(huì)假設(shè)你知道文件描述符已經(jīng)就緒,并且不會(huì)再為那個(gè)文件描述符發(fā)送更多的就緒通知,直到你做了某些操作導(dǎo)致那個(gè)文件描述符不再為就緒狀態(tài)了(比如,你在發(fā)送,接收或者接收請(qǐng)求,或者發(fā)送接收的數(shù)據(jù)少于一定量時(shí)導(dǎo)致了一個(gè) EWOULDBLOCK 錯(cuò)誤)。但是請(qǐng)注意,如果一直不對(duì)這個(gè) fd 作 IO 操作(從而導(dǎo)致它再次變成未就緒),內(nèi)核不會(huì)發(fā)送更多的通知(only once) ET 模式在很大程度上減少了 epoll 事件被重復(fù)觸發(fā)的次數(shù),因此效率要比 LT 模式高。epoll 工作在 ET 模式的時(shí)候,必須使用非阻塞套接口,以避免由于一個(gè)文件句柄的阻塞讀/阻塞寫操作把處理多個(gè)文件描述符的任務(wù)餓死 LT 模式與 ET 模式的區(qū)別如下: LT 模式:當(dāng) epoll_wait 檢測到描述符事件發(fā)生并將此事件通知應(yīng)用程序,應(yīng)用程序可以不立即處理該事件。下次調(diào)用 epoll_wait 時(shí),會(huì)再次響應(yīng)應(yīng)用程序并通知此事件。 ET 模式:當(dāng) epoll_wait 檢測到描述符事件發(fā)生并將此事件通知應(yīng)用程序,應(yīng)用程序必須立即處理該事件。如果不處理,下次調(diào)用 epoll_wait 時(shí),不會(huì)再次響應(yīng)應(yīng)用程序并通知此事件。

  epoll的底層實(shí)現(xiàn)

  epoll發(fā)展于介紹 epoll中就緒列表引用著就緒的socket,所以它應(yīng)能夠快速的插入數(shù)據(jù)。程序可能隨時(shí)調(diào)用epoll_ctl添加監(jiān)視socket,也可能隨時(shí)刪除。當(dāng)刪除時(shí),若該socket已經(jīng)存放在就緒列表中,它也應(yīng)該被移除。所以就緒列表應(yīng)是一種能夠快速插入和刪除的數(shù)據(jù)結(jié)構(gòu)。雙向鏈表就是這樣一種數(shù)據(jù)結(jié)構(gòu),epoll使用雙向鏈表來實(shí)現(xiàn)就緒隊(duì)列。 既然epoll將“維護(hù)監(jiān)視隊(duì)列”和“進(jìn)程阻塞”分離,也意味著需要有個(gè)數(shù)據(jù)結(jié)構(gòu)來保存監(jiān)視的socket。至少要方便的添加和移除,還要便于搜索,以避免重復(fù)添加。紅黑樹是一種自平衡二叉查找樹,搜索、插入和刪除時(shí)間復(fù)雜度都是O(log(N)),效率較好。epoll使用了紅黑樹作為索引結(jié)構(gòu)

  Linux的阻塞和非阻塞怎么體現(xiàn)

  阻塞(休眠)調(diào)用是沒有獲得資源則掛起進(jìn)程,被掛起的進(jìn)程進(jìn)入休眠狀態(tài),調(diào)用的函數(shù)只有在得到結(jié)果之后才返回,進(jìn)程繼續(xù)。 非阻塞(休眠)是不能進(jìn)行設(shè)備操作時(shí)不掛起,或返回,或反復(fù)查詢,直到可以進(jìn)行操作為止,被調(diào)用的函數(shù)不會(huì)阻塞當(dāng)前進(jìn)程,而會(huì)立刻返回

  進(jìn)程間通信

  管道 具名管道 消息隊(duì)列 信號(hào) 信號(hào)量 共享內(nèi)存 socket

  進(jìn)程上下文切換

  1 保存當(dāng)前進(jìn)程的上下文 2 恢復(fù)某個(gè)先前被搶占的進(jìn)程的上下文 3 將控制傳遞給這個(gè)新恢復(fù)的進(jìn)程 詳細(xì) 保存處理器上下文環(huán)境即 PSW、PC 等寄存器和堆棧內(nèi)容,保存到內(nèi)核堆棧中 調(diào)整被中斷進(jìn)程的 PCB 進(jìn)程控制塊信息,改變進(jìn)程狀態(tài)和其它信息 將進(jìn)程控制塊移到相應(yīng)隊(duì)列即阻塞隊(duì)列或就緒隊(duì)列 選擇另一個(gè)進(jìn)程執(zhí)行 更新所選擇進(jìn)程的 PCB 進(jìn)程控制塊 更新內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu) 恢復(fù)第二個(gè)進(jìn)程的上下文環(huán)境

  中斷是什么

  中斷定義:指當(dāng)出現(xiàn)需要時(shí),CPU暫時(shí)停止當(dāng)前程序的執(zhí)行轉(zhuǎn)而執(zhí)行處理新情況的程序和執(zhí)行過程。 硬件中斷是由外設(shè)引發(fā)的, 軟中斷是執(zhí)行中斷指令產(chǎn)生的。 硬件中斷的中斷號(hào)是由中斷控制器提供的, 軟中斷的中斷號(hào)由指令直接指出, 無需使用中斷控制器。 硬件中斷是可屏蔽的, 軟中斷不可屏蔽。

  中斷處理過程

  中斷響應(yīng)的事前準(zhǔn)備CPU檢查是否有中斷/異常信號(hào)根據(jù)中斷向量到IDT表中取得處理這個(gè)向量的中斷程序的段選擇符根據(jù)取得的段選擇符到GDT中找相應(yīng)的段描述符CPU根據(jù)特權(quán)級(jí)的判斷設(shè)定即將運(yùn)行的中斷服務(wù)程序要使用的棧的地址保護(hù)當(dāng)前程序的現(xiàn)場跳轉(zhuǎn)到中斷服務(wù)程序的第一條指令開始執(zhí)行中斷服務(wù)程序處理完畢,恢復(fù)執(zhí)行先前中斷的程序線程的上下文是什么、進(jìn)程的上下文是什么

  線程上下文 線程在切換的過程中需要保存當(dāng)前線程 Id、線程狀態(tài)、堆棧、寄存器狀態(tài)等信息。其中寄存器主要包括 SP PC EAX 等寄存器,其主要功能如下 SP:堆棧指針,指向當(dāng)前棧的棧頂?shù)刂?PC:程序計(jì)數(shù)器,存儲(chǔ)下一條將要執(zhí)行的指令 EAX:累加寄存器,用于加法乘法的缺省寄存器進(jìn)程上下文 進(jìn)程上下文包括三個(gè),用戶級(jí)上下文,寄存器上下文和系統(tǒng)級(jí)上下文 用戶級(jí)上下文:指令,數(shù)據(jù),共享內(nèi)存、用戶棧 寄存器上下文:程序計(jì)數(shù)器,通用寄存器,控制寄存器,狀態(tài)字寄存器,棧指針(用來指向用戶棧或者內(nèi)存棧) 系統(tǒng)級(jí)上下文:pcb,主存管理信息(頁表&段表)、核心棧Linux文件系統(tǒng),inode講一講?inode里存文件名稱嗎?

  inode,中文名為索引結(jié)點(diǎn),引進(jìn)索引結(jié)點(diǎn)是為了在物理內(nèi)存上找到文件塊,所以 inode 中包含文件的相關(guān)基本信息,比如文件位置、文件創(chuàng)建者、創(chuàng)建日期、文件大小等,輸入 stat 指令可以查看某個(gè)文件的 inode 信息 硬盤格式化的時(shí)候,操作系統(tǒng)自動(dòng)將硬盤分成兩個(gè)區(qū)域,一個(gè)是數(shù)據(jù)區(qū),一個(gè)是 inode 區(qū),存放 inode 所包含的信息,查看每個(gè)硬盤分區(qū)的 inode 總數(shù)和已經(jīng)使用的數(shù)量,可以用 df 命令 在 linux 系統(tǒng)中,系統(tǒng)內(nèi)部并不是采用文件名查找文件,而是使用 inode 編號(hào)來識(shí)別文件。查找文件分為三個(gè)過程:系統(tǒng)找到這個(gè)文件名對(duì)應(yīng)的inode 號(hào)碼,通過 inode 號(hào)碼獲得 inode 信息,根據(jù) inode 信息找到文件數(shù)據(jù)所在的 block 讀取數(shù)據(jù) 除了文件名之外的所有文件信息,都存儲(chǔ)在 inode 之中

  Linux chmod講一講,為啥有9位,分別對(duì)應(yīng)什么

  詳細(xì) Linux chmod(英文全拼:change mode)命令是控制用戶對(duì)文件的權(quán)限的命令 Linux/Unix 的文件調(diào)用權(quán)限分為三級(jí) : 文件所有者(Owner)、用戶組(Group)、其它用戶(Other Users) 9為代表三種用戶的權(quán)限: rwxrwxrwx,前三位rwx表示文件所有者的權(quán)限,中間三位表示用戶組的權(quán)限,最后三位表示其它用戶的權(quán)限

  STL中的map和unordered_map的實(shí)現(xiàn)

  map實(shí)現(xiàn)使用紅黑樹,unordered_map使用hash表 簡述

  紅黑樹,B+樹,跳表

  紅黑樹。一種二叉查找樹,但在每個(gè)節(jié)點(diǎn)增加一個(gè)存儲(chǔ)位表示節(jié)點(diǎn)的顏色,可以是紅或黑(非紅即黑)。通過對(duì)任何一條從根到葉子的路徑上各個(gè)節(jié)點(diǎn)著色的方式的限制,紅黑樹確保沒有一條路徑會(huì)比其它路徑長出兩倍,因此,紅黑樹是一種弱平衡二叉樹(由于是弱平衡,可以看到,在相同的節(jié)點(diǎn)情況下,AVL樹的高度低于紅黑樹),相對(duì)于要求嚴(yán)格的AVL樹來說,它的旋轉(zhuǎn)次數(shù)少,所以對(duì)于搜索,插入,刪除操作較多的情況下,我們就用紅黑樹。 性質(zhì):1. 每個(gè)節(jié)點(diǎn)非紅即黑 2. 根節(jié)點(diǎn)是黑的; 3. 每個(gè)葉節(jié)點(diǎn)(葉節(jié)點(diǎn)即樹尾端NULL指針或NULL節(jié)點(diǎn))都是黑的; 4. 如果一個(gè)節(jié)點(diǎn)是紅的,那么它的兩兒子都是黑的; 5. 對(duì)于任意節(jié)點(diǎn)而言,其到葉子點(diǎn)樹NULL指針的每條路徑都包含相同數(shù)目的黑節(jié)點(diǎn); 6. 每條路徑都包含相同的黑節(jié)點(diǎn)。B+ 樹有n棵子樹的非葉子結(jié)點(diǎn)中含有n個(gè)關(guān)鍵字(b樹是n-1個(gè)),這些關(guān)鍵字不保存數(shù)據(jù),只用來索引,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)(b樹是每個(gè)關(guān)鍵字都保存數(shù)據(jù))。所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息,及指向含這些關(guān)鍵字記錄的指針,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接(葉子節(jié)點(diǎn)組成一個(gè)鏈表)。所有的非葉子結(jié)點(diǎn)可以看成是索引部分,結(jié)點(diǎn)中僅含其子樹中的最大(或最?。╆P(guān)鍵字。通常在b+樹上有兩個(gè)頭指針,一個(gè)指向根結(jié)點(diǎn),一個(gè)指向關(guān)鍵字最小的葉子結(jié)點(diǎn)。同一個(gè)數(shù)字會(huì)在不同節(jié)點(diǎn)中重復(fù)出現(xiàn),根節(jié)點(diǎn)的最大元素就是b+樹的最大元素。怎么查看linux下哪個(gè)進(jìn)程打開了哪些文件

  詳細(xì) lsof

  虛擬地址怎么轉(zhuǎn)換成物理地址

  對(duì)于段頁式系統(tǒng)來說,首先是查找段號(hào),在對(duì)應(yīng)段內(nèi)找到頁號(hào),在頁內(nèi)找到頁內(nèi)偏移,從而 程序地址:段號(hào)+頁號(hào)+頁內(nèi)偏移

  進(jìn)程的調(diào)度算法

  先來先服務(wù)調(diào)度算法(FCFS) 在進(jìn)程調(diào)度中采用 FCFS 算法時(shí),則每次調(diào)度是從就緒隊(duì)列中選擇一個(gè)最先進(jìn)入該隊(duì)列的進(jìn)程,為之分配處理機(jī),使之投入運(yùn)行,該進(jìn)程一直運(yùn)行到完或發(fā)生某事件而阻塞后才放棄處理機(jī)。–非搶占式 有利于長作業(yè),不利于短作業(yè);有利于 CPU 繁忙的作業(yè),不利于 I/O 繁忙的作業(yè)短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法(SJF、SPF) 短進(jìn)程(SPF)調(diào)度算法則是從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件被阻塞放棄處理機(jī)?!菗屨际?比 FCFS 改善平均周轉(zhuǎn)時(shí)間和平均帶權(quán)周轉(zhuǎn)時(shí)間,提高系統(tǒng)吞吐量;對(duì)長作業(yè)不利,沒能根據(jù)緊迫程度來劃分執(zhí)行的優(yōu)先級(jí),難以準(zhǔn)確估計(jì) 作業(yè)或進(jìn)程的執(zhí)行時(shí)間。優(yōu)先權(quán)調(diào)度算法 當(dāng)該算法用于進(jìn)程調(diào)度時(shí),將把處理機(jī)分配給就緒進(jìn)程隊(duì)列中優(yōu)先級(jí)最高的進(jìn)程投入運(yùn)行。分為非搶占式優(yōu)先級(jí)算法和搶占式優(yōu)先級(jí)算法。時(shí)間片輪轉(zhuǎn)調(diào)度算法 系統(tǒng)將就緒進(jìn)程按到達(dá)的順序排成一個(gè)隊(duì)列,按 FCFS 原則,進(jìn)程調(diào)度程序總是選擇就緒隊(duì)列中的第一個(gè)進(jìn)程執(zhí)行,且只運(yùn)行一個(gè)時(shí)間片。時(shí)間用完后,即使此進(jìn)程并未完成,仍然將處理機(jī)分配給下一個(gè)就緒的進(jìn)程,將此進(jìn)程返回到就緒隊(duì)列的末尾,等候重新運(yùn)行多級(jí)反饋隊(duì)列調(diào)度算法 設(shè)置 n 個(gè)就緒隊(duì)列,優(yōu)先級(jí)從 1 到 n 依次遞減,即第 1 級(jí)隊(duì)列優(yōu)先級(jí)最高每個(gè)隊(duì)列的時(shí)間也不相同,優(yōu)先級(jí)高的隊(duì)列,時(shí)間片越短,即從 1 到 n 時(shí)間片越來越多。一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,先插入第一級(jí)隊(duì)列的末尾,按照FCFS的原則等待調(diào)度。如果某個(gè)進(jìn)程可在一個(gè)時(shí)間片內(nèi)完成,那么結(jié)束此進(jìn)程;如果某進(jìn)程在一個(gè)時(shí)間片內(nèi)無法完成,就把此進(jìn)程轉(zhuǎn)入下一級(jí)隊(duì)列的末尾,按照 FCFS 原則等待調(diào)度,一直到第 n-1 級(jí)隊(duì)列。當(dāng)一個(gè)很長的進(jìn)程從第 1 級(jí)一直到第 n 級(jí)隊(duì)列,那么它在第 n 級(jí)隊(duì)列按照時(shí)間片輪轉(zhuǎn)的方式等待調(diào)度。僅當(dāng)?shù)?1 級(jí)隊(duì)列為空時(shí),調(diào)度程序才調(diào)度第 2 級(jí)隊(duì)列中的進(jìn)程執(zhí)行,依次類推。如果處理機(jī)正在處理第 i 級(jí)的隊(duì)列的某進(jìn)程,又有新的進(jìn)程進(jìn)入優(yōu)先級(jí)更高的隊(duì)列(第 1——i -1),則此時(shí)新的進(jìn)程搶占處理機(jī),原本正在執(zhí)行第 i 級(jí)此進(jìn)程停止運(yùn)行,放到第 i 級(jí)就緒隊(duì)列的末尾,把處理機(jī)分配給更高優(yōu)先級(jí)的進(jìn)程 短作業(yè)優(yōu)先、短批處理作業(yè)周轉(zhuǎn)時(shí)間較短、長批處理作業(yè)不會(huì)長期得不到執(zhí)行怎么解鎖死鎖

  死鎖四條件:

  互斥不可搶奪占有與等待循環(huán)等待 解決死鎖的方案:

  允許進(jìn)程強(qiáng)行從占有者那里奪取某些資源,破壞不可搶占條件進(jìn)程在運(yùn)行前一次性地向系統(tǒng)申請(qǐng)它所需要的全部資源,破壞了保持與等待條件把資源事先分類編號(hào),按號(hào)分配,使進(jìn)程在申請(qǐng),占用資源時(shí)不會(huì)形成環(huán)路,破壞了循環(huán)等待條件 死鎖避免:銀行家算法

  OSI七層模型

  物理層:規(guī)定通信設(shè)備的機(jī)械的、電氣的、功能的和過程的特性,用以建立、維護(hù)和拆除物理鏈路連接。在這一層,數(shù)據(jù)的單位稱為比特(bit)。屬于物理層定義的典型規(guī)范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45 等數(shù)據(jù)鏈路層:在物理層提供比特流服務(wù)的基礎(chǔ)上,建立相鄰結(jié)點(diǎn)之間的數(shù)據(jù)鏈路,通過差 錯(cuò)控制提供數(shù)據(jù)幀(Frame)在信道上無差錯(cuò)的傳輸,并進(jìn)行各電路上的動(dòng)作系列。數(shù)據(jù)鏈路層在不可靠的物理介質(zhì)上提供可靠的傳輸。該層的作用包括:物理地址尋址、數(shù)據(jù)的成幀、流量控制、數(shù)據(jù)的檢錯(cuò)、重發(fā)等。在這一層,數(shù)據(jù)的單位稱為幀(frame)。數(shù)據(jù)鏈路層協(xié)議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。網(wǎng)絡(luò)層:在 計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行通信的兩個(gè)計(jì)算機(jī)之間可能會(huì)經(jīng)過很多個(gè)數(shù)據(jù)鏈路,也可能還要經(jīng)過很多通信子網(wǎng)。網(wǎng)絡(luò)層的任務(wù)就是選擇合適的網(wǎng)間路由和交換結(jié)點(diǎn),確保數(shù)據(jù)及時(shí)傳送。網(wǎng)絡(luò)層將數(shù)據(jù)鏈路層提供的幀組成數(shù)據(jù)包,包中封裝有網(wǎng)絡(luò)層包頭,其中含有邏輯地址信息- -源站點(diǎn)和目的站點(diǎn)地址的網(wǎng)絡(luò)地址。IP 是第 3 層問題的一部分,此外還有一些路由協(xié)議和地址解析協(xié)議(ARP)。有關(guān)路由的一切事情都在這第 3 層處理。地址解析和路由是 3 層的重要目的。網(wǎng)絡(luò)層還可以實(shí)現(xiàn)擁塞控制、網(wǎng)際互連等功能。在這一層,數(shù)據(jù)的單位稱為數(shù)據(jù)包(packet)。網(wǎng)絡(luò)層協(xié)議的代表包括:IP、IPX、RIP、OSPF 等。傳輸層:第 4 層的數(shù)據(jù)單元也稱作數(shù)據(jù)包(packets)。但是,當(dāng)你談?wù)?TCP 等具體的協(xié)議時(shí)又有特殊的叫法,TCP 的數(shù)據(jù)單元稱為段 (segments)而 UDP 協(xié)議的數(shù)據(jù)單元稱為“數(shù)據(jù)報(bào)(datagrams)”。這個(gè)層負(fù)責(zé)獲取全部信息,因此,它必須跟蹤數(shù)據(jù)單元碎片、亂序到達(dá)的數(shù)據(jù)包和其它在傳輸過程中可能發(fā)生的危險(xiǎn)。第 4 層為上層提供端到端(最終用戶到最終用戶)的透明的、可靠的數(shù)據(jù)傳輸服務(wù)。所謂透明的傳輸是指在通信過程中 傳輸層對(duì)上層屏蔽了通信傳輸系統(tǒng)的具體細(xì)節(jié)。傳輸層協(xié)議的代表包括:TCP、UDP、SPX 等。會(huì)話層:在會(huì)話層及以上的高層次中,數(shù)據(jù)傳送的單位不再另外命名,而是統(tǒng)稱為報(bào)文。會(huì)話層不參與具體的傳輸,它提供包括訪問驗(yàn)證和會(huì)話管理在內(nèi)的建立和維護(hù)應(yīng)用之間通信的機(jī)制。如服務(wù)器驗(yàn)證用戶登錄便是由會(huì)話層完成的。表示層:這一層主要解決擁護(hù)信息的語法表示問題。它將欲交換的數(shù)據(jù)從適合于某一用戶的抽象語法,轉(zhuǎn)換為適合于 OSI 系統(tǒng)內(nèi)部使用的傳送語法。即提供格式化的表示和轉(zhuǎn)換數(shù)據(jù)服務(wù)。數(shù)據(jù)的壓縮和解壓縮, 加密和解密等工作都由表示層負(fù)責(zé)。應(yīng)用層:為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口。應(yīng)用層協(xié)議的代表包括:Telnet、FTP、HTTP、SNMP 等ARP協(xié)議

  ARP(地址解析)協(xié)議是一種解析協(xié)議,本來主機(jī)是完全不知道這個(gè) IP 對(duì)應(yīng)的是哪個(gè)主機(jī)的哪個(gè)接口,當(dāng)主機(jī)要發(fā)送一個(gè) IP 包的時(shí)候,會(huì)首先查一下自己的 ARP 高速緩存表(最近數(shù)據(jù)傳遞更新的 IP-MAC 地址對(duì)應(yīng)表),如果查詢的 IP-MAC 值對(duì)不存在,那么主機(jī)就向網(wǎng)絡(luò)廣播一個(gè) ARP 請(qǐng)求包,這個(gè)包里面就有待查詢的 IP 地址,而直接收到這份廣播的包的所有主機(jī)都會(huì)查詢自己的 IP 地址,如果收到廣播包的某一個(gè)主機(jī)發(fā)現(xiàn)自己符合條件,那么就回應(yīng)一個(gè) ARP 應(yīng)答包(將自己對(duì)應(yīng)的 IP-MAC 對(duì)應(yīng)地址發(fā)回主機(jī)),源主機(jī)拿到 ARP 應(yīng)答包后會(huì)更新自己的 ARP 緩存表。源主機(jī)根據(jù)新的 ARP 緩存表準(zhǔn)備好數(shù)據(jù)鏈路層的的數(shù)據(jù)包發(fā)送工作

  malloc底層的實(shí)現(xiàn)

  Malloc 函數(shù)用于動(dòng)態(tài)分配內(nèi)存。為了減少內(nèi)存碎片和系統(tǒng)調(diào)用的開銷,malloc 其采用內(nèi)存池的方式,先申請(qǐng)大塊內(nèi)存作為堆區(qū),然后將堆區(qū)分為多個(gè)內(nèi)存塊,以塊作為內(nèi)存管理的基本單位。當(dāng)用戶申請(qǐng)內(nèi)存時(shí),直接從堆區(qū)分配一塊合適的空閑塊。Malloc 采用隱式鏈表結(jié)構(gòu)將堆區(qū)分成連續(xù)的、大小不一的塊,包含已分配塊和未分配塊;同時(shí) malloc 采用顯示鏈表結(jié)構(gòu)來管理所有的空閑塊,即使用一個(gè)雙向鏈表將空閑塊連接起來,每一個(gè)空閑塊記錄了一個(gè)連續(xù)的、未分配的地址 當(dāng)進(jìn)行內(nèi)存分配時(shí),Malloc 會(huì)通過隱式鏈表遍歷所有的空閑塊,選擇滿足要求的塊進(jìn)行分配;當(dāng)進(jìn)行內(nèi)存合并時(shí),malloc 采用邊界標(biāo)記法,根據(jù)每個(gè)塊的前后塊是否已經(jīng)分配來決定是否進(jìn)行塊合并 Malloc 在申請(qǐng)內(nèi)存時(shí),一般會(huì)通過 brk 或者 mmap 系統(tǒng)調(diào)用進(jìn)行申請(qǐng)。其中當(dāng)申請(qǐng)內(nèi)存小于128K 時(shí),會(huì)使用系統(tǒng)函數(shù) brk 在堆區(qū)中分配;而當(dāng)申請(qǐng)內(nèi)存大于 128K 時(shí),會(huì)使用系統(tǒng)函數(shù) mmap在映射區(qū)分配

  邏輯地址---(分段硬件)>>> 線型地址 --- (分頁硬件)>>> 物理地址 的過程,虛擬內(nèi)存的實(shí)現(xiàn)

  為什么引入虛擬內(nèi)存

  為了防止不同進(jìn)程同一時(shí)刻在物理內(nèi)存中運(yùn)行而對(duì)物理內(nèi)存的爭奪和踐踏,采用了虛擬內(nèi)存。

  虛擬內(nèi)存技術(shù)使得不同進(jìn)程在運(yùn)行過程中,它所看到的是自己獨(dú)自占有了當(dāng)前系統(tǒng)的 4G 內(nèi)存。所有進(jìn)程共享同一物理內(nèi)存,每個(gè)進(jìn)程只把自己目前需要的虛擬內(nèi)存空間映射并存儲(chǔ)到物理內(nèi)存上。

  虛擬內(nèi)存的好處:

  擴(kuò)大地址空間;內(nèi)存保護(hù):每個(gè)進(jìn)程運(yùn)行在各自的虛擬內(nèi)存地址空間,互相不能干擾對(duì)方。虛存還對(duì)特定的內(nèi)存地址提供寫保護(hù),可以防止代碼或數(shù)據(jù)被惡意篡改。公平內(nèi)存分配。采用了虛存之后,每個(gè)進(jìn)程都相當(dāng)于有同樣大小的虛存空間。當(dāng)進(jìn)程通信時(shí),可采用虛存共享的方式實(shí)現(xiàn)。當(dāng)不同的進(jìn)程使用同樣的代碼時(shí),比如庫文件中的代碼,物理內(nèi)存中可以只存儲(chǔ)一份這樣的代碼,不同的進(jìn)程只需要把自己的虛擬內(nèi)存映射過去就可以了,節(jié)省內(nèi)存虛擬內(nèi)存很適合在多道程序設(shè)計(jì)系統(tǒng)中使用,許多程序的片段同時(shí)保存在內(nèi)存中。當(dāng)一個(gè)程序等待它的一部分讀入內(nèi)存時(shí),可以把 CPU 交給另一個(gè)進(jìn)程使用。在內(nèi)存中可以保留多個(gè)進(jìn)程,系統(tǒng)并發(fā)度提高在程序需要分配連續(xù)的內(nèi)存空間的時(shí)候,只需要在虛擬內(nèi)存空間分配連續(xù)空間,而不需要實(shí)際物理內(nèi)存的連續(xù)空間,可以利用碎片虛擬內(nèi)存的代價(jià):

  虛存的管理需要建立很多數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)要占用額外的內(nèi)存虛擬地址到物理地址的轉(zhuǎn)換,增加了指令的執(zhí)行時(shí)間。頁面的換入換出需要磁盤 I/O,這是很耗時(shí)的如果一頁中只有一部分?jǐn)?shù)據(jù),會(huì)浪費(fèi)內(nèi)存。64位操作系統(tǒng)下,實(shí)現(xiàn)一個(gè)鏈接式的hash map,保存n組(key, value) 對(duì),假設(shè)key, value各占8字節(jié),問一共需要占多少字節(jié)

  64位操作系統(tǒng),指針8字節(jié),假設(shè)hash函數(shù)有m個(gè)值,則8*m + (8+8+8)*n = 8m + 24n 8m表示開始的m個(gè)指針大小,(8+8+8)分別表示指針、key和value

  延時(shí)隊(duì)列怎么實(shí)現(xiàn)

  詳細(xì) 什么是延時(shí)隊(duì)列?顧名思義:首先它要具有隊(duì)列的特性,再給它附加一個(gè)延遲消費(fèi)隊(duì)列消息的功能,也就是說可以指定隊(duì)列中的消息在哪個(gè)時(shí)間點(diǎn)被消費(fèi)。 對(duì)于C++來說,可以直接使用優(yōu)先隊(duì)列,如在隊(duì)列中存儲(chǔ)消息id以及過期時(shí)間,隊(duì)列自動(dòng)按照時(shí)間排序,每次從隊(duì)列中拿第一個(gè)消息進(jìn)行消費(fèi)。

  怎么解決緩存擊穿?怎么解決緩存雪崩?

  緩存穿透緩存穿透是指緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù),而用戶不斷發(fā)起請(qǐng)求,如發(fā)起為id為“-1”的數(shù)據(jù)或id為特別大且不存在的數(shù)據(jù)。這時(shí)的用戶很可能是攻擊者,攻擊會(huì)導(dǎo)致數(shù)據(jù)庫壓力過大。 解決方案:

  接口層增加校驗(yàn),如用戶鑒權(quán)校驗(yàn),id做基礎(chǔ)校驗(yàn),id<=0的直接攔截; 從緩存取不到的數(shù)據(jù),在數(shù)據(jù)庫中也沒有取到,這時(shí)也可以將key-value對(duì)寫為key-null,緩存有效時(shí)間可以設(shè)置短點(diǎn),如30秒(設(shè)置太長會(huì)導(dǎo)致正常情況也沒法使用)。這樣可以防止攻擊用戶反復(fù)用同一個(gè)id暴力攻擊緩存擊穿緩存擊穿是指緩存中沒有但數(shù)據(jù)庫中有的數(shù)據(jù)(一般是緩存時(shí)間到期),這時(shí)由于并發(fā)用戶特別多,同時(shí)讀緩存沒讀到數(shù)據(jù),又同時(shí)去數(shù)據(jù)庫去取數(shù)據(jù),引起數(shù)據(jù)庫壓力瞬間增大,造成過大壓力 解決方案: 設(shè)置熱點(diǎn)數(shù)據(jù)永遠(yuǎn)不過期 加互斥鎖降低從數(shù)據(jù)庫中讀取數(shù)據(jù)頻率

  緩存雪崩緩存雪崩是指緩存中數(shù)據(jù)大批量到過期時(shí)間,而查詢數(shù)據(jù)量巨大,引起數(shù)據(jù)庫壓力過大甚至down機(jī)。和緩存擊穿不同的是,緩存擊穿指并發(fā)查同一條數(shù)據(jù),緩存雪崩是不同數(shù)據(jù)都過期了,很多數(shù)據(jù)都查不到從而查數(shù)據(jù)庫 解決方案:

  緩存數(shù)據(jù)的過期時(shí)間設(shè)置隨機(jī),防止同一時(shí)間大量數(shù)據(jù)過期現(xiàn)象發(fā)生。如果緩存數(shù)據(jù)庫是分布式部署,將熱點(diǎn)數(shù)據(jù)均勻分布在不同搞得緩存數(shù)據(jù)庫中。設(shè)置熱點(diǎn)數(shù)據(jù)永遠(yuǎn)不過期。10M帶寬,下載速度大約有多少

  10 M 帶寬單位是bps,而我們常使用的是Byte,因此約為10/8=1.25M。上行/上傳速度會(huì)更慢,大約只有256K

  客戶端和服務(wù)端建立socket連接的過程,相關(guān)的方法

  服務(wù)端創(chuàng)建一個(gè)socket,用函數(shù)socket();設(shè)置socket屬性,用函數(shù)setsockopt(); * 可選綁定IP地址、端口等信息到socket上,用函數(shù)bind();開啟監(jiān)聽,用函數(shù)listen();接收客戶端上來的連接,用函數(shù)accept();收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();關(guān)閉網(wǎng)絡(luò)連接;關(guān)閉監(jiān)聽; closesocket客戶端創(chuàng)建一個(gè)socket,用函數(shù)socket();設(shè)置socket屬性,用函數(shù)setsockopt();* 可選綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選設(shè)置要連接的對(duì)方的IP地址和端口等屬性;連接服務(wù)器,用函數(shù)connect();收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();關(guān)閉網(wǎng)絡(luò)連接;路由器和交換機(jī)有什么區(qū)別,分別工作在哪一層

  交換機(jī),工作在 OSI 第二層(數(shù)據(jù)鏈路層),根據(jù) MAC 地址進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。 路由器,工作在 OSI 第三次(網(wǎng)絡(luò)層),根據(jù) IP 進(jìn)行尋址轉(zhuǎn)發(fā)數(shù)據(jù)包

  fork 與 vfork

  fork與vfork都是創(chuàng)建進(jìn)程,vfork創(chuàng)建的子進(jìn)程是與父進(jìn)程共享地址空間,而fork創(chuàng)建的子進(jìn)程是父進(jìn)程的副本,它們的區(qū)別如下

  fork:子進(jìn)程拷貝父進(jìn)程的數(shù)據(jù)段,代碼段vfork:子進(jìn)程與父進(jìn)程共享數(shù)據(jù)段fork:父子進(jìn)程的執(zhí)行次序不確定vfork 保證子進(jìn)程先運(yùn)行,在調(diào)用exec 或exit 之前與父進(jìn)程數(shù)據(jù)是共享的,在它調(diào)用exec或exit 之后父進(jìn)程才可能被調(diào)度運(yùn)行。如果在調(diào)用這兩個(gè)函數(shù)之前子進(jìn)程依賴于父進(jìn)程的進(jìn)一步動(dòng)作,則會(huì)導(dǎo)致死鎖。vfork為什么需要exit()而不用return

  如果你在vfork中return了,那么,這就意味main()函數(shù)return了,注意因?yàn)楹瘮?shù)棧父子進(jìn)程共享,所以整個(gè)程序的棧就跪了。

  客戶端怎么校驗(yàn)https的證書是否合法

  詳細(xì) 數(shù)字證書包含以下信息:申請(qǐng)者公鑰、申請(qǐng)者的組織信息和個(gè)人信息、簽發(fā)機(jī)構(gòu) CA 的信息、有效時(shí)間、證書序列號(hào)等信息的明文,同時(shí)包含一個(gè)簽名 客戶端在對(duì)服務(wù)器say hello之后,服務(wù)器將公開密鑰證書發(fā)送給客戶端,注意這個(gè)證書里面包含了公鑰+各種信息+簽名(私鑰對(duì)各種信息加密后生成簽名),客戶端收到公開密鑰證書后,相當(dāng)于收到了一個(gè)包裹里面有公鑰+各種信息+簽名,怎么樣使用這三個(gè)數(shù)據(jù)來校驗(yàn)?zāi)?,很簡單,公鑰加密,私鑰解,私鑰加密公鑰也可以解,只要利用公鑰對(duì)簽名進(jìn)行解密,然后最和各種信息做比較就可以校驗(yàn)出證書的合法性。

  兩個(gè)進(jìn)程某變量用gdb調(diào)試打印出的地址是否會(huì)一樣

  如果使用指針訪問一個(gè)區(qū)域,指針+1 、指針-1可能會(huì)訪問到什么?為什么

  一致性哈希

  詳細(xì)

  通過hash環(huán)來實(shí)現(xiàn)負(fù)載均衡,將不同的服務(wù)器hash映射到一致性hash環(huán)上,當(dāng)服務(wù)請(qǐng)求到來時(shí),使用hash將其映射到hash環(huán)上,然后可以采用如順時(shí)針尋找的方法選擇距其最近的服務(wù)器進(jìn)行服務(wù)。 當(dāng)服務(wù)器較少或hash公式不夠好時(shí),可能出現(xiàn)大多數(shù)請(qǐng)求都會(huì)落在同一個(gè)服務(wù)器上,這就是數(shù)據(jù)傾斜,可以采用添加服務(wù)器、虛擬節(jié)點(diǎn)、更換一致性hash的方法進(jìn)行解決。

  Tcp: 拔網(wǎng)線之后連接是否存在 為什么 (記得tcp的長連接是有一個(gè)類似心跳檢測的機(jī)制,忘了叫啥了,面試官問我心跳檢測是在傳輸層嗎還是應(yīng)用層 ,我說應(yīng)用層有心跳檢測,但tcp那層也有類似的,后來回來看了下tcp的?;睿?

  操作系統(tǒng)如何識(shí)別tcp連接

  C++鎖

  互斥鎖(Mutex) -- 互斥鎖用于控制多個(gè)線程對(duì)他們之間共享資源互斥訪問的一個(gè)信號(hào)量。 條件鎖 -- 條件鎖就是所謂的條件變量 自旋鎖 讀寫鎖

  vector、stack、queue這些容器是怎么實(shí)現(xiàn)的

  stack 底層一般用 deque 實(shí)現(xiàn),封閉頭部即可,不用 vector 的原因應(yīng)該是容量大小有限制,擴(kuò)容耗時(shí) queue 底層一般用 deque 實(shí)現(xiàn),封閉頭部的出口和前端的入口即可 priority_queue 的底層數(shù)據(jù)結(jié)構(gòu)一般為 vector 為底層容器,堆 heap 為處理規(guī)則來管理底層容器實(shí)現(xiàn)

  并發(fā)編程三要素

  原子性:即一個(gè)操作或者多個(gè)操作 要么全部執(zhí)行并且執(zhí)行的過程不會(huì)被任何因素打斷,要么就都不執(zhí)行 可見性:指當(dāng)多個(gè)線程訪問同一個(gè)變量時(shí),一個(gè)線程修改了這個(gè)變量的值,其他線程能夠立即看得到修改的值。 有序性:即程序執(zhí)行的順序按照代碼的先后順序執(zhí)行,首先什么是指令重排序,一般來說,處理器為了提高程序運(yùn)行效率,可能會(huì)對(duì)輸入代碼進(jìn)行優(yōu)化,它不保證程序中各個(gè)語句的執(zhí)行先后順序同代碼中的順序一致,但是它會(huì)保證程序最終執(zhí)行結(jié)果和代碼順序執(zhí)行的結(jié)果是一致的。處理器在進(jìn)行重排序時(shí)也是會(huì)考慮指令之間的數(shù)據(jù)依賴性。指令重排序不會(huì)影響單個(gè)線程的執(zhí)行,但是會(huì)影響到線程并發(fā)執(zhí)行的正確性。

  短網(wǎng)址服務(wù) -- 將很長的網(wǎng)址連接設(shè)計(jì)成短網(wǎng)址

  使用分布式 ID 生成器使用mysql數(shù)據(jù)庫存儲(chǔ)id與網(wǎng)址的對(duì)應(yīng)關(guān)系使用302重定向如果用了 301,Google、百度等搜索引擎,搜索的時(shí)候會(huì)直接展示真實(shí)地址,那我們就無法統(tǒng)計(jì)到短地址被點(diǎn)擊的次數(shù)了,也無法收集用戶的 Cookie、User Agent 等信息,這些信息可以用來做很多有意思的大數(shù)據(jù)分析,也是短網(wǎng)址服務(wù)商的主要盈利來源 詳細(xì)

  零拷貝

  “零拷貝”:在整個(gè)發(fā)送數(shù)據(jù)過程中,數(shù)據(jù)的復(fù)制是必不可少的,這里數(shù)據(jù)復(fù)制分兩種類型,一種是CPU參與的一個(gè)字節(jié)一個(gè)字節(jié)處理的數(shù)據(jù)復(fù)制,一個(gè)是CPU不用參與,通過專有硬件DMA參與的,批量數(shù)據(jù)復(fù)制。自然,不用CPU參與的數(shù)據(jù)復(fù)制性能高。而“零拷貝”所說的拷貝,其實(shí)指的是,減少CPU參與的數(shù)據(jù)拷貝,最好減少到零次,但是各種實(shí)現(xiàn)方式里,很多種都只是減少一次兩次,并沒有直接讓CPU參與的數(shù)據(jù)復(fù)制數(shù)歸零

  通過mmap實(shí)現(xiàn)的零拷貝I/O

  發(fā)出mmap系統(tǒng)調(diào)用,導(dǎo)致用戶空間到內(nèi)核空間的上下文切換(第一次上下文切換)。通過DMA引擎將磁盤文件中的內(nèi)容拷貝到內(nèi)核空間緩沖區(qū)中(第一次拷貝: hard drive ——> kernel buffer)。 mmap系統(tǒng)調(diào)用返回,導(dǎo)致內(nèi)核空間到用戶空間的上下文切換(第二次上下文切換)。接著用戶空間和內(nèi)核空間共享這個(gè)緩沖區(qū),而不需要將數(shù)據(jù)從內(nèi)核空間拷貝到用戶空間。因?yàn)橛脩艨臻g和內(nèi)核空間共享了這個(gè)緩沖區(qū)數(shù)據(jù),所以用戶空間就可以像在操作自己緩沖區(qū)中數(shù)據(jù)一般操作這個(gè)由內(nèi)核空間共享的緩沖區(qū)數(shù)據(jù) 發(fā)出write系統(tǒng)調(diào)用,導(dǎo)致用戶空間到內(nèi)核空間的上下文切換(第三次上下文切換)。將數(shù)據(jù)從內(nèi)核空間緩沖區(qū)拷貝到內(nèi)核空間socket相關(guān)聯(lián)的緩沖區(qū)(第二次拷貝: kernel buffer ——> socket buffer)。 write系統(tǒng)調(diào)用返回,導(dǎo)致內(nèi)核空間到用戶空間的上下文切換(第四次上下文切換)。通過DMA引擎將內(nèi)核空間socket緩沖區(qū)中的數(shù)據(jù)傳遞到協(xié)議引擎(第三次拷貝: socket buffer ——> protocol engine 通過mmap實(shí)現(xiàn)的零拷貝I/O進(jìn)行了4次用戶空間與內(nèi)核空間的上下文切換,以及3次數(shù)據(jù)拷貝。其中3次數(shù)據(jù)拷貝中包括了2次DMA拷貝和1次CPU拷貝

  快照讀在讀提交和可重復(fù)讀(RR和RC)模式下的問題

  事務(wù)總能夠讀取到,自己寫入(update /insert /delete)的行記錄 RC下,快照讀總是能讀到最新的行數(shù)據(jù)快照,當(dāng)然,必須是已提交事務(wù)寫入的 RR下,某個(gè)事務(wù)首次read記錄的時(shí)間為T,未來不會(huì)讀取到T時(shí)間之后已提交事務(wù)寫入的記錄,以保證連續(xù)相同的read讀到相同的結(jié)果集 在RC級(jí)別下每次都是讀取最新的快照版本,在RR級(jí)別下是事務(wù)開啟時(shí)生成一個(gè)全局快照,后續(xù)的快照讀都讀取這個(gè)快照

  索引失效

  1.有or必全有索引; 2.復(fù)合索引未用左列字段; 3.like以%開頭; 4.需要類型轉(zhuǎn)換; 5.where中索引列有運(yùn)算; 6.where中索引列使用了函數(shù); 7.如果mysql覺得全表掃描更快時(shí)(數(shù)據(jù)少);

  內(nèi)存泄漏

  內(nèi)存泄漏是指由于疏忽或錯(cuò)誤造成了程序未能釋放掉不再使用的內(nèi)存的情況。內(nèi)存泄漏并非指內(nèi)存在物理上消失,而是應(yīng)用程序分配某段內(nèi)存后,由于設(shè)計(jì)錯(cuò)誤,失去了對(duì)該段內(nèi)存的控制。

  檢查、定位內(nèi)存泄漏:

  檢查方法: 在 main 函數(shù)最后面一行,加上一句_CrtDumpMemoryLeaks()。調(diào)試程序,自然關(guān)閉程序讓其退出,查看輸出: 被{}包圍的 數(shù)字x 就是我們需要的內(nèi)存泄漏定位值 定位代碼位置: 在 main 函數(shù)第一行加上_CrtSetBreakAlloc(x);意思就是在申請(qǐng) x這塊內(nèi)存的位置中斷。然后調(diào)試程序,程序中斷了,查看調(diào)用堆棧。加上頭文件#include

  算法題

  由于篇幅有限,后續(xù)再更新
小莊
分享到朋友圈
收藏
收藏
評(píng)分

綜合評(píng)分:

我的評(píng)分
Xinstall 15天會(huì)員特權(quán)
Xinstall是專業(yè)的數(shù)據(jù)分析服務(wù)商,幫企業(yè)追蹤渠道安裝來源、裂變拉新統(tǒng)計(jì)、廣告流量指導(dǎo)等,廣泛應(yīng)用于廣告效果統(tǒng)計(jì)、APP地推與CPS/CPA歸屬統(tǒng)計(jì)等方面。
20羽毛
立即兌換
一書一課30天會(huì)員體驗(yàn)卡
領(lǐng)30天VIP會(huì)員,110+門職場大課,250+本精讀好書免費(fèi)學(xué)!助你提升職場力!
20羽毛
立即兌換
順豐同城急送全國通用20元優(yōu)惠券
順豐同城急送是順豐推出的平均1小時(shí)送全城的即時(shí)快送服務(wù),專業(yè)安全,準(zhǔn)時(shí)送達(dá)!
30羽毛
立即兌換
小莊
小莊
發(fā)表文章10348
確認(rèn)要消耗 羽毛購買
字節(jié)跳動(dòng)用戶運(yùn)營面試(字節(jié)跳動(dòng)面試題匯總)嗎?
考慮一下
很遺憾,羽毛不足
我知道了

我們致力于提供一個(gè)高質(zhì)量內(nèi)容的交流平臺(tái)。為落實(shí)國家互聯(lián)網(wǎng)信息辦公室“依法管網(wǎng)、依法辦網(wǎng)、依法上網(wǎng)”的要求,為完善跟帖評(píng)論自律管理,為了保護(hù)用戶創(chuàng)造的內(nèi)容、維護(hù)開放、真實(shí)、專業(yè)的平臺(tái)氛圍,我們團(tuán)隊(duì)將依據(jù)本公約中的條款對(duì)注冊(cè)用戶和發(fā)布在本平臺(tái)的內(nèi)容進(jìn)行管理。平臺(tái)鼓勵(lì)用戶創(chuàng)作、發(fā)布優(yōu)質(zhì)內(nèi)容,同時(shí)也將采取必要措施管理違法、侵權(quán)或有其他不良影響的網(wǎng)絡(luò)信息。


一、根據(jù)《網(wǎng)絡(luò)信息內(nèi)容生態(tài)治理規(guī)定》《中華人民共和國未成年人保護(hù)法》等法律法規(guī),對(duì)以下違法、不良信息或存在危害的行為進(jìn)行處理。
1. 違反法律法規(guī)的信息,主要表現(xiàn)為:
    1)反對(duì)憲法所確定的基本原則;
    2)危害國家安全,泄露國家秘密,顛覆國家政權(quán),破壞國家統(tǒng)一,損害國家榮譽(yù)和利益;
    3)侮辱、濫用英烈形象,歪曲、丑化、褻瀆、否定英雄烈士事跡和精神,以侮辱、誹謗或者其他方式侵害英雄烈士的姓名、肖像、名譽(yù)、榮譽(yù);
    4)宣揚(yáng)恐怖主義、極端主義或者煽動(dòng)實(shí)施恐怖活動(dòng)、極端主義活動(dòng);
    5)煽動(dòng)民族仇恨、民族歧視,破壞民族團(tuán)結(jié);
    6)破壞國家宗教政策,宣揚(yáng)邪教和封建迷信;
    7)散布謠言,擾亂社會(huì)秩序,破壞社會(huì)穩(wěn)定;
    8)宣揚(yáng)淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪;
    9)煽動(dòng)非法集會(huì)、結(jié)社、游行、示威、聚眾擾亂社會(huì)秩序;
    10)侮辱或者誹謗他人,侵害他人名譽(yù)、隱私和其他合法權(quán)益;
    11)通過網(wǎng)絡(luò)以文字、圖片、音視頻等形式,對(duì)未成年人實(shí)施侮辱、誹謗、威脅或者惡意損害未成年人形象進(jìn)行網(wǎng)絡(luò)欺凌的;
    12)危害未成年人身心健康的;
    13)含有法律、行政法規(guī)禁止的其他內(nèi)容;


2. 不友善:不尊重用戶及其所貢獻(xiàn)內(nèi)容的信息或行為。主要表現(xiàn)為:
    1)輕蔑:貶低、輕視他人及其勞動(dòng)成果;
    2)誹謗:捏造、散布虛假事實(shí),損害他人名譽(yù);
    3)嘲諷:以比喻、夸張、侮辱性的手法對(duì)他人或其行為進(jìn)行揭露或描述,以此來激怒他人;
    4)挑釁:以不友好的方式激怒他人,意圖使對(duì)方對(duì)自己的言論作出回應(yīng),蓄意制造事端;
    5)羞辱:貶低他人的能力、行為、生理或身份特征,讓對(duì)方難堪;
    6)謾罵:以不文明的語言對(duì)他人進(jìn)行負(fù)面評(píng)價(jià);
    7)歧視:煽動(dòng)人群歧視、地域歧視等,針對(duì)他人的民族、種族、宗教、性取向、性別、年齡、地域、生理特征等身份或者歸類的攻擊;
    8)威脅:許諾以不良的后果來迫使他人服從自己的意志;


3. 發(fā)布垃圾廣告信息:以推廣曝光為目的,發(fā)布影響用戶體驗(yàn)、擾亂本網(wǎng)站秩序的內(nèi)容,或進(jìn)行相關(guān)行為。主要表現(xiàn)為:
    1)多次發(fā)布包含售賣產(chǎn)品、提供服務(wù)、宣傳推廣內(nèi)容的垃圾廣告。包括但不限于以下幾種形式:
    2)單個(gè)帳號(hào)多次發(fā)布包含垃圾廣告的內(nèi)容;
    3)多個(gè)廣告帳號(hào)互相配合發(fā)布、傳播包含垃圾廣告的內(nèi)容;
    4)多次發(fā)布包含欺騙性外鏈的內(nèi)容,如未注明的淘寶客鏈接、跳轉(zhuǎn)網(wǎng)站等,誘騙用戶點(diǎn)擊鏈接
    5)發(fā)布大量包含推廣鏈接、產(chǎn)品、品牌等內(nèi)容獲取搜索引擎中的不正當(dāng)曝光;
    6)購買或出售帳號(hào)之間虛假地互動(dòng),發(fā)布干擾網(wǎng)站秩序的推廣內(nèi)容及相關(guān)交易。
    7)發(fā)布包含欺騙性的惡意營銷內(nèi)容,如通過偽造經(jīng)歷、冒充他人等方式進(jìn)行惡意營銷;
    8)使用特殊符號(hào)、圖片等方式規(guī)避垃圾廣告內(nèi)容審核的廣告內(nèi)容。


4. 色情低俗信息,主要表現(xiàn)為:
    1)包含自己或他人性經(jīng)驗(yàn)的細(xì)節(jié)描述或露骨的感受描述;
    2)涉及色情段子、兩性笑話的低俗內(nèi)容;
    3)配圖、頭圖中包含庸俗或挑逗性圖片的內(nèi)容;
    4)帶有性暗示、性挑逗等易使人產(chǎn)生性聯(lián)想;
    5)展現(xiàn)血腥、驚悚、殘忍等致人身心不適;
    6)炒作緋聞、丑聞、劣跡等;
    7)宣揚(yáng)低俗、庸俗、媚俗內(nèi)容。


5. 不實(shí)信息,主要表現(xiàn)為:
    1)可能存在事實(shí)性錯(cuò)誤或者造謠等內(nèi)容;
    2)存在事實(shí)夸大、偽造虛假經(jīng)歷等誤導(dǎo)他人的內(nèi)容;
    3)偽造身份、冒充他人,通過頭像、用戶名等個(gè)人信息暗示自己具有特定身份,或與特定機(jī)構(gòu)或個(gè)人存在關(guān)聯(lián)。


6. 傳播封建迷信,主要表現(xiàn)為:
    1)找人算命、測字、占卜、解夢(mèng)、化解厄運(yùn)、使用迷信方式治病;
    2)求推薦算命看相大師;
    3)針對(duì)具體風(fēng)水等問題進(jìn)行求助或咨詢;
    4)問自己或他人的八字、六爻、星盤、手相、面相、五行缺失,包括通過占卜方法問婚姻、前程、運(yùn)勢,東西寵物丟了能不能找回、取名改名等;


7. 文章標(biāo)題黨,主要表現(xiàn)為:
    1)以各種夸張、獵奇、不合常理的表現(xiàn)手法等行為來誘導(dǎo)用戶;
    2)內(nèi)容與標(biāo)題之間存在嚴(yán)重不實(shí)或者原意扭曲;
    3)使用夸張標(biāo)題,內(nèi)容與標(biāo)題嚴(yán)重不符的。


8.「飯圈」亂象行為,主要表現(xiàn)為:
    1)誘導(dǎo)未成年人應(yīng)援集資、高額消費(fèi)、投票打榜
    2)粉絲互撕謾罵、拉踩引戰(zhàn)、造謠攻擊、人肉搜索、侵犯隱私
    3)鼓動(dòng)「飯圈」粉絲攀比炫富、奢靡享樂等行為
    4)以號(hào)召粉絲、雇用網(wǎng)絡(luò)水軍、「養(yǎng)號(hào)」形式刷量控評(píng)等行為
    5)通過「蹭熱點(diǎn)」、制造話題等形式干擾輿論,影響傳播秩序


9. 其他危害行為或內(nèi)容,主要表現(xiàn)為:
    1)可能引發(fā)未成年人模仿不安全行為和違反社會(huì)公德行為、誘導(dǎo)未成年人不良嗜好影響未成年人身心健康的;
    2)不當(dāng)評(píng)述自然災(zāi)害、重大事故等災(zāi)難的;
    3)美化、粉飾侵略戰(zhàn)爭行為的;
    4)法律、行政法規(guī)禁止,或可能對(duì)網(wǎng)絡(luò)生態(tài)造成不良影響的其他內(nèi)容。


二、違規(guī)處罰
本網(wǎng)站通過主動(dòng)發(fā)現(xiàn)和接受用戶舉報(bào)兩種方式收集違規(guī)行為信息。所有有意的降低內(nèi)容質(zhì)量、傷害平臺(tái)氛圍及欺凌未成年人或危害未成年人身心健康的行為都是不能容忍的。
當(dāng)一個(gè)用戶發(fā)布違規(guī)內(nèi)容時(shí),本網(wǎng)站將依據(jù)相關(guān)用戶違規(guī)情節(jié)嚴(yán)重程度,對(duì)帳號(hào)進(jìn)行禁言 1 天、7 天、15 天直至永久禁言或封停賬號(hào)的處罰。當(dāng)涉及欺凌未成年人、危害未成年人身心健康、通過作弊手段注冊(cè)、使用帳號(hào),或者濫用多個(gè)帳號(hào)發(fā)布違規(guī)內(nèi)容時(shí),本網(wǎng)站將加重處罰。


三、申訴
隨著平臺(tái)管理經(jīng)驗(yàn)的不斷豐富,本網(wǎng)站出于維護(hù)本網(wǎng)站氛圍和秩序的目的,將不斷完善本公約。
如果本網(wǎng)站用戶對(duì)本網(wǎng)站基于本公約規(guī)定做出的處理有異議,可以通過「建議反饋」功能向本網(wǎng)站進(jìn)行反饋。
(規(guī)則的最終解釋權(quán)歸屬本網(wǎng)站所有)

我知道了
恭喜你~答對(duì)了
+5羽毛
下一次認(rèn)真讀哦
成功推薦給其他人
+ 10羽毛
評(píng)論成功且進(jìn)入審核!審核通過后,您將獲得10羽毛的獎(jiǎng)勵(lì)。分享本文章給好友閱讀最高再得15羽毛~
(羽毛可至 "羽毛精選" 兌換禮品)
好友微信掃一掃
復(fù)制鏈接