1. 程式人生 > >Linux運維開發工程師面試問題,持續更新中。。。

Linux運維開發工程師面試問題,持續更新中。。。

Linux面試

資料儲存

檔案系統

什麼是VFS?

vfs:linux虛擬檔案系統,為各類檔案系統提供了一個統一的操作介面和應用程式設計介面。VFS是一個可以讓系統呼叫不用關心底層的儲存介質和檔案系統型別就可以工作的粘合層。

nfs

分散式檔案系統

軟硬連線

  • 軟硬連線的作用

軟硬連線的目的是解決檔案共享問題,同時還有隱藏檔案路徑、增加許可權安全和節省儲存的目的。
  • 什麼是軟連線,什麼是硬連線,有什麼區別

軟連線:儲存了一個指向另一個檔案的路徑,軟連線的大小就是檔案路徑的字串大小。軟連線特點:

  1. 軟連結,以路徑的形式存在

  2. 軟連結可以 跨檔案系統

  3. 軟連結可以對一個不存在的檔名進行連結

  4. 軟連結可以對目錄進行連結

硬連線:

指向同一個inode號的不同檔名,同一個檔案使用多個別名

硬連線的特點:

  1. 以檔案副本的形式存在,但不佔用實際空間

  2. 目錄無法建立硬連結

  3. 硬連線不能跨檔案系統

自動掛載

如何實現自動掛載,fastab 各欄位的意義:
編輯/etc/fstab檔案。每一行代表一個掛載指令,在開機時由系統自動掛載
fstab各欄位的意義:
第一列:要掛載的裝置,是絕對路徑
第二列:掛載點,即掛載到哪個目錄下,也是絕對路徑
第三列:檔案系統型別;常見的linux檔案系統型別如:ext系列、iso9660光碟機、ntfs、swap等
第四列:掛載選項,常見選項:rw、ro、defaults、auto等
第五列:dump備份工具。檢查一個檔案系統應該以多快頻率進行轉儲,若不需要轉儲就設定該欄位為0
第六列:fsck檔案系統掃描檢查工具。

Mysql

mysql的各個工作模組

  • MySQL 的初始化模組:從系統配置檔案中讀取系統引數和命令列引數,並按照引數來初始化整個系統

  • 連線管理模組:處理客戶端連線請求,通過C/S互動,將連線請求轉發給執行緒管理模組

  • 執行緒管理模組:呼叫使用者模組進行授權檢查

  • 連線執行緒模組:線上程池為請求連線執行緒,或者建立一個新的執行緒

執行緒建立完成後,開始對請求進行處理

  • 解析和轉發模組:解析器對基本的語義和語法解析,根據命令型別的不同,有些會直接處理,有些會分發給其他模組來處理。具體:如果是select型別,呼叫快取模組,檢視快取是否有命中;如果沒有,將繼續解析,則交給其他模組

    • 如果是select語句,則交給優化器模組

    • 如果是 DML 或者是 DDL 語句,則會交給表變更管理模組

    • 如果是一些更新統計資訊、檢測、修復和整理則會交給表維護模組

    • 如果和複製相關,則交給複製模組

    • 如果是請求狀態類,則交給狀態模組

  • 訪問控制模組:解析和轉發模組在執行前,會通過訪問控制模組,檢查連線使用者是否有訪問目標表以及目標欄位的許可權;如果有,就會呼叫表管理模組請求相應的表,並獲取對應的鎖。

  • 表管理模組:判斷表的儲存引擎型別和其他相關資訊。根據表的儲存引擎型別,提交請求給儲存引擎介面模組

  • 儲存引擎:提供一系列 “標準”介面給表管理模組,處理請求然後將控制權交給執行緒模組

  • 日誌模組:如果打開了日誌模組,並且請求對資料庫進行了變更,對應的處理模組還會呼叫日誌處理模組將相應的變更語句以對事件進行記錄

sql的四大功能

SQL的四大功能:

  1. 資料定義:DDL(data definition language),定義三大模式結構、兩級對映、約束等。以CREATE、ALTER、DROP、COMMIT、TRUNCATE等為主

  2. 資料操作:DML(data manipulation language),增刪改查等功能,以INSERT、UPDATE、DELETE、SELECT、LOCK等主為

  3. 資料控制:DCL(data control language ),包括對基本表和檢視的授權,完整性規則的描述,事務控制等內容,以GRANT、REVOKE等為主

  4. 嵌入式SQL的使用規定:涉及到SQL語句嵌入在宿主語言程式中使用的規則。

