首頁  >  文章  >  php框架  >  2018PHP面試題之ThinkPHP

2018PHP面試題之ThinkPHP

coldplay.xixi
coldplay.xixi轉載
2020-08-10 17:18:563971瀏覽

  2018PHP面試題之ThinkPHP    

1、常見的PHP框架

       答案:thinkPHP、yii、ZendFramework、CakePhp、sy

 相關專題建議:2020年thinkphp面試題目及答案(大全)

       2、如何理解TP中的單一入口檔案?

       答:ThinkPHP採用單一入口模式進行專案部署和訪問,無論完成什麼功能,一個專案都有一個統一(但不一定是唯一)的入口。應該說,所有專案都是從入口文件開始的,並且所有的專案的入口文件是類似的,入口文件中主要包括:

       定義框架路徑、專案路徑和專案名稱(可選)

       定義除錯模式與運作模式的相關常數(可選)

       載入框架入口檔案(必須)

       3、ThinkPHPVCM.M

       3、ThinkPHPVCM.MVCM什麼?

(理解)

       答:MVC 是將應用程式的邏輯層和表現層分開的方法。 ThinkPHP 也是基於MVC設計模式的。 MVC只是抽象的概念,沒有特別明確的規定,ThinkPHP中的MVC分層大致體現在:

       模型(M):模型的定義由Model類別來完成。

       控制器(C):應用控制器(核心控制器App類別)和Action控制器都承擔了控制器的角色,Action控制器完成業務流程控制,而應用控制器則負責調度控制。

       檢視(V):由View類別和範本檔案組成,範本做到了100%分離,可以獨立預覽製作。

       但實際上,ThinkPHP並不依賴M或V ,也就是說沒有模型或視圖也一樣可以運作。甚至不依賴C,這是因為ThinkPHP在Action之上還有一個總控制器,就是App控制器,負責應用程式的總調度。在沒有C的情況下,必然存在視圖V,否則就不再是完整的應用。

       總而言之,ThinkPHP的MVC模式只是提供了一種敏捷開發的手段,而不是拘泥於MVC本身。

       4、如何進行SQL最佳化?

(關於後邊的解釋同學可以進行理解,到時根據自己的理解把大體意思說出來即可)

       答:(1)選出正確的儲存引擎

以MySQL為例,包括有兩個儲存引擎MyISAM 和InnoDB,每個引擎都有優點和缺點。

       MyISAM 適合一些需要大量查詢的應用,但對於有大量寫入作業並不是很好。甚至你只是需要update一個字段,整個表都會被鎖起來,而別的進程,就算是讀進程都無法操作直到讀取操作完成。另外,MyISAM 對於 SELECT COUNT(*) 這類的計算是超快無比的。

       InnoDB 的趨勢會是一個非常複雜的儲存引擎,對於一些小的應用,它會比 MyISAM 還要慢。但是它支援「行鎖」 ,於是在寫操作比較多的時候,會更優秀。並且,他也支援更多的高階應用,例如:事務。

       (2)最佳化欄位的資料型別

       記住一個原則,越小的欄位會越快。如果一個表只會有幾列罷了(比如說字典表,配置表),那麼,我們就沒有理由使用 INT 來做主鍵,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 會更經濟一些。如果你不需要記錄時間,使用 DATE 會比 DATETIME 好得多。當然,你也需要留夠足夠的擴充空間。

       (3)為搜尋欄位新增索引

       索引並不一定是給予主鍵或是唯一的欄位。如果在你的表中,有某個字段你總是要會經常用來做搜索,那麼最好是為其建立索引,除非你要搜索的字段是大的文本字段,那應該建立全文索引。

       (4)避免使用Select *從資料庫讀取越多的數據,那麼查詢就會變得越慢。並且,如果你的資料庫伺服器和WEB伺服器是兩台獨立的伺服器的話,這也會增加網路傳輸的負載。即使你要查詢資料表的所有字段,也盡量不要用*通配符,善用內建提供的字段排除定義也許能給帶來更多的便利。

