日韩精品欧美激情国产一区_中文无码精品一区二区三区在线_岛国毛片AV在线无码不卡_亞洲歐美日韓精品在線_使劲操好爽好粗视频在线播放_日韩一区欧美二区_八戒八戒网影院在线观看神马_亚洲怡红院在线色网_av无码不卡亚洲电影_国产麻豆媒体MDX

37道PHP面試題(附答案)

時間:2019-08-20 16:13:15 類型:PHP
字號:    

    整理了一部分PHP面試題,有助于大家更好的進行PHP面試做準備!記得收藏好!

1、什么是面向?qū)ο??主要特征是什么?/strong>


面向?qū)ο笫浅绦虻囊环N設(shè)計方式,它利于提高程序的重用性,使程序結(jié)構(gòu)更加清晰。主要特征:封裝、繼承、多態(tài)。

2、SESSION 與 COOKIE的區(qū)別是什么,請從協(xié)議,產(chǎn)生的原因與作用說明?

A、http無狀態(tài)協(xié)議,不能區(qū)分用戶是否是從同一個網(wǎng)站上來的,同一個用戶請求不同的頁面不能看做是同一個用戶。
B、SESSION存儲在服務(wù)器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。
禁用cookie后,session不能正常使用。Session的缺點:保存在服務(wù)器端,每次讀取都從服務(wù)器進行讀取,對服務(wù)器有資源消耗。Session保存在服務(wù)器端的文件或數(shù)據(jù)庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。

3、HTTP 狀態(tài)中302、403、 500代碼含義?

一二三四五原則:(即一:消息系列;二:成功系列;三:重定向系列;四:請求錯誤系列;五:服務(wù)器端錯誤系列。)
302:臨時轉(zhuǎn)移成功,請求的內(nèi)容已轉(zhuǎn)移到新位置
403:禁止訪問 
500:服務(wù)器內(nèi)部錯誤 
401:代表未授權(quán)。

4、請寫出數(shù)據(jù)類型(int char varchar datetime text)的意思;請問 varchar 和 char有什么區(qū)別?

Int 整數(shù)char 定長字符 Varchar 變長字符 Datetime 日期時間型Text 文本型 Varchar與char的區(qū)別 char是固定長度的字符類型,分配多少空間,就占用多長空間。Varchar是可變長度的字符類型,內(nèi)容有多大就占用多大的空間,能有效節(jié)省空間。由于varchar類型是可變的,所以在數(shù)據(jù)長度改變的時,服務(wù)器要進行額外的操作,所以效率比char類型低。

5、MyISAM和 InnoDB 的基本區(qū)別?索引結(jié)構(gòu)如何實現(xiàn)?

A、MyISAM類型不支持事務(wù),表鎖,易產(chǎn)生碎片,要經(jīng)常優(yōu)化,讀寫速度較快,適合用于頻繁查詢的應(yīng)用;
B、InnoDB類型支持事務(wù),行鎖,有崩潰恢復(fù)能力,讀寫速度比MyISAM慢,適合于插入和更新操作比較多的應(yīng)用,空間占用大,不支持全文索引等。
創(chuàng)建索引:alert table tablename add index 索引名 (`字段名`)

6、isset() 和 empty() 區(qū)別

isset判斷變量是否存在,可以傳入多個變量,若其中一個變量不存在則返回假;empty判斷變量是否為空為假,只可傳一個變量,如果為空為假則返回真。

7、請說明 PHP 中傳值與傳引用的區(qū)別。什么時候傳值什么時候傳引用?

按值傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部都會被忽略
按引用傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部也能反映出這些修改
優(yōu)缺點:按值傳遞時,php必須復(fù)制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復(fù)制值,對于性能提高很有好處。

8、在PHP中error_reporting這個函數(shù)有什么作用?

設(shè)置PHP的報錯級別并返回當前級別。

9、說說你對緩存技術(shù)的了解?

緩存技術(shù)是將動態(tài)內(nèi)容緩存到文件中,在一定時間內(nèi)訪問動態(tài)頁面直接調(diào)用緩存文件,而不必重新訪問數(shù)據(jù)庫。

