成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP面試題

ls0609 / 1233人閱讀

摘要:質(zhì)量高在設(shè)計(jì)時(shí),可重用現(xiàn)有的,在以前的項(xiàng)目的領(lǐng)域中已被測(cè)試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量。代碼塊捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對(duì)象。這樣可以解決超賣的問題,但是會(huì)導(dǎo)致文件得開銷很大。

6.你們公司是使用什么框架?

答:我們公司采用的是TP框架,運(yùn)用的mysql+apache+php進(jìn)行開發(fā),因?yàn)門P框架是一個(gè)免費(fèi)開源的,輕量級(jí)的php開發(fā)框架,而且是我們中國(guó)人自己開發(fā)的,也是國(guó)內(nèi)用的比較多的,各種資料也比較齊全

7.mvc是什么?相互間有什么關(guān)系?

答:mvc是一種開發(fā)模式,主要分為三部分:m(model),也就是模型,負(fù)責(zé)數(shù)據(jù)的操作;v(view),也就是視圖,負(fù)責(zé)前后臺(tái)的顯示;c(controller),也就是控制器,負(fù)責(zé)業(yè)務(wù)邏輯

客戶端請(qǐng)求項(xiàng)目的控制器,如果執(zhí)行過程中需要用到數(shù)據(jù),控制器就會(huì)到模型中獲取數(shù)據(jù),再將獲取到的數(shù)據(jù)通過視圖顯示出來

8.oop是什么?

答:oop是面向?qū)ο缶幊?面向?qū)ο缶幊淌且环N計(jì)算機(jī)編程架構(gòu),OOP 的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。

OOP具有三大特點(diǎn)
1
1、封裝性:也稱為信息隱藏,就是將一個(gè)類的使用和實(shí)現(xiàn)分開,只保留部分接口和方法與外部聯(lián)系,或者說只公開了一些供開發(fā)人員使用的方法。于是開發(fā)人員只 需要關(guān)注這個(gè)類如何使用,而不用去關(guān)心其具體的實(shí)現(xiàn)過程,這樣就能實(shí)現(xiàn)MVC分工合作,也能有效避免程序間相互依賴,實(shí)現(xiàn)代碼模塊間松藕合。
2、繼承性:就是子類自動(dòng)繼承其父級(jí)類中的屬性和方法,并可以添加新的屬性和方法或者對(duì)部分屬性和方法進(jìn)行重寫。繼承增加了代碼的可重用性。PHP只支持單繼承,也就是說一個(gè)子類只能有一個(gè)父類。
3、多態(tài)性:子類繼承了來自父級(jí)類中的屬性和方法,并對(duì)其中部分方法進(jìn)行重寫。于是多個(gè)子類中雖然都具有同一個(gè)方法,但是這些子類實(shí)例化的對(duì)象調(diào)用這些相同的方法后卻可以獲得完全不同的結(jié)果,這種技術(shù)就是多態(tài)性。多態(tài)性增強(qiáng)了軟件的靈活性。
1、易維護(hù)
采用面向?qū)ο笏枷朐O(shè)計(jì)的結(jié)構(gòu),可讀性高,由于繼承的存在,即使改變需求,那么維護(hù)也只是在局部模塊,所以維護(hù)起來是非常方便和較低成本的。
2、質(zhì)量高
在設(shè)計(jì)時(shí),可重用現(xiàn)有的,在以前的項(xiàng)目的領(lǐng)域中已被測(cè)試過的類使系統(tǒng)滿足業(yè)務(wù)需求并具有較高的質(zhì)量。
3、效率高
在軟件開發(fā)時(shí),根據(jù)設(shè)計(jì)的需要對(duì)現(xiàn)實(shí)世界的事物進(jìn)行抽象,產(chǎn)生類。使用這樣的方法解決問題,接近于日常生活和自然的思考方式,勢(shì)必提高軟件開發(fā)的效率和質(zhì)量。
4、易擴(kuò)展
由于繼承、封裝、多態(tài)的特性,自然設(shè)計(jì)出高內(nèi)聚、低耦合的系統(tǒng)結(jié)構(gòu),使得系統(tǒng)更靈活、更容易擴(kuò)展,而且成本較低。

9.smarty是什么,有什么作用?

回答一:smarty是用php寫出來的模板引擎,也是目前業(yè)界最著名的php模板引擎之一
它分離了邏輯代碼和外在的顯示,提供了一種易于管理和使用的方法,用來將混雜的php邏輯代碼與html代碼進(jìn)行分離

回答二:smarty是php中最著名的引擎框架之一,我們公司使用的是TP框架,已經(jīng)封裝好了smarty模板,所以沒有多帶帶使用過

回答三: smarty是個(gè)模板引擎,最顯著的地方就是有可以把模板緩存起來。一般模板來說,都是做一個(gè)靜態(tài)頁面,然后在里面把一些動(dòng)態(tài)的部分用一切分隔符切開,然后在PHP里打開這個(gè)模板文件,把分隔符里面的值替換掉,然后輸出來,你可以看下PHPLib里面的template部分。
而smarty設(shè)定了緩存參數(shù)以后,第一次運(yùn)行時(shí)候會(huì)把模板打開,在php替換里面值的時(shí)候把讀取的html和php部分重新生成一個(gè)臨時(shí)的php文件,這樣就省去了每次打開都重新讀取html了。如果修改了模板,只要重新刷下就行了。

10.TP框架有哪些優(yōu)點(diǎn)?

答:TP框架是我們中國(guó)人自己開發(fā)的框架,各種資料比較齊全,國(guó)內(nèi)用的比較多,比較簡(jiǎn)單和方便,而且是免費(fèi)開源的

11.TP的特性有哪些?

1.多表查詢非常方便,在model中幾句代碼就可以完成對(duì)多表的關(guān)聯(lián)操作
2.融合了smarty模板,使前后臺(tái)分離
3.支持多種緩存技術(shù),尤其對(duì)memcache技術(shù)支持非常好
4.命名規(guī)范,模型,視圖,控制器嚴(yán)格遵循命名規(guī)則,通過命名一一對(duì)應(yīng)
5.支持多種url模式
6.內(nèi)置ajax返回方法,包括xml,json,html等
7.支持應(yīng)用擴(kuò)展,類庫擴(kuò)展,驅(qū)動(dòng)擴(kuò)展等

1
2
3
4
5
6
7
12.TP框架中的大字母函數(shù)?

U:對(duì)url的組裝
A:內(nèi)部實(shí)例化控制器
S:緩存處理
R:調(diào)用某個(gè)控制器的操作方法
D:實(shí)例化自定義模型類
M:實(shí)例化基礎(chǔ)模型類
I:獲取參數(shù)
L:設(shè)置或者獲取當(dāng)前語言
C:設(shè)置或獲取,保存配置

1
2
3
4
5
6
7
8
9
13.請(qǐng)介紹一下laravel框架?

答: laravel框架的設(shè)計(jì)思想比較先進(jìn),非常適合應(yīng)用各種開發(fā)模式,作為一個(gè)框架,它為你準(zhǔn)備好了一切,composer是php的未來,沒有composer,php肯定要走向沒落
laravel框架最大的特點(diǎn)和優(yōu)秀之處就是集合了php比較新的特點(diǎn),以及各種各樣的設(shè)計(jì)模式,Ioc模式,依賴注入等

14.laravel有那些特點(diǎn)?

回答一:

1.強(qiáng)大的rest router:用簡(jiǎn)單的回調(diào)函數(shù)就可以調(diào)用,快速綁定controller和router
2.artisan:命令行工具,很多手動(dòng)的工作都自動(dòng)化
3.可繼承的模板,簡(jiǎn)化view的開發(fā)和管理
4.blade模板:渲染速度更快
5.ORM操作數(shù)據(jù)庫
6.migration:管理數(shù)據(jù)庫和版本控制
7.測(cè)試功能也很強(qiáng)大
8.composer也是亮點(diǎn)
1
2
3
4
5
6
7
8
回答二: laravel框架引入了門面,依賴注入,Ioc模式,以及各種各樣的設(shè)計(jì)模式等

15.請(qǐng)簡(jiǎn)述一下數(shù)據(jù)庫的優(yōu)化?

答:數(shù)據(jù)庫的優(yōu)化可以從四個(gè)方面來優(yōu)化:

1.從結(jié)構(gòu)層: web服務(wù)器采用負(fù)載均衡服務(wù)器,mysql服務(wù)器采用主從復(fù)制,讀寫分離
2.從儲(chǔ)存層: 采用合適的存儲(chǔ)引擎,采用三范式
3.從設(shè)計(jì)層: 采用分區(qū)分表,索引,表的字段采用合適的字段屬性,適當(dāng)?shù)牟捎媚娣妒?開啟mysql緩存
4.sql語句層:結(jié)果一樣的情況下,采用效率高,速度快節(jié)省資源的sql語句執(zhí)行

16.如何解決異常處理?

答: 拋出異常:使用try…catch,異常的代碼放在try代碼塊內(nèi),如果沒有觸發(fā)異常,則代碼繼續(xù)執(zhí)行,如果異常被觸發(fā),就會(huì) 拋出一個(gè)異常。Catch代碼塊捕獲異常,并創(chuàng)建一個(gè)包含異常信息的對(duì)象。$e->getMessage(),輸出異常的錯(cuò)誤信息。

