php程序員面試題目和答案總結(jié)_第1頁(yè)
php程序員面試題目和答案總結(jié)_第2頁(yè)
php程序員面試題目和答案總結(jié)_第3頁(yè)
php程序員面試題目和答案總結(jié)_第4頁(yè)
php程序員面試題目和答案總結(jié)_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——php程序員面試題目和答案總結(jié)php程序員面試題目和答案總結(jié)

PHP是一種用來(lái)制作動(dòng)態(tài)網(wǎng)頁(yè)的服務(wù)器端腳本語(yǔ)言,你通過(guò)PHP和HTML創(chuàng)造頁(yè)面。今天我整理了php程序員面試題目和答案供大家參考,一起來(lái)看看吧!

php程序員面試題目和答案(精選篇1)

1、nginx的工作原理

Nginx由內(nèi)核和模塊組成,其中,內(nèi)核的設(shè)計(jì)分外微小和干脆,完成的工作也分外簡(jiǎn)樸,僅僅

通過(guò)查找配置文件將客戶端苦求映射到一個(gè)locationblock(location是Nginx配置中

的一個(gè)指令,用于URL匹配),而在這個(gè)location中所配置的每個(gè)指令將會(huì)啟動(dòng)不同的模塊

去完成相應(yīng)的工作。

2、PHP-FPM

Master主進(jìn)程/Worker多進(jìn)程模式。

啟動(dòng)Master,通過(guò)FastCGI協(xié)議監(jiān)聽(tīng)來(lái)自Nginx傳輸?shù)目嗲蟆?/p>

每個(gè)Worker進(jìn)程只對(duì)應(yīng)一個(gè)連接,用于執(zhí)行完整的PHP代碼。

PHP代碼執(zhí)行完畢,占用的內(nèi)存會(huì)全部銷(xiāo)毀,下一次苦求需要重新再舉行初始化等各種繁瑣的操作。

只用于HTTPServer。

Swoole

Master主進(jìn)程(由多個(gè)Reactor線程組成)/Worker多進(jìn)程(或多線程)模式

啟動(dòng)Master,初始化PHP代碼,由Reactor監(jiān)聽(tīng)Socket句柄的事情變化。

Reactor主線程負(fù)責(zé)子多線程的均衡問(wèn)題,Manager進(jìn)程管理Worker多進(jìn)程,包括TaskWorker的進(jìn)程。

每個(gè)Worker采納來(lái)自Reactor的苦求,只需要執(zhí)行回調(diào)函數(shù)片面的PHP代碼。

只在Master啟動(dòng)時(shí)執(zhí)行一遍PHP初始化代碼,Master進(jìn)入監(jiān)聽(tīng)狀態(tài),并不會(huì)終止進(jìn)程。

不僅可以用于HTTPServer,還可以建立TCP連接、WebSocket連接。

3、為什么PHP7比PHP5性能提升了?

(1)、變量存儲(chǔ)字節(jié)減小,裁減內(nèi)存占用,提升變量操作速度

(2)、改善數(shù)組布局,數(shù)組元素和hash映射表被調(diào)配在同一塊內(nèi)存里,降低了內(nèi)存占用、提升了cpu緩存命中率

(3)、提升了函數(shù)的調(diào)用機(jī)制,通過(guò)優(yōu)化參數(shù)傳遞的環(huán)節(jié),裁減了一些指令,提高執(zhí)行效率

3、mysql主從的同步原理是什么?

當(dāng)主數(shù)據(jù)服務(wù)器master舉行寫(xiě)入數(shù)據(jù)或者更新數(shù)據(jù)操作的時(shí)候,數(shù)據(jù)更改會(huì)記錄在二進(jìn)制日志(binarylogfile)中,主服務(wù)器master與從服務(wù)器slave舉行通訊的是I/O線程,它將修改的數(shù)據(jù)異步復(fù)制寫(xiě)入到slave服務(wù)器的中繼日志(relaylogfile)中,從服務(wù)器slave與中繼日志之間通信使用SQL線程,SQL線程可以異步從中繼日志中讀取數(shù)據(jù)后再寫(xiě)入到自己的數(shù)據(jù)庫(kù)中,就完成了數(shù)據(jù)的主從同步功能。

主要:二進(jìn)制日志

細(xì)節(jié)表達(dá):

為什么有主從延遲:

1.Master負(fù)載過(guò)高、

Slave負(fù)載過(guò)高、

2.網(wǎng)絡(luò)延遲、

機(jī)器性能太低、

MySQL配置不合理

3.怎么預(yù)防主從延遲:

緩存

4.訂單為什么要拆單?假設(shè)拆單依據(jù)是什么?