10、現(xiàn)在編程中經(jīng)常采取MVC三層結(jié)構(gòu),請問MVC分別指哪三層,有什么優(yōu)點?

MVC三層分別指:業(yè)務(wù)模型、視圖、控制器,由控制器層調(diào)用模型處理數(shù)據(jù),然后將數(shù)據(jù)映射到視圖層進行顯示,優(yōu)點是:①可以實現(xiàn)代碼的重用性,避免產(chǎn)生代碼冗余;②M和V的實現(xiàn)代碼分離,從而使同一個程序可以使用不同的表現(xiàn)形式

11、AJAX的優(yōu)勢是什么?

ajax是異步傳輸技術(shù),可以通過javascript實現(xiàn),也可以通過JQuery框架實現(xiàn),實現(xiàn)局部刷新,減輕了服務(wù)器的壓力,也提高了用戶體驗。

12、在程序的開發(fā)中,如何提高程序的運行效率?

A、優(yōu)化SQL語句,查詢語句中盡量不使用select *,用哪個字段查哪個字段;少用子查詢可用表連接代替;少用模糊查詢;
B、數(shù)據(jù)表中創(chuàng)建索引;
C、對程序中經(jīng)常用到的數(shù)據(jù)生成緩存。

13、對于大流量的網(wǎng)站,您采用什么樣的方法來解決訪問量問題?
A、有效使用緩存,增加緩存命中率
B、使用負載均衡
C、對靜態(tài)文件使用cdn進行存儲和加速
D、想法減少數(shù)據(jù)庫的使用
E、查看出現(xiàn)統(tǒng)計的瓶頸在哪里
F、反向代理

14、語句include和require的區(qū)別是什么?為避免多次包含同一文件,可用什么語句代替它們? 

區(qū)別:
在失敗的時候:
include產(chǎn)生一個warning,而require產(chǎn)生直接產(chǎn)生錯誤中斷
require在運行前載入
include在運行時載入
代替:
require_once
include_once

15、foo()和@foo()之間有什么區(qū)別?

@代表所有warning忽略

16、簡述php的垃圾收集機制。

答案:php中的變量存儲在變量容器zval中,zval中除了存儲變量類型和值外,還有is_ref和refcount字段。refcount表示指向變量的元素個數(shù),is_ref表示變量是否有別名。如果refcount為0時,就回收該變量容器。如果一個zval的refcount減1之后大于0,它就會進入垃圾緩沖區(qū)。當緩沖區(qū)達到最大值后,回收算法會循環(huán)遍歷zval,判斷其是否為垃圾,并進行釋放處理。

17、如何實現(xiàn)PHP的安全最大化?怎樣避免SQL注入漏洞和XSS跨站腳本攻擊漏洞?

答:基本原則:不對外界展示服務(wù)器或程序設(shè)計細節(jié)(屏蔽錯誤),不相信任何用戶提交的數(shù)據(jù)(過濾用戶提交)。

18、echo、print_r、print、var_dump區(qū)別

echo:語句結(jié)構(gòu);
print:是函數(shù),有返回值
print_r:能打印數(shù)組,對象
var_dump:能打印對象數(shù)組,并且?guī)?shù)據(jù)類型

19、寫出smarty模板的特點

速度快,編譯型,緩存技術(shù),插件機制,強大的表現(xiàn)邏輯

20、PHP如何實現(xiàn)頁面跳轉(zhuǎn)?

方法一:php函數(shù)跳轉(zhuǎn),缺點,header頭之前不能有輸出,跳轉(zhuǎn)后的程序繼續(xù)執(zhí)行,可用exit中斷執(zhí)行后面的程序。
header("Location:網(wǎng)址");//直接跳轉(zhuǎn)
header("refresh:3;url=http://www.jsdaima.com");//三秒后跳轉(zhuǎn)
方法二:利用meta
echo"";

21、如何把一個GB2312格式的字符串裝換成UTF-8格式?

iconv('GB2312','UTF-8','js代碼(www.jsdaima.com)是IT資源下載與IT技能學習平臺。');
?>

