運維面經匯總


1.自我介紹(除了簡單的自我介紹,還要說一下自己主要掌握的語言,做過哪些項目)
2.常用的查看cpu的命令(主要還是提問top,會問的比較細致,問道查看進程的列表中VIRT,RES列分別代表什么意思)
3.linux中進程狀態有哪些?分別什么?什么是僵屍進程?

但是在linux中,將狀態細分到了六種。

R運行狀態(running): 並不意味着進程一定在運行中,它表明進程要么是在運行中要么在運行隊列里。
S睡眠狀態(sleeping): 意味着進程在等待事件完成(這里的睡眠有時候也叫做可中斷睡眠(interruptible sleep))。
D磁盤休眠狀態(Disk sleep):有時候也叫不可中斷睡眠狀(uninterruptible sleep),在這個狀態的進程通常會等待IO的結束。
T停止狀態(stopped): 可以通過發送 SIGSTOP 信號給進程來停(T)進程。這個被暫停的進程可以通過發送 SIGCONT 信號讓進程繼續運行。
X死亡狀態(dead):這個狀態只是一個返回狀態,你不會在任務列表里看到這個狀態
Z僵死狀態(Zombies) :進程已經退出了但是資源還沒有完全被釋放的一種狀態。
進程的概念
僵屍進程
這里的有一種特殊的狀態值得一提,就是僵死狀態

當子進程退出的時候,如果父進程沒有讀取到子進程的返回值,這時就進入了僵死狀態。

這時就處於一個很尷尬的局面,子進程實際上已經退出了,但是父進程認為它還在執行,所以並沒有釋放它的資源,所以子進程會一直卡在進程表中,等待父進程讀取退出狀態代碼。

4.TCP和UDP的區別 --- TCP每次發包都要三次握手碼 --- 為什么TCP傳輸比UDP慢
5.簡單介紹TCP的一下安全機制 --- 擁塞控制,流量控制 --- 什么是快重傳和快恢復

TCP擁塞控制

提高網絡利用率,降低丟包率,並保證網絡資源對每條數據流的公平性,這就是擁塞控制。
擁塞控制包括四部分:慢啟動、擁塞避免、快速重傳、快速恢復

TCP流量控制

如果發送端發送數據太快,接收端來不及接收,可能會丟失數據。所以流量控制是讓發送端不要發送太快,要讓接收端來得及接收
流量控制是通過大小可變的滑動窗口實現的。

6.什么原因造成time_wait,四次揮手時變成close_wait是第幾次揮手
7.如何實習微信群聊功能(這個完全不知道)ianc
 通過一個人收到另外一個人的信息,然后再通過組播傳遞給群里的其他人UDP

1.熟悉的語言,可本之外有了解過網絡的相關知識嗎,熟悉的數據庫。(語言能力不好,比較熟悉的就是shell腳本)
2.shell 相關的問題。如:如何判斷shell中命令執行的成功與失敗;shell內部傳參及引用;shell中執行一個命令如何將它的返回值賦給一個變量;如何判斷一個文件或目錄是否存在;for和where的結構;shell中如何將一個命令在后台執行;shell中的加法操作,列出你知道的所有方法
3.awk,sed,正則表達式都會問到(正則表達式中 ? * + 的區別)
4.了解linux系統的啟動過程嗎?

linux啟動時我們會看到許多啟動信息。

Linux系統的啟動過程並不是大家想象中的那么復雜,其過程可以分為5個階段:

  • 內核的引導。【首先是BIOS開機自檢,按照BIOS中設置的啟動設備(通常是硬盤)來啟動。讀取/boot】
  • 運行 init。【init 程序首先是需要讀取配置文件 /etc/inittab。】
  • 系統初始化。【調用執行了/etc/rc.d/rc.sysinit】
  • 建立終端 。
  • 用戶登錄系統。