由于考慮一個(gè)用戶添置多個(gè)商品,多個(gè)商品屬于多個(gè)商家。多個(gè)商家要發(fā)貨,并且分錢(qián)。所以拆單

1.按照店鋪拆分

2.按照商品類(lèi)型拆分

假設(shè)拆單表設(shè)計(jì)如何設(shè)計(jì)?

5什么處境下使用不了索引

1.復(fù)合索引:不遵循最左原那么

2.模糊查詢“%k”

3.假設(shè)mysql認(rèn)為全表掃面要比使用索引快,那么不使用索引。

4.有規(guī)律運(yùn)算符////2+2

5.假設(shè)條件中有or,有條件沒(méi)有使用索引,即使其中有條件帶索引也不會(huì)使用,換言之,就是要求使用的全體字段,都務(wù)必單獨(dú)使用時(shí)能使用索引。

6.假設(shè)列類(lèi)型是字符串,那么確定要在條件中使用引號(hào)引用起來(lái),否那么不使用索引。

6.laravel和tp的識(shí)別

1.Laravel在表單提交的時(shí)候會(huì)有csrf跨站苦求偽造驗(yàn)證,Tp5那么沒(méi)有

2.Laravel在苦求需要先定義路由,Tp5可以不定義,有pathinfo路由即可訪問(wèn)

3.Laravel在苦求之前會(huì)有中間件,Tp5會(huì)有前置操作和鉤子

7.http和https識(shí)別

https數(shù)據(jù)加密===非對(duì)稱加密

http明文傳輸

8.接口安好如何處理

1.訪問(wèn)

防刷

存儲(chǔ)ip地址

accessToken

2.數(shù)據(jù)

一個(gè)傳輸過(guò)程中

httphttps

數(shù)據(jù)本身加密

對(duì)稱加密

有一個(gè)秘鑰

非對(duì)稱加密

公鑰

私鑰

9.redis和memcache識(shí)別

1.數(shù)據(jù)類(lèi)型

redis:字符串,hash,隊(duì)列,有序集合,集合memcache:字符串

2.存儲(chǔ)方式

memcache:內(nèi)存存儲(chǔ)不支持耐久化redis:支持耐久化

3.內(nèi)存管理

redis:直接納理空間memcache:將內(nèi)存空間切割成大小不同的空間,按照存儲(chǔ)數(shù)據(jù)的大小進(jìn)程存儲(chǔ)

10.如何理解雪崩,緩存穿透

緩存穿透:在緩存里面有數(shù)據(jù),但是查詢不到。所以讀取數(shù)據(jù)庫(kù)。

緩存穿透

緩存穿透是指查詢一個(gè)確定不存在的數(shù)據(jù),由于緩存是不命中時(shí)被動(dòng)寫(xiě)的,并且出于容錯(cuò)考慮,假設(shè)從存儲(chǔ)層查不到數(shù)據(jù)那么不寫(xiě)入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次苦求都要到存儲(chǔ)層去查詢,失去了緩存的意義。在流量大時(shí),可能DB就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應(yīng)用,這就是漏洞。

解決方案

有好多種方法可以有效地解決緩存穿透問(wèn)題,最常見(jiàn)的那么是采用布隆過(guò)濾器,將全體可能存在的數(shù)據(jù)哈希到一個(gè)足夠大的bitmap中,一個(gè)確定不存在的數(shù)據(jù)會(huì)被這個(gè)bitmap攔截掉,從而制止了對(duì)底層存儲(chǔ)系統(tǒng)的查詢壓力。另外也有一個(gè)更為簡(jiǎn)樸粗暴的方法(我們采用的就是這種),假設(shè)一個(gè)查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們依舊把這個(gè)空結(jié)果舉行緩存,但它的過(guò)期時(shí)間會(huì)很短,最長(zhǎng)不超過(guò)五分鐘。

緩存雪崩

緩存雪崩是指在我們?cè)O(shè)置緩存時(shí)采用了一致的過(guò)期時(shí)間,導(dǎo)致緩存在某一時(shí)刻同時(shí)失效,苦求全部轉(zhuǎn)發(fā)到DB,DB瞬時(shí)壓力過(guò)重雪崩。

解決方案

緩存失效時(shí)的雪崩效應(yīng)對(duì)底層系統(tǒng)的沖擊分外可怕。大多數(shù)系統(tǒng)設(shè)計(jì)者考慮用加鎖或者隊(duì)列的方式保證緩存的單線程(進(jìn)程)寫(xiě),從而制止失效時(shí)大量的并發(fā)苦求落畢竟層存儲(chǔ)系統(tǒng)上。這里共享一個(gè)簡(jiǎn)樸方案就時(shí)講緩存失效時(shí)間分散開(kāi),譬如我們可以在原有的失效時(shí)間根基上增加一個(gè)隨機(jī)值,譬如1-5分鐘隨機(jī),這樣每一個(gè)緩存的過(guò)期時(shí)間的重復(fù)率就會(huì)降低,就很難引發(fā)集體失效的事情。

