首頁  >  文章  >  後端開發  >  PHP面試重點題目分享(一)

PHP面試重點題目分享(一)

小云云
小云云原創
2018-03-22 13:38:491698瀏覽

本文主要跟大家分享一些關於php的面試題,這些php面試題目是一些重點題目,希望能幫助到大家。

1、PHP語言的一大優勢是跨平台,什麼是跨平台?

PHP的運行環境最優搭配為Apache+MySQL+PHP,此運行環境可以在不同作業系統(例如windows、Linux等)上配置,不受作業系統的限制,所以叫跨平台

2、WEB開發中資料提交方式有幾種?有什麼區別?百度使用哪一種方式?

Get與post兩種方式

區別:1. Get從伺服器取得數據,post傳送資料

2. Get傳送值在url中可見,post在url中不可見

4. Get傳值一般在2KB以內,post傳值大小可以在php.ini中進行設定

5. get安全性非低,post安全性較高,執行效率卻比Post高

建議:

1、get式安全性較Post式要差些包含機密資訊建議用Post資料提交式;

2、做資料查詢建議用Get式;做資料加入、修改或刪除建議用Post方式;

百度使用的get方式,因為可以從它的URL看出

3.掌握PHP的哪些框架、模板引擎、系統等

框架:框架有很多,例如zendframe、CI、Yii等等,咱們學過的是thinkphp

模板引擎:也有很多,在課本中有,咱們學過的是smarty

系統:有很多,例如:康盛的產品(uchome、supesite、discuzX等),帝國系統、DEDE(織夢)、ecshop等,咱們學過的是DEDECMS、Ecshop

4、說一下你所掌握的網頁前端技術有哪些?

熟練p+CSS網頁佈局,JavaScript,jQuery框架、photoshop圖片處理

5. AJAX的優點是什麼?

ajax是非同步傳輸技術,可以透過javascript實現,也可以透過JQuery框架實現,實現局部刷新,減輕了伺服器的壓力,也提高了使用者體驗

6. 安全對一套程序來說至關重要,請說說在開發中應該注意哪些安全機制?

①防遠端提交;②防SQL注入,對特殊程式碼進行過濾;③防止註冊機灌水,使用驗證碼;

7. 在程式的開發中,如何提升程式的運作效率?

①優化SQL語句,查詢語句中盡量不使用select *,用哪個欄位查哪個欄位;少用子查詢可用資料表連接取代;少用模糊查詢;②資料表中建立索引;③對程式中常用到的資料產生快取;

8. PHP可否與其它的資料庫搭配使用?

PHP與MYSQL資料庫是最優搭配,當然PHP也可以去其它的資料庫搭配使用,例如MSSQL等,PHP中預留了操作MSSQL的函數,只要開啟就可以使用

#9. 現在程式設計中常採取MVC三層結構,請問MVC分別指哪三層,有什麼優點?

MVC三層分別指:業務模型、視圖、控制器,由控制器層調用模型處理數據,然後將數據映射到視圖層進行顯示,優點是:①可以實現代碼的重用性,避免產生程式碼冗餘;②M和V的實作程式碼分離,讓同一個程式可以使用不同的表現形式

10. 對json資料格式的理解?

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,json資料格式固定,可以被多種語言用作資料的傳遞

PHP中處理json格式的函數為json_decode( string $json [, bool $assoc ] ) ,接受一個 JSON格式的字串並且把它轉換為PHP變量,參數json待解碼的json string格式的字串。 assoc當此參數為TRUE時,將傳回array而非object;

Json_encode:將PHP變數轉換成json格式

14. PHP處理陣列的常用函數? (重點看函數的'參數'和'返回值')

①array()建立數組;②count()傳回數組中元素的數目;③array_push()將一個或多個元素插入數組的末尾(入棧);④array_column()傳回輸入數組中某個單一列的值;⑤array_combine()透過合併兩個數組來建立新數組;⑥array_reverse()以相反的順序傳回數組;⑦array_unique()刪除數組中的重複重複數組值;⑧in_array()檢查陣列中是否有指定的值;

15. PHP處理字串的常用函數? (重點看函數的‘參數’和‘返回值’)

①trim()移除字串兩側的空白字元和其他字元;②substr_replace()把字串的一部分替換為另一個字串;③substr_count()計算子字串在字串中出現的次數;④substr( )傳回字串的一部分;⑤strtolower()把字串轉換為小寫字母;⑥strtoupper()把字串轉換為大寫字母;⑦strtr()轉換字串中特定的字元;⑧strrchr()查找字串在另一個字元串中最後一次出現;⑨strstr()尋找字串在另一字串中的第一次出現(對大小寫敏感);strrev()反轉字串;strlen()傳回字串的長度;str_replace()替換字串中的一些字元(對大小寫敏感);print()輸出一個或多個字串;explode()把字串打散為數組;is_string()偵測變數是否為字串;strip_tags()從一個字串中去除HTML標籤;mb_substr()用來截中文與英文的函數

16. PHP處理時間的常用函數? (重點看函數的‘參數’和‘返回值’)

date_default_timezone_get()傳回預設時區。

date_default_timezone_set()設定預設時區。

date()格式化本地時間/日期。

getdate()回傳日期/時間資訊。

gettimeofday()傳回目前時間資訊。

microtime()傳回目前時間的微秒數。

mktime()傳回一個日期的 Unix時間戳記。

strtotime()將任何英文文本的日期或時間描述解析為 Unix時間戳記。

time()傳回目前時間的 Unix時間戳記。

17. PHP處理資料庫的常用函數? (重點看函數的‘參數’和‘返回值’)

請參考php手冊,認真查看,此項目非常重要

18. PHP操作文件的常用函數? (重點看函數的'參數'和'返回值')

①打開文件;②刪除文件;③讀取文件;④寫入文件;⑤修改文件;⑥關閉文件;⑦創建文件等等等,此項目非常重要,在工作中經常用來產生快取或靜態文件,請參考php手冊,認真查看

19. PHP操作目錄(資料夾)的常用函數? (重點看函數的'參數'和'返回值')

①開啟目錄;②刪除目錄;③讀取目錄;④建立目錄;⑤修改目錄;⑥關閉目錄等等,此項目非常重要,在工作中常用來建立或刪除上傳檔案的目錄,建立或刪除快取、靜態頁面的目錄,請參考php手冊,認真查看

#三、物件導向部分

1、什麼是物件導向?(理解回答)