5.如何查看Linux當前系統版本號和內核版本號;已知80端口被一個進程占用,查找哪個進程占用了80端口;查看進程占用cpu的情況
cat /proc/version
netstat -lnp|grep 80 
 
6.linux定時任務

我們用crontab -e進入當前用戶的工作表編輯,是常見的vim界面。每行是一條命令。

crontab的命令構成為 時間+動作,其時間有分、時、日、月、周五種,操作符有

  • * 取值范圍內的所有數字
  • / 每過多少個數字
  • - 從X到Z
  • 散列數字

實例1:每1分鍾執行一次myCommand

* * * * * myCommand

實例2:每小時的第3和第15分鍾執行

3,15 * * * * myCommand
7.如何讓環境變量在機子重啟后任然生效
如果修改了/etc/profile,那么編輯結束后執行source profile 或 執行點命令 ./profile,PATH的值就會立即生效了。 
這個方法的原理就是再執行一次/etc/profile shell腳本
 
8.TCP和UDP的區別
9.常用服務使用的式TCP還是UDP(telnet , ssh ,http ,ftp ,tftp ,dns )
10.TCP為什么建立連接時3次,斷開連接時4次?(為什么斷開時ACK和FIN要分兩次發送?)
11.TCP//UDP中端口號最多到多少,哪些時系統保留,哪些時可以自用的
12.介紹iptables時干什么的,具體配置過什么(具體命令,又多少個表,分別是哪四個。NAT,為什么要用nat)
13.http(get和post的區別),http和https又什么區別;http中session和cookie有什么區別;返回碼1XXX,2XX,3XX,4XX,5XX分別代表什么意思
14.簡單介紹LAMP的架構(使用php訪問過mysql嗎,php訪問mysql的語句是什么)
15.python了解到什么程度,寫過多少代碼(淺copy和深copy的區別;列表和元組的區別)

 

 深拷貝,包含對象里面的自對象的拷貝,所以原始對象的改變不會造成深拷貝里任何子元素的改變

copy淺拷貝,沒有拷貝子對象,所以原始數據改變,子對象會改變

16.MySQL相關的問題。如:MySQL常用的引擎,對應的結構是什么;mysql的備份;主從復制的原理;mysql調優措施,慢查詢,如何執行,具體的語句;

常用引擎:

InnoDB(重點)

MyISAM

BLACKHOLE(黑洞引擎)

CSV(數據文件可以使用excel打開)

 

MySQL 整個查詢執行過程,總的來說分為 5 個步驟 :

  1. 客戶端向 MySQL 服務器發送一條查詢請求
  2. 服務器首先檢查查詢緩存,如果命中緩存,則立刻返回存儲在緩存中的結果,否則進入下一階段
  3. 服務器進行 SQL解析、預處理、再由優化器生成對應的執行計划
  4. MySQL 根據執行計划,調用存儲引擎的 API來執行查詢
  5. 將結果返回給客戶端,同時緩存查詢結果
 
17.ZABBIX和ansible。zabbix的原理,如何部署,整個架構模塊直接如何傳輸的;主動模式還是被動模式;數據存儲在哪里
18.流量控制和擁塞控制的機制
19.keepalived的工作原理,lvsde工作原理,用過哪種工作模式,DR和NAT又什么區別
20.nginx為什么有那么高得並發性,主要用Nginx干什么,反向代理,nginx負載均衡有哪些算法

一、Nginx負載均衡算法

    1、輪詢(默認)

        每個請求按時間順序逐一分配到不同的后端服務,如果后端某台服務器死機,自動剔除故障系統,使用戶訪問不受影響。

    2、weight(輪詢權值)

        weight的值越大分配到的訪問概率越高,主要用於后端每台服務器性能不均衡的情況下。或者僅僅為在主從的情況下設置不同的權值,達到合理有效的地利用主機資源。

    3、ip_hash

        每個請求按訪問IP的哈希結果分配,使來自同一個IP的訪客固定訪問一台后端服務器,並且可以有效解決動態網頁存在的session共享問題。

    4、fair

        比 weight、ip_hash更加智能的負載均衡算法,fair算法可以根據頁面大小和加載時間長短智能地進行負載均衡,也就是根據后端服務器的響應時間 來分配請求,響應時間短的優先分配。Nginx本身不支持fair,如果需要這種調度算法,則必須安裝upstream_fair模塊。

    5、url_hash

        按訪問的URL的哈希結果來分配請求,使每個URL定向到一台后端服務器,可以進一步提高后端緩存服務器的效率。Nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝Nginx的hash軟件包。

 

