日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

面经——Linux相关

發(fā)布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面经——Linux相关 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘自:看完這些面試必問的Linux小知識,我保證你面試后會來給我的文章一鍵三連
作者:萬里羊
發(fā)布時間:2021-04-09 21:55:23
網址:https://blog.csdn.net/weixin_44895651/article/details/115532107

? ? ? ?作為一名以后想從事嵌入式Linux工程師的大學生,那么Linux肯定是得學習的。如果要從事C++后臺或者服務器運維相關的工作那么Linux肯定也是一個必備的工具啦!既然作為工作中需要接觸的工具那么在面試過程中就一定會問到,關于Linux的基本命令、Linux的基本組件、進程間通信、線程間同步…都有可能被問到。盡管面試考察的方面很多,但是經過大量的面試就會發(fā)現有很多問題面試官是會百問不厭的。
往期推薦:
? ? ? ?經過筆試和多輪技術面試我居然敗給了HR面?
? ? ? ?面試官說:我們不要連Android TP驅動流程都不知道的人

高能預警 干貨滿滿 不確定看看?然后再給個一鍵三連? 文章將更新! 走過路過千萬別錯過,點贊收藏+關注是對我最大的支持

文章目錄

    • Linux——系統(tǒng)篇
      • Linux是什么?
      • Unix和Linux有什么區(qū)別?
      • Linux系統(tǒng)的組成部分?
      • Linux內核的組成部分?
      • 內存管理單元MMU有什么作用?
      • 常見的操作系統(tǒng)進程調度策略有哪些?
      • I/O子系統(tǒng)層次結構
      • 邏輯地址、線性地址、物理地址、總線地址、虛擬地址的區(qū)別?
      • 操作系統(tǒng)的內存一般有哪幾種方式,各有什么優(yōu)缺點?
      • 用戶空間和內核通信的方式有哪些?
      • 調用API read()/write()時,內核具體做了那些事情?
      • 系統(tǒng)調用的作用?
      • Boot loader、Linux內核、根文件系統(tǒng)三者之間的關系?
      • Bootloader的啟動過程分為那兩個階段?
    • Linux——人機交互篇
      • Linux常用命令
      • Shell腳本
      • GCC、GDB、makefile
      • makefile
    • Linux ——進程線程篇
      • 進程間通信
      • 線程間同步機制
      • 線程與進程的區(qū)別
      • 什么是死鎖?產生死鎖的原因是什么?
      • 死鎖的四個必要條件是什么?
      • 死鎖的處理方法?
      • 如何預防死鎖?
    • Linux——網絡篇
      • 網絡基礎知識
      • TCP編程
      • 網絡高頻面試題匯總

Linux——系統(tǒng)篇

Linux是什么?

? ? ? ?簡單的來說Linux就是一套開源的和自由傳播的基于Unix操作系統(tǒng),是一個基于POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統(tǒng)。簡單的來說就是和windows、Mac OS比較像的一種多任務、多用戶的操作系統(tǒng)!

Unix和Linux有什么區(qū)別?

