搜尋
首頁php框架ThinkPHP2018PHP面試題之ThinkPHP

2018PHP面試題之ThinkPHP

Aug 10, 2020 pm 05:18 PM
thinkphp面試題

  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刪除

熱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

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

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

mPDF

mPDF

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

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。