答案:物件導向OO = 物件導向的分析OOA + 物件導向的設計OOD + 物件導向的程式設計OOP;通俗的解釋就是「萬物皆對象”,把所有的事物都看作一個個可以獨立的物件(單元),它們可以自己完成自己的功能,而不是像C那樣分成一個個函數。

 現在純正的OO語言主要是Java和C#,PHP、C++也支援OO,C是流程導向的。     

2、簡述 private、 protected、 public修飾符的存取權。  

答案:private : 私有成員, 在類別的內部才可以存取。  

protected : 保護成員,該類別內部和繼承類別中可以存取。

public : 公共成員,完全公開,沒有存取限制。

3、堆疊和堆疊的差別?

答案:堆疊是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就堆疊的大小有明確的定義; 

堆疊是程式運作期間動態分配的記憶體空間,你可以根據程式的運行情況來決定要分配的堆記憶體的大小。

4、XML 與 HTML 的主要差異 

#答案:(1) XML是區分大小寫字母的,HTML不區分。  

(2) 在HTML中,如果上下文清楚地顯示出段落或列表鍵在何處結尾,那麼你可以省略

或之類的結束 標記。在XML中,絕對不能省略掉結束標記。  

(3) 在XML中,擁有單一標記而沒有符合的結束標記的元素必須以一個 / 字元作為結尾。這樣分析器就知道不用 查找結束標記了。  

(4) 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。  

(5) 在HTML中,可以擁有不含值的屬性名。在XML中,所有的屬性都必須帶有對應的值。

5、物件導向的特徵有哪些面向?

#答案:主要有封裝,繼承,多態。如果是4個方面則加上:抽象。

下面的解釋為理解:

封裝:

封裝是保證軟體元件具有優良的模組性的基礎,封裝的目標就是要實現軟體元件的高內聚,低耦合,防止程序相互依賴而帶來的變動影響.

 

#繼承:

在定義和實作一個類別的時候,可以在一個已經存在的類別的基礎之上來進行,把這個已經存在的類別所定義的內容當作自己的內容,並且可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類別自動共享父類別資料和方法的機制,這是類別之間的一種關係,提高了軟體的可重複使用性和可擴展性。

多態:

多態是指程式中定義的引用變數所指向的具體類型和透過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式運行期間才確定,即一個引用變數倒底會指向哪個類別的實例對象,該引用變數發出的方法呼叫到底是哪個類別中實現的方法,必須在由程式運行期間才能決定。

抽象:

抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標相關的方面。例如,看到一隻螞蟻和大象,你能夠想像出它們的相同之處,那就是抽象。

6、抽象類別和介面的概念以及區別?

答案:抽象類別:它是一種特殊的,不能被實例化的類,只能作為其他類別的父類別使用。使用abstract關鍵字聲明。

它是一種特殊的抽象類,也是一個特殊的類,使用interface宣告。

(1)抽象類別的操作透過繼承關鍵字extends實現,而介面的使用是透過implements關鍵字來實現。

(2)抽象類別中有資料成員,可以實作資料的封裝,但是介面沒有資料成員。

(3)抽象類別中可以有建構方法,但是介面沒有建構方法。

(4)抽象類別的方法可以透過private、protected、public關鍵字修飾(抽象方法不能是private),而介面中的方法只能使用public關鍵字修飾。

(5)一個類別只能繼承於一個抽象類,而一個類別可以同時實作多個介面。

(6)抽象類別中可以有成員方法的實作程式碼,而介面中不可以有成員方法的實作程式碼。

7. 什麼是建構函數,什麼是析構函數,作用是什麼? 

答案:建構子(方法)是物件建立完成後第一個被物件自動呼叫的方法。它存在於每個聲明的類別中,是一個特殊的成員方法。作用是執行一些初始化的任務。 Php中使用__construct()宣告建構方法,且只能宣告一個。

析構函數(方法)作用和建構方法正好相反,是物件被銷毀之前最後一個被物件自動呼叫的方法。是PHP5中新加入的內容作用是用於實現在銷毀一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。

 

8、如何重載父類別的方法,舉例說明

答案:重載,也就是覆寫父類別的方法,也就是使用子類別中的方法取代從父類別繼承的方法,也叫方法的重寫。

覆寫父類別方法的關鍵是在子類別中建立於父類別中相同的方法包括方法的名稱、參數和傳回值類型。 PHP中只要求方法的名稱相同即可。

9. 常用的魔術方法有哪些?舉例說明

答:php規定以兩個底線(__)開頭的方法都保留為魔術方法,所以建議大家函數名稱最好不用__開頭,除非是為了重載已有的魔術方法。  

__construct() 實例化類別時自動呼叫。

__destruct() 類別物件使用結束時自動呼叫。

__set() 在給未定義的屬性賦值的時候呼叫。

__get() 呼叫未定義的屬性時候呼叫。

__isset() 使用isset()或empty()函數時候會呼叫。

__unset() 使用unset()時候會呼叫。

__sleep() 使用serialize序列化時候呼叫。

__wakeup() 使用unserialize反序列化的時候呼叫。

__call() 呼叫一個不存在的方法的時候呼叫。

__callStatic()呼叫一個不存在的靜態方法是呼叫。

__toString() 把物件轉換成字串的時候會呼叫。如 echo。

__invoke() 當嘗試把物件當方法呼叫時呼叫。

__set_state() 當使用var_export()函數時候呼叫。接受一個數組參數。

__clone() 當使用clone複製一個物件時候呼叫。

10、$this和self、parent這三個關鍵字分別代表什麼?在哪些場合下使用?

答案:$this 當前物件

self  當前類別

#parent  當前類別的父類別

$this在目前類別中使用,使用-> ;呼叫屬性和方法。

self也在目前類別中使用,不過需要使用::呼叫。

parent在類別中使用。

11、類別中如何定義常數、如何類別中呼叫常數、如何在類別外呼叫常數。

答:類別中的常數也就是成員常數,常數就是不會改變的量,就是一個恆值。

定義常數使用關鍵字const.

例如:const PI = 3.1415326;

無論是類別內或類別外,常數的存取和變數是不一樣的,常數不需要實例化對象,

#存取常數的格式都是類別名稱加作用域操作符號(雙冒號)來呼叫。

即:類別名稱 :: 類別常數名稱;

12、作用域運算子::如何使用?都在哪些場合使用?

答案:呼叫類別常數

呼叫靜態方法

13、__autoload()方法的工作原理是什麼?

答案:使用這個魔術函數的基本條件是類別檔案的檔案名稱要和類別的名字保持一致。

當程式執行到實例化某個類別的時候,如果在實例化前沒有引入這個類別文件,那麼就自動執行__autoload()函數。