解決異常:使用set_error_handler函數(shù)獲取異常(也可以使用try()和catch()函數(shù)),然后使用set_exception_handler()函數(shù)設(shè)置默認(rèn)的異常處理程序,register_shutdown_function()函數(shù)來執(zhí)行,執(zhí)行機(jī)制是,php要把調(diào)入的函數(shù)調(diào)入到內(nèi)存,當(dāng)頁面所有的php語句都執(zhí)行完成時(shí),再調(diào)用此函數(shù)

17.前端?

答:我在工作中處理前端的功能,一般就是用ajax向后臺(tái)請(qǐng)求數(shù)據(jù),然后返回?cái)?shù)據(jù)在前臺(tái)頁面中顯示出來。我從來沒有獨(dú)立的完整的將html和css樣式都一個(gè)人完成,如果公司實(shí)在有這樣的需求的話,我可能會(huì)找一些前臺(tái)的模板或者說是前端的框架,比如說h—ui等等

18.權(quán)限管理(RBAC)的實(shí)現(xiàn)?

1.首先創(chuàng)建一張用戶表:id name auto(保存格式為:控制器-方法)

2.然后在后臺(tái)中創(chuàng)建一個(gè)基類控制器,控制器里封裝一個(gè)構(gòu)造方法,當(dāng)用戶登陸成功后,使用TP框架中封裝好的session函數(shù)獲取保存在服務(wù)器中的session id,然后實(shí)例化模型,通過用戶id獲取保存在數(shù)據(jù)表中的auth數(shù)據(jù),使用explode函數(shù)分割獲取到的數(shù)據(jù),并使用一個(gè)數(shù)組保存起來,然后使用TP框架中封裝好的常量獲取當(dāng)前控制器和方法,然后把他們組裝成字符串,使用in_array函數(shù)進(jìn)行判斷該數(shù)組中是否含有當(dāng)前獲取到的控制器和方法,如果沒有,就提示該用戶沒有權(quán)限,如果有就進(jìn)行下一步操作

20.怎么保證促銷商品不會(huì)超賣?

答:這個(gè)問題是我們當(dāng)時(shí)開發(fā)時(shí)遇到的一個(gè)難點(diǎn),超賣的原因主要是下的訂單的數(shù)目和我們要促銷的商品的數(shù)目不一致導(dǎo)致的,每次總是訂單的數(shù)比我們的促銷商品的數(shù)目要多,當(dāng)時(shí)我們的小組討論了好久,給出了好幾個(gè)方案來實(shí)現(xiàn):

第一種方案:在每次下訂單前我們判斷促銷商品的數(shù)量夠不夠,不夠不允許下訂單,更改庫存量時(shí)加上一個(gè)條件,只更改商品庫存大于0的商品的庫存,當(dāng)時(shí)我們使用ab進(jìn)行壓力測(cè)試,當(dāng)并發(fā)超過500,訪問量超過2000時(shí),還是會(huì)出現(xiàn)超賣現(xiàn)象。所以被我們否定了。

第二種方案:使用mysql的事務(wù)加排他鎖來解決,首先我們選擇數(shù)據(jù)庫的存儲(chǔ)引擎為innoDB,使用的是排他鎖實(shí)現(xiàn)的,剛開始的時(shí)候我們測(cè)試了下共享鎖,發(fā)現(xiàn)還是會(huì)出現(xiàn)超賣的現(xiàn)象。有個(gè)問題是,當(dāng)我們進(jìn)行高并發(fā)測(cè)試時(shí),對(duì)數(shù)據(jù)庫的性能影響很大,導(dǎo)致數(shù)據(jù)庫的壓力很大,最終也被我們否定了。

第三種方案:使用文件鎖實(shí)現(xiàn)。當(dāng)用戶搶到一件促銷商品后先觸發(fā)文件鎖,防止其他用戶進(jìn)入,該用戶搶到促銷品后再解開文件鎖,放其他用戶進(jìn)行操作。這樣可以解決超賣的問題,但是會(huì)導(dǎo)致文件得I/O開銷很大。

最后我們使用了redis的隊(duì)列來實(shí)現(xiàn)。將要促銷的商品數(shù)量以隊(duì)列的方式存入redis中,每當(dāng)用戶搶到一件促銷商品則從隊(duì)列中刪除一個(gè)數(shù)據(jù),確保商品不會(huì)超賣。這個(gè)操作起來很方便,而且效率極高,最終我們采取這種方式來實(shí)現(xiàn)

21.商城秒殺的實(shí)現(xiàn)?

答:搶購、秒殺是如今很常見的一個(gè)應(yīng)用場(chǎng)景,主要需要解決的問題有兩個(gè):

1 高并發(fā)對(duì)數(shù)據(jù)庫產(chǎn)生的壓力
2 競(jìng)爭(zhēng)狀態(tài)下如何解決庫存的正確減少("超賣"問題)

1
2
對(duì)于第一個(gè)問題,已經(jīng)很容易想到用緩存來處理搶購,避免直接操作數(shù)據(jù)庫,例如使用Redis。第二個(gè)問題,我們可以使用redis隊(duì)列來完成,把要秒殺的商品放入到隊(duì)列中,因?yàn)閜op操作是原子的,即使有很多用戶同時(shí)到達(dá),也是依次執(zhí)行,文件鎖和事務(wù)在高并發(fā)下性能下降很快,當(dāng)然還要考慮其他方面的東西,比如搶購頁面做成靜態(tài)的,通過ajax調(diào)用接口,其中也可能會(huì)出現(xiàn)一個(gè)用戶搶多次的情況,這時(shí)候需要再加上一個(gè)排隊(duì)隊(duì)列和搶購結(jié)果隊(duì)列及庫存隊(duì)列。高并發(fā)情況下,將用戶進(jìn)入排隊(duì)隊(duì)列,用一個(gè)線程循環(huán)處理從排隊(duì)隊(duì)列取出一個(gè)用戶,判斷用戶是否已在搶購結(jié)果隊(duì)列,如果在,則已搶購,否則未搶購,庫存減1,寫數(shù)據(jù)庫,將用戶入結(jié)果隊(duì)列。

22.購物車的原理?

答:購物車相當(dāng)于現(xiàn)實(shí)中超市的購物車,不同的是一個(gè)是實(shí)體車,一個(gè)是虛擬車而已。用戶可以在購物網(wǎng)站的不同頁面之間跳轉(zhuǎn),以選購自己喜愛的商品,點(diǎn)擊購買時(shí),該商品就自動(dòng)保存到你的購物車中,重復(fù)選購后,最后將選中的所有商品放在購物車中統(tǒng)一到付款臺(tái)結(jié)賬,這也是盡量讓客戶體驗(yàn)到現(xiàn)實(shí)生活中購物的感覺。服務(wù)器通過追蹤每個(gè)用戶的行動(dòng),以保證在結(jié)賬時(shí)每件商品都物有其主。

主要涉及以下幾點(diǎn):

1、把商品添加到購物車,即訂購
2、刪除購物車中已定購的商品
3、修改購物車中某一本圖書的訂購數(shù)量
4、清空購物車
5、顯示購物車中商品清單及數(shù)量、價(jià)格

1
2
3
4
5
6
7
實(shí)現(xiàn)購物車的關(guān)鍵在于服務(wù)器識(shí)別每一個(gè)用戶并維持與他們的聯(lián)系。但是HTTP協(xié)議是一種“無狀態(tài)(Stateless)”的協(xié)議,因而服務(wù)器不能記住是誰在購買商品,當(dāng)把商品加入購物車時(shí),服務(wù)器也不知道購物車?yán)镌扔行┦裁矗沟糜脩粼诓煌撁骈g跳轉(zhuǎn)時(shí)購物車無法“隨身攜帶”,這都給購物車的實(shí)現(xiàn)造成了一定的困難。

目前購物車的實(shí)現(xiàn)主要是通過cookie、session或結(jié)合數(shù)據(jù)庫的方式。下面分析一下它們的機(jī)制及作用。

cookie

cookie是由服務(wù)器產(chǎn)生,存儲(chǔ)在客戶端的一段信息。它定義了一種Web服務(wù)器在客戶端存儲(chǔ)和返回信息的機(jī)制,cookie文件它包含域、路徑、生存期、和由服務(wù)器設(shè)置的變量值等內(nèi)容。當(dāng)用戶以后訪問同一個(gè)Web服務(wù)器時(shí),瀏覽器會(huì)把cookie原樣發(fā)送給服務(wù)器。通過讓服務(wù)器讀取原先保存到客戶端的信息,網(wǎng)站能夠?yàn)闉g覽者提供一系列的方便,例如在線交易過程中標(biāo)識(shí)用戶身份、安全要求不高的場(chǎng)合避免用戶重復(fù)輸入名字和密碼、門戶網(wǎng)站的主頁定制、有針對(duì)性地投放廣告等等。利用cookie的特性,大大擴(kuò)展了WEB應(yīng)用程序的功能,不僅可以建立服務(wù)器與客戶機(jī)的聯(lián)系,因?yàn)閏ookie可以由服務(wù)器定制,因此還可以將購物信息生成cookie值存放在客戶端,從而實(shí)現(xiàn)購物車的功能。用基于cookie的方式實(shí)現(xiàn)服務(wù)器與瀏覽器之間的會(huì)話或購物車,有以下特點(diǎn):

