2021稍微有點水平的PHP基礎面試題

MC811-MM118發表於2021-05-24

1、通過哪一個函式,可以把錯誤轉換為異常處理?
A:set_error_handler
B:error_reporting
C:error2exception
D:catch

正確答案:*A *
答案分析:set_error_handler() 可指定一個回撥函式,錯誤發生時,會自動通過指定的回撥函式處理。在回撥函式中丟擲新的異常即可。

2、下列哪個shell函式的描述是正確的?
A:shell函式可以先呼叫後定義
B:shell函式需使用關鍵字function定義
C:shell函式內的變數可以宣告為區域性變數
D:shell函式只能通過return返回值,1是成功,0是失敗

正確答案:C
答案分析:shell函式必須先定義在呼叫;宣告時,無需使用關鍵字;通過local可以定義函式內的區域性變數;shell函式返回值,0是成功,非0是錯誤,其他選項正確

3、下列關於全文檢索技術的說法,不對的是:
A: Solr是新一代的全文檢索元件,它比Lucene的搜尋效率高很多,還能支援HTTP的訪問方式,PHP呼叫Solr也很方便。
B: MySQL中把一個欄位建立FULLTEXT索引,就可以實現全文檢索,目前MyISAM和InnoDB的table都支援FULLTEXT索引。
C: Sphinx是一個基於SQL的全文檢索引擎,可以結合MySQL做全文搜尋,它可以提供比資料庫本身更專業的搜尋功能。
D: Lucene附帶的二元分詞分析器CJKAnalyzer切詞速度很快,能滿足一般的全文檢索需要。

正確答案:*A *
答案分析: Solr是新一代的全文檢索元件,它基於Lucene,所以說它比Lucene快就是胡扯 :)

4、關於單例模式的說法,錯誤的是?
A:單例模式的目的是確保在全域性環境中,一個類只能有一個例項存在
B:單利模式一般要講建構函式設定為 private
C:只需要將建構函式設定為private 即可確保全域性中只有一個例項
D:連線資料庫的功能通常用單例模式實現

正確答案:*C *
答案分析:建構函式設定為private,僅能確保無法通過 new 建立新例項,但仍可以通過 clone、反序列化等方式建立多個例項。

5、正則的引擎表述錯誤的是?
A 正則引擎主要可以分為兩大類:一種是DFA,一種是NFA。
B 一般而論,NFA引擎則搜尋更快一些。但是DFA以表示式為主導,更容易操縱,因此一般程式設計師更偏愛DFA引擎!
C NFA表示式主導,DFA文字主導.
D 可以使用是否支援忽略優先量詞和分組捕獲來判斷引擎型別:支援 NFA,不支援 DFA

正確答案:B
答案分析:正確的說法應該是:一般而論,DFA引擎則搜尋更快一些。但是NFA以表示式為主導,更容易操縱,因此一般程式設計師更偏愛NFA引擎!

6、方框中的正規表示式能與以下哪些選項匹配?
/.Sd/
A. 123
B. **
1234
C. 1234
D.123

正確答案:B
答案分析:本題的要點是理解這個正規表示式的含義——從左往右,首先是零個或多個任意字元(.),跟著是一個星號(),然後是 123,最後是一個數字。因此答案是B。

7、如下關於資料庫的說法,哪個是錯誤的?
A:為了效率資料庫可以有多個讀庫
B:資料庫可以用主從做熱備
C:資料庫不能提供多主多從架構
D: 資料庫主從是通過日誌同步的

正確答案:C
答案分析: 資料庫可以提供多主多從架構。

8、下面哪個不是XSS漏洞的修復方式?
A:對引數進行htmlspecialchas過濾
B:對引數使用白名單過濾
C:不允許輸入的內容顯示到瀏覽器
D:禁止在js標籤內輸出使用者輸入的內容

正確答案:*A *
答案分析:這類過濾可以解決尖括號型別的xss,無法解決js標籤內的xss

9、下列哪一項不是PHP SAPI模式?
A.ISAPI
B.CGI
C.FastCGI
D.RESTFUL APi

正確答案:D
答案分析:A~C是最常用的模式,D是一種介面的組織方式。

10、對一個大檔案進行逐行遍歷,如下方法效能較高的是?
A:寫一個實現了IteratorAggregate 介面的類,通過該類使用foreach遍歷。
B:使用file_get_contents 將檔案內容一次性載入記憶體,然後逐行遍歷。
C:通過exec函式,呼叫shell 工具遍歷
D:使用別人寫的類庫

正確答案:A
答案分析:使用 IteratorAggregate 可將檔案開啟後通過移動指標的方式逐行遍歷,不受檔案大小影響。使用 file_get_contents 處理大檔案很容易導致PHP記憶體溢位;呼叫exec 會產生額外的程式,影響效能;其他人寫的類庫質量不一定高。

