應屆生最新PHP面試題(2)
- 用php獲取當前時間並列印,列印格式:2018-5-10 09:21:21
//注意這裡的5不是05
//區別m和n,d和j
echo date('Y-n-d H:i:s');
- 如何把字串’08/26/2018’替換成’2018-08-26’
$date = '08/26/2018';
$partern = '/(\d+)\/(\d+)\/(\d+)/';
echo preg_replace($partern,'$3-$1-$2',$date);
- 簡述一下表的索引
索引,降低掃描行數,提高表的查詢速度,最為重要的優化手段
主要分主鍵索引 唯一索引 普通索引
- 無限分類的實現原理
無限分類,一個表存放有關係的多級分類,之間有層級關係
實現通過表中的pid欄位,然後遞迴,把查詢到的有關係的資料放到一個數組中
有時候加多一個path欄位,表示頂級分類到當前分類的分類地圖,用作url路徑
- 儘可能高效的,從匹配標準url裡取出檔案的副檔名
$arr = parse_url($url);
$arr1 = pathinfo($arr['[path]']);
echo $arr1['extension'];
- 描述大流量高併發網站的解決方案
- 如何設計或者配置mysql,使其高效使用
mysql伺服器主從複製
表分割槽
表引擎,資料量小盡量選擇myisam
索引優化
- 如何防sql注入
表單儘量用post提交
使用http_referer檢查來源
使用addslashes對特殊字元進行轉義
使用htmlspecialchars進行實體轉換
- 如何寫一個安全的使用者登入系統
表單post提交
限制錯誤登入次數
使用驗證碼,防止機器破解(google的,簡訊類的這些更安全)
同時做前端和後端的表單認證
10.session與cookie的區別,從協議和產生的原因與作用說明
http協議是無狀態,無連線的,不能區分使用者是否是從同一個網站過來的
而且網站需要儲存登入態和一些使用記錄
所有用到會話機制session和cookie
session依賴於cookie.
session是儲存在伺服器中的,cookie是在伺服器產生,儲存在客戶端中的,所以cookie會有延遲
考慮到安全方面,使用session,考慮到減輕伺服器效能的,使用cookie.
- 表單中 get與post提交方法的區別?
get請求傳送資料是通過url引數傳遞的,會明文顯示,瀏覽器限制了get請求傳送資料的大小是2KB
post請求傳送的資料放在request body中,資料大小預設是無限制的
post比get安全,get比post效率高
get可以被快取,保留歷史記錄,收藏為書籤 post不行
更深入的說:
get傳送一個tcp資料包,post傳送兩個tcp資料包
get.post都是tpc連結,由於http協議的規定和瀏覽器/伺服器的限制,導致他們在應用過程中體現出一些不同.
- 語句include和require的區別是什麼?
include和require在如何處理失敗上是不同的:
include在引入不存在的檔案時會產生一個警告,指令碼繼續執行
require卻會導致一個致命的錯誤,終止指令碼執行
require在php預處理階段就執行了,而include是在執行到include語句的時候才引入
require是不受條件語句影響的
- 請說明php中傳值與傳引用的區別。
本質就是zval結構體中的recount_gc和is_ref_gc的影響
傳值:函式內對值的改變都不會影響函式外部的
傳引用:函式內外的變數的值一起被影響
14.echo(),print(),print_r()的區別?
echo語言結構,無返回值,可以一次輸出多個值
print語言結構,有返回值true或者false,只能輸出一個值
print_r 遞迴列印,可以輸出資料和物件,當第二個引數是ture是直接返回不輸出
語言結構:php語法組成部分的函式
echo print list array eval
- mvc優勢
耦合性低
重用性高
可維護性高
有利於軟體工程化