1、cookie存儲(chǔ)在客戶端,且占用很少的資源,瀏覽器允許存放300個(gè)cookie,每個(gè)cookie的大小為4KB,足以滿足購物車的要求,同時(shí)也減輕了服務(wù)器的負(fù)荷;
2、cookie為瀏覽器所內(nèi)置,使用方便。即使用戶不小心關(guān)閉了瀏覽器窗口,只要在cookie定義的有效期內(nèi),購物車中的信息也不會(huì)丟失;
3、cookie不是可執(zhí)行文件,所以不會(huì)以任何方式執(zhí)行,因此也不會(huì)帶來病毒或攻擊用戶的系統(tǒng);
4、基于cookie的購物車要求用戶瀏覽器必須支持并設(shè)置為啟用cookie,否則購物車則失效;
5、存在著關(guān)于cookie侵犯訪問者隱私權(quán)的爭(zhēng)論,因此有些用戶會(huì)禁止本機(jī)的cookie功能。

session

session是實(shí)現(xiàn)購物車的另一種方法。session提供了可以保存和跟蹤用戶的狀態(tài)信息的功能,使當(dāng)前用戶在session中定義的變量和對(duì)象能在頁面之間共享,但是不能為應(yīng)用中其他用戶所訪問,它與cookie最重大的區(qū)別是,session將用戶在會(huì)話期間的私有信息存儲(chǔ)在服務(wù)器端,提高了安全性。在服務(wù)器生成session后,客戶端會(huì)生成一個(gè)sessionid識(shí)別號(hào)保存在客戶端,以保持和服務(wù)器的同步。這個(gè)sessionid是只讀的,如果客戶端禁止cookie功能,session會(huì)通過在URL中附加參數(shù),或隱含在表單中提交等其他方式在頁面間傳送。因此利用session實(shí)施對(duì)用戶的管理則更為安全、有效。

同樣,利用session也能實(shí)現(xiàn)購物車,這種方式的特點(diǎn)是:

1、session用新的機(jī)制保持與客戶端的同步,不依賴于客戶端設(shè)置;
2、與cookie相比,session是存儲(chǔ)在服務(wù)器端的信息,因此顯得更為安全,因此可將身份標(biāo)示,購物等信息存儲(chǔ)在session中;
3、session會(huì)占用服務(wù)器資源,加大服務(wù)器端的負(fù)載,尤其當(dāng)并發(fā)用戶很多時(shí),會(huì)生成大量的session,影響服務(wù)器的性能;
4、因?yàn)閟ession存儲(chǔ)的信息更敏感,而且是以文件形式保存在服務(wù)器中,因此仍然存在著安全隱患。

結(jié)合數(shù)據(jù)庫的方式

這也是目前較普遍的模式,在這種方式中,數(shù)據(jù)庫承擔(dān)著存儲(chǔ)購物信息的作用,session或cookie則用來跟蹤用戶。這種方式具有以下特點(diǎn):

1、數(shù)據(jù)庫與cookie分別負(fù)責(zé)記錄數(shù)據(jù)和維持會(huì)話,能發(fā)揮各自的優(yōu)勢(shì),使安全性和服務(wù)器性能都得到了提高;
2、每一個(gè)購物的行為,都要直接建立與數(shù)據(jù)庫的連接,直至對(duì)表的操作完成后,連接才釋放。當(dāng)并發(fā)用戶很多時(shí),會(huì)影響數(shù)據(jù)庫的性能,因此,這對(duì)數(shù)據(jù)庫的性能提出了更高的要求;
3、使cookie維持會(huì)話有賴客戶端的支持。

各種方式的選擇:

雖然cookie可用來實(shí)現(xiàn)購物車,但必須獲得瀏覽器的支持,再加上它是存儲(chǔ)在客戶端的信息,極易被獲取,所以這也限制了它存儲(chǔ)更多,更重要的信息。所以一般cookie只用來維持與服務(wù)器的會(huì)話,例如國(guó)內(nèi)最大的當(dāng)當(dāng)網(wǎng)絡(luò)書店就是用cookie保持與客戶的聯(lián)系,但是這種方式最大的缺點(diǎn)是如果客戶端不支持cookie就會(huì)使購物車失效。

Session 能很好地與交易雙方保持會(huì)話,可以忽視客戶端的設(shè)置。在購物車技術(shù)中得到了廣泛的應(yīng)用。但session的文件屬性使其仍然留有安全隱患。

結(jié)合數(shù)據(jù)庫的方式雖然在一定程度上解決了上述的問題,但從上面的例子可以看出:在這種購物流程中涉及到對(duì)數(shù)據(jù)庫表的頻繁操作,尤其是用戶每選購一次商品,都要與數(shù)據(jù)庫進(jìn)行連接,當(dāng)用戶很多的時(shí)候就加大了服務(wù)器與數(shù)據(jù)庫的負(fù)荷。

23.redis消息隊(duì)列先進(jìn)先出需要注意什么?

答:通常使用一個(gè)list來實(shí)現(xiàn)隊(duì)列操作,這樣有一個(gè)小限制,所以的任務(wù)統(tǒng)一都是先進(jìn)先出,如果想優(yōu)先處理某個(gè)任務(wù)就不太好處理了,這就需要讓隊(duì)列有優(yōu)先級(jí)的概念,我們就可以優(yōu)先處理高級(jí)別的任務(wù),實(shí)現(xiàn)方式有以下幾種方式:

1)單一列表實(shí)現(xiàn):隊(duì)列正常的操作是 左進(jìn)右出(lpush,rpop)為了先處理高優(yōu)先級(jí)任務(wù),在遇到高級(jí)別任務(wù)時(shí),可以直接插隊(duì),直接放入隊(duì)列頭部(rpush),這樣,從隊(duì)列頭部(右側(cè))獲取任務(wù)時(shí),取到的就是高優(yōu)先級(jí)的任務(wù)(rpop)

2)使用兩個(gè)隊(duì)列,一個(gè)普通隊(duì)列,一個(gè)高級(jí)隊(duì)列,針對(duì)任務(wù)的級(jí)別放入不同的隊(duì)列,獲取任務(wù)時(shí)也很簡(jiǎn)單,redis的BRPOP命令可以按順序從多個(gè)隊(duì)列中取值,BRPOP會(huì)按照給出的 key 順序查看,并在找到的第一個(gè)非空 list 的尾部彈出一個(gè)元素,redis> BRPOP list1 list2 0

list1 做為高優(yōu)先級(jí)任務(wù)隊(duì)列
list2 做為普通任務(wù)隊(duì)列

這樣就實(shí)現(xiàn)了先處理高優(yōu)先級(jí)任務(wù),當(dāng)沒有高優(yōu)先級(jí)任務(wù)時(shí),就去獲取普通任務(wù)

方式1最簡(jiǎn)單,但實(shí)際應(yīng)用比較局限,方式3可以實(shí)現(xiàn)復(fù)雜優(yōu)先級(jí),但實(shí)現(xiàn)比較復(fù)雜,不利于維護(hù)

方式2是推薦用法,實(shí)際應(yīng)用最為合適

24.你負(fù)責(zé)的模塊有哪些難題?

答:在我負(fù)責(zé)的B2B電商項(xiàng)目中,當(dāng)時(shí)我負(fù)責(zé)的是訂單模塊,由于客戶一次選擇了多家商戶的商品,最終生成了一個(gè)訂單,這樣我們平臺(tái)在給商戶結(jié)算時(shí)出現(xiàn)了不知道這比費(fèi)用應(yīng)該給哪個(gè)商戶,這時(shí)候我們小組經(jīng)過討論,需要涉及到訂單拆分,也就是說用戶點(diǎn)擊支付后,如果有多件商品,并且不是同一家店鋪那么 就要用到訂單的拆分,比如如果有兩件商品,并且不是同一店鋪 就在原來的訂單號(hào)下 在生成兩個(gè)子訂單號(hào) 并修改訂單表中兩件商品的訂單號(hào)。最終實(shí)現(xiàn)了商品的分配管理,解決了我們的難題。

我覺得在開發(fā)過程中,遇到的難題無非是兩個(gè),一個(gè)是技術(shù)層次的,我認(rèn)為,只要你有恒心,有熱心,沒有覺得不了的難題。另一個(gè)就是溝通問題,在任何地方任何時(shí)候溝通都是最重要的,尤其是我們做開發(fā)的,不溝通好,會(huì)影響整個(gè)項(xiàng)目的進(jìn)度,我本人是個(gè)非常還溝通的人,所以這點(diǎn)上也沒多大問題。

25.用戶下單是怎么處理的?

答:判斷用戶有沒有登錄,在沒有登錄的情況下,不允許下單。登陸后,可進(jìn)行下單,并生成唯一的訂單號(hào),此時(shí)訂單的狀態(tài)為未支付。

26.電商的登錄是怎么實(shí)現(xiàn)的?

