以下所有幾乎必問,每個(gè)公司側(cè)重點(diǎn)不同击困,面試前先大概了解公司業(yè)務(wù)或者崗位需求涎劈。
PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語言。
1阅茶、常見狀態(tài)碼
1xx (臨時(shí)響應(yīng))表示臨時(shí)響應(yīng)并需要請(qǐng)求者繼續(xù)執(zhí)行操作的狀態(tài)代碼蛛枚。
100 (繼續(xù)) 請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出請(qǐng)求。 服務(wù)器返回此代碼表示已收到請(qǐng)求的第一部分脸哀,正在等待其余部分蹦浦。
101 (切換協(xié)議) 請(qǐng)求者已要求服務(wù)器切換協(xié)議,服務(wù)器已確認(rèn)并準(zhǔn)備切換撞蜂。
102 由WebDAV(RFC 2518)擴(kuò)展的狀態(tài)碼盲镶,代表處理將被繼續(xù)執(zhí)行侥袜。
2xx (成功)表示成功處理了請(qǐng)求的狀態(tài)代碼。
200 (成功) 服務(wù)器已成功處理了請(qǐng)求溉贿。 通常枫吧,這表示服務(wù)器提供了請(qǐng)求的網(wǎng)頁。
201 (已創(chuàng)建) 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源宇色。
202 (已接受) 服務(wù)器已接受請(qǐng)求九杂,但尚未處理。
203 (非授權(quán)信息) 服務(wù)器已成功處理了請(qǐng)求宣蠕,但返回的信息可能來自另一來源例隆。
204 (無內(nèi)容) 服務(wù)器成功處理了請(qǐng)求,但沒有返回任何內(nèi)容植影。
205 (重置內(nèi)容) 服務(wù)器成功處理了請(qǐng)求裳擎,但沒有返回任何內(nèi)容。
206 (部分內(nèi)容) 服務(wù)器成功處理了部分 GET 請(qǐng)求思币。
207 由WebDAV(RFC 2518)擴(kuò)展的狀態(tài)碼鹿响,代表之后的消息體將是一個(gè)XML消息,并且可能依照之前子請(qǐng)求數(shù)量的不同谷饿,包含一系列獨(dú)立的響應(yīng)代碼惶我。
3xx (重定向) 表示要完成請(qǐng)求,需要進(jìn)一步操作博投。 通常绸贡,這些狀態(tài)代碼用來重定向。
300 (多種選擇) 針對(duì)請(qǐng)求毅哗,服務(wù)器可執(zhí)行多種操作听怕。 服務(wù)器可根據(jù)請(qǐng)求者 (useragent)選擇一項(xiàng)操作,或提供操作列表供請(qǐng)求者選擇虑绵。
301 (永久移動(dòng)) 請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置尿瞭。 服務(wù)器返回此響應(yīng)(對(duì) GET 或HEAD請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置翅睛。
302 (臨時(shí)移動(dòng)) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請(qǐng)求声搁,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求。
303 (查看其他位置) 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來檢索響應(yīng)時(shí)捕发,服務(wù)器返回此代碼疏旨。
304 (未修改) 自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁未修改過扎酷。 服務(wù)器返回此響應(yīng)時(shí)檐涝,不會(huì)返回網(wǎng)頁內(nèi)容。
305 (使用代理) 請(qǐng)求者只能使用代理訪問請(qǐng)求的網(wǎng)頁。 如果服務(wù)器返回此響應(yīng)谁榜,還表示請(qǐng)求者應(yīng)使用代理拉岁。
307 (臨時(shí)重定向) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求惰爬。
4xx (請(qǐng)求錯(cuò)誤) 這些狀態(tài)代碼表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理惫企。
400 (錯(cuò)誤請(qǐng)求) 服務(wù)器不理解請(qǐng)求的語法撕瞧。
401 (未授權(quán)) 請(qǐng)求要求身份驗(yàn)證。 對(duì)于需要登錄的網(wǎng)頁狞尔,服務(wù)器可能返回此響應(yīng)丛版。
402 該狀態(tài)碼是為了將來可能的需求而預(yù)留的。
403 (禁止) 服務(wù)器拒絕請(qǐng)求偏序。
404 (未找到) 服務(wù)器找不到請(qǐng)求的網(wǎng)頁页畦。
405 (方法禁用) 禁用請(qǐng)求中指定的方法。
406 (不接受) 無法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的網(wǎng)頁研儒。
407 (需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類似豫缨,但指定請(qǐng)求者應(yīng)當(dāng)授權(quán)使用代理。
408 (請(qǐng)求超時(shí))服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)端朵。
409 (沖突) 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突好芭。 服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息。
410 (已刪除) 如果請(qǐng)求的資源已永久刪除冲呢,服務(wù)器就會(huì)返回此響應(yīng)舍败。
411 (需要有效長(zhǎng)度) 服務(wù)器不接受不含有效內(nèi)容長(zhǎng)度標(biāo)頭字段的請(qǐng)求。
412 (未滿足前提條件) 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件敬拓。
413 (請(qǐng)求實(shí)體過大) 服務(wù)器無法處理請(qǐng)求邻薯,因?yàn)檎?qǐng)求實(shí)體過大,超出服務(wù)器的處理能力乘凸。
414 (請(qǐng)求的 URI 過長(zhǎng)) 請(qǐng)求的 URI(通常為網(wǎng)址)過長(zhǎng)厕诡,服務(wù)器無法處理。這比較少見翰意,通常的情況包括:本應(yīng)使用POST方法的表單提交變成了GET方法木人,導(dǎo)致查詢字符串(Query String)過長(zhǎng)。
415 (不支持的媒體類型) 請(qǐng)求的格式不受請(qǐng)求頁面的支持冀偶。
416 (請(qǐng)求范圍不符合要求) 如果頁面無法提供請(qǐng)求的范圍醒第,則服務(wù)器會(huì)返回此狀態(tài)代碼。
417 (未滿足期望值) 服務(wù)器未滿足”期望”請(qǐng)求標(biāo)頭字段的要求进鸠。
5xx (服務(wù)器錯(cuò)誤)這些狀態(tài)代碼表示服務(wù)器在嘗試處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤稠曼。這些錯(cuò)誤可能是服務(wù)器本身的錯(cuò)誤,而不是請(qǐng)求出錯(cuò)客年。
500 (服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤霞幅,無法完成請(qǐng)求漠吻。
501 (尚未實(shí)施) 服務(wù)器不具備完成請(qǐng)求的功能。 例如司恳,服務(wù)器無法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼途乃。
502 (錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)扔傅。
503 (服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))耍共。 通常,這只是暫時(shí)狀態(tài)猎塞。
504 (網(wǎng)關(guān)超時(shí)) 服務(wù)器作為網(wǎng)關(guān)或代理试读,但是沒有及時(shí)從上游服務(wù)器收到請(qǐng)求。
505 (HTTP 版本不受支持)服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本荠耽。
600 源站沒有返回響應(yīng)頭部钩骇,只返回實(shí)體內(nèi)容
延伸:OSI七層模型,物理層铝量,數(shù)據(jù)鏈路層倘屹,網(wǎng)絡(luò)層(IP),傳輸層(TCP)慢叨,會(huì)話層唐瀑,表示層,應(yīng)用層(HTTP插爹、FTP哄辣、TFTP、SMTP)
說明: 以上狀態(tài)碼不會(huì)都問赠尾,記住你所常見的力穗,有時(shí)間盡量都記住。
2气嫁、get和post區(qū)別
1当窗、get,url參數(shù)可見寸宵,post崖面,url參數(shù)不可見。
2梯影、get通過url拼接傳遞參數(shù)巫员,post通過請(qǐng)求body體傳遞。
3甲棍、get請(qǐng)求是可以緩存的简识,post請(qǐng)求不可以緩存。
4、get請(qǐng)求頁面后退不產(chǎn)生影響七扰,post請(qǐng)求頁面后退會(huì)重新提交奢赂。
5、get一般傳輸數(shù)據(jù)大小不超過2K~4K颈走,post請(qǐng)求傳輸數(shù)據(jù)的大小根據(jù)php.ini 配置文件設(shè)定膳灶。
6、get請(qǐng)求將header和data一起發(fā)送立由,服務(wù)器響應(yīng)200則返回?cái)?shù)據(jù)袖瞻。post請(qǐng)求瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100拆吆,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200則返回?cái)?shù)據(jù)脂矫。
3枣耀、cookie和session的區(qū)別
1、cookie存儲(chǔ)在客戶端庭再,不會(huì)浪費(fèi)服務(wù)器資源捞奕,不建議將敏感重要信息保存在cookie,而且用戶可以禁止cookie拄轻。
2颅围、session存儲(chǔ)在服務(wù)器上,信息比較安全恨搓,但比較占用服務(wù)器資源院促,session是基于cookie的,sessionID存儲(chǔ)在cookie中斧抱。
3常拓、如果客戶端cookie被禁用掉可以將sessionID添加到url鏈接中進(jìn)行傳遞。
4辉浦、reqiure的include的作用及區(qū)別弄抬?
兩者都用于包含文件,require如果包含文件出錯(cuò)會(huì)報(bào)致命錯(cuò)誤并且停止運(yùn)行宪郊,而include會(huì)報(bào)Notice錯(cuò)誤掂恕,程序繼續(xù)運(yùn)行。require_once會(huì)檢查是否重復(fù)包含弛槐,如果已經(jīng)包含則不再執(zhí)行懊亡,include同理。
5乎串、PHP中常量定義的方式有哪些斋配?有什么區(qū)別?
const和define()。const更快艰争,是語言結(jié)構(gòu)坏瞄,define是函數(shù)。define不能用于類常量定義甩卓,const可以鸠匀。
6、客戶端IP地址和服務(wù)器端IP地址逾柿。
$_SERVER['REMOTE_ADDR']
$_SERVER['SERVER_ADDR']
7缀棍、print()、echo机错、print_r()爬范、var_dump()等區(qū)別。
print()弱匪、echo 都是語言結(jié)構(gòu)青瀑,不同的是前者打印只能接受一個(gè)變量,后者可以輸出多個(gè)萧诫。
print_r()和var_dump()都是函數(shù)斥难。
前者格式化打印變量。但print_r()輸出布爾值和NULL的結(jié)果沒有意義帘饶,打印true返回1哑诊,null則不顯示。
后者也是格式化打印變量及刻。但會(huì)詳細(xì)的打印出變量的類型镀裤,長(zhǎng)度,數(shù)值缴饭,如果包含多層將遞歸打印淹禾。更適合調(diào)試。
8茴扁、常用字符串函數(shù)铃岔。
serialize()、unserialize() 序列化是將變量轉(zhuǎn)換為可保存或傳輸?shù)淖址倪^程峭火。
strlen() 返回字符串長(zhǎng)度毁习。
strrev() 反轉(zhuǎn)字符串。
strpos(原字符串卖丸,待查找字符串) 存在返回第一個(gè)字符下標(biāo)纺且,不存在返回false。
strstr(原字符串稍浆,待查找字符串) 返回待查找字符串及其后剩余部分载碌,不存在返回false猜嘱。
str_replace("world", "Kitty", "Hello world!") 將某個(gè)字符串替換為另一個(gè)字符串。
explode(" ",原字符串) 將原字符串按分割字符串轉(zhuǎn)成數(shù)組嫁艇。
implode(" ",原數(shù)組) 將原數(shù)組中的元素連接分割字符組合成字符串朗伶。
trim() 移除字符串兩側(cè)的空白字符和其他字符。ltrim()移除左邊步咪、rtrim()移除右邊论皆。
substr("Hello world",6) 返回字符串的一部分。
substr_replace(string,replacement,start,length) 函數(shù)把字符串的一部分替換為另一個(gè)字符串猾漫。
htmlspecialchars() 把一些預(yù)定義的字符轉(zhuǎn)換為 HTML 實(shí)體点晴。
str_repeat("Shanghai",5) 字符串重復(fù)指定次數(shù)。
str_split("Shanghai",3) 將字符串分割成數(shù)組悯周,可以指定每個(gè)數(shù)組元素長(zhǎng)度粒督。
9、常用數(shù)組函數(shù)
array_keys() 返回?cái)?shù)組中所有的鍵名禽翼。
array_values() 返回?cái)?shù)組中所有的值屠橄。
array_shift() 刪除數(shù)組中首個(gè)元素,并返回被刪除元素的值捐康。
array_unshift() 在數(shù)組開頭插入一個(gè)或多個(gè)元素,并返回?cái)?shù)組元素個(gè)數(shù)庸蔼。
array_diff() 比較數(shù)組解总,返回差集(只比較鍵值)。
array_intersect() 比較數(shù)組姐仅,返回交集(只比較鍵值)花枫。
array_diff_assoc() 比較數(shù)組,返回差集(比較鍵名和鍵值)掏膏。
array_merge() 把一個(gè)或多個(gè)數(shù)組合并為一個(gè)數(shù)組劳翰。
array_pop() 刪除數(shù)組的最后一個(gè)元素(出棧)。
array_push() 將一個(gè)或多個(gè)元素插入數(shù)組的末尾(入棧)馒疹。
sort() 對(duì)數(shù)組進(jìn)行升序排序佳簸。
rsort() 對(duì)數(shù)組進(jìn)行降序(逆向)排序。
asort() 對(duì)關(guān)聯(lián)數(shù)組按照鍵值進(jìn)行升序排序颖变。
ksort() 對(duì)數(shù)組按照鍵名進(jìn)行升序排序生均。
array_rand() 返回?cái)?shù)組中一個(gè)或多個(gè)隨機(jī)的鍵。
array_combine() 通過合并兩個(gè)數(shù)組來創(chuàng)建一個(gè)新數(shù)組腥刹。
array_unique() 刪除數(shù)組中的重復(fù)值马胧。
10、常用文件操作函數(shù)衔峰。
fopen() 打開一個(gè)文件或 URL佩脊。
fread() 讀取打開的文件蛙粘。
fwrite() 寫入文件。
fclose() 關(guān)閉打開的文件威彰。
file_get_contents() 將文件讀入字符串出牧。
file_put_contents() 將字符串寫入文件。file_put_contents("test.txt","test!",FILE_APPEND);
filesize() 返回文件大小抱冷。
filetype() 返回文件類型崔列。
file_exists() 檢查文件或目錄是否存在。
真題:打開文件旺遮,將文件內(nèi)容讀取出來赵讯,在開頭加入Hello World,將拼接好的字符串寫回到文件當(dāng)中
$file = './hello.txt';
$handle = fopen($file,'r');
$content = fread($handle,filesize($file));
$content = 'Hello World'.$content;
fclose($handle);
$handle = fopen($file,'w');
fwrite($handle,$content);
fclose($handle);
真題:PHP遍歷文件夾
$dir = './test';
function loopDir($dir)
{
$handle = opendir($dir);
//目錄/文件/子目錄/子文件名稱為0或者空這種情況不全等于false不跳出循環(huán)耿眉,目錄里指針全讀取完則為false边翼,跳出循環(huán)
while(false!==($file = readdir($handle)))
{
//$file只顯示名稱,并不顯示完整路徑
if($file != '.' && $file != '..')
{
echo $file."\n";
if(filetype($dir.'/'.$file) == 'dir')
{
loopDir($dir.'/'.$file);
}
}
}
}
loopDir($dir);
11鸣剪、PHP垃圾回收機(jī)制
php中的變量存儲(chǔ)在變量容器zval中组底,zval中除了存儲(chǔ)變量類型和值外,還有is_ref和refcount字段筐骇。refcount表示指向變量的元素個(gè)數(shù)债鸡,is_ref表示變量表示是否是引用變量。如果refcount為0時(shí)铛纬,就回收該變量容器厌均。
12、PHP常見的設(shè)計(jì)模式
工廠模式告唆、單例模式棺弊、注冊(cè)模式、適配器模式擒悬、觀察者模式模她、策略模式、原型模式懂牧、裝飾器模式
工廠模式:用工廠方法代替new操作的一種模式侈净,如果需要更改所實(shí)例化的類名,只需在工廠方法內(nèi)修改僧凤,不需逐一尋找代碼中具體實(shí)例化的地方用狱。
單例模式:防止重復(fù)實(shí)例化,避免大量的new操作拼弃,減少消耗系統(tǒng)和內(nèi)存的資源夏伊,使得有且僅有一個(gè)實(shí)例對(duì)象。
參考鏈接:
https://www.cnblogs.com/legendheng/p/9082266.html
https://blog.csdn.net/Merlin_feng/article/details/42390737
https://blog.csdn.net/flitrue/article/details/52614599
13吻氧、棧和堆溺忧、棧和隊(duì)列的區(qū)別咏连?
棧是編譯期間就分配好的內(nèi)存空間, 存取數(shù)據(jù)較快鲁森,代碼中必須就棧的大小有明確的定義祟滴,缺乏靈活性。
堆是程序運(yùn)行期間動(dòng)態(tài)分配的內(nèi)存空間歌溉,可以根據(jù)程序的運(yùn)行情況確定要分配的堆內(nèi)存的大小垄懂。
隊(duì)列先進(jìn)先出,棧先進(jìn)后出痛垛。
棧是只能在表的一端進(jìn)行插入和刪除操作的線性表草慧。 隊(duì)列是只能在表的一端進(jìn)行插入和在另一端進(jìn)行刪除操作的線性表。
14匙头、數(shù)據(jù)庫事物及其特性漫谷?
事務(wù):是一系列的數(shù)據(jù)庫操作,是數(shù)據(jù)庫應(yīng)用的基本邏輯單位蹂析。
事務(wù)特性:
(1)原子性:即不可分割性舔示,事務(wù)要么全部被執(zhí)行,要么就全部不被執(zhí)行电抚。
(2)一致性惕稻。事務(wù)的執(zhí)行使得數(shù)據(jù)庫從一種正確狀態(tài)轉(zhuǎn)換成另一種正確狀態(tài)
(3)隔離性。在事務(wù)正確提交之前蝙叛,不允許把該事務(wù)對(duì)數(shù)據(jù)的任何改變提供給任何其他事務(wù)俺祠,
(4) 持久性。事務(wù)正確提交后甥温,其結(jié)果將永久保存在數(shù)據(jù)庫中锻煌,即使在事務(wù)提交后有了其他故障妓布,事務(wù)的處理結(jié)果也會(huì)得到保存姻蚓。
15、數(shù)據(jù)庫三范式
第一范式(1NF)無重復(fù)的列(原子性)
第二范式(2NF)屬性完全依賴于主鍵
第三范式(3NF)屬性不依賴于其它非主屬性
參考鏈接:
https://blog.csdn.net/zhan_zehong/article/details/21411883
16匣沼、數(shù)據(jù)庫索引作用狰挡、類型及其區(qū)別?
大大減少服務(wù)器需要掃描的數(shù)據(jù)量
幫助服務(wù)器避免排序和臨時(shí)表
將隨機(jī)I/O變順序/O
大大提高查詢速度,降低寫的速度释涛、占用磁盤
索引就一種特殊的查詢表加叁,數(shù)據(jù)庫的搜索引擎可以利用它加速對(duì)數(shù)據(jù)的檢索。
普通索引:最基本的索引,沒有任何約束限制唇撬。
唯一索引:與普通索引類似,但是具有唯一性約束它匕。
主鍵索引:特殊的唯一索引,不允許有空值。
組合索引:將多個(gè)列組合在一起創(chuàng)建索引,可以覆蓋多個(gè)列窖认。
外鍵 全文基本不用豫柬,一般用業(yè)務(wù)邏輯實(shí)現(xiàn)告希。
外鍵索引:只有 InnoDB類型的表才可以使用外鍵索引,保證數(shù)據(jù)的一致性、完整性和實(shí)現(xiàn)級(jí)聯(lián)操作烧给。
全文索引: MySQLI自帶的全文索引只能用于 MyISAM,并且只能對(duì)英文進(jìn)行全文檢索燕偶。
真題: 2019新浪PHP實(shí)習(xí)生原題
慕課網(wǎng)360大牛PHP面試視頻關(guān)注公眾號(hào)【蛋叔】回復(fù)“PHP面試”
復(fù)合索引前綴原則(向左原則)考點(diǎn)
KEY(a, b, c)
WHERE a land b=2 and c= 3
WHERE a =1 and b =2
WHERE a =1
WhERE b=2 and c= 3(不生效)
WHERE a =1 and c=3(不生效)
17、表存儲(chǔ)引擎 InnoDB和MyISAM的區(qū)別
InnoDB支持行鎖础嫡,MyISAM支持表鎖
InnoDB支持事務(wù)處理指么,MyISAM不支持
InnoDB默認(rèn)使用共享表空間,MyISAM不使用
InnoDB數(shù)據(jù)存儲(chǔ)在共享表空間榴鼎,MyISAM存儲(chǔ)在后綴為MYD和MY
InnoDB支持外鍵伯诬、崩潰后的安全恢復(fù),MyISAM不支持崩潰后的安全恢復(fù)
18檬贰、數(shù)據(jù)庫中join和left join的區(qū)別
left join 左連接 意思是包含左邊表所有記錄姑廉,右邊所有的匹配的記錄,如果沒有則用空補(bǔ)齊
JOIN: 如果表中有至少一個(gè)匹配翁涤,則返回行
LEFT JOIN: 即使右表中沒有匹配桥言,也從左表返回所有的行
19、SQL查詢的安全方案
1使用預(yù)處理語句防SQL注入
delete from user where id= 1 or 1=1
delete from user where id=?
2寫入數(shù)據(jù)庫的數(shù)據(jù)要進(jìn)行特殊字符的轉(zhuǎn)義
3查詢錯(cuò)誤信息不要返回給用戶,將錯(cuò)誤記錄到日志
//MySQL的其他安全設(shè)置
//1.定期做數(shù)據(jù)備份
//2.不給查詢用戶root權(quán)限,合理分配權(quán)限
//3.關(guān)閉遠(yuǎn)程訪問數(shù)據(jù)庫權(quán)限
//4.修改root口令,不用默認(rèn)口令,使用較復(fù)雜的口令
//5.刪除多余的用戶
//6.改變r(jià)oot用戶的名稱
//7.限制一般用戶瀏覽其他庫
//8.限制用戶對(duì)數(shù)據(jù)文件的訪問權(quán)限
20葵礼、定位SQL慢查詢
//分析SQL查詢慢的方法
//記錄慢查詢?nèi)罩竞虐ⅲ治霾樵內(nèi)罩?不要直接打開慢查詢?nèi)罩具M(jìn)行分析,這樣比較浪費(fèi)時(shí)間和精力,
//可以使用 pt-query-digest工具進(jìn)行分析
//使用 show profile
//set profiling=1;開啟,服務(wù)器上執(zhí)行的所有語句會(huì)檢測(cè)消耗的時(shí)間,存到臨時(shí)表中
//show profiles
//show profile for query臨時(shí)表ID
//使用 show status
//show status會(huì)返回一些計(jì)數(shù)器, show global status查看服務(wù)器
//級(jí)別的所有計(jì)數(shù)
//有時(shí)根據(jù)這些計(jì)數(shù),可以猜測(cè)出哪些操作代價(jià)較高或者消耗時(shí)間多
//使用 show processlist
//觀察是否有大量線程處于不正常的狀態(tài)或者特征
//使用 explain(desc) 分析單條SQL語句
21、SQL優(yōu)化
a. 設(shè)計(jì)良好的數(shù)據(jù)庫結(jié)構(gòu)鸳粉,允許部分?jǐn)?shù)據(jù)冗余扔涧,盡量避免join查詢,提高效率届谈。
b. 選擇合適的表字段數(shù)據(jù)類型和存儲(chǔ)引擎枯夜,適當(dāng)?shù)奶砑铀饕?
c. mysql庫主從讀寫分離。
d. 找規(guī)律分表艰山,減少單表中的數(shù)據(jù)量提高查詢速度湖雹。
e。添加緩存機(jī)制曙搬,比如memcached摔吏,apc等。
f. 不經(jīng)常改動(dòng)的頁面纵装,生成靜態(tài)頁面征讲。
g. 書寫高效率的SQL。比如 SELECT * FROM TABEL 改為 SELECT field_1, field_2, field_3 FROM TABLE.
22橡娄、PDO連接MySQL實(shí)例
<?php
$dbms='mysql'; //數(shù)據(jù)庫類型
$host='localhost'; //數(shù)據(jù)庫主機(jī)名
$dbName='test'; //使用的數(shù)據(jù)庫
$user='root'; //數(shù)據(jù)庫連接用戶名
$pass=''; //對(duì)應(yīng)的密碼
$dsn="$dbms:host=$host;dbname=$dbName";
try {
$dbh = new PDO($dsn, $user, $pass); //初始化一個(gè)PDO對(duì)象
echo "連接成功<br/>";
/*你還可以進(jìn)行一次搜索操作
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 來看到這些值
}
*/
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "<br/>");
}
//默認(rèn)這個(gè)不是長(zhǎng)連接诗箍,如果需要數(shù)據(jù)庫長(zhǎng)連接,需要最后加一個(gè)參數(shù):array(PDO::ATTR_PERSISTENT => true) 變成這樣:
$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>
23挽唉、數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型
數(shù)組滤祖,最簡(jiǎn)單而且應(yīng)用最廣泛的數(shù)據(jù)結(jié)構(gòu)之一特性:使用連續(xù)的內(nèi)存來存儲(chǔ)才避、數(shù)組中的所有元素必須是相同的類型或類型的衍生(同質(zhì)數(shù)據(jù)結(jié)構(gòu))、元素可以通過下標(biāo)直接訪問
鏈表氨距,線性表的一種桑逝,最基本、最簡(jiǎn)單俏让,也是最常用的數(shù)據(jù)結(jié)構(gòu)特性:元素之間的關(guān)系是一對(duì)一的關(guān)系(除了第一個(gè)和最后一個(gè)元素楞遏,其他元素都是首尾相接)、順序存儲(chǔ)結(jié)構(gòu)和鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)兩種存儲(chǔ)方式首昔。
棧寡喝,和隊(duì)列相似,一個(gè)帶有數(shù)據(jù)存儲(chǔ)特性的數(shù)據(jù)結(jié)構(gòu)特性:存儲(chǔ)數(shù)據(jù)是先進(jìn)后出的勒奇、棧只有一個(gè)出口预鬓,只能從棧頂部增加和移除元素
堆,一般情況下赊颠,堆叫二叉堆格二,近似完全二叉樹的數(shù)據(jù)結(jié)構(gòu)特性:子節(jié)點(diǎn)的鍵值或者索引總是小于它的父節(jié)點(diǎn)、每個(gè)節(jié)點(diǎn)的左右子樹又是一個(gè)二叉堆竣蹦、根節(jié)點(diǎn)最大的堆叫最大堆或者大根堆顶猜、最小的叫最小堆或者小根
線性表,由零個(gè)或多個(gè)數(shù)據(jù)元素組成的有限序列特性:線性表是一個(gè)序列痘括、0個(gè)元素構(gòu)成的線性表是空表长窄、第一個(gè)元素?zé)o先驅(qū)、最后一個(gè)元素?zé)o后繼纲菌、其他元素都只有一個(gè)先驅(qū)和后繼挠日、有長(zhǎng)度,長(zhǎng)度是元素個(gè)數(shù)翰舌,長(zhǎng)度有限
雙向鏈表
特性:每個(gè)元素都是一個(gè)對(duì)象嚣潜,每個(gè)對(duì)象有一個(gè)關(guān)鍵字key和兩個(gè)指針(next和prev)
隊(duì)列
特性:先進(jìn)先出(FIFO)、并發(fā)中使用灶芝、可以安全將對(duì)象從一個(gè)任務(wù)傳給另一個(gè)任務(wù)
字典特性:關(guān)聯(lián)數(shù)組郑原、也被叫做字典或者鍵值對(duì)
圖特性:通常使用鄰接矩陣和鄰接表表示唉韭、前者易實(shí)現(xiàn)但是對(duì)于稀疏
矩陣會(huì)浪費(fèi)較多空間夜涕、后者使用鏈表的方式存儲(chǔ)信息但是對(duì)于圖搜
索時(shí)間復(fù)雜度較高
三大數(shù)據(jù)類型(標(biāo)量(浮點(diǎn)、整型属愤、字符串女器、布爾)、復(fù)合(數(shù)組住诸、對(duì)象)驾胆、特殊(resource涣澡、null))
算法特性:有窮性,確定性丧诺、可行性入桂、輸入、輸出
24驳阎、MVC
MVC是一種架構(gòu)模式抗愁,M(model)、V(view)呵晚、C(controller)蜘腌,model是模型層處理數(shù)據(jù),view是視圖層展示交互界面饵隙,controller是控制器層處理業(yè)務(wù)邏輯撮珠。
用戶在視圖層提交數(shù)據(jù)到控制器層,控制器層調(diào)用模型層的方法進(jìn)行數(shù)據(jù)處理然后根據(jù)返回結(jié)果再進(jìn)行不同的業(yè)務(wù)處理最后返回到視圖層金矛。
25芯急、AOP思想
AOP面試切面編程,提取各個(gè)模塊中可能重復(fù)操作的部分驶俊,權(quán)限認(rèn)證志于,異常處理,日志記錄等废睦。
26伺绽、RESTful
restful api是rest在web接口的應(yīng)用和延伸。輕量級(jí)嗜湃、通常用json描述數(shù)據(jù)奈应。請(qǐng)求是無狀態(tài)的,一個(gè)請(qǐng)求不需要依賴于另一個(gè)請(qǐng)求购披。統(tǒng)一的錯(cuò)誤返回處理杖挣。
所有的接口都是基于資源的,增刪改查都只是對(duì)資源狀態(tài)的改變刚陡。
get:查詢
post:創(chuàng)建
put:更新
delete:刪除
url只表示資源路徑
GET:/movie/:mid
27惩妇、數(shù)據(jù)結(jié)構(gòu)和算法
常見的排序算法和查找算法以及相應(yīng)的時(shí)間復(fù)雜度和空間復(fù)雜度要掌握,冒泡排序筐乳、快速排序歌殃、選擇排序、二分查找等要能手寫出來蝙云,還有一點(diǎn)常問的就是讓你寫某個(gè)算法并且改進(jìn)該算法以及改進(jìn)前后相應(yīng)的時(shí)間復(fù)雜度氓皱。
這里我就不貼了,網(wǎng)上隨手一搜太多了
28、項(xiàng)目
以上都是對(duì)你相應(yīng)技術(shù)棧的能力考查波材,面試另外一個(gè)重點(diǎn)就是問你的項(xiàng)目股淡。
簡(jiǎn)歷上最好寫兩到三個(gè)項(xiàng)目,一個(gè)主項(xiàng)目廷区,你最熟悉的唯灵,面試官可能會(huì)基于你的項(xiàng)目問你一些問題,也可能會(huì)讓你自己闡述你的主要項(xiàng)目隙轻,在這個(gè)過程中一定要提前想好你主項(xiàng)目中的亮點(diǎn)早敬,難點(diǎn),這個(gè)是對(duì)于項(xiàng)目這一塊最重要的大脉。
29搞监、其他建議
1、面試狀態(tài)要調(diào)整好镰矿,當(dāng)你看到這篇文章的時(shí)候應(yīng)該是處于正在找工作或者將要找工作的狀態(tài)琐驴,你很可能會(huì)收到多次的邀約,會(huì)有各種各樣的事情秤标,但無論怎樣绝淡,請(qǐng)一定要以一個(gè)比較好的狀態(tài)參加面試。
2苍姜、如果是電話面試牢酵,HR問你時(shí)間最好不要立馬就同意面試,如果可以的話約在次日或者其他時(shí)間衙猪,以便你做好各方面準(zhǔn)備馍乙。
3、每一次面試都要總結(jié)得失垫释。
4丝格、學(xué)會(huì)寫博客,技術(shù)/生活都可以棵譬,它會(huì)記錄下很多有意義的時(shí)刻显蝌。
5、待更新订咸。