2017php經典面試題

一、PHP語言的一大優點是跨平臺,什麼是跨平臺?1、PHP基礎:

PHP的運行環境最優搭配爲Apache+MySQL+PHP,此運行環境能夠在不一樣操做系統(例如windows、Linux等)上配置,不受操做系統的限制,因此叫跨平臺javascript

二、WEB開發中數據提交方式有幾種?有什麼區別?百度使用哪一種方式?php

Get與post兩種方式html

區別:1. Get從服務器獲取數據,post向服務器傳送數據前端

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

4. Get傳值通常在2KB之內,post傳值大小能夠在php.ini中進行設置mysql

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

建議:linux

一、get式安全性較Post式要差些包含機密信息建議用Post數據提交式;程序員

二、作數據查詢建議用Get式;作數據添加、修改或刪除建議用Post方式;ajax

百度使用的get方式,由於能夠從它的URL中看出

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

框架:框架有不少,例如zendframe、CI、Yii等等,我們學過的是thinkphp

模板引擎:也有不少,在課本中有,我們學過的是smarty

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

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

熟練掌握DIV+CSS網頁佈局,JavaScriptjQuery框架、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格式

11. Print、echo、print_r有什麼區別?

① echo和print均可以作輸出,不一樣的是,echo不是函數,沒有返回值,而print是一個函數有返回值,因此相對而言若是隻是輸出echo會更快,而print_r一般用於打印變量的相關信息,一般在調試中使用。

② print   是打印字符串

③ print_r 則是打印複合類型  如數組 對象

12. SESSION與COOKIE的區別?

①存儲位置:session存儲於服務器,cookie存儲於瀏覽器

②安全性:session安全性比cookie高

③session爲‘會話服務’,在使用時須要開啓服務,cookie不須要開啓,能夠直接用

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手冊,認真查看

返回頂部

2、數據庫部分

1. 常見的關係型數據庫管理系統產品有?

答:Oracle、SQL Server、MySQL、Sybase、DB二、Access等。

2. SQL語言包括哪幾部分?每部分都有哪些操做關鍵字?

答:SQL語言包括數據定義(DDL)、數據操縱(DML),數據控制(DCL)和數據查詢(DQL)四個部分。

數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等

數據操縱:Select ,insert,update,delete,

數據控制:grant,revoke

數據查詢:select

3. 完整性約束包括哪些?

答:數據完整性(Data Integrity)是指數據的精確(Accuracy)和可靠性(Reliability)。

分爲如下四類:

1) 實體完整性:規定表的每一行在表中是唯一的實體。

2) 域完整性:是指表中的列必須知足某種特定的數據類型約束,其中約束又包括取值範圍、精度等規定。

3) 參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間的數據的一致性,防止了數據丟失或無心義的數據在數據庫中擴散。

4) 用戶定義的完整性:不一樣的關係數據庫系統根據其應用環境的不一樣,每每還須要一些特殊的約束條件。用戶定義的完整性便是針對某個特定關係數據庫的約束條件,它反映某一具體應用必須知足的語義要求。

 

與表有關的約束:包括列約束(NOT NULL(非空約束))和表約束(PRIMARY KEY、foreign key、check、UNIQUE) 。

 

4.  什麼是事務?及其特性?

答:事務:是一系列的數據庫操做,是數據庫應用的基本邏輯單位。

事務特性:

(1)原子性:即不可分割性,事務要麼所有被執行,要麼就所有不被執行。

(2)一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另外一種正確狀態

(3)隔離性。在事務正確提交以前,不容許把該事務對數據的任何改變提供給任何其餘事務,

(4) 持久性。事務正確提交後,其結果將永久保存在數據庫中,即便在事務提交後有了其餘故障,事務的處理結果也會獲得保存。

或者這樣理解:

事務就是被綁定在一塊兒做爲一個邏輯工做單元的SQL語句分組,若是任何一個語句操做失敗那麼整個操做就被失敗,之後操做就會回滾到操做前狀態,或者是上有個節點。爲了確保要麼執行,要麼不執行,就可使用事務。要將有組語句做爲事務考慮,就須要經過ACID測試,即原子性,一致性,隔離性和持久性。