答:分為普通登錄和第三方登錄 這邊主要說一下第三方登錄吧,第三方登陸主要使用的是author協(xié)議,我就以QQ的第三方登陸為例來進(jìn)行說明:當(dāng)用戶在我們的站點(diǎn)請(qǐng)求QQ的第三方登陸時(shí),我們站點(diǎn)會(huì)引導(dǎo)用戶跳轉(zhuǎn)到QQ的登陸授權(quán)界面, 當(dāng)用戶輸入QQ和密碼成功登錄以后會(huì)自動(dòng)跳回到我們站點(diǎn)設(shè)置好的回調(diào)頁面,并附帶一個(gè)code參數(shù),接著你使用code再次去請(qǐng)求QQ的授權(quán)頁面,就可以從中獲取到一個(gè)access token(訪問令牌),通過這個(gè)access_token,我們可以調(diào)用QQ提供給我們的接口,比如獲取open_id,可以獲取用戶的基本信息。獲取到之后,我們需要拿用戶的授權(quán)信息和open_id和我們平臺(tái)的普通用戶進(jìn)行綁定。這樣不管是普通用戶登陸還是第三方登陸用戶,都可以實(shí)現(xiàn)登陸。

27.接口安全方面是怎么處理的?

答:我們當(dāng)時(shí)是這么做的,使用HTTP的POST方式,對(duì)固定參數(shù)+附加參數(shù)進(jìn)行數(shù)字簽名,使用的是md5加密,比如:我想通過標(biāo)題獲取一個(gè)信息,在客戶端使用 信息標(biāo)題+日期+雙方約定好的一個(gè)key通過md5加密生成一個(gè)簽名(sign),然后作為參數(shù)傳遞到服務(wù)器端,服務(wù)器端使用同樣的方法進(jìn)行校驗(yàn),如何接受過來的sign和我們通過算法算的值相同,證明是一個(gè)正常的接口請(qǐng)求,我們才會(huì)返回相應(yīng)的接口數(shù)據(jù)。

28.用的什么技術(shù)實(shí)現(xiàn)短信發(fā)送,在哪調(diào)用?

答:我主要用的第三方短信接口,在申請(qǐng)接口時(shí)進(jìn)行相應(yīng)信息的配置,然后在我們站點(diǎn)需要用到短信驗(yàn)證的地方進(jìn)行調(diào)用,我們通常在用戶注冊(cè)時(shí)使用到。

29.在工作中遇到什么困難?

答:總體來說:在工作我主要遇到這幾個(gè)問題比較難處理:

①我之前工作的時(shí)候發(fā)現(xiàn)經(jīng)常會(huì)出現(xiàn)一些臨時(shí)需求打亂了我的計(jì)劃,搞得有時(shí)候這個(gè)任務(wù)還沒完成,又得去做其他的任務(wù),最后一天下來,大大小小的東西是很多,但是沒有完成得非常好的,后面我總結(jié)了一下,我會(huì)把這些都添加優(yōu)先級(jí),遇到臨時(shí)需求,按照優(yōu)先級(jí)重新將已有任務(wù)和臨時(shí)任務(wù)進(jìn)行排版,保證在規(guī)定時(shí)間內(nèi)有效率的完成優(yōu)先級(jí)高的任務(wù)。

②在做項(xiàng)目需求時(shí)候,遇到理解能力欠佳的人,溝通時(shí)容易被氣到,影響自己的情緒,最后反倒還不能到達(dá)需要的效果。后面,每次到這種時(shí)候,我一般會(huì)借助一些紙質(zhì)的、更加形象的東西,讓雙方都認(rèn)同的、都能明白的一種方式來進(jìn)行溝通,后面減少了很多不必須的麻煩。大家都知道,對(duì)于程序員來說,改需求是一件很痛苦的事情,所以前期的溝通工作很重要。

③還有一件事時(shí),我以前的領(lǐng)導(dǎo)不太懂技術(shù),所以每次出一個(gè)新的需求出來,總是要求我們?cè)诤芏痰臅r(shí)間內(nèi)完成,完不成我們就會(huì)被懷疑能力有問題。當(dāng)然,每個(gè)領(lǐng)導(dǎo)都希望自己的員工能夠盡快的完成任務(wù),降低成本,提高效率。這時(shí)候我會(huì)把我們的需求細(xì)化,把其中的重點(diǎn)、難點(diǎn)都列出來,做好時(shí)間規(guī)劃,耐心的跟領(lǐng)導(dǎo)溝通,項(xiàng)目每個(gè)點(diǎn)的重要性和時(shí)間的花費(fèi)比例,確保在這個(gè)規(guī)劃的時(shí)間點(diǎn)內(nèi)保質(zhì)保量的完成任務(wù)。慢慢的也得到了領(lǐng)導(dǎo)的認(rèn)可,其實(shí)領(lǐng)導(dǎo)也不是一味的不通情理,只要把東西計(jì)劃好了,以最小的代價(jià)換取最高的價(jià)值,每個(gè)人都是很容易理解得

30.用戶不登錄,怎么直接加入購物車的?

答:用戶在不登錄的情況下,可以把要購買商品的信息(如商品的ID,商品的價(jià)格、商品的sku_id,購買數(shù)量等關(guān)鍵數(shù)據(jù))存到COOKIE里面,當(dāng)?shù)顷懙那闆r下。把COOKIE里面的內(nèi)容存到數(shù)據(jù)庫,并清除cookie中的數(shù)據(jù)。

31.寫過接口嗎,怎么定義接口的?

答:寫過。接口分為兩種:一種是數(shù)據(jù)型接口,一種是應(yīng)用型接口。

數(shù)據(jù)型接口:是比抽象類更抽象的某種“結(jié)構(gòu)”——它其實(shí)不是類,但是跟類一樣的某種語法結(jié)構(gòu),是一種結(jié)構(gòu)規(guī)范,規(guī)范我們類要以什么格式進(jìn)行定義,一般用于團(tuán)隊(duì)比較大,分支比較多的情況下使用。

應(yīng)用型接口: API(application interface) 數(shù)據(jù)對(duì)外訪問的一個(gè)入口

我主要是參與的APP開發(fā)中接口的編寫,客戶端需要什么樣的數(shù)據(jù),我們就給他們提供相應(yīng)的數(shù)據(jù),數(shù)據(jù)以json/xml的格式返回,并且配以相應(yīng)的接口文檔。

32.sku減庫存?

答:SKU = Stock Keeping Unit (庫存量單位)
即庫存進(jìn)出計(jì)量的單位,可以是以件,盒,托盤等為單位。SKU是庫存量單位,區(qū)分單品。
在服裝、鞋類商品中使用最多最普遍。 例如紡織品中一個(gè)SKU通常表示:規(guī)格、顏色、款式。

在設(shè)計(jì)表時(shí),不僅僅只有商品表,商品表中有個(gè)總庫存,我們還需要涉及一張SKU表,里面有SKU庫存和單價(jià)字段,用戶每購買一件商品,實(shí)際上購買的都是SKU商品,這樣在下訂單成功后,應(yīng)該根據(jù)所購買的商品的唯一的SKU號(hào)來進(jìn)行相應(yīng)的SKU庫存的減少,當(dāng)然商品的總庫存保存在商品主表中,也需要減少總庫存中的庫存量。

33.庫存設(shè)置?

答:庫存分為商品總庫存和SKU庫存,往往商品總庫存的為SKU庫存的總和。一般在商城的后臺(tái)對(duì)貨品設(shè)置最高庫存及最低庫存后,當(dāng)前庫存數(shù)量與最高、最低兩者比較,超出庫存或者低于庫存的,則被統(tǒng)計(jì)成報(bào)表形式反映,便于用戶掌握貨品庫存超、短缺狀態(tài)及數(shù)量。

34.訂單、庫存兩個(gè)表 如何保證數(shù)據(jù)的一致性?

答:在一個(gè)電子商務(wù)系統(tǒng)中,正常的應(yīng)該是訂單生成成功后,相應(yīng)的庫存進(jìn)行減少必須要保證兩者的一致性,但有時(shí)候因?yàn)槟承┰颍热绯绦蜻壿媶栴},并發(fā)等問題,導(dǎo)致下單成功而庫存沒有減少的情況。這種情況我們是不允許發(fā)生的,MySQL的中的事務(wù)剛好可以解決這一問題,首先得選擇數(shù)據(jù)庫的存儲(chǔ)引擎為InnoDB的,事務(wù)規(guī)定了只有下訂單完成了,并且相應(yīng)的庫存減少了才允許提交事務(wù),否則就事務(wù)回滾,確保數(shù)據(jù)一致性。

35.O2O用戶下單,c端下單,如何保證ba端數(shù)據(jù)一致?

答:O2O為線上和線下模式,O2O模式奉行的是“線上支付+實(shí)體店消費(fèi)”的消費(fèi)模式,即消費(fèi)者在網(wǎng)上下單完成支付后,憑消費(fèi)憑證到實(shí)體店消費(fèi)。 O2O模式是把商家信息和支付程序放在線上進(jìn)行,而把商品和服務(wù)兌現(xiàn)放在線下,也就是說O2O模式適用于快遞無法送達(dá)的有形產(chǎn)品。數(shù)據(jù)一致性的問題是O2O行業(yè)中最常見的問題,我們可以類似于數(shù)據(jù)庫的主從復(fù)制的思路來解決這個(gè)問題.O2O有個(gè)供應(yīng)商系統(tǒng),類似于主服務(wù)器,在?端(從服務(wù)器)下單時(shí),數(shù)據(jù)同步更新到供應(yīng)商系統(tǒng)端,b,a實(shí)時(shí)從供應(yīng)商系統(tǒng)中拉取數(shù)據(jù)進(jìn)行同步,比如利用定時(shí)任務(wù),定時(shí)拉取數(shù)據(jù)進(jìn)行同步。