22、如果需要原樣輸出用戶輸入的內(nèi)容,在數(shù)據(jù)入庫前,要用哪個函數(shù)處理?

htmlspecialchars或者htmlentities

23、什么是 CSRF 攻擊 ?XSS 攻擊?如何防范?

CSRF,跨站請求偽造,攻擊方偽裝用戶身份發(fā)送請求從而竊取信息或者破壞系統(tǒng)。
講述基本原理:用戶訪問A網(wǎng)站登陸并生成了cookie,再訪問B網(wǎng)站,如果A網(wǎng)站存在CSRF漏洞,此時B網(wǎng)站給A網(wǎng)站的請求(此時相當于是用戶訪問),A網(wǎng)站會認為是用戶發(fā)的請求,從而B網(wǎng)站就成功偽裝了你的身份,因此叫跨站腳本攻擊。

CSRF防范:
A、合理規(guī)范api請求方式,GET,POST
B、對POST請求加token令牌驗證,生成一個隨機碼并存入session,表單中帶上這個隨機碼,提交的時候服務(wù)端進行驗證隨機碼是否相同。

XSS,跨站腳本攻擊。
防范:不相信任何輸入,過濾輸入。 


24、安全對一套程序來說至關(guān)重要,請說說在開發(fā)中應(yīng)該注意哪些安全機制?

A、防遠程提交;
B、防SQL注入,對特殊代碼進行過濾;
C、防止注冊機灌水,使用驗證碼。

25、對json數(shù)據(jù)格式的理解?

JSON(javascript object Notation)是一種輕量級的數(shù)據(jù)交換格式,json數(shù)據(jù)格式固定,可以被多種語言用作數(shù)據(jù)的傳遞。

26、什么是事務(wù)?及其特性?

答:事務(wù):是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用的基本邏輯單位。

事務(wù)特性:
A、原子性:即不可分割性,事務(wù)要么全部被執(zhí)行,要么就全部不被執(zhí)行。
B、一致性或可串性。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)
C、隔離性。在事務(wù)正確提交之前,不允許把該事務(wù)對數(shù)據(jù)的任何改變提供給任何其他事務(wù),
D、持久性。事務(wù)正確提交后,其結(jié)果將永久保存在數(shù)據(jù)庫中,即使在事務(wù)提交后有了其他故障,事務(wù)的處理結(jié)果也會得到保存。

或者這樣理解:
事務(wù)就是被綁定在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那么整個操作就被失敗,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點。為了確保要么執(zhí)行,要么不執(zhí)行,就可以使用事務(wù)。要將有組語句作為事務(wù)考慮,就需要通過ACID測試,即原子性,一致性,隔離性和持久性。

27、什么是鎖?

答:數(shù)據(jù)庫是一個多用戶使用的共享資源。當多個用戶并發(fā)地存取數(shù)據(jù)時,在數(shù)據(jù)庫中就會產(chǎn)生多個事務(wù)同時存取同一數(shù)據(jù)的情況。若對并發(fā)操作不加控制就可能會讀取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。

加鎖是實現(xiàn)數(shù)據(jù)庫并發(fā)控制的一個非常重要的技術(shù)。當事務(wù)在對某個數(shù)據(jù)對象進行操作前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)就對該數(shù)據(jù)對象有了一定的控制,在該事務(wù)釋放鎖之前,其他的事務(wù)不能對此數(shù)據(jù)對象進行更新操作。

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

28、索引的作用?和它的優(yōu)點缺點是什么?

答:索引就一種特殊的查詢表,數(shù)據(jù)庫的搜索引擎可以利用它加速對數(shù)據(jù)的檢索。它很類似與現(xiàn)實生活中書的目錄,不需要查詢整本書內(nèi)容就可以找到想要的數(shù)據(jù)。索引可以是唯一的,創(chuàng)建索引允許指定單個列或者是多個列。缺點是它減慢了數(shù)據(jù)錄入的速度,同時也增加了數(shù)據(jù)庫的尺寸大小。

29、如何通俗地理解三個范式? 