這個函數會根據實例化的類別的名稱來找出這個類別檔案的路徑,當判斷這個類別檔案路徑下確實存在這個類別檔案後

就執行include或require來載入該類,然後程式繼續執行,如果這個路徑下不存在該檔案時就提示錯誤。

使用自動載入的魔術函數可以不必要地寫很多個include或require函數。

四、ThinkPHP部分

1、常見的PHP框架

#答案:thinkPHP

yii

ZendFramework

CakePhp

sy

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

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

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

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

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

 

3、ThinkPHP中的MVC分層是什麼? (理解)

答: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本身。

 

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

答案:核心 + 行為+ 驅動

TP官方簡稱:CBD

核心(Core):就是框架的核心程式碼,不可或缺的東西,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、如何開啟偵錯模式?調試模式有什麼好處?

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

    //開啟偵錯模式

    define('APP_DEBUG', true);

    //加載框架入口文件

    require './ThinkPHP/ThinkPHP.php';

在完成開發階段部署到生產環境後,只需要刪除偵錯模式定義程式碼即可切換到部署模式。開啟偵錯模式後,系統會先載入系統預設的偵錯設定文件,然後載入專案的偵錯設定文件,偵錯模式的優點在於:

 

開啟日誌記錄,任何錯誤訊息和調試資訊都會詳細記錄,以便於調試;

關閉模板緩存,模板修改可以即時生效;

記錄SQL日誌,方便分析SQL;

關閉字段緩存,數據表格欄位修改不受快取影響;

嚴格檢查檔案大小寫(即使是Windows平台),幫助你提前發現Linux部署問題;

#可以方便用於開發過程的不同階段,包括開發、測試和演示等任何需要的情況,不同的應用模式可以配置獨立的專案設定檔。

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

答案:ThinkPHP在專案配置上面創造了自己獨有的分層配置模式,其配置層次體現在:

慣例配置->專案配置->調試配置-> ;分組配置->擴展配置->動態配置

以上是配置文件的加載順序,因為後面的配置會覆蓋之前的同名配置(在沒有生效的前提下),所以優先順序從右到左。

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

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

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

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

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

 

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

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

13、ThinkPHP框架中D函數與M函數的差別是什麼?

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

回到頂部

五、smarty模板引擎

 1. 編譯和快取差異?

 

   smarty的編譯過程就是把模板拿過來,把裡面的標籤替換成對應php程式碼,這就是smarty的編譯, 其實就是php和html混合的過程

 

   smarty的快取需要手動開啟,smarty的快取就是把編譯好的檔案執行後,同時產生一份靜態的html頁面,再次造訪的時候,你造訪的就是是html檔案了,所以就效率來說,要高一些

 

 2.什麼是smarty? Smarty的優點是什麼?

     Smarty是使用PHP寫出來的PHP模板引擎,目的是要使用PHP程式同美工分離,使的程式設計師改變程式的邏輯內容時不會影響到美工的頁面設計,美工重新修改頁面時不會影響到程式的程式邏輯,這在多人合作的項目中顯的尤為重要。 (也容易程式化的多樣式開發)

Smarty優點

1. 速度快:相對其他模板引擎。

2. 編譯型:採用smarty編寫的程式在執行時要編譯成一個非模板技術的PHP檔

3 快取技術:它可以將使用者最終看到的HTML檔案快取成一個靜態的HTML頁

#4. 外掛程式技術:smarty可以自訂外掛程式。

不適合使用smarty的地方

1. 需要即時更新的內容。例如像股票顯示,它需要經常對數據進行更新 2.小項目。小型專案因為專案簡單而美工與程式設計師兼於一人的專案

 

#3.在範本中使用{$smarty}保留變數

 

   {$smarty.get.page} //類似在php腳本中存取$_GET[page]

{ smarty.cookies.}

{smarty.post.}

{smarty.session.}

{smarty.server.}

4.在模板中訪問php中的變數

在php腳本中有系統常數和自訂常數兩種,同樣這兩種常數在Smarty模板中也可以被訪問,而且不需要從php中分配,只要透過{$smarty}保留變數就可以直接輸出常數的值。在範本中輸出常數的範例:

{$smarty.const._MY_CONST_VAL}

{$smarty.const.__FILE__}

#5.變數調解器

 

{$var|modifier1|modifier2|........}

 

<{$str} >
 

<{$str|capitalize}><{*首字母大寫*}>
 

<{$str|upper }><{*全部大寫*}>
 

<{$str|lower}><{*全部小寫*}>
 

#<{$str|lower|upper}><{*全部大寫,調整從左到右*}>

<{$leg|truncate}> ;<{*字串截取,預設80個字元*}>
 

<{$leg|truncate:10}><{*字串截取,前10個,包括...三個字元*}>
 

 

#6. php查詢mysql資料庫時,查詢中文結果時出現的亂碼。怎麼解決? ? ? ?

  1.檔案屬性(另存為)

2.檔案meta(設定瀏覽器解析的時候)

3. 連接資料庫時編碼設定

#4. PHP檔案中使用header函數決定編碼

 

7.快取機制

 

   如果開啟了緩存,smarty同時產生一份靜態的html頁面,如果在設定的時間沒有過期,再次訪問的時候,你訪問的就是html檔了,減少了讀取資料庫,所以就效率來說,要高一些。

 

8. smarty的賦值與載入範本

  $Smarty->assign(name,value)

#  $Smarty->display ('index.html')

 

9.smarty模板技術的用途是什麼?

為了php與html分開,美工和程式設計師各司其職,互不干擾。

 

10. smarty配置主要有哪幾項?

1. 引入smarty.class.php;

2. 實例化smarty物件;

3. 重新修改預設的模板路徑;

4 . 重新修改預設的編譯後檔案的路徑;

5. 重新修改預設的設定檔的路徑;

6. 重新修改預設的cache的路徑。

7. 可以設定是否開啟cache。

8. 可以設定左側和右側定界符。

 

11. smarty在使用過程中需要注意哪些細節?

Smarty是基於MVC概念的一種模板引擎,它將一個頁面程式分成了兩個部分來實現:即視圖層和控制層,

也就是說smarty技術將使用者UI與php代碼分開。

這樣程式設計師和美工各司其職,互不干擾。

 

12. smarty運用過程中要注意以下幾個問題:

1.正確設定smarty。主要要實例化smarty對象,配置smarty模板檔案的路徑;

2.php頁面中使用assign賦值和display顯示頁面;

3.smarty模板檔案中不允許出現php程式碼段,所有的註釋,變量,函數都要包含在定界符內。

A.{}

B. foreach

C. if else

D. include

E. Literal

#回到頂部

