中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP面試題之概念題有哪些

發布時間:2021-04-07 11:13:40 來源:億速云 閱讀:126 作者:小新 欄目:編程語言

這篇文章主要介紹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. 面向對象

概念:面向對象是程序的一種設計方式,它利于提高程序的重用性,使程序結構更加清晰。

主要特征:封裝、繼承、多態。

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

以上是“PHP面試題之概念題有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

格尔木市| 嘉禾县| 卫辉市| 吉木萨尔县| 布拖县| 广宁县| 罗甸县| 南部县| 长葛市| 和林格尔县| 西丰县| 金阳县| 肇源县| 桂平市| 新宾| 桦南县| 甘泉县| 穆棱市| 公安县| 九龙城区| 北安市| 牙克石市| 女性| 永平县| 九龙县| 邵阳市| 亳州市| 阜城县| 德格县| 方山县| 疏附县| 遂昌县| 陵水| 兰溪市| 富顺县| 金湖县| 芜湖市| 平顶山市| 弥渡县| 丁青县| 双柏县|