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

下載本文檔

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

文檔簡介

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

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

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

1、nginx的工作原理

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

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

的一個指令,用于URL匹配),而在這個location中所配置的每個指令將會啟動不同的模塊

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

2、PHP-FPM

Master主進程/Worker多進程模式。

啟動Master,通過FastCGI協(xié)議監(jiān)聽來自Nginx傳輸?shù)目嗲蟆?/p>

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

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

只用于HTTPServer。

Swoole

Master主進程(由多個Reactor線程組成)/Worker多進程(或多線程)模式

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

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

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

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

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

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

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

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

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

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

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

主要:二進制日志

細節(jié)表達:

為什么有主從延遲:

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

Slave負(fù)載過高、

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

機器性能太低、

MySQL配置不合理

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

緩存

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

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

1.按照店鋪拆分

2.按照商品類型拆分

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

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

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

2.模糊查詢“%k”

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

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

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

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

6.laravel和tp的識別

1.Laravel在表單提交的時候會有csrf跨站苦求偽造驗證,Tp5那么沒有

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

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

7.http和https識別

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

http明文傳輸

8.接口安好如何處理

1.訪問

防刷

存儲ip地址

accessToken

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

一個傳輸過程中

httphttps

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

對稱加密

有一個秘鑰

非對稱加密

公鑰

私鑰

9.redis和memcache識別

1.數(shù)據(jù)類型

redis:字符串,hash,隊列,有序集合,集合memcache:字符串

2.存儲方式

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

3.內(nèi)存管理

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

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

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

緩存穿透

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

解決方案

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

緩存雪崩

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

解決方案

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

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

熱備開啟

12.http和websocket的識別

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

13、¥this與$self的識別

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

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

14、訂單合單怎么合單

我們在訂單處理工作中,假設(shè)一個交易單(父訂單)下的多個子訂單,客戶要求發(fā)往不同的地址,那么就要把這個“交易單”對應(yīng)生成多個“物流單”,這叫“訂單拆分”。

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

15、支付同步和異步

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

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

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

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

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

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

16、接口安好

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

17、消息隊列

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

18、http協(xié)議

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

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

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

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

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

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

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

釋放的SYNACK的報文段

20、短連接

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

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

21、苦求行:

方法:

GET獲取資源

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

PUT傳輸文件

HEAD獲取報文首部

DELETE刪除文件

OPTIONS詢問支持的方法

TRACE追蹤路徑

協(xié)議/版本號

URL

苦求頭:

通用首部(GeneralHeader)

苦求首部(RequestHeader)

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

實體首部(EntityHeaderFields)

響應(yīng)行

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

響應(yīng)頭

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

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

響應(yīng)體

22.laravel生命周期

1.加載public下index.php

2.通過composer加載bootstrap/app.php獲取laravel實例

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

4.加載kernel.php文件

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

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

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

23.laravel框架契約

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

契約作用::松耦合和簡樸。

簡樸

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

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

松耦合

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

24、分區(qū)類型

分區(qū)類型:

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

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

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

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

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

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

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

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

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

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

HASH分區(qū)

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

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

KEY分區(qū)

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

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

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

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

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

但是多進程程序更剛強,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉并不會對另外一個進程造成影響,由于進程有自己獨立的地址空間。

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

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

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

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

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

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

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

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

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

27.laravel容器

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

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

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

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

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

頁面的ob緩存,動靜分開

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

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

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

30、上線流程?

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

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

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

2.stopservice

3.deploywar自動部署

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

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

5.startservice

6.markup

31、php垃圾回收機制?

1.php引用計數(shù)根本學(xué)識點

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

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

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

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

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

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

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

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

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

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

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

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

6.涉及到垃圾回收的學(xué)識點

gc_enable():開啟GC

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

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

mysql默認(rèn)編碼?

拉丁編碼

32、什么是索引籠罩?

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

只掃描索引而無需回表的優(yōu)點:

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

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

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

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

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

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

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

laravel框架門面?

1.購物車商品價格變化?

購物車儲存一個商品id,商品其他屬性數(shù)據(jù)庫讀取

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

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

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

1.臟讀:

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

3.幻讀:

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

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

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

7.索引種類

35、解析PHP全過程

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論