PHP面試題2019年百度工程師面試題及答案解析


一、單選題(共10題,每題5分)

1.以下代碼輸出的結果是?

​​​

A、[0,1,2,3]

B、[1,3,5,7,5]

C、[1,2,3,4,5]

D、[0,1,2,3,5]

參考答案:D

答案解析:

考的是數組+和array_merge的區別 當下標為數值時,array_merge()不會覆蓋掉原來的值,但array+array合並數組則會把最先出現的值作為最終結果返回,而把后面的數組擁有相同鍵名的那些值“拋棄”掉(不是覆蓋). 當下標為字符時,array+array仍然把最先出現的值作為最終結果返回,而把后面的數組擁有相同鍵名的那些值“拋棄”掉,但array_merge()此時會覆蓋掉前面相同鍵名的值.

 

2.以下代碼執行結果是?

A、0

B、1

C、2

D、3

參考答案:B

答案解析:

如果你回答 2 ,恭喜,你掉入陷阱了。 其實這道題主要考兩點,第一點是static靜態類型。這種的值永遠都是靜態的,第一次調用聲明等於0,並且自增等於1。第二次調用,1再自增就等於2。但其實這里還有一道陷阱,那就是++a與a++的區別,前++是先自增,后++是先返回值再自增,所以結果等於 1。

 

3.以下PHP代碼執行的結果是?


A、[1,2,3]

B、[1,2,2]

C、[1,1,2]

D、[1,3,2]

參考答案:B

答案解析:

在 PHP 中,foreach 結束后,循環中的索引值(index)及內容(value)並不會被重置。 所以最后的 $v還指向最后一個元素,再次循環,就會把最后個元素的值修改掉了。

解決的辦法是,循環完畢之后,用unset($v); https://www.php.net/manual/en/control-structures.foreach.php

 

4.php執行過程的順序正確的是?

A、掃描->解析->編譯->執行->輸出

B、掃描->解析->執行->編譯->輸出

C、掃描->編譯->解析->執行->輸出

D、掃描->執行->編譯->解析->輸出

參考答案:A

答案解析:

PHP簡化執行過程: 1.掃描(scanning) ,將index.php內容變成一個個語言片段(token) 2.解析(parsing) , 將一個個語言片段變成有意義的表達式 3.編譯(complication),將表達式編譯成中間碼(opcode) 4.執行(execution),將中間碼一條一條的執行 5.輸出(output buffer),將要輸出的內容輸出到緩沖區

 

5.php垃圾回收機制的說法錯誤的是?

A、在一個垃圾周期中,通過檢查引用計數是否減1,並且檢查哪些變量容器的引用次數是零,來發現哪部分是垃圾

B、可以通過調用gc_enable() 和 gc_disable()函數來打開和關閉垃圾回收機制

C、通過清理未被使用的變量來節省內存的占用

D、php代碼執行完畢后會自動執行垃圾回收,所以不需要手動執行垃圾回收

參考答案:D

答案解析:

php一段代碼有可能要長時間執行,但若此期間有未引用的變量的話,就會占用內存的空間,導致運行緩慢等問題

 

6.關於XSS防御,錯誤的是?

A、禁止字符

B、限制字符(reg_match)

C、過濾(preg_replace)

D、轉義標簽(htmlspecialchars)

參考答案:A

答案解析:

轉義標簽(htmlspecialchars) 限制字符(reg\_match) 過濾(preg\_replace) http only 模板引擎

 

7.有一個文件ip.txt,每行一條ip記錄,共若干行,下面哪個命令可以實現“統計出現次數最多的前3個ip及其次數”?( )

A、uniq -c ip.txt

B、sort -nr ip.txt | uniq -c | sort -nr | head -n 3

C、cat ip.txt | count -n | sort -rn | head -n 3

D、cat ip.txt | count -n

參考答案:B

答案解析:

本題利用管道符"|"組合多個命令,uniq -c filename用於去除冗余並統計每一行出現的次數。 sort -r指逆序排序,-n指按數字字符串大小排序 head指定數量。 剩下的二選一交給運氣。

正確的命令應該為: sort -nr ip.txt | uniq -c | sort -nr | head -n 3 第一次排序,把ip按順序排列,因為第二個uniq只會合並相鄰項 第二次排序,才是把ip按出現次序大小從大到小排列 最后取前三項結果。

 

8.Mysql索引使用的B-Tree描述錯誤的是?

A、每個非葉子結點由n-1個key和n個指針組成,其中d<=n<=2d;

B、每個葉子結點至少包含一個key和兩個指針

C、所有葉結點都在同一層,深度等於樹高h.

D、一個結點中的key從左至右遞減排列

參考答案:D

答案解析:

B-Tree是滿足條件: d>=2,即B-Tree的度; h為B-Tree的高; 每個非葉子結點由n-1個key和n個指針組成,其中d


9.下列哪個是創建一個每周三01:00~04:00每3分鍾執行執行一次的crontab指令?

A、* 1,4 * * 3 /bin/bash /home/sijiaomao/ok.sh