六、二次開發系統(DEDE、ecshop):

1.對二次開發的理解

     二次開發,簡單的說就是在現有的軟體上進行客製化修改,功能的擴展,然後達到自己想要的功能,一般來說都不會改變原有系統的核心。

2. MVC     

     Model(模式)資料處理。

     View(檢視) 範本顯示。

     Controller(控制器) 控制流程。

 

MVC的概念是什麼?各層主要做什麼工作?

MVC(即模型-視圖-控制器)是一種軟體設計模式或說程式設計想法。

M指Model模型層,V是View視圖層(顯示層或使用者介面),C是Controller控制器層。

使用mvc的目的是實現M和V分離,這使得一個程式可以輕鬆使用不同的使用者介面。

在網站開發中,

模型層一般負責對資料庫表格資訊進行增刪改查,

視圖層負責顯示頁面內容,

控制器層在M和V之間起到調節作用,控制器層決定呼叫哪個model類別的哪個方法,

執行完畢後由控制器層決定將結果assign到哪個view層。

 

3.二次開發程式安裝後存取時候出現一些警告以及錯誤

     根據錯誤,以修改伺服器設定參數以及百度

4 . 功能,模板的更換,功能的添加修改

      其實也就是物件導向的應用 用,以及模板的更換類似smarty的使用

5. 用過哪些二次開發的東西?

  Dedecms phpcms  ecshop,基本這些的東西如果基礎好了 學習起來都是沒問題的。

6. 像php做一次開發好,還是二次開發好?

一般中小企業都用cms系統二次開發,都是為了效率。當然如果想一次開發也行,會用框架而且時間充足的話就可以了,大企業都是團隊來開發的,杜絕版權問題。

7. 二次開發過程中許多類別與類別之間進行之間的方法訪問,是透過什麼方式傳遞的?

      不是類別繼承而是物件組合,將實例化好的物件透過global傳遞進去

 

 8. dedecms如果更換目錄,後台某項就進不去瞭如何解決?

 

     後台核心設定中修改成現在的 專案目錄名稱

 

 9.  dedecms中自訂模型的理解?

在織夢系統中有內容模型這個概念,不同內容模型可以用來建構不同內容形式的站點,在系統中自帶了以下幾種模型:普通文章、圖集、軟體、商品、分類資訊、專題。透過系統自備的模型,我們可以用來建立不同類型的站點,例如:使用圖集可以做一個圖片站,用軟體模型建立一個軟體下載站點。

當然以上隨系統附帶的模型稱為系統模型,使用者可以自己定義一些模型,比如圖書、音樂專輯等,自訂了這些模型才可以建立更多內容形式的網站。

相當於我們自動加入了表格結構,適應現在目前需求的變化

 

#10.  dede中概念,設計並使用模板,必須理解以下幾個概念

1、板塊(封面)模板:

指網站首頁或比較重要的欄位封面頻道使用的模板,一般以「index_識別ID.htm」命名,此外,用戶單獨定義的單一頁面或自訂標記,也可選是否支援板塊模板標記,如果支持,系統會用板塊模板標記引擎去解析後才輸出內容或產生特定的檔案。

2、清單範本:

指網站某一欄目的所有文章清單的模板,一般用 「list_辨識ID.htm」 命名。

3、檔案範本:

表示文件檢視頁的模板,如文章模板,一般以 「article_辨識ID.htm」 命名。

4、其它模板:

一般系統常規包含的模板有:主頁模板、搜尋模板、RSS、JS編譯功能模板等,此外用戶也可以自訂一個模板創建為任意文件。

 

11. dede中幾種標籤的使用?

 

 

清單 內容 等標籤 僅在其此範圍內使用,且清單標籤僅可在清單中使用,內容標籤僅可在內容標籤中使用。

全域標籤能在所有頁面中使用

 

12.熟悉常用類別庫

(例如:dedesql.class.php);熟悉系統函數庫(common.func.php);熟悉自訂函數庫(extend.func.php);熟悉前台入口文件( common.inc.php)

返回頂部

七、微信公眾平台開發

1.微信運作機制

 

  

 公眾號與php之間用什麼語言通訊:Xml

 

# Weixin.php中是如何接收公眾號碼資料的:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收資料 XML資料

 

#2.訊息類型

   微信目前提供了7種基本訊息類型,分別為:

(1)文字訊息(text);

(2)圖片訊息(image) ;

(3)語音(voice)

(4)視訊(video)

(5)地理位置(location);

(6 )連結訊息(link);

    (7)事件推送(event)

類型。掌握不同的訊息類型傳送時的資料傳遞格式

 

4. 將整個檔案讀入一個字串的函數是

  File_get_contents

 

5、常用函數

把xml資料解析成物件的函數是

simplexml_load_string( )

將字串轉換為陣列的函數是___ explode_________,將陣列轉換為字串的函數是____implode________.

編碼 URL 字串的字串是____urlencode________.

6. Sprintf函數的功能

  這都是可以查手冊的。

7. 微信公眾號出現無法提供服務的原因?

   1. 網路原因,資料介面原因

2. 程式碼錯誤,何推測原因

       修改的哪裡檢視一下,如果程式碼沒錯

##可以輸出資料 看一下。用php作業檔案

 

    $myfile = fopen("newfile.txt", "w");

    $txt ="aaaaaaaaaa";

#    fwrite($myfile, $txt);

    fclose($myfile);

##8.  自訂選單的事件推送## 

       點選跳轉連結

       掃碼推事件

       掃碼推#       彈出式微信相簿發圖器的事件

       彈出地理位置選擇器的事件

#9.token的功能

#   安全機制驗證,用於微型訊號伺服器與PHP伺服器之間的安全驗證

10. Appid與secrect的作用

   請求api介面(例如選單的操作)時需要傳appid與secrect兩個值,用來取得應用程式的授權碼 

#回到頂部


八、對於自身掌握的技術描述:

1. 以PHP+MYSQL為方向,熟練smarty模板引擎、ThinkPHP框架、微信公眾平台開發、DEDE 、ecshop等二次開發系統,對物件導向有一定的理解;資料庫方面,熟練MYSQL、MSSQL等資料庫;熟悉在linux下的PHP開發

2. 前端技術:熟練p+CSS網頁佈局,javascript,JQuery框架、AJAX技術、photoshop圖片處理

3. 一年的專案開發經驗,使用smarty開發過'XXXXXXXX',ThinkPHP開發過'XXXXXXXX',使用微信公眾平台開發過'就業服務網'的公眾號,使用織夢系統開發過企業站等

 

#1、PHP語言的一大優點是跨平台,什麼是跨平台?

