天天看點

拓展面試題之-linux、mongodb、nginx、php面試題

1 為什麼 Linux要分為使用者空間和核心空間?

解析

1 在 CPU 的所有指令中,有些指令是非常危險的,如果錯用,将導緻系統崩潰,比如清記憶體、設定時鐘等。如果允許所有的程式都可以使用這些指令,那麼系統崩潰的機率将大大增加。

2 CPU 實作了不同的工作模式,不同模式下 CPU 可以執行的指令和通路的寄存器不同,使用者空間不需要關注這種不同,隻需調用核心空間接口即可。

2 談談你對5種常用IO模型的了解?

3 請說說一次網絡請求的完整過程?

4 如何提高linux最大檔案打開數?

ulimit -a 或者 ulimit -n

更改方法:

臨時生效:

ulimit -SHn 10000 ,ulimit指令分軟限制和硬限制,加-H就是硬限制,加-S就是軟限制,預設是軟限制,如果沒加-H或-S,就是兩個參數一起改變

軟限制和硬限制的差別?

硬限制就是實際的限制,而軟限制是警告限制,他隻會給出警告

永久生效:

如果想ulimit的數值永久生效,必須修改配置檔案/etc/security/limits.conf,在該配置檔案中添加

* soft nofile 65535
* hard nofile 65535
echo "* soft nofile 65535“ >> /etc/security/limits.conf
echo "* hard nofile 65535“ >> /etc/security/limits.conf
           

5 linux如何檢視背景所有php程序?

ps -ef | grep php

6 linux 系統日志檔案在哪?

/var/log/messages

7 檢視所有環境變量

env

8 通過什麼指令查找執行指令?

which

9 怎麼對指令進行取别名?

alias la = ‘ls -a’

10 如何殺掉程序?

kill指令用于終止程序

-9 強迫程序立即停止

kill -9 [pid ]

11 LINUX中如何檢視某個端口是否被占用?

netstat -anp |grep 端口号

12 将/test1目錄下的file1複制到/test3目錄,并将檔案名改為file2

cp /test1/file1 /test3/file2

13 如何在Linux下更改權限?

如果是系統管理者或者檔案或目錄的所有者,則可以使用 chmod指令授予權限。使用+符号添權重限或者-符号拒絕權限,以及以下任意字母:u(使用者),g(組),o(其他),a(所有),r(讀取),w(寫入),x(執行)。

例如:

chmod go + rw file1.txt 授予對檔案file1.txt讀寫通路權限,該檔案配置設定給組合其他組

14 什麼是以點開頭的檔案名?

以點開頭的檔案是隐藏檔案。這些檔案是包含重要資料或者設定資訊的配置檔案。将這些檔案設定為隐藏會使其不太可能被意外删除。

15 linux系統中使用者有哪幾種?

所有者 user u

所屬組 group g

其他使用者 other o

u+g+o =a

16 切換到一個目錄裡面,需要哪些權限?

rx

17 請說說nginx如何優化?

18 談談你對前後端分離(動靜分離)的了解?

  1. 提高速度

    (1)靜态資源可以緩存在浏覽器,減少帶寬

    (2)不再用php進行模闆解析,模闆解析放到前端js了,如vue.js

    (3)很多邏輯可以放到前端js,這樣php做的事情少了,資源空出來了

    (4)靜态資源可以放入CDN進行緩存加速

    (5)不占用伺服器的帶寬

  2. 開發速度

    前後端可以并行開發

19 nginx負載均衡如何實作高可用?

  1. 故障切換
  2. 健康監測

20 mongodb和redis的差別是什麼?

就Redis和MongoDB來說,我們一般成為Redis緩存,MongoDB資料庫。

Redis主要把資料存儲在記憶體中,其緩存的性質遠大于其”資料存儲“的性質,其中資料的增删改查也隻是像變量操作一樣簡單。

MongoDB是一個存儲資料的系統,增删改查可以添加很多where條件,像SQL資料庫一樣靈活。

1.記憶體管理機制

