版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于夫妻雙方離婚協(xié)議書(shū)
- 土地租賃合同雙方協(xié)議書(shū)七篇
- 2025無(wú)財(cái)產(chǎn)離婚協(xié)議書(shū)
- 面神經(jīng)炎病因介紹
- 錯(cuò)構(gòu)瘤病因介紹
- 蕁麻疹病因介紹
- 11化學(xué)中考真題匯編《氧氣的性質(zhì)》及答案
- (2024)乳制品加工項(xiàng)目可行性研究報(bào)告寫(xiě)作范本(一)
- 2024-2025學(xué)年人教版八年級(jí)英語(yǔ)上學(xué)期期末真題 專題01 單項(xiàng)選擇(安徽專用)
- 2023年耐磨劑項(xiàng)目融資計(jì)劃書(shū)
- 機(jī)場(chǎng)物流園弱電系統(tǒng)前端設(shè)備維保外包項(xiàng)目維護(hù)方案
- 竣工驗(yàn)收程序流程圖
- 資產(chǎn)處置拆除施工現(xiàn)場(chǎng)消防、安全保障協(xié)議書(shū)
- Q∕GDW 10799.6-2018 國(guó)家電網(wǎng)有限公司電力安全工作規(guī)程 第6部分:光伏電站部分
- 口腔科診斷證明書(shū)模板
- 商業(yè)銀行授權(quán)管理辦法
- 蘇州小吃學(xué)習(xí)教案
- 婦科5個(gè)病種臨床路徑
- 精華網(wǎng)校高東輝一二三講講義
- 2021年全國(guó)中等職業(yè)學(xué)校學(xué)生服裝設(shè)計(jì)與工藝技能大賽理論題庫(kù)
- 五方單位評(píng)估報(bào)告
評(píng)論
0/150
提交評(píng)論