PHP的運作環境最優搭配為Apache+MySQL+PHP,此運作環境可以在不同作業系統(例如windows、Linux等)上配置,不受作業系統的限制,所以叫跨平台

2、WEB開發中資料提交方式有幾種?有什麼區別?百度使用哪一種方式?

Get與post兩種方式

區別:1. Get從伺服器取得數據,post傳送資料

2. Get傳送值在url中可見,post在url中不可見

4. Get傳值一般在2KB以內,post傳值大小可以在php.ini中進行設定

5. get安全性非低,post安全性較高,執行效率卻比Post高

建議:

1、get式安全性較Post式要差些包含機密資訊建議用Post資料提交式;

2、做資料查詢建議用Get式;做資料加入、修改或刪除建議用Post方式;

百度使用的get方式,因為可以從它的URL看出

3.掌握PHP的哪些框架、模板引擎、系統等

框架:框架有很多,例如zendframe、CI、Yii等等,咱們學過的是thinkphp

模板引擎:也有很多,在課本中有,咱們學過的是smarty

系統:有很多,例如:康盛的產品(uchome、supesite、discuzX等),帝國系統、DEDE(織夢)、ecshop等,咱們學過的是DEDECMS、Ecshop

4、說一下你所掌握的網頁前端技術有哪些?

熟練p+CSS網頁佈局,JavaScript,jQuery框架、photoshop圖片處理

5. AJAX的優點是什麼?

ajax是非同步傳輸技術,可以透過javascript實現,也可以透過JQuery框架實現,實現局部刷新,減輕了伺服器的壓力,也提高了使用者體驗

6. 安全對一套程序來說至關重要,請說說在開發中應該注意哪些安全機制?

①防遠端提交;②防SQL注入,對特殊程式碼進行過濾;③防止註冊機灌水,使用驗證碼;

7. 在程式的開發中,如何提升程式的運作效率?

①優化SQL語句,查詢語句中盡量不使用select *,用哪個欄位查哪個欄位;少用子查詢可用資料表連接取代;少用模糊查詢;②資料表中建立索引;③對程式中常用到的資料產生快取;

8. PHP可否與其它的資料庫搭配使用?

PHP与MYSQL数据库是最优搭配,当然PHP也可以去其它的数据库搭配使用,例如MSSQL等,PHP中预留了操作MSSQL的函数,只要开启就可以使用

9. 现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?

MVC三层分别指:业务模型、视图、控制器,由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式

10. 对json数据格式的理解?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递

PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ] ) ,接受一个 JSON格式的字符串并且把它转换为PHP变量,参数json待解码的json string格式的字符串。assoc当该参数为TRUE时,将返回array而非object;

Json_encode:将PHP变量转换成json格式

14. PHP处理数组的常用函数?(重点看函数的‘参数’和‘返回值’)

①array()创建数组;②count()返回数组中元素的数目;③array_push()将一个或多个元素插入数组的末尾(入栈);④array_column()返回输入数组中某个单一列的值;⑤array_combine()通过合并两个数组来创建一个新数组;⑥array_reverse()以相反的顺序返回数组;⑦array_unique()删除数组中的重复值;⑧in_array()检查数组中是否存在指定的值;

15. PHP处理字符串的常用函数?(重点看函数的‘参数’和‘返回值’)

①trim()移除字串兩側的空白字元和其他字元;②substr_replace()把字串的一部分替換為另一個字串;③substr_count()計算子字串在字串中出現的次數;④substr( )傳回字串的一部分;⑤strtolower()把字串轉換為小寫字母;⑥strtoupper()把字串轉換為大寫字母;⑦strtr()轉換字串中特定的字元;⑧strrchr()查找字串在另一個字元串中最後一次出現;⑨strstr()尋找字串在另一字串中的第一次出現(對大小寫敏感);strrev()反轉字串;strlen()傳回字串的長度;str_replace()替換字串中的一些字元(對大小寫敏感);print()輸出一個或多個字串;explode()把字串打散為數組;is_string()偵測變數是否為字串;strip_tags()從一個字串中去除HTML標籤;mb_substr()用來截中文與英文的函數

16. PHP處理時間的常用函數? (重點看函數的‘參數’和‘返回值’)

date_default_timezone_get()傳回預設時區。

date_default_timezone_set()設定預設時區。

date()格式化本地時間/日期。

getdate()回傳日期/時間資訊。

gettimeofday()傳回目前時間資訊。

microtime()傳回目前時間的微秒數。

mktime()傳回一個日期的 Unix時間戳記。

strtotime()將任何英文文本的日期或時間描述解析為 Unix時間戳記。

time()傳回目前時間的 Unix時間戳記。

17. PHP處理資料庫的常用函數? (重點看函數的‘參數’和‘返回值’)

請參考php手冊,認真查看,此項目非常重要

18. PHP操作文件的常用函數? (重點看函數的'參數'和'返回值')

①打開文件;②刪除文件;③讀取文件;④寫入文件;⑤修改文件;⑥關閉文件;⑦創建文件等等等,此項目非常重要,在工作中經常用來產生快取或靜態文件,請參考php手冊,認真查看

19. PHP操作目錄(資料夾)的常用函數? (重點看函數的'參數'和'返回值')

①開啟目錄;②刪除目錄;③讀取目錄;④建立目錄;⑤修改目錄;⑥關閉目錄等等,此項目非常重要,在工作中常用來建立或刪除上傳檔案的目錄,建立或刪除快取、靜態頁面的目錄,請參考php手冊,認真查看

#三、物件導向部分

1、什麼是物件導向?(理解回答)

答案:物件導向OO = 物件導向的分析OOA + 物件導向的設計OOD + 物件導向的程式設計OOP;通俗的解釋就是「萬物皆對象”,把所有的事物都看作一個個可以獨立的物件(單元),它們可以自己完成自己的功能,而不是像C那樣分成一個個函數。

 現在純正的OO語言主要是Java和C#,PHP、C++也支援OO,C是流程導向的。     

2、簡述 private、 protected、 public修飾符的存取權。  

答案:private : 私有成員, 在類別的內部才可以存取。  

protected : 保護成員,該類別內部和繼承類別中可以存取。

public : 公共成員,完全公開,沒有存取限制。

3、堆疊和堆疊的差別?

答案:堆疊是編譯期間就分配好的記憶體空間,因此你的程式碼中必須就堆疊的大小有明確的定義; 

堆疊是程式運作期間動態分配的記憶體空間,你可以根據程式的運行情況來決定要分配的堆記憶體的大小。

4、XML 與 HTML 的主要差異 

