1. 程式人生 > 其它 >連續四年百度Java崗必問面試題!講的太清楚了

連續四年百度Java崗必問面試題!講的太清楚了

連續四年百度Java崗必問面試題!講的太清楚了

1、什麼是Nginx,談談個人都理解,專案中是否用到,為什麼要用,有什麼優點?

Nginx ,是一個 Web 伺服器和反向代理伺服器用於 HTTP、HTTPS、SMTP、POP3 和 IMAP 協議。

主要功能如下:

1、正向、反向代理
2、負載均衡、分流
3、虛擬主機(繫結host)

優點:

跨平臺、配置簡單,非阻塞、高併發連線、記憶體消耗小、成本低廉。

2、正向代理和反向代理的區別是什麼?

正向代理是一個位於客戶端和原始伺服器之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定原始伺服器,然後代理向原始伺服器轉交請求並將獲得的內容返回給客戶端。代理伺服器和客戶端處於同一個區域網內。

比如說fanqiang。我知道我要訪問谷歌,於是我就告訴代理伺服器讓它幫我轉發。

反向代理實際執行方式是代理伺服器接受網路上的連線請求。它將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給網路上請求連線的客戶端 。代理伺服器和原始伺服器處於同一個區域網內。

比如說我要訪問taobao,對我來說不知道圖片、json、css 是不是同一個伺服器返回回來的,但是我不關心,是反向代理 處理的,我不知道原始伺服器。

3、Nginx如何處理HTTP請求的?

它結合多程序機制(單執行緒)和非同步非阻塞方式。

1、多程序機制(單執行緒)

伺服器每當收到一個客戶端時,就有 伺服器主程序 ( master process )生成一個 子程序( worker process )出來和客戶端建立連線進行互動,直到連線斷開,該子程序就結束了。

2、非同步非阻塞機制

每個工作程序 使用 非同步非阻塞方式 ,可以處理 多個客戶端請求 。運用了epoll模型,提供了一個佇列,排隊解決。

當某個 工作程序 接收到客戶端的請求以後,呼叫 IO 進行處理,如果不能立即得到結果,就去 處理其他請求 (即為 非阻塞 );而 客戶端 在此期間也 無需等待響應 ,可以去處理其他事情(即為 非同步 )。

當 IO 返回時,就會通知此 工作程序 ;該程序得到通知,暫時 掛起 當前處理的事務去 響應客戶端請求 。

4、Nginx的master和worker是如何工作的?

這跟Nginx的多程序、單執行緒有關。(一個程序只有一個主執行緒)。

為什麼要用單執行緒?

採用單執行緒來非同步非阻塞處理請求(管理員可以配置Nginx主程序的工作程序的數量),不會為每個請求分配cpu和記憶體資源,節省了大量資源,同時也減少了大量的CPU的上下文切換,所以才使得Nginx支援更高的併發。

簡單過程:

主程式 Master process 啟動後,通過一個 for 迴圈來 接收 和 處理外部訊號 ;

主程序通過 fork() 函式產生 worker 子程序 ,每個子程序執行一個 for迴圈來實現Nginx伺服器對事件的接收和處理 。

詳細過程:

1、Nginx 在啟動後,會有一個 master 程序和多個相互獨立的 worker 程序。
2、master 接收來自外界的訊號,先建立好需要 listen 的 socket(listenfd) 之後,然後再 fork 出多個 worker 程序,然後向各worker程序傳送訊號,每個程序都有可能來處理這個連線。
3、所有 worker 程序的 listenfd 會在新連線到來時變得可讀 ,為保證只有一個程序處理該連線,所有 worker 程序在註冊 listenfd 讀事件前搶佔 accept_mutex ,搶到互斥鎖的那個程序註冊 listenfd 讀事件 ,在讀事件裡呼叫 accept 接受該連線。
4、當一個 worker 程序在 accept 這個連線之後,就開始讀取請求、解析請求、處理請求,產生資料後,再返回給客戶端 ,最後才斷開連線。

5、Nginx 常用命令有哪些?

  • 啟動 nginx 。
  • 停止 nginx -s stop 或 nginx -s quit 。
  • 重啟 nginx -s reload 或 service nginx reload 。
  • 過載指定配置檔案 .nginx -c /usr/local/nginx/conf/nginx.conf 。
  • 檢視 nginx 版本 nginx -v 。

6、nginx中500、502、503、504 有什麼區別?

500

Internal Server Error 內部服務錯誤,比如指令碼錯誤,程式語言語法錯誤。

502

Bad Gateway錯誤,閘道器錯誤。比如伺服器當前連線太多,響應太慢,頁面素材太多、頻寬慢。

503

Service Temporarily Unavailable,服務不可用,web伺服器不能處理HTTP請求,可能是臨時超載或者是伺服器進行停機維護。

504

Gateway timeout 閘道器超時,程式執行時間過長導致響應超時,例如程式需要執行20秒,而nginx最大響應等待時間為10秒,這樣就會出現超時。

言盡於此,完結

無論是一個初級的 coder,高階的程式設計師,還是頂級的系統架構師,應該都有深刻的領會到設計模式的重要性。

  • 第一,設計模式能讓專業人之間交流方便,如下:

程式設計師A:這裡我用了XXX設計模式

程式設計師B:那我大致瞭解你程式的設計思路了

  • 第二,易維護

專案經理:今天客戶有這樣一個需求…

程式設計師:明白了,這裡我使用了XXX設計模式,所以改起來很快

  • 第三,設計模式是程式設計經驗的總結

程式設計師A:B,你怎麼想到要這樣去構建你的程式碼

程式設計師B:在我學習了XXX設計模式之後,好像自然而然就感覺這樣寫能避免一些問題

  • 第四,學習設計模式並不是必須的

程式設計師A:B,你這段程式碼使用的是XXX設計模式對嗎?

程式設計師B:不好意思,我沒有學習過設計模式,但是我的經驗告訴我是這樣寫的

從設計思想解讀開源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等原始碼解讀,我都已收集整理全套,篇幅有限,這塊只是詳細的解說了23種設計模式,整理的檔案如下圖一覽無餘!

資料領取方式:點選這裡下載

蒐集費時費力,能看到此處的都是真愛!