【精講】2022年P(guān)HP中高級面試題
1.進程,線程及通信方式
https://www.php.cn/php-ask-453612.html?
進程和線程有點主從關(guān)系一樣的,線程共享進程的資源
進程間通信方式:
1.?管道?
2.?信號?
3.?消息隊列?Posix?消息隊列
4.?共享內(nèi)存?
5.?套接口2.Php 查看擴展路徑
php?-i?|?grep?-i?extension_dir?
或者?phpinfo?來看一下?
或者?echo?ini_get('extension_dir');
3. Php 底層數(shù)組實現(xiàn)方式
linked list + hashtable 雙向鏈表是中間映射表,用來存放索引和具體存儲位置,然后
具體存儲位置對應的具體值在 hashtable 中
4.寫時復制:
如果兩個變量是相同的值,則共享同一塊內(nèi)存,而那塊內(nèi)存的 is_ref =1 refcount = 1
后者被引用一次 +1,為 0 的時候被銷毀,相當于資源延遲分配。
垃圾回收:
不會立即回收,會放入緩沖區(qū)(一個雙向鏈表),然后默認到了 10000 個開始回收,先
將 refcount -1 , =0 則進行回收
5.解決內(nèi)存溢出:
? ? ?1、要增加PHP可用內(nèi)存大小
?????2、對數(shù)組進行分批處理,將用過的變量及時銷毀;
????3、盡可能減少靜態(tài)變量的使用;
??? 4、數(shù)據(jù)庫操作完成后,要馬上關(guān)閉連接。
????5、可以使用 memory_get_usage () 函數(shù),獲取當前占用內(nèi)存 根據(jù)當前使用的內(nèi)存來
調(diào)整程序
引申:
unset () 函數(shù)只能在變量值占用內(nèi)存空間超過 256 字節(jié)時才會釋放內(nèi)存空間
有當指向該變量的所有變量(如引用變量)都被銷毀后,才會釋放內(nèi)存
unset 被引用的變量只會解除引用關(guān)系,不會銷毀該變量
6.Php7 新特性
https://www.php.net/manual/zh/migration70.new-features.php?
簡要總結(jié)就是:
標量類型聲明、返回值類型聲明、通過 define() 定義常量數(shù)組、匿名類、相同命名空間 類一次性導入
7.Php7 底層優(yōu)化:
ZVAL 結(jié)構(gòu)體優(yōu)化,占用由24字節(jié)降低為16字節(jié)
內(nèi)部類型 zend_string,結(jié)構(gòu)體成員變量采用 char 數(shù)組,不是用 char*
PHP 數(shù)組實現(xiàn)由 hashtable 變?yōu)?zend array
函數(shù)調(diào)用機制,改進函數(shù)調(diào)用機制,通過優(yōu)化參數(shù)傳遞環(huán)節(jié),減少了一些指令
8.Php 排序二維數(shù)組 array_multisort + array_column 就行
??$user_list?=?[
????['name'?=>?'張三',?'age'?=>?28],
????['name'?=>?'趙六',?'age'?=>?21],
????['name'?=>?'王五',?'age'?=>?20],
????['name'?=>?'李四',?'age'?=>?21]
?];
?array_multisort(array_column($user_list,?'age'),SORT_ASC,$user_list);
?var_dump($user_list);
9.緩存的應用場景:
數(shù)據(jù)不需要強一致性
讀多寫少,并且讀取得數(shù)據(jù)重復性較高
10.Php 異步執(zhí)行腳本:
popen 調(diào)用腳本,缺點是無法跨越,不能傳參,會產(chǎn)生進程,高并發(fā)了會創(chuàng)建大量 進程
curl 方式,最小響應超時時間是 1s,也受限
fsockopen 打開一個網(wǎng)絡(luò)連接或者 unix 套接字連接,原理和 http 一致,支持毫秒 級超時處理
引入 swoole? ?https://www.php.cn/php-weizijiaocheng-469392.html
11.常見狀態(tài)碼
? ??一二三四五原則:(即一:消息系列;二:成功系列; 三:重定向系列;四:請求錯誤系
列;五:服務器端錯誤系列。
301 狀態(tài)碼是永久移動
302 是臨時移動
304 如果請求頭中帶有 If-None-Match 或 If-Modified-Since,則會到源服務器進行有效性校驗,如果源服務器資源沒有變化,則會返回304,同時不返回內(nèi)容;如果有變 化,則返回200;
500 代碼 文件權(quán)限 資源有問題
501 請求方法服務器不支持
502 網(wǎng)關(guān)錯誤,例如得到了一個無效響應一類的就會出現(xiàn)這種錯誤
503 超載或者維護模式
504 網(wǎng)關(guān)超時,即在指定時間內(nèi)沒有正確的響應
499 客戶端關(guān)閉請求,例如客戶端請求 1s 內(nèi)結(jié)束,php 未返回結(jié)果,或者找不到要請
求的地址,會返回 499 錯誤
往期推薦