? ? ? ?Linux和Unix都是功能強大的操作系統(tǒng),都是應用廣泛的服務器操作系統(tǒng),有很多相似之處,甚至有一部分人錯誤地認為Unix和Linux操作系統(tǒng)是一樣的,然而,事實并非如此,以下是兩者的區(qū)別。

  • 開源性
    Linux是一款開源操作系統(tǒng),不需要付費,即可使用;Unix是一款對源碼實行知識產權保護的傳統(tǒng)商業(yè)軟件,使用需要付費授權使用。

  • 跨平臺性
    Linux操作系統(tǒng)具有良好的跨平臺性能,可運行在多種硬件平臺上;Unix操作系統(tǒng)跨平臺性能較弱,大多需與硬件配套使用。

  • 可視化界面
    Linux除了進行命令行操作,還有窗體管理系統(tǒng);Unix只是命令行下的系統(tǒng)。

  • 硬件環(huán)境
    Linux操作系統(tǒng)對硬件的要求較低,安裝方法更易掌握;Unix對硬件要求比較苛刻,安裝難度較大。

  • 用戶群體
    Linux的用戶群體很廣泛,個人和企業(yè)均可使用;Unix的用戶群體比較窄,多是安全性要求高的大型企業(yè)使用,如銀行、電信部門等,或者Unix硬件廠商使用,如Sun等。

  • ? ? ? ?相比于Unix操作系統(tǒng),Linux操作系統(tǒng)更受廣大計算機愛好者的喜愛,主要原因是Linux操作系統(tǒng)具有Unix操作系統(tǒng)的全部功能,并且能夠在普通PC計算機上實現全部的Unix特性,開源免費的特性,更容易普及使用!

    Linux系統(tǒng)的組成部分?

    ? ? ? ?Linux系統(tǒng)由 boot loader、Linux kernel 、Linux Shell、Linux應用程序組成。

    Linux內核的組成部分?

    ? ? ? ?(1)第一種分類方式:內存管理子系統(tǒng)、進程管理子系統(tǒng)、文件管理子系統(tǒng)、I/O管理子系統(tǒng)

    ? ? ? ?(2)第二種分類方式:進程調度(SCHED)、進程間通信(IPC)、內存管理(MMU)、虛擬文件系統(tǒng)(VFS)、網絡接口(NET)

    內存管理單元MMU有什么作用?

    ? ? ? ?內存管理單元的主要作用是內存映射、內存分配和回收、內存保護、內存擴充

    常見的操作系統(tǒng)進程調度策略有哪些?

    ? ? ? ?先來先服務、短進程優(yōu)先、高響應比優(yōu)先、時間片輪轉、多級反饋隊列、最高優(yōu)先權優(yōu)先。

    I/O子系統(tǒng)層次結構

    ? ? ? ?從上至下依次是用戶層I/O軟件,設備獨立性軟件,設備驅動程序,中斷處理程序

    邏輯地址、線性地址、物理地址、總線地址、虛擬地址的區(qū)別?

    地址簡介
    邏輯地址與內存段相關的偏移地址部分。例如,在C語言獲取指針變量的值,就是邏輯地址,不和絕對的物理地址相關
    線性地址線性地址=邏輯地址+基地址
    物理地址如果啟動了分頁機制,那么線性地址使用頁表項變換后就是物理地址。如果沒有啟用分頁機制,那么線性地址就是物理地址。
    總線地址x86下的I/O地址,ARM下的物理地址。
    虛擬地址MMU虛擬出來的地址

    操作系統(tǒng)的內存一般有哪幾種方式,各有什么優(yōu)缺點?

    • 分頁存儲管理:優(yōu)點是不需要連續(xù)的內存空間,且內存利用率高(只有很小的頁內碎片);缺點是 不易于實現內存共享與保護。
    • 分段存儲管理:優(yōu)點是易于實現段內存共享和保護;缺點是每段都需要連續(xù)的內存空間,且內存利 用率較低(會產生外部碎片)。
    • 段頁式存儲管理:優(yōu)點是不需要連續(xù)的內存空間,內存利用率高(只有很小的頁內碎片),且易于 實現段內存共享和保護;缺點是管理軟件復雜性較高,需要的硬件以及占用的內存也有所增加,使得執(zhí) 行速度下降。

    用戶空間和內核通信的方式有哪些?

    系統(tǒng)調用API用戶空間進程通過系統(tǒng)調用進入內核空間,訪問指定的內核空間數據
    驅動程序用戶空間進程可以使用封裝后的系統(tǒng)調用接口訪問驅動設備節(jié)點,和運行在內核空間的驅動程序通信
    copy_to_user()、copy_from_user()在驅動程序中調用的接口,實現用戶空間和內核空間的數據拷貝操作,應用于實時性要求不太高的項目中
    procfs是一種特殊的文件系統(tǒng),是Linux內核信息的抽象文件接口,大量內核中的信息以及可調用的參數都被作為常規(guī)文件映射到這個目錄樹中,用戶可以直接通過echo或cat這樣的命令對系統(tǒng)信息進行修改和查詢。
    共享內存mmap在代碼調用接口,實現內核空間與用戶空間的地址映射,在實時性要求很高的項目中為首選
    netlink用戶進程使用標準的socket API就可以使用netlink提供的強大功能

    調用API read()/write()時,內核具體做了那些事情?

    ? ? ? ?用戶進程調用read()/write()后進入內核空間-> 調用內核的sys_read()/sys_write()函數 -> 內核函數進一步調用fop.read()/fop.write()指向的函數,也就是驅動程序里具體的讀寫函數。

    系統(tǒng)調用的作用?

    ? ? ? ?為應用程序提供訪問硬件的同一接口,以至于應用程序不必關心具體的硬件操作細節(jié)。

    ? ? ? ?為系統(tǒng)內核提供保護,保證系統(tǒng)的穩(wěn)定和安全,因為**系統(tǒng)調用還規(guī)定了用戶進程進入內核的具體方式以及所能訪問的數據范圍**。

    Boot loader、Linux內核、根文件系統(tǒng)三者之間的關系?

    ? ? ? ?系統(tǒng)上電,就執(zhí)行Bootloader來初始化處理器及其外設,將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài)

    ? ? ? ?Boot loader傳遞給Linux 內核 bootcmd和boot targs這兩個比較重要的參數,讓Linux內核知道從內存中那個地方讀取相關的設備樹,系統(tǒng)鏡等文件,然后執(zhí)行Linux內核。

    ? ? ? ?Linux內核完成初始化之后就掛載某個文件系統(tǒng)作為根文件系統(tǒng)。

    Bootloader的啟動過程分為那兩個階段?

    • 第一個階段是匯編階段,完成一些依賴于CPU體系結構的初始化,并執(zhí)行第二階段的代碼。
    • 第二階段是C語言的,進一步完成硬件的初始化,并建立內存映射,并將內存和根文件系統(tǒng)讀取到內存中,然后啟動內核

    Linux——人機交互篇

    Linux常用命令

    ? ? ? ?在博主之前的文章中有整理了相關的Linux常用命令可以查看史上最全的Linux常用命令匯總(超全面!超詳細!)收藏這一篇就夠了!這篇文章,這篇文章覆蓋了絕大部分的Linux命令!目前已經有1000+點贊,6000+收藏。這里面需要重點關注的命令就是關于**Linux用戶Linux進程管理文件查找**這些是面試官最喜歡問的問題也是最容易記混淆的知識!既然是最容易記混淆的那么就需要重點關注整理一下!

    命令作用說明
    useradd -m -g 組 新建用戶名添加新用戶- m 自動創(chuàng)建用戶家目錄
    - g 指定用戶所在的組,負責會建立一個和同名的組
    passwd設置用戶密碼如果是普通用戶,直接用passwd可以修改自己的賬戶密碼
    userdel -r 用戶名刪除用戶-r 選項會自動刪除家用戶目錄
    cat /etc/passwd | grep 用戶名確認用戶信息新建用戶后,用戶信息會保存在/etc/passwd文件中
    命令作用說明
    ps -aux查看進程的詳細信息- a 顯示終端上的所有進程
    - u 顯示進程的詳細狀態(tài)
    - x 顯示沒有控制終端的進程
    ps -ef | grep -列出需要的進程配合管道查看相關的進程的詳細信息
    pstree通過顯示進程的樹狀圖來展示進程間的關系如果指定了pid,那么樹的根就是該pid
    top監(jiān)控系統(tǒng)不同進程所使用的資源信息
    nice <優(yōu)先值> <進程名> - 通過給定的優(yōu)先值啟動一個程序設置改變進程的優(yōu)先級普通用戶只能設置0~20,越小優(yōu)先級越高
    renice -n -g - 改變指定進程的優(yōu)先值通過改變指定用戶和組來改變進程優(yōu)先級
    kill用于發(fā)送信號來結束進程可以通過-9參數來執(zhí)行
    netstat -nap | grep xxx查看進程號為xxx的端口占用號
    命令作用說明
    find <指定目錄> <指定條件> <指定動作>查找指定目錄下的指定文件,并對文件進行相關操作條件參數可以是 - name按照名字進行查找
    grepgrep允許對文本進行模式查找- n顯示匹配行及行號
    - v顯示不包含匹配文本的所有行(相當于取反)
    - i 忽略大小

    Shell腳本

    ? ? ? ?用戶界面和命令行這個另外開發(fā)的程序,Linux下這個命令行的程序就叫Shell,其是一個應用程序,它連接了用戶和 Linux 內核,讓用戶能夠更加高效、安全、低成本地使用 Linux 內核,這就是 Shell 的本質

    ? ? ? ?博主在之前學習Shell腳本的時候已經整理的比較詳細了,這里就把鏈接給貼出來啦!

    • Shell基本概念
    • Shell變量和程序語句
    • Shell函數調用以及變量的作用域

    GCC、GDB、makefile

    • 預處理:引入頭文件、進行宏替換、處理條件編譯指令、去除注釋、添加行號。
    • 編譯:進行語法分析等,并生成匯編代碼.s。
    • 匯編:將匯編代碼轉成二進制代碼.o(目標文件)。
    • 鏈接:將有關的目標文件彼此連接為可執(zhí)行代碼。分為靜態(tài)鏈接(將庫文件代碼搬遷到可執(zhí)行文件 中,后綴是.a)和動態(tài)鏈接(在執(zhí)行的時候轉到庫文件代碼執(zhí)行,后綴是.so)。

    之前也有整理關于代碼的編譯還有調試相關的文章,可以戳鏈接進入文章代碼從編譯到運行經歷了什么?

    makefile

    ? ? ? ?makefile從入門到放棄——博主吐血整理的筆記

    ? ? ? ?makefile的基本條件就是目標和依賴

    Linux ——進程線程篇

    進程間通信

    ? ? ? ?每個進程各自有不同的用戶地址空間,任何一個進程的全局變量在另一個進程中都看不到,所以進程間交換數據必須通過內核,在內核中開辟一塊緩沖區(qū),進程1把數據從用戶空間拷貝到內核緩沖區(qū),進程2再從內核緩沖區(qū)把數據讀走,內核提供這種機制稱為進程間通信!

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2DMiFYSH-1617975383512)(C:\Users\lenovo-pc\AppData\Roaming\Typora\typora-user-images\image-20210409204514616.png)]

    • 管道

      項目通信方式特點
      無名管道(內存文件)半雙工通信數據只能單向流動,只能在有親緣關系的進程間使用(父子進程)
      有名管道(FIFO文件,借助文件系統(tǒng))半雙工通信允許在沒有親緣關系的進程間使用,是先進先出的通信方式
    • 共享內存:共享內存就是映射一段能被其他進程所訪問的內存,這段內存由一個進程創(chuàng)建,但是多個進程可以訪問。共享內存是最快的IPC方式,他是針對其他進程間通信方式運行效率低而專門設計的。

    • 消息隊列:消息隊列是有消息的鏈表,存放在內核中并由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限制等缺點。

    • 套接字:適用于不同機器間進程通信,在本地可作為兩個進程間通信的方式。

    • 信號:用于通知接收進程某個時間已經發(fā)生,比如按下ctrl+C就是信號

    • 信號量:信號量就是一個計數器,可以用來控制多個進程對共享資源的訪問。常用一種鎖的機制,實現進程、線程的臨界區(qū)的同步及互斥訪問。

    線程間同步機制

    • POSIX無名信號量(基于內存的信號量):可以用于進程間同步
    • POSIX有名信號量:線程進程都適用
    • 初始化、P操作(申請資源)、V操作(釋放資源)
    • 互斥鎖+條件變量:只能用于線程間同步

    線程與進程的區(qū)別

    ? ? ? ?調度:線程是調度的基本單位;進程是擁有所有資源的基本單位。

    ? ? ? ?并發(fā)性:一個進程內多個線程可以并發(fā);多個進程可以并發(fā)

    ? ? ? ?擁有資源:進程擁有獨立的地址空間;線程不擁有系統(tǒng)資源。

    ? ? ? ?系統(tǒng)開銷:線程創(chuàng)建銷毀只需要處理PC值,狀態(tài)碼,通用寄存器,線程棧和棧指針即可;進程創(chuàng)建和線程需要分配及銷毀task_struct結構。

    關于線程與進程我也有整理相關的博客:

    • 1、進程簡介

    • 2、線程&線程間同步

    • 3、Unix間線程通信

    • 4、System V間通信

    • 5、并發(fā)與競爭

    什么是死鎖?產生死鎖的原因是什么?

    ? ? ? ?死鎖是指多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程將無法向前推進。

    ? ? ? ?原因:①系統(tǒng)資源不足。②資源分配不當。③進程推進的順序不合適。

    死鎖的四個必要條件是什么?

    ? ? ??互斥條件:一個資源每次只能被一個進程使用,其他進程只能等待。

    ? ? ? ?請求與保持條件:進程已經獲得至少一個資源,但又提出了新的資源請求,而該資源已被其他進程占有,此時該進程被阻塞,但對已獲得資源依然保持不放。

    ? ? ? ?不可剝奪條件:進程所獲得的資源不能被其他進程剝奪,只能被自己釋放。

    ? ? ? ?循環(huán)等待條件:若干進程形成首尾相接循環(huán)等待資源的關系。

    ? ? ? ?注意:以上四個條件缺一不可

    死鎖的處理方法?

    (1)預防死鎖:通過設置一些限制條件,去破壞產生死鎖的必要條件。

    (2)避免死鎖:在資源分配過程中,使用某種方法避免系統(tǒng)進入不安全的狀態(tài),從而避免發(fā)生死鎖。

    (3)檢測和解除死鎖:允許死鎖的發(fā)生,但是通過系統(tǒng)的檢測之后,采取一些措施,將死鎖清除掉。

    如何預防死鎖?

    (1)破壞“請求與保持條件”:

    • ①靜態(tài)分配,即每個進程在開始執(zhí)行時就申請它所需要的全部資源

    • ②動態(tài)分配,即每個進程在申請所需要的資源時它本身不占用系統(tǒng)資源。

    (2)破壞“不可剝奪條件”:一個進程在阻塞等待期間,其占有的資源被隱式釋放后被其他進程使用,而阻塞等待的資源只有獲得所有需要的資源才能重新啟動。

    (3)破壞“循環(huán)等待條件”:采用資源的有序分配,將所有資源進行編號,緊缺的資源采用比較大的編號,一個進程只有獲得較小編號的資源才可以申請較大編號的資源。

    Linux——網絡篇

    網絡基礎知識

    ? ? ? ?借鑒之前整理的博客:網絡基礎知識

    TCP編程

    ? ? ? ?借鑒之前整理的博客:網絡編程——TCP

    網絡高頻面試題匯總

    ? ? ? ?借鑒之前博客整理的面試題掌握了這些面試題,離大廠的距離更近一步!

    本文將持續(xù)更新和維護,如果覺得對自己有幫助就給個贊和關注吧!

    ? ? ? ?不積小流無以成江河,不積跬步無以至千里。而我想要成為萬里羊,就必須堅持學習來獲取更多知識,用知識來改變命運,用博客見證成長,用行動證明我在努力。
    ? ? ? ?如果我的博客對你有幫助、如果你喜歡我的博客內容,記得“點贊” “評論” “收藏”一鍵三連哦!聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的面经——Linux相关的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。