正向代理和反向代理的區別?
正向代理和反向代理的本質都是代為收發請求和響應。
正向代理是一個位於客戶端和目標服務器之間的代理服務器。為了從原始服務器取得內容,客戶端向代理服務器發送一個請求,並且指定目標服務器,之后代理向目標服務器轉交並且將獲得的內容返回給客戶端。正向代理的情況下客戶端必須要進行一些特別的設置才能使用。
反向代理正好相反。對於客戶端來說,反向代理就好像目標服務器,並且客戶端不需要進行任何設置。客戶端向反向代理發送請求,接着反向代理判斷請求走向何處,並將請求轉交給客戶端,使得這些內容就好似他自己一樣,因此客戶端並不會感知到反向代理后面的服務,也不需要客戶端做任何設置,只需要把反向代理服務器當成真正的服務器就好了。
正向代理隱藏了客戶端。(訪問谷歌的梯子)
反向代理隱藏了服務器。(負載均衡,訪問內網服務器)
參考資料:
進程,線程,協程?
進程
進程指一個正在執行的程序,是系統資源分配的最小單位,一個進程一般由以下幾部分組成:
- 程序代碼(稱為文本段或者代碼段)
- 當前的活動(包括程序計數器,寄存器的內容)
- 數據段(包括全局變量)
- 棧(包括函數參數,返回地址和局部變量等臨時參數)
- 堆(進程運行期間動態分配的內存)
進程的特點:
- 動態性:進程由創建而產生,由調度而執行,因得不到資源而暫停執行,由撤銷而消亡。
- 並發性:多個進程可以在一段時間內同時運行。
- 獨立性:進程是獨立運行的基本單位。
- 異步性:進程各自可以獨立地,以不可知地速度前進。
線程
線程又稱為輕量級進程,是進程內的一條運行線,是程序的實際執行者,一個進程至少包含一個主線程,也可以有更多的子線程。
- 使用CPU的基本單元,由線程ID,程序計數器,寄存器集合和堆棧組成。
- 同一進程的線程共享進程的代碼段,數據段和其他資源。
線程的特點:
- 響應度高:一個進程中一個線程的阻塞不會導致整個進程的阻塞。
- 資源共享:同屬一個進程的多個線程共享這個進程的所有資源。
- 通信簡單:
- 經濟:創建線程所花費的資源比較少,線程切換比進程切換所需資源少。
- 多處理器體系結構的利用:可以利用多個CPU執行多個線程實現並發處理。
對操作系統來說,線程是最小的執行單元,進程是最小的資源管理單元。
無論進程還是線程,都是由操作系統所管理的。
協程
協程,英文Coroutines,是一種比線程更加輕量級的存在。正如一個進程可以擁有多個線程一樣,一個線程也可以擁有多個協程。
協程不是被操作系統內核所管理,而完全是由程序所控制(也就是在用戶態執行)。
參考資料:
進程調度算法
如上圖所示,進程是有不同的狀態的,當有多個進程處於就緒狀態時,CPU調度程序從中選擇一個進程將CPU分配給它。
決定選擇哪個就緒進程去CPU運行的部分稱為調度程序,它所使用的算法稱為調度算法。
先來先服務調度算法
最短作業優先算法
- 非搶占式的:當運行進程主動放棄CPU控制權時進行調度
- 搶占式的:
- 進程主動離開CPU時調度運行時間最短的進程
- 當新到達進程的運行時間小於正在運行進程的剩余運行時間時進行調度
高響應比優先算法
響應比=(等待處理器的時間+期望服務的時間)/ 期望服務的時間
時間片輪轉算法
- 搶占式調度算法
- 時鍾每隔一段時間產生一個中斷,運行狀態的進程進入就緒狀態,用先來先服務的方法從就緒隊列中選擇一個進程去執行
優先權調度算法
- 每個進程有一個優先權,優先權不同時調度優先權最高的進程,優先權相同時按照先來先服務順序調度
- 搶占式/非搶占式
多級隊列調度
- 把就緒隊列划分為多個獨立的隊列
- 各個隊列之間使用優先級調度
- 同一優先級之間使用時間片輪轉調度
多級反饋隊列調度
- 可搶占式算法
- 有多個隊列優先級從高到低
- 進程剛進入系統,進入RQ0,執行完一個時間片,進入RQ1
- 最低優先級的隊列是按照時間片輪轉法調度
虛擬內存
虛擬存儲器就是指僅把作業的一部分裝入內存就可以運行作業的存儲系統。
它具有請求調入功能和置換功能,是從邏輯上對內存容量進行擴充的一種存儲系統。
請求頁式存儲管理
- 一個進程調入內存時只調入部分頁
- 當需要的頁面不在內存時,請求調入所需的頁面
- 如果內存不足,可以把內存中的某個頁面換出到外部輔存中
缺頁中斷
缺頁:進程執行時要訪問的頁面不在內存
缺頁導致缺頁中斷:OS響應缺頁中斷,把所需頁面調入內存
缺頁置換算法
- 在缺頁發生時,OS一定要在內存中選擇一個頁面調出內存,為要調入的頁面讓出空間
- 頁面置換算法負責選擇要淘汰的頁面
-
最優頁面置換算法
- 在缺頁發生時,在內存中的頁面中會有一些將很快被訪問,一些卻要等待100或者1000條指令才能訪問到
- 每個頁面都會有該頁面下次要被訪問之前所要執行的指令數目進行標記
- 置換算法淘汰標記最大的頁面
- 這種算法最優,但是它無法實現。
-
先進先出置換算法
- 在缺頁發生時,置換最先進入內存的頁面
-
LRU置換算法(Least Recently Used 近期最少使用)
-
在置換時選擇未使用時間最長的頁面
-
LRU算法的實現:計時器
-
LRU算法的實現:雙向鏈表
-
在訪問頁時將此頁移動至head
-
置換時不需要查找,替換tail的頁面
-
-
HTTP狀態碼
分類 | 描述 |
---|---|
1** | 信息,服務器收到請求,需要請求者繼續執行操作 |
2** | 成功,操作被成功接收並處理 |
3** | 重定向,需要進一步的操作以完成請求 |
4** | 客戶端錯誤,請求包含語法錯誤或者無法完成請求 |
5** | 服務器錯誤,服務器在處理請求的過程中發生了錯誤 |
常見的狀態碼
狀態碼 | 狀態碼英文名稱 | 中文描述 |
---|---|---|
200 | OK | 請求成功,一般用於GET與POST請求 |
320 | Found | 資源臨時被移動,客戶端應繼續使用原有URI |
403 | Forbidden | 服務器理解客戶端的請求,但是拒絕執行此請求 |
404 | Not Found | 服務器無法根據客戶端的請求找到資源 |
500 | Internal Server Error | 服務器內部錯誤,無法完成請求 |
502 | Bad Gateway | 網關或者代理服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應 |
參考資料:
HTTP和HTTPS的區別
HTTPS的特性
-
機密性
對稱加密,非對稱加密,混合加密
-
完整性
摘要算法
-
身份認證,不可否認
數字簽名(私鑰+摘要算法)
參考資料:
數據庫
索引
事務
算法
-
字符串轉數字(比如說string類型的123,轉化后應該為int類型的123)
總結
一面大概經歷了1.30小時,面試官基本是按照我簡歷中項目所涉及的技能點來問我的,所有的知識點都問的很淺,真的是很基礎的東西,三道算法題前兩道都是說思路,最后一道給我分享了一個騰訊文檔讓我手敲代碼,總體難度屬於簡單。