資料庫左連線右連線

儲存引擎

MyISAM和InnoDB的主要區別和應用場景

主要區別

  1. MyISAM是非事務安全型的,而InnoDB是事務安全型的。

  2. MyISAM鎖的粒度是表級,而InnoDB支援行級鎖定。

  3. MyISAM支援全文型別索引,而InnoDB不支援全文索引。

  4. MyISAM相對簡單,所以在效率上要優於InnoDB,小型應用可以考慮使用MyISAM。

  5. MyISAM表是儲存成檔案的形式,在跨平臺的資料轉移中使用MyISAM儲存會省去不少的麻煩。

  6. InnoDB表比MyISAM表更安全,可以在保證資料不會丟失的情況下,切換非事務表到事務表

應用場景

  1. MyISAM管理非事務表。它提供高速儲存和檢索,以及全文搜尋能力。如果應用中需要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。

  2. InnoDB用於事務處理應用程式,具有眾多特性,包括ACID事務支援。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多使用者併發操作的效能。

事務

innodb的事務與日誌的實現方式

將一堆sql指令當作一個執行單元,要麼都完成,要麼都不完成。事務防止對資料表進行一些列操作時,部分操作完成部分操作失敗,而導致對資料進行不可修復性更改。

一個RDBMS支援事務,指的是能夠滿足四種ACID測試:

  • 原子性:事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。

  • 一致性:事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗。

  • 隔離性:事務允許多個使用者對同一個資料進行併發訪問,而不破壞資料的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。

  • 永續性:事務結束後,事務處理的結果必須能夠得到固化。

事務的四種隔離級別

事務的四種隔離級別:

READ UNCOMMITTED:一個事務對資料的修改,別的事務可以直接看到

READ COMMITTED:一個事務對資料修改後,提交完成,別的事務可以看到

REPEATABLE-READ:一個事務在提交前後,對資料的修改,別的事務都無法看到,但是支援兩個事務同時對資料的操作。

SERIABLIZABLE:不支援事務併發,一個開啟了事務,別的事務無法執行

日誌

MySQL binlog的幾種日誌錄入格式以及區別

Mysql的二進位制日誌格式:

基於語句:STATEMENT,對語句進行了簡單的

基於行資料:ROW,有些資料在不同環境執行可能會有不同結果

混合:MIXED,musql自身提供鑑別機制,根據判斷執行STATEMENT還是ROW

mysqldump

主從複製

主從複製原理:
主伺服器開啟二進位制日誌功能,將二進位制日誌中記錄的事件,通過一個IO執行緒傳送給從伺服器;
從伺服器開啟自己的中繼日誌功能,接收主伺服器的二進位制日誌,並儲存到中繼日誌中,開啟一個SQL執行緒進行重放操作,達到儲存資料的目的。
這裡為了保證主從伺服器資料一致性,從伺服器不接受任何本地的可以改變資料庫資料的操作。

主從複製的意義:

  1. 為資料提供備份

  2. 提供資料庫的高可用能力

  3. 異地容災

如何判斷mysql主從是否同步

Slave_IO_Running
Slave_SQL_Running

讀寫分離

讀寫分離的實現:
在mysql主從叢集前有一個裝置(mysql-proxy),對使用者的操作進行分析,對讀寫操作進行分離,而且由於從伺服器(提供讀服務)不止一個,又要提供一個負載均衡器來進行連線分發。在主伺服器上寫操作,在從伺服器只進行讀操作,這種模型就成只為讀寫分離。

可提供更多能力:
快取機制
從伺服器負載均衡提供請求分發

讀寫分離的目的:為了緩解主伺服器的讀寫壓力,提高伺服器的高可用能力,將從伺服器對外開放,但是使用者只可以對進行讀操作。

提高安全性。

mysql負載/瓶頸

  • MySQL資料庫cpu飆升到500%,怎麼處理?

  • 500臺db,在最快時間之內重啟

  • innodb的讀寫引數優化

  • MySQL中InnoDB引擎的行鎖是通過加在什麼上完成(或稱實現)的?為什麼是這樣子的?

  • 一個6億的表a,一個3億的表b,通過外間tid關聯,你如何最快的查詢出滿足條件的第50000到第50200中的這200條資料記錄。

虛擬化

Docker

為什麼使用docker

docker解決了什麼問題,為什麼要用docker