5. 什麼是鎖?

  答:數據庫是一個多用戶使用的共享資源。當多個用戶併發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的狀況。若對併發操做不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。

 

加鎖是實現數據庫併發控制的一個很是重要的技術。當事務在對某個數據對象進行操做前,先向系統發出請求,對其加鎖。加鎖後事務就對該數據對象有了必定的控制,在該事務釋放鎖以前,其餘的事務不能對此數據對象進行更新操做。

基本鎖類型:鎖包括行級鎖和表級鎖

6. 什麼叫視圖?遊標是什麼?

答:視圖是一種虛擬的表,具備和物理表相同的功能。能夠對視圖進行增,改,查,操做,視圖一般是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得咱們獲取數據更容易,相比多表查詢。

  遊標:是對查詢出來的結果集做爲一個單元來有效的處理。遊標能夠定在該單元中的特定行,從結果集的當前行檢索一行或多行。能夠對結果集當前行作修改。通常不使用遊標,可是須要逐條處理數據的時候,遊標顯得十分重要。

7. 什麼是存儲過程?用什麼來調用?

答:存儲過程是一個預編譯的SQL語句,優勢是容許模塊化的設計,就是說只需建立一次,之後在該程序中就能夠調用屢次。若是某次操做須要執行屢次SQL,使用存儲過程比單純SQL語句執行要快。能夠用一個命令對象來調用存儲過程。

8. 索引的做用?和它的優勢缺點是什麼?

答:索引就一種特殊的查詢表,數據庫的搜索引擎能夠利用它加速對數據的檢索。它很相似與現實生活中書的目錄,不須要查詢整本書內容就能夠找到想要的數據。索引能夠是惟一的,建立索引容許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增長了數據庫的尺寸大小。

9. 如何通俗地理解三個範式?  

答:第一範式:1NF是對屬性的原子性約束,要求屬性具備原子性,不可再分解;

第二範式:2NF是對記錄的唯一性約束,要求記錄有唯一標識,即實體的唯一性;  第三範式:3NF是對字段冗餘性的約束,即任何字段不能由其餘字段派生出來,它要求字段沒有冗餘。。

10. 什麼是基本表?什麼是視圖?  

答:基本表是自己獨立存在的表,在 SQL 中一個關係就對應一個表。  視圖是從一個或幾個基本表導出的表。視圖自己不獨立存儲在數據庫中,是一個虛表  

11. 試述視圖的優勢?

答:(1) 視圖可以簡化用戶的操做  (2) 視圖使用戶能以多種角度看待同一數據; (3) 視圖爲數據庫提供了必定程度的邏輯獨立性; (4) 視圖可以對機密數據提供安全保護。

12. NULL是什麼意思

答:NULL這個值表示UNKNOWN(未知):它不表示「」(空字符串)。對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個 NULL值進行比較,並在邏輯上但願得到一個答案。

使用IS  NULL來進行NULL判斷

13. 主鍵、外鍵和索引的區別?

主鍵、外鍵和索引的區別

定義:

 主鍵--惟一標識一條記錄,不能有重複的,不容許爲空

 外鍵--表的外鍵是另外一表的主鍵, 外鍵能夠有重複的, 能夠是空值

 索引--該字段沒有重複值,但能夠有一個空值

 

 

做用:

 主鍵--用來保證數據完整性

 外鍵--用來和其餘表創建聯繫用的

 索引--是提升查詢排序的速度

個數:

 主鍵--主鍵只能有一個

 外鍵--一個表能夠有多個外鍵

 索引--一個表能夠有多個惟一索引

 

14. 你能夠用什麼來確保表格裏的字段只接受特定範圍裏的值?

答:Check限制,它在數據庫表格裏被定義,用來限制輸入該列的值。