11.反向代理主調(diào)度器掛掉如何處理

熱備開(kāi)啟

12.http和websocket的識(shí)別

WebSocket是HTML5中的協(xié)議,支持耐久連接;而Http協(xié)議不支持耐久連接

13、¥this與$self的識(shí)別

1.self可以訪問(wèn)本類(lèi)中的靜態(tài)屬性和靜態(tài)方法,可以訪問(wèn)父類(lèi)中的靜態(tài)屬性和靜態(tài)方法。用self時(shí),可以不用實(shí)例化的

1.this可以調(diào)用本類(lèi)中的方法和屬性,也可以調(diào)用父類(lèi)中的可以調(diào)的方法和屬性,可以說(shuō)除過(guò)靜態(tài)和const常量,根本上其他都可以使用this聯(lián)絡(luò)

14、訂單合單怎么合單

我們?cè)谟唵翁幚砉ぷ髦校僭O(shè)一個(gè)交易單(父訂單)下的多個(gè)子訂單,客戶要求發(fā)往不同的地址,那么就要把這個(gè)“交易單”對(duì)應(yīng)生成多個(gè)“物流單”,這叫“訂單拆分”。

假設(shè)客戶不是通過(guò)購(gòu)物車(chē),而是分兩次買(mǎi)下兩個(gè)商品,那么展現(xiàn)兩個(gè)“交易單”,且寄往同一個(gè)地址,我們對(duì)兩個(gè)交易單只需要產(chǎn)生一個(gè)“物流單”,這叫“訂單合并”。

15、支付同步和異步

同步是給客戶看的,異步是服務(wù)器處理苦求。

同步是客戶充值或者支付告成了,給客戶一個(gè)提示,報(bào)告客戶這個(gè)操作的結(jié)果是告成還是失敗。起到的作用就是提示客戶這個(gè)操作的結(jié)果是告成還是失敗。

異步是服務(wù)器在后端處理支付告成或失敗時(shí)的業(yè)務(wù)規(guī)律。同步通知:用于用戶在支付寶頁(yè)面付款完畢后自動(dòng)跳轉(zhuǎn);

異步通知:其實(shí)是處理業(yè)務(wù)規(guī)律,譬如說(shuō)修改客戶的支付狀態(tài);

同步得到通知后跳轉(zhuǎn)到自己的網(wǎng)址,然后根據(jù)參數(shù)報(bào)告客戶支付結(jié)果,然后在更新?tīng)顟B(tài)。

異步其實(shí)就是一個(gè)雙保險(xiǎn),假設(shè)同步?jīng)]有跳轉(zhuǎn)你的網(wǎng)址,可能是關(guān)機(jī)了,或者網(wǎng)速慢,無(wú)法完成數(shù)據(jù)更新的狀態(tài),這時(shí)候異步就發(fā)揮作用了,先判斷是否支付,支付了就不必更新了,只返回支付寶success就行了,不然會(huì)一向異步通知

16、接口安好

接口安好一般分三片面:調(diào)用方身份令牌token(防CSRF攻擊)、參數(shù)簽名sign(防篡改)、時(shí)效性timestamp(防Dos攻擊)

17、消息隊(duì)列

我們可以把消息隊(duì)列比作是一個(gè)存放消息的容器,當(dāng)我們需要使用消息的時(shí)候可以取出消息供自己使用。消息隊(duì)列是分布式系統(tǒng)中重要的組件,使用消息隊(duì)列主要是為了通過(guò)異步處理提高系統(tǒng)性能和削峰、降低系統(tǒng)耦合性。

18、http協(xié)議

HTTP協(xié)議是構(gòu)建在TCP/IP協(xié)議之上的,是TCP/IP協(xié)議的一個(gè)子集,所以要理解HTTP協(xié)議,有必要先了解下TCP/IP協(xié)議相關(guān)的學(xué)識(shí)

TCP/IP協(xié)議族是由一個(gè)四層協(xié)議組成的系統(tǒng),這四層分別為:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層

19、TCP協(xié)議三次握手的描述如下:

第一次握手:客戶端發(fā)送帶有SYN標(biāo)志的連接苦求報(bào)文段,然后進(jìn)入SYN_SEND狀態(tài),等待服務(wù)端確實(shí)認(rèn)。

其次次握手:服務(wù)端接收到客戶端的SYN報(bào)文段后,需要發(fā)送ACK信息對(duì)這個(gè)SYN報(bào)文段舉行確認(rèn)。同時(shí),還要發(fā)送自己的SYN苦求信息。服務(wù)端會(huì)將上述的信息放到一個(gè)報(bào)文段(SYN+ACK報(bào)文段)中,一并發(fā)送給客戶端,此時(shí)服務(wù)端將會(huì)進(jìn)入SYN_RECV狀態(tài)。