Redis資料全部存在記憶體,定期寫入磁盤,當記憶體不夠時,可以選擇指定的LRU算法删除資料。

mongodb資料存在記憶體,由linux系統mmap實作,當記憶體不夠時,隻将熱點資料放入記憶體,其他資料存在磁盤。

2.支援的資料結構

Redis支援豐富的資料結果,如string ,set ,hash,list等

MongoDB資料結果比較單一,但支援豐富的資料表達,索引。類似關系型資料庫,支援的查詢語言比較豐富。

3.資料量和性能

當實體記憶體夠用時,redis>mongodb>mysql

當實體記憶體不夠用時,redis和mongodb都會使用虛拟記憶體。

實際上,如果Redis要開始虛拟記憶體,很明顯要麼增加記憶體條,要麼更換資料庫

但mongodb不一樣,隻要業務能保證,冷熱資料的讀寫比,使得熱資料在實體記憶體中,mmap的交換較少。

mongodb 還是能夠保證性能。

4.性能

mongodb依賴記憶體,TPS較高;Redis依賴記憶體,TPS非常高。性能上,Redis 優于mongodb.

5.可靠性

MongoDB從1.8版本後,采用binlog方式(MySQL也使用這種方式)支援持久化,增加可靠性;

Redis依賴快照進行持久化;AOF增加可靠性;增加可靠性的同時,影響通路性能。

可靠性上MongoDB優于Redis

6.資料分析

MongoDB内置資料分析功能(mapreduce),而Redis不支援。

7.事務支援

Redis事務支援比較弱,隻能保證事務中的每個操作連續執行;MongoDB不支援事務

8.叢集

MongoDB叢集技術比較成熟,Redis從3.0開始支援叢集。

21 MongoDB中的分片是什麼?

在多台計算機上存儲資料記錄的過程稱為分片。這是一種MongoDB方法,可以滿足資料增長的需求。他是資料庫或搜尋引擎中資料的水準分區。每個分區稱為分片或資料庫分片。

解析什麼是副本集?

副本集是一組托管相同資料集的MongoDB執行個體。在副本集上,一個節點是主節點,另一個是輔助節點。從主節點到輔助節點,所有資料都會複制

22 談談你對mongodb叢集的了解?

23 PHP的代碼執行流程?

拓展面試題之-linux、mongodb、nginx、php面試題

PHP拿到一段代碼後,經過詞法解析、文法解析等階段後,源程式會被翻譯成一個一個的指令(opcodes),然後ZEND虛拟機會順次執行這些指令完成操作。

24 PHP-FPM配置如何優化?

  1. 一種是直接開啟指定數量的php-fpm程序,不再增加或者減少;

    pm = static(靜态)

    pm.max_children: 開啟的php-fpm程序數量

2.另一種是開啟一定數量的php-fpm程序,當請求量變大時,動态的增加php-fpm程序數到上限。

pm = dynamic(動态)在動态方式下他限定php-fpm的最大程序數(這裡要注意pm.max_spare_servers的值隻能小于等于pm.max_children)pm.max_children:開啟的php-fpm程序數量pm.start_servers:動态方式下的起始php-fpm程序數量。pm.min_spare_servers:動态方式空閑狀态下的最小php-fpm程序數量。pm.max_spare_servers:動态方式空閑狀态下的最大php-fpm程序數量。

如果pm設定為static,系統會開啟設定的數量個php-fpm程序。如果pm設定為dynamic,系統會在php-fpm運作開始時啟動pm.start_servers個php-fpm程序,然後根據系統的需求動态在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm程序數。

那麼,對于伺服器,選擇哪種執行方式比較好呢?事實上,跟Apache一樣,運作的PHP程式在執行完成後,或多或少會有記憶體洩露的問題。這也是為什麼開始時一個php-fpm程序隻占用3M左右記憶體,運作一段時間後就會上升到20-30M的原因了。

是以,動态方式因為會結束掉多餘的程序,可以回收釋放一些記憶體,是以推薦在記憶體較少的伺服器或者VPS上使用。具體最大數量根據記憶體/20M 得到。比如說512M的VPS,建議pm.max_spare_servers設定為20(512*0.8/20)。至于pm.min_spare_servers,則建議根據伺服器的負載情況來設定,比較合适的值在5~10之間。