觸發器也能夠被用來限制數據庫表格裏的字段可以接受的值,可是這種辦法要求觸發器在表格裏被定義,這可能會在某些狀況下影響到性能。

15. 說說對SQL語句優化有哪些方法?(選擇幾條)

(1)Where子句中:where表之間的鏈接必須寫在其餘Where條件以前,那些能夠過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

(3) 避免在索引列上使用計算

(4)避免在索引列上使用IS NULL和IS NOT NULL

(5)對查詢進行優化,應儘可能避免全表掃描,首先應考慮在 where 及 order by 涉及的列上創建索引。  

(6)應儘可能避免在 where 子句中對字段進行 null 值判斷,不然將致使引擎放棄使用索引而進行全表掃描

(7)應儘可能避免在 where 子句中對字段進行表達式操做,這將致使引擎放棄使用索引而進行全表掃描

16. SQL語句中‘相關子查詢’與‘非相關子查詢’有什麼區別?

答:子查詢:嵌套在其餘查詢中的查詢稱之。

子查詢又稱內部,而包含子查詢的語句稱以外部查詢(又稱主查詢)。

全部的子查詢能夠分爲兩類,即相關子查詢和非相關子查詢

(1)非相關子查詢是獨立於外部查詢的子查詢,子查詢總共執行一次,執行完畢後將值傳遞給外部查詢。

(2)相關子查詢的執行依賴於外部查詢的數據,外部查詢執行一行,子查詢就執行一次。

故非相關子查詢比相關子查詢效率高

 

17. char和varchar的區別?

答:是一種固定長度的類型,varchar則是一種可變長度的類型,它們的區別是:  

char(M)類型的數據列裏,每一個值都佔用M個字節,若是某個長度小於M,MySQL就會在它的右邊用空格字符補足.(在檢索操做中那些填補出來的空格字符將被去掉)在varchar(M)類型的數據列裏,每一個值只佔用恰好夠用的字節再加上一個用來記錄其長度的字節(即總長度爲L+1字節).  

18. Mysql 的存儲引擎,myisam和innodb的區別。

答:簡單的表達:

MyISAM 是非事務的存儲引擎;適合用於頻繁查詢的應用;表鎖,不會出現死鎖;適合小數據,小併發

innodb是支持事務的存儲引擎;合於插入和更新操做比較多的應用;設計合理的話是行鎖(最大區別就在鎖的級別上);適合大數據,大併發。

19. 數據表類型有哪些

       答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。

       MyISAM:成熟、穩定、易於管理,快速讀取。一些功能不支持(事務等),表級鎖。

       InnoDB:支持事務、外鍵等特性、數據行鎖定。空間佔用大,不支持全文索引等。

20. MySQL數據庫做發佈系統的存儲,一天五萬條以上的增量,預計運維三年,怎麼優化?

a. 設計良好的數據庫結構,容許部分數據冗餘,儘可能避免join查詢,提升效率。

b. 選擇合適的表字段數據類型和存儲引擎,適當的添加索引。

c. mysql庫主從讀寫分離。

d. 找規律分表,減小單表中的數據量提升查詢速度。

e。添加緩存機制,好比memcached,apc等。

f. 不常常改動的頁面,生成靜態頁面。

g. 書寫高效率的SQL。好比 SELECT * FROM TABEL 改成 SELECT field_1, field_2, field_3 FROM TABLE.

21. 對於大流量的網站,您採用什麼樣的方法來解決各頁面訪問量統計問題?

答:a. 確認服務器是否能支撐當前訪問量。

b. 優化數據庫訪問。

c. 禁止外部訪問連接(盜鏈), 好比圖片盜鏈。

d. 控制文件下載。

e. 使用不一樣主機分流。

f. 使用瀏覽統計軟件,瞭解訪問量,有針對性的進行優化。

返回頂部

3、面向對象部分

一、什麼是面向對象?(理解着回答)

