前言
作為 Java 的從業者,在找工作的時候,一定會被問及關於Linux 相關的知識。Linux知識的掌握程度,在很多面試官眼里是候選人技術深度的一個重要評判標准。在這里我們將詳細的整理常見的Linux面試題目, 提供給大家學習參考。
小編分享的這份Java后端開發面試總結包含了JavaOOP、Java集合容器、Java異常、並發編程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL數據庫、消息中間件MQ、Dubbo、Linux、ZooKeeper、 分布式&數據結構與算法等26個專題技術點,都是小編在各個大廠總結出來的面試真題,已經有很多粉絲靠這份PDF拿下眾多大廠的offer,今天在這里總結分享給到大家!【已完結】
完整版Java面試題地址:2021最新面試題合集集錦。
1. 什么是Linux
Linux是一套免費使用和自由傳播的類似Unix操作系統,一般的WEB項目都是部署都是放在Linux操作系統上面。 Linux是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。
2. Windows和Linux的區別
- Windows是微軟開發的操作系統,民用操作系統,可用於娛樂、影音、上網。 Windows操作系統具有強大的日志記錄系統和強大的桌面應用。好處是它可以幫我們實現非常多絢麗多彩的效果,可以非常方便去進行娛樂、影音、上網。
- Linux的應用相對單純很多,沒有什么絢麗多彩的效果,因此Linux的性能是非常出色的,可以完全針對機器的配置有針對性的優化,
- 簡單來說Windows適合普通用戶進行娛樂辦公使用,Linux適合軟件開發部署
3. Unix和Linux有什么區別?
4. 什么是 Linux 內核?
Linux 系統的核心是內核。內核控制着計算機系統上的所有硬件和軟件,在必要時分配硬件,並根據需要執行軟件。
- 系統內存管理
- 應用程序管理
- 硬件設備管理
- 文件系統管理
5. Linux的基本組件是什么?
就像任何其他典型的操作系統一樣,Linux擁有所有這些組件:內核,shell和GUI,系統實用程序和應用程序。Linux比其他操作系統更具優勢的是每個方面都附帶其他功能,所有代碼都可以免費下載。
6. Linux 的體系結構
從大的方面講,Linux 體系結構可以分為兩塊:
7. BASH和DOS之間的基本區別是什么?
8. Linux 開機啟動過程?
- 1、主機加電自檢,加載 BIOS 硬件信息。
- 2、讀取 MBR 的引導文件(GRUB、LILO)。
- 3、引導 Linux 內核。
- 4、運行第一個進程 init (進程號永遠為 1 )。
- 5、進入相應的運行級別。
- 6、運行終端,輸入用戶名和密碼。
9. Linux系統缺省的運行級別?
- 關機。
- 單機用戶模式。
- 字符界面的多用戶模式(不支持網絡)。
- 字符界面的多用戶模式。
- 未分配使用。
- 圖形界面的多用戶模式。
- 重啟。
10. Linux 使用的進程間通信方式?
- 1、管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
- 2、信號(signal) 。
- 3、消息隊列。
- 4、共享內存。
- 5、信號量。
- 6、套接字(socket) 。
11. Linux 有哪些系統日志文件?
比較重要的是 /var/log/messages 日志文件。
12. Linux系統安裝多個桌面環境有幫助嗎?
通常,一個桌面環境,如KDE或Gnome,足以在沒有問題的情況下運行。盡管系統允許從一個環境切換到另一個環境,但這對用戶來說都是優先考慮的問題。有些程序在一個環境中工作而在另一個環境中無法工作,因此它也可以被視為選擇使用哪個環境的一個因素。
13. 什么是交換空間?
交換空間是Linux使用的一定空間,用於臨時保存一些並發運行的程序。當RAM沒有足夠的內存來容納正在執行的所有程序時,就會發生這種情況。
14. 什么是root帳戶
root帳戶就像一個系統管理員帳戶,允許你完全控制系統。你可以在此處創建和維護用戶帳戶,為每個帳戶分配不同的權限。每次安裝Linux時都是默認帳戶。
15. 什么是LILO?
LILO是Linux的引導加載程序。它主要用於將Linux操作系統加載到主內存中,以便它可以開始運行。
16. 什么是BASH?
BASH是Bourne Again SHell的縮寫。它由Steve Bourne編寫,作為原始Bourne Shell(由/ bin /sh表示)的替代品。它結合了原始版本的Bourne Shell的所有功能,以及其他功能,使其更容易使用。從那以后,它已被改編為運行Linux的大多數系統的默認shell。
17. 什么是CLI?
18. 什么是GUI?
19. 開源的優勢是什么?
開源允許你將軟件(包括源代碼)免費分發給任何感興趣的人。然后,人們可以添加功能,甚至可以調試和更正源代碼中的錯誤。它們甚至可以讓它運行得更好,然后再次自由地重新分配這些增強的源代碼。這最終使社區中的每個人受益。
20. GNU項目的重要性是什么?
這種所謂的自由軟件運動具有多種優勢,例如可以自由地運行程序以及根據你的需要自由學習和修改程序。它還允許你將軟件副本重新分發給其他人,以及自由改進軟件並將其發布給公眾。
21. 簡單 Linux 文件系統?
22. Linux 的目錄結構是怎樣的?
Linux 文件系統的結構層次鮮明,就像一棵倒立的樹,最頂層是其根目錄:
23. 什么是 inode ?
24. 什么是硬鏈接和軟鏈接?
25. RAID 是什么?
26. 一台 Linux 系統初始化環境后需要做一些什么安全工作?
27. 什么叫 CC 攻擊?什么叫 DDOS 攻擊?
28. 什么是網站數據庫注入?
29. Shell 腳本是什么?
一個 Shell 腳本是一個文本文件,包含一個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以添加這些所有命令在一個文本文件(Shell 腳本)來完成這些日常工作任務。
30.如何選擇 Linux 操作系統版本?
31. 如何規划一台 Linux 主機,步驟是怎樣?
32. 請問當用戶反饋網站訪問慢,你會如何處理?
33. Linux 性能調優都有哪幾種方法?
- 1、Disabling daemons (關閉 daemons)。
- 2、Shutting down the GUI (關閉 GUI)。
- 3、Changing kernel parameters (改變內核參數)。
- 4、Kernel parameters (內核參數)。
- 5、Tuning the processor subsystem (處理器子系統調優)。
- 6、Tuning the memory subsystem (內存子系統調優)。
- 7、Tuning the fifile system (文件系統子系統調優)。
- 8、Tuning the network subsystem(網絡子系統調優)。
34. 基本命令
- cd (change directory:英文釋義是改變目錄)切換目錄
- pwd (print working directory:顯示當前工作目錄的絕對路徑)
- ls (ls:list的縮寫,查看列表)查看當前目錄下的所有文件夾(ls 只列出文件名或目錄名)
- ll (ll:list的縮寫,查看列表詳情)查看當前目錄下的所有詳細信息和文件夾(ll 結果是詳細,有時間,是否可讀寫等信息)
- touch (touch:創建文件)創建文件
- mkdir (mkdir:創建目錄) 創建目錄
- cat (concatenate:顯示或把多個文本文件連接起來)查看文件命令(可以快捷查看當前文件的內容)(不能快速定位到最后一頁)
- more (more:更多的意思)分頁查看文件命令(不能快速定位到最后一頁)
- tail(尾巴) 查看文件命令(看最后多少行)
- cp(copy單詞縮寫,復制功能)
- mv(move單詞縮寫,移動功能,該文件名稱功能)
- rm(remove:移除的意思)刪除文件,或文件夾
- fifind (fifind:找到的意思)查找指定文件或目錄
- 回車:向下n行,需要定義,默認為1行。
- 空格鍵:向下滾動一屏或Ctrl+F
- B:返回上一層或Ctrl+B
- q:退出more
- less -m 顯示類似於more命令的百分比。
- less -N 顯示每行的行號。(大寫的N)
- 兩參數一起使用如:less -mN 文件名,如此可分頁並顯示行號。
- 空格鍵:前下一頁或page down。
- 回車:向下一行。
- b:后退一頁 或 page up。
- q:退出。
- d:前進半頁。
- u:后退半頁
- tail -10 ;文件名 看最后10行
- cp /opt/java/java.log /opt/logs/ ;把java.log 復制到/opt/logs/下
- cp /opt/java/java.log /opt/logs/aaa.log ;把java.log 復制到/opt/logs/下並且改名為
- aaa.log
- cp -r /opt/java /opt/logs ;把文件夾及內容復制到logs文件中
- mv /opt/java/java.log /opt/mysql/ ;移動文件到mysql目錄下
- mv java.log mysql.log ;把java.log改名為mysql.log
- -f或--force 強制刪除文件或目錄。刪除文件不包括文件夾的文件
- -r或-R或--recursive 遞歸處理,將指定目錄下的所有文件及子目錄一並刪除。
- -rf 強制刪除文件夾及內容
- rm 文件名 ;安全刪除命令 (yes刪除 no取消)
- rm -rf 強制刪除文件夾及內容
- rm -rf * 刪除當前目錄下的所有內容。
- rm -rf /* 刪除Linux系統根目錄下所有的內容。系統將完蛋。vi (VIsual:視覺)文本編輯器 類似win的記事本 (操作類似於地下的vim命令,看底下vim 的操
- 作)
- vim (VI IMproved:改進版視覺)改進版文本編輯器 (不管是文件查看還是文件編輯 按 Shift + 上或
- 者下可以上下移動查看視角)
- | 管道命令(把多個命令組合起來使用)
- * 表示0~多個任意字符。
- find -name 文件名;按照指定名稱查找在當前目錄下查找文件
- find / -name 文件名按照指定名稱全局查找文件
- find -name '*文件名' ;任意前綴加上文件名在當前目錄下查找文件
- find / -name '*文件名*' ;全局進行模糊查詢帶文件名的文件
- 輸入”vim 文件名” 打開文件,剛剛時是”一般模式”。
- 一般模式:可以瀏覽文件內容,可以進行文本快捷操作。如單行復制,多行復制,單行刪除,多行刪除,(退
- 出)等。
- 插入模式:可以編輯文件內容。
- 底行模式:可以進行強制退出操作,不保存 :q!
- 可以進行保存並退出操作 :wq
- 按下”i”或”a”或”o”鍵,從”一般模式”,進入”插入模式(編輯模式)”。
- 在編輯模式下按”Esc” 即可到一般模式
- 在一般模式下按”:”,冒號進入底行模式。
- 在一般模式下的快捷鍵
- dd ;刪除一整行
- X ;向前刪除 等同於windowns系統中的刪除鍵
- x ;向后刪除和大寫x相反方向
- Ctrl + f ;向后看一頁
- Ctrl + b ;向前看一頁
- u ;撤銷上一步操作
- /word ;向下查找word關鍵字 輸入:n查找下一個,N查找上一個(不管是哪個查找都是全局查找 只不過
- n的方向相反)
- ?log ;向上查找log關鍵字 輸入:n查找上一個,N查找下一個
- :1,90s/redis/Redis/g ;把1-90行的redis替換為Redis。語法n1,n2s/原關鍵字/新關鍵字/g,n1
- 代表其實行,n2代表結尾行,g是必須要的
- :0 ;光標移動到第一行
- 😒 ;光標移動到最后一行
- :300 ;光標移動到300行,輸入多少數字移動到多少行
- :w ;保存
- :w! ;強制保存
- :q ;退出
- :q! ;強制退出
- 5dd ;刪除后面5行,打一個參數為自己填寫
- 5x ;刪除此光標后面5個字符
- d1G ;刪除此光標之前的所有
- d0 ;從光標當前位置刪除到此行的第一個位置
- yy ;復制
- p ;在光標的下面進行粘貼
- P ;在光標的上門進行粘貼grep (grep :正則表達式)正則表達式,用於字符串的搜索工作(模糊查詢)。不懂可以先過
- yum install -y lrzsz 命令(實現win到Linux文件互相簡單上傳文件)
- tar (解壓 壓縮 命令)
- ps (process status:進程狀態,類似於windows的任務管理器)
- 管道命令的語法:命令1 | 命令2 | 命令3。
- 單獨使用:
- grep String test.java ;在test.java文件中查找String的位置,返回整行
- 一般此命令不會單獨使用下面列幾個常用的命令(地下通過管道命令組合起來使用)
- ps aux|grep java ;查找帶java關鍵字的進程
- ll |grep java ;查找帶java關鍵字的文件夾及文件
-
(實際上就是在Linux系統中下載了一個插件)下了了此安裝包后就可以實現win系統到linux之間拉文件拉
- 文件
-
等待下載完了就可以輸入:
- rz 從win系統中選擇文件上傳到Linux系統中
- sz 文件名 選擇Linux系統的文件復制到win系統中
- 常用的組合命令:
- -z 是否需要用gzip壓縮。
- -c 建立一個壓縮文件的參數指令(create) –壓縮
- -x 解開一個壓縮文件的參數指令(extract) –解壓
- -v 壓縮的過程中顯示文件(verbose)
- -f 使用檔名,在f之后要立即接檔中(file)
- 常用解壓參數組合:zxvf
- 常用壓縮參數組合:zcvf
- 解壓命令:
- tar -zxvf redis-3.2.8.tar.gz ;解壓到當前文件夾
- tar -zxvf redis-3.2.8.tar.gz -C /opt/java/ ;解壓到指定目錄
- 壓縮命令:(注意 語法有點反了,我反正每次都搞反)
- tar -zcvf redis-3.2.8.tar.gz redis-3.2.8/ ;語法 tar -zcvf 壓縮后的名稱 要壓縮的
- 文件
- tar -zcvf 壓縮后的文件(可指定目錄) 要壓縮的文件(可指定目錄)
- 常用組合:ps -ef 標准的格式查看系統進程
- ps -aux BSD格式查看系統進程
- ps -aux|grep redis BSD格式查看進程名稱帶有redis的系統進程(常用技巧)
- //顯示進程的一些屬性,需要了解(ps aux)
- USER //用戶名
- PID //進程ID號,用來殺死進程的
- %CPU //進程占用的CPU的百分比
- %MEM //占用內存的的百分比clear 清屏命令。(強迫症患者使用)
- ifconfifig命令
- ping (用於檢測與目標的連通性)語法:ping ip地址
- free 命令 (顯示系統內存)
- top 命令
- netstat 命令
- VSZ //該進程使用的虛擬內存量(KB)
- RSS //該進程占用的固定內存量(KB)
- STAT //進程的狀態
- START //該進程被觸發啟動時間
- TIME //該進程實際使用CPU運行的時間
- kill 命令用來中止一個進程。(要配合ps命令使用,配合pid關閉進程)
- (ps類似於打開任務管理器,kill類似於關閉進程)
- kill -5 進程的PID ;推薦,和平關閉進程
- kill -9 PID ;不推薦,強制殺死進程
- 用於查看和更改網絡接口的地址和參數,包括IP地址、網絡掩碼、廣播地址,使用權限是超級用戶。(一般是用來查看的,很少更改)
35.Linux 中主要有哪幾種內核鎖?
36.Linux 中的用戶模式和內核模式是什么含意?
37.怎樣申請大塊內核內存?
38.用戶進程間通信主要哪幾種方式?
39.通過伙伴系統申請內核內存的函數有哪些?
在物理頁面管理上實現了基於區的伙伴系統(zone based buddy system)。對不同區的內存使用單獨的伙伴系統(buddy system)管理,而且獨立地監控空閑頁。相應接口alloc_pages(gfp_mask, order),_ _get_free_pages(gfp_mask, order)等。
40.Linux 虛擬文件系統的關鍵數據結構有哪些?(至少寫出四個)
struct super_block,struct inode,struct file,struct dentry;
41.對文件或設備的操作函數保存在那個數據結構中?
struct file_operations
42.Linux 中的文件包括哪些?
執行文件,普通文件,目錄文件,鏈接文件和設備文件,管道文件。
43.創建進程的系統調用有那些?
clone(),fork(),vfork();系統調用服務例程:sys_clone,sys_fork,sys_vfork;
44.調用 schedule()進行進程切換的方式有幾種?
- 1.系統調用 do_fork();
- 2.定時中斷 do_timer();
- 3.喚醒進程 wake_up_process
- 4.改變進程的調度策略 setscheduler();
- 5.系統調用禮讓 sys_sched_yield();
45.Linux 調度程序是根據進程的動態優先級還是靜態優先級來調度進程的?
Liunx 調度程序是根據根據進程的動態優先級來調度進程的,但是動態優先級又是根據靜態優先級根據算法計算出來的,兩者是兩個相關聯的值。因為高優先級的進程總是比低優先級的進程先被調度,為防止多個高優先級的進程占用 CPU 資源,導致其他進程不能占有 CPU, 所以引用動態優先級概念。
46.進程調度的核心數據結構是哪個?
struct runqueue
47.如何加載、卸載一個模塊?
insmod 加載,rmmod 卸載
48.模塊和應用程序分別運行在什么空間?
模塊運行在內核空間,應用程序運行在用戶空間
49.Linux 中的浮點運算由應用程序實現還是內核實現?
應用程序實現,Linux 中的浮點運算是利用數學庫函數實現的,庫函數能夠被應用程序鏈接后 調用,不能被內核鏈接調用。這些運算是在應用程序中運行的,然后再把結果反饋給系統。 Linux 內核如果一定要進行浮點運算,需要在建立內核時選上 math-emu,使用軟件模擬計算 浮點運算,據說這樣做的代價有兩個:用戶在安裝驅動時需要重建內核,可能會影響到其他的應用程序,使得這些應用程序在做浮點運算的時候也使用 math-emu,大大的降低了效率。
50.模塊程序能否使用可鏈接的庫函數?
模塊程序運行在內核空間,不能鏈接庫函數。
51.TLB 中緩存的是什么內容?
TLB,頁表緩存,當線性地址被第一次轉換成物理地址的時候,將線性地址和物理地址的對應 放到 TLB 中,用於下次訪問這個線性地址時,加快轉換速度。
52.Linux 中有哪幾種設備?
字符設備和塊設備。網卡是例外,他不直接與設備文件對應,mknod 系統調用用來創建設備文件。
53.字符設備驅動程序的關鍵數據結構是哪個?
字符設備描述符 struct cdev,cdev_alloc()用於動態的分配 cdev 描述符,cdev_add()用於注冊一個 cdev 描述符,cdev 包含一個 struct kobject 類型的數據結構它是核心的數據結構
54.設備驅動程序包括哪些功能函數?
open(),read(),write(),llseek(),realse();
55.如何唯一標識一個設備?
Linux 使用一個設備編號來唯一的標示一個設備,設備編號分為:主設備號和次設備號,一般主設備號標示設備對應的驅動程序,次設備號對應設備文件指向的設備,在內核中使用 dev_t 來表示設備編號,一般它是 32 位長度,其中 12 位用於表示主設備號,20 位用於表示次設備號, 利用 MKDEV(int major,int minor);用於生成一個 dev_t 類型的對象。
56.Linux 通過什么方式實現系統調用?
靠軟件中斷實現的,首先,用戶程序為系統調用設置參數,其中一個編號是系統調用編號,參數設置完成后,程序執行系統調用指令,x86 上的軟中斷是有 int 產生的,這個指令會導致一個異常,產生一個事件,這個事件會導致處理器跳轉到內核態並跳轉到一個新的地址。並開始處理那里的異常處理程序,此時的異常處理就是系統調用程序。
57.Linux 軟中斷和工作隊列的作用是什么?
Linux 中的軟中斷和工作隊列是中斷處理。
- 1.軟中斷一般是“可延遲函數”的總稱,它不能睡眠,不能阻塞,它處於中斷上下文,不能進城切換,軟中斷不能被自己打斷,只能被硬件中斷打斷(上半部),可以並發的運行在多個 CPU 上。所以軟中斷必須設計成可重入的函數,因此也需要自旋鎖來保護其數據結構。
- 2.工作隊列中的函數處在進程上下文中,它可以睡眠,也能被阻塞,能夠在不同的進程間切換。已完成不同的工作。可延遲函數和工作隊列都不能訪問用戶的進程空間,可延時函數在執行時不可能有任何正在運行的進程,工作隊列的函數有內核進程執行,他不能訪問用戶空間地址。