搜尋
首頁後端開發php教程PHP面試題之概念題最新總結

本篇文章給大家分享PHP面試題概念題最新匯總,有一定的參考價值,需要的朋友可以參考一下,希望對大家有所幫助。

相關推薦:《PHP面試題之應用題最新匯總

1. HTTP 狀態中狀態碼的意義

  • 302:暫時轉移成功,請求的內容已轉移到新位置。
  • 401:未授權。
  • 403:禁止存取 。
  • 500:伺服器內部錯誤

2. 傳值與傳引用

  • 傳值:是把實參的值賦值給形參,形參的修改,不會影響實參的值。
  • 傳引用 :將實參的位址傳遞形參,實參和形參則指向同一儲存空間,對行參的修改將影響實參的值。

3. 設計模式

創建型:員工當生抽(原型、工廠、單例、生成器、抽象工廠)

結構型:是敲響外帶組裝(適配器、橋接、享元、外觀、代理、組合、裝飾)

行為型:被責命碟中裝模防觀測(備忘錄、責任鏈、指令、迭代器、中介者、狀態、範本方法、訪客、觀察者、策略)

#4. 程式碼管理

通常一個專案是由一個團隊去開發,每個人將自己寫好的程式碼提交到版本伺服器,由專案負責人依照版本管理,方便版本的控制,提高開發效率,保證需要時可以回到舊版。

5. XSS 攻擊

XSS(跨站腳本攻擊)本質是攻擊者在web 頁面插入惡意程式碼,當使用者瀏覽該頁面之時,嵌入其中的程式碼會被執行,從而達到惡意攻擊使用者的目的。

如何防止?

答案:使用 htmlspecialchars() 函數將提交的內容過濾,使字串裡面的特殊符號實體化。

6. CGI、FastCGI、PHP-FPM 關係圖解

在整個網站架構中,Web Server(如Apache)只是內容的分發者。舉個栗子,如果客戶端請求的是 index.html,那麼Web Server會去檔案系統中找到這個文件,發送給瀏覽器,這裡分發的是靜態資料。

PHP面試題之概念題最新總結

如果請求的是 index.php,Web Server 收到這個請求後,就會啟動對應的 CGI 程序,這裡就是 PHP 的解析器。接下來PHP解析器會解析php.ini 文件,初始化執行環境,然後處理請求,再以規定CGI 規定的格式返回處理後的結果,退出進程,Web server 再把結果回傳給瀏覽器,這就是一個完整的動態PHP Web存取流程。

PHP面試題之概念題最新總結

  • Web Server :一般指 Apache、Nginx、IIS、Lighttpd、Tomcat 等伺服器。
  • Web Application: 一般指 PHP、Java、Asp.net 等應用程式。
  • CGI:是 Web Server 與 Web Application 之間資料交換的一種協定。
  • FastCGI:同 CGI,是一種通訊協議,但比 CGI 在效率上做了一些最佳化。同樣,SCGI 協定與 FastCGI 類似。
  • PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協定的介面程式。
  • PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協定的介面程序,額外也提供了相對智慧一些任務管理。

7. MVC

MVC 是一種開發模式,主要分為三個部分:

  • m(model),也就是模型,負責資料的操作;
  • v(view),也就是視圖,負責前台的顯示;
  • c(controller) ,也就是控制器,負責業務邏輯

8. PHP 的垃圾收集機制

PHP 可以自動進行記憶體管理,清除不再需要的對象。 PHP 使用了引用計數(reference counting)的垃圾回收(garbage collection)機制。每個對像都內含一個引用計數器,當 reference 連接到對象,計數器加1。當reference離開生存空間或被設為NULL,計數器會減1。當某個物件的引用計數器為零時,PHP 會釋放其所佔的記憶體空間。

9. CLI  模式的生命週期


階段 呼叫函數 作用
模組初始化階段 php_module_startup() 主要進行PHP 框架, zend 引擎的初始化操作
請求初始化階段 php_request_startup() 對fpm 來說, 是在worker 進程讀取,並解析完請求資料後的一個階段
腳本執行階段 php_execute_script() 解析php 語法,產生抽象語法樹
#請求關閉階段 php_request_shutdown() #請求結束時執行
模組關閉階段 #php_module_shutdown () 當進程關閉時執行
#

10. php-fpm 運行機制

FastCGI 是Web 伺服器(如Nginx,Apache )和處理程序(如PHP )之間的一種通訊協議,它是一種應用層通訊協定。 php-fpm 是 PHP FastCGI 運行模式的一個阻塞的單線程模型進程管理器,單 master, 多 worker 結構, 同一個 worker 進程同時只能處理一個請求。 PHP 處理完請求後將解析的結果再透過 FastCGI 協定轉送給 Web 伺服器,Web 伺服器再傳回給使用者。

基本實作

PHP-FPM 是fast-cgi 的實作, 提供了行程管理的功能, 包含master, worker 兩種行程:

  • master 創建並監控socket, fork 多個worker 進程, 透過共享記憶體獲取worker 的狀態, 進而透過訊號控制worker 進程
  • worker 自由accept 請求

worker—請求處理

