1. Get與post兩種方式?
ans:
GET->通常用於查詢,參數可見不安全,且傳值支持的大小不能超過2kb,效率高。
post-> 通常用於修改保存數據,參數不可見比較安全。javascript
2. AJAX的優點是什麼?
ans:ajax是異步傳輸技術,能夠經過javascript實現,也能夠經過JQuery框架實現,實現局部刷新,減輕了服務器的壓力,也提升了用戶體驗。php
3.path相關:html
pathinfo:解析文件(文件名及擴展)java
path_url:解析URL(文件名及路由及參數)mysql
4.left join 與 right joinnginx
left join: 先找出左表全部匹配的數據,右邊不匹配的爲null程序員
5.如何無限分類ajax
id,parentid,path(相對路徑)正則表達式
6. 安全對一套程序來講相當重要,請說說在開發中應該注意哪些安全機制?
ans:①防遠程提交;②防SQL注入,對特殊代碼進行過濾;③防止註冊機灌水,使用驗證碼;sql
7. 如何防sql注入?
ans:
SQL注入攻擊是黑客對數據庫進行攻擊的經常使用手段之一。一部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷,注入者能夠在表單中輸入一段數據庫查詢代碼並提交,程序將提交的信息拼湊生成一個完整sql語句,服務器被欺騙而執行該條惡意的SQL命令。注入者根據程序返回的結果,成功獲取一些敏感數據,甚至控制整個服務器,這就是SQL注入。
主要兩階段防止:1.用戶輸入時候的數據校驗 2.查詢數據庫時候的轉義。3.儘可能不要用mysql_error來拋出錯誤(錯誤信息進行封裝)
(1)查詢條件儘可能使用數組方式,這是更爲安全的方式(post提交);
(2)若是不得已必須使用字符串查詢條件,使用預處理機制?;
(3)開啓數據字段類型驗證,能夠對數值數據類型作強制轉換;(3.1版本開始已經強制進行字段類型驗證了)(safe_mode = on 在php ini 中設置)
(4)使用自動驗證和自動完成機制進行鍼對應用的自定義過濾;(magic_quotes_gpc = on) 對sql 查詢進行轉換
(5)使用字段類型檢查、自動驗證和自動完成機制等避免惡意數據的輸入。
(6)addslashes(特使字符轉義) 防止sql注入。
用戶輸入校驗:
/*
過濾用戶代碼
*/
function security($str){
$str = trim($str); //清理空格
$str = strip_tags($str); //過濾html標籤
$str = htmlspecialchars($str); //將字符內容轉化爲html實體
$str = addslashes($str);
return $str;
}
8. XSS 與 CSRF?
XSS:跨站腳本(cross—site script)發生在客戶端,修復方式和防止sql注入相似
ans:注入腳本的一種,例如提交評論中參雜javascript腳本,若是服務器沒有進行過濾或轉移這些腳本
CSRF:跨站請求僞造(Cross_site_request_forgery) 發生在服務端(僞形成合法用戶請求)(緩存中的session_id)
CSFR攻擊就是相似複製用戶的session_id來冒充合法用戶
9.php正則函數
php正則匹配掉js代碼';
$preg = "/<script[\s\S]*?<\/script>/i";
$newstr = preg_replace($preg,"",$str,3); //第四個參數中的3表示替換3次,默認是-1,替換所有
$newstr = preg_match($resg,$str,$newstr);
echo $newstr;
10. SESSION與COOKIE的區別?
ans:
①存儲位置:session存儲於服務器,cookie存儲於瀏覽器
②安全性:session安全性比cookie高
③session爲‘會話服務’,在使用時須要開啓服務,cookie不須要開啓,能夠直接用
11. PHP處理數組的經常使用函數
ans:
①array()建立數組;
②count()返回數組中元素的數目;
③array_push()將一個或多個元素插入數組的末尾(入棧);
④array_column()返回輸入數組中某個單一列的值;
⑤array_combine()經過合併兩個數組來建立一個新數組;
⑥array_reverse()以相反的順序返回數組;
⑦array_unique()刪除數組中的重複值;
⑧in_array()檢查數組中是否存在指定的值
12. PHP處理字符串的經常使用函數?
ans:
①trim()移除字符串兩側的空白字符和其餘字符;
②substr_replace()把字符串的一部分替換爲另外一個字符串;
③substr_count()計算子串在字符串中出現的次數;④substr()返回字符串的一部分;
⑤strtolower()把字符串轉換爲小寫字母;
⑥strtoupper()把字符串轉換爲大寫字母;
⑦strtr()轉換字符串中特定的字符;
⑧strrchr()查找字符串在另外一個字符串中最後一次出現;
⑨strstr()查找字符串在另外一字符串中的第一次出現(對大小寫敏感);
strrev()反轉字符串;
strlen()返回字符串的長度;
str_replace()替換字符串中的一些字符(對大小寫敏感);
print()輸出一個或多個字符串;
explode()把字符串打散爲數組;
is_string()檢測變量是不是字符串;
strip_tags()從一個字符串中去除HTML標籤;
mb_substr()用來截中文與英文的函數
strpos 查找字符串所在位置
13. 經常使用的魔術方法有哪些?
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字符串的時候會調用。好比 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone複製一個對象時候調用。
14. serialize與unserialize的認識?
ans:
serialize:將內存數據轉化爲字符串,寫入硬盤 __sleep
unserialize:將字符串轉爲內存數據如php變量 __wakeup
15. include 與 require 的區別?
include:根據流程引入,且不存在流程也能正常進行。 有返回值
requeire:無論放在哪都是最早引入該文件,若是不存在則會報錯。 無返回值
include_once :只引入一次,若是引入過則不在引入。
requeire_once :只引入一次,若是引入過則不在引入。
16. 什麼是composer能夠解決自動加載類?
ans:
Composer 是 PHP 的一個依賴管理工具,"快速安裝類庫"。工做原理就是將已開發好的擴展包從 packagist.org composer倉庫下載到咱們的應用程序中,並聲明依賴關係和版本控制。
composer命令:
composer list 列出全部可用的命令
composer init 初始化composer.json文件(就不勞咱們本身費力建立啦),會要求輸入一些信息來描述咱們當前的項目,還會要求輸入依賴包
composer install 讀取composer.json內容,解析依賴關係,安裝依賴包到vendor目錄下
composer update 更新最新的依賴關係到compsoer.lock文件,解析最新的依賴關係而且寫入composer.lock文件
composer search packagename 搜索包,packagename替換爲你想查找的包名稱
composer require packagename 添加對packagename的依賴,packagename可修改成你想要的包名稱
composer show packagename
composer self-update 更新 composer.phar文件自身
composer dump-autoload --optimize 優化一下自動加載
17. PHP7 和 PHP5 的區別,具體多了哪些新特性?
ans:
性能提高了兩倍(
由於:變量存儲字節減少,減小內存佔用,提高變量操做速度
改善數組結構,數組元素和 hash 映射表被分配在同一塊內存裏,下降了內存佔用、提高了 cpu 緩存命中率
改進了函數的調用機制,經過優化參數傳遞的環節,減小了一些指令,提升執行效率)
結合比較運算符 (<=>)
標量類型聲明
返回類型聲明
try...catch 增長多條件判斷,更多 Error 錯誤能夠進行異常處理
匿名類,如今支持經過new class 來實例化一個匿名類,這能夠用來替代一些「用後即焚」的完整類定義
18. PHP 的設計模式?
1. 單例模式(重點):
ans:實例化出來的對象是惟一的。
why: 當存在大量數據庫操做時,能夠避免大量new對象,減小數據庫鏈接
implement: 私有化實例,私有化構造方法,私有化克隆方法,公有化靜態獲取實例的方法(getinstant)
2. 工廠模式(重點)
ans:創建一個工廠來根據所需建立對象(解決緊耦合:改一個類就要改不少其餘調用的地方)。
工廠模式分爲:簡單工廠模式,工廠方法模式,抽象工廠模式
3. 觀察者模式(重點)
4. 依賴注入(重點)
19. 依賴注入實現原理?
ans:實現低耦合高擴展。
依賴注入DI:應用程序依賴容器建立並注入到所需的外部資源
控制反轉IOC:容器控制應用程序,由容器反向的嚮應用程序注入應用程序所須要的外部資源
依賴注入就是組件經過構造器,方法或者屬性字段來獲取相應的依賴對象。
爲何用依賴注入:解決高耦合。
注入的途徑:construct注入,set注入
20. 請用正則表達式(Regular Expression)寫一個函數驗證電子郵件的格式是否正確。
if(isset($_POST['action']) && $_POST['action']==’submitted’){
$email=$_POST['email'];
if(!preg_match(「/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+(\.[0-9a-zA-Z-]+){1,3}$/」,$email)){
echo「電子郵件檢測失敗」;
}else{
echo「電子郵件檢測成功」;
}
}
21. sql注入之預處理(pdo)?
22. 防止盜鏈?
1.服務器防止: apach 或 nginx 作rewrite(重定向) 基於源來作判斷防止盜鏈(防止別的網站請求咱們網站的資源)
2.代碼防止: $_SERVER[‘HTTP_REFERER’] 判斷是否來自咱們網站的請求(經過判斷域名和ip)
因此通常來講,只有經過 <a></a> 超連接以及 POST 或 GET 表單訪問的頁面,$_SERVER['HTTP_REFERER'] 纔有效。
23 echo true =>1
echo false => 空
echo 默認打印十進制 echo012 => 18
print 非函數
eval():將字符串表達式執行
$str = '$a = 1+1;' 注意要加上封號
echo eval($str);
24. 跨域問題?
常見跨域方式:
1.JSONP(只支持get)
2.空iframe加form
3.CORS:CORS是一個W3C標準,全稱是"跨域資源共享"(Cross-origin resource sharing)跨域資源共享 CORS 詳解。看名字就知道這是處理跨域問題的標準作法。CORS有兩種請求,簡單請求和非簡單請求。
例子:
header('Access-Control-Allow-Origin: http://*.baidu.com'); //設置http://*.baidu.com容許跨域訪問
4.Nginx代理設置