搞定了環境依賴問題:

一個程式要跑起來,需要這麼幾部分:程式碼 + 執行環境 + 配置 + 依賴的服務。Docker image中包含了執行環境+配置,這對部署相當友好。

更輕量的虛擬化,節省了虛擬機器的效能損耗。docker的啟動是毫秒級的,而且面向服務,Docker使用Linux的namespace和cgroup機制,實現了對cpu、記憶體、等資源的管理

Docker 映象、容器、倉庫

Docker映象:類似於虛擬機器的映象,是一個面向Docker引擎的只讀模板,包含了檔案系統。

Docker容器:通過Docker映象例項化的一個可執行的簡易版的Linux系統環境。

Docker倉庫:是Docker集中存放映象檔案的場所。

Dcoker映象的構建

Docker映象構建的意義:

構建映象,可以儲存對容器的設定、修改,並可移植化的使用;提供了自定義映象的能力,以軟體的形式打包並奮發服務及執行環境

構建映象的方法:

docker commit:通過容器構建

docker build:通過Dockerfile檔案構建

Dockerfile指令

FROM <image>:基礎映象,這個是Dockerfile的開始

MAINTAINER :作者資訊

RUN:指定當前映象中執行的命令

EXPOSE:指定執行該映象開啟的埠號

CMD:指定容器執行的行為

ADD:將檔案或者目錄複製到docker容器中,包含解壓縮功能

COPY:將檔案或者目錄複製到docker容器中,單純的複製

VOLUME:向基於映象的容器添加捲,可以存在於一個或者多個目錄,可以繞過聯合檔案系統,提供共享資料或者資料持久化的功能

WORKDIR:在容器內部設定工作目錄

ENV:設定環境變數

USER:指定映象以什麼使用者身份執行,預設是root

docker四中網路模式

1 host模式
眾所周知,Docker使用了Linux的Namespaces技術來進行資源隔離,如PID Namespace隔離程序,Mount
Namespace隔離檔案系統,Network Namespace隔離網路等。一個Network Namespace提供了一份獨立的網路環境,包括網絡卡、路由、Iptable規則等都與其他的Network Namespace隔離。一個Docker容器一般會分配一個獨立的Network
Namespace。但如果啟動容器的時候使用host模式,那麼這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網絡卡,配置自己的IP等,而是使用宿主機的IP和埠。
例如,我們在10.10.101.105/24的機器上用host模式啟動一個含有web應用的Docker容器,監聽tcp80埠。當我們在容器中執行任何類似ifconfig命令檢視網路環境時,看到的都是宿主機上的資訊。而外界訪問容器中的應用,則直接使用10.10.101.105:80即可,不用任何NAT轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如檔案系統、程序列表等還是和宿主機隔離的。
 2 container模式
在理解了host模式後,這個模式也就好理解了。這個模式指定新建立的容器和已經存在的一個容器共享一個Network
Namespace,而不是和宿主機共享。新建立的容器不會建立自己的網絡卡,配置自己的IP,而是和一個指定的容器共享IP、埠範圍等。同樣,兩個容器除了網路方面,其他的如檔案系統、程序列表等還是隔離的。兩個容器的程序可以通過lo網絡卡裝置通訊。
 3 none模式
這個模式和前兩個不同。在這種模式下,Docker容器擁有自己的Network Namespace,但是,並不為Docker容器進行任何網路配置。也就是說,這個Docker容器沒有網絡卡、IP、路由等資訊。需要我們自己為Docker容器新增網絡卡、配置IP等。
 4 bridge模式
bridge模式是Docker預設的網路設定,此模式會為每一個容器分配Network Namespace、設定IP等,並將一個主機上的Docker容器連線到一個虛擬網橋上。下面著重介紹一下此模式。host模式
使用Docker run時使用–net=host指定 Docker使用的網路實際上和宿主機一樣,在容器內看到的網絡卡ip是宿主機上的ip。

docker常用命令

1. docker version  檢視docker的版本號,包括客戶端、服務端、依賴的Go等
2. docker info  檢視系統(docker)層面資訊,包括管理的images, containers數等
3. docker search <image>在docker index中搜索image 
4. docker pull <image>從docker registry server 中下拉image 
5. docker push <image|repository>推送一個image或repository到registry 
6. docker push <image|repository>:TAG  同上,指定tag  
7. docker inspect <image|container>檢視image或container的底層資訊
8. docker images  檢視本機images 
9. docker images –a  列出所有的images 
10. dockerps預設顯示正在執行中的container 

