2021-07-20 诺瓦星云笔试复盘
文章目錄
- 1.使用https時,如何對性能進行優化
- TCP Fast Open
- HSTS(HTTP Strict Transport Security)
- Session Resume
- 2.TCP協議自上向下分為哪幾層,每一層列舉至少一個通信協議
- 3.ssh加密是什么
- 4.epoll和select的區別
- 5.什么是緩沖區溢出,有什么危害
- 6.簡單描述段頁式存儲管理機制
- 7.互斥鎖(mutex)機制,以及互斥鎖與讀寫鎖的區別
- ***互斥鎖***
- ***讀寫鎖***
- 互斥鎖和讀寫鎖的區別:
- Linux的4種鎖機制:
- 8.CAS無鎖隊列實現的原理
- 9.單詞反轉
- 10.
- 11.
- 12.引用和指針的對比
- 13.多態,重載和覆寫的概念
- 多態
- 重載
- 覆寫
- 14.判斷代碼錯誤
1.使用https時,如何對性能進行優化
HTTPS訪問速度優化
TCP Fast Open
HTTPS和HTTP使用TCP協議進行傳輸,也就意味著必須通過三次握手建立TCP連接,但一個RTT的時間內只傳輸一個syn包是不是太浪費?能不能在syn包發出的同時捎上應用層的數據?其實是可以的,這也是TCP Fast Open 的思路,簡稱TFO。
HSTS(HTTP Strict Transport Security)
作用是強制客戶端(如瀏覽器)使用HTTPS與服務器創建連接。服務端返回一個HSTS的HTTP Header,瀏覽器獲取到HSTS頭部之后,在一段時間內,不管用戶輸入www.baidu.com還是http://www.baidu.com,都會默認將請求內部跳轉成https://www.baidu.com。
Session Resume
顧名思義就是復用Session,實現簡化握手。復用Session的好處有兩個:
減少了CPU消耗,因為不需要進行非對稱密鑰交換的計算。
提升訪問速度,不需要進行完全握手階段二,節省了一個RTT和計算耗時。
2.TCP協議自上向下分為哪幾層,每一層列舉至少一個通信協議
3.ssh加密是什么
ssh是一種協議標準,也叫做安全外殼協議,主要為遠程登錄會話和其他網絡服務提供安全性的協議。全稱為Secure SHell,本質上是進行加密的shell。它既可以代替telnet,又可以為ftp、pop、甚至ppp提供一個安全的“通道”。
在SSH安全協議的原理中, 是一種非對稱加密與對稱加密算法的結合
SSH數據傳輸時候基本上所有過程都是使用對稱密鑰來加密。只有在剛開始創建連接階段和身份認證握手階段才使用非對稱加密
對稱加密是一種加密類型,在加密和解密時候使用同一個密鑰;非對稱加密與對稱加密的不同之處在于,為了在單個方向上發送數據,需要兩個相關的一組密鑰。其中一個密鑰稱為私鑰,而另一個稱為公鑰。
4.epoll和select的區別
涉及到了I/O多路復用 先看牛客的講解
再看
https://www.cnblogs.com/aspirant/p/9166944.html
https://blog.csdn.net/ysu108/article/details/7570571
5.什么是緩沖區溢出,有什么危害
6.簡單描述段頁式存儲管理機制
https://blog.csdn.net/jinking01/article/details/107098437
這個講的特別好 還沒看完
7.互斥鎖(mutex)機制,以及互斥鎖與讀寫鎖的區別
互斥鎖
mutex,用于保證在任何時刻,都只能有一個線程訪問該對象。當獲取鎖操作失敗時,線程會進入睡眠,等待鎖釋放時被喚醒。
讀寫鎖
rwlock,分為讀鎖和寫鎖。處于讀操作時,可以允許多個線程同時獲得讀操作。但是同一時刻只能有一個線程可以獲得寫鎖。其它獲取寫鎖失敗的線程都會進入睡眠狀態,直到寫鎖釋放時被喚醒。 注意:寫鎖會阻塞其它讀寫鎖。當有一個線程獲得寫鎖在寫時,讀鎖也不能被其它線程獲取;寫者優先于讀者(一旦有寫者,則后續讀者必須等待,喚醒時優先考慮寫者)。適用于讀取數據的頻率遠遠大于寫數據的頻率的場合。
互斥鎖和讀寫鎖的區別:
1)讀寫鎖區分讀者和寫者,而互斥鎖不區分
2)互斥鎖同一時間只允許一個線程訪問該對象,無論讀寫;讀寫鎖同一時間內只允許一個寫者,但是允許多個讀者同時讀對象。
Linux的4種鎖機制:
互斥鎖:mutex,用于保證在任何時刻,都只能有一個線程訪問該對象。當獲取鎖操作失敗時,線程會進入睡眠,等待鎖釋放時被喚醒
讀寫鎖:rwlock,分為讀鎖和寫鎖。處于讀操作時,可以允許多個線程同時獲得讀操作。但是同一時刻只能有一個線程可以獲得寫鎖。其它獲取寫鎖失敗的線程都會進入睡眠狀態,直到寫鎖釋放時被喚醒。 注意:寫鎖會阻塞其它讀寫鎖。當有一個線程獲得寫鎖在寫時,讀鎖也不能被其它線程獲取;寫者優先于讀者(一旦有寫者,則后續讀者必須等待,喚醒時優先考慮寫者)。適用于讀取數據的頻率遠遠大于寫數據的頻率的場合。
自旋鎖:spinlock,在任何時刻同樣只能有一個線程訪問對象。但是當獲取鎖操作失敗時,不會進入睡眠,而是會在原地自旋,直到鎖被釋放。這樣節省了線程從睡眠狀態到被喚醒期間的消耗,在加鎖時間短暫的環境下會極大的提高效率。但如果加鎖時間過長,則會非常浪費CPU資源。
RCU:即read-copy-update,在修改數據時,首先需要讀取數據,然后生成一個副本,對副本進行修改。修改完成后,再將老數據update成新的數據。使用RCU時,讀者幾乎不需要同步開銷,既不需要獲得鎖,也不使用原子指令,不會導致鎖競爭,因此就不用考慮死鎖問題了。而對于寫者的同步開銷較大,它需要復制被修改的數據,還必須使用鎖機制同步并行其它寫者的修改操作。在有大量讀操作,少量寫操作的情況下效率非常高。
8.CAS無鎖隊列實現的原理
(這個牛客課里沒有 自己背一下)
CAS的意思是Compare And Swap,從字面意思上面也可以知道實際就是對數據進行交換的一種原子操作。對應到CPU指令的話就是cmpxchg。
無鎖隊列的內部實現實際也是原子操作,可以避免多線程調用出現的不可預知的情況。主要的核心就是函數__sync_bool_compare_and_swap,返回值為bool型,原子交換操作成功返回true,失敗返回false。
原子操作是指不會被 線程調度 機制打斷的操作
9.單詞反轉
10.
11.
12.引用和指針的對比
1、指針值是一個變量的地址,通過解引用指針可以對這個變量進行操作
引用是一個變量的別名,對引用的操作就是對變量本身的直接操作
2、指針在聲明和定義的時候可以賦初值(某個他所要指向變量的地址),也可以根據需要設置為NULL
引用必須用變量初始化,以表示它是哪個變量的引用
3、指針傳參世界為值拷貝方式,將指針值(變量的地址)拷貝給形參,然后通過這個地址來訪問這個變量,再進行相關操作
引用傳參時可以理解為直接給這個變量又取了一個別名,然后通過這個別名來操作這個變量
4、指針的的復制會再分配空間,32平臺下,是四個字節,這里的復制指的是在定義一個指針,使得這個新指針也指向舊指針所指向的變量
引用的再次取別名并不會開辟空間,實際是變量的引用都不開辟空間,無論引用有多少個,始終只有變量最初被定義出來的時候分配的那一次空間
5、指針和引用的底層實現機制都是一樣的
13.多態,重載和覆寫的概念
多態
分為兩類:靜態多態(編譯時多態)和動態多態(運行時多態)
??編譯時多態體現在函數重載和模板上
??運行時多態體現在虛函數上。虛函數:在基類的函數前加上virtual關鍵字,在派生類中重寫該函數,運行時將會根據對象的實際類型來調用相應的函數。如果對象類型是派生類,就調用派生類的函數;如果對象類型是基類,就調用基類的函數。
重載
覆寫
14.判斷代碼錯誤
總結
以上是生活随笔為你收集整理的2021-07-20 诺瓦星云笔试复盘的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [JSOI 2015] 子集选取
- 下一篇: 时间复杂度与O(1), O(n), O(