21.DNS得工作原理,CDN原理。

正反向解析事兩個不同得名稱空間,是兩顆不同得解析樹;

  正向:ip---》主機名

  反向:主機名---》ip

 1、在瀏覽器中輸入www.baidu.com域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關系,如果有,就先調用這個ip地址映射,完成域名解析。

  2、如果hosts里沒有這個域名的映射,則會查找本地DNS解析器緩存,是否有這個網址映射關系,如果有,直接返回,完成域名解析。

  3、如果hosts與本地DNS解析器緩存都沒有相應的網址映射關系,首先會找TCP/IP參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析記過給客戶端,完成域名解析,此解析具有權威性。

  4、如果要查詢域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關系,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。

  5、如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13台根DNS,根DNS服務器收到請求后會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息后,將會聯系負責.com域的這台服務器。這台負責.com域的服務器收到請求后,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(baidu.com)給本地DNS服務器。當本地DNS服務器收到這個地址后,就會找baidu.com域服務器,重復上面的動作,進行查詢,直至找到www.baidu.com主機。

  6、如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把請求轉至上上級,以此循環。不管是本地DNS服務器用是轉發,還是根提示,最后都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。

    從上圖可以知道,客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間的交互查詢就是迭代查詢

    遞歸查詢與迭代查詢

    遞歸,只發送一次請求,得到一次准確結果(消耗資源)

    迭代,發送多次請求,得到參考結果

22.介紹自己在學習過程中遇到得比較大得困難,如何解決
 

一面面試官問了好多網絡的問題,比如tcp協議,還問我如果不想要一個ip,如何釋放,如何重新獲取一個ip, 問了linux 的命令和Windows 的dos 命令,之后給我介紹了一下公司的運維結構,然后等二面

二面是系統運維的面試官,又問了tcp 協議,如果服務器100M帶寬,客戶機10M帶寬,服務器向客戶機發發數據,為什么速度提不到它該有的帶寬,問了redis 的數據類型,python 原類,stp生成樹作用,介紹一下它,還有現在企業還需要stp嗎?其他的記不太清了

1.自我介紹
2.介紹一下ospf
3.項目介紹,出於什么目的做的
4.說一下Nginx的負載均衡
5.Nginx和lvs有什么區別
6.lvs的4種模式
7.mysql如何做主從復制
答:按照主從復制的原理有3步
1.master寫入binlog里並通過dump線程處理slave請求,2.slave通過io線程復制master的binlog並寫入到relaylog,3.sql線程重放relaylog
所以配置起來也不難,設置相應的serverid以便識別,在master中開啟binlog,slave根據master的用戶地址密碼position等信息寫到change master to后面作為io線程的參數,並開啟io和sql線程。
以上就是大致的步驟,當然有的時候master本身已存在數據,則需要將數據先備份起來並發送到slave,然后使用show master status查看對應的position和file並記住,在slave中io線程的參數就改為這個position和file對應的信息。不過這些是傳統的復制方式,容易出現的問題就是position和file可能錯誤,所以后來就有gtid這種方式,基於事務id,slave根據gtid是否在自己的binlog中存在來判斷要不要復制(講到這里我覺得差不多了就沒講,其實還有多線程復制等知識)
 

 

 

8.內存堆棧與數據結構堆棧區別

1.內存中的堆棧
內存空間在邏輯上分為三部分:代碼區、靜態數據區和動態數據區,動態數據區又分為棧區和堆區。