KVM

網路管理

OSI模型

OSI模型把網路通訊的工作分為7層,分別是物理層資料鏈路層、網路層、傳輸層會話層表示層應用層

具體7層份額封裝功能與連線方式典型裝置應用
應用層 Application資料Data網路服務與使用者應用程式間的一個介面終端裝置(PC、手機、平板等)具體應用
表示層 Presentation資料Data資料表示、資料安全、資料壓縮終端裝置(PC、手機、平板等)加密壓縮等
會話層 Session資料Data會話層連線到傳輸層的對映;會話連線的流量控制;資料傳輸;會話連線恢復與釋放;會話連線管理、差錯控制終端裝置(PC、手機、平板等)
傳輸層 Transport資料組織成資料段Segment用一個定址機制來標識一個特定的應用程式(埠號)終端裝置(PC、手機、平板等)封裝埠
網路層 Network分割和重新組合資料包Packet基於網路層地址(IP地址)進行不同網路系統間的路徑選擇閘道器、路由器封裝IP
資料鏈路層 Data Link將位元資訊封裝成資料幀Frame在物理層上建立、撤銷、標識邏輯連結和鏈路複用 以及差錯校驗等功能。通過使用接收系統的硬體地址或實體地址來定址網橋、交換機封裝MAC
物理層Physical傳輸位元(bit)流建立、維護和取消物理連線光纖、同軸電纜、雙絞線、網絡卡、中繼器、集線器封裝前導碼

TCP

TCP模型

對應OSI模型對應網路協議
應用層應用層,表示層,繪話層HTTP、TFTP, FTP, NFS, WAIS、SMTP ,Telnet, Rlogin, SNMP, Gopher, SMTP, DNS
傳輸層傳輸層TCP, UDP
網際互聯層網路層IP, ICMP, ARP, RARP, AKP, UUCP
網路接入層

相關推薦

Linux開發工程師面試問題持續更新

Linux面試資料儲存檔案系統什麼是VFS?vfs:linux虛擬檔案系統,為各類檔案系統提供了一個統一的操作介面和應用程式設計介面。VFS是一個可以讓系統呼叫不用關心底層的儲存介質和檔案系統型別就可以工作的粘合層。nfs分散式檔案系統軟硬連線軟硬連線的作用軟硬連線的目的是解

Linux常見基礎面試練習題(1)

Linux運維 Linux學習 Linux入門 Linux基礎 Linux運維常見基礎面試練習題(1)1 創建目錄/data/oldboy,並且在該目錄下創建文件oldboy.txt,然後在文件oldbot.txt裏寫入內容“inet addr:10.0.0.8 Bcast:10.0.0.22

Linux常見基礎面試練習題(2)

Linux學習 Linux運維 Linux入門 Linux基礎 Linux面試 Linux運維常見基礎面試練習題(2)11 如何查看占用端口8080的進程。方法一[root@zxc data]# ps -ef|grep 8080root 3886 3804 0 17:11

Linux常見基礎面試練習題(4)- 提升

Linux運維 Linux學習 Linux入門 Linux基礎 Linux運維常見基礎面試練習題(4)- 提升1 (ZZ)命令是在vi編輯器中執行存盤退出 A :q B ZZ C :q! D :WQ 2 用虛擬機安裝了一臺Linux系統,突然想克隆一臺服務器,克隆後發現無法上網

Linux常見基礎面試練習題(3)

Linux運維 Linux學習 Linux入門 Linux基礎 Linux運維常見基礎面試練習題(3)38 簡述raid0、1、5的特點和優點。 raid 0 需要硬盤 1塊以上 容量n塊數量之和 性能最高 冗余沒有raid 1 必須兩塊硬盤 容量是%50 性能 讀不變 寫

【優科技】誠聘:開發工程師/高階後臺開發工程師/高階Web前端開發工程師

###關於我們 優維科技專注於為企業轉型升級實現”網際網路+”能力提供IT動能, 我們強調在安全、穩定的前提下,實現企業的IT精益管理能力及持續價值,以助力企業的持續商業創新。優維人將帶著“DevOps管理專家”的使命,提供全棧的網際網路化運維能力!16年11月,公司完成融資3000W。行業客戶遍佈

開發是趨勢但這真的是人想要的嗎?