#答案:(1) XML是區分大小寫字母的,HTML不區分。  

(2) 在HTML中,如果上下文清楚地顯示出段落或列表鍵在何處結尾,那麼你可以省略

或之類的結束 標記。在XML中,絕對不能省略掉結束標記。  

(3) 在XML中,擁有單一標記而沒有符合的結束標記的元素必須以一個 / 字元作為結尾。這樣分析器就知道不用 查找結束標記了。  

(4) 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。  

(5) 在HTML中,可以擁有不含值的屬性名。在XML中,所有的屬性都必須帶有對應的值。

5、物件導向的特徵有哪些面向?

#答案:主要有封裝,繼承,多態。如果是4個方面則加上:抽象。

下面的解釋為理解:

封裝:

封裝是保證軟體元件具有優良的模組性的基礎,封裝的目標就是要實現軟體元件的高內聚,低耦合,防止程序相互依賴而帶來的變動影響.

 

#繼承:

在定義和實作一個類別的時候,可以在一個已經存在的類別的基礎之上來進行,把這個已經存在的類別所定義的內容當作自己的內容,並且可以加入若干新的內容,或修改原來的方法使之更適合特殊的需要,這就是繼承。繼承是子類別自動共享父類別資料和方法的機制,這是類別之間的一種關係,提高了軟體的可重複使用性和可擴展性。

多態:

多態是指程式中定義的引用變數所指向的具體類型和透過該引用變數發出的方法呼叫在程式設計時並不確定,而是在程式運行期間才確定,即一個引用變數倒底會指向哪個類別的實例對象,該引用變數發出的方法呼叫到底是哪個類別中實現的方法,必須在由程式運行期間才能決定。

抽象:

抽象就是找出一些事物的相似和共性之處,然後將這些事物歸為一個類,這個類只考慮這些事物的相似和共性之處,並且會忽略與當前主題和目標無關的那些方面,將注意力集中在與當前目標相關的方面。例如,看到一隻螞蟻和大象,你能夠想像出它們的相同之處,那就是抽象。

6、抽象類別和介面的概念以及區別?

答案:抽象類別:它是一種特殊的,不能被實例化的類,只能作為其他類別的父類別使用。使用abstract關鍵字聲明。

它是一種特殊的抽象類,也是一個特殊的類,使用interface宣告。

(1)抽象類別的操作透過繼承關鍵字extends實現,而介面的使用是透過implements關鍵字來實現。

(2)抽象類別中有資料成員,可以實作資料的封裝,但是介面沒有資料成員。

(3)抽象類別中可以有建構方法,但是介面沒有建構方法。

(4)抽象類別的方法可以透過private、protected、public關鍵字修飾(抽象方法不能是private),而介面中的方法只能使用public關鍵字修飾。

(5)一個類別只能繼承於一個抽象類,而一個類別可以同時實作多個介面。

(6)抽象類別中可以有成員方法的實作程式碼,而介面中不可以有成員方法的實作程式碼。

7. 什麼是建構函數,什麼是析構函數,作用是什麼? 

答案:建構子(方法)是物件建立完成後第一個被物件自動呼叫的方法。它存在於每個聲明的類別中,是一個特殊的成員方法。作用是執行一些初始化的任務。 Php中使用__construct()宣告建構方法,且只能宣告一個。

析構函數(方法)作用和建構方法正好相反,是物件被銷毀之前最後一個被物件自動呼叫的方法。是PHP5中新加入的內容作用是用於實現在銷毀一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。

 

8、如何重載父類別的方法,舉例說明

答案:重載,也就是覆寫父類別的方法,也就是使用子類別中的方法取代從父類別繼承的方法,也叫方法的重寫。

覆寫父類別方法的關鍵是在子類別中建立於父類別中相同的方法包括方法的名稱、參數和傳回值類型。 PHP中只要求方法的名稱相同即可。

9. 常用的魔術方法有哪些?舉例說明

答:php規定以兩個底線(__)開頭的方法都保留為魔術方法,所以建議大家函數名稱最好不用__開頭,除非是為了重載已有的魔術方法。  

__construct() 實例化類別時自動呼叫。

__destruct() 類別物件使用結束時自動呼叫。

__set() 在給未定義的屬性賦值的時候呼叫。

__get() 呼叫未定義的屬性時候呼叫。

__isset() 使用isset()或empty()函數時候會呼叫。

__unset() 使用unset()時候會呼叫。

__sleep() 使用serialize序列化時候呼叫。

__wakeup() 使用unserialize反序列化的時候呼叫。

__call() 呼叫一個不存在的方法的時候呼叫。

__callStatic()呼叫一個不存在的靜態方法是呼叫。

__toString() 把物件轉換成字串的時候會呼叫。如 echo。

__invoke() 當嘗試把物件當方法呼叫時呼叫。

__set_state() 當使用var_export()函數時候呼叫。接受一個數組參數。

__clone() 當使用clone複製一個物件時候呼叫。

10、$this和self、parent這三個關鍵字分別代表什麼?在哪些場合下使用?

答案:$this 當前物件

self  當前類別

#parent  當前類別的父類別

$this在目前類別中使用,使用-> ;呼叫屬性和方法。

self也在目前類別中使用,不過需要使用::呼叫。

parent在類別中使用。

11、類別中如何定義常數、如何類別中呼叫常數、如何在類別外呼叫常數。

答:類別中的常數也就是成員常數,常數就是不會改變的量,就是一個恆值。

定義常數使用關鍵字const.

例如:const PI = 3.1415326;

无论是类内还是类外,常量的访问和变量是不一样的,常量不需要实例化对象,

访问常量的格式都是类名加作用域操作符号(双冒号)来调用。

即:类名 :: 类常量名;

12、 作用域操作符::如何使用?都在哪些场合下使用?

答:调用类常量

调用静态方法

13、__autoload()方法的工作原理是什么?

答:使用这个魔术函数的基本条件是类文件的文件名要和类的名字保持一致。

当程序执行到实例化某个类的时候,如果在实例化前没有引入这个类文件,那么就自动执行__autoload()函数。

这个函数会根据实例化的类的名称来查找这个类文件的路径,当判断这个类文件路径下确实存在这个类文件后

就执行include或者require来载入该类,然后程序继续执行,如果这个路径下不存在该文件时就提示错误。

使用自动载入的魔术函数可以不必要写很多个include或者require函数。

返回顶部

四、ThinkPHP部分

1、常见的PHP框架

答:thinkPHP

yii

ZendFramework

CakePhp

sy

2、如何理解TP中的单一入口文件?