###       (5)使用 ENUM 而非 VARCHAR####

       ENUM 類型是非常快速且緊密的。在實際上,其保存的是 TINYINT,但其外表上顯示為字串。這樣一來,用這個欄位來做一些選項清單變得相當的完美。例如,性別、民族、部門和狀態之類的這些欄位的取值是有限且固定的,那麼,你應該使用 ENUM 而不是 VARCHAR。

       (6)盡可能的使用 NOT NULL

       除非你有一個很特別的原因去使用 NULL 值,你應該總是讓你的字段保持 NOT NULL。 NULL其實需要額外的空間,而且,在你進行比較的時候,你的程式會更複雜。當然,這裡並不是說你就不能使用NULL了,現實情況是很複雜的,還是會有些情況下,你需要使用NULL值。

       (7)固定長度的表會更快

       如果表中的所有欄位都是「固定長度」的,整個表會被認為是「static」 或「fixed-length 」。例如,表中沒有以下類型的欄位: VARCHAR,TEXT,BLOB。只要你包括了其中一個這些字段,那麼這個表就不是「固定長度靜態表」了,這樣,MySQL 引擎會用另一種方​​法來處理。

       固定長度的表會提高效能,因為MySQL搜尋得會更快一些,因為這些固定的長度是很容易計算下一個資料的偏移量的,所以讀取的自然也會很快。而如果欄位不是定長的,那麼,每次要找下一條的話,就需要程式找到主鍵。並且,固定長度的表也更容易被緩存和重建。不過,唯一的副作用是,固定長度的字段會浪費一些空間,因為定長的字段無論你用不用,他都是要分配那麼多的空間。

       5、如何理解 ThinkPHP 3.0 架構三(核心 行為 驅動)中的行為?

       答:核心行為驅動

       TP官方簡稱:CBD

       核心(Core):是架構中核心的程式碼,且缺乏TP本身不可缺少的東西,TP本身不能缺少的東西,TP本身不能缺少是基於MVC思想發展的架構。

       行為(Behavior) :行為在新版ThinkPHP的架構裡面起著舉足輕重的作用,在系統核心之上,設置了很多標籤擴展位,而每個標籤位置可以依次執行各自的獨立行為。行為擴展就因此而誕生了,而且許多系統功能也是透過內建的行為擴展完成的,所有行為擴展都是可替換和增加的,由此形成了底層框架可組裝的基礎。

       驅動( Driver ):資料庫驅動程式、快取驅動程式、標籤庫驅動程式和範本引擎驅動,以及外部的類別擴充。

       框架,即framework。其實就是某種應用的半成品,就是一組組件,供你選來完成自己的系統。簡單說就是使用別人搭好的舞台,你來做表演。而且,框架一般是成熟的,不斷升級的軟體。

       6、什麼是慣例配置?

       答:慣例設定上一頁下一頁慣例重於設定是系統遵循的一個重要思想,系統內建有一個慣例設定檔(位於系統目錄下方的Conf\convention.php) ,按照大多數的使用對常用參數進行了預設配置。所以,對應用專案的配置文件,往往只需要配置和慣例配置不同的或新增的配置參數,如果你完全採用預設配置,甚至可以不需要定義任何設定檔。

       慣例設定檔會被系統自動載入,無需在專案中進行載入。

       7、什麼是SQL注入? (理解)

       答:SQL注入攻擊是駭客對資料庫攻擊的常用手段之一。一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,注入者可以在表單中輸入一段資料庫查詢程式碼並提交,程式將提交的資訊拼湊產生一個完整sql語句,伺服器被欺騙而執行該條惡意的SQL指令。注入者根據程式傳回的結果,成功取得一些敏感數據,甚至控制整個伺服器,這就是SQL注入。

       8、ThinkPHP如何防止SQL注入? (理解)

       答:(1)查詢條件盡量使用陣列方式,這是更安全的方式;

       (2)若不得已使用字串查詢條件,使用預處理機制;

       (3)開啟資料欄位類型驗證,可以對數值資料類型做強制轉換;(3.1版本開始已經強制進行欄位類型驗證了)

       (4)使用自動驗證和自動完成機制進行針對應用的自訂過濾;

       (5)使用欄位類型檢查、自動驗證和自動完成機制等避免惡意資料的輸入。

       9、如何開啟除錯模式?調試模式有什麼好處?

       答:開啟除錯模式很簡單,只需要在入口檔案中增加一行常數定義碼:

       在完成開發階段部署到生產環境後,只需要刪除除錯模式定義程式碼即可切換到部署模式。開啟調試模式後,系統會先載入系統預設的調試設定文件,然後載入項目的調試設定文件,調試模式的優點在於: 開啟日誌記錄,任何錯誤訊息和調試資訊都會詳細記錄,便於調試; 關閉模板快取,範本修改可以即時生效; 記錄SQL日誌,方便分析SQL; 關閉欄位快取,資料表欄位修改不受快取影響;嚴格檢查檔案大小寫(即使是Windows平台),幫助你提前發現Linux部署問題; 可以方便用於開發過程的不同階段,包括開發、測試和演示等任何需要的情況,不同的應用模式可以配置獨立的專案設定檔。

       10、TP中支援哪些設定模式?優先級?

       答:ThinkPHP在專案配置上方創造了自己獨有的分層設定模式,其設定層級體現在: 慣例設定->專案配置->偵錯設定->分組配置->擴充設定->動態設定

       以上是設定檔的載入順序,因為後面的設定會覆寫先前的同名設定(在沒有生效的前提下),所以優先順序從右到左。

       11、TP中的URL模式有哪幾種?預設是哪種?

       答:ThinkPHP支援四種URL模式,可透過設定URL_MODEL參數來定義,包括一般模式、PATHINFO、REWRITE和相容模式。

       預設模式為:PATHINFO模式,設定URL_MODEL 為1

       12、TP中系統變數有哪些?如何取得系統變數?

       答:取得系統變數的方法:

       只需要在Action中呼叫下列方法:

       $this->方法名稱("

       $this->方法名稱("       $this->方法名稱" ,["濾波方法"],["預設值"])

       13、ThinkPHP框架中D函數與M函數的差異為何?

       答:M方法實例化模型無需使用者為每個資料表定義模型類,D方法可以自動偵測模型類,如果存在自訂的模型類,則實例化自訂模型類,如果不存在,則會自動呼叫M方法去實例化Model基底類別。同時對於已實例化過的模型,不會重複去實例化(單例模式)。

相關學習推薦:
thinkphp#############

以上是2018PHP面試題之ThinkPHP的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:wutongketang。如有侵權,請聯絡admin@php.cn刪除