2017php經典面試題 1、PHP語言的一
1、PHP語言的一大優勢是跨平臺,什麼是跨平臺?一、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、說一下你所掌握的網頁前端技術有哪些?
熟練掌握DIV+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格式
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手冊,認真檢視
二、資料庫部分
1. 常見的關係型資料庫管理系統產品有?
答:Oracle、SQL Server、MySQL、Sybase、DB2、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. 使用瀏覽統計軟體,瞭解訪問量,有針對性的進行優化。
三、面向物件部分
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中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略</p>或者</li>之類的結束 標記。在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本身。
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本身是基於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、如何開啟除錯模式?除錯模式有什麼好處?
答:開啟除錯模式很簡單,只需要在入口檔案中增加一行常量定義程式碼:
<?Php,bv
//開啟除錯模式
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}><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
六、二次開發系統(DEDE、ecshop):
1.對二次開發的理解
二次開發,簡單的說就是在現有的軟體上進行定製修改,功能的擴充套件,然後達到自己想要的功能,一般來說都不會改變原有系統的核心。
2. MVC
1、PHP語言的一大優勢是跨平臺,什麼是跨平臺?一、PHP基礎:
PHP的執行環境最優搭配為Apache+MySQL+PHP,此執行環境可以在不同作業系統(例如windows、Linux等)上配置,不受作業系統的限制,所以叫跨平臺
2、WEB開發中資料提交方式有幾種?有什麼區別?百度使用哪種方式?
Get與
1、寫出12.23.34.0/29的掩碼
11111111.11111111.11111111.11111000 255.255.255.248
2、簡述衝突域與廣播域的區別
衝突域:基於osi的第一層物理層。 一個站點向另一個站
以下所有題目的關鍵資訊都會用【】括起來,我們不對題目進行分析,只給出題目的解決方案;如有疑問請不吝賜教。
題目:
請實現一個演算法,確定一個字串的所有字元【是否全都不同】。這裡我們要求【不允許使用額 ref 使用 linu 學習資源 chan ima 什麽 img c語言 本篇文章整理了幾道Linux下C語言的經典面試題,相信對大家更好的理解Linux下的C語言會有很大的幫助,歡迎大家探討指正。
1、如果在Linux下使用GCC編譯器執行下列程序,輸出結果是什麽?
答
1、問題描述
現在有一個臺階,一共有n階,你一次性可以走1步、2步、3步、......、n步。問:一共有多少種走法。
2、求解思路
第一步走1階:那麼這種情況下的走法數量和剩下n-1階的走法數量有關;
你做過哪些模組?
登陸註冊模組,商品管理模組,購物車模組,訂單管理模組,RBAC模組,評論模組,會員管理模組等
MVC是什麼?相互間有什麼關係?
mvc的全稱是 model view controller,是模型-檢視-控制器的縮 前言:
為啥叫C語言程式猿必會呢?因為特別重要,學習C語言不知道記憶體分割槽,對很多問題你很難解釋,如經典的:傳值傳地址,前者不能改變實參,後者可以,知道為什麼?還有經典面試題如下:
#include <stdio.h>
#include <stdlib.h>#in
將一個字元陣列的內容為:“student a am i”改為“i am a student”
要求: 1. 不能使用庫函式;
2.只能開闢有限個空間(空間個數和字串的長度無關)。
演算法思路:先將字元陣列"student a am i"逆置變為"i ma a 如何學習好Java、Spring Boot、如果學習好MongoDB?如何拿高薪?阿里巴巴雲棲社群整理了MongoDB與Java 經典面試題、課程,好資源值得收藏,陸續更新中。
【MongoDB面試題】[@徐雷frank]MongoDB如果有效應對單節點故障? https://yq.aliyun.com
/* 比較一下
:http://blog.csdn.net/iilovetopview/article/details/43745059
go的運算效率遜於D(LDC 編譯器0.15.1(LL
對這篇文章記憶猶新,因為之前找工作面試的時候,遇到過一家公司就是用的這套面試題。現在就結合考查的知識點和我總結完 C 語言再學習後的深入理解,來詳細的講講我對這篇文章的總結。
一、請填寫BOOL ,
第一部分:基本概念及其它問答題
1、關鍵字static的作用是什麼?
這個簡單的問題很少有人能回答完全。在C語言中,關鍵字static有三個明顯的作用:
1). 在函式體,一個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。
2). 在模組內(但在函式體外),一個被宣告為
1、 面向物件的特徵有哪些方面
1.抽象:
抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。
1. 如果 a=1 ; b = a++ + (a++) + 1 + (++a) + (a++) + (++a) + a + (++a) = ? 並且這時候a =?
解答: 先說 a =? 首先求a , 有一個極簡單的方法,個人總結啊:
集合:
在程式設計中,我們需要管理很多物件集,比如某班全部的同學資訊,某個公司的人員資料等等。JAVA集合就是提供某種資料結構的支援,即存放物件,並讓這些物件按照某種資料結構存放。
集合與陣列的區別:
1. 陣列存放的元素個數是在定義陣列時固定的。
JDK(Java Development Kit)即為Java開發工具包,包含編寫Java程式所必須的編譯、執行等開發工具以及JRE。開發工具如:用於編譯java程式的javac命令、用於啟動JVM執行java程式的java命令、用於生成文件的javadoc命令以及用於打包的jar命令等等。&nbs
那些關於1的個數的經典面試題
好長時間沒有練演算法了,筆試題一做,發現非常吃力,所以近日來找來《程式設計之美》一書來看看練練。為了激勵自己多練,樓樓可能會出個專欄什麼的,感興趣的同學我們可以一起抱團,樓樓也會保證每天都會更新。那今天呢,就是《程式設計之美》的第
題目
數軸上從左到右有n各點a[0], a[1], ……,a[n -1],給定一根長度為L的繩子,求繩子最多能覆蓋其中的幾個點。
思路一
遍歷所有區間跟繩子L比較。
i遍歷區間起點,j遍歷區間終
1.主鍵、外來鍵的作用,索引的優點與不足?
答:主鍵:是表中的唯一標示鍵。作用:保證實體的完整性;加快資料庫的操作速度;增加新的表記錄時,資料庫會自動檢索新記錄的主鍵值,不允許該值與其他表中記錄的主鍵重複;資料庫會按主鍵值的順序顯示記錄,如果沒有設定主鍵,則按輸入的順序顯示
package thread;
/**
*
* 一個關於執行緒的經典面試題,要求用三個執行緒,按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5,
* 然後是執行緒2列印6,7,8,9,10, 然後是執行緒3列印 相關推薦
2017php經典面試題 1、PHP語言的一
運維經典面試題之網路篇(一)
經典面試題golang實現方式(一)
Linux下C語言的幾道經典面試題
遞迴求解走臺階問題,一次可以走一步、兩步、三步、...、n步(經典面試題——增強版走臺階)
應屆生最新PHP面試題(1)
C語言程式猿必會的記憶體四區及經典面試題解析
經典面試題(1)
MongoDB與Java 經典面試題、課程,好資源值得收藏
Go 語言解面試題1
C語言再學習 -- 詳解C++/C 面試題 1
C語言經典面試題 與 C語言面試寶典
java經典面試題(1)
前端經典面試題a++和++a 總結及自我解答(1)
List、Set、Map集合最常用六個子類及它們之間的區別詳解(含經典面試題)
JAVA面試題1:JDK、JRE、JVM關係是什麼?
程式設計之美1:那些關於1的個數的經典面試題
[經典面試題][百度]數軸上從左到右有n各點a[0], a[1], ……,a[n -1],給定一根長度為L的繩子,求繩子最多能覆蓋其中的幾個點。
軟體測試經典面試題(1)
一個關於執行緒的經典面試題,要求用三個執行緒,按順序列印1,2,3,4,5.... 71,72,73,74, 75. 執行緒1先列印1,2,3,4,5, * 然後是執行緒2列印6,7,8,9,10, 然後是