答:ThinkPHP采用单一入口模式进行项目部署和访问,无论完成什么功能,一个项目都有一个统一(但不一定是唯一)的入口。应该说,所有项目都是从入口文件开始的,并且所有的项目的入口文件是类似的,入口文件中主要包括:

定义框架路径、项目路径和项目名称(可选)

定义调试模式和运行模式的相关常量(可选)

载入框架入口文件(必须)

 

3、ThinkPHP中的MVC分层是什么?(理解)

答: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本身。

 

5、如何理解 ThinkPHP 3.0 架构三(核心 + 行为 + 驱动)中的行为?

答:核心 + 行为 + 驱动

TP官方简称为:CBD

核心(Core):就是框架的核心代码,不可缺少的东西,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、如何開啟偵錯模式?調試模式有什麼好處?

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

    //開啟偵錯模式

    define('APP_DEBUG', true);

    //加載框架入口文件

    require './ThinkPHP/ThinkPHP.php';

在完成開發階段部署到生產環境後,只需要刪除偵錯模式定義程式碼即可切換到部署模式。開啟偵錯模式後,系統會先載入系統預設的偵錯設定文件,然後載入專案的偵錯設定文件,偵錯模式的優點在於:

 

開啟日誌記錄,任何錯誤訊息和調試資訊都會詳細記錄,以便於調試;

關閉模板緩存,模板修改可以即時生效;

記錄SQL日誌,方便分析SQL;

關閉字段緩存,數據表格欄位修改不受快取影響;

嚴格檢查檔案大小寫(即使是Windows平台),幫助你提前發現Linux部署問題;

#可以方便用於開發過程的不同階段,包括開發、測試和演示等任何需要的情況,不同的應用模式可以配置獨立的專案設定檔。

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

答案:ThinkPHP在專案配置上面創造了自己獨有的分層配置模式,其配置層次體現在:

慣例配置->專案配置->調試配置-> ;分組配置->擴展配置->動態配置

以上是配置文件的加載順序,因為後面的配置會覆蓋之前的同名配置(在沒有生效的前提下),所以優先順序從右到左。

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

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

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

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

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

 

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

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

13、ThinkPHP框架中D函數與M函數的差別是什麼?

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

回到頂部

五、smarty模板引擎

 1. 編譯和快取差異?

 

   smarty的編譯過程就是把模板拿過來,把裡面的標籤替換成對應php程式碼,這就是smarty的編譯, 其實就是php和html混合的過程

 

   smarty的快取需要手動開啟,smarty的快取就是把編譯好的檔案執行後,同時產生一份靜態的html頁面,再次造訪的時候,你造訪的就是是html檔案了,所以就效率來說,要高一些

 

 2.什麼是smarty? Smarty的優點是什麼?

     Smarty是使用PHP寫出來的PHP模板引擎,目的是要使用PHP程式同美工分離,使的程式設計師改變程式的邏輯內容時不會影響到美工的頁面設計,美工重新修改頁面時不會影響到程式的程式邏輯,這在多人合作的項目中顯的尤為重要。 (也容易程式化的多樣式開發)

Smarty優點

1. 速度快:相對其他模板引擎。

2. 編譯型:採用smarty編寫的程式在執行時要編譯成一個非模板技術的PHP檔

3 快取技術:它可以將使用者最終看到的HTML檔案快取成一個靜態的HTML頁

#4. 外掛程式技術:smarty可以自訂外掛程式。

不適合使用smarty的地方

1. 需要即時更新的內容。例如像股票顯示,它需要經常對數據進行更新 2.小項目。小型專案因為專案簡單而美工與程式設計師兼於一人的專案

 

#3.在範本中使用{$smarty}保留變數

 

   {$smarty.get.page} //類似在php腳本中存取$_GET[page]

{ smarty.cookies.}

{smarty.post.}

{smarty.session.}

{smarty.server.}

4.在模板中訪問php中的變數

在php腳本中有系統常數和自訂常數兩種,同樣這兩種常數在Smarty模板中也可以被訪問,而且不需要從php中分配,只要透過{$smarty}保留變數就可以直接輸出常數的值。在範本中輸出常數的範例:

{$smarty.const._MY_CONST_VAL}

{$smarty.const.__FILE__}

#5.變數調解器

 

{$var|modifier1|modifier2|........}

 

<{$str} >
 

<{$str|capitalize}><{*首字母大寫*}>
 

<{$str|upper }><{*全部大寫*}>
 

<{$str|lower}><{*全部小寫*}>
 

#<{$str|lower|upper}><{*全部大寫,調整從左到右*}>

<{$leg|truncate}> ;<{*字串截取,預設80個字元*}>
 

<{$leg|truncate:10}><{*字串截取,前10個,包括...三個字元*}>
 

 

#6. php查詢mysql資料庫時,查詢中文結果時出現的亂碼。怎麼解決? ? ? ?

  1.檔案屬性(另存為)

2.檔案meta(設定瀏覽器解析的時候)

3. 連接資料庫時編碼設定

#4. PHP檔案中使用header函數決定編碼

 

7.快取機制

 

   如果開啟了緩存,smarty同時產生一份靜態的html頁面,如果在設定的時間沒有過期,再次訪問的時候,你訪問的就是html檔了,減少了讀取資料庫,所以就效率來說,要高一些。

 

8. smarty的賦值與載入範本

  $Smarty->assign(name,value)

#  $Smarty->display ('index.html')

 

9.smarty模板技術的用途是什麼?

為了php與html分開,美工和程式設計師各司其職,互不干擾。

 

10. smarty配置主要有哪幾項?

1. 引入smarty.class.php;

2. 實例化smarty物件;

3. 重新修改預設的模板路徑;

4 . 重新修改預設的編譯後檔案的路徑;

5. 重新修改預設的設定檔的路徑;

6. 重新修改預設的cache的路徑。

7. 可以設定是否開啟cache。

8. 可以設定左側和右側定界符。

 

11. smarty在使用過程中需要注意哪些細節?

Smarty是基於MVC概念的一種模板引擎,它將一個頁面程式分成了兩個部分來實現:即視圖層和控制層,

也就是說smarty技術將使用者UI與php代碼分開。

這樣程式設計師和美工各司其職,互不干擾。

 

12. smarty運用過程中要注意以下幾個問題:

1.正確設定smarty。主要要實例化smarty對象,配置smarty模板檔案的路徑;

2.php頁面中使用assign賦值和display顯示頁面;

3.smarty模板檔案中不允許出現php程式碼段,所有的註釋,變量,函數都要包含在定界符內。

A.{}

B. foreach

C. if else

D. include

E. Literal

#回到頂部