B、*/3 1,4 * * 3 /bin/bash /home/sijiaomao/ok.sh

C、*/3 1-4 * * 3 /bin/bash /home/sijiaomao/ok.sh

D、*/3 1-4 * * * /bin/bash /home/sijiaomao/ok.sh

參考答案:C

答案解析:

A:每周三的1時4時每分鍾執行一次 B:每周三的1時4時每3分鍾執行一次 C:滿足要求 D:每天的1時4時每3分鍾執行一次

 

10.正則的引擎表述錯誤的是?

A、正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。

B、一般而論,NFA引擎則搜索更快一些。但是DFA以表達式為主導,更容易操縱,因此一般程序員更偏愛DFA引擎!

C、NFA表達式主導,DFA文本主導.

D、可以使用是否支持忽略優先量詞和分組捕獲來判斷引擎類型:支持 NFA,不支持 DFA

 

很多人在剛接觸這個行業的時候或者是在遇到瓶頸期的時候,總會遇到一些問題,比如學了一段時間感覺沒有方向感,不知道該從那里入手去學習,對此我整理了一些資料,需要的可以免費分享給大家(11年架構師帶你解讀年薪50萬面試通關秘籍。)

如果喜歡我的文章,想與一群資深開發者一起交流學習的話,獲取更多相關大廠面試咨詢和指導,歡迎加入我的學習交流群點擊此處PHP高級交流

 

 

二、多選題(共10題,每題5分)

1.HTTP中GET與POST的區別有哪些?

A、GET在瀏覽器回退時是無害的,而POST會再次提交請求

B、GET請求只能進行url編碼,而POST支持多種編碼方式

C、GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。

D、GET產生一個TCP數據包,POST產生兩個TCP數據包。

 

2.MySQL有一個復合索引:INDEX(`a`, `b`, `c`),以下查詢能用上索引的有?

A、select * from users where a = 1 and b = 2

B、select * from users where b = 2 and a = 1

C、select * from users where a = 2 and c = 1

D、select * from users where b = 2 and c = 1

3.為什么大型網站要使用消息隊列?

A、解耦

B、異步

C、削峰

D、大數據處理

4.關於Memcache與Redis的說法正確的有?

A、Memcache單個key(變量)存放的數據有2M的限制, Redis單個key(變量)存放的數據有1GB的限制

B、Memcache存儲數據的類型都是String類型,Redis數據類型比較豐富:String、List、Set、Sortedset、Hash

C、Memcache可以使用多核(多線程),而Redis只是支持單線程

D、Memcache服務器突然斷電,則全部數據就會丟失; 而Redis有持久化功能,可以把數據隨時存儲在磁盤上

 

5關於緩存雪崩的事前事中事后的解決方案正確的有?

A、事前:進行系統壓力測試,在負載均衡層做限流處理,過載丟棄請求或者進入隊列

B、事前:redis 高可用,主從+哨兵,redis cluster,避免全盤崩潰。

C、事中:本地 ehcache 緩存 + hystrix 限流&降級,避免 MySQL 被打死。

D、事后:redis 持久化,一旦重啟,自動從磁盤上加載數據,快速恢復緩存數據。

 

6.設計一個高並發系統,需要重點考慮的問題有?

A、系統拆分

B、緩存

C、MQ

D、分庫分表

E、讀寫分離

F、ElasticSearch

 

7.關於PHP-FPM子進程數量說法正確的有?

A、PHP-FPM 子進程數量不能太多,太多了增加進程管理的開銷以及上下文切換的開銷

B、dynamic 方式下,最合適的子進程數量為 在 N + 20% 和 M / m 之間 (N 是 CPU 內核數量,M 是 PHP 能利用的內存數量,m 是每個 PHP 進程平均使用的內存數量)

C、static方式:M / (m * 1.2) (M 是 PHP 能利用的內存數量,m 是每個 PHP 進程平均使用的內存數量)

D、pm.max_requests 可以隨便設置 ,但是為了預防內存泄漏的風險,還是設置一個合理的數比較好

 

8.關於Kafka、ActiveMQ、RabbitMQ、RocketMQ說法正確的有?

A、ActiveMQ 基於 erlang 開發,並發能力很強,性能極好,延時很低

B、RocketMQ topic 可以達到幾百/幾千的級別,吞吐量會有較小幅度的下降,在同等機器下,可以支撐大量的 topic

C、RabbitMQ時效性是微秒級,這是 RabbitMQ 的一大特點,延遲最低

D、Kafka 單機吞吐量 10 萬級,高吞吐,一般配合大數據類的系統來進行實時數據計算、日志采集等場景

 

9.分庫分表之后,id 主鍵如何處理?

A、單庫生成自增 id

B、設置數據庫 sequence 或者表自增字段步長

C、UUID

D、snowflake 算法

 

10.Redis 內存淘汰機制有哪些?

A、noeviction: 當內存不足以容納新寫入數據時,新寫入操作會報錯

B、allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的 key

C、volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的 key

D、allkeys-random:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個 key。

 

 

​ 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM