Shopee 是東南亞發展最快的電商平臺,2015年于新加坡成立并設立總部,社群媒體粉絲數量超3000萬,擁有700萬活躍賣家,員工超8000人遍布東南亞及中國. Shopee 在中國的總部位于廣東深圳.
此份面試題來自Shopee面試者的綜合整理,對于C++面試參考價值較大,涵蓋了眾多知識點,包括C++的語言特性、計網、作業系統、計算機組成、資料結構與演算法、資料庫等計算機基礎. 啃下來雖然得花費不少功夫,但深入理解了這份題目,往后的面試就吃香了. 題目來源 https://leetcode-cn.com/circle/discuss/3UrXap/ 本文給出了每道問題的解決方向,解答不一定十全十美,留待讀者自己做二次挖掘,這里權當拋磚引玉. 文末給出了本文的參考材料和推薦閱讀資料. 若您發現本文有何處錯誤,還請批評指正!
C++
-
C++ 的三大特性
- 封裝
- 繼承
- 多型
-
什么是多型
- 同一操作作用于不同的物件,可以產生不同的效果,
-
虛函式的實作原理
- C++ 通過虛函式表和虛函式表指標來實作虛函式機制
-
所有函式都可以是虛函式嗎
- 不是. static函式就不可以是虛函式,因為static定義的函式不屬于任何類實體,與虛函式表無關.
-
建構式可以是虛函式嗎
- 不可以
-
解構式可以是虛函式嗎
- 可以,而且在有虛函式的基類里面,強烈建議將解構式定義為虛函式
-
虛函式表的存放內容
- 函式指標,每項指向一個函式的入口地址,根據呼叫者型別別確定
-
C++11 的新特性
- 語法糖
- 右值參考和移動語意
- 智能指標
- 多執行緒編程
-
強制型別轉換的型別和使用場景
- 將一個超類強制轉換(cast)成子型別別
-
堆和堆疊的區別
- 堆疊由作業系統管理,存放區域變數、引數值等
- 堆由開發人員分配釋放,可分配大量的記憶體空間
(可從管理方式、空間大小、生長方向、分配方式、分配效率、存放內容來說)
-
什么是智能指標,有哪幾種,實作原理,以及使用場景
- 在現代 c + + 編程中,標準庫包含 智能指標,這些指標用于幫助確保程式不會出現記憶體和資源泄漏,并具有例外安全,
- unique_ptr:擁有獨有物件所有權語意的智能指標
- shared_ptr:擁有共享物件所有權語意的智能指標
- weak_ptr:到 std::shared_ptr 所管理物件的弱參考
-
如何避免回圈參考
- 使用弱參考的智能指標打破回圈參考
-
位元組對齊
- 計算機系統里面的概念,針對的是結構體. 位元組對齊,一般也叫記憶體對齊,指的是資料起始的地址是其資料型別大小的整數倍.
-
new 和 malloc,delete 和 free 的區別
- malloc/free是C/C++語言的標準庫函式,new/delete是C++的運算子;物件在創建的同時要自動執行建構式,物件在消亡之前要自動執行解構式,由于malloc/free是庫函式而不是運算子,不在編譯器控制權限之內,不能夠把執行建構式和解構式的任務強加于malloc/free,因此C++需要一個能完成動態記憶體分配和初始化作業的運算子new,以及一個能完成清理與釋放記憶體作業的運算子delete,
-
靜態函式和類中靜態成員函式的區別
- 靜態函式:只能在本模塊使用
- 靜態成員函式:屬于類級別的函式
-
靜態系結和動態系結的區別
- 靜態系結:系結的是物件的靜態型別,某特性(比如函式)依賴于物件的靜態型別,發生在編譯期
- 動態系結:系結的是物件的動態型別,某特性(比如函式)依賴于物件的動態型別,發生在運行期
-
C++ 記憶體管理
- C++記憶體分為5個區,分別是堆、堆疊、自由存盤區、全域/靜態存盤區和常量存盤區.
- C++的記憶體管理必然涉及到指標,在C++中,區域變數、函式呼叫資訊存放在堆疊上;new運算子,malloc函式 (C++保留了malloc)在堆上分配空間.
-
深拷貝淺拷貝
- 見于拷貝建構式中,當拷貝一個類實體物件時,淺拷貝只是對資料成員進行簡單的復制賦值操作,當有指標分配堆記憶體時,淺拷貝并不能解決這種復制問題,而使用深拷貝,不僅對類的資料成員進行復制賦值,還對類分配在堆上的資料進行了復制賦值.
-
右值參考
- 右值指的是參考了一個存盤在某個記憶體地址里的資料.
- 所謂右值參考就是必須系結到右值的參考,通過&&而不是&來獲得右值參考
-
static 的作用
- static 修飾普通資料或函式:只能在本模塊使用
- static 修飾類成員變數或類成員函式:static所指示的資料或函式是屬于類而不屬于某個物件
-
const 的作用
- 修飾常量,表示內容不可以被修改
- 函式后修飾,表明該函式不會修改資料成員
- 指標常量、常量指標和指向常量的常量指標
-
inline 和 define 的區別
- inline: 行內函式的原理是,在編譯期間,對呼叫行內函式的地方的代碼替換成函式代碼,行內函式對于程式中需要頻繁使用和呼叫的小函式非常有用,
- define:定義宏常量,編譯的時候簡單替換到代碼中
計算機網路
-
OSI七層模型
- 應用層
- 表示層
- 會話層
- 傳輸層
- 網路層
- 資料鏈路層
- 物理層
-
TCP 的三次握手四次揮手
- 老生常談了,不多講了好不好~
-
time_wait 的作用
- A 收到 B 發送的 FIN+ACK 后,會向 B 發送 ACK,進入到 TIME_WAIT 階段,等待 2MSL(MSL:Max Segment Lifetime,最長報文段壽命,報文段在網路中能夠存活的最長時間)
- 可靠地實作TCP全雙工連接的終止
- 允許舊的報文段在網路中消逝
-
UDP 和 TCP 區別
- TCP 面向連接,UDP 無連接
- TCP 可靠傳輸,UDP盡最大努力交付
- TCP 傳輸效率相對于UDP低
- TCP 面向一對一傳輸,UDP既可以是一對一,也可以是多對一、多對多
-
TCP 怎么保證可靠傳輸
- 校驗和
- 連接管理
- 超時重傳
- 流量控制
- 擁塞控制:慢開始、擁塞避免、快重傳、快恢復
-
UDP 怎么實作可靠傳輸
- 由于在傳輸層UDP已經是不可靠的連接,那就要在應用層自己實作一些保障可靠傳輸的機制
- 簡單來講,要使用UDP來構建可靠的面向連接的資料傳輸,就要實作類似于TCP協議的 超時重傳、有序接收、確認應答、滑動視窗流量控制等
- 目前已經有一些實作UDP可靠傳輸的機制,比如UDT (基于UDP的資料傳輸協議),UDT的主要目的是支持高速廣域網上的海量資料傳輸.
-
TCP 怎么處理丟包的問題
- 資料分片:發送端對資料進行分片,接受端要對資料進行重組,由TCP確定分片的大小并控制分片和重組
- 到達確認:接收端接收到分片資料時,根據分片資料序號向發送端發送一個確認
- 超時重發:發送方在發送分片時設定超時定時器,如果在定時器超時之后沒有收到相應的確認,重發分片資料
- 滑動視窗:TCP連接的每一方的接受緩沖空間大小固定,接收端只允許另一端發送接收端緩沖區所能接納的資料,TCP在滑動視窗的基礎上提供流量控制,防止較快主機致使較慢主機的緩沖區溢位
- 失序處理:作為IP資料報來傳輸的TCP分片到達時可能會失序,TCP將對收到的資料進行重新排序,將收到的資料以正確的順序交給應用層
- 重復處理:作為IP資料報來傳輸的TCP分片會發生重復,TCP的接收端必須丟棄重復的資料
- 資料校驗:TCP將保持它首部和資料的檢驗和,這是一個端到端的檢驗和,目的是檢測資料在傳輸程序中的任何變化,如果收到分片的檢驗或有差錯,TCP將丟棄這個分片,并不確認收到此報文段導致對端超時并重發
-
TCP 如何控制發送資料的大小
- 資料傳輸的大小通過流量控制實作. 流量控制讓發送方不要發送太快,既讓接收方能夠順利接收資料,而且也不會造成網路鏈路的阻塞. 通用的流量控制方法是滑動視窗
-
http 和 https 的區別
https在https的基礎上加入了安全機制 (在應用層和傳輸層之間加入了一層 TLS) -
http 狀態碼
- 常見狀態碼:
1xx:請求已被接收,需要繼續處理,是一個臨時狀態碼
2xx:請求成功
3xx:重定向
4xx:客戶端錯誤
5xx:服務器內部錯誤
- 常見狀態碼:
-
get 和 post 的區別
- get和post都可以向服務器請求資源,不同的是如果請求資源攜帶有引數,get是直接放在url后面,post是放在http物體體里面傳輸.
-
對稱加密、非對稱加密
- 對稱加密就是通信雙方約定一個共同的密鑰,每次通信都對通信內容用這密鑰進行處理 (加密和解密);非對稱加密就是通信雙方有各自的公鑰和私鑰,通信時,使用公鑰進行加密,使用私鑰解密.
-
如何解決粘包問題
- 資料包頭加上資料包長度
- 每個資料包封裝成固定長度
- 使用特定的分隔符號
-
輸入 url 到網頁顯示的程序
- DNS地址決議
- TCP三次握手
- HTTP請求
- HTTP應答
- 瀏覽器渲染
- TCP四次揮手
-
ip 和 mac 地址的區別?他們各自有什么用
- IP地址劃分時基于地理區域,換了不同地方,即便是同一臺硬體設備,IP地址一定不一樣,可以理解為和地理位置有關;而MAC地址不依賴于地理區域,換了不同地方,只要還是同一臺硬體設備,MAC地址就不會變,它只和硬體設備有關,IP地址標識一臺計算機接入網路的標識,mac地址唯一標識一個硬體.
-
資料在資料鏈路層怎么傳輸?交換機的作用是什么
- 在資料鏈路層,資料是以幀的形式傳輸的,幀由幀首部、資料部分、幀尾部這三個部分組成,
- 交換機作用:
- 建立MAC地址表,交換機能夠在MAC地址和埠之間建立映射
- 轉發資料幀
- 消除冗余回路
- 連接不同的網路,交換機能夠連接不同型別的網路
- 劃分局域網,交換機可以局域網分為多個沖突域,每個沖突域都有獨立的網路帶寬,因此提高了局域網的網路帶寬,
-
擁塞控制和流量控制的區別
- 流量控制是端到端的控制,例如A通過網路給B發資料,A發送的太快導致B沒法接收(B緩沖視窗過小或者處理過慢),這時候的控制就是流量控制,原理是通過滑動視窗的大小改變來實作
- 擁塞控制是A與B之間的網路發生堵塞導致傳輸過慢或者丟包,來不及傳輸,防止過多的資料注入到網路中,這樣可以使網路中的路由器或鏈路不至于過載,擁塞控制是一個全域性的程序,涉及到所有的主機、路由器,以及與降低網路性能有關的所有因素
-
什么是 MTU
- MTU:Maximum Transfer Unit (最大傳輸單元),即該鏈路層所能允許通過最大資料大小
資料結構
-
散串列,使用場景,使用的好處,時間復雜度的影響等
- 在快速查找資料具有巨大優勢,通常在 O(1) 的時間內定位到資料
- 需要解決沖突問題,一般的解決方式有:
-
B樹和B+樹區別

