1、tcp/ip 三次握手與四次揮手如何從專業角度去說明它們之間的關係
html
http://www.javashuo.com/article/p-qaabuvyi-nu.htmlnode
2、redis 之主觀下線與客觀下線python
答:nginx
主觀下線: 節點之間會按期的執行ping/pong消息來證實節點之間的連通性,若節點一貫節點二發送ping消息以後收到pong消息,那麼節點一將會更新最後一次與節點二的通訊時間,若沒有收到pong消息,那麼節點一與節點二之間的連接將會斷開,以後節點一再次執行ping消息,若與節點二之間的最後通訊時間超過指定的時間,那麼節點二將被節點一標記爲主觀下線。redis
客觀下線:docker
答: 節點之間通訊會攜帶一些必要的消息,其中就包含標記某節點爲客觀下線狀態,節點中都包含了相關節點狀態的鏈表信息,若節點的客觀下線的記錄超過半數,那麼嘗試執行客觀下線apache
嘗試客觀下線流程:編程
下線主節點以後,進行故障恢復:後端
首先是判斷該主節點的slave節點是否具備當主節點的資格,若該節點與主節點斷開鏈接超過必定的時間那麼就沒有資格瀏覽器
以後根據從節點與主節點之間的偏移量進行延遲選舉,保證偏移量最小的slave節點得到更多的票
選出節點以後,從節點執行slave none one 變成主節點,從節點將主節點的槽移交給本身完成故障恢復。
三:nginx 主動檢查與被動檢查
主動健康檢查(需使用第三方模塊)
答:主動地健康檢查,nignx定時主動地去ping後端的服務列表,當發現某服務出現異常時,把該服務從健康列表中移除,當發現某服務恢復時,又可以將該服務加回健康列表中。淘寶有一個開源的實現nginx_upstream_check_module模塊
被動檢查
答: Nginx只有當有訪問時後,才發起對後端節點探測。若是本次請求中,節點正好出現故障,Nginx依然將請求轉交給故障的節點,而後再轉交給健康的節點處理。因此不會影響到此次請求的正常進行。可是會影響效率,由於多了一次轉發,並且自帶模塊沒法作到預警。
4、Nginx知識講解——location匹配模式詳細講解 (通常匹配優先級:精準匹配 > 通常匹配 > 正則匹配)
1 location = patt {} 精準匹配
精準匹配優先級比通常匹配大
2 location patt {} 通常匹配
nginx會採用匹配長度較長的通常匹配的規則來使用
3 location ~ patt {} 正則匹配
5、rewrite 指令
rewrite 指令 最後一項參數爲flag標記,支持的flag 標記主要有如下幾種
last: 至關於apache裏的[l]標記,表示完成rewrite; 使用alias指定源:必須使用last
break: 本條規則匹配完成後,終止匹配,再也不匹配後面的規則
redirect:返回302 臨時重定向,瀏覽器地址會顯示跳轉後的url地址, 爬蟲不會更新url(由於是臨時)
permanent:返回301 永久重定向,瀏覽器地址會顯示跳轉後的url地址,爬蟲更新url
last和break 用來實現url重寫,瀏覽器地址url地址不變,
redirect和permanent 用來實現url 跳轉
服務器配置好redirect後,打開瀏覽器會重定向你須要的網站,這個時候關閉網站是會直接報出沒法鏈接的錯誤
可是permanent永久重定向定義之後,關閉nginx服務器,這個時候在訪問一樣會成功
這就是redirect跟permanent的區別
6、網絡傳輸 爲啥要進行encode編碼
答:url轉義其實也只是爲了符合url的規範而已。由於在標準的url規範中中文和不少的字符是不容許出如今url中的
七:如何批量修改docker images 的tag
docker images | grep haproxy | sed 's/haproxy/192.168.61.121\/haproxy/g'| awk '{print "docker tag"" " $3" "$1":"$2}'|sh
8、tcp/ip 頭部包含哪些
一、源端口號 目標端口號
二、信息長度
三、序列號
9、k8s 組件
Apiserver:全部服務的總入口。能夠同時多個存在運行
etcd :存儲。若是etcd 放在集羣內部,將會自動知足etcd高可用集羣。(1.15版本之後)
controller-manager:控制器,
scheduler:調度服務。當scheduler決定在哪一個node上面運行pod後,將pod的配置發送給kubelet
controller-manager 與scheduler 同樣,如果多個節點在一個集羣中,那麼運行的節點只會是一個,其餘節點將自動進去休眠狀態。
如下兩個不須要高可用,由於這兩個是工做在每一個節點之上運行的
kubelet:維持容器的生命週期,跟ci去交互(部署,維護)
Proxy:去實現負載的方式
10、k8s 中的pod 如何將業務對外訪問
NodePort
11、docker 鏡像 分層,分層的好處
Dockerfile 中的每一行都產生一個新層
下列代碼每一行都又一個獨立的id,並且下面產生的三層是隻讀的,一旦Image被運行時,會產生一個新層 container 層,這一層是可讀可寫的;
分層的優點在於,兩個image能夠共享一些層,下降了存儲的壓力。
一、複用,節省磁盤空間,相同的內容只需加載一份到內存。
二、修改dockerfile以後,再次構建速度快
12、COPY指令和ADD指令有哪些區別
COPY指令和ADD指令功能和使用方式相似。只是COPY指令不會作自動解壓工做,並且也不支持從網絡獲取文件
十3、k8s 控制器有哪些 (6種) 與Service類型
控制器
Deployment 聲明式更新控制器,用於發佈無狀態應用
ReplicaSet 副本集控制器,用於對Pod進行副本規模擴大或剪裁
StatefulSet 有狀態副本集,用於發佈有狀態應用
DaemonSet 在k8s集羣每個Node上運行一個副本,用於發佈監控或日誌收集類等應用
Job 運行一次性做業任務
CronJob 運行週期性做業任務
Service類型
ClusterIP 默認,分配一個集羣內部能夠訪問的虛擬IP
NodePort 在每一個Node上分配一個端口做爲外部訪問入口
LoadBalancer 工做在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
ExternalName 表示把集羣外部的服務引入到集羣內部中來,即實現了集羣內部pod和集羣外部的服務進行通訊
十4、http協議原理
HTTP協議的做用原理包括四個步驟:
(1) 鏈接:Web瀏覽器與Web服務器創建鏈接,打開一個稱爲socket(套接字)的虛擬文件,此文件的創建標誌着鏈接創建成功。
(2) 請求:Web瀏覽器經過socket向Web服務器提交請求。HTTP的請求通常是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式爲: GET 路徑/文件名 HTTP/1.0 文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。
(3) 應答:Web瀏覽器提交請求後,經過HTTP協議傳送給Web服務器。Web服務器接到後,進行事務處理,處理結果又經過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。
例:假設客戶機與www.mycompany.com:8080/mydir/index.html創建了鏈接,就會發送GET命令:GET /mydir/index.html HTTP/1.0。主機名爲www.mycompany.com的Web服務器從它的文檔空間中搜索子目錄mydir的文件index.html。若是找到該文件,Web服務器把該文件內容傳送給相應的Web瀏覽器。爲了告知 Web瀏覽器傳送內容的類型,Web服務器首先傳送一些HTTP頭信息,而後傳送具體內容(即HTTP體信息),HTTP頭信息和HTTP體信息之間用一個空行分開。
經常使用的HTTP頭信息有:
① HTTP 1.0 200 OK 這是Web服務器應答的第一行,列出服務器正在運行的HTTP版本號和應答代碼。代碼"200 OK"表示請求完成。
② MIME_Version:1.0 它指示MIME類型的版本。
③ content_type:類型 這個頭信息很是重要,它指示HTTP體信息的MIME類型。如:content_type:text/html指示傳送的數據是HTML文檔。
④ content_length:長度值 它指示HTTP體信息的長度(字節)。
(4) 關閉鏈接:當應答結束後,Web瀏覽器與Web服務器必須斷開,以保證其它Web瀏覽器可以與Web服務器創建鏈接
十5、tcp/ip 信息 頭部包含哪些
typedef struct _TCP_HEADER
{
short m_sSourPort; // 源端口號16bit
short m_sDestPort; // 目的端口號16bit
unsigned int m_uiSequNum; // 序列號32bit
unsigned int m_uiAcknowledgeNum; // 確認號32bit
short m_sHeaderLenAndFlag; // 前4位:TCP頭長度;中6位:保留;後6位:標誌位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 檢驗和16bit
short m_surgentPointer; // 緊急數據偏移量16bit
}attribute((packed))TCP_HEADER, *PTCP_HEADER;
源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,經過這兩個端口號和IP頭部的ip發送和接收號,能夠惟一的肯定一個鏈接。通常來說,經過端口號和IP地址,能夠惟一肯定一個TCP鏈接,在網絡編程中,一般被稱爲一個socket接口。
序號:佔4字節,用來標識從TCP發送端向TCP接收端發送的數據字節流。
確認序號:佔4字節,包含發送確認的一端所指望收到的下一個序號,所以,確認序號應該是上次已經成功收到另外一端數據字節序號加1。
數據偏移:佔4位,最大爲1111即15個數字,一個表明4個字節,用於指出TCP首部長度,若不存在選項,則這個值爲20字節,數據偏移的最大值爲60字節。
保留字段:佔6位,值是肯定的,暫時可忽略,值全爲0
標誌位:
URG(緊急): 爲1時代表緊急指針字段有效
ACK(確認):爲1時代表確認號字段有效
PSH(推送):爲1時接收方應儘快將這個報文段交給應用層
RST(復位):爲1時代表TCP鏈接出現故障必須重建鏈接
SYN(同步):在鏈接創建時用來同步序號
FIN(終止):爲1時代表發送端數據發送完畢要求釋放鏈接
接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,一般是用接收方的接收能力的大小來控制發送方的數據發送量,這樣能夠避免快主機導致較慢主機的緩衝區溢出。TCP鏈接的一端根據緩衝區大小肯定本身的接收窗口值,告訴對方,使對方能夠肯定發送數據的字節數。
校驗和:佔2個字節,範圍包括首部和數據兩部分。檢查當前的TCP包是否有問題,有沒有損壞丟失
十6、什麼是事務
事務是一個最小的工做單元,不論成功與否都做爲一個總體進行工做。
當事務失敗時,系統返回到事務開始時的狀態。這個取消全部變化的過程稱爲「回滾」( rollback )。例如,若是一個事務成功更新了兩個表,在更新第三個表時失敗,則系統將兩次更新恢復原狀,並返回到原始的狀態。
保持應用程序的完整性
十7、裝飾器運行過程
# 裝飾器
# 函數當參數傳,是爲了給裏面的函數增長新功能(或者說加判斷)
# 從outer往裏走
# x 從當前層 開始尋找a, 找不到就往外尋找(從外不能夠往裏找)
# 一、從 outter 開始先定義了a=1 | 執行的條件outer(foo)
# 二、返回了一個inner的內存地址
# 三、inner加括號運行內層函數 inner加括號等於outer(foo)()
# 4 定義了x=a,print(x),運行函數foo(),最後返回foo()函數的執行結果=print('foo')
def foo(): print('foo') def outer(foo): a=1 def inner(*args,**kwargs): x=a print(x) res=foo() return res return inner foo=outer(foo) foo()