worker 進程不斷Accept 請求,有請求到達後,將讀取並解析FastCGI 協定的數據,解析完成後開始執行PHP 腳本,執行完成後關閉請求。各worker處理請求的步驟如下:

  1. 等待請求: worker 進程阻塞在 fcgi_accept_request() 中等待請求。
  2. 解析請求: fastcgi 請求到達後被 worker 接收,然後開始接收並解析請求數據,直到 request 資料完全到達。
  3. 請求初始化:執行 php_request_startup()。
  4. 執行PHP腳本。
  5. 關閉請求。

worker 進程的結構裡有個參數用來記錄worker 目前所處的階段fpm_scoreboard_proc_s->request_stage,一次請求過程中這個值會先後被設定為以下值:

  • FPM_REQUEST_ACCEPTING:等待要求階段。
  • FPM_REQUEST_READING_HEADERS: 讀取 fastcgi 要求 header 階段。
  • FPM_REQUEST_INFO:取得請求資訊階段,此階段是將要求的method,query string,request uri 等資訊儲存到各worker 進程的fpm_scoreboard_proc_s 結構中,此操作需要加鎖,因為master 進程也會操作此結構。
  • FPM_REQUEST_EXECUTING:執行PHP腳本階段。
  • FPM_REQUEST_END:沒有使用。
  • FPM_REQUEST_FINISHED:請求處理完成。

master–進程管理

master 在調用完fpm_run() 後不再返回,而是進入一個事件循環中,此後master 將始終圍繞著幾個事件進行處理,在具體分析這幾個事件之前,首先介紹Fpm 三種不同的進程管理方式,具體要使用哪種模式可以在conf 配置中透過pm 指定,例如pm=dynamic。

  • 靜態模式(static):這種方式比較簡單,在啟動時 master 根據 pm.max_children 配置 fork 出對應數量的 worker 進程,也就是 worker 進程數是固定不變的。
  • 動態模式(dynamic):這種模式比較常用,在 Fpm 啟動時會根據 pm.start_servers 配置初始化一定數量的 worker。運行期間如果 master 發現空閒 worker 數低於 pm.min_spare_servers 配置數(表示請求比較多,worker 處理不過來了)則會 fork worker 進程,但總的 worker 數不能超過 pm.max_children。如果 master 發現空閒 worker 數超過了 pm.max_spare_servers(表示閒著的 worker 太多了)則會殺掉一些 worker,避免佔用過多資源,master 透過這四個值來動態控制 worker 的數量。
  • 按需模式(ondemand):這種模式很像傳統的cgi,在啟動時不分配worker 進程,等到有請求了後在通知master 進程f ork worker 進程,也就是來了請求後再fork 子程序進行處理。總的 worker 數不超過 pm.max_children,處理完成後 worker 程序不會立即退出,當空閒時間超過 pm.process_idle_timeout 後再退出。

master 程序進入 fpm_event_loop() 事件循環,在這個方法中 master 將循環處理 master 註冊的幾個 IO 及定時器事件,當有事件觸發時將回調具體的 handler 進行處理。

11. 記憶體分配流程

#預先申請一塊內存在PHP 內部管理, 應用在申請記憶體時, 會從這部分申請, 釋放時也是先釋放回到記憶體管理中。這樣設計話可以避免小記憶體的申請釋放對作業系統上的額外效能的消耗。

12. php 陣列的實作

PHP 陣列的底層實作是散列表(也叫hashTable ),散列表是根據鍵(Key)直接存取記憶體存儲位置的資料結構,它的key - value 之間存在一個映射函數,可以根據key 透過映射函數得到的散列值直接索引到對應的value 值,無需透過關鍵字比較,在理想情況下,不考慮散列衝突,散列表的查找效率是非常高的,時間複雜度是O (1)。

13. 依賴注入

概念:指服務依賴的其他服務不透過服務自己創建的方式, 而是由外部傳入的方式。

如何實現的?答:通常來說使用反射實現的.。

能解決什麼問題?答:降低服務模組之間的耦合度,編寫程式碼時不用考慮外部服務的具體實現,只需要依據介面來使用服務即可。

14. 物件導向

概念:物件導向是程式的一種設計方式,它利於提高程式的重用性,使程式結構更加清晰。

主要特徵:封裝、繼承、多型。

五大基本原則: 單一職責原則;開放封閉原則;替換原則; 依賴原則; 介面分離原則。


本篇首發在 LearnKu.com 網站。

相關推薦:《2021年PHP面試題大匯總(收藏)

#

以上是PHP面試題之概念題最新總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
使用數據庫存儲會話的優點是什麼?使用數據庫存儲會話的優點是什麼?Apr 24, 2025 am 12:16 AM

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

您如何在PHP中實現自定義會話處理?您如何在PHP中實現自定義會話處理?Apr 24, 2025 am 12:16 AM

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

什麼是會話ID?什麼是會話ID?Apr 24, 2025 am 12:13 AM

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

您如何在無狀態環境(例如API)中處理會議?您如何在無狀態環境(例如API)中處理會議?Apr 24, 2025 am 12:12 AM

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。

您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),