您好(hǎo),歡迎來(lái)到(dào$☆∞)盤龍區華銘誠泰網絡工作室官方網站(zhàn)!ZJJCL©×•.CN
新聞動态
您現(xiàn)在的(de)位置:首頁 > 技(jì)術(shù)文(wén)摘
2020最新整理(lǐ)PHP面試題附答(dá)<>£案
來(lái)源:創立工(gōng)作(zuò)室 作(zuò)☆‌者:馮軍 發布時(shí)間(jiān):2020-0♠&"λ7-11 13:20:31 閱讀(dú) 1122λ₩ 次

1、什(shén)麽事(shì)面向對(duì)象?主↓φ♠ 要(yào)特征是(shì)什(shén)麽?
面向對(duì)象是(shì)程序的(de)一(yī)種設計(jì)±λ♠方式,它利于提高(gāo)程序的(de)重用©≠"(yòng)性,使程序結構更加清晰。主要(✘¶σφyào)特征:封裝、繼承、多(duō)态。

2、SESSION 與 COOKIE的(de)區(qū)€↔别是(shì)什(shén)麽,請(qǐng)從(cóng)協議×✔♣​(yì),産生(shēng)的(de)原因與作(zuò)用(yòng)說£ ±(shuō)明(míng)?
A、http無狀态協議(yì),不(bù)能≥✔∑(néng)區(qū)分(fēn)用(yòng)戶是(shì)否是(shì↕♣$ )從(cóng)同一(yī)個(gè)網站(≤₹∑"zhàn)上(shàng)來(lái)的(de),δ★π同一(yī)個(gè)用(yòng)戶請(q♥☆♦ǐng)求不(bù)同的(de)頁面不(bù)能(néng)看(kàn)做↑®Ω(zuò)是(shì)同一(yī)個(gè)用(yòng)戶。
B、SESSION存儲在服務器(qì)端,COOKIE保存在客戶端γ‍♣φ。Session比較安全,cookie用(yòng)某些(xi↓β$ē)手段可(kě)以修改,不(bù)安全。Session依賴于cook✔×✔ie進行(xíng)傳遞。
禁用(yòng)cookie後,session不(bù)π↕能(néng)正常使用(yòng)。Sessio$¶n的(de)缺點:保存在服務器(qì)端,每次讀(dú)取都(dōu)從(✔♥•cóng)服務器(qì)進行(xíng)讀(dú)取₹×,對(duì)服務器(qì)有(yǒu)資源消耗。S↓‍©₽ession保存在服務器(qì)端的(de)文(wén)件(jiàn)或​©π數(shù)據庫中,默認保存在文(wén)件(jiàn)中,文(>≥♥wén)件(jiàn)路(lù)徑由php配置文♦"(wén)件(jiàn)的(de)session.save_path指定。Se≈₽®ssion文(wén)件(jiàn)是(sα₹hì)公有(yǒu)的(de)。

3、HTTP 狀态中302、403、 500代碼含義?₹✘
一(yī)二三四五原則:(即一(yī):消息系列;二:成功系 ♦$α列; 三:重定向系列;四:請(qǐng)求錯(cuò)誤系列;五:服務器(qì♥ )端錯(cuò)誤系列。)
302:臨時(shí)轉移成功,請(qǐng)求的(de)內→€(nèi)容已轉移到(dào)新位置
403:禁止訪問(wèn)
500:服務器(qì)內(nèi)部錯(c€≠uò)誤
401:代表未授權。

4、請(qǐng)寫出數(shù)據類型(int<  char varchar datetimeλα text)的(de)意思;請(qǐng)問(wèn) varchγ≈ar 和(hé) char有(yǒu)什(shén)麽區(qū)别?
Int 整數(shù)char 定長(cháng)字符 Varchar★‌ 變長(cháng)字符 Datetime×‌★∏ 日(rì)期時(shí)間(jiān)型Text 文(wén)本型 V₹₹≈archar與char的(de)區(qū)别 ch"₩→≠ar是(shì)固定長(cháng)度的(de)字符類型,分(fēn)配多(d‍÷✔‍uō)少(shǎo)空(kōng)間(jiānσ$≤),就(jiù)占用(yòng)多(duō) γ•長(cháng)空(kōng)間(jiān)。Varchar是(shì)可σ≠(kě)變長(cháng)度的(de)字符類型,內(nèi)容有(yǒu)多∏ (duō)大(dà)就(jiù)占用(yòng)多(duō)大(→‍₽εdà)的(de)空(kōng)間(jiān),✘$λ能(néng)有(yǒu)效節省空(kōng)間(jiāφ ₩n)。由于varchar類型是(shì)可(kě)'​‍÷變的(de),所以在數(shù)據長(cháng)度改變的(de)時(sε®hí),服務器(qì)要(yào)進行(∏™∞↑xíng)額外(wài)的(de)操作(zuò)σ™,所以效率比char類型低(dī)。

5、MyISAM和(hé) InnoDB 的(de)基本區(qū)别?索引"§結構如(rú)何實現(xiàn)?
A、MyISAM類型不(bù)支持事(shì)務±$,表鎖,易産生(shēng)碎片,要(yào)經常優化(huà<₽),讀(dú)寫速度較快(kuài),适合用(y $òng)于頻(pín)繁查詢的(de)應用(yòng);
B、InnoDB類型支持事(shì)務,行(x÷≤$δíng)鎖,有(yǒu)崩潰恢複能(néng)力,讀δε¶•(dú)寫速度比MyISAM慢(màn),适合于插入和(hé)©δ更新操作(zuò)比較多(duō)的(de)應用(yò<™® ng),空(kōng)間(jiān)占用(yòng)大(dà),×∞♣λ不(bù)支持全文(wén)索引等。
創建索引:alert table tablename add index 索₩★™引名 (`字段名`)

6、isset() 和(hé) empty() ₹δ區(qū)别
isset判斷變量是(shì)否存在,可(kě)以傳入多(duō)個(g÷±‍è)變量,若其中一(yī)個(gè)變量不(>♠↔Ωbù)存在則返回假;empty判斷變量是(shì)否為( σwèi)空(kōng)為(wèi)假,隻可(kě)傳一(yī)個(gè)變量β",如(rú)果為(wèi)空(kōng)為(wèi)假則返回真。

7、請(qǐng)說(shuō)明(míng) PHP 中傳值與傳引用←φ¥(yòng)的(de)區(qū)别。什(shén)麽時(shí)候傳值×£什(shén)麽時(shí)候傳引用(yòng)?
按值傳遞:函數(shù)範圍內(nèi)對(duì)值的(de♥γ€α)任何改變在函數(shù)外(wài)部都(dōu)會(huì)被忽略×$
按引用(yòng)傳遞:函數(shù)範圍內(nèi)對(duφ≠"&ì)值的(de)任何改變在函數(shù)外(w‌β♦÷ài)部也(yě)能(néng)反映出這(zhè)些≈ π→(xiē)修改
優缺點:按值傳遞時(shí),php必須複制(zhì)值。特∞↕©®别是(shì)對(duì)于大(dà)型的(de)字符串和(hé)對(du≠✔™ì)象來(lái)說(shuō),這(zhè‍δ)将會(huì)是(shì)一(yī)個(gè)α®λ¥代價很(hěn)大(dà)的(de)操作(zuò)。按引用(y§↓Ωòng)傳遞則不(bù)需要(yào)複制♦ '(zhì)值,對(duì)于性能(néng)提高(gāo)很(hěn)有(™♠yǒu)好(hǎo)處。

8、在PHP中error_reportiγ£ng這(zhè)個(gè)函數(shù)有(yαφ•ǒu)什(shén)麽作(zuò)用(yòng)?
設置PHP的(de)報(bào)錯(cuò)級别并返回當前級别。

9、說(shuō)說(shuō)你(nǐ)對(ε→≥duì)緩存技(jì)術(shù)的(de)了(le)解?
緩存技(jì)術(shù)是(shì)将動态內(nèi)容緩存到(dào♠‌₽>)文(wén)件(jiàn)中,在一(yī)定時 ×(shí)間(jiān)內(nèi)訪問(wèn) ♥★€動态頁面直接調用(yòng)緩存文(wén)件(j↔♥iàn),而不(bù)必重新訪問(wèn)數(shù)據庫。

10、現(xiàn)在編程中經常采取MVC三層結構,請(qǐng✘γ♣")問(wèn)MVC分(fēn)别指哪三層,有(yǒu)什(shén)麽優® ←≥點?
MVC三層分(fēn)别指:業(yè)務模型、視(s♦¶←hì)圖、控制(zhì)器(qì),由控制(z¥♣§hì)器(qì)層調用(yòng)模型處理(lǐ)數(s♠←hù)據,然後将數(shù)據映射到(dà​∑♣∑o)視(shì)圖層進行(xíng)顯示,優點是(shì):①可(kě)以實♥"現(xiàn)代碼的(de)重用(yòng)性,避免産生(sh♥¥®ēng)代碼冗餘;②M和(hé)V的(de)↓​實現(xiàn)代碼分(fēn)離(lí≤¥™),從(cóng)而使同一(yī)個(gè)程序可(kě)以使用÷₩↓(yòng)不(bù)同的(de)表現(xiàn)形式

11、AJAX的(de)優勢是(shì)什(shén)麽&÷φ"?
ajax是(shì)異步傳輸技(jì)術(shù),可(kě)以♥ §通(tōng)過javascript實現(xiàn),也←¶ ¶(yě)可(kě)以通(tōng)過JQuery★λε★框架實現(xiàn),實現(xiàn)局部刷新,減輕了(le)服務器(qì)的≤™♥(de)壓力,也(yě)提高(gāo)了(le)用(yòn∞∞g)戶體(tǐ)驗。

12、在程序的(de)開(kāi)發中,如(rú)何提高(gāo±≤≈")程序的(de)運行(xíng)效率?
A、優化(huà)SQL語句,查詢語句中盡量不(bù)使用(yò‌λng)select *,用(yòng)哪個(gè)字段查哪₩≤個(gè)字段;少(shǎo)用(yòng)子(zǐ)查‌¶詢可(kě)用(yòng)表連接代替;少(shǎo)用(yòng)模糊↔☆®≠查詢;
B、數(shù)據表中創建索引;
C、對(duì)程序中經常用(yòng)到(dào)的(de)數(s¶Ω↕hù)據生(shēng)成緩存。

13、對(duì)于大(dà)流量的(deδβ)網站(zhàn),您采用(yòng)什(shén)麽樣的(de)•∏‌方法來(lái)解決訪問(wèn)量問(wèn)題?
A、有(yǒu)效使用(yòng)緩存,增加緩存命中率
B、使用(yòng)負載均衡
C、對(duì)靜(jìng)态文(wén)件(jiàn)使®→≤用(yòng)cdn進行(xíng)存儲和(hé₩δ↓♣)加速
D、想法減少(shǎo)數(shù)據庫的(de)使 ≤用(yòng)
E、查看(kàn)出現(xiàn)統計(jì)的(de)瓶頸在哪裡(lǐ)
F、反向代理(lǐ)

14、語句include和(hé)require的(de✘>)區(qū)别是(shì)什(shén)麽β∑↑♥?為(wèi)避免多(duō)次包含同一(yī)✘±♥文(wén)件(jiàn),可(kě)用(yòng)什(shén)麽語句代替它ש™♣們?
區(qū)别:
在失敗的(de)時(shí)候:
include産生(shēng)一(yī)個(gè)waπ₩↔rning,而require産生(shēng)直接産生(s<€☆"hēng)錯(cuò)誤中斷
require在運行(xíng)前載入
include在運行(xíng)時(shí)載入
代替:
require_once
include_once

15、foo()和(hé)@foo()之間(jiān)有(yǒu±∞)什(shén)麽區(qū)别?
@代表所有(yǒu)warning忽略

16、簡述php的(de)垃圾收集機(jī)制(zhì)。
答(dá)案:php中的(de)變量存儲在變量容器(€"qì)zval中,zval中除了(le)存儲變量類型和(h✘£π>é)值外(wài),還(hái)有(yǒu)is_ref和(hé♥€★¶)refcount字段。refcount表示指向變©♥量的(de)元素個(gè)數(shù),is_ref表£×₽​示變量是(shì)否有(yǒu)别名。如(rú)果r✘Ωefcount為(wèi)0時(shí),就(ji$‌ù)回收該變量容器(qì)。如(rú)果§←≥一(yī)個(gè)zval的(de)refcount減1之α 後大(dà)于0,它就(jiù)會(huì)進入垃圾緩沖區(q$✔÷βū)。當緩沖區(qū)達到(dào)最大¥™(dà)值後,回收算(suàn)法會(hu₩↕ì)循環遍曆zval,判斷其是(shì)否為(wèi)垃圾,并進行(xín ≈∑g)釋放(fàng)處理(lǐ)。

17、如(rú)何實現(xiàn)PHP的(de)安全最大(dà)化(huà×₩↔‌)?怎樣避免SQL注入漏洞和(hé)XSS跨站(z↕↓hàn)腳本攻擊漏洞?
答(dá):基本原則:不(bù)對(duì)外(wài)界展示服務器(qì)βλ↔®或程序設計(jì)細節(屏蔽錯(cuò)誤),不(bù←✔β♠)相(xiàng)信任何用(yòng)戶提¶↑交的(de)數(shù)據(過濾用(yòng)戶提交)。

18、echo、print_r、print、va$&÷ r_dump區(qū)别
echo:語句結構;
print:是(shì)函數(shù),有(yǒu) ¶₽♦返回值
print_r:能(néng)打印數(shù)組,對(duì)象
var_dump:能(néng)打印對(duì)象數(shù÷↔)組,并且帶數(shù)據類型

19、寫出smarty模闆的(de)特點
速度快(kuài),編譯型,緩存技(jì)術(shù),插件→♣← (jiàn)機(jī)制(zhì),強大(dà)的(de)表現(xiàn¶≈↓)邏輯

20、PHP如(rú)何實現(xiàn)頁面跳(tiào)轉
方法一(yī):php函數(shù)跳(tiào)轉,缺點,head∏÷×er頭之前不(bù)能(néng)有(yǒu)輸出,跳(t£ •αiào)轉後的(de)程序繼續執行(xíng)‌ ≥',可(kě)用(yòng)exit中斷執行(xíng)後面的(de)&<±≠程序。
header("Location:網址");//直接跳(ti>♥☆ào)轉
header("refresh:3;url=http://www.j> αsdaima.com");//三秒(miǎo)後跳(t↕& ☆iào)轉
方法二:利用(yòng)meta
echo"";

21、如(rú)何把一(yī)個(gè)GB2312格式的(de)字符串裝換α♠∏✔成UTF-8格式?
iconv('GB2312','UTF-8','js代碼(www.js£δ‌Ωdaima.com)是(shì)IT資源下(xφ₩&×ià)載與IT技(jì)能(néng)學習(xí)平台。 §↕');
?>

22、如(rú)果需要(yào)原樣輸出用(yòng)戶輸入的αδ©(de)內(nèi)容,在數(shù)據入庫前σ≠,要(yào)用(yòng)哪個(gè)函數(shù)處理(lǐ)?®₩"↓
htmlspecialchars或者htmlentities

23、什(shén)麽是(shì) CSRF 攻擊 ?XSS 攻擊?如(×₩≈δrú)何防範?
CSRF,跨站(zhàn)請(qǐng)求僞造☆₩✘ ,攻擊方僞裝用(yòng)戶身(shēn)份發送請(qǐng)求從(<¥βcóng)而竊取信息或者破壞系統。
講述基本原理(lǐ):用(yòng)戶訪問(wèn)A網站(zhàn♠​)登陸并生(shēng)成了(le)cookie,再訪問(wè>αn)B網站(zhàn),如(rú)果A網站(zh‌→₩πàn)存在CSRF漏洞,此時(shí)B網站(zhàn)給A÷ •網站(zhàn)的(de)請(qǐng)求(此時(sh↑≤♠•í)相(xiàng)當于是(shì)用(yòng)戶訪問(wèn)),→εA網站(zhàn)會(huì)認為(wèi)ε↔ε☆是(shì)用(yòng)戶發的(de)請(qǐng)求,從(cóng)₽✔ ÷而B網站(zhàn)就(jiù)成功僞裝​≤$了(le)你(nǐ)的(de)身(shē↓¥n)份,因此叫跨站(zhàn)腳本攻擊。

CSRF防範:
A、合理(lǐ)規範api請(qǐng)求方式ש∏,GET,POST
B、對(duì)POST請(qǐng)求加<₽♠®token令牌驗證,生(shēng)成一♠→✔(yī)個(gè)随機(jī)碼并存入session,表單中帶上(s"¥♦hàng)這(zhè)個(gè)随機(jī)碼,提交的(de)時(shí)©​₽✔候服務端進行(xíng)驗證随機(jī)碼是(shì)否相(xiàng♥±)同。

XSS,跨站(zhàn)腳本攻擊。

防範:不(bù)相(xiàng)信任何輸入,過濾輸入。


24、安全對(duì)一(yī)套程序來(lái)說σ (shuō)至關重要(yào),請(qǐng)說(shuō)說(shuō)©•在開(kāi)發中應該注意哪些(xiē)± 安全機(jī)制(zhì)?
A、防遠(yuǎn)程提交;
B、防SQL注入,對(duì)特殊代碼進行(xíng)☆✔過濾;
C、防止注冊機(jī)灌水(shuǐ),使用(yòng)÷↔驗證碼。

25、對(duì)json數(shù)據格式的(de <☆)理(lǐ)解?
JSON(JavaScript Object Notatio♠☆n)是(shì)一(yī)種輕量級的(de)數(shù)據交換格>÷式,json數(shù)據格式固定,可(kě)以被多(duō)​σΩ↔種語言用(yòng)作(zuò)數(shù)據的(de)傳遞。

26、什(shén)麽是(shì)事(s≈₩✔hì)務?及其特性?
答(dá):事(shì)務:是(shì)一(yī)系列的(de↔±Ω↑)數(shù)據庫操作(zuò),是(shì)數(shù)據庫應用(yò$©" ng)的(de)基本邏輯單位。

事(shì)務特性:
A、原子(zǐ)性:即不(bù)可(kě)分(fē'γn)割性,事(shì)務要(yào)麽全部×‌被執行(xíng),要(yào)麽就(jiù)全部不(¥←bù)被執行(xíng)。
B、一(yī)緻性或可(kě)串性。事(shì)務的•α(de)執行(xíng)使得(de)數(shù)據庫從(cóng₽♠)一(yī)種正确狀态轉換成另一(yī)種正确狀态
C、隔離(lí)性。在事(shì)務正确提交之前,ε↔ 不(bù)允許把該事(shì)務對(duì)數(shù)據的↑ (de)任何改變提供給任何其他(tā)事(shì)務,
D、持久性。事(shì)務正确提交後,其結果将永久₩δ保存在數(shù)據庫中,即使在事(shì)務提交後€↕∏​有(yǒu)了(le)其他(tā)故障,事(shì)務的© ↑(de)處理(lǐ)結果也(yě)會(huì)得(de)到™₹±(dào)保存。

或者這(zhè)樣理(lǐ)解:
事(shì)務就(jiù)是(shì)被綁定在一(yī)起作(zu&←♣₩ò)為(wèi)一(yī)個(gè)邏輯工(gōng)作(zuò)單元的(de<δ♣ε)SQL語句分(fēn)組,如(rú)果任何一(yī♠≤Ω♠)個(gè)語句操作(zuò)失敗那(nà)麽整個(σ↔♠gè)操作(zuò)就(jiù)被失敗,以後操作(zuò)就(jiù)≥<β會(huì)回滾到(dào)操作(zuò)前狀态,或者是(shì)上(sh εàng)有(yǒu)個(gè)節點。為(wèi)了(l₹≈e)确保要(yào)麽執行(xíng),要(yào)麽不(bù)執行π☆β↔(xíng),就(jiù)可(kě)以使用(yò≥$★↔ng)事(shì)務。要(yào)将有(yǒu)組語句作(zu‍×ò)為(wèi)事(shì)務考慮,就(ji¥&♣ ù)需要(yào)通(tōng)過ACID測試£​>,即原子(zǐ)性,一(yī)緻性,隔離(lí)性和(hé)持久性。

27、什(shén)麽是(shì)鎖?
答(dá):數(shù)據庫是(shì)一(y​∏±ī)個(gè)多(duō)用(yòng)戶使用(yòng)的(de)共§₹享資源。當多(duō)個(gè)用(yòng)戶并發地(dì)存±​取數(shù)據時(shí),在數(shù)據庫中↑£就(jiù)會(huì)産生(shēng)多(Ωπ↑≥duō)個(gè)事(shì)務同時(shí)存取同一(yī)數(s∞≤≥hù)據的(de)情況。若對(duì)并發操作(zuò÷→¥)不(bù)加控制(zhì)就(jiù)可(k☆↑©ě)能(néng)會(huì)讀(dú)取和¶‌δ(hé)存儲不(bù)正确的(de)數(shù)∏↕據,破壞數(shù)據庫的(de)一(yī)緻性。

加鎖是(shì)實現(xiàn)數(shù)&®€>據庫并發控制(zhì)的(de)一(yī)個(gè)非常重要(yà✔≤ o)的(de)技(jì)術(shù)。當事(shì)務在對(duì)某個(∏εgè)數(shù)據對(duì)象進行(xíng)操作(zuò)前,先向≥©系統發出請(qǐng)求,對(duì)其加•♦​<鎖。加鎖後事(shì)務就(jiù)對(duì)該數≈✔$∞(shù)據對(duì)象有(yǒu)了(le)一(yī)定的(de)∞±∑≥控制(zhì),在該事(shì)務釋放(fàng)鎖之‌≈前,其他(tā)的(de)事(shì)務不(bù)能(néng)對(d®✘uì)此數(shù)據對(duì)象進行(xín∏≥g)更新操作(zuò)。

基本鎖類型:鎖包括行(xíng)級鎖和(≈←"hé)表級鎖

28、索引的(de)作(zuò)用(yòng)?和(hé)它的(de)優'♦¥•點缺點是(shì)什(shén)麽?
答(dá):索引就(jiù)一(yī)種特殊的(de)查詢表,₽<α§數(shù)據庫的(de)搜索引擎可(kě)以利π 用(yòng)它加速對(duì)數(shù)據的(de)檢索。它很(h§™✔ěn)類似與現(xiàn)實生(shēng)活中書(s•®♥♣hū)的(de)目錄,不(bù)需要(yào)查詢‌​≠≈整本書(shū)內(nèi)容就(jiù)可(kě)以找到(dào)‍$♠$想要(yào)的(de)數(shù)據。索™≠ 引可(kě)以是(shì)唯一(yī)的(de),創建索$→ 引允許指定單個(gè)列或者是(shì)多(duō)個(&☆π♠gè)列。缺點是(shì)它減慢(màn)了(le)數π (shù)據錄入的(de)速度,同時(shí)也‍©®δ(yě)增加了(le)數(shù)據庫的(de)÷≤≤尺寸大(dà)小(xiǎo)。

29、如(rú)何通(tōng)俗地(dì)理(lǐ)解三個(gè)範式"↑?
第一(yī)範式:1NF是(shì)對(duì)屬性的(de)原子(zǐ)γ↕↓性約束,要(yào)求屬性具有(yǒu)原子(zǐ)÷←性,不(bù)可(kě)再分(fēn)解;
第二範式:2NF是(shì)對(duì)記錄的(de)惟一(yπ₹♥≈ī)性約束,要(yào)求記錄有(yǒu)惟一(yī)标識,即實體(£ tǐ)的(de)惟一(yī)性;
第三範式:3NF是(shì)對(duì)字段冗餘性的( λΩde)約束,即任何字段不(bù)能(nén≈ΩγΩg)由其他(tā)字段派生(shēng)出來(≈γlái),它要(yào)求字段沒有(yǒu∞₹ )冗餘。

30、主鍵、外(wài)鍵和(hé)索引的(de)區(qū)↓☆↔别?
定義:
主鍵--唯一(yī)标識一(yī)條記錄,不(bù)能(§↕néng)有(yǒu)重複的(de),不(bù)允許為(≤©≈✘wèi)空(kōng)
外(wài)鍵--表的(de)外(wài)鍵是(♥δshì)另一(yī)表的(de)主鍵, 外(wài)鍵可(k≥→✘ ě)以有(yǒu)重複的(de), 可(kě)以是(sh∑♦ì)空(kōng)值
索引--該字段沒有(yǒu)重複值,但(dàn)可(kě♣∏✔ )以有(yǒu)一(yī)個(gè)空(kōng)值

作(zuò)用(yòng):
主鍵--用(yòng)來(lái)保證數(∏•δ≈shù)據完整性
外(wài)鍵--用(yòng)來(lái)和(hé)其他(tā↓γ™)表建立聯系用(yòng)的(de)
索引--是(shì)提高(gāo)查詢排序的(de)速度

個(gè)數(shù):
主鍵--主鍵隻能(néng)有(yǒu)一(yī)個(gè)
外(wài)鍵--一(yī)個(gè)表可(kě)以有(yǒu)多(duō)> ‌個(gè)外(wài)鍵
索引--一(yī)個(gè)表可(kě)以有(yǒu)多(duō)個(gè)唯↕± 一(yī)索引

31、簡述 private、 protect<→‍§ed、 public修飾符的(de)訪問(wèn)權限。
private : 私有(yǒu)成員(≥λ®✘yuán), 在類的(de)內(nèi)部才可(kě)以訪問(≈σΩ"wèn)。
protected : 保護成員(yuán)↓÷§β,該類內(nèi)部和(hé)繼承類中可(kě)以訪問(wèn)。
public : 公共成員(yuán),完全&≠$ 公開(kāi),沒有(yǒu)訪問(wèn)限制(zh↓↑™ì)。

32、堆和(hé)棧的(de)區(qū)别?
A、堆是(shì)程序運行(xíng)期間(jiān)動态分(fēn>₽←♠)配的(de)內(nèi)存空(kōng)間(jiān®≠δφ),你(nǐ)可(kě)以根據程序的(de)運行(xí≥¶​ng)情況确定要(yào)分(fēn)配的(de)堆內(nèi∞‍λ)存的(de)大(dà)小(xiǎo);
B、棧是(shì)編譯期間(jiān)就(jiù)分(fēn)配好(hǎo)÷✔的(de)內(nèi)存空(kōng)間(jiān),因此你 ✔(nǐ)的(de)代碼中必須就(jiù)棧的(de)大(dà)小(x‌"iǎo)有(yǒu)明(míng)确的(de)定義。

33、常用(yòng)的(de)魔術(shù)方法有(yǒu)哪些(xiē)✔ ?舉例說(shuō)明(míng)
答(dá):php規定以兩個(gè)下(xià​ ↓♣)劃線(__)開(kāi)頭的(de)方法都(dōu)保留為(wèi)¥₩'↓魔術(shù)方法,所以建議(yì)大(dà)家(j♠₽™iā)函數(shù)名最好(hǎo)不(bù)用(yò'σng)__開(kāi)頭,除非是(shì)為(wèi)了(le)←>φ"重載已有(yǒu)的(de)魔術(shù)方法。
__construct() 實例化(huà)<↕類時(shí)自(zì)動調用(yòng)。
__destruct() 類對(duì)象使用π>(yòng)結束時(shí)自(zì)動調用(yòng)。
__set() 在給未定義的(de)屬性賦值的(de)"ββ時(shí)候調用(yòng)。
__get() 調用(yòng)未定義的(de)屬性時(shí)候調用↕π(yòng)。
__isset() 使用(yòng)isset()或empty()函數(shù✔β™≥)時(shí)候會(huì)調用(yòng)。
__unset() 使用(yòng)uns σ✘et()時(shí)候會(huì)調用(yòng)。
__sleep() 使用(yòng)serialize序列化(hu₹₩à)時(shí)候調用(yòng)。
__wakeup() 使用(yòng)uns§₹×erialize反序列化(huà)的(de)時(shí)候調用(yòng)。
__call() 調用(yòng)一(yī)個(gè)不(bù)®★存在的(de)方法的(de)時(shí)候&§ ​調用(yòng)。
__callStatic()調用(yòng)一(yī)個♣™(gè)不(bù)存在的(de)靜(jìng)态方法是(shì)調β₹÷用(yòng)。
__toString() 把對(duì)象轉換成字符串的(de)<←±時(shí)候會(huì)調用(yòng)。比如(rú∑×♦) echo。
__invoke() 當嘗試把對(duì)象當方法調用®™₽←(yòng)時(shí)調用(yòng)。
__set_state() 當使用(yòng)var_export()函↔↑數(shù)時(shí)候調用(yòng)。接α ±受一(yī)個(gè)數(shù)組參數(shùδ₽♦)。
__clone() 當使用(yòng)clone複制(¥'$↓zhì)一(yī)個(gè)對(duì)象時(shí)候∑π​調用(yòng)。

34、$this和(hé)self、parΩ&ent這(zhè)三個(gè)關鍵詞分(fēn)β∞‍★别代表什(shén)麽?在哪些(xiē)≤★ 場(chǎng)合下(xià)使用(yòng)?
$this  當前對(duì)象
self   當前類
parent 當前類的(de)父類

$this在當前類中使用(yòng),使用(yòng)->₹≥™;調用(yòng)屬性和(hé)方法
self也(yě)在當前類中使用(yòng),不(b€₽ù)過需要(yào)使用(yòng)::調用(yòng)
parent在類中使用(yòng)

35、作(zuò)用(yòng)域操作(zuò)符::如(rú)何使用(♠↑&∑yòng)?都(dōu)在哪些(xiē)場(chεαǎng)合下(xià)使用(yòng)?
調用(yòng)類常量
調用(yòng)靜(jìng)态方法

36、__autoload()方法的(de)工(gōng)作(zuò)原理(l∑₩÷×ǐ)是(shì)什(shén)麽?
答(dá):使用(yòng)這(zhè)個(gè)魔術(sα♥hù)函數(shù)的(de)基本條件(jiàn)是(shì)類文γ ✘↕(wén)件(jiàn)的(de)文(wén)件(ji₽πàn)名要(yào)和(hé)類的(de)名字∏‍ 保持一(yī)緻。

當程序執行(xíng)到(dào)實例化(hu☆✔¶↕à)某個(gè)類的(de)時(shí)☆ε候,如(rú)果在實例化(huà)前沒有(yǒu)引入這(zhè)個(gè)♣♠↑α類文(wén)件(jiàn),那(nà)麽就(♠‌φ<jiù)自(zì)動執行(xíng)__autolo$‌ad()函數(shù)。

這(zhè)個(gè)函數(shù)會(huì)根據實例化(huà​♥®​)的(de)類的(de)名稱來(lái)查← σσ找這(zhè)個(gè)類文(wén)件(jiàn)的(de)路(lù)徑,當←$®判斷這(zhè)個(gè)類文(wén)件(jiàn)路(lù)徑下(•÷¶xià)确實存在這(zhè)個(gè)類文(wén)件(j↑€✘iàn)後

就(jiù)執行(xíng)include或Ω∑✔者require來(lái)載入該類,然後程序繼續執行(¥↓πxíng),如(rú)果這(zhè)個(gè)路(lù)徑下(xià)★ >不(bù)存在該文(wén)件(jiàn)時(shí)就(j§♣↑iù)提示錯(cuò)誤。

使用(yòng)自(zì)動載入的(de)魔術(shù)函數(shù‍λ)可(kě)以不(bù)必要(yào)寫很(≤€Ω¥hěn)多(duō)個(gè)include或者require函數(s≠←'hù)。

37、簡述高(gāo)并發網站(zhàn)解決方案∏‌ ↓。
A、前端優化(huà)(CND加速、建立‍‍®♠獨立圖片服務器(qì))
B、服務端優化(huà)(頁面靜(jìng)态化(huà)​€±、并發處理(lǐ)[異步|多(duō)線程]、隊列λδ∏處理(lǐ))
C、數(shù)據庫優化(huà)(數(×& ₽shù)據庫緩存[Memcachaed|Redis]、讀(dú ® £)寫分(fēn)離(lí)、分(fēn)庫分(fēn"★‍✔)表、分(fēn)區(qū))
D、Web服務器(qì)優化(huà)(負載均衡、反向代理(₹σΩlǐ))


38、PHP遍曆文(wén)件(jiàn)夾¶ε下(xià)所有(yǒu)文(wén)件(jiàn)

<?php
function read_all($&×dir){
    if(!is_dir($dΩ♦αΩir)) return false;
    $handle =δ☆ opendir($dir);
    if($h☆¥andle){
        while(($fl‌☆♠ = readdir($handle))↑♥← !== false){
            $temp ​±= $dir.$fl;
          ↑&¥  //$fl !='.' && $fl != '..' 排 >‍•除當前目錄及父級目錄
            if(is_dir($temp‍↑✘≥) && $fl!='.' &σλ& $fl != '..'){
      ∞ ♥          echo '目錄:'✔ ₩.$temp.'<br>';
         ​♠$       read_all($temp);
↔&            }else{
           €&     if($fl !='.' && $fl !¶¶&©= '..'){
           ☆±         echo '文(wén)件(jiàn):'.$♦'δ₹temp.'<br>';
                }€π
            }
        }
    }
}
¥←€
read_all("./dir/");
?> β•;


39、在命令行(xíng)中運行(xíng)php程序
php indx.php
A、從(cóng)命令行(xíng)運行(xíng)ph‍πΩ∏p非常簡單。但(dàn)有(yǒu)些(xiē)注意事(shì)項需要•↔(yào)各位了(le)解下(xià),諸如(§$ rú)$_SESSION之類的(de)服務器(qì)變量是(™±shì)無法在命令行(xíng)中使用(yòng)的(de),其他(tā)™¶→代碼的(de)運行(xíng)則和(hé)web服務器(qì)↕≈σ≠中完全一(yī)樣;
B、在命令行(xíng)中執行(xíng)phγ∑p文(wén)件(jiàn)的(de)好(hǎo)∑>∑處之一(yī)就(jiù)是(shì)可(kě)以通(tōnβ☆•g)過腳本實現(xiàn)一(yī)些(xiē)計(jì)劃任務(cronta&£b)的(de)執行(xíng),而無須通(tōng)過web服務器"πδ(qì)。

延伸1:
php -v 顯示當前PHP版本
php -m 顯示當前php加載的(de)有(yǒu)效模塊
php -i 輸出無html格式的(de)php★‍info
php --rf function

延伸2:向php腳本傳遞參數(shù):
提示:命令行(xíng)下(xià)執行(xíng)php,是(shì)不(b₩δ♣ù)走Apache/Nginx等這(zhè©✔$☆)類東(dōng)西(xī)的(de),沒有(yǒu)什×∑(shén)麽http協議(yì),所以get,post傳參數(™™>↔shù)根本不(bù)起作(zuò)用(yòng),并  且還(hái)會(huì)報(bào)錯(cuò)。有(yǒu)$&↔​些(xiē)時(shí)候需要(yào)在shel♦ l命令下(xià)把PHP當作(zuò)腳本執行(xín ₽→βg),比如(rú)定時(shí)任務。這(zhè)就(jiù)涉及到(dào)±←✘₽在shell命令下(xià)如(rú)何給php₩ § 傳參的(de)問(wèn)題,通(tōng)常有(yǒu)三種方式∏‌傳參。

A、使用(yòng)$argv or $argc參數(shù ₩')接收
echo "接收到(dào){$argc₩  }個(gè)參數(shù)";
print_r($argv);
?>

B、使用(yòng)getopt函數(shù)
$param_arr = getopt('a:b:');
print_r($param_arr);
?>

C、提示用(yòng)戶輸入
fwrite(STDOUT,'Please enter your name¥ ←:');
echo 'Your name is:'.fgets(STDIN™<£);
?>

40、你(nǐ)用(yòng)什(shén)δ'₹麽方法檢查PHP腳本的(de)執行(xíng)效率(β₹♠≈通(tōng)常是(shì)腳本執行(xíng≈∏ε±)時(shí)間(jiān))和(hé)數(shù)據庫SQL的(d∞®e)效率(通(tōng)常是(shì)數(shù)據庫Q§§↑uery時(shí)間(jiān)),并定位和(hé)分(fēn)析腳δ☆↑本執行(xíng)和(hé)數(shù)→" 據庫查詢的(de)瓶頸所在?
A、PHP腳本的(de)執行(xíng)效率
a、代碼腳本裡(lǐ)計(jì)時(shí)σγ;
b、xdebug統計(jì)函數(shù)執行(xíng)次數(s&↑§<hù)和(hé)具體(tǐ)時(shí)間(jiān)進行(xín$> ≈g)分(fēn)析,最好(hǎo)使用(yòng)工(gōng)具←☆winCacheGrind分(fēn)析;
c、在線系統用(yòng)strace跟蹤相(xiàng)關進♣÷‌程的(de)具體(tǐ)系統調用(yòng)。

B、數(shù)據庫SQL的(de)效率
a、sql的(de)explain(mysql),啓用₩©λ(yòng)slow query log記錄慢(màn)查詢;γ£
b、通(tōng)常還(hái)要(yào)看(kàn)數(shù)據庫設計(‌§&→jì)是(shì)否合理(lǐ),需求是(shì)否合理 €(lǐ)等。

41、對(duì)于大(dà)流量的(de)網站(₩®zhàn),您采用(yòng)什(shén₹×₩λ)麽樣的(de)方法來(lái)解決各頁£$‍面訪問(wèn)量統計(jì)問(wèn)題。
A、确認服務器(qì)是(shì)否能(néng)支撐當前訪問(✘ββwèn)量;
B、優化(huà)數(shù)據庫訪問(wè ‌λγn);
C、禁止外(wài)部訪問(wèn)鏈接(盜鏈), 比如(rú)圖片防盜鏈;
D、控制(zhì)文(wén)件(jiàn)下(xià)載,尤其是(shì♥≈)大(dà)文(wén)件(jiàn);
E、使用(yòng)不(bù)同主機(jī)分(‍♦fēn)流(負載均衡);
F、使用(yòng)浏覽統計(jì)軟件(jià€∏♣≈n),了(le)解訪問(wèn)量,有(yǒu)針對(duì)性的(de)進β☆σ≤行(xíng)優化(huà)。

42、 MySQL數(shù)據庫作(zuò)發布系統的(de)σ♥存儲,一(yī)天五萬條以上(shàng)的(de)增量,預計(jπ☆↓≈ì)運維三年(nián),怎麽優化(huà)?
A、設計(jì)良好(hǎo)的(de)數(shù)據庫結構,允許部分(fē₩Ω☆>n)數(shù)據冗餘,盡量避免join查詢,提高(gāo)效率∏π≤;
B、選擇合适的(de)表字段數(shù)據類γα¥型和(hé)存儲引擎,适當的(de)添加索引;
C、mysql庫主從(cóng)讀(dú§£)寫分(fēn)離(lí);
D、找規律分(fēn)表,減少(shǎo)單表中的(d∏​e)數(shù)據量提高(gāo)查詢速度;
E、添加緩存機(jī)制(zhì),比如(rú)mem•∞cached,redis等;
F、不(bù)經常改動的(de)頁面,生(shēng)成靜(jìng)态頁面•®'★;
G、書(shū)寫高(gāo)效率的(de)SQL☆≤®。比如(rú) SELECT * FROM TABEL ±♣ ×改為(wèi) SELECT field_1, field_2, field≠‍∞_3 FROM TABLE。

43、Mysql的(de)存儲引擎,my€λ‌isam和(hé)innodb的(de)區(qū)别。
A、MyISAM類型不(bù)支持事(shì)務處理(l♣÷ ǐ)等高(gāo)級處理(lǐ),而InnoDB類型支持;
B、MyISAM類型的(de)表強調的(de)是(shì)性能​'$(néng),其執行(xíng)速度比InnoDB類型更快(kuài±₹​σ);
C、InnoDB不(bù)支持FULLTEXT類型的(de)索引;
D、InnoDB中不(bù)保存表的(de)具體(tǐ)γ 行(xíng)數(shù),也(yě)就(jiù)是(shì)說(shuō↑™$'),執行(xíng)select count(*) fro★♦≈m table時(shí),InnoDB要(yào)掃描一(§♠×∑yī)遍整個(gè)表來(lái)計(jì)算(suà ✔€n)有(yǒu)多(duō)少(shǎo)行(xíng),但(dàn®≈ε)是(shì)MyISAM隻要(yào)簡單的(de)讀(dú)出保存♣✔ε好(hǎo)的(de)行(xíng)數(shù)即可(kě);
E、對(duì)于AUTO_INCREMENT類型的(d←∏e)字段,InnoDB中必須包含隻有(yǒu)該字段的(de)索引,≥π但(dàn)是(shì)在MyISAM表中,可(kě)以和(δ•☆hé)其他(tā)字段一(yī)起建立聯合索引;
F、DELETE FROM table時(s×​&←hí),InnoDB不(bù)會(huì)重新建立表,而是(∑™>shì)一(yī)行(xíng)一(yī‌↔§♠)行(xíng)的(de)删除;
G、LOAD TABLE FROM MASTER操作(zuò)對(d≠'¥✔uì)InnoDB是(shì)不(bù)起作(zuò)用(yòng)的("₩de),解決方法是(shì)首先把InnoDB表改成M♦₽ &yISAM表,導入數(shù)據後再改成InnoDB表,但(dà♥α✔•n)是(shì)對(duì)于使用(yòng≈÷)的(de)額外(wài)的(de)InnoDB特性(例如(± ™¥rú)外(wài)鍵)的(de)表不(bù)适用(yòng×'&);
H、MyISAM支持表鎖,InnoDB支持行(xíng)鎖。±Ω≥

MyISAM:成熟、穩定、易于管理(lǐ),↓§→φ快(kuài)速讀(dú)取。一(yī)些(xiē)功能(néng)不(ε• bù)支持(事(shì)務等),表級鎖。
InnoDB:支持事(shì)務、外(wài)鍵等特性、數(±∑✘€shù)據行(xíng)鎖定。空(kōng)σ‍&×間(jiān)占用(yòng)大(dà),不(bù)®♦∏₹支持全文(wén)索引等。