久久久久久AV无码免费看大片,亚洲一区精品人人爽人人躁,国产成人片无码免费爱线观看,亚洲AV成人无码精品网站,为什么晚上搞的时候要盖被子

37道PHP面試題(附答案)

時(shí)間:2019-08-20 16:13:15 類型:PHP
字號(hào):    

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

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


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

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

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

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

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

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

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

5、MyISAM和 InnoDB 的基本區(qū)別?索引結(jié)構(gòu)如何實(shí)現(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判斷變量是否存在,可以傳入多個(gè)變量,若其中一個(gè)變量不存在則返回假;empty判斷變量是否為空為假,只可傳一個(gè)變量,如果為空為假則返回真。

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

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

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

設(shè)置PHP的報(bào)錯(cuò)級(jí)別并返回當(dāng)前級(jí)別。

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

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

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

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

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

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

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

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

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

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

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

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

@代表所有warning忽略

16、簡(jiǎn)述php的垃圾收集機(jī)制。

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

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

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

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

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

19、寫出smarty模板的特點(diǎn)

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

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

方法一:php函數(shù)跳轉(zhuǎn),缺點(diǎ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、如何把一個(gè)GB2312格式的字符串裝換成UTF-8格式?

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

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

htmlspecialchars或者h(yuǎn)tmlentities

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

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

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

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


24、安全對(duì)一套程序來(lái)說(shuō)至關(guān)重要,請(qǐng)說(shuō)說(shuō)在開發(fā)中應(yīng)該注意哪些安全機(jī)制?

A、防遠(yuǎn)程提交;
B、防SQL注入,對(duì)特殊代碼進(jìn)行過(guò)濾;
C、防止注冊(cè)機(jī)灌水,使用驗(yàn)證碼。

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

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

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

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

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

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

27、什么是鎖?

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

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

基本鎖類型:鎖包括行級(jí)鎖和表級(jí)鎖

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

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

29、如何通俗地理解三個(gè)范式? 

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

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

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

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

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

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

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

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

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

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

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

$this 當(dāng)前對(duì)象
self 當(dāng)前類
parent 當(dāng)前類的父類

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

35、作用域操作符::如何使用?都在哪些場(chǎng)合下使用?

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

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

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

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

這個(gè)函數(shù)會(huì)根據(jù)實(shí)例化的類的名稱來(lái)查找這個(gè)類文件的路徑,當(dāng)判斷這個(gè)類文件路徑下確實(shí)存在這個(gè)類文件后

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

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

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

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

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

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