答:面向對象OO = 面向對象的分析OOA + 面向對象的設計OOD + 面向對象的編程OOP;通俗的解釋就是「萬物皆對象」,把全部的事物都看做一個個能夠獨立的對象(單元),它們能夠本身完成本身的功能,而不是像C那樣分紅一個個函數。

 如今純正的OO語言主要是Java和C#,PHP、C++也支持OO,C是面向過程的。     

二、簡述 private、 protected、 public修飾符的訪問權限。  

答:private : 私有成員, 在類的內部才能夠訪問。  

protected : 保護成員,該類內部和繼承類中能夠訪問。

public : 公共成員,徹底公開,沒有訪問限制。

三、堆和棧的區別? 

答:棧是編譯期間就分配好的內存空間,所以你的代碼中必須就棧的大小有明確的定義; 

堆是程序運行期間動態分配的內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存的大小。

四、XML 與 HTML 的主要區別 

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

(2) 在HTML中,若是上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你能夠省略</p>或者</li>之類的結束 標記。在XML中,絕對不能省略掉結束標記。  

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

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

(5) 在HTML中,能夠擁有不帶值的屬性名。在XML中,全部的屬性都必須帶有相應的值。

五、面向對象的特徵有哪些方面?

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

下面的解釋爲理解:

封裝:

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

 

繼承:

在定義和實現一個類的時候,能夠在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容做爲本身的內容,並能夠加入若干新的內容,或修改原來的方法使之更適合特殊的須要,這就是繼承。繼承是子類自動共享父類數據和方法的機制,這是類之間的一種關係,提升了軟件的可重用性和可擴展性。

多態:

多態是指程序中定義的引用變量所指向的具體類型和經過該引用變量發出的方法調用在編程時並不肯定,而是在程序運行期間才肯定,即一個引用變量倒底會指向哪一個類的實例對象,該引用變量發出的方法調用究竟是哪一個類中實現的方法,必須在由程序運行期間才能決定。

抽象:

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

六、抽象類和接口的概念以及區別?

答:抽象類:它是一種特殊的,不能被實例化的類,只能做爲其餘類的父類使用。使用abstract關鍵字聲明。

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

(1)抽象類的操做經過繼承關鍵字extends實現,而接口的使用是經過implements關鍵字來實現。

(2)抽象類中有數據成員,能夠實現數據的封裝,可是接口沒有數據成員。

(3)抽象類中能夠有構造方法,可是接口沒有構造方法。

(4)抽象類的方法能夠經過private、protected、public關鍵字修飾(抽象方法不能是private),而接口中的方法只能使用public關鍵字修飾。

(5)一個類只能繼承於一個抽象類,而一個類能夠同時實現多個接口。

(6)抽象類中能夠有成員方法的實現代碼,而接口中不能夠有成員方法的實現代碼。

7. 什麼是構造函數,什麼是析構函數,做用是什麼? 

答:構造函數(方法)是對象建立完成後第一個被對象自動調用的方法。它存在於每一個聲明的類中,是一個特殊的成員方法。做用是執行一些初始化的任務。Php中使用__construct()聲明構造方法,而且只能聲明一個。

析構函數(方法)做用和構造方法正好相反,是對象被銷燬以前最後一個被對象自動調用的方法。是PHP5中新添加的內容做用是用於實如今銷燬一個對象以前執行一些特定的操做,諸如關閉文件和釋放內存等。

 

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

答:重載,即覆蓋父類的方法,也就是使用子類中的方法替換從父類中繼承的方法,也叫方法的重寫。

覆蓋父類方法的關鍵是在子類中建立於父類中相同的方法包括方法的名稱、參數和返回值類型。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複製一個對象時候調用。

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

答:$this 當前對象

self  當前類

parent  當前類的父類

$this在當前類中使用,使用->調用屬性和方法。

self也在當前類中使用,不過須要使用::調用。

parent在類中使用。

十一、類中如何定義常量、如何類中調用常量、如何在類外調用常量。

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

定義常量使用關鍵字const.

例如:const PI = 3.1415326;

不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,

訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用。

即:類名 :: 類常量名;