代碼區:存儲方法體的二進制代碼。高級調度(作業調度)、中級調度(內存調度)、低級調度(進程調度)控制代碼區執行代碼的切換。
靜態數據區:存儲全局變量、靜態變量、常量,常量包括final修飾的常量和String常量。系統自動分配和回收。
棧區:存儲運行方法的形參、局部變量、返回值。由系統自動分配和回收。
例如 int method(int a){int b;}棧中存儲參數a、局部變量b、返回值temp。
堆區:new一個對象的引用或地址存儲在棧區,指向該對象存儲在堆區中的真實數據。由程序員分配和回收(Java中由JVM虛擬機的垃圾回收機制自動回收)。
例如 Class Student{int num; int age;} main方法中Student stu = new Student();分配堆區空間中存儲的該對象的num、age,變量stu存儲在棧中,里面的值是對應堆區空間的引用或地址。

2.數據結構中的堆棧
棧:是一種連續存儲的數據結構,特點是存儲的數據先進后出。
堆:是一棵完全二叉樹結構,特點是父節點的值大於(小於)兩個子節點的值(分別稱為大頂堆和小頂堆)。它常用於管理算法執行過程中的信息,應用場景包括堆排序,優先隊列等。

9.linux的安裝方式
答:我用的是centos比較多,所以比較熟練的有源碼安裝,二進制rpm安裝,yum安裝。其中源碼安裝是解包,默認配置,編譯,安裝,雖然過程復雜,但出現錯誤易定位解決,同時也需要運維人員對該軟件較為熟悉,而rpm則簡單,只需一條命令解決,yum也是且解決rpm安裝依賴,一般新手用的多且多用於簡單的軟件如命令
 
10.哪個項目覺得最有成就感,為什么
11.如果讓你部署上千台服務器,你會怎么做
 
12.linux的防火牆講一下
鏈接
答:一般centos6是iptables,centos7是firewall,我對iptables比較熟悉,其主要維護了4種規則表raw,mangle,nat,filter,還有常見的規則鏈input,output,forward,prerouting,postrouting,常見的數據處理動作drop,accept,reject,snat,dnat(聽到面試官反應我覺得差不多了就說其實根據字面意思就能懂,防火牆內容很多最重要還是熟悉命令使用)
13.你的這個關於ssh的項目是怎么樣

計算機基礎,數據結構操作系統計算機網絡之類的,劍指offer也快刷完了
Python:內存管理,多進程線程協程,生成器迭代器裝飾器,拷貝,魔術方法等等,Django框架
路由交換hcnp:rip,ospf,bgp,MPLS,vlan,stp等
linux:開機過程,sed,awk,grep,軟硬鏈接,inode,block等
Nginx,lvs,keepalive,ansible及其優化,docker等
mysql:復制優化恢復索引備份等等
內容其實非常多,不過可能准備時間很長,所以面試比較好
 

建議:

運維的項目一般都是集群部署,可以學一學k8s,還有Python相關的項目,很多運維方向的同學都會寫個Python項目在簡歷
Python的可以學習Django或者flask框架(GitHub上面應該有這兩種框架的項目,或者b站找一下
Nginx問的比較常規,調度算法,反向代理,與lvs比較,與Apache比較
(學習路勁:blog.nowcoder.net/xiaohu123
github.com/xh-gif)

 

項目相關

  • 如何防止緩存擊穿
  • 如何打散熱點數據
  • xxx有沒有設計容錯的機制
  • xxx有沒有使用多線程開發
  • 對象存儲的實現原理
  • 項目中數據庫表設計

基礎知識

  • Docker 原理
  • dockerfile 一些配置參數
  • docker-compose 一些配置參數
  • Linux 下怎么查看進程/CPU/內存的信息
  • Linux 下怎么調試 Go 程序

 

bn面試:

docker - 集群 - 遷移服務器 -  django框架

python 開發的集群工具

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM