面試之前多看看公司的資料,可以看出面試的公司主要做什么,電商,數(shù)據(jù)庫(kù),php函數(shù),sql的優(yōu)化,接口,session和cookie等經(jīng)常會(huì)問(wèn)到,都是必問(wèn)之題,這其中有一部分題目摘抄自網(wǎng)絡(luò),個(gè)人感覺(jué)回答的也不錯(cuò)
36.redis如何防止高并發(fā)?
????????答:其實(shí)redis是不會(huì)存在并發(fā)問(wèn)題的拯欧,因?yàn)樗菃芜M(jìn)程的慢睡,再多的命令都是一個(gè)接一個(gè)地執(zhí)行的浴讯。我們使用的時(shí)候瞳收,可能會(huì)出現(xiàn)并發(fā)問(wèn)題奏寨,比如獲得和設(shè)定這一對(duì)。Redis的為什么 有高并發(fā)問(wèn)題琳骡?Redis的的出身決定?
Redis是一種單線程機(jī)制的nosql數(shù)據(jù)庫(kù)煌往,基于key-value,數(shù)據(jù)可持久化落盤(pán)糠爬。由于單線程所以redis本身并沒(méi)有鎖的概念寇荧,多個(gè)客戶(hù)端連接并不存在競(jìng)爭(zhēng)關(guān)系,但是利用jedis等客戶(hù)端對(duì)redis進(jìn)行并發(fā)訪問(wèn)時(shí)會(huì)出現(xiàn)問(wèn)題执隧。發(fā)生連接超時(shí)揩抡、數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤、阻塞镀琉、客戶(hù)端關(guān)閉連接等問(wèn)題峦嗤,這些問(wèn)題均是由于客戶(hù)端連接混亂造成。
同時(shí)屋摔,單線程的天性決定烁设,高并發(fā)對(duì)同一個(gè)鍵的操作會(huì)排隊(duì)處理,如果并發(fā)量很大钓试,可能造成后來(lái)的請(qǐng)求超時(shí)装黑。
在遠(yuǎn)程訪問(wèn)redis的時(shí)候,因?yàn)榫W(wǎng)絡(luò)等原因造成高并發(fā)訪問(wèn)延遲返回的問(wèn)題弓熏。
解決辦法
在客戶(hù)端將連接進(jìn)行池化恋谭,同時(shí)對(duì)客戶(hù)端讀寫(xiě)Redis操作采用內(nèi)部鎖synchronized。
服務(wù)器角度挽鞠,利用setnx變向?qū)崿F(xiàn)鎖機(jī)制箕别。
37.秒殺當(dāng)中的細(xì)節(jié)你是怎么得出來(lái)的?
???????答:通過(guò)性能測(cè)試及模擬秒殺場(chǎng)景铜幽。每個(gè)問(wèn)題都經(jīng)過(guò)反復(fù)測(cè)試,不斷的發(fā)現(xiàn)問(wèn)題串稀,不斷的解決除抛。
38.做秒殺用什么數(shù)據(jù)庫(kù),怎么實(shí)現(xiàn)的?
????????答:因?yàn)槊霘⒌囊凰查g母截,并發(fā)非常大到忽,如果同時(shí)請(qǐng)求數(shù)據(jù)庫(kù),會(huì)導(dǎo)致數(shù)據(jù)庫(kù)的壓力非常大清寇,導(dǎo)致數(shù)據(jù)庫(kù)的性能急劇下降喘漏,更嚴(yán)重的可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)服務(wù)器宕機(jī)。這時(shí)候一般采用內(nèi)存高速緩存數(shù)據(jù)庫(kù)redis來(lái)實(shí)現(xiàn)的,redis是非關(guān)系型數(shù)據(jù)庫(kù)华烟,redis是單線程的翩迈,通過(guò)redis的隊(duì)列可以完成秒殺過(guò)程。
39.支付寶流程怎么實(shí)現(xiàn)的?
????????答:首先要有一個(gè)支付寶賬號(hào)盔夜,接下來(lái)向支付寶申請(qǐng)?jiān)诰€支付業(yè)務(wù)负饲,簽署協(xié)議。協(xié)議生效后有支付寶一方會(huì)給網(wǎng)站方一個(gè)合作伙伴ID,和安全校驗(yàn)碼喂链,有了這兩樣?xùn)|西就可以按照支付寶接口文檔開(kāi)發(fā)支付寶接口了返十,中間主要涉及到一個(gè)安全問(wèn)題。整個(gè)流程是這樣的:我們的網(wǎng)站通過(guò)post傳遞相應(yīng)的參數(shù)(如訂單總金額椭微,訂單號(hào))到支付頁(yè)面洞坑,支付頁(yè)面把一系列的參數(shù)經(jīng)過(guò)處理,以post的方式提交給支付寶服務(wù)器蝇率,支付寶服務(wù)器進(jìn)行驗(yàn)證迟杂,并對(duì)接收的數(shù)據(jù)進(jìn)行處理,把處理后的結(jié)果返回給我們網(wǎng)站設(shè)置的異步和同步回調(diào)地址本慕,通過(guò)相應(yīng)的返回參數(shù)逢慌,來(lái)處理相應(yīng)的業(yè)務(wù)邏輯,比如返回的參數(shù)代表支付成功间狂,更改訂單狀態(tài)攻泼。
40.什么是單點(diǎn)登錄?
???????答:單點(diǎn)登錄SSO(Single Sign On)說(shuō)得簡(jiǎn)單點(diǎn)就是在一個(gè)多系統(tǒng)共存的環(huán)境下,用戶(hù)在一處登錄后鉴象,就不用在其他系統(tǒng)中登錄忙菠,也就是用戶(hù)的一次登錄能得到其他所有系統(tǒng)的信任。
41.什么情況下使用緩存?
????????答:當(dāng)用戶(hù)第一次訪問(wèn)應(yīng)用系統(tǒng)的時(shí)候纺弊,因?yàn)檫€沒(méi)有登錄牛欢,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)中進(jìn)行登錄;根據(jù)用戶(hù)提供的登錄信息淆游,認(rèn)證系統(tǒng)進(jìn)行身份校驗(yàn)傍睹,如果通過(guò)校驗(yàn)隔盛,應(yīng)該返回給用戶(hù)一個(gè)認(rèn)證的憑據(jù)--ticket;用戶(hù)再訪問(wèn)別的應(yīng)用的時(shí)候拾稳,就會(huì)將這個(gè)ticket帶上吮炕,作為自己認(rèn)證的憑據(jù),應(yīng)用系統(tǒng)接受到請(qǐng)求之后會(huì)把 ticket送到認(rèn)證系統(tǒng)進(jìn)行校驗(yàn)访得,檢查ticket的合法性龙亲。如果通過(guò)校驗(yàn),用戶(hù)就可以在不用再次登錄的情況下訪問(wèn)應(yīng)用系統(tǒng)2和應(yīng)用系統(tǒng)3了悍抑。
實(shí)現(xiàn)主要技術(shù)點(diǎn):
? ? 1鳄炉、兩個(gè)站點(diǎn)共用一個(gè)數(shù)據(jù)驗(yàn)證系統(tǒng)
? ? 2、主要通過(guò)跨域請(qǐng)求的方式來(lái)實(shí)現(xiàn)驗(yàn)證及session處理搜骡。
42.怎么實(shí)現(xiàn)第三方登陸?
????????答:第三方登陸主要是基于author協(xié)議來(lái)實(shí)現(xiàn)拂盯,下面簡(jiǎn)單說(shuō)下實(shí)現(xiàn)流程:
1、首先我們需要以開(kāi)發(fā)者的身份向第三方登陸平臺(tái)申請(qǐng)接入應(yīng)用记靡,申請(qǐng)成功后谈竿,我們會(huì)獲得一個(gè)appID和一個(gè)secrectID.
2、當(dāng)我們的網(wǎng)站需接入第三方登陸時(shí)簸呈,會(huì)引導(dǎo)用戶(hù)跳轉(zhuǎn)到第三方的登陸授權(quán)頁(yè)面榕订,此時(shí)把之前申請(qǐng)的appID和secrectID帶給登陸授權(quán)頁(yè)面店茶。
3蜕便、用戶(hù)登陸成功后即得到授權(quán),第三方會(huì)返回一個(gè)臨時(shí)的code給我們的網(wǎng)站贩幻。
4轿腺、我們的網(wǎng)站接受到code后,再次向我們的第三方發(fā)起請(qǐng)求丛楚,并攜帶接收的code,從第三方獲取access_token.
5族壳、第三方處理請(qǐng)求后,會(huì)返回一個(gè)access_token給我們的網(wǎng)站趣些,我們的網(wǎng)站獲取到access_token后就可以調(diào)用第三方提供的接口了仿荆,比如獲取用戶(hù)信息等。最后把該用戶(hù)信息存入到我們站點(diǎn)的數(shù)據(jù)庫(kù)坏平,并把信息保存到session中拢操,實(shí)現(xiàn)用戶(hù)的第三方登陸。
43.如何處理負(fù)載舶替,高并發(fā)(好好看看令境,經(jīng)常問(wèn)到,能回答到主要的東西即可)顾瞪?
????????答:從低成本舔庶、高性能和高擴(kuò)張性的角度來(lái)說(shuō)有如下處理方案:
1抛蚁、HTML靜態(tài)化
其實(shí)大家都知道,效率最高惕橙、消耗最小的就是純靜態(tài)化的html頁(yè)面瞧甩,所以我們盡可能使我們的 網(wǎng)站上的頁(yè)面采用靜態(tài)頁(yè)面來(lái)實(shí)現(xiàn),這個(gè)最簡(jiǎn)單的方法其實(shí)也是最有效的方法吕漂。
2亲配、圖片服務(wù)器分離
把圖片單獨(dú)存儲(chǔ)妹窖,盡量減少圖片等大流量的開(kāi)銷(xiāo)澜躺,可以放在一些相關(guān)的平臺(tái)上,如騎牛等
3匈挖、數(shù)據(jù)庫(kù)集群和庫(kù)表散列及緩存
數(shù)據(jù)庫(kù)的并發(fā)連接為100苍鲜,一臺(tái)數(shù)據(jù)庫(kù)遠(yuǎn)遠(yuǎn)不夠思灰,可以從讀寫(xiě)分離、主從復(fù)制混滔,數(shù)據(jù)庫(kù)集群方面來(lái)著手洒疚。另外盡量減少數(shù)據(jù)庫(kù)的訪問(wèn),可以使用緩存數(shù)據(jù)庫(kù)如memcache坯屿、redis油湖。
4、鏡像:
盡量減少下載领跛,可以把不同的請(qǐng)求分發(fā)到多個(gè)鏡像端乏德。
5、負(fù)載均衡:
Apache的最大并發(fā)連接為1500吠昭,只能增加服務(wù)器喊括,可以從硬件上著手,如F5服務(wù)器矢棚。當(dāng)然硬件的成本比較高郑什,我們往往從軟件方面著手。
負(fù)載均衡 (Load Balancing) 建立在現(xiàn)有網(wǎng)絡(luò)結(jié)構(gòu)之上蒲肋,它提供了一種廉價(jià)有效透明的方法擴(kuò)展網(wǎng)絡(luò)設(shè)備和服務(wù)器的帶寬蘑拯、增加吞吐量、加強(qiáng)網(wǎng)絡(luò)數(shù)據(jù)處理能力兜粘,同時(shí)能夠提高網(wǎng)絡(luò)的靈活性和可用性申窘。目前使用最為廣泛的負(fù)載均衡軟件是Nginx、LVS妹沙、HAProxy偶洋。我分別來(lái)說(shuō)下三種的優(yōu)缺點(diǎn):
Nginx的優(yōu)點(diǎn)是:
????1.工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略距糖,比如針對(duì)域名玄窝、目錄結(jié)構(gòu)牵寺,它的正則規(guī)則比HAProxy更為強(qiáng)大和靈活,這也是它目前廣泛流行的主要原因之一恩脂,Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了帽氓。
????2.Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴(lài)非常小,理論上能ping通就就能進(jìn)行負(fù)載功能俩块,這個(gè)也是它的優(yōu)勢(shì)之一黎休;相反LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性依賴(lài)比較大,這點(diǎn)本人深有體會(huì)玉凯;
????3.Nginx安裝和配置比較簡(jiǎn)單势腮,測(cè)試起來(lái)比較方便,它基本能把錯(cuò)誤用日志打印出來(lái)漫仆。LVS的配置捎拯、測(cè)試就要花比較長(zhǎng)的時(shí)間了,LVS對(duì)網(wǎng)絡(luò)依賴(lài)比較大盲厌。
????4.可以承擔(dān)高負(fù)載壓力且穩(wěn)定署照,在硬件不差的情況下一般能支撐幾萬(wàn)次的并發(fā)量,負(fù)載度比LVS相對(duì)小些吗浩。
????5.Nginx可以通過(guò)端口檢測(cè)到服務(wù)器內(nèi)部的故障建芙,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等懂扼,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn)禁荸,不過(guò)其中缺點(diǎn)就是不支持url來(lái)檢測(cè)。比如用戶(hù)正在上傳一個(gè)文件微王,而處理該上傳的節(jié)點(diǎn)剛好在上傳過(guò)程中出現(xiàn)故障屡限,Nginx會(huì)把上傳切到另一臺(tái)服務(wù)器重新處理品嚣,而LVS就直接斷掉了炕倘,如果是上傳一個(gè)很大的文件或者很重要的文件的話(huà),用戶(hù)可能會(huì)因此而不滿(mǎn)翰撑。
????6.Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件罩旋,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。LNMP也是近幾年非常流行的web架構(gòu)眶诈,在高流量的環(huán)境中穩(wěn)定性也很好涨醋。
????7.Nginx現(xiàn)在作為Web反向加速緩存越來(lái)越成熟了,速度比傳統(tǒng)的Squid服務(wù)器更快逝撬,可以考慮用其作為反向代理加速器浴骂。
????8.Nginx可作為中層反向代理使用,這一層面Nginx基本上無(wú)對(duì)手宪潮,唯一可以對(duì)比Nginx的就只有 lighttpd了溯警,不過(guò) lighttpd目前還沒(méi)有做到Nginx完全的功能趣苏,配置也不那么清晰易讀,社區(qū)資料也遠(yuǎn)遠(yuǎn)沒(méi)Nginx活躍梯轻。
????9.Nginx也可作為靜態(tài)網(wǎng)頁(yè)和圖片服務(wù)器食磕,這方面的性能也無(wú)對(duì)手。還有Nginx社區(qū)非吃簦活躍彬伦,第三方模塊也很多。
Nginx的缺點(diǎn)是:
????1.Nginx僅能支持http伊诵、https和Email協(xié)議单绑,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn)曹宴。
????2.對(duì)后端服務(wù)器的健康檢查询张,只支持通過(guò)端口來(lái)檢測(cè),不支持通過(guò)url來(lái)檢測(cè)浙炼。不支持Session的直接保持份氧,但能通過(guò)ip_hash來(lái)解決。
LVS:使用Linux內(nèi)核集群實(shí)現(xiàn)一個(gè)高性能弯屈、高可用的負(fù)載均衡服務(wù)器蜗帜,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)资厉。
LVS的優(yōu)點(diǎn)是:
????1.抗負(fù)載能力強(qiáng)厅缺、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒(méi)有流量的產(chǎn)生宴偿,這個(gè)特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的湘捎,對(duì)內(nèi)存和cpu資源消耗比較低。
????2.配置性比較低窄刘,這是一個(gè)缺點(diǎn)也是一個(gè)優(yōu)點(diǎn)窥妇,因?yàn)闆](méi)有可太多配置的東西,所以并不需要太多接觸娩践,大大減少了人為出錯(cuò)的幾率活翩。
????3.工作穩(wěn)定,因?yàn)槠浔旧砜关?fù)載能力很強(qiáng)翻伺,自身有完整的雙機(jī)熱備方案材泄,如LVS+Keepalived,不過(guò)我們?cè)陧?xiàng)目實(shí)施中用得最多的還是LVS/DR+Keepalived吨岭。
????4.無(wú)流量拉宗,LVS只分發(fā)請(qǐng)求,而流量并不從它本身出去,這點(diǎn)保證了均衡器IO的性能不會(huì)受到大流量的影響旦事。
????5.應(yīng)用范圍比較廣空入,因?yàn)長(zhǎng)VS工作在4層,所以它幾乎可以對(duì)所有應(yīng)用做負(fù)載均衡族檬,包括http歪赢、數(shù)據(jù)庫(kù)、在線聊天室等等单料。
LVS的缺點(diǎn)是:
????1.軟件本身不支持正則表達(dá)式處理埋凯,不能做動(dòng)靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強(qiáng)的需求扫尖,這個(gè)是Nginx/HAProxy+Keepalived的優(yōu)勢(shì)所在白对。
????2.如果是網(wǎng)站應(yīng)用比較龐大的話(huà),LVS/DR+Keepalived實(shí)施起來(lái)就比較復(fù)雜了换怖,特別后面有 Windows Server的機(jī)器的話(huà)甩恼,如果實(shí)施及配置還有維護(hù)過(guò)程就比較復(fù)雜了,相對(duì)而言沉颂,Nginx/HAProxy+Keepalived就簡(jiǎn)單多了条摸。
HAProxy的特點(diǎn)是:
????1.HAProxy也是支持虛擬主機(jī)的。
????2.HAProxy的優(yōu)點(diǎn)能夠補(bǔ)充N(xiāo)ginx的一些缺點(diǎn)铸屉,比如支持Session的保持钉蒲,Cookie的引導(dǎo);同時(shí)支持通過(guò)獲取指定的url來(lái)檢測(cè)后端服務(wù)器的狀態(tài)彻坛。
????3.HAProxy跟LVS類(lèi)似顷啼,本身就只是一款負(fù)載均衡軟件;單純從效率上來(lái)講HAProxy會(huì)比Nginx有更出色的負(fù)載均衡速度昌屉,在并發(fā)處理上也是優(yōu)于Nginx的钙蒙。
????4.HAProxy支持TCP協(xié)議的負(fù)載均衡轉(zhuǎn)發(fā),可以對(duì)MySQL讀進(jìn)行負(fù)載均衡间驮,對(duì)后端的MySQL節(jié)點(diǎn)進(jìn)行檢測(cè)和負(fù)載均衡躬厌,大家可以用LVS+Keepalived對(duì)MySQL主從做負(fù)載均衡。
????5.HAProxy負(fù)載均衡策略非常多蜻牢,HAProxy的負(fù)載均衡算法現(xiàn)在具體有如下8種:
????????① roundrobin烤咧,表示簡(jiǎn)單的輪詢(xún)偏陪,這個(gè)不多說(shuō)抢呆,這個(gè)是負(fù)載均衡基本都具備的;?
????????② static-rr笛谦,表示根據(jù)權(quán)重抱虐,建議關(guān)注;?
????????③ leastconn饥脑,表示最少連接者先處理恳邀,建議關(guān)注懦冰;?
????????④ source,表示根據(jù)請(qǐng)求源IP谣沸,這個(gè)跟Nginx的IP_hash機(jī)制類(lèi)似刷钢,我們用其作為解決session問(wèn)題的一種方法,建議關(guān)注乳附;?
????????⑤ ri内地,表示根據(jù)請(qǐng)求的URI;?
????????⑥ rl_param赋除,表示根據(jù)請(qǐng)求的URl參數(shù)’balance url_param’ requires an URL parameter name阱缓;?
????????⑦ hdr(name),表示根據(jù)HTTP請(qǐng)求頭來(lái)鎖定每一次HTTP請(qǐng)求举农;?
????????⑧ rdp-cookie(name)荆针,表示根據(jù)據(jù)cookie(name)來(lái)鎖定并哈希每一次TCP請(qǐng)求。
Nginx和LVS對(duì)比的總結(jié):
????1.Nginx工作在網(wǎng)絡(luò)的7層颁糟,所以它可以針對(duì)http應(yīng)用本身來(lái)做分流策略航背,比如針對(duì)域名、目錄結(jié)構(gòu)等棱貌,相比之下LVS并不具備這樣的功能沃粗,所以Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了;但Nginx有用的這些功能使其可調(diào)整度要高于LVS键畴,所以經(jīng)常要去觸碰觸碰最盅,觸碰多了,人為出問(wèn)題的幾率也就會(huì)大起惕。
????2.Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴(lài)較小涡贱,理論上只要ping得通,網(wǎng)頁(yè)訪問(wèn)正常惹想,Nginx就能連得通问词,這是Nginx的一大優(yōu)勢(shì)!Nginx同時(shí)還能區(qū)分內(nèi)外網(wǎng)嘀粱,如果是同時(shí)擁有內(nèi)外網(wǎng)的節(jié)點(diǎn)激挪,就相當(dāng)于單機(jī)擁有了備份線路;LVS就比較依賴(lài)于網(wǎng)絡(luò)環(huán)境锋叨,目前來(lái)看服務(wù)器在同一網(wǎng)段內(nèi)并且LVS使用direct方式分流垄分,效果較能得到保證。另外注意娃磺,LVS需要向托管商至少申請(qǐng)多一個(gè)ip來(lái)做Visual IP薄湿,貌似是不能用本身的IP來(lái)做VIP的。要做好LVS管理員,確實(shí)得跟進(jìn)學(xué)習(xí)很多有關(guān)網(wǎng)絡(luò)通信方面的知識(shí)豺瘤,就不再是一個(gè)HTTP那么簡(jiǎn)單了吆倦。
????3.Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來(lái)也很方便坐求,因?yàn)樗灸馨彦e(cuò)誤用日志打印出來(lái)蚕泽。LVS的安裝和配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了桥嗤;LVS對(duì)網(wǎng)絡(luò)依賴(lài)比較大赛糟,很多時(shí)候不能配置成功都是因?yàn)榫W(wǎng)絡(luò)問(wèn)題而不是配置問(wèn)題,出了問(wèn)題要解決也相應(yīng)的會(huì)麻煩得多砸逊。
????4.Nginx也同樣能承受很高負(fù)載且穩(wěn)定璧南,但負(fù)載度和穩(wěn)定度差LVS還有幾個(gè)等級(jí):Nginx處理所有流量所以受限于機(jī)器IO和配置;本身的bug也還是難以避免的师逸。
????5.Nginx可以檢測(cè)到服務(wù)器內(nèi)部的故障司倚,比如根據(jù)服務(wù)器處理網(wǎng)頁(yè)返回的狀態(tài)碼、超時(shí)等等篓像,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn)动知。目前LVS中 ldirectd也能支持針對(duì)服務(wù)器內(nèi)部的情況來(lái)監(jiān)控,但LVS的原理使其不能重發(fā)請(qǐng)求员辩。比如用戶(hù)正在上傳一個(gè)文件盒粮,而處理該上傳的節(jié)點(diǎn)剛好在上傳過(guò)程中出現(xiàn)故障,Nginx會(huì)把上傳切到另一臺(tái)服務(wù)器重新處理奠滑,而LVS就直接斷掉了丹皱,如果是上傳一個(gè)很大的文件或者很重要的文件的話(huà),用戶(hù)可能會(huì)因此而惱火宋税。
????6.Nginx對(duì)請(qǐng)求的異步處理可以幫助節(jié)點(diǎn)服務(wù)器減輕負(fù)載摊崭,假如使用 apache直接對(duì)外服務(wù),那么出現(xiàn)很多的窄帶鏈接時(shí)apache服務(wù)器將會(huì)占用大 量?jī)?nèi)存而不能釋放杰赛,使用多一個(gè)Nginx做apache代理的話(huà)呢簸,這些窄帶鏈接會(huì)被Nginx擋住,apache上就不會(huì)堆積過(guò)多的請(qǐng)求乏屯,這樣就減少了相當(dāng)多的資源占用根时。這點(diǎn)使用squid也有相同的作用,即使squid本身配置為不緩存辰晕,對(duì)apache還是有很大幫助的蛤迎。
????7.Nginx能支持http、https和email(email的功能比較少用)伞芹,LVS所支持的應(yīng)用在這點(diǎn)上會(huì)比Nginx更多忘苛。在使用上蝉娜,一般最前端所采取的策略應(yīng)是LVS唱较,也就是DNS的指向應(yīng)為L(zhǎng)VS均衡器扎唾,LVS的優(yōu)點(diǎn)令它非常適合做這個(gè)任務(wù)。重要的ip地址南缓,最好交由LVS托管胸遇,比如數(shù)據(jù)庫(kù)的 ip、webservice服務(wù)器的ip等等汉形,這些ip地址隨著時(shí)間推移纸镊,使用面會(huì)越來(lái)越大,如果更換ip則故障會(huì)接踵而至概疆。所以將這些重要ip交給 LVS托管是最為穩(wěn)妥的逗威,這樣做的唯一缺點(diǎn)是需要的VIP數(shù)量會(huì)比較多。Nginx可作為L(zhǎng)VS節(jié)點(diǎn)機(jī)器使用岔冀,一是可以利用Nginx的功能凯旭,二是可以利用Nginx的性能。當(dāng)然這一層面也可以直接使用squid使套,squid的功能方面就比Nginx弱不少了罐呼,性能上也有所遜色于Nginx。Nginx也可作為中層代理使用侦高,這一層面Nginx基本上無(wú)對(duì)手嫉柴,唯一可以撼動(dòng)Nginx的就只有l(wèi)ighttpd了,不過(guò)lighttpd目前還沒(méi)有能做到 Nginx完全的功能奉呛,配置也不那么清晰易讀计螺。另外,中層代理的IP也是重要的瞧壮,所以中層代理也擁有一個(gè)VIP和LVS是最完美的方案了危尿。具體的應(yīng)用還得具體分析,如果是比較小的網(wǎng)站(日PV小于1000萬(wàn))馁痴,用Nginx就完全可以了谊娇,如果機(jī)器也不少,可以用DNS輪詢(xún)罗晕,LVS所耗費(fèi)的機(jī)器還是比較多的济欢;大型網(wǎng)站或者重要的服務(wù),機(jī)器不發(fā)愁的時(shí)候小渊,要多多考慮利用LVS法褥。
數(shù)據(jù)庫(kù)優(yōu)化
44.做秒殺時(shí)鎖表考慮到?jīng)]有?
????????答:考慮到了酬屉,當(dāng)時(shí)我們做秒殺時(shí)考慮了好幾種方案半等,其中有一種就是使用事務(wù)加上排他鎖來(lái)實(shí)現(xiàn)揍愁。
45.架構(gòu)類(lèi)的東西接觸過(guò)嗎?
????????有接觸過(guò)杀饵,曾經(jīng)自己在自己的服務(wù)器上配置過(guò)莽囤。我以前做過(guò)以下幾個(gè)架構(gòu)方面的配置和測(cè)試;
????????1、數(shù)據(jù)庫(kù)的讀寫(xiě)分離切距、主從復(fù)制及集群朽缎。
????????2、Nginx負(fù)載均衡
????????3谜悟、redis集群及主從
46.有沒(méi)有封裝過(guò)一個(gè)簡(jiǎn)單的框架?
????????答;封裝過(guò)一個(gè)簡(jiǎn)單的MVC框架,主要分為3層话肖,控制器層和模型層視圖層,以及路由的分配和入口文件葡幸,模板引擎最筒,單例模式、工廠模式蔚叨,第三方類(lèi)庫(kù)的引入等床蜘。
47.談?wù)剬?duì)MVC的認(rèn)識(shí)?
????????答:核心思想是:視圖和用戶(hù)交互通過(guò)事件導(dǎo)致控制器改變 控制器改變導(dǎo)致模型改變 或者控制器同時(shí)改變兩者 模型改變 導(dǎo)致視圖改變 或者視圖改變 潛在的從模型里面獲得參數(shù) 來(lái)改變自己。他的好處是可以將界面和業(yè)務(wù)邏輯分離缅叠。
Model(模型)悄泥,是程序的主體部分,主要包含業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯肤粱。在模型層弹囚,還會(huì)涉及到用戶(hù)發(fā)布的服務(wù),在服務(wù)中會(huì)根據(jù)不同的業(yè)務(wù)需求领曼,更新業(yè)務(wù)模型中的數(shù)據(jù)鸥鹉。
View(視圖),是程序呈現(xiàn)給用戶(hù)的部分庶骄,是用戶(hù)和程序交互的接口毁渗,用戶(hù)會(huì)根據(jù)具體的業(yè)務(wù)需求,在View視圖層輸入自己特定的業(yè)務(wù)數(shù)據(jù)单刁,并通過(guò)界面的事件交互灸异,將對(duì)應(yīng)的輸入?yún)?shù)提交給后臺(tái)控制器進(jìn)行處理。
Contorller(控制器)羔飞,Contorller是用來(lái)處理用戶(hù) 輸入數(shù)據(jù)肺樟,已經(jīng)更新業(yè)務(wù)模型的部分÷咛剩控制器中接收了用戶(hù)與界面交互時(shí)傳遞過(guò)來(lái)的數(shù)據(jù)么伯,并根據(jù)數(shù)據(jù)業(yè)務(wù)邏輯來(lái)執(zhí)行服務(wù)的調(diào)用和更新業(yè)務(wù)模型的數(shù)據(jù)和狀態(tài)。
48.session與cookie的區(qū)別?
????????1卡儒、cookie數(shù)據(jù)存放在第三方應(yīng)用的瀏覽器上田柔,session數(shù)據(jù)放在服務(wù)器上俐巴。
????????2、cookie不是很安全硬爆,別人可以分析存放在本地的COOKIE欣舵,進(jìn)行COOKIE欺騙,考慮到安全應(yīng)當(dāng)使用session。
????????3摆屯、session會(huì)在一定時(shí)間內(nèi)保存在服務(wù)器上邻遏。當(dāng)訪問(wèn)增多糠亩,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面虐骑,應(yīng)當(dāng)使用COOKIE。
????????4赎线、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K廷没,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。
????????5垂寥、所以個(gè)人建議:
? ? ????????將登陸信息等重要信息存放為SESSION
? ? ? ? ? ? 其他信息如果需要保留颠黎,可以放在COOKIE
49.echo(),print()滞项,print_r()的區(qū)別?
????????echo可以一次輸出多個(gè)值狭归,多個(gè)值之間用逗號(hào)分隔。echo是語(yǔ)言結(jié)構(gòu)(language construct)文判,而并不是真正的函數(shù)过椎,因此不能作為表達(dá)式的一部分使用。echo是php的內(nèi)部指令戏仓,不是函數(shù)疚宇,無(wú)返回值。
????????print():函數(shù)print()打印一個(gè)值(它的參數(shù))赏殃,如果字符串成功顯示則返回true敷待,否則返回false。只能打印出簡(jiǎn)單類(lèi)型變量的值(如int,string)仁热,有返回值
????????printf():源于C語(yǔ)言中的printf()榜揖。該函數(shù)輸出格式化的字符串。
????????print_r()和var_dump()
????????print_r()可以把字符串和數(shù)字簡(jiǎn)單地打印出來(lái)抗蠢,而數(shù)組則以括起來(lái)的鍵和值得列表形式顯示举哟,并以Array開(kāi)頭。但print_r()輸出布爾值和NULL的結(jié)果沒(méi)有意義物蝙,因?yàn)槎际谴蛴?\n"炎滞。因此用var_dump()函數(shù)更適合調(diào)試。print_r是函數(shù)诬乞,可以打印出比較復(fù)雜的變量(如數(shù)組册赛,對(duì)象)钠导,有返回值
????????var_dump()判斷一個(gè)變量的類(lèi)型與長(zhǎng)度,并輸出變量的數(shù)值,如果變量有值輸?shù)氖亲兞康闹挡⒒胤禂?shù)據(jù)類(lèi)型。此函數(shù)顯示關(guān)于一個(gè)或多個(gè)表達(dá)式的結(jié)構(gòu)信息森瘪,包括表達(dá)式的類(lèi)型與值牡属。數(shù)組將遞歸展開(kāi)值,通過(guò)縮進(jìn)顯示其結(jié)構(gòu)扼睬。
50.說(shuō)一下單引號(hào)雙引號(hào)逮栅?
????????①單引號(hào)內(nèi)部的變量不會(huì)執(zhí)行, 雙引號(hào)會(huì)執(zhí)行
????????②單引號(hào)解析速度比雙引號(hào)快窗宇。
????????③單引號(hào)只能解析部分特殊字符措伐,雙引號(hào)可以解析所有特殊字符。
51.索引的優(yōu)缺點(diǎn)?
????????1军俊、優(yōu)點(diǎn):
a)可以保證數(shù)據(jù)庫(kù)表中每一行的數(shù)據(jù)的唯一性
b)可以大大加快數(shù)據(jù)的索引速度
c)加速表與表之間的連接侥加,物別是在實(shí)現(xiàn)數(shù)據(jù)的參考完事性方面特別有意義
d)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢(xún)中分組和排序的時(shí)間
f)通過(guò)使用索引粪躬,可以在時(shí)間查詢(xún)的過(guò)程中担败,使用優(yōu)化隱藏器,提高系統(tǒng)的性能
2镰官、 缺點(diǎn):
a)? 創(chuàng)建索引和維護(hù)索引要耗費(fèi)時(shí)間提前,這種時(shí)間隨著數(shù)據(jù)量的增加而增加
b)? 索引需要占物理空間,除了數(shù)據(jù)表占用數(shù)據(jù)空間之外泳唠,每一個(gè)索引還要占用一定的物理空間狈网,如果需要建立聚簇索引,那么需要占用的空間會(huì)更大
c)? 以表中的數(shù)據(jù)進(jìn)行增警检、刪孙援、改的時(shí)候,索引也要?jiǎng)討B(tài)的維護(hù)扇雕,這就降低了整數(shù)的維護(hù)速度
d)? 建立索引的原則
e)? 在經(jīng)常需要搜索的列上拓售,可以加快搜索的速度
f)? 在作為主鍵的列上,強(qiáng)制該列的唯一性和組織表中數(shù)據(jù)的排列結(jié)構(gòu)
g)? 在經(jīng)常用在連接的列上镶奉,這些列主要是一外鍵础淤,可以加快連接的速度
h)? 在經(jīng)經(jīng)常需要根據(jù)范圍進(jìn)行搜索的列上創(chuàng)建索引,國(guó)為索引已經(jīng)排序哨苛,其指定的范圍是連續(xù)的
i)? 在經(jīng)常需要排序的列上鸽凶,國(guó)為索引已經(jīng)排序,這樣井底可以利用索引的排序建峭,加快排序井底時(shí)間
j)? 在經(jīng)常使用在where子句中的列上玻侥,加快條件的判斷速度
52.get和post的區(qū)別?
????????1. get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)亿蒸。
????????2. get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中凑兰,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng)掌桩,在URL中可以看到。post是通過(guò)HTTP post機(jī)制姑食,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址波岛。用戶(hù)看不到這個(gè)過(guò)程。
????????3. get傳送的數(shù)據(jù)量較小音半,不能大于2KB则拷。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制曹鸠。
????????4. get安全性非常低煌茬,post安全性較高。但是執(zhí)行效率卻比Post方法好物延。
53.如何修改會(huì)話(huà)的生存時(shí)間?
????????一:在php.ini中設(shè)置session.gc_maxlifetime = 1440 //默認(rèn)時(shí)間
????????二:代碼實(shí)現(xiàn)? ? ? $ lifeTime = 24 * 3600; //保存一天
? ? ????session_set_cookie_params($ lifeTime);
? ????? 在session_start();
54.Linux基本命令宣旱,目錄結(jié)構(gòu)仅父?
????????arch顯示機(jī)器的處理器架構(gòu)
(1) uname -m顯示機(jī)器的處理器架構(gòu)
(2) uname -r顯示正在使用的內(nèi)核版本
dmidecode -q顯示硬件系統(tǒng)部件 - (SMBIOS / DMI)?
hdparm -i / dev / hda羅列一個(gè)磁盤(pán)的架構(gòu)特性? ?
hdparm -tT / dev / sda在磁盤(pán)上執(zhí)行測(cè)試性讀取操作
cat / porc / cpuinfo顯示CPU信息
cat / porc / interrupts顯示中斷
cat / porc / meminfo校驗(yàn)內(nèi)存使用?
cat / porc / swaps顯示哪些交換被使用
cat / porc / verion顯示內(nèi)核的版本
cat /porc/net/dev 顯示網(wǎng)絡(luò)適配器及統(tǒng)計(jì)
cat /porc/mounts 顯示已加載的文件系統(tǒng)
date 顯示系統(tǒng)日期
cal 2007 顯示2007年的日歷表
date 041217002007.00 設(shè)置日期和時(shí)間 -月日時(shí)分年.秒
clock -w 將時(shí)間修改保存到 BIOS
文件搜索
find / -name file1 從 '/'開(kāi)始進(jìn)入根文件系統(tǒng)搜索文件和目錄
locate \*.ps 尋找以 '.ps'結(jié)尾的文件 -先運(yùn)行'updatedb'命令
whereis halt 顯示一個(gè)二進(jìn)制文件叛薯、源碼或man的位置
which halt 顯示一個(gè)二進(jìn)制文件或可執(zhí)行文件的完整路徑
掛載一個(gè)文件系統(tǒng)
mount /dev/hda2 /mnt/hda2 掛載一個(gè)叫做hda2的盤(pán)- 確定目錄'/ mnt/hda2' 已經(jīng)存在
umount /dev/hda2 卸載一個(gè)叫做hda2的盤(pán)- 先從掛載點(diǎn)'/ mnt/hda2' 退出
追加命令
1,linux里把文件/etc/aaa中的內(nèi)容追加到/usr/bbb中的內(nèi)容的后面
? sudo cat /etc/aaa >>/usr/bbb
2,更改/etc/index.html的文件所有者為apache,文件群組為apache
? sudo chmod apache:apache? /etc/index.html
3,更改/etc/index.html的所有者權(quán)限為讀取、寫(xiě)入笙纤、執(zhí)行耗溜。群組權(quán)限為讀取。其他權(quán)限為讀取
? sudo chmod 744 /etc/index.html
4省容,刪除/etc下名為hello的文件
? sudo rm /etc/index.html
當(dāng)然抖拴,如果你是以orot用戶(hù)執(zhí)行以上操作,可以去掉前邊的sudo腥椒!
df -hl 查看磁盤(pán)剩余空間
df -h 查看每個(gè)根路徑的分區(qū)大小
du -sh [目錄名] 返回該目錄的大小
du -sm [文件夾] 返回該文件夾總M數(shù)
關(guān)機(jī) (系統(tǒng)的關(guān)機(jī)阿宅、重啟以及登出)
shutdown -h now 關(guān)閉系統(tǒng)(1)
init 0 關(guān)閉系統(tǒng)(2)
telinit 0 關(guān)閉系統(tǒng)(3)
shutdown -h hour:minutes & 按預(yù)定時(shí)間關(guān)閉系統(tǒng)
shutdown -c 取消按預(yù)定時(shí)間關(guān)閉系統(tǒng)
shutdown -r now 重啟(1)
reboot 重啟(2)
logout 注銷(xiāo)
文件和目錄
pwd 顯示工作路徑
ls 查看目錄中的文件
ls -F 查看目錄中的文件
ls -l 顯示文件和目錄的詳細(xì)資料
ls -a 顯示隱藏文件
ls *[0-9]* 顯示包含數(shù)字的文件名和目錄名
tree 顯示文件和目錄由根目錄開(kāi)始的樹(shù)形結(jié)構(gòu)(1)
lstree 顯示文件和目錄由根目錄開(kāi)始的樹(shù)形結(jié)構(gòu)(2)
mkdir dir1 創(chuàng)建一個(gè)叫做 'dir1'的目錄'
磁盤(pán)空間
df -h 顯示已經(jīng)掛載的分區(qū)列表
ls -lSr |more 以尺寸大小排列文件和目錄
du -sh dir1 估算目錄 'dir1'已經(jīng)使用的磁盤(pán)空間'
下載、解壓
1)對(duì)于.tar結(jié)尾的文件
tar -xf all.tar
2)對(duì)于.gz結(jié)尾的文件
gzip -d all.gz
gunzip all.gz
# zip all.zip *.jpg
這條命令是將所有.jpg的文件壓縮成一個(gè)zip包
# unzip all.zip
這條命令是將all.zip中的所有文件解壓出來(lái)
下載命令
wget + 空格 +要下載文件的url路徑
=====================================
Shell 腳本:
必須以? #!/bin/sh? 開(kāi)頭
簡(jiǎn)單例子:判斷這個(gè)目錄下有沒(méi)有文件(File)
#!/bin/bash
Num=`ls -al /opt |grep "^-"|wc -l `
if [ $Num != 0 ]
then echo "/opt has $Num files"
else
echo "/opt has none file"
fi
ls -al /opt |grep "^-"|wc -l? 這個(gè)命令能夠統(tǒng)計(jì)文件個(gè)數(shù) 為0就是沒(méi)有文件 非零就是有文件
55..memcache緩存什么數(shù)據(jù)?
? ? ? ?一笼蛛、經(jīng)常被讀取并且實(shí)時(shí)性要求不強(qiáng)可以等到自動(dòng)過(guò)期的數(shù)據(jù)洒放。例如網(wǎng)站首頁(yè)最新文章列表、某某排行等數(shù)據(jù)滨砍。
? ? ????二往湿、經(jīng)常被讀取并且實(shí)時(shí)性要求強(qiáng)的數(shù)據(jù)。比如用戶(hù)的好友列表惋戏,用戶(hù)文章列表领追,用戶(hù)閱讀記錄等。
????????三响逢、統(tǒng)計(jì)類(lèi)緩存绒窑,比如文章瀏覽數(shù)、網(wǎng)站PV等舔亭。
????????四些膨、活躍用戶(hù)的基本信息或者某篇熱門(mén)文章散罕。
????????五、session數(shù)據(jù)
56.魔術(shù)方法傀蓉、魔術(shù)常量?
1欧漱。__construct()
實(shí)例化對(duì)象時(shí)被調(diào)用,當(dāng)__construct和以類(lèi)名為函數(shù)名的函數(shù)同時(shí)存在時(shí)葬燎,__construct將被調(diào)用误甚,另一個(gè)不被調(diào)用。
2谱净。__destruct()
當(dāng)刪除一個(gè)對(duì)象或?qū)ο蟛僮鹘K止時(shí)被調(diào)用窑邦。
3。__call()
對(duì)象調(diào)用某個(gè)方法壕探,若方法存在冈钦,則直接調(diào)用;若不存在李请,則會(huì)去調(diào)用__call函數(shù)瞧筛。
4。__get()
讀取一個(gè)對(duì)象的屬性時(shí)导盅,若屬性存在较幌,則直接返回屬性值;若不存在白翻,則會(huì)調(diào)用__get函數(shù)乍炉。
5。__set()
設(shè)置一個(gè)對(duì)象的屬性時(shí)滤馍,若屬性存在岛琼,則直接賦值;若不存在巢株,則會(huì)調(diào)用__set函數(shù)槐瑞。
6。__toString()
打印一個(gè)對(duì)象的時(shí)被調(diào)用纯续。如echo $obj;或print $obj;
7随珠。__clone()
克隆對(duì)象時(shí)被調(diào)用。如:$t=new Test();$t1=clone $t;
8猬错。__sleep()
serialize之前被調(diào)用窗看。若對(duì)象比較大,想刪減一點(diǎn)東東再序列化倦炒,可考慮一下此函數(shù)显沈。
9。__wakeup()
unserialize時(shí)被調(diào)用,做些對(duì)象的初始化工作拉讯。
10涤浇。__isset()
檢測(cè)一個(gè)對(duì)象的屬性是否存在時(shí)被調(diào)用。如:isset($c->name)魔慷。
11只锭。__unset()
unset一個(gè)對(duì)象的屬性時(shí)被調(diào)用。如:unset($c->name)院尔。
12蜻展。__set_state()
調(diào)用var_export時(shí),被調(diào)用邀摆。用__set_state的返回值做為var_export的返回值纵顾。
13。__autoload()
實(shí)例化一個(gè)對(duì)象時(shí)栋盹,如果對(duì)應(yīng)的類(lèi)不存在施逾,則該方法被調(diào)用。
魔術(shù)常量:
__LINE__
返回文件中的當(dāng)前行號(hào)例获。
__FILE__
返回文件的完整路徑和文件名汉额。如果用在包含文件中,則返回包含文件名躏敢。自 PHP 4.0.2 起闷愤,__FILE__ 總是包含一個(gè)絕對(duì)路徑,而在此之前的版本有時(shí)會(huì)包含一個(gè)相對(duì)路徑件余。
__FUNCTION__
返回函數(shù)名稱(chēng)(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數(shù)被定義時(shí)的名字(區(qū)分大小寫(xiě))遭居。在PHP 4 中該值總是小寫(xiě)字母的啼器。
__CLasS__
返回類(lèi)的名稱(chēng)(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類(lèi)被定義時(shí)的名字(區(qū)分大小寫(xiě))俱萍。在PHP 4 中該值總是小寫(xiě)字母的端壳。
__METHOD__
返回類(lèi)的方法名(PHP 5.0.0 新加)。返回該方法被定義時(shí)的名字(區(qū)分大小寫(xiě))枪蘑。
__set()當(dāng)程序試圖寫(xiě)入一個(gè)不存在或者不可見(jiàn)的成員變量時(shí)损谦,__set()方法包含兩個(gè)參數(shù),分別表示變量名稱(chēng)和變量值岳颇,兩個(gè)參數(shù)都不可省略
__get()當(dāng)程序試圖調(diào)用一個(gè)未定義或不可見(jiàn)的成員變量時(shí)照捡,__get()方法有一個(gè)參數(shù),表示要調(diào)用的變量名
__sleep() 常用于提交未提交的數(shù)據(jù)话侧,或類(lèi)似的清理操作如果有一些很大的對(duì)象栗精,但不需要全部保存,這個(gè)功能就很好用。
__construct()? 在類(lèi)實(shí)例化對(duì)象的同時(shí)執(zhí)行該函數(shù)
__distruct() 在類(lèi)實(shí)例化的對(duì)象銷(xiāo)毀時(shí)執(zhí)行
__call()對(duì)象調(diào)用某個(gè)方法悲立,若方法存在鹿寨,則直接調(diào)用;若不存在薪夕,則會(huì)去調(diào)用__call函數(shù)脚草。
__clone()克隆對(duì)象時(shí)被調(diào)用。如:$t=new Test();$t1=clone $t;
__toString()打印一個(gè)對(duì)象的時(shí)被調(diào)用原献。如echo $obj;或print $obj;
__isset()檢測(cè)一個(gè)對(duì)象的屬性是否存在時(shí)被調(diào)用玩讳。如:isset($c->name)。
__unset()unset一個(gè)對(duì)象的屬性時(shí)被調(diào)用嚼贡。如:unset($c->name)熏纯。
__autoload()實(shí)例化一個(gè)對(duì)象時(shí),如果對(duì)應(yīng)的類(lèi)不存在粤策,則該方法被調(diào)用樟澜。
57.接口和抽象類(lèi)的區(qū)別是什么?
????????答:抽象類(lèi)是一種不能被實(shí)例化的類(lèi)叮盘,只能作為其他類(lèi)的父類(lèi)來(lái)使用秩贰。抽象類(lèi)是通過(guò)關(guān)鍵字abstract來(lái)聲明的。?
抽象類(lèi)與普通類(lèi)相似柔吼,都包含成員變量和成員方法毒费,兩者的區(qū)別在于,抽象類(lèi)中至少要包含一個(gè)抽象方法愈魏,抽象方法沒(méi)有方法體觅玻,該方法天生就是要被子類(lèi)重寫(xiě)的。?
抽象方法的格式為:abstract function abstractMethod();
接口是通過(guò) interface 關(guān)鍵字來(lái)聲明的培漏,接口中的成員常量和方法都是 public 的溪厘,方法可以不寫(xiě)關(guān)鍵字public,接口中的方法也是沒(méi)有方法體牌柄。接口中的方法也天生就是要被子類(lèi)實(shí)現(xiàn)的畸悬。?
抽象類(lèi)和接口實(shí)現(xiàn)的功能十分相似,最大的不同是接口能實(shí)現(xiàn)多繼承珊佣。在應(yīng)用中選擇抽象類(lèi)還是接口要看具體實(shí)現(xiàn)蹋宦。?
子類(lèi)繼承抽象類(lèi)使用 extends,子類(lèi)實(shí)現(xiàn)接口使用implements咒锻。
58.什么是隊(duì)列冷冗?排它鎖,Myisam死鎖如何解決虫碉?
????????答:在默認(rèn)情況下MYisam是表級(jí)鎖贾惦,所以同時(shí)操作單張表的多個(gè)動(dòng)作只能以隊(duì)列的方式進(jìn)行;
排它鎖又名寫(xiě)鎖,在SQL執(zhí)行過(guò)程中為排除其它請(qǐng)求而寫(xiě)鎖须板,在執(zhí)行完畢后會(huì)自動(dòng)釋放观腊;
死鎖解決:先找到死鎖的線程號(hào)儒拂,然后殺掉線程ID
59.bootstrap框架有哪些優(yōu)點(diǎn)?
????????答:bootstrap是一款web開(kāi)發(fā)框架,它由CSS,JavaScript,Html,三部分構(gòu)成,它簡(jiǎn)潔靈活,使得web開(kāi)發(fā)更加的快捷
優(yōu)點(diǎn):?
①節(jié)省時(shí)間: 使用bootstrap框架,可以大大的節(jié)省項(xiàng)目開(kāi)發(fā)時(shí)間,它包含了很多現(xiàn)成的代碼,如果需要使用,只需要找到合適的代碼,插入合適的位置即可,此外,CSS是使用LESS編寫(xiě),很多樣式和設(shè)計(jì)都已經(jīng)設(shè)計(jì)完成了?
②定制化: bootstrap可以根據(jù)自己的項(xiàng)目,留取框架中自己需要的部分?
③設(shè)計(jì)合理:
柵格系統(tǒng): bootstrap定義12格柵系統(tǒng),在頁(yè)面已經(jīng)完成時(shí),你可以根據(jù)合適的網(wǎng)格,以自己的需求改變行數(shù)和布局大小,樣式已經(jīng)開(kāi)發(fā)完成了,只需要把代碼放入合適的HTML代碼位置即可
LESS: LESS是基于CSS之上的高級(jí)語(yǔ)言,其目的是使得CSS開(kāi)發(fā)更加靈活,更加強(qiáng)大
JavaScript:bootstrap提供JavaScript庫(kù),該庫(kù)超越了基本的架構(gòu)和樣式,開(kāi)發(fā)者可以輕松的操作窗口警告框,工具提示框等,可避免了我們費(fèi)神費(fèi)力的寫(xiě)腳本?
4.一致性: bootstrap可以保證界面在不同平臺(tái)的統(tǒng)一性,無(wú)論實(shí)在IE,Chrome等?
5.持續(xù)更新: bootstrap在不斷的改進(jìn),更具規(guī)律性和持續(xù)性?
6.響應(yīng)式: 無(wú)論是在PC端還是移動(dòng)端,都可以保持界面的一致性?
7.文檔多: bootstrap的非常多