第三次握手:客戶端接收到服務(wù)端的SYN+ACK報(bào)文段后,會(huì)想服務(wù)端發(fā)送ACK確認(rèn)報(bào)文段,這個(gè)報(bào)文段發(fā)送完畢后,客戶端和服務(wù)端都進(jìn)入ESTABLISHED狀態(tài),完成TCP三次握手。

發(fā)送的都是SYN,驗(yàn)證ACK,再次回返

釋放的SYNACK的報(bào)文段

20、短連接

長(zhǎng)鏈接,指在一個(gè)連接上可以連續(xù)發(fā)送多個(gè)數(shù)據(jù)包,在連接保持期間,假設(shè)沒(méi)有數(shù)據(jù)包發(fā)送,需要雙方發(fā)鏈路檢測(cè)包。

管線化機(jī)制須通過(guò)永久連接(persistentconnection)完成,僅HTTP/1.1支持此技術(shù)(HTTP/1.0不支持),管線化不需要等待上一次苦求得到響應(yīng)就可以舉行下一次苦求。實(shí)現(xiàn)并行發(fā)送苦求。

21、苦求行:

方法:

GET獲取資源

POST向服務(wù)器端發(fā)送數(shù)據(jù),傳輸實(shí)體主體

PUT傳輸文件

HEAD獲取報(bào)文首部

DELETE刪除文件

OPTIONS詢問(wèn)支持的方法

TRACE追蹤路徑

協(xié)議/版本號(hào)

URL

苦求頭:

通用首部(GeneralHeader)

苦求首部(RequestHeader)

響應(yīng)首部(ResponseHeader)

實(shí)體首部(EntityHeaderFields)

響應(yīng)行

HTTP/1.1)說(shuō)明HTTP版本為1.1版本,狀態(tài)碼為200,狀態(tài)消息為(ok)

響應(yīng)頭

Date:生成響應(yīng)的日期和時(shí)間;

Content-Type:指定了MIME類(lèi)型的HTML(text/html),編碼類(lèi)型是ISO-8859-1

響應(yīng)體

22.laravel生命周期

1.加載public下index.php

2.通過(guò)composer加載bootstrap/app.php獲取laravel實(shí)例

3.創(chuàng)造一個(gè)服務(wù)容器

4.加載kernel.php文件

5.加載服務(wù)供給者

6.通過(guò)request分發(fā)苦求,經(jīng)過(guò)路由,中間件,找到操縱器的方法

7.處理苦求,返回結(jié)果

23.laravel框架契約

Laravel中的契約是指框架供給的一系列定義核心服務(wù)的接口

契約作用::松耦合和簡(jiǎn)樸。

簡(jiǎn)樸

當(dāng)全體Laravel服務(wù)都統(tǒng)一在簡(jiǎn)樸接口中定義,很輕易判斷給定服務(wù)供給的功能。契約可以充當(dāng)框架特性的簡(jiǎn)明文檔。

此外,基于簡(jiǎn)樸接口,代碼也更輕易理解和維護(hù)。在一個(gè)浩瀚而繁雜的類(lèi)中,與其追蹤哪些方法是有效的,不如轉(zhuǎn)向簡(jiǎn)樸、明凈的接口

松耦合

由于我們基于一個(gè)來(lái)自包的概括的緩存類(lèi),假設(shè)包的API變了,那么相應(yīng)的,我們的代碼務(wù)必做修改。

24、分區(qū)類(lèi)型

分區(qū)類(lèi)型:

range分區(qū):基于屬于一個(gè)給定連續(xù)區(qū)間的列值,把多行調(diào)配給分區(qū)

list分區(qū):類(lèi)似于按range分區(qū),識(shí)別在于List分區(qū)是基于列值匹配一個(gè)離散值集合中的某個(gè)值來(lái)舉行選擇

hash分區(qū):基于用戶定義的表達(dá)式的返回值來(lái)舉行選擇的分區(qū),該表達(dá)式使用將要插入到表中的這些行的列值舉行計(jì)算。這個(gè)函數(shù)可以包含MySql中有效的、產(chǎn)生非負(fù)整數(shù)值得表達(dá)式

key分區(qū):類(lèi)似于按HASH分區(qū),識(shí)別在于Key分區(qū)只支持計(jì)算一列或多列,且MySql服務(wù)器供給其自身的哈希函數(shù)。務(wù)必有一列或多列包含整數(shù)

RANGE分區(qū)(分區(qū)是按照依次定義的):

