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ì)端,CO♦"OKIE保存在客戶端。Session比較安全,cook✔∞ie用(yòng)某些(xiē)手段可(kě)以修改,不(bù)安全。Session依賴于coo≤→kie進行(xíng)傳遞。
禁用(yòng)cookie後,session不(bù)能(néng)正常使用(Ω$yòng)。Session的(de)缺點 &:保存在服務器(qì)端,每次讀(dú)取都(dōu)從(cóng)服務器(qì)β≤₽進行(xíng)讀(dú)取,對(duì)服務器(qì)有(yǒu)資源消耗。Sesγλ±sion保存在服務器(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指定。Session文(wén)件(jiàn)×γ是(shì)公有(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)部錯(cuò)誤
401:代表未授權。
4、請(qǐng)寫出數(shù)據類型(int char varchar datetλγime text)的(de)意思;請(qǐng)問(wèn) var→¶&£char 和(hé) char有(yǒu)什(shén)麽區(qū)别?
Int 整數(shù)char 定長(cháng)字符 Varchar 變長(chá≠£®ng)字符 Datetime 日(rì)期時(shí)間(jiān)型Text 文β≈(wén)本型 Varchar與char的(de)區(qū)别 char是(shì)固定長(ch"¶áng)度的(de)字符類型,分(fēn)配多(duō)少(s σhǎ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)時(shí),服®₩£務器(qì)要(yào)進行(xíng)額外(wài)的(dΩ&e)操作(zuò),所以效率比char類型低(dī✔ ×§)。
5、MyISAM和(hé) InnoDB 的(de)基本區(qū)别?索引結構如(rú)何實現(xβ₩ià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 tabl→∏ename 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ì)值的(d$ ♦e)任何改變在函數(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_reporting這(z≠↑π♦hè)個(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ī)定時(s÷αhí)間(jiān)內(nèi)訪問(wèn)動态頁面直 ☆接調用(yòng)緩存文(wén)件(jià₽☆™n),而不(bù)必重新訪問(wèn)數(shù)據庫。
10、現(xiàn)在編程中經常采取MVC三層結構,請(β₩©qǐng)問(wèn)MVC分(fēn)别指哪三層,有(yǒu)什(s↓βhén)麽優點?
MVC三層分(fēn)别指:業(yè)務模型、視(shì)圖、控制(zhì)器(qì),由控制¶↑♠(zhì)器(qì)層調用(yòng)模型處理(lǐ)數(shù±)據,然後将數(shù)據映射到(dào)視(s≥♠↑hì)圖層進行(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òng)戶體 (tǐ)驗。
12、在程序的(de)開(kāi)發中,如(rú)何提高(gāo)程序的(d™$e)運行(xíng)效率?
A、優化(huà)SQL語句,查詢語句中盡量不(bù)使用(yòng)s∑↔elect *,用(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)數(shù)據生(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òn"©≠g)
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è)warning,而requir→≥✘φe産生(shēng)直接産生(shē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字段。refcouα€βnt表示指向變量的(de)元素個(gè)數(shù),is_ref表示變量是(s≈✔hì)否有(yǒu)别名。如(rú)果refcount為(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,判斷其是(s₽✘♣hì)否為(wèi)垃圾,并進行(xíng)釋放•®✔(fàng)處理(lǐ)。
17、如(rú)何實現(xiàn)PHP的(de)安全最大(dà)化(hu♠≥à)?怎樣避免SQL注入漏洞和(hé)XSS跨站(zhàn)腳本攻擊漏£≥α洞?
答(dá):基本原則:不(bù)對(duì)外(wài)界展示服務器(qì)或程序設計(ε ≈✘jì)細節(屏蔽錯(cuò)誤),不(bù)相(xiàng)信任何用(yò₽™ng)戶提交的(de)數(shù)據(過濾用(y←₽òng)戶提交)。
18、echo、print_r、print、var_dumλσp區(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)轉,缺點,header頭之前不<♦(bù)能(néng)有(yǒu)輸出,跳(tiào)轉後的(de)程序繼續執行♥≠∑≥(xíng),可(kě)用(yòng)exit中斷執£∑行(xíng)後面的(de)程序。
header("Location:網址");//直接跳(≈ ♠tiào)轉
header("refresh:3;url=http •€≠://www.jsdaima.com");//三秒(miǎo)後跳(tiào)轉
方法二:利用(yòng)meta
echo"";
21、如(rú)何把一(yī)個(gè)GB2312格式的(de)字符串裝換成U∞€∑TF-8格式?
iconv('GB2312','UTF-8','js代碼(www.jsdaima.com)是(✔Ω₽shì)IT資源下(xià)載與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網站(z♦↓ ♣hàn)存在CSRF漏洞,此時(shí)B網站(≤¶§zhàn)給A網站(zhàn)的(de)請(qǐng)求(此時(sγ✘₩hí)相(xiàng)當于是(shì)用(yòng)戶訪問(wèn)),A網站(zhàn)會(hu"♦ì)認為(wèi)是(shì)用(yòng)戶發的(de)請(qǐng)求,從(cón↓g)而B網站(zhàn)就(jiù)成功僞裝≥↑♣了(le)你(nǐ)的(de)身(shēn)份,因此叫跨站(zhàn)腳本攻擊。
CSRF防範:
A、合理(lǐ)規範api請(qǐng)求方式,G♠✔ET,POST
B、對(duì)POST請(qǐng)求加t∏↔oken令牌驗證,生(shēng)成一(yī)個(gè)随機(jī←↑α)碼并存入session,表單中帶上(shà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 No₩↑≠tation)是(shì)一(yī)種輕量級的(de)數(shù)據交換格式,json數(shù) ε據格式固定,可(kě)以被多(duō)種語言用(yòng)作(zuò)數(shù)據 >的(de)傳遞。
26、什(shén)麽是(shì)事(shδδì)務?及其特性?
答(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)數(s♠ hù)據庫從(cóng)一(yī)種正确狀态轉換成另一(yī)種正确狀态
C、隔離(lí)性。在事(shì)務正确∑₹¥提交之前,不(bù)允許把該事(shì)務對(duì)數₹ (shù)據的(de)任何改變提供給任何其他(tā)事(shì)務,
D、持久性。事(shì)務正确提交後,其結果将永久保存在數(s™₩★hù)據庫中,即使在事(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àn©™₹©g)有(yǒu)個(gè)節點。為(wèi)了(le)确保要(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ī)數(shù)據的(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)的(d≈®↓e)技(jì)術(shù)。當事(shì)務在÷×∞♥對(duì)某個(gè)數(shù)據對↓β☆(duì)象進行(xíng)操作(zuò)前,先向系統 ≠÷→發出請(qǐng)求,對(duì)其加鎖±。加鎖後事(shì)務就(jiù)對(duì)該數(shù)據對≠Ω(duì)象有(yǒu)了(le)一(yī)定的(de)控制(z↑₩hì),在該事(shì)務釋放(fàng)鎖之前,其他(tā)↓的(de)事(shì)務不(bù)能(néng)對(duì)此數(shù)據對(duìδπ)象進行(xíng)更新操作(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)活中書(shū)的(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éng)由其他(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、 protected、 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ù)棧的(d®≠•✘e)大(dà)小(xiǎo)有(yǒu)明(míng)确的(dπe)定義。
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à)家(jiā)函數(shù)≥ 名最好(hǎo)不(bù)用(yòng)__開(kāi)頭,除非是(s→♣>÷hì)為(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)un§™set()時(shí)候會(huì)調用(yòng)。
__sleep() 使用(yòng)serialize序列化(huà)時(shí)候調用(y×>φòng)。
__wakeup() 使用(yòng)unseri♣©≤δalize反序列化(huà)的(de)時(shí)候調用(yòng)。
__call() 調用(yòng)一(yī$₹)個(gè)不(bù)存在的(de)方法的(de)時(shí)候調用(yòng♣¥$)。
__callStatic()調用(yòn₩↑☆g)一(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_expo•∏∏πrt()函數(shù)時(shí)候調用(yòng)。接受一(y±☆ī)個(gè)數(shù)組參數(shù)。
__clone() 當使用(yòng)clone複制(zhì)一(yī)個(gè)對(duì)&↓βε象時(shí)候調用(yòng)。
34、$this和(hé)self、parent這(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è)魔術(shù)$≠函數(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)__autoload()函數(shù)。β≈σ
這(zhè)個(gè)函數(shù)會(huì)根據實例化(huà)的(d©÷e)類的(de)名稱來(lái)查找這(zhè)個(gè)類文(wén)件×φ(jiàn)的(de)路(lù)徑,當判斷這(zhè)個(gè)類文(wén)件(jiàn)路(±∑'♦lù)徑下(xià)确實存在這(zhè)個(gè)類文(wén)件(jiàn)後
就(jiù)執行(xíng)include或者require來(lá©≥γ±i)載入該類,然後程序繼續執行(xíng),如(rú)果這(zhè)個(gè)路(lùσ§©★)徑下(xià)不(bù)存在該文(wén)件(jiàn)時(shí)就(jiù)提示錯★©(cuò)誤。
使用(yòng)自(zì)動載入的(de)£σ ₩魔術(shù)函數(shù)可(kě)以不(bù)必 σ∞∑要(yào)寫很(hěn)多(duō)個(gè)include或者requi×∞φ$re函數(shù)。
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($dir)) return false; $h∏≈andle = opendir($dir); if($handle){¶¥☆♣ while(($fl∑₽ = readdir($handle)) !== fal∑★'Ωse){ $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)php非常簡單。但(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)php文(wén)件(jiàn)的 ₽§(de)好(hǎo)處之一(yī)就(jiù)是(shì)可(kě)以通(tōn∏ g)過腳本實現(xiàn)一(yī)些(xiē →)計(jì)劃任務(crontab)的(de)執行☆§α•(xíng),而無須通(tōng)過webπ☆♥服務器(qì)。
延伸1:
php -v 顯示當前PHP版本
php -m 顯示當前php加載的(de)有(yǒu)效模塊
php -i 輸出無html格式的(de)phpinfoσ≤
php --rf function
延伸2:向php腳本傳遞參數(shù):
提示:命令行(xíng)下(xià)執行(xíng)ph£₩♥p,是(shì)不(bù)走Apache/Nginx等這(zhè)類東(dōn≤₩♣↕g)西(xī)的(de),沒有(yǒu)什(shén)麽http協議(yì),所以geα×t,post傳參數(shù)根本不(bù)起作(z×α∏uò)用(yòng),并且還(hái)會(huì)報(b¥≥™ào)錯(cuò)。有(yǒu)些(xiē)時(shí)候需要(yào)在shell命令Ω↔λ↕下(xià)把PHP當作(zuò)腳本執行(xíng),比如(rú)定時(shí)任務。這(zhè<↓ε)就(jiù)涉及到(dào)在shell命令下(x∏≤ià)如(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:'.fgetσ₹s(STDIN);
?>
40、你(nǐ)用(yòng)什(shén)麽方法檢查PHP腳本 ↔的(de)執行(xíng)效率(通(tōng)常是(sh± ì)腳本執行(xíng)時(shí)間(jiān))和(hé)數(shù)據庫SQL的λ↓(de)效率(通(tōng)常是(shì)數(shù)據庫Query時(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)次數(shù)和(hé)具體(tǐ)時(shí)間(jiān)進行(π∞αxíng)分(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 qu₩<®•ery 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)單表中的(de)數(shù)據量提高(gāo)∞€<查詢速度;
E、添加緩存機(jī)制(zhì),比如(rú)memcached,redis等;
F、不(bù)經常改動的(de)頁面,生(shēng)成靜(jìng)态頁面;
G、書(shū)寫高(gāo)效率的(de)SQL。比如(rú) SELECT * FROM←∏↑ TABEL 改為(wèi) SELECT field_1, fielλ↕©d_2, field_3 FROM TABLE。
43、Mysql的(de)存儲引擎,myisam和(hé)inno≥γdb的(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(*) from table時(s₹↔↕hí),InnoDB要(yào)掃描一(yī)遍整個(gè)表來(lái)計(jì)算(s✔±£uà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類型的(de)字段,IΩπ≠nnoDB中必須包含隻有(yǒu)該字段的(d™∞πe)索引,但(dàn)是(shì)在MyISAM表中,可(kě)以和(hé)其他(tā)字段一(γ€πyī)起建立聯合索引;
F、DELETE FROM table時(shí),InnoDB不(bù)會(huì)重新建★φ♠立表,而是(shì)一(yī)行(xíngε©)一(yī)行(xíng)的(de)删除;
G、LOAD TABLE FROM MASTER操作(zuò©££§)對(duì)InnoDB是(shì)不(bù)起作(zuò)用(yòng)的(de),π₩π解決方法是(shì)首先把InnoDB表改 ™÷成MyISAM表,導入數(shù)據後再改成InnoD ÷B表,但(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)索引等。
- 上(shàng)一(yī)篇:PHP 7 中不(bù)要(yào)做(zuò)的(de)σε≈10件(jiàn)事(shì)情
- 下(xià)一(yī)篇:快(kuài)速了(le)解SSH的(de)工(gōng)作(zuò)原理(lǐ)₹×∏