然後對于比較大記憶體的伺服器來說,設定為靜态的話會提高效率。因為頻繁開關php-fpm程序也會有時滞,是以記憶體夠大的情況下開靜态效果會更好。數量也可以根據記憶體/30M 得到。比如說2GB記憶體的伺服器,可以設定為50;4GB記憶體可以設定為100等。

比如,如果是512M的vps,設定的參數如下:代碼示例:

pm=dynamic
pm.max_children=20
pm.start_servers=5
pm.min_spare_servers=5
pm.max_spare_servers=20

           

可以最大的節省記憶體并提高執行效率。

25 PHP的核心資料結構是什麼?

HashTable

26 PHP底層原理?

拓展面試題之-linux、mongodb、nginx、php面試題

從圖上可以看出,php從下到上是一個4層體系

①Zend引擎 Zend整體用純c實作,是php的核心部分,它将php代碼翻譯(詞法、文法解析等一系列編譯過程)為可執行opcode的處理并實作相應的處理方法、實作了基本的資料結構(如hashtable、oo)、記憶體配置設定及管理、提供了相應的api方法供外部調用,是一切的核心,所有的外圍功能均圍繞zend實作。

②Extensions圍繞着zend引擎,extensions通過元件式的方式提供各種基礎服務,我們常見的各種内置函數(如array系列)、标準庫等都是通過extension來實作,使用者也可以根據需要實作自己的extension以達到功能擴充、性能優化等目的(如貼吧正在使用的php中間層、富文本解析就是extension的典型應用)。

③Sapi Sapi全稱是Server Application Programming Interface,也就是服務端應用程式設計接口,sapi通過一系列鈎子函數,使得php可以和外圍互動資料,這是php非常優雅和成功的一個設計,通過sapi成功的将php本身和上層應用解耦隔離,php可以不再考慮如何針對不同應用進行相容,而應用本身也可以針對自己的特點實作不同的處理方式。後面将在sapi章節中介紹

④上層應用這就是我們平時編寫的php程式,通過不同的sapi方式得到各種各樣的應用模式,如通過webserver實作web應用、在指令行下以腳本方式運作等等。

構架思想:

引擎(Zend)+元件(ext)的模式降低内部耦合中間層(sapi)隔絕web server和php

如果php是一輛車,那麼

車的架構就是php本身

Zend是車的引擎(發動機)

Ext下面的各種元件就是車的輪子

Sapi可以看做是公路,車可以跑在不同類型的公路上

而一次php程式的執行就是汽車跑在公路上。

是以,我們需要:性能優異的引擎+合适的車輪+正确的跑道

27 同時将某個檔案夾的屬主改為 oracle ,屬組改為 db

chown -R oracle:dba test

28 給指定檔案的屬主和屬組所有權限(包括讀、寫、執行)

chmod ug+rwx file.txt

29 檢視系統負載?

uptime

30 檢視記憶體使用情況?

free -m

31 設定一個每十分鐘執行一次的計劃任務

*/10 * * * * /test.php

32 linux解壓tar檔案

tar xvf test.tar

33 vim如何清空一個檔案中的所有内容?

ggdG

34 sed全局替換?

sed ‘s/要被替換的字元串/新的字元串/g’ test.txt

35 查找/usr目錄下檔案大小大于100MB的檔案,并按照檔案大小由大到小排列,并顯示檔案大小

find / -type f -size +100M | xargs ls -lh -S

36 在一個檔案夾中遞歸查詢包含test這個字元串的檔案

grep -r “test” *

37 linux全盤查找指定檔案名的檔案?

find / -name test.txt

38 linux如何檢視磁盤情況?

df -lh

39 linux挂載指令?

mount /dev/had1 /mnt

40 linux無提示删除xxx目錄下面的所有檔案?

rm -rf xxx

41 用什麼指令檢視ip位址及接口資訊?

ifconfig

繼續閱讀