基于屬于一個(gè)給定連續(xù)區(qū)間的列值,把多行調(diào)配給分區(qū)

這些區(qū)間要連續(xù)且不能重疊,使用valueslessthan操作符來(lái)舉行定義

LIST分區(qū)(增刪變得輕易)

類(lèi)似于按RANGE分區(qū),識(shí)別在于List分區(qū)是基于列值匹配一個(gè)離散集合中的某個(gè)值來(lái)舉行選擇

List分區(qū)通過(guò)使用partitionbylist(expr)來(lái)實(shí)現(xiàn),其中expr是某列值、并返回一個(gè)整數(shù)值的表達(dá)式,然后通過(guò)valusin(value_list)的方式來(lái)定義每個(gè)分區(qū),其中value_list是一個(gè)通過(guò)逗號(hào)分隔的整數(shù)列表

HASH分區(qū)

基于用戶定義的表達(dá)式的返回值來(lái)舉行選擇的分區(qū),該表達(dá)式使用將要插入到表中的這些列值舉行計(jì)算。這個(gè)函數(shù)可以包含MySQL中有效的、產(chǎn)生非負(fù)整數(shù)值的任何表達(dá)式。

要使用HASH分區(qū)來(lái)分割一個(gè)表,要在CREATETABLE語(yǔ)句上添加一個(gè)“PARTITIONBYHASH(expr)”子句,其中“expr”是一個(gè)返回一個(gè)整數(shù)的表達(dá)式。它可以僅僅是字段類(lèi)型為MySQL整型的一列的名字。此外,你很可能需要在后面再添加一個(gè)“PARTITIONSnum”子句,其中num是一個(gè)非負(fù)的整數(shù),它表示表將要被分割成分區(qū)的數(shù)量

KEY分區(qū)

類(lèi)似于按HASH分區(qū),識(shí)別在于KEY分區(qū)只支持計(jì)算一列或多列,且MySQL服務(wù)器供給其自身的哈希函數(shù)。務(wù)必有一列或多列包含整數(shù)值

25、線程和進(jìn)程各自有什么識(shí)別和優(yōu)劣呢?

進(jìn)程是資源調(diào)配的最小單位,線程是程序執(zhí)行的最小單位。

進(jìn)程有自己的獨(dú)立地址空間,每啟動(dòng)一個(gè)進(jìn)程,系統(tǒng)就會(huì)為它調(diào)配地址空間,建立數(shù)據(jù)表來(lái)維護(hù)代碼段、堆棧段和數(shù)據(jù)段,這種操作分外昂貴。而線程是共享進(jìn)程中的數(shù)據(jù)的,使用一致的地址空間,因此CPU切換一個(gè)線程的花費(fèi)遠(yuǎn)比進(jìn)程要小好多,同時(shí)創(chuàng)造一個(gè)線程的開(kāi)銷(xiāo)也比進(jìn)程要小好多。

線程之間的通信更便當(dāng),同一進(jìn)程下的線程共享全局變量、靜態(tài)變量等數(shù)據(jù),而進(jìn)程之間的通信需要以通信的方式(IPC)舉行。不過(guò)如何處理好同步與互斥是編寫(xiě)多線程程序的難點(diǎn)。

但是多進(jìn)程程序更剛強(qiáng),多線程程序只要有一個(gè)線程死掉,整個(gè)進(jìn)程也死掉了,而一個(gè)進(jìn)程死掉并不會(huì)對(duì)另外一個(gè)進(jìn)程造成影響,由于進(jìn)程有自己獨(dú)立的地址空間。

26、接口調(diào)用這8種苦求方式:

1.GET:向特定資源發(fā)送苦求,查詢數(shù)據(jù)

2.POST:向指定的資源,提交數(shù)據(jù)舉行處理苦求,有可能創(chuàng)造或修改已有數(shù)據(jù)

3.HEAD:和Get苦求相一致,只不過(guò)不會(huì)返回響應(yīng)體,這一方法可以再不必傳輸整個(gè)響應(yīng)內(nèi)容的處境下,就可以獲取包含在響應(yīng)小消息頭中的元信息。(用于獲取報(bào)頭)

4.OPTIONS:返回服務(wù)器對(duì)特定資源所支持的http的苦求,可以用來(lái)向Web服務(wù)器發(fā)送苦求來(lái)測(cè)試服務(wù)器的功能性

5.PUT:向指定資源位置上傳最新的內(nèi)容

6.DELETE:苦求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源

7.TRACE:回顯服務(wù)器收到的苦求,主要用于測(cè)試或診斷

8.CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。

27.laravel容器