36.Redis如何防止高并發(fā)?

答:其實(shí)redis是不會(huì)存在并發(fā)問題的,因?yàn)樗菃芜M(jìn)程的,再多的命令都是一個(gè)接一個(gè)地執(zhí)行的。我們使用的時(shí)候,可能會(huì)出現(xiàn)并發(fā)問題,比如獲得和設(shè)定這一對(duì)。Redis的為什么 有高并發(fā)問題?Redis的的出身決定
Redis是一種單線程機(jī)制的nosql數(shù)據(jù)庫,基于key-value,數(shù)據(jù)可持久化落盤。由于單線程所以redis本身并沒有鎖的概念,多個(gè)客戶端連接并不存在競(jìng)爭(zhēng)關(guān)系,但是利用jedis等客戶端對(duì)redis進(jìn)行并發(fā)訪問時(shí)會(huì)出現(xiàn)問題。發(fā)生連接超時(shí)、數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤、阻塞、客戶端關(guān)閉連接等問題,這些問題均是由于客戶端連接混亂造成。

同時(shí),單線程的天性決定,高并發(fā)對(duì)同一個(gè)鍵的操作會(huì)排隊(duì)處理,如果并發(fā)量很大,可能造成后來的請(qǐng)求超時(shí)。

在遠(yuǎn)程訪問redis的時(shí)候,因?yàn)榫W(wǎng)絡(luò)等原因造成高并發(fā)訪問延遲返回的問題。

解決辦法

在客戶端將連接進(jìn)行池化,同時(shí)對(duì)客戶端讀寫Redis操作采用內(nèi)部鎖synchronized。

服務(wù)器角度,利用setnx變向?qū)崿F(xiàn)鎖機(jī)制。

37.秒殺當(dāng)中的細(xì)節(jié)你是怎么得出來的?

答:通過性能測(cè)試及模擬秒殺場(chǎng)景。每個(gè)問題都經(jīng)過反復(fù)測(cè)試,不斷的發(fā)現(xiàn)問題,不斷的解決。

38.做秒殺用什么數(shù)據(jù)庫,怎么實(shí)現(xiàn)的?

答:因?yàn)槊霘⒌囊凰查g,并發(fā)非常大,如果同時(shí)請(qǐng)求數(shù)據(jù)庫,會(huì)導(dǎo)致數(shù)據(jù)庫的壓力非常大,導(dǎo)致數(shù)據(jù)庫的性能急劇下降,更嚴(yán)重的可能會(huì)導(dǎo)致數(shù)據(jù)庫服務(wù)器宕機(jī)。這時(shí)候一般采用內(nèi)存高速緩存數(shù)據(jù)庫redis來實(shí)現(xiàn)的,redis是非關(guān)系型數(shù)據(jù)庫,redis是單線程的,通過redis的隊(duì)列可以完成秒殺過程。

39.支付寶流程怎么實(shí)現(xiàn)的?

答:首先要有一個(gè)支付寶賬號(hào),接下來向支付寶申請(qǐng)?jiān)诰€支付業(yè)務(wù),簽署協(xié)議。協(xié)議生效后有支付寶一方會(huì)給網(wǎng)站方一個(gè)合作伙伴ID,和安全校驗(yàn)碼,有了這兩樣?xùn)|西就可以按照支付寶接口文檔開發(fā)支付寶接口了,中間主要涉及到一個(gè)安全問題。整個(gè)流程是這樣的:我們的網(wǎng)站通過post傳遞相應(yīng)的參數(shù)(如訂單總金額,訂單號(hào))到支付頁面,支付頁面把一系列的參數(shù)經(jīng)過處理,以post的方式提交給支付寶服務(wù)器,支付寶服務(wù)器進(jìn)行驗(yàn)證,并對(duì)接收的數(shù)據(jù)進(jìn)行處理,把處理后的結(jié)果返回給我們網(wǎng)站設(shè)置的異步和同步回調(diào)地址,通過相應(yīng)的返回參數(shù),來處理相應(yīng)的業(yè)務(wù)邏輯,比如返回的參數(shù)代表支付成功,更改訂單狀態(tài)。

40.什么是單點(diǎn)登錄?

答:單點(diǎn)登錄SSO(Single Sign On)說得簡(jiǎn)單點(diǎn)就是在一個(gè)多系統(tǒng)共存的環(huán)境下,用戶在一處登錄后,就不用在其他系統(tǒng)中登錄,也就是用戶的一次登錄能得到其他所有系統(tǒng)的信任。

41.什么情況下使用緩存?

答:當(dāng)用戶第一次訪問應(yīng)用系統(tǒng)的時(shí)候,因?yàn)檫€沒有登錄,會(huì)被引導(dǎo)到認(rèn)證系統(tǒng)中進(jìn)行登錄;根據(jù)用戶提供的登錄信息,認(rèn)證系統(tǒng)進(jìn)行身份校驗(yàn),如果通過校驗(yàn),應(yīng)該返回給用戶一個(gè)認(rèn)證的憑據(jù)--ticket;用戶再訪問別的應(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的合法性。如果通過校驗(yà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、主要通過跨域請(qǐng)求的方式來實(shí)現(xiàn)驗(yàn)證及session處理。

42.怎么實(shí)現(xiàn)第三方登錄?

答:第三方登陸主要是基于author協(xié)議來實(shí)現(xiàn),下面簡(jiǎn)單說下實(shí)現(xiàn)流程:

1、首先我們需要以開發(fā)者的身份向第三方登陸平臺(tái)申請(qǐng)接入應(yīng)用,申請(qǐng)成功后,我們會(huì)獲得一個(gè)appID和一個(gè)secrectID.
2、當(dāng)我們的網(wǎng)站需接入第三方登陸時(shí),會(huì)引導(dǎo)用戶跳轉(zhuǎn)到第三方的登陸授權(quán)頁面,此時(shí)把之前申請(qǐng)的appID和secrectID帶給登陸授權(quán)頁面。
3、用戶登陸成功后即得到授權(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)用第三方提供的接口了,比如獲取用戶信息等。最后把該用戶信息存入到我們站點(diǎn)的數(shù)據(jù)庫,并把信息保存到session中,實(shí)現(xiàn)用戶的第三方登陸。

43.如何處理負(fù)載、高并發(fā)?(好好看看,經(jīng)常問到,能回答到主要的東西即可)?

答:從低成本、高性能和高擴(kuò)張性的角度來說有如下處理方案:

1、HTML靜態(tài)化

其實(shí)大家都知道,效率最高、消耗最小的就是純靜態(tài)化的html頁面,所以我們盡可能使我們的 網(wǎng)站上的頁面采用靜態(tài)頁面來實(shí)現(xiàn),這個(gè)最簡(jiǎn)單的方法其實(shí)也是最有效的方法。

2、圖片服務(wù)器分離

把圖片多帶帶存儲(chǔ),盡量減少圖片等大流量的開銷,可以放在一些相關(guān)的平臺(tái)上,如騎牛等

3、數(shù)據(jù)庫集群和庫表散列及緩存

數(shù)據(jù)庫的并發(fā)連接為100,一臺(tái)數(shù)據(jù)庫遠(yuǎn)遠(yuǎn)不夠,可以從讀寫分離、主從復(fù)制,數(shù)據(jù)庫集群方面來著手。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如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。我分別來說下三種的優(yōu)缺點(diǎn):

Nginx的優(yōu)點(diǎn)是:

工作在網(wǎng)絡(luò)的7層之上,可以針對(duì)http應(yīng)用做一些分流的策略,比如針對(duì)域名、目錄結(jié)構(gòu),它的正則規(guī)則比HAProxy更為強(qiáng)大和靈活,這也是它目前廣泛流行的主要原因之一,Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了。

Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴非常小,理論上能ping通就就能進(jìn)行負(fù)載功能,這個(gè)也是它的優(yōu)勢(shì)之一;相反LVS對(duì)網(wǎng)絡(luò)穩(wěn)定性依賴比較大,這點(diǎn)本人深有體會(huì);

Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來比較方便,它基本能把錯(cuò)誤用日志打印出來。LVS的配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了,LVS對(duì)網(wǎng)絡(luò)依賴比較大。

可以承擔(dān)高負(fù)載壓力且穩(wěn)定,在硬件不差的情況下一般能支撐幾萬次的并發(fā)量,負(fù)載度比LVS相對(duì)小些。

Nginx可以通過端口檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時(shí)等等,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn),不過其中缺點(diǎn)就是不支持url來檢測(cè)。比如用戶正在上傳一個(gè)文件,而處理該上傳的節(jié)點(diǎn)剛好在上傳過程中出現(xiàn)故障,Nginx會(huì)把上傳切到另一臺(tái)服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話,用戶可能會(huì)因此而不滿。

Nginx不僅僅是一款優(yōu)秀的負(fù)載均衡器/反向代理軟件,它同時(shí)也是功能強(qiáng)大的Web應(yīng)用服務(wù)器。LNMP也是近幾年非常流行的web架構(gòu),在高流量的環(huán)境中穩(wěn)定性也很好。

Nginx現(xiàn)在作為Web反向加速緩存越來越成熟了,速度比傳統(tǒng)的Squid服務(wù)器更快,可以考慮用其作為反向代理加速器。

Nginx可作為中層反向代理使用,這一層面Nginx基本上無對(duì)手,唯一可以對(duì)比Nginx的就只有 lighttpd了,不過 lighttpd目前還沒有做到Nginx完全的功能,配置也不那么清晰易讀,社區(qū)資料也遠(yuǎn)遠(yuǎn)沒Nginx活躍。

Nginx也可作為靜態(tài)網(wǎng)頁和圖片服務(wù)器,這方面的性能也無對(duì)手。還有Nginx社區(qū)非?;钴S,第三方模塊也很多。

Nginx的缺點(diǎn)是:

Nginx僅能支持http、https和Email協(xié)議,這樣就在適用范圍上面小些,這個(gè)是它的缺點(diǎn)。
對(duì)后端服務(wù)器的健康檢查,只支持通過端口來檢測(cè),不支持通過url來檢測(cè)。不支持Session的直接保持,但能通過ip_hash來解決。
LVS:使用Linux內(nèi)核集群實(shí)現(xiàn)一個(gè)高性能、高可用的負(fù)載均衡服務(wù)器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS的優(yōu)點(diǎn)是:

抗負(fù)載能力強(qiáng)、是工作在網(wǎng)絡(luò)4層之上僅作分發(fā)之用,沒有流量的產(chǎn)生,這個(gè)特點(diǎn)也決定了它在負(fù)載均衡軟件里的性能最強(qiáng)的,對(duì)內(nèi)存和cpu資源消耗比較低。
配置性比較低,這是一個(gè)缺點(diǎn)也是一個(gè)優(yōu)點(diǎn),因?yàn)闆]有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯(cuò)的幾率。
工作穩(wěn)定,因?yàn)槠浔旧砜关?fù)載能力很強(qiáng),自身有完整的雙機(jī)熱備方案,如LVS+Keepalived,不過我們?cè)陧?xiàng)目實(shí)施中用得最多的還是LVS/DR+Keepalived。
無流量,LVS只分發(fā)請(qǐng)求,而流量并不從它本身出去,這點(diǎn)保證了均衡器IO的性能不會(huì)受到大流量的影響。
應(yīng)用范圍比較廣,因?yàn)長(zhǎng)VS工作在4層,所以它幾乎可以對(duì)所有應(yīng)用做負(fù)載均衡,包括http、數(shù)據(jù)庫、在線聊天室等等。
LVS的缺點(diǎn)是:

