操作系統-面試題

操作系統

  1. Linux系統下你關注過哪些內核參數,說說你知道的
  • centos 內核配置文件爲 /etc/sysctl.conf . 修改參數後啓用:sysctl -p
    • net.ipv4.tcp_tw_reuse:允許將TIME-WAIT sockets重新用於新的TCP連接,默認爲0,表示關閉.
    • net.ipv4.tcp_tw_recycle: 表示開啓TCP連接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉
    • net.ipv4.tcp_fin_timeout : 修改系統默認的 TIMEOUT 時間。
  1. Linux下IO模型有幾種,各自的含義是什麼。
  • IO的本質是socket的讀取,數據先拷貝到內核的緩衝區中,然後拷貝到應用程序的地址空間
  • 五種IO模型
    • BIO:同步阻塞io
    • NIO: 同步非阻塞io
    • 多路複用io
    • 信號驅動io:當數據準備完成之後,會主動的通知用戶進程數據已經準備完成,即對用戶進程做一個回調
    • 異步io: 當用戶進程發起系統調用後,立刻就可以開始去做其它的事情,然後直到I/O執行的兩個階段(數據準備 和 數據複製)都完成之後,內核會給用戶進程發送通知,告訴用戶進程操作已經完成了。
  1. epoll和poll有什麼區別。
  • select、poll、epoll 這三個函數式Linux系統中io複用的系統調用函數
    • select的工作流程:
      單個進程就可以同時處理多個網絡連接的io請求(同時阻塞多個io操作)。基本原理就是程序呼叫select,然後整個程序就阻塞了,這時候,kernel就會輪詢檢查所有select負責的fd,當找到一個client中的數據準備好了,select就會返回,這個時候程序就會系統調用,將數據從kernel複製到進程緩衝區
    • poll的原理與select非常相似,poll是鏈式的,沒有最大連接數的限制
    • select,poll實現需要自己不斷輪詢所有fd集合,直到設備就緒,期間可能要睡眠和喚醒多次交替
    • select,poll每次調用都要把fd集合從用戶態往內核態拷貝一次,並且要把current往設備等待隊列中掛一次,而epoll只要一次拷貝,而且把current往等待隊列上掛也只掛一次
  1. 平時用到哪些Linux命令。
  • cd:切換工作目錄至指定‘目錄’
  • ls:用來顯示目標列表
  • ps -ef|grep java :查看java相關進程列表
  • tail -100f xx.log:顯示文件最新追加的內容100行
  • kill -9 進程號:強制終止指定‘進程號’
  • top : 實時動態地查看系統的整體運行情況
  • free -m 顯示當前系統未使用的和已使用的內存數目
  • pwd : 以絕對路徑的方式顯示用戶當前工作目錄
  1. 用一行命令查看文件的最後五行。
  • tail -n 5
  1. 用一行命令輸出正在運行的java進程。
  • ps -ef|grep java
  1. 進程和線程的區別。
  • 進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
  • 在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
  • 系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
  1. top 命令之後有哪些內容,有什麼作用
  • 統計信息區
    • 第一行:任務隊列信息,當前時間等
    • 第二行:進程信息,進程總數,正在運行的進程數等
    • 第三行:CPU信息,用戶控件所佔CPU百分比等
    • 第四行:內存信息
    • 第五行:swap信息,分區總量
  • 進程信息區
    • PID:進程id
    • PPID:父進程id
    • UID:進程所有者的id
    • TIME:進程使用的CPU時間總計,單位秒
  • top參數說明
    • d: 指定每兩次屏幕信息刷新之間的時間間隔。當然用戶可以使用s交互命令來改變之。
    • p: 通過指定監控進程ID來僅僅監控某個進程的狀態。
    • q: 該選項將使top沒有任何延遲的進行刷新。如果調用程序有超級用戶權限,那麼top將以儘可能高的優先級運行。
    • i: 使top不顯示任何閒置或者僵死進程。
  1. 線上CPU爆高,請問你如何找到問題所在。
  • top 命令等位高CPU佔用應用的pid
  • ps aux|grep pid 進一步確認應用
  • 查詢顯示線程列表:ps -mp pid -o THREAD,tid,time
  • 將需要的線程id 轉爲16進制格式:printf “%x\n” tid
  • 打印線程堆棧信息 jstack pid |grep tid -A 30
  • 定位到具體代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章