Laravel服務(wù)容器是一個(gè)用于管理類(lèi)憑借和執(zhí)行憑借注入的強(qiáng)大工具。憑借注入聽(tīng)上去很花哨,其實(shí)質(zhì)是通過(guò)構(gòu)造函數(shù)或者某些處境下通過(guò)set方法將類(lèi)憑借注入到類(lèi)中。

28.laravelORM和查詢構(gòu)建器關(guān)系?

所謂查詢構(gòu)建器,就是操作數(shù)據(jù)庫(kù)的方法攏在一起組成個(gè)一個(gè)類(lèi)!

在laravel的ORM中,一個(gè)類(lèi)對(duì)應(yīng)一張表,而一個(gè)模型可以當(dāng)做一個(gè)Illuminate\Database\Eloquent\Builder的構(gòu)建器使用

29.優(yōu)化一個(gè)網(wǎng)站

頁(yè)面的ob緩存,動(dòng)靜分開(kāi)

架構(gòu)上,反向代理,容災(zāi),熱備

緩存數(shù)據(jù)

數(shù)據(jù)庫(kù)的索引,主從

30、上線流程?

1.把應(yīng)用從負(fù)載均衡器上摘除(markdown)

留神:利用haproxy舉行markdown,通過(guò)管理頁(yè)面把服務(wù)標(biāo)記成下線的狀態(tài),但是要留神這個(gè)時(shí)候正在處理的苦求是還在處理的只是新的苦求進(jìn)不來(lái),這一步是分外重要的,涉及到服務(wù)的可用性問(wèn)題;并且markdown之后是不能馬上中斷服務(wù)的,一般要等10~20秒的時(shí)間給未處理完的苦求預(yù)留時(shí)間

還要留神假設(shè)你使用手動(dòng)markdown是很煩人的,假設(shè)機(jī)器有好多臺(tái)你還要一臺(tái)臺(tái)去markdown上線好之后還要去markup只要是人舉行的工作都是會(huì)有錯(cuò)誤產(chǎn)生的,所以可以使用基于內(nèi)容的狀態(tài)檢測(cè)頁(yè)面,,當(dāng)檢測(cè)到某字段或內(nèi)容時(shí)把服務(wù)markup,當(dāng)服務(wù)器數(shù)量較多時(shí)可使用自動(dòng)化運(yùn)維工具例如ansible也分外簡(jiǎn)樸

2.stopservice

3.deploywar自動(dòng)部署

4.changenewlink就是第三步中說(shuō)到的內(nèi)容

一般在工作中是用links軟鏈接,譬如這里有war2.1war2.2war2.3war2.4,我要上線的時(shí)候只需要改一下軟鏈接(這樣就不必去修改配置文件了)并且使用軟鏈接還有一個(gè)好處是當(dāng)你察覺(jué)新上線的包有問(wèn)題時(shí)可以快速回滾,當(dāng)然還有其它方法可以實(shí)現(xiàn),但是一般大公司譬如騰訊,百度,阿里都采用這種上線方式

5.startservice

6.markup

31、php垃圾回收機(jī)制?

1.php引用計(jì)數(shù)根本學(xué)識(shí)點(diǎn)

每個(gè)php變量存在一個(gè)叫zval的變量容器中。一個(gè)zval變量容器,除了包含變量的類(lèi)型和值,還包括兩個(gè)字節(jié)的額外信息。第一個(gè)是is_ref,是個(gè)bool值,用來(lái)標(biāo)識(shí)這個(gè)變量是否是屬于引用集合(referenceset)。通過(guò)這個(gè)字節(jié),php引擎才能把普遍變量和引用變量區(qū)分開(kāi)來(lái),由于php允許用戶通過(guò)使用來(lái)使用自定義引用,zval變量容器中還有一個(gè)內(nèi)部引用計(jì)數(shù)機(jī)制,來(lái)優(yōu)化內(nèi)存使用。其次個(gè)額外字節(jié)是refcount,用以表示指向這個(gè)zval變量容器的變量(也稱符號(hào)即symbol)個(gè)數(shù)。全體的符號(hào)存在一個(gè)符號(hào)表中,其中每個(gè)符號(hào)都有作用域(scope),那些主腳本(譬如:通過(guò)欣賞器苦求的的腳本)和每個(gè)函數(shù)或者方法也都有作用域

2.php的內(nèi)存管理機(jī)制

https://./myJuly/p/10002397.html:轉(zhuǎn)載

3.php中垃圾是如何定義的?

判斷是否為垃圾,主要看有沒(méi)有變量名指向變量容器zval,假設(shè)沒(méi)有那么認(rèn)為是垃圾,需要釋放

4.老版本php中如何產(chǎn)生內(nèi)存泄漏?

產(chǎn)生內(nèi)存泄漏主要真兇:環(huán)形引用。

5.5.3版本以后php是如何處理垃圾內(nèi)存的?