六、二次開發系統(DEDE、ecshop):

1.對二次開發的理解

     二次開發,簡單的說就是在現有的軟體上進行客製化修改,功能的擴展,然後達到自己想要的功能,一般來說都不會改變原有系統的核心。

2. MVC     

     Model(模式)資料處理。

     View(檢視) 範本顯示。

     Controller(控制器) 控制流程。

 

MVC的概念是什麼?各層主要做什麼工作?

MVC(即模型-視圖-控制器)是一種軟體設計模式或說程式設計想法。

M指Model模型層,V是View視圖層(顯示層或使用者介面),C是Controller控制器層。

使用mvc的目的是實現M和V分離,這使得一個程式可以輕鬆使用不同的使用者介面。

在網站開發中,

模型層一般負責對資料庫表格資訊進行增刪改查,

視圖層負責顯示頁面內容,

控制器層在M和V之間起到調節作用,控制器層決定呼叫哪個model類別的哪個方法,

執行完畢後由控制器層決定將結果assign到哪個view層。

 

3.二次開發程式安裝後存取時候出現一些警告以及錯誤

     根據錯誤,以修改伺服器設定參數以及百度

4 . 功能,模板的更換,功能的添加修改

      其實也就是物件導向的應用 用,以及模板的更換類似smarty的使用

5. 用過哪些二次開發的東西?

  Dedecms phpcms  ecshop,基本這些的東西如果基礎好了 學習起來都是沒問題的。

6. 像php做一次開發好,還是二次開發好?

一般中小企業都用cms系統二次開發,都是為了效率。當然如果想一次開發也行,會用框架而且時間充足的話就可以了,大企業都是團隊來開發的,杜絕版權問題。

7. 二次開發過程中許多類別與類別之間進行之間的方法訪問,是透過什麼方式傳遞的?

      不是類別繼承而是物件組合,將實例化好的物件透過global傳遞進去

 

 8. dedecms如果更換目錄,後台某項就進不去瞭如何解決?

 

     後台核心設定中修改成現在的 專案目錄名稱

 

 9.  dedecms中自訂模型的理解?

在織夢系統中有內容模型這個概念,不同內容模型可以用來建構不同內容形式的站點,在系統中自帶了以下幾種模型:普通文章、圖集、軟體、商品、分類資訊、專題。透過系統自備的模型,我們可以用來建立不同類型的站點,例如:使用圖集可以做一個圖片站,用軟體模型建立一個軟體下載站點。

當然以上隨系統附帶的模型稱為系統模型,使用者可以自己定義一些模型,比如圖書、音樂專輯等,自訂了這些模型才可以建立更多內容形式的網站。

相當於我們自動加入了表格結構,適應現在目前需求的變化

 

#10.  dede中概念,設計並使用模板,必須理解以下幾個概念

1、板塊(封面)模板:

指網站首頁或比較重要的欄位封面頻道使用的模板,一般以「index_識別ID.htm」命名,此外,用戶單獨定義的單一頁面或自訂標記,也可選是否支援板塊模板標記,如果支持,系統會用板塊模板標記引擎去解析後才輸出內容或產生特定的檔案。

2、清單範本:

指網站某一欄目的所有文章清單的模板,一般用 「list_辨識ID.htm」 命名。

3、檔案範本:

表示文件檢視頁的模板,如文章模板,一般以 「article_辨識ID.htm」 命名。

4、其它模板:

一般系統常規包含的模板有:主頁模板、搜尋模板、RSS、JS編譯功能模板等,此外用戶也可以自訂一個模板創建為任意文件。

 

11. dede中幾種標籤的使用?

 

 

清單 內容 等標籤 僅在其此範圍內使用,且清單標籤僅可在清單中使用,內容標籤僅可在內容標籤中使用。

全域標籤能在所有頁面中使用

 

12.熟悉常用類別庫

(例如:dedesql.class.php);熟悉系統函數庫(common.func.php);熟悉自訂函數庫(extend.func.php);熟悉前台入口文件( common.inc.php)

返回頂部

七、微信公眾平台開發

1.微信運作機制

 

  

 公眾號與php之間用什麼語言通訊:Xml

 

# Weixin.php中是如何接收公眾號碼資料的:

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//接收資料 XML資料

 

#2.訊息類型

   微信目前提供了7種基本訊息類型,分別為:

(1)文字訊息(text);

(2)圖片訊息(image) ;

(3)語音(voice)

(4)視訊(video)

(5)地理位置(location);

(6 )連結訊息(link);

    (7)事件推送(event)

類型。掌握不同的訊息類型傳送時的資料傳遞格式

 

4. 將整個檔案讀入一個字串的函數是

  File_get_contents

 

5、常用函數

把xml資料解析成物件的函數是

simplexml_load_string( )

将字符串转换为数组的函数是___ explode_________,将数组转化为字符串的函数是____implode________.

编码 URL 字符串的字符串是____urlencode________.

6. Sprintf函数的作用

  这个都是可以查手册的。

7. 微信公众号出现无法提供服务的原因?

   1. 网络原因 ,数据接口原因

2. 代码错误,怎么推测原因

       修改的哪里检查一下,如果代码没错

    可以输出数据 看一下。用php操作文件

 

    $myfile = fopen("newfile.txt", "w");

    $txt ="aaaaaaaaaa";

    fwrite($myfile, $txt);

    fclose($myfile);

 

8.  自定义菜单的事件推送

       单击

       单击跳转链接

       扫码推事件

       扫码推且弹出

       弹出系统拍照发图的事件

       弹出微信相册发图器的事件

       弹出地理位置选择器的事件

9.token的作用

   安全机制验证,用于微信服务器与PHP服务器之间的安全验证
10. Appid与secrect的作用

   请求api接口(例如菜单的操作)时需要传appid与secrect两个值,用来获取应用的授权码  

返回顶部

八、对于自身掌握的技术描述:

1. 以PHP+MYSQL为方向,熟练掌握smarty模板引擎、ThinkPHP框架、微信公众平台开发、DEDE、ecshop等二次开发系统,对面向对象有一定的理解;数据库方面,熟练掌握MYSQL、MSSQL等数据库;熟悉在linux下的PHP开发

2. 前端技术:熟练掌握p+CSS网页布局,javascript,JQuery框架、AJAX技术、photoshop图片处理

3. 一年的项目开发经验,使用smarty开发过‘XXXXXXXX’,ThinkPHP开发过‘XXXXXXXX’,使用微信公众平台开发过‘就业服务网’的公众号,使用织梦系统开发过企业站等。

以上是PHP面試重點題目分享(一)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn