一、單選題(共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.以下代碼執行結果是?

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

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。