11、如下選項,哪個不是設計模式應該遵循的原則?
A:組合優於繼承
B:針對介面程式設計
C:儘可能降低耦合
D:儘量使用高效能的語法

正確答案:D
答案分析:設計模式的關注點在於程式碼的可維護性和可複用性,D選項不是設計模式關注的要點。

12、下列關於回溯的表示式錯誤的是?
A ab.lmn 匹配 abcdeflmnghijklmn 中的 abcdeflmnghijklmn
B ab.?lmn 匹配 abcdeflmnghijklmn 中的 abcdeflmn
C ab??c 匹配 abcdeflmnghijklmn 中的 abc
D .*lmn 匹配 abcdeflmnghijklmn 中的 abcdeflmn

正確答案:D
答案分析:D是貪婪匹配,所以應該匹配到的結果是abcdeflmnghijklmn

13、函式中如果使用了try catch finally 語法結構,return 應該寫在哪兒?
A:finally 中
B:try 中
C:catch 中
D:任意位置

正確答案:A
答案分析:try 中 return 後 finally 會繼續執行,如果 finally 中也有return,則最終返回值為 finally 中 return 的值。

14、以下關於NOSQL的說法,不對的是:
A: Redis支援字串、雜湊、列表、集合、有序集合等資料結構,目前Redis不支援事務。
B: MongoDB支援CAP定理中的AP,MySQL支援CAP中的CA,全部都支援不可能存在。
C: MongoDB不用先建立Collection的結構就可以直接插入資料,目前MongoDB不支援事務。
D: Memcache既支援TCP協議,也支援UDP協議,我們可以把PHP的Session存放到Memcache中。

正確答案:A
答案分析:Redis支援事務。

15、Innodb 鎖機制說法錯誤的是?
A:Innodb提供了表鎖與行鎖兩種鎖機制
B:Innodb的表鎖所會在表變更的時候觸發
C:Innodb下update時會自動給涉及到的行加上排他鎖,並建立出一個映象副本, 此時進行select 時查詢的是映象副本的資料
D:Innodb行鎖狀態下讀不受影響,寫會受影響(涉及到的資料)

正確答案:A

16、下列哪個是建立一個每週三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分鐘執行一次

17、在拆分之前,系統中很多列表和詳情頁所需的資料是可以通過sql join來完成的。而拆分後,資料庫可能是分散式在不同例項和不同的主機上,join將變得非常麻煩。下面哪種方法不能有效解決這個問題?
A 全域性表,系統中所有模組都可能會依賴到的一些表在各個庫中都儲存。
B 欄位冗餘,“訂單表”中儲存“賣家Id”的同時,將賣家的“Name”欄位也冗餘,這樣查詢訂單詳情的時候就不需要再去查詢“賣家使用者表”。
C 主從複製,將資料庫的讀寫分離。
D 資料同步,定時A庫中的tbl_a表和B庫中tbl_b關聯,可以定時將指定的表做主從同步。

正確答案:C
答案分析:主從複製,將資料庫的讀寫分離。只能擴容讀併發,並不能緩解跨庫join的問題。

18、關於網路IO模型,下列哪一項是正確的?
A.Select比Epoll更快
B.nginx使用的是select模型
C.apache支援select和epoll兩種方式的切換
D.epoll能支援更大的併發

正確答案:D
答案分析:A epoll更快一些。B nginx使用epoll模型。C apache只支援select

19、PHP執行的時候有如下執行過程:Scanning(Lexing) - Compilation - Execution - Parsing,其含義分別為:
A:將PHP程式碼轉換為語言片段(Tokens)、將Tokens轉換成簡單而有意義的表示式、將表示式編譯成Opocdes、順次執行Opcodes
B:將PHP程式碼轉換為語言片段(Tokens)、將Tokens轉換成簡單而有意義的表示式、順次執行Opcodes、將表示式編譯成Opocdes
C:將PHP程式碼轉換為語言片段(Tokens)、將表示式編譯成Opocdes、順次執行Opcodes、將Tokens轉換成簡單而有意義的表示式
D:將PHP程式碼轉換為語言片段(Tokens)、將表示式編譯成Opocdes、將Tokens轉換成簡單而有意義的表示式、順次執行Opcodes

正確答案:C
答案分析:正確答案為C,正確的順序為:Scanning(Lexing)、Parsing、Compilation、Execution

本作品採用《CC 協議》,轉載必須註明作者和本文連結
如果覺得我寫的不錯,記得和我交流,其實我也有很多不懂,嘻嘻!

相關文章