-
vector 和 list 的區別
- vector底層為動態陣列,適用于隨機訪問,不適用于頻繁插刪,當規模達到一定程度之后會自動擴容
- list底層為雙向鏈表,適用于頻繁插刪,不支持隨機訪問
-
vector 的擴容原理
- 當達到一定的資料規模后,vector需要將容量擴為原來的若干倍 (一般為1.5~2倍),在新的記憶體段開辟這樣一塊空間,并將原資料拷貝過去,之后銷毀原空間,這個程序實際上是非常消耗資源的.
-
陣列和鏈表的區別
- 陣列連續存放資料,鏈表不連續存放資料,通過指標索引連接資料
- 陣列適于隨機訪問,定義大小之后一般不再改變
- 鏈表適于插入和洗掉,鏈表增刪靈活,產生記憶體碎片少,但訪問時間還是線性
-
二叉搜索樹,平衡二叉樹,紅黑樹的區別
- 二叉搜索樹:一般定義,父節點比左子結點大,比右子節點小,有可能導致退化到線性情況
- 平衡二叉樹:也叫AVL樹,左子樹和右子樹高度之差不超過 1,但頻繁的旋轉操作會耗費很多時間
- 紅黑樹:RB樹,放寬了左子樹和右子樹高度差的限制,只要高度差不超過樹的一半高度就可以接受,減少了旋轉的時間花費
-
set 和 unordered_set 的底層實作和區別
- set 底層實作是紅黑樹,在 O(n·lgn) 的時間內完成增刪改查,自動排序,在任何時候元素排列都是有序的
- unorder_set底層實作是hash表,在 O(1) 的時間內完成查找、插入,需要消耗額外的 hash 空間,元素排列無序
-
map 是執行緒安全的嗎
- 不安全
-
跳表的結構,查詢
- 跳表是在鏈表的基礎上通過建立多層索引來優化增刪改查效率的資料結構. 一般來講,增刪改查的時間復雜度均為 O(n·lgn),空間復雜度為 O(n).
-
臟讀、不可重復讀、幻影讀
- 臟讀:A處理程序中產生了一個中間數值,恰巧被B讀走了,A就讀到了不正當的資料
- 不可重復讀:A 讀了某資料,恰巧 B 在之后某時刻修改了該資料,之后 A 再讀此資料的時候無法校驗. 強調修改、更新導致的不一致
- 幻讀:A 第一次讀取了資料 (記為快照 A),而此時 B 向資料中插入了新的條目,導致 A 第二次讀取資料時發現和上一次讀取的資料不一樣,就跟產生了“幻覺”似的. 這里強調插入導致的不一致.
-
迭代器失效問題
- 迭代器失效的問題主要發生在順序容器中,例如 vector 在push,erase操作之后,原有迭代器都會失效;list也是如此
- 關聯容器如map、set不存在這類問題,因為迭代器并不指向資料本身,而是指向包含資料的節點,插入和洗掉表現為指標的變動,并不影響迭代器的有效性,迭代器該指向哪還是指向哪.
資料庫
-
索引的實作,有哪幾種索引
- 實作:B+樹 散列索引 位圖索引
- 索引型別:唯一索引 主鍵索引 聚集索引
-
聚簇索引、非聚簇索引、覆寫索引
- 聚簇索引:也叫聚集索引,它實際上并不是一種單獨的索引型別,而是一種資料存盤方式,聚簇索引的葉子節點保存了一行記錄的所有列資訊,也就是說,聚簇索引的葉子節點中,包含了一個完整的記錄行
- 非聚簇索引:也叫輔助索引、普通索引,它的葉子節點只包含一個主鍵值,通過非聚簇索引查找記錄要先找到主鍵,然后通過主鍵再到聚簇索引中找到對應的記錄行,這個程序被稱為回表
- 覆寫索引:引查詢中,如果輔助索引已經能夠得到查詢的所有資訊了,就無需再回表,這個就是覆寫索引
-
什么是事務,事務的特性,事務的隔離級別
- 事務(Transaction)是用戶定義的一個資料庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的作業單位,
- 隔離級別:未提交讀、提交讀、可重復讀、可串行化
-
Innodb 和 MyISAM 的區別
- 底層都是采用的是 B+ 樹實作,MyISAM主鍵索引是非聚簇索引,InnoDB主鍵索引是聚簇索引;MyISAM索引檔案和資料檔案是分離的,InnoDB的資料檔案按主鍵聚集
- MyISAM不支持外鍵,InnoDB支持,這是非關系型和關系型資料庫的最大區別
- MyISAM不支持事務,InnoDB支持
- MyISAM不支持行鎖,InnoDB支持,InnoDB也會退化為表鎖
- MyISAM可以沒有主鍵,InnoDB必須有
-
mysql 的主從復制具體實作
- 主庫執行緒:主服務器將資料的更新記錄到二進制日志中
- 從庫 I/O 執行緒:從庫將主庫的二進制日志復制到本地的中繼日志
- 從庫 SQL 執行緒:從庫讀取中繼日志中的事件,將其重放到資料中
-
mysql 的存盤引擎
- InnoDB,是事務型資料庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,是MySQL默認的引擎
- MyISAM,擁有較高的插入、查詢速度,但不支持事務
-
redis 的五種基本資料結構
- string
- hash table
- linked list
- set
- sorted set
-
redis 的主從復制具體實作