1.假設(shè)一個(gè)zval的refcount增加,那么此zval還在使用,不屬于垃圾

2.假設(shè)一個(gè)zval的refcount裁減到0,那么zval可以被釋放掉,不屬于垃圾

3.假設(shè)一個(gè)zval的refcount裁減之后大于0,那么此zval還不能被釋放,此zval可能成為一個(gè)垃圾

來(lái)個(gè)白話文版:就是對(duì)此zval中的每個(gè)元素舉行一次refcount減1操作,操作完成之后,假設(shè)zval的refcount=0,那么這個(gè)zval就是一個(gè)垃圾

6.涉及到垃圾回收的學(xué)識(shí)點(diǎn)

gc_enable():開(kāi)啟GC

gc_disable():關(guān)閉GC

gc_collect_cycles():在節(jié)點(diǎn)緩沖區(qū)未滿的處境下強(qiáng)制執(zhí)行垃圾分析算法

mysql默認(rèn)編碼?

拉丁編碼

32、什么是索引籠罩?

假設(shè)一個(gè)索引包含(或籠罩)全體需要查詢的字段的值,稱為‘籠罩索引’。即只需掃描索引而無(wú)須回表。

只掃描索引而無(wú)需回表的優(yōu)點(diǎn):

1.索引條目通常遠(yuǎn)小于數(shù)據(jù)行大小,只需要讀取索引,那么mysql會(huì)極大地裁減數(shù)據(jù)訪問(wèn)量。

2.由于索引是按照列值依次存儲(chǔ)的,所以對(duì)于IO密集的范圍查找會(huì)比隨機(jī)從磁盤(pán)讀取每一行數(shù)據(jù)的IO少好多。

3.一些存儲(chǔ)引擎如myisam在內(nèi)存中只緩存索引,數(shù)據(jù)那么憑借于操作系統(tǒng)來(lái)緩存,因此要訪問(wèn)數(shù)據(jù)需要一次系統(tǒng)調(diào)用

4.innodb的聚簇索引,籠罩索引對(duì)innodb表更加有用。(innodb的二級(jí)索引在葉子節(jié)點(diǎn)中保存了行的主鍵值,所以假設(shè)二級(jí)主鍵能夠籠罩查詢,那么可以制止對(duì)主鍵索引的二次查詢)

籠罩索引務(wù)必要存儲(chǔ)索引列的值,而哈希索引、空間索引和全文索引不存儲(chǔ)索引列的值,所以mysql只能用B-tree索引做籠罩索引。

索引的數(shù)據(jù)布局?

索引的數(shù)據(jù)布局:B-、B+、R-、散列

laravel框架門(mén)面?

1.購(gòu)物車(chē)商品價(jià)格變化?

購(gòu)物車(chē)儲(chǔ)存一個(gè)商品id,商品其他屬性數(shù)據(jù)庫(kù)讀取

監(jiān)聽(tīng)服務(wù)器端保存價(jià)格的數(shù)據(jù)庫(kù)。如何價(jià)格發(fā)生變化,在啟動(dòng)客戶端時(shí),對(duì)價(jià)格根據(jù)服務(wù)器的數(shù)據(jù)庫(kù)數(shù)據(jù)舉行刷新就可以了

33.事務(wù)的操作?

34.事務(wù)的隔離級(jí)別,幻讀,臟讀如何出來(lái)的.

1.臟讀:

臟讀就是指當(dāng)一個(gè)事務(wù)正在訪問(wèn)數(shù)據(jù),并且對(duì)數(shù)據(jù)舉行了修改,而這種修改還沒(méi)有提交到數(shù)據(jù)庫(kù)中,這時(shí),另外一個(gè)事務(wù)也訪問(wèn)這個(gè)數(shù)據(jù),然后使用了這個(gè)數(shù)據(jù)。

3.幻讀:

是指當(dāng)事務(wù)不是獨(dú)立執(zhí)行時(shí)發(fā)生的一種現(xiàn)象,例如第一個(gè)事務(wù)對(duì)一個(gè)表中的數(shù)據(jù)舉行了修改,這種修改涉及到表中的全部數(shù)據(jù)行。同時(shí),其次個(gè)事務(wù)也修改這個(gè)表中的數(shù)據(jù),這種修改是向表中插入一行新數(shù)據(jù)。那么,以后就會(huì)發(fā)生操作第一個(gè)事務(wù)的用戶察覺(jué)表中還有沒(méi)有修改的數(shù)據(jù)行,就好象

發(fā)生了幻覺(jué)一樣。

6.事務(wù)特性哪些

7.索引種類(lèi)

35、解析PHP全過(guò)程