軟件本身不支持正則表達(dá)式處理,不能做動(dòng)靜分離;而現(xiàn)在許多網(wǎng)站在這方面都有較強(qiáng)的需求,這個(gè)是Nginx/HAProxy+Keepalived的優(yōu)勢(shì)所在。
如果是網(wǎng)站應(yīng)用比較龐大的話,LVS/DR+Keepalived實(shí)施起來就比較復(fù)雜了,特別后面有 Windows Server的機(jī)器的話,如果實(shí)施及配置還有維護(hù)過程就比較復(fù)雜了,相對(duì)而言,Nginx/HAProxy+Keepalived就簡(jiǎn)單多了。
HAProxy的特點(diǎn)是:

HAProxy也是支持虛擬主機(jī)的。
HAProxy的優(yōu)點(diǎn)能夠補(bǔ)充Nginx的一些缺點(diǎn),比如支持Session的保持,Cookie的引導(dǎo);同時(shí)支持通過獲取指定的url來檢測(cè)后端服務(wù)器的狀態(tài)。
HAProxy跟LVS類似,本身就只是一款負(fù)載均衡軟件;單純從效率上來講HAProxy會(huì)比Nginx有更出色的負(fù)載均衡速度,在并發(fā)處理上也是優(yōu)于Nginx的。
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ù)載均衡。
HAProxy負(fù)載均衡策略非常多,HAProxy的負(fù)載均衡算法現(xiàn)在具體有如下8種:
① roundrobin,表示簡(jiǎn)單的輪詢,這個(gè)不多說,這個(gè)是負(fù)載均衡基本都具備的;
② static-rr,表示根據(jù)權(quán)重,建議關(guān)注;
③ leastconn,表示最少連接者先處理,建議關(guān)注;
④ source,表示根據(jù)請(qǐng)求源IP,這個(gè)跟Nginx的IP_hash機(jī)制類似,我們用其作為解決session問題的一種方法,建議關(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)求頭來鎖定每一次HTTP請(qǐng)求;
⑧ rdp-cookie(name),表示根據(jù)據(jù)cookie(name)來鎖定并哈希每一次TCP請(qǐng)求。

Nginx和LVS對(duì)比的總結(jié):

Nginx工作在網(wǎng)絡(luò)的7層,所以它可以針對(duì)http應(yīng)用本身來做分流策略,比如針對(duì)域名、目錄結(jié)構(gòu)等,相比之下LVS并不具備這樣的功能,所以Nginx單憑這點(diǎn)可利用的場(chǎng)合就遠(yuǎn)多于LVS了;但Nginx有用的這些功能使其可調(diào)整度要高于LVS,所以經(jīng)常要去觸碰觸碰,觸碰多了,人為出問題的幾率也就會(huì)大。

Nginx對(duì)網(wǎng)絡(luò)穩(wěn)定性的依賴較小,理論上只要ping得通,網(wǎng)頁訪問正常,Nginx就能連得通,這是Nginx的一大優(yōu)勢(shì)!Nginx同時(shí)還能區(qū)分內(nèi)外網(wǎng),如果是同時(shí)擁有內(nèi)外網(wǎng)的節(jié)點(diǎn),就相當(dāng)于單機(jī)擁有了備份線路;LVS就比較依賴于網(wǎng)絡(luò)環(huán)境,目前來看服務(wù)器在同一網(wǎng)段內(nèi)并且LVS使用direct方式分流,效果較能得到保證。另外注意,LVS需要向托管商至少申請(qǐng)多一個(gè)ip來做Visual IP,貌似是不能用本身的IP來做VIP的。要做好LVS管理員,確實(shí)得跟進(jìn)學(xué)習(xí)很多有關(guān)網(wǎng)絡(luò)通信方面的知識(shí),就不再是一個(gè)HTTP那么簡(jiǎn)單了。

Nginx安裝和配置比較簡(jiǎn)單,測(cè)試起來也很方便,因?yàn)樗灸馨彦e(cuò)誤用日志打印出來。LVS的安裝和配置、測(cè)試就要花比較長(zhǎng)的時(shí)間了;LVS對(duì)網(wǎng)絡(luò)依賴比較大,很多時(shí)候不能配置成功都是因?yàn)榫W(wǎng)絡(luò)問題而不是配置問題,出了問題要解決也相應(yīng)的會(huì)麻煩得多。

Nginx也同樣能承受很高負(fù)載且穩(wěn)定,但負(fù)載度和穩(wěn)定度差LVS還有幾個(gè)等級(jí):Nginx處理所有流量所以受限于機(jī)器IO和配置;本身的bug也還是難以避免的。

Nginx可以檢測(cè)到服務(wù)器內(nèi)部的故障,比如根據(jù)服務(wù)器處理網(wǎng)頁返回的狀態(tài)碼、超時(shí)等等,并且會(huì)把返回錯(cuò)誤的請(qǐng)求重新提交到另一個(gè)節(jié)點(diǎn)。目前LVS中 ldirectd也能支持針對(duì)服務(wù)器內(nèi)部的情況來監(jiān)控,但LVS的原理使其不能重發(fā)請(qǐng)求。比如用戶正在上傳一個(gè)文件,而處理該上傳的節(jié)點(diǎn)剛好在上傳過程中出現(xiàn)故障,Nginx會(huì)把上傳切到另一臺(tái)服務(wù)器重新處理,而LVS就直接斷掉了,如果是上傳一個(gè)很大的文件或者很重要的文件的話,用戶可能會(huì)因此而惱火。

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ì)被Nginx擋住,apache上就不會(huì)堆積過多的請(qǐng)求,這樣就減少了相當(dāng)多的資源占用。這點(diǎn)使用squid也有相同的作用,即使squid本身配置為不緩存,對(duì)apache還是有很大幫助的。

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ù)庫的 ip、webservice服務(wù)器的ip等等,這些ip地址隨著時(shí)間推移,使用面會(huì)越來越大,如果更換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基本上無對(duì)手,唯一可以撼動(dòng)Nginx的就只有l(wèi)ighttpd了,不過lighttpd目前還沒有能做到 Nginx完全的功能,配置也不那么清晰易讀。另外,中層代理的IP也是重要的,所以中層代理也擁有一個(gè)VIP和LVS是最完美的方案了。具體的應(yīng)用還得具體分析,如果是比較小的網(wǎng)站(日PV小于1000萬),用Nginx就完全可以了,如果機(jī)器也不少,可以用DNS輪詢,LVS所耗費(fèi)的機(jī)器還是比較多的;大型網(wǎng)站或者重要的服務(wù),機(jī)器不發(fā)愁的時(shí)候,要多多考慮利用LVS。