-
redis 和 mysql 的一致性保證
- 先更新資料庫,再更新快取
- 先更新快取,再更新資料庫
- 先洗掉快取,再更新資料庫
- 先更新資料庫,再洗掉快取
-
ACID
- 原子性:事務要么全部完成,要么全部不完成
- 一致性:事務開始前后,資料庫完整性不變
- 隔離性:允許多個并發事務同時對其資料進行讀寫和修改的能力
- 持久性:事務提交之后,對資料庫的修改就是永久的
-
可重復讀和提交讀的區別,如何實作
- 可重復讀:在同一個事務內的查詢都是事務開始時刻一致的,基于MVCC (多版本并發控制) 實作
- 提交讀:只能讀取到已經提交的資料,資料的讀取都是不加鎖的,但是資料的寫入、修改和洗掉是需要加鎖的
-
原子性怎么實作
- 通過事務實作,一個事務,要么成功執行,要么執行失敗,回滾到原來的狀態.
作業系統
-
行程和執行緒的區別
- 行程是運行中的程式實體,而執行緒是行程中的一個執行任務. 執行緒是行程劃分成的更小的運行單位,一個行程在其執行的程序中可以產生多個執行緒,執行緒和行程最大的不同在于基本上各行程是獨立的,而各執行緒則不一定,執行緒執行開銷小,但不利于資源的管理和保護;而行程相反,
-
什么是協程
- 本質上是可以被暫停以及可以被恢復運行的函式
-
行程間的通訊方式
- 管道 / 匿名管道
- 有名管道
- 信號
- 訊息佇列
- 信號量
- 共享記憶體
- 套接字
-
行程之間的狀態轉換