十二、 做用域操做符::如何使用?都在哪些場合下使用?

答:調用類常量

調用靜態方法

1三、__autoload()方法的工做原理是什麼?

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

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

這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後

就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。

使用自動載入的魔術函數能夠沒必要要寫不少個include或者require函數。

返回頂部

4、ThinkPHP部分

一、常見的PHP框架

答:thinkPHP

yii

ZendFramework

CakePhp

sy

二、如何理解TP中的單一入口文件?

答:ThinkPHP採用單一入口模式進行項目部署和訪問,不管完成什麼功能,一個項目都有一個統一(但不必定是惟一)的入口。應該說,全部項目都是從入口文件開始的,而且全部的項目的入口文件是相似的,入口文件中主要包括:

定義框架路徑、項目路徑和項目名稱(可選)

定義調試模式和運行模式的相關常量(可選)

載入框架入口文件(必須)

 

三、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自己。

 

四、如何進行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搜尋得會更快一些,由於這些固定的長度是很容易計算下一個數據的偏移量的,因此讀取的天然也會很快。而若是字段不是定長的,那麼,每一次要找下一條的話,須要程序找到主鍵。

而且,固定長度的表也更容易被緩存和重建。不過,惟一的反作用是,固定長度的字段會浪費一些空間,由於定長的字段不管你用不用,他都是要分配那麼多的空間。

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

答:核心 + 行爲 + 驅動

TP官方簡稱爲:CBD

核心(Core):就是框架的核心代碼,不可缺乏的東西,TP自己是基於MVC思想開發的框架。

行爲(Behavior) :行爲在新版ThinkPHP的架構裏面起着舉足輕重的做用,在系統核心之上,設置了不少標籤擴展位,而每一個標籤位置能夠依次執行各自的獨立行爲。行爲擴展就所以而誕生了,並且不少系統功能也是經過內置的行爲擴展完成的,全部行爲擴展都是可替換和增長的,由此造成了底層框架可組裝的基礎。

驅動( Driver ):數據庫驅動、緩存驅動、標籤庫驅動和模板引擎驅動,以及外置的類擴展。

框架,即framework。其實就是某種應用的半成品,就是一組組件,供你選用完成你本身的系統。簡單說就是使用別人搭好的舞臺,你來作表演。並且,框架通常是成熟的,不斷升級的軟件。

 

六、什麼是慣例配置?

答:慣例配置上一頁下一頁慣例重於配置是系統遵循的一個重要思想,系統內置有一個慣例配置文件(位於系統目錄下面的Conf\convention.php),按照大多數的使用對經常使用參數進行了默認配置。因此,對應用項目的配置文件,每每只須要配置和慣例配置不一樣的或者新增的配置參數,若是你徹底採用默認配置,甚至能夠不須要定義任何配置文件。

慣例配置文件會被系統自動加載,無需在項目中進行加載。

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

答:SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,注入者能夠在表單中輸入一段數據庫查詢代碼並提交,程序將提交的信息拼湊生成一個完整sql語句,服務器被欺騙而執行該條惡意的SQL命令。注入者根據程序返回的結果,成功獲取一些敏感數據,甚至控制整個服務器,這就是SQL注入。

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

答:(1)查詢條件儘可能使用數組方式,這是更爲安全的方式;

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

(3)開啓數據字段類型驗證,能夠對數值數據類型作強制轉換;(3.1版本開始已經強制進行字段類型驗證了)

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

(5)使用字段類型檢查、自動驗證和自動完成機制等避免惡意數據的輸入。

 

九、如何開啓調試模式?調試模式有什麼好處?

答:開啓調試模式很簡單,只須要在入口文件中增長一行常量定義代碼:

<?Php,bv

    //開啓調試模式

    define('APP_DEBUG', true);

    //加載框架入口文件

    require './ThinkPHP/ThinkPHP.php';

在完成開發階段部署到生產環境後,只須要刪除調試模式定義代碼便可切換到部署模式。開啓調試模式後,系統會首先加載系統默認的調試配置文件,而後加載項目的調試配置文件,調試模式的優點在於:

 