這是在運維派微信公眾號上釋出的一篇開放型話題,我相信作為運維的你也有類似的困惑吧。 跟大家交流個輕鬆但又嚴肅的話題。 自動化運維/DevOps是未來的趨勢,這要求運維人的技術棧要拓展到開發領域,要研究開源軟體,要會寫Python/Java。 但我知道很多做運維的兄弟,當初選擇這個行業就是不想做程式設

ConstraintLayout的大發888網站開發使用介紹持續更新

topo pla width 邊界 升級 ole 生效 eof -a 一、概述大發888網站開發 haozbbs.com Q1446595067 ConstraintLayout,即約束布局, 已經推出很久了。布局方式與RelativeLayout有點類似,但可以說是Rel

前端面試--js程式碼片段(基礎的基礎持續更新

程式碼片段1: var arr1 = [1,2,3,4,5] var arr2 = [] for(var i = 0; i < arr1.length; i ++) { arr2.push(function(){ alert(i)

微信小程式教程、開發資源下載彙總(2.8日更新持續更新……)

實在不會玩這個編輯器,後面新增的demo也不知道怎麼加連線,得辛苦大家自己手動複製了http://www.jianshu.com/p/8c9dbf2bbf84 一、IDE 二、開發學習教程 教程系列一: 教程系列二:

微信小程式教程、微信小程式開發資源下載彙總(6.16日更新持續更新……)

摘要:微信小程式教程合集、微信小程式開發資源合集、微信小程式DEMO合集、微信小程式商店合集、微信小程式經驗合集、微信小程式技巧合集 微信小程式開發工具 微信小程式開發教程 微信小程式入門系列 微信小程式入門例項系列 微信小程式從零入門系列 微信小程式基

多功能萬能模態框插件項目實用持續更新...

lose 引入 clas -c 粘貼 更新 mode log pom 附github地址 https://github.com/pomelott/jquery-plug-in 模態框(modelBox) 使用方法 1.引入css文件(建議復制粘貼至項目css文件中

關於大數據相關的問答匯總持續更新~

大數據問題NO.1 想要學好大數據需掌握哪些技術? 答:1,Java編程技術 Java編程技術是大數據學習的基礎,Java是一種強類型語言,擁有極高的跨平臺能力,可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等,是大數據工程師最喜歡的編程工具,因此,想學好大數據,掌握Java基礎是必不可

RedisUtil(未完持續更新....)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Newton

【珍藏】積攢的高逼格Python程式碼持續更新......

    用Python程式設計很久了,總感覺寫的很low,可不能總這樣呢。程式設計師逼格很重要,特別是以後還得不斷進階。於是學習一下別人Pythonic的風格,以備不時之需............. 1.簡潔的編碼彙總 1.1 快速生成字典 >>>

Android面試題目持續更新

Java部分 基礎 String buffer 與string builder 的區別? hashmap資料結構? arraylist 與 linkedlist 異同? object類的equal 和hashcode 方法重寫,為什麼? hashm

貝葉斯網路(機器學習系列持續更新~)

在說貝葉斯規則(Bayes rule)和將貝葉斯規則用於圖模型之前,先讓大家瞭解下機器學習的四個正規化(paradigms),也可以理解為四個流派; 連線主義(connectionist):用現在比較流行的說法就是神經網路,現在用到的工具有Tensorflow

SQL注入使用詳細總結(由淺及深持續更新

版權宣告:本文為博主原創文章,歡迎轉載,請註明出處: https://me.csdn.net/qq_41880069 SQL注入使用總結 一:SQL注入的原理 1:什麼是SQL SQL,指結構化查詢語言,作用:訪問和處理資料庫 也就是說SQL語言的所有操作都是

小程式坑集【日常總結持續更新…】

大家好,上班的日子總是過的那麼快,夾雜著一個多請了四天假的國慶節,轉眼距離上篇博文又過去一個多月了,慚愧啊。之前萍子寫過一篇【小程式跳H5頁面】的博文,說來也是無心在結尾的時候,回想那些被小程式折磨的不成人樣的日子,就寫了句‘那天想不開了,就總結一篇小程式坑集’

Swift 4.0 編碼規範持續更新...

自Swift 3.0 以來,語言已經比較成熟,用Swift語言來開發iOS App 的開發者越來越多,那麼一份權威而全面的規範就很有必要了。蘋果官方的文件有時間大家還是多看看,筆者參考官方文件和各路大神的經驗,寫下了一份基於Swift 4.0 的編碼規範,並會持