第一范式:1NF是對屬性的原子性約束,要求屬性具有原子性,不可再分解;
第二范式:2NF是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性;
第三范式:3NF是對字段冗余性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗余。

30、主鍵、外鍵和索引的區(qū)別?
定義:
主鍵--唯一標識一條記錄,不能有重復(fù)的,不允許為空
外鍵--表的外鍵是另一表的主鍵, 外鍵可以有重復(fù)的, 可以是空值
索引--該字段沒有重復(fù)值,但可以有一個空值

作用:
主鍵--用來保證數(shù)據(jù)完整性
外鍵--用來和其他表建立聯(lián)系用的
索引--是提高查詢排序的速度

個數(shù):
主鍵--主鍵只能有一個
外鍵--一個表可以有多個外鍵
索引--一個表可以有多個唯一索引

31、簡述 private、 protected、 public修飾符的訪問權(quán)限。 

private : 私有成員, 在類的內(nèi)部才可以訪問。 
protected : 保護成員,該類內(nèi)部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。

32、堆和棧的區(qū)別? 

A、堆是程序運行期間動態(tài)分配的內(nèi)存空間,你可以根據(jù)程序的運行情況確定要分配的堆內(nèi)存的大?。?/span>
B、棧是編譯期間就分配好的內(nèi)存空間,因此你的代碼中必須就棧的大小有明確的定義。 

33、常用的魔術(shù)方法有哪些?舉例說明

答:php規(guī)定以兩個下劃線(__)開頭的方法都保留為魔術(shù)方法,所以建議大家函數(shù)名最好不用__開頭,除非是為了重載已有的魔術(shù)方法。 
__construct() 實例化類時自動調(diào)用。
__destruct() 類對象使用結(jié)束時自動調(diào)用。
__set() 在給未定義的屬性賦值的時候調(diào)用。
__get() 調(diào)用未定義的屬性時候調(diào)用。
__isset() 使用isset()或empty()函數(shù)時候會調(diào)用。
__unset() 使用unset()時候會調(diào)用。
__sleep() 使用serialize序列化時候調(diào)用。
__wakeup() 使用unserialize反序列化的時候調(diào)用。
__call() 調(diào)用一個不存在的方法的時候調(diào)用。
__callStatic()調(diào)用一個不存在的靜態(tài)方法是調(diào)用。
__toString() 把對象轉(zhuǎn)換成字符串的時候會調(diào)用。比如 echo。
__invoke() 當嘗試把對象當方法調(diào)用時調(diào)用。
__set_state() 當使用var_export()函數(shù)時候調(diào)用。接受一個數(shù)組參數(shù)。
__clone() 當使用clone復(fù)制一個對象時候調(diào)用。

34、$this和self、parent這三個關(guān)鍵詞分別代表什么?在哪些場合下使用?

$this 當前對象
self 當前類
parent 當前類的父類

$this在當前類中使用,使用->調(diào)用屬性和方法
self也在當前類中使用,不過需要使用::調(diào)用
parent在類中使用

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

調(diào)用類常量
調(diào)用靜態(tài)方法

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

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

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

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

就執(zhí)行include或者require來載入該類,然后程序繼續(xù)執(zhí)行,如果這個路徑下不存在該文件時就提示錯誤。

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

37、簡述高并發(fā)網(wǎng)站解決方案。

A、前端優(yōu)化(CND加速、建立獨立圖片服務(wù)器)
B、服務(wù)端優(yōu)化(頁面靜態(tài)化、并發(fā)處理[異步|多線程]、隊列處理)
C、數(shù)據(jù)庫優(yōu)化(數(shù)據(jù)庫緩存[Memcachaed|Redis]、讀寫分離、分庫分表、分區(qū))

D、Web服務(wù)器優(yōu)化(負載均衡、反向代理) 

學PHP高薪就業(yè)、南昌PHP培訓就到雅騰教育,靠譜;小班現(xiàn)場授課、手把手輔導學員、理論與企業(yè)真實項目結(jié)合教學,提升學員的實戰(zhàn)能力,積累項目工作經(jīng)驗。