開啓日誌記錄,任何錯誤信息和調試信息都會詳細記錄,便於調試;

關閉模板緩存,模板修改能夠即時生效;

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

關閉字段緩存,數據表字段修改不受緩存影響;

嚴格檢查文件大小寫(即便是Windows平臺),幫助你提早發現Linux部署問題;

能夠方便用於開發過程的不一樣階段,包括開發、測試和演示等任何須要的狀況,不一樣的應用模式能夠配置獨立的項目配置文件。

十、TP中支持哪些配置模式?優先級?

答:ThinkPHP在項目配置上面創造了本身獨有的分層配置模式,其配置層次體如今:

慣例配置->項目配置->調試配置->分組配置->擴展配置->動態配置

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

十一、TP中的URL模式有哪幾種?默認是哪一種?

答:ThinkPHP支持四種URL模式,能夠經過設置URL_MODEL參數來定義,包括普通模式、PATHINFO、REWRITE和兼容模式。

默認模式爲:PATHINFO模式,設置URL_MODEL 爲1

十二、TP中系統變量有哪些?如何獲取系統變量?

答:獲取系統變量的方法:

 

只須要在Action中調用下面方法:

$this->方法名("變量名",["過濾方法"],["默認值"])

1三、ThinkPHP框架中D函數與M函數的區別是什麼?

答:M方法實例化模型無需用戶爲每一個數據表定義模型類,D方法能夠自動檢測模型類,若是存在自定義的模型類,則實例化自定義模型類,若是不存在,則會自動調用M方法去實例化Model基類。同時對於已實例化過的模型,不會重複去實例化(單例模式)。

返回頂部

5、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}><br>  

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

<{$str|upper}><{*所有大寫*}><br>  

<{$str|lower}><{*所有小寫*}><br>  

<{$str|lower|upper}><{*所有大寫,調節從左至右*}><br>

<{$leg|truncate}><{*字符串截取,默認80個字符*}><br>  

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

 

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.marty模板技術的用途是什麼?

爲了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

返回頂部

6、二次開發系統(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中概念,設計和使用模板,必需要理解下面幾個概念

一、板塊(封面)模板:

指網站主頁或比較重要的欄目封面頻道使用的模板,通常用「index_識別ID.htm」命名,此外,用戶單獨定義的單個頁面或自定義標記,也可選是否支持板塊模板標記,若是支持,系統會用板塊模板標記引擎去解析後才輸出內容或生成特定的文件。

二、列表模板:

指網站某個欄目的全部文章列表的模板,通常用 「list_識別ID.htm」 命名。

三、檔案模板:

表示文檔查看頁的模板,如文章模板,通常用 「article_識別ID.htm」 命名。

四、其它模板:

通常系統常規包含的模板有:主頁模板、搜索模板、RSS、JS編譯功能模板等,此外用戶也能夠自定義一個模板建立爲任意文件。

 

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

 

 

列表 內容 等標籤 只能在其本範圍內使用,列表標籤只能在列表中使用,內容標籤只能在內容標籤中使用。

全局標籤能在全部頁面中使用

 

12.熟悉經常使用類庫

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

返回頂部

7、微信公衆平臺開發

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

 

五、經常使用函數

 

把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兩個值,用來獲取應用的受權碼  

返回頂部

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

1. 以PHP+MYSQL爲方向,熟練掌握smarty模板引擎、ThinkPHP框架、微信公衆平臺開發、DEDE、ecshop等二次開發系統,對面向對象有必定的理解;數據庫方面,熟練掌握MYSQL、MSSQL等數據庫;熟悉在linux下的PHP開發

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

3. 一年的項目開發經驗,使用smarty開發過‘XXXXXXXX’,ThinkPHP開發過‘XXXXXXXX’,使用微信公衆平臺開發過‘就業服務網’的公衆號,使用織夢繫統開發過企業站等

相關文章
相關標籤/搜索