用戶苦求-》PHP處理-》zend轉(zhuǎn)化成中間嗎(c編寫(xiě))-opcache-操作系統(tǒng)-》轉(zhuǎn)成匯編-計(jì)算器識(shí)別-》ob緩存-》nginx-》協(xié)議-》客戶端

php程序員面試題目和答案(精選篇2)

PHP常見(jiàn)的運(yùn)行模式有2種,分別是php-fpm和php-cli。當(dāng)PHP選擇運(yùn)行在php-fpm模式下,全體的變量都是頁(yè)面級(jí)的,無(wú)論是全局變量還是類(lèi)的靜態(tài)成員,都會(huì)在頁(yè)面執(zhí)行完畢后被清空。運(yùn)行在php-cli模式下可以實(shí)現(xiàn)程序常駐內(nèi)存,各種變量和數(shù)據(jù)庫(kù)連接都能長(zhǎng)久保存在內(nèi)存實(shí)現(xiàn)資源復(fù)用,性能可以得到很大的提升,php-cli雖然開(kāi)發(fā)對(duì)比繁雜,但是能夠獲取更高的性能,對(duì)開(kāi)發(fā)者的要求對(duì)比高需要對(duì)比高的開(kāi)發(fā)水平,對(duì)比常用的模式是結(jié)合swoole組件編寫(xiě)cli框架,各種變量能保存在跨進(jìn)程的高性能共享內(nèi)存Table,可以開(kāi)發(fā)出支持熱啟動(dòng)的php-cli穩(wěn)當(dāng)各類(lèi)應(yīng)用系統(tǒng)。

php-fpm在PHP5.3.3版本成為了官方正式組件(2022-07-22),它供給了穩(wěn)定穩(wěn)當(dāng)?shù)倪M(jìn)程管理服務(wù),進(jìn)程缺乏時(shí)候可以智能擴(kuò)展數(shù)量,閑置時(shí)候可以自動(dòng)回收銷(xiāo)毀多余的進(jìn)程,同時(shí)它對(duì)程序的容錯(cuò)才能很強(qiáng)大運(yùn)行分外穩(wěn)定,可以應(yīng)付企業(yè)級(jí)的開(kāi)發(fā)需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互聯(lián)網(wǎng)協(xié)議下舉行的用戶的輸入輸出,頁(yè)面級(jí)生命周期各種資源用完即釋放,不存在內(nèi)存泄漏的問(wèn)題。php-fpm也供給有一些常駐內(nèi)存的技術(shù)支持,例如PHP7.4引入的opcache.preload也能實(shí)現(xiàn)局部的PHP類(lèi)和函數(shù)的常駐內(nèi)存,不過(guò)這個(gè)方法不夠生動(dòng),和服務(wù)器配置捆綁的太死了。

php-cli由于能實(shí)現(xiàn)各類(lèi)資源的常駐內(nèi)存,所以可以資源復(fù)用,更高效完成多進(jìn)程編程和異步編程,可以開(kāi)發(fā)出負(fù)載才能更高的應(yīng)用系統(tǒng)。但是相對(duì)php-fpm的簡(jiǎn)樸編程開(kāi)發(fā),開(kāi)發(fā)者要留神好多的事項(xiàng)和需要做好多附加的操縱器開(kāi)發(fā),否那么就無(wú)法實(shí)現(xiàn)期望中的高性能。

首先開(kāi)發(fā)者需要去實(shí)現(xiàn)穩(wěn)當(dāng)?shù)倪M(jìn)程管理服務(wù),保證系統(tǒng)進(jìn)程遇到各類(lèi)錯(cuò)誤退出運(yùn)行后能夠自動(dòng)創(chuàng)造新的進(jìn)程,只有這樣才能保證后續(xù)的服務(wù)苦求有足夠空閑進(jìn)程可調(diào)配。每個(gè)業(yè)務(wù)代碼段都要做奇怪處理,讓進(jìn)程遇到非致命錯(cuò)誤時(shí)候不會(huì)退出,由于進(jìn)程重啟意味程序和各類(lèi)資源需要再次加載,這個(gè)過(guò)程性能消耗不小,所以只有進(jìn)程穩(wěn)定運(yùn)行了常駐內(nèi)存才有意義。

其次由于常駐內(nèi)存,編寫(xiě)的新的程序務(wù)必重啟服務(wù)才能生效,這一點(diǎn)習(xí)慣了fpm模式的開(kāi)發(fā)者會(huì)感到對(duì)比目生。另外開(kāi)發(fā)者需要手工釋放內(nèi)存,否那么系統(tǒng)長(zhǎng)時(shí)間運(yùn)行后會(huì)展現(xiàn)內(nèi)存泄露。同時(shí)在cli模式下,我們不能像fpm里直接用$_SERVER、$_POST、$_GET、$_COOKI和$_FILES舉行編程工作,需要自己去解析各種

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論