-
行程切換的背景關系細節
- 一個行程切換到另外一個行程,需要保存原行程的背景關系細節. 這些細節包括暫存器背景關系、用戶級背景關系、系統級背景關系.
-
如何保證執行緒安全
- 互斥同步 (阻塞同步)
- 非阻塞同步 (如CAS)
- 無需同步方案的實作
-
執行緒同步的方式
- 互斥量
- 信號量
- 事件
-
IO 多路復用的好處
- IO多路復用是指內核一旦發現行程指定的一個或者多個IO條件準備讀取,它就通知該行程,I/O多路復用技術的最大優勢是系統開銷小,系統不必創建行程/執行緒,也不必維護這些行程/執行緒,從而大大減小了系統的開銷.
-
select、poll、epoll 的區別
- select,poll,epoll都是IO多路復用的機制
- select回傳的是含有整個句柄的陣列,應用程式需要遍歷整個陣列才能發現哪些句柄發生了事件
- poll使用鏈表保存檔案描述符,因此沒有了監視檔案數量的限制
- epoll通過在linux內核中申請一個簡易的檔案系統實作對高并發IO的支持

-
epoll 為什么用紅黑樹不用哈希表
- epoll早期用過hashmap(效率高)但是因為占用空間大所以改成了紅黑樹
-
記憶體管理
- 這是一個很大的話題,參照附錄學習吧 ~
-
行程調度演算法
- 先來先服務
- 時間片輪轉
- 短作業優先
- 最短剩余時間優先
- 高回應比優先
- 優先級調度
- 多級反饋佇列調度
-
頁面置換演算法
- FIFO (先進先出演算法)
- OPT (最佳置換演算法)
- LRU (最近最少使用演算法)
-
什么是高級快取,為什么有高級快取
- 高速快取就是為了彌補記憶體速度和CPU速度不匹配而加入的一級存盤層次,靠近CPU,通常由片上的 L1 和 L2 快取和片外 L3 快取組成. 快取的引入使得記憶體的資料可以快取在cache中,同時由于cache采用SRAM,讀寫速度加快,縮小了CPU和記憶體之間的速度鴻溝.
-
多核 CPU 怎么保證一致性、順序性
- 每個處理器必須按照程式指定的順序處理記憶體請求
- 一個獨立的記憶體模塊在服務所有處理器的請求時,必須基于FIFO佇列,發起記憶體請求,即是將請求加入到FIFO佇列
-
什么是 CPU 指令重排
- cpu為了提高效率會對指令進行重排序,以適合cpu的順序運行,但是指令重排會遵守As-if-serial的規則,就是所有的動作(Action)都可以為了優化而被重排序,但是必須保證它們重排序后的結果和程式代碼本身的應有結果是一致的,(Java 中volatile關鍵字就規避了cpu指令重排在多執行緒下的問題.)
-
虛擬記憶體的原理
- 虛擬記憶體 使得應用程式認為它擁有連續的可用的記憶體(一個連續完整的地址空間),而實際上,它通常是被分隔成多個物理記憶體碎片,還有部分暫時存盤在外部磁盤存盤器上,在需要時進行資料交換,
-
死鎖的必要條件,如何避免
- 必要條件
- 一個資源只能被一個行程所占有,不能共享
- 一個執行緒在釋放資源之前其他行程不能搶奪資源
- 一個執行緒請求資源失敗時,它會等待而不是釋放
- 回圈等待
- 避免
- 把資源進行編號,申請資源必須按照資源的編號順序來申請
- 允許搶占,需要設定行程的不同優先級,高優先級的行程可以搶占低優先級的行程的資源
- 靜態分配資源,一開始就把一個行程所需的全部資源都分配給它,但這樣會降低資源的使用效率
- 必要條件
-
孤兒行程和僵尸行程,產生的原因,什么樣的代碼會產生僵尸行程
- 孤兒行程:當父行程退出時,它的子行程們(一個或者多個)就成了孤兒行程了
- 僵尸行程:子行程先退出,而父行程又沒有去處理回收釋放子行程的資源,這個時候子行程就成了僵尸行程
-
系統呼叫和函式呼叫的區別
- 系統呼叫會陷入內核態,執行一些權限比較高的操作;函式呼叫只是呼叫堆疊中的函式,處在用戶態.
-
哪些操作會導致用戶態切換到內核態
- 系統呼叫
- 中斷
- 例外
-
互斥鎖和自旋鎖
- 互斥鎖:用于保護臨界區,確保同一時間只有一個執行緒訪問資料,對共享資源的訪問,先對互斥量進行加鎖,如果互斥量已經上鎖,呼叫執行緒會阻塞,直到互斥量被解鎖,在完成了對共享資源的訪問后,要對互斥量進行解鎖
- 自旋鎖:是一種互斥鎖的實作方式,相比一般的互斥鎖會在等待期間放棄cpu,自旋鎖(spinlock)則是不斷回圈并測驗鎖的狀態,這樣就一直占著cpu
- 自旋鎖與互斥鎖的區別:執行緒在申請自旋鎖的時候,執行緒不會被掛起,而是處于忙等的狀態
-
靜態鏈接和動態鏈接的區別
- 靜態鏈接:在編譯時就已經完成模塊鏈接
- 動態鏈接:運行時再和相應模塊進行鏈接
參考與推薦閱讀材料
- C++虛函式的實作基本原理 (https://jacktang816.github.io/post/virtualfunction/)
- C++ 一篇搞懂多型的實作原理 (https://zhuanlan.zhihu.com/p/104605966)
- C++11新特性梳理 (https://www.jianshu.com/p/78c700c8d72d)
- 面試問題詳解——TCP (https://leetcode-cn.com/circle/discuss/aqTOW4/)
- 面試問題詳解——網址訪問程序詳解 (https://leetcode-cn.com/circle/discuss/UrcaDQ/)
- 面試問題整理——作業系統 (https://leetcode-cn.com/circle/discuss/zIxrWn/)
- 大白話說協程 (https://mp.weixin.qq.com/s/BKm60as1vz3bfvzJjU7uTw)
- 我和面試官之間關于作業系統的一場對弈!(https://my.oschina.net/u/3827987/blog/3217890)
- 聊聊IO多路復用之select、poll、epoll詳解 (https://www.jianshu.com/p/dfd940e7fca2)
- 面試官問你B樹和B+樹,就把這篇文章丟給他 (https://segmentfault.com/a/1190000020416577)
- 搞定技術面試:C++ 11 智能指標詳解 (https://juejin.cn/post/6844903993055920141#heading-17)
- STL詳解及常見面試題 (https://blog.csdn.net/daaikuaichuan/article/details/80717222)
- C/C++記憶體管理詳解 (https://chenqx.github.io/2014/09/25/Cpp-Memory-Management/)
- 如何評價 C++11 的右值參考(Rvalue reference)特性? (https://www.zhihu.com/question/22111546/answer/30801982)
- 如何保證執行緒安全 (https://blog.csdn.net/qq_26545305/article/details/79516610)
- TCP傳輸協議中如何解決丟包問題 (https://network.51cto.com/art/201908/601322.htm)
- epoll相關基礎知識 (https://xiaoyue26.github.io/2017/11/06/2017-11/epoll%E7%9B%B8%E5%85%B3%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/#select%E6%A8%A1%E5%BC%8F)
- java記憶體屏障的原理與應用 (https://blog.csdn.net/breakout_alex/article/details/94379895)
- 如何設計多核計算機以正確執行多行程程式 (https://juejin.cn/post/6844903893617360910)
- 作業系統記憶體管理(思維導圖詳解) (https://blog.csdn.net/hguisu/article/details/5713164)
- 八大排序演算法 (https://guisu.blog.csdn.net/article/details/7776068)
- 資料庫索引型別及實作方式 (https://blog.csdn.net/sdgihshdv/article/details/75039825)
- MySQL中的聚簇索引、非聚簇索引、聯合索引和唯一索引 (https://www.dyxmq.cn/databases/mysql/clustered-nonclustered-union-and-unique-indexes-in-mysql.html)
- Innodb中的事務隔離級別和鎖的關系 (https://tech.meituan.com/2014/08/20/innodb-lock.html)
- MyISAM和InnoDB的區別 (https://blog.csdn.net/daiyudong2020/article/details/104468714)
- 資料結構與演算法——跳表 (https://zhuanlan.zhihu.com/p/68516038)
- Redis與資料庫一致性 (https://note.dolyw.com/cache/00-DataBaseConsistency.html#%E6%9B%B4%E6%96%B0%E7%BC%93%E5%AD%98-vs-%E5%88%A0%E9%99%A4%E7%BC%93%E5%AD%98)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262914.html
標籤:其他
上一篇:2017/Province_Java_A/2、9數算式
下一篇:三十而立,人生新起點

