初中級PHP面試題型二(附答案)

面試題型二
1、優化資料庫的方法
選取最適用的欄位屬性,儘可能減少定義欄位寬度,儘量把欄位設定NOTNULL
使用連線(JOIN)來代替子查詢
適用聯合(UNION)來代替手動建立的臨時表
事務處理
鎖定表、優化事務處理
使用外來鍵,優化鎖定表
使用索引
優化查詢語句
2、語句include和require的區別是什麼?語句include和require的區別是什麼?
require是無條件包含,也就是如果一個流程里加入require,無論條件成立與否都會先執行require,當檔案不存在或者無法開啟的時候,會提示錯誤,並且會終止程式執行
include有返回值,而require沒有(可能因為如此require的速度比include快),如果被包含的檔案不存在的化,那麼會提示一個錯誤,但是程式會繼續執行下去
3、redis和memcacahe、mongoDB的區別?
都是非關係型資料庫,效能都非常高,但是mongoDB和memcache、redis是不同的兩種型別。後兩者主要用於資料的快取,前者主要用在查詢和儲存大資料方面,是最接近資料庫的文件型的非關係資料庫。
從資料儲存位置上來分,memcache的資料存在記憶體中,而redis既可以儲存在記憶體中,也可以儲存的到磁碟中,達到持久化儲存的功能,memcache一旦斷電,資料全部丟失,redis可以利用快照和AOF把資料存到磁碟中,當恢復時又從磁碟中讀取到記憶體中,當實體記憶體使用完畢後,可以把資料寫入到磁碟中。
從儲存資料的型別上來分,memcache和redis儲存的方式都是鍵值對,只不過redis值的型別比較豐富,有string(字串),hash(雜湊),list(列表),set(集合)zset(有序集合),而memcache主要儲存的是字串。
4、PHP的基本變數型別
四種標量型別:boolean (布林型)、integer (整型)、float (浮點型, 也稱作 double)、string (字串)
兩種複合型別:array (陣列)、object (物件)
最後是兩種特殊型別:resource(資源)、NULL(NULL)
5、靜態化如何實現的?偽靜態如何實現?
1、 靜態化指的是頁面靜態化,也即生成實實在在的靜態檔案,也即不需要查詢資料庫就可以直接從檔案中獲取資料,指的是真靜態。
實現方式主要有兩種:
一種是我們在新增資訊入庫的時候就生成的靜態檔案,也稱為模板替換技術。
一種是使用者在訪問我們的頁面時先判斷是否有對應的快取檔案存在,如果存在就讀快取,不存在就讀資料庫,同時生成快取檔案。
2、偽靜態不是真正意義上的靜態化,之所以使用偽靜態,主要是為了SEO推廣,搜尋引擎對動態的檔案獲取難度大,不利於網站的推廣。實習原理是基於Apache或Nginx的rewrite機智
主要有兩種方式:
一種是直接在配置虛擬機器的位置配置偽靜態,這個每次修改完成後需要重啟web伺服器。
另一種採用分散式的,可以在網站的根目錄上建立.htaccess的檔案,在裡面配置相應的重寫規則來實現偽靜態,這種每次重寫時不需要重啟web伺服器,且結構上比較清晰。
6、Mysql的讀寫分離?(進階的會遇到)
讀寫分離的實現原理就是在執行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉向到讀伺服器上(從伺服器,一般是多臺),寫的操作轉到寫的伺服器上(主伺服器,一般是一臺,視資料量來看)。當然為了保證多臺資料庫資料的一致性,需要主從複製。
7、如何處理負載,高併發?
1、HTML靜態化
效率最高、消耗最小的就是純靜態化的html頁面,所以我們儘可能使我們的 網站上的頁面採用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。
2、圖片伺服器分離
把圖片單獨儲存,儘量減少圖片等大流量的開銷,可以放在一些相關的平臺上,如七牛等
3、資料庫叢集和庫表雜湊及快取
資料庫的併發連線為100,一臺資料庫遠遠不夠,可以從讀寫分離、主從複製,資料庫叢集方面來著手。另外儘量減少資料庫的訪問,可以使用快取資料庫如memcache、redis。
4、映象:
儘量減少下載,可以把不同的請求分發到多個映象端。
5、負載均衡:
Apache的最大併發連線為1500,只能增加伺服器,可以從硬體上著手,如F5伺服器。當然硬體的成本比較高,我們往往從軟體方面著手。
8、說一下單引號雙引號?(基礎考點)
單引號內部的變數不會執行, 雙引號會執行
單引號解析速度比雙引號快。
單引號只能解析部分特殊字元,雙引號可以解析所有特殊字元。
9、PHP7的新特性?重點
標量型別宣告:PHP 7 中的函式的形參型別宣告可以是標量了。在 PHP 5 中只能是類名、介面、array 或者 callable (PHP 5.4,即可以是函式,包括匿名函式),現在也可以使用 string、int、float和 bool 了。
返回值型別宣告:增加了對返回型別宣告的支援。 類似於引數型別宣告,返回型別宣告指明瞭函式返回值的型別。可用的型別與引數宣告中可用的型別相同。
NULL 合併運算子:由於日常使用中存在大量同時使用三元表示式和 isset()的情況,NULL 合併運算子使得變數存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個運算元。
use 加強:從同一 namespace 匯入的類、函式和常量現在可以通過單個 use 語句 一次性匯入了
匿名類:現在支援通過new class 來例項化一個匿名類
10、PHP 陣列排序
sort() - 以升序對陣列排序
rsort() - 以降序對陣列排序
asort() - 根據值,以升序對關聯陣列進行排序
ksort() - 根據鍵,以升序對關聯陣列進行排序
arsort() - 根據值,以降序對關聯陣列進行排序
krsort() - 根據鍵,以降序對關聯陣列進行排序