數(shù)據(jù)庫優(yōu)化

44.做秒殺時(shí)鎖表考慮到?jīng)]有?

答:考慮到了,當(dāng)時(shí)我們做秒殺時(shí)考慮了好幾種方案,其中有一種就是使用事務(wù)加上排他鎖來實(shí)現(xiàn)。

45.架構(gòu)類的東西接觸過嗎?

有接觸過,曾經(jīng)自己在自己的服務(wù)器上配置過。我以前做過以下幾個(gè)架構(gòu)方面的配置和測(cè)試;

1、數(shù)據(jù)庫的讀寫分離、主從復(fù)制及集群。
2、Nginx負(fù)載均衡
3、redis集群及主從
46.封裝過一個(gè)簡(jiǎn)單的框架?

答;封裝過一個(gè)簡(jiǎn)單的MVC框架,主要分為3層,控制器層和模型層視圖層,以及路由的分配和入口文件,模板引擎,單例模式、工廠模式,第三方類庫的引入等。

47.談?wù)剬?duì)MVC的認(rèn)識(shí)?

答:核心思想是:視圖和用戶交互通過事件導(dǎo)致控制器改變 控制器改變導(dǎo)致模型改變 或者控制器同時(shí)改變兩者 模型改變 導(dǎo)致視圖改變 或者視圖改變 潛在的從模型里面獲得參數(shù) 來改變自己。他的好處是可以將界面和業(yè)務(wù)邏輯分離。

Model(模型),是程序的主體部分,主要包含業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。在模型層,還會(huì)涉及到用戶發(fā)布的服務(wù),在服務(wù)中會(huì)根據(jù)不同的業(yè)務(wù)需求,更新業(yè)務(wù)模型中的數(shù)據(jù)。
View(視圖),是程序呈現(xiàn)給用戶的部分,是用戶和程序交互的接口,用戶會(huì)根據(jù)具體的業(yè)務(wù)需求,在View視圖層輸入自己特定的業(yè)務(wù)數(shù)據(jù),并通過界面的事件交互,將對(duì)應(yīng)的輸入?yún)?shù)提交給后臺(tái)控制器進(jìn)行處理。
Contorller(控制器),Contorller是用來處理用戶 輸入數(shù)據(jù),已經(jīng)更新業(yè)務(wù)模型的部分??刂破髦薪邮樟擞脩襞c界面交互時(shí)傳遞過來的數(shù)據(jù),并根據(jù)數(shù)據(jù)業(yè)務(wù)邏輯來執(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)訪問增多,會(huì)比較占用你服務(wù)器的性能,考慮到減輕服務(wù)器性能方面,應(yīng)當(dāng)使用COOKIE。

4、單個(gè)cookie保存的數(shù)據(jù)不能超過4K,很多瀏覽器都限制一個(gè)站點(diǎn)最多保存20個(gè)cookie。

5、所以個(gè)人建議:

將登陸信息等重要信息存放為SESSION
其他信息如果需要保留,可以放在COOKIE

49.echo(),print(),print_r()的區(qū)別?

echo可以一次輸出多個(gè)值,多個(gè)值之間用逗號(hào)分隔。echo是語言結(jié)構(gòu)(language construct),而并不是真正的函數(shù),因此不能作為表達(dá)式的一部分使用。echo是php的內(nèi)部指令,不是函數(shù),無返回值。

print():函數(shù)print()打印一個(gè)值(它的參數(shù)),如果字符串成功顯示則返回true,否則返回false。只能打印出簡(jiǎn)單類型變量的值(如int,string),有返回值

printf():源于C語言中的printf()。該函數(shù)輸出格式化的字符串。

print_r()和var_dump()
print_r()可以把字符串和數(shù)字簡(jiǎn)單地打印出來,而數(shù)組則以括起來的鍵和值得列表形式顯示,并以Array開頭。但print_r()輸出布爾值和NULL的結(jié)果沒有意義,因?yàn)槎际谴蛴?n"。因此用var_dump()函數(shù)更適合調(diào)試。print_r是函數(shù),可以打印出比較復(fù)雜的變量(如數(shù)組,對(duì)象),有返回值
var_dump()判斷一個(gè)變量的類型與長(zhǎng)度,并輸出變量的數(shù)值,如果變量有值輸?shù)氖亲兞康闹挡⒒胤禂?shù)據(jù)類型。此函數(shù)顯示關(guān)于一個(gè)或多個(gè)表達(dá)式的結(jié)構(gòu)信息,包括表達(dá)式的類型與值。數(shù)組將遞歸展開值,通過縮進(jìn)顯示其結(jié)構(gòu)。

50.說一下單引號(hào)雙引號(hào)?

①單引號(hào)內(nèi)部的變量不會(huì)執(zhí)行, 雙引號(hào)會(huì)執(zhí)行

②單引號(hào)解析速度比雙引號(hào)快。

③單引號(hào)只能解析部分特殊字符,雙引號(hào)可以解析所有特殊字符。
1
2
3
4
5
51.索引的優(yōu)缺點(diǎn)?

1、優(yōu)點(diǎn):

a)可以保證數(shù)據(jù)庫表中每一行的數(shù)據(jù)的唯一性
b)可以大大加快數(shù)據(jù)的索引速度
c)加速表與表之間的連接,物別是在實(shí)現(xiàn)數(shù)據(jù)的參考完事性方面特別有意義
d)在使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),同樣可以顯著減少查詢中分組和排序的時(shí)間
f)通過使用索引,可以在時(shí)間查詢的過程中,使用優(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ū)別?

get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。

get是把參數(shù)數(shù)據(jù)隊(duì)列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個(gè)字段一一對(duì)應(yīng),在URL中可以看到。post是通過HTTP post機(jī)制,將表單內(nèi)各個(gè)字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個(gè)過程。

get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。

get安全性非常低,post安全性較高。但是執(zhí)行效率卻比Post方法好。

53.如何修改會(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è)磁盤的架構(gòu)特性
hdparm -tT / dev / sda在磁盤上執(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 從 "/"開始進(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的盤- 確定目錄"/ mnt/hda2" 已經(jīng)存在
umount /dev/hda2 卸載一個(gè)叫做hda2的盤- 先從掛載點(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)限為讀取、寫入、執(zhí)行。群組權(quán)限為讀取。其他權(quán)限為讀取
sudo chmod 744 /etc/index.html
4,刪除/etc下名為hello的文件
sudo rm /etc/index.html

當(dāng)然,如果你是以orot用戶執(zhí)行以上操作,可以去掉前邊的sudo!

df -hl 查看磁盤剩余空間

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 注銷

文件和目錄
pwd 顯示工作路徑
ls 查看目錄中的文件
ls -F 查看目錄中的文件
ls -l 顯示文件和目錄的詳細(xì)資料
ls -a 顯示隱藏文件
ls [0-9] 顯示包含數(shù)字的文件名和目錄名
tree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(1)
lstree 顯示文件和目錄由根目錄開始的樹形結(jié)構(gòu)(2)
mkdir dir1 創(chuàng)建一個(gè)叫做 "dir1"的目錄"

磁盤空間
df -h 顯示已經(jīng)掛載的分區(qū)列表
ls -lSr |more 以尺寸大小排列文件和目錄
du -sh dir1 估算目錄 "dir1"已經(jīng)使用的磁盤空間"

下載、解壓

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中的所有文件解壓出來

下載命令

wget + 空格 +要下載文件的url路徑

=====================================

Shell 腳本:

必須以 #!/bin/sh 開頭

簡(jiǎn)單例子:判斷這個(gè)目錄下有沒有文件(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就是沒有文件 非零就是有文件

55..memcache緩存什么數(shù)據(jù)?

一、經(jīng)常被讀取并且實(shí)時(shí)性要求不強(qiáng)可以等到自動(dòng)過期的數(shù)據(jù)。例如網(wǎng)站首頁最新文章列表、某某排行等數(shù)據(jù)。

二、經(jīng)常被讀取并且實(shí)時(shí)性要求強(qiáng)的數(shù)據(jù)。比如用戶的好友列表,用戶文章列表,用戶閱讀記錄等。

三、統(tǒng)計(jì)類緩存,比如文章瀏覽數(shù)、網(wǎng)站PV等。

四、活躍用戶的基本信息或者某篇熱門文章。

五、session數(shù)據(jù)

56.魔術(shù)方法、魔術(shù)常量?

1。__construct()
實(shí)例化對(duì)象時(shí)被調(diào)用,當(dāng)__construct和以類名為函數(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)的類不存在,則該方法被調(diào)用。

魔術(shù)常量:

LINE
返回文件中的當(dāng)前行號(hào)。

FILE
返回文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個(gè)絕對(duì)路徑,而在此之前的版本有時(shí)會(huì)包含一個(gè)相對(duì)路徑。

FUNCTION
返回函數(shù)名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數(shù)被定義時(shí)的名字(區(qū)分大小寫)。在PHP 4 中該值總是小寫字母的。

CLasS
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時(shí)的名字(區(qū)分大小寫)。在PHP 4 中該值總是小寫字母的。

METHOD
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時(shí)的名字(區(qū)分大小寫)。

__set()當(dāng)程序試圖寫入一個(gè)不存在或者不可見的成員變量時(shí),__set()方法包含兩個(gè)參數(shù),分別表示變量名稱和變量值,兩個(gè)參數(shù)都不可省略

__get()當(dāng)程序試圖調(diào)用一個(gè)未定義或不可見的成員變量時(shí),__get()方法有一個(gè)參數(shù),表示要調(diào)用的變量名

__sleep() 常用于提交未提交的數(shù)據(jù),或類似的清理操作如果有一些很大的對(duì)象,但不需要全部保存,這個(gè)功能就很好用。

__construct() 在類實(shí)例化對(duì)象的同時(shí)執(zhí)行該函數(shù)

__distruct() 在類實(shí)例化的對(duì)象銷毀時(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)的類不存在,則該方法被調(diào)用。

57.接口和抽象類的區(qū)別是什么?

答:抽象類是一種不能被實(shí)例化的類,只能作為其他類的父類來使用。抽象類是通過關(guān)鍵字abstract來聲明的。
抽象類與普通類相似,都包含成員變量和成員方法,兩者的區(qū)別在于,抽象類中至少要包含一個(gè)抽象方法,抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式為:abstract function abstractMethod();

接口是通過 interface 關(guān)鍵字來聲明的,接口中的成員常量和方法都是 public 的,方法可以不寫關(guān)鍵字public,接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實(shí)現(xiàn)的。
抽象類和接口實(shí)現(xiàn)的功能十分相似,最大的不同是接口能實(shí)現(xiàn)多繼承。在應(yīng)用中選擇抽象類還是接口要看具體實(shí)現(xiàn)。
子類繼承抽象類使用 extends,子類實(shí)現(xiàn)接口使用implements。

58.什么是隊(duì)列?排它鎖,Myisam死鎖如何解決?

答:在默認(rèn)情況下MYisam是表級(jí)鎖,所以同時(shí)操作單張表的多個(gè)動(dòng)作只能以隊(duì)列的方式進(jìn)行;

排它鎖又名寫鎖,在SQL執(zhí)行過程中為排除其它請(qǐng)求而寫鎖,在執(zhí)行完畢后會(huì)自動(dòng)釋放;

死鎖解決:先找到死鎖的線程號(hào),然后殺掉線程ID

59.bootstrap框架有哪些優(yōu)點(diǎn)?

答:bootstrap是一款web開發(fā)框架,它由CSS,JavaScript,Html,三部分構(gòu)成,它簡(jiǎn)潔靈活,使得web開發(fā)更加的快捷

優(yōu)點(diǎn):
①節(jié)省時(shí)間: 使用bootstrap框架,可以大大的節(jié)省項(xiàng)目開發(fā)時(shí)間,它包含了很多現(xiàn)成的代碼,如果需要使用,只需要找到合適的代碼,插入合適的位置即可,此外,CSS是使用LESS編寫,很多樣式和設(shè)計(jì)都已經(jīng)設(shè)計(jì)完成了
②定制化: bootstrap可以根據(jù)自己的項(xiàng)目,留取框架中自己需要的部分
③設(shè)計(jì)合理:

柵格系統(tǒng): bootstrap定義12格柵系統(tǒng),在頁面已經(jīng)完成時(shí),你可以根據(jù)合適的網(wǎng)格,以自己的需求改變行數(shù)和布局大小,樣式已經(jīng)開發(fā)完成了,只需要把代碼放入合適的HTML代碼位置即可
LESS: LESS是基于CSS之上的高級(jí)語言,其目的是使得CSS開發(fā)更加靈活,更加強(qiáng)大
JavaScript:bootstrap提供JavaScript庫,該庫超越了基本的架構(gòu)和樣式,開發(fā)者可以輕松的操作窗口警告框,工具提示框等,可避免了我們費(fèi)神費(fèi)力的寫腳本
4.一致性: bootstrap可以保證界面在不同平臺(tái)的統(tǒng)一性,無論實(shí)在IE,Chrome等
5.持續(xù)更新: bootstrap在不斷的改進(jìn),更具規(guī)律性和持續(xù)性
6.響應(yīng)式: 無論是在PC端還是移動(dòng)端,都可以保持界面的一致性

7.文檔多: bootstrap的非常多

作者:snailwang04
來源:CSDN
原文:https://blog.csdn.net/u011330...
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30106.html

相關(guān)文章

  • 我的PHP面試

    摘要:因?yàn)楣灸壳皵U(kuò)招個(gè)人書寫的自己比較看重的個(gè)人技能點(diǎn),因?yàn)楸竟緲I(yè)務(wù)發(fā)展小說站,在線閱讀,而且并發(fā)量和數(shù)據(jù)量是比較大的,所以會(huì)提出一些并發(fā)的東西。和的原理,以及在分布式應(yīng)用中出現(xiàn)的問題和解決方案我們就做了分布式和的區(qū)別,各自的優(yōu)點(diǎn)和缺點(diǎn)。 因?yàn)楣灸壳皵U(kuò)招PHP,個(gè)人書寫的自己比較看重的個(gè)人技能點(diǎn),因?yàn)楸竟緲I(yè)務(wù)發(fā)展小說站,在線閱讀,而且并發(fā)量和數(shù)據(jù)量是比較大的,所以會(huì)提出一些并發(fā)的東西...

    renweihub 評(píng)論0 收藏0
  • 個(gè)人建議之PHP面試的準(zhǔn)備

    摘要:個(gè)人也建議不要滿足于自己當(dāng)下所知道的,多去拓展自己,多去學(xué)新的東西。作為一個(gè)面試者來說,知識(shí)點(diǎn)的記憶準(zhǔn)備為的是更好的應(yīng)對(duì)面試中技術(shù)面中問到的各種問題。 你好,是我琉憶——PHP程序員面試筆試系列圖書的作者。 隨著越來越多的人開始邁入PHP開發(fā)工程師的隊(duì)列,不管是一個(gè)PHP新手還是一個(gè)有一兩年開發(fā)經(jīng)驗(yàn)的PHPer都不得不去面對(duì)找工作前面試這件事。 我現(xiàn)在以個(gè)人對(duì)面試的經(jīng)歷和見解來全面的對(duì)...

    macg0406 評(píng)論0 收藏0
  • PHP面試之網(wǎng)絡(luò)協(xié)議面試

    摘要:之前的文章可以關(guān)注我的面試專欄獲取,或者關(guān)注我的公眾號(hào)琉憶編程庫查看歷史獲取。面試時(shí)如何給自己添金沒接觸過支付功能為此特意準(zhǔn)備了一篇新手零基礎(chǔ)對(duì)接境外支付的文章,為你面試添金,關(guān)注公眾號(hào)琉憶編程庫,回復(fù),我發(fā)給你。 你好,是我琉憶。本篇是本周(2019.2-25至3-1)的最后一篇文章。之前的文章可以關(guān)注我的PHP面試專欄獲取,或者關(guān)注我的公眾號(hào)琉憶編程庫查看歷史獲取。 我正在segm...

    Dogee 評(píng)論0 收藏0
  • 一個(gè) 16年畢業(yè)生所經(jīng)歷的 PHP 面試

    摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請(qǐng)加顆小星星,沒有收獲的話可以 反對(duì) 沒有幫助 舉報(bào)三連 有心的同學(xué)應(yīng)該會(huì)看到我這個(gè)noteBook下面的其它知識(shí),希望對(duì)你們有些許幫助。 本文地址 時(shí)間點(diǎn):2017-11 一個(gè)16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時(shí)候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...

    dabai 評(píng)論0 收藏0
  • 一道看似簡(jiǎn)單的面試

    摘要:二進(jìn)制本身就是為這個(gè)數(shù)字而使用的,所以說這道面試題直指二進(jìn)制的使用是沒錯(cuò)的。正負(fù)在二進(jìn)制中,第一位為的是負(fù)數(shù),是正數(shù)。 showImg(https://segmentfault.com/img/bVbd7d0?w=1580&h=732); 前言 使用PHP,給定一個(gè)數(shù),判斷這個(gè)數(shù)是否是二的N次方 這樣看似簡(jiǎn)單的一個(gè)面試題, 實(shí)際牽出了很多基礎(chǔ)知識(shí),本章在為大家補(bǔ)習(xí)基礎(chǔ)知識(shí)的情況下來解答...

    kid143 評(píng)論0 收藏0
  • PHP面試MySQL數(shù)據(jù)庫的面試

    摘要:自己整理了一篇什么是數(shù)據(jù)庫三級(jí)封鎖協(xié)議的文章,關(guān)注公眾號(hào)琉憶編程庫,回復(fù)鎖,我發(fā)給你。以下內(nèi)容部分來自程序員面試筆試寶典和程序員面試筆試真題解析如需轉(zhuǎn)載請(qǐng)注明出處。 你好,是我琉憶,PHP程序員面試筆試系列圖書的作者。 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面試MySQL數(shù)據(jù)庫的基礎(chǔ)知識(shí)周三:PHP面試MySQL數(shù)據(jù)庫的索引周五:PHP面試MySQL數(shù)...

    awokezhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<