1 Get 和 POST 的區別php
表單提交中get和post方式的區別有5點laravel
get是從服務器上獲取數據,post是向服務器傳送數據。程序員
get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中能夠看到。post是經過HTTPpost機制,將表單內各個字段與其內容放置在HTML HEADER內一塊兒傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。web
對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。sql
get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,通常被默認爲不受限制。但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。shell
get安全性很是低,post安全性較高。數據庫
HTTP請求:get與post方法的區別設計模式
HTTP 定義了與服務器交互的不一樣方法,最基本的方法是 get 和 post。事實上 get 適用於多數請求,而保留 post僅用於更新站點。數組
根據 HTTP 規範,get 用於信息獲取,並且應該是安全的和冪等的。所謂安全的意味着該操做用於獲取信息而非修改信息。瀏覽器
換句話說,get 請求通常不該產生反作用。冪等的意味着對同一 URL的多個請求應該返回一樣的結果。完整的定義並不像看起來那樣嚴格。
從根本上講,其目標是當用戶打開一個連接時,她能夠確信從自身的角度來看沒有改變資源。好比,新聞站點的頭版不斷更新。雖然第二次請求會返回不一樣的一批新聞,該操做仍然被認爲是安全的和冪等的,由於它老是返回當前的新聞。
反之亦然。post請求就不那麼輕鬆了。post 表示可能改變服務器上的資源的請求。仍然以新聞站點爲例,讀者對文章的註解應該經過 post請求實現,由於在註解提交以後站點已經不一樣了(比方說文章下面出現一條註解);
在FORM提交的時候,若是不指定Method,則默認爲get請求,Form中提交的數據將會附加在url以後,以?分開與url分開。
字母數字字符原樣發送,但空格轉換爲「+「號,其它符號轉換爲%XX,其中XX爲該符號以16進製表示的ASCII(或ISOLatin-1)值。
get請求請提交的數據放置在HTTP請求協議頭中,而post提交的數據則放在實體數據中;
2 單引號和雙引號的區別
在PHP中,字符串的定義可使用單引號,也可使用雙引號。可是必須使用同一種單或雙引號來定義字符串,如:‘Hello"和「Hello'爲非法的字符串定義。
定義字符串時,只有一種引號被視爲定義符,即單引號或雙引號。因而,若是一個字符串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你就能夠在雙引號串中包含任何其餘字符,甚至單引號。
3 isset 和 empty 的區別
empty方法:
變量不存在,返回true
變量存在,值爲空,返回true
變量存在,值不爲空,返回false
isset方法:
變量存在,返回true
變量不存在,返回false
4 echo、print_r、print、var_dump 之間的區別
echo()函數:輸出一個或多個字符串。實際上它並非一個函數,因此沒必要對它使用括號,直接用echo就行。然而,若是您但願向echo()傳遞一個以上的參數,使用括號將會生成解析錯誤。echo()函數比print()速度稍快一點。echo輸出多個字符串時,用逗號隔開。
print()函數:輸出一個或多個字符串。同echo同樣,實際上它並非一個函數。print有返回值,而echo沒有,當其執行失敗時返回false,成功則返回true,速度比echo稍慢。只能打印出簡單類型變量的值,如:int、string。
print_r()函數:能打印出複雜類型變量的值。利用print_r()能夠打印出整個數組內容及結構,按照必定格式顯示鍵和元素,事實上,它不只僅用於打印,而是用於打印關於變量的易於理解的信息。
var_dump()函數:判斷一個變量的類型與長度,並輸出變量的數值,若是變量有值,輸出的是變量的值,並返回數據類型。此函數顯示關於一個或多個表達式的結構信息,包括表達式的類型和值。數組將遞歸展開值,經過縮進顯示其結構。
5 什麼是 MVC?
1)什麼是MVC?
簡單的說就是將網站源碼分類、分層。
2)MVC三個字母的含義:
M:Model 模型,負責數據庫操做。
V:View 視圖,負責調用Model調取數據,再調用模板,展現出最終效果。
C:Controller 控制器,程序的入口,決定改調用哪一個View,並告訴View該作什麼。
如此說來,程序的執行順序是C-V-M 或 C-M ,和MVC的名字正好相反。
3)爲何要MVC?
1.能使網站程序物理結構更合理。
當用PHP建設一個網站的時候,最笨的方法,你可能把每一個頁面建成一個PHP文件。若是你的網站只有 index.php,menu.php.article.php 三個頁面,那你能夠不用MVC,但咱們作通常的網站的時候,動輒幾十個頁面,把全部頁面放在根目錄顯然不是咱們所能接受的,因而你須要一個合理的思想去將你的代碼分類,按功能把他們分紅不一樣的目錄,且由程序智能的載入調用,這就是MVC要幫助你作的。
2.使代碼更容易維護。
咱們再來看單個頁面,最笨的方法,就是PHP代碼與HTML代碼混合,這顯然不夠好,你在維護網站的時候不得不區分哪裏是PHP,哪裏是HTML, 這對於一個程序員來講,簡直只災難。因而不少人就使用Smarty,這樣就能夠將「數據處理」與「頁面展現」分開來,這樣作的確不錯,也有不少人正在這麼 作,但這還不是MVC,MVC要作的就是將「數據處理」再分爲「邏輯處理」與「數據庫操做」,這就是所說的分層。
這樣當你的程序錯誤或想要修改的時候,就變得很輕鬆了,當頁面顯示錯誤的時候,你就去檢查V或模板文件;當邏輯有問題的時候,你就去檢查C和V;當你數據庫操做錯誤就去檢查M。
其實MVC通常要把PHP的一個頁面分割爲4個頁面,分別是C,V,M,模板。各司其職,方便管理。
3.有利於代碼複用。
MVC會把通常會把一個大的功能放在一個目錄下,也就是由一個C去管理。
6 傳值和傳引用的區別?
php傳值:在函數範圍內,改變變量值的大小,都不會影響到函數外邊的變量值。
PHP傳引用:在函數範圍內,對值的任何改變,在函數外部也有所體現,由於傳引用傳的是內存地址。
傳值:和copy是同樣的。打個比方,我有一橦房子,我給你建築材料,你建了一個根個人房子如出一轍的房子,你在你的房子作什麼事都不會影響到我,我在個人房子裏作什麼事也不會影響到你,彼此獨立。
傳引用:相似於C語言的指針了,感受差很少。打個比方,我有一橦房子,我給你一把鑰匙,咱們二個均可以進入這個房子,你在房子作什麼都會影響到我。
優缺點:傳值會很耗時間,特別是對於大型的字符串和對象來講,這將會是一個代價很大的操做,傳送引用,函數內的任何操做等同於對傳送變量的操做,傳送大型變量時效率高!
7 Cookie 和 Session 的區別和關係
Cookie 在客戶端(瀏覽器),Session 在服務器端。
Session 比 Cookie 安全性更高。
單個 Cookie 保存的數據不能超過 4K。
Session 是基於 Cookie,若是瀏覽器禁用了 Cookie,Session 也會失效(可是能夠經過其它方式實現,好比在 url 中傳遞 Session ID)。
1 簡述 S.O.L.I.D 設計原則
2 列舉一些 PHP 中的設計模式?
單例模式:保證在整個應用程序的生命週期中,任何一個時刻,單例類的實例都只存在一個,同時這個類還必須提供一個訪問該類的全局訪問點。
工廠模式:定義一個建立對象的接口,可是讓子類去實例化具體類。工廠方法模式讓類的實例化延遲到子類中。
觀察者模式:觀察者模式有時也被稱做發佈/訂閱模式,該模式用於爲對象實現發佈/訂閱功能:一旦主體對象狀態發生改變,與之關聯的觀察者對象會收到通知,並進行相應操做。
適配器模式:適配器模式將一個類的接口轉換成客戶但願的另一個接口,使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠在一塊兒工做。
依賴注入模式:依賴注入(Dependency Injection)是控制反轉(Inversion of Control)的一種實現方式。要實現控制反轉,一般的解決方案是將建立被調用者實例的工做交由 IoC 容器來完成,而後在調用者中注入被調用者(經過構造器/方法注入實現),這樣咱們就實現了調用者與被調用者的解耦,該過程被稱爲依賴注入。
門面模式:門面模式(Facade)又稱外觀模式,用於爲子系統中的一組接口提供一個一致的界面。
3 PHP7 和 PHP5 的區別,具體多了哪些新特性?
性能提高了兩倍
增長告終合比較運算符 (<=>)
增長了標量類型聲明、返回類型聲明
try...catch 增長多條件判斷,更多 Error 錯誤能夠進行異常處理
增長了匿名類,如今支持經過new class 來實例化一個匿名類,這能夠用來替代一些「用後即焚」的完整類定義
4 爲何 PHP7 比 PHP5 性能提高了?
變量存儲字節減少,減小內存佔用,提高變量操做速度
改善數組結構,數組元素和 hash 映射表被分配在同一塊內存裏,下降了內存佔用、提高了 cpu 緩存命中率
改進了函數的調用機制,經過優化參數傳遞的環節,減小了一些指令,提升執行效率
5 簡述一下 PHP 垃圾回收機制(GC)
PHP 5.3 版本以前都是採用引用計數的方式管理內存,PHP 全部的變量存在一個叫 zval 的變量容器中,當變量被引用的時候,引用計數會+1,變量引用計數變爲0時,PHP 將在內存中銷燬這個變量。
可是引用計數中的循環引用,引用計數不會消減爲 0,就會致使內存泄露。
在 5.3 版本以後,作了這些優化:
並非每次引用計數減小時都進入回收週期,只有根緩衝區滿額後在開始垃圾回收;
能夠解決循環引用問題;
能夠總將內存泄露保持在一個閾值如下。
6 如何解決 PHP 內存溢出問題
增大 PHP 腳本的內存分配
變量引用以後及時銷燬
將數據分批處理
7 Redis、Memecached 這二者有什麼區別?
Redis 支持更加豐富的數據存儲類型,String、Hash、List、Set 和 Sorted Set。Memcached 僅支持簡單的 key-value 結構。
Memcached key-value存儲比 Redis 採用 hash 結構來作 key-value 存儲的內存利用率更高。
Redis 提供了事務的功能,能夠保證一系列命令的原子性
Redis 支持數據的持久化,能夠將內存中的數據保持在磁盤中
Redis 只使用單核,而 Memcached 可使用多核,因此平均每個核上 Redis 在存儲小數據時比 Memcached 性能更高。
8 Redis 如何實現持久化?
RDB 持久化,將 Redis 在內存中的的狀態保存到硬盤中,至關於備份數據庫狀態。
AOF 持久化(Append-Only-File),AOF 持久化是經過保存 Redis 服務器鎖執行的寫狀態來記錄數據庫的。
至關於備份數據庫接收到的命令,全部被寫入 AOF 的命令都是以 Redis 的協議格式來保存的。
1 CSRF 是什麼?如何防範?
CSRF(Cross-site request forgery)一般被叫作「跨站請求僞造」,能夠這麼理解:攻擊者盜用用戶身份,從而欺騙服務器,來完成攻擊請求。
防範措施:
使用驗證碼
給每個請求添加令牌 token 並驗證
2 XSS 是什麼?如何防範?
XSS(Cross Site Scripting),跨站腳本攻擊,攻擊者往 Web 頁面裏插入惡意 Script 代碼,當用戶瀏覽該頁之時,嵌入其中Web 裏面的 Script 代碼會被執行,從而達到惡意攻擊用戶的目的。
防止 XSS 攻擊的方式有不少,其核心的本質是:永遠不要相信用戶的輸入數據,始終保持對用戶數據的過濾。
3 什麼是 SQL 注入?如何防範?
SQL 注入就是攻擊者經過一些方式欺騙服務器,結果執行了一些不應被執行的 SQL。
SQL 注入的常見場景
數據庫裏被注入了大量的垃圾數據,致使服務器運行緩慢、崩潰。
利用 SQL 注入暴露了應用程序的隱私數據
防範措施:
保持對用戶數據的過濾
不要使用動態拼裝 SQL
增長輸入驗證,好比驗證碼
對隱私數據加密,禁止明文存儲
好了各位,以上就是這篇文章的所有內容了,能看到這裏的人呀,都是人才。以前說過,PHP方面的技術點不少,也是由於太多了,實在是寫不過來,寫過來了你們也不會看的太多,因此我這裏把它整理成了PDF和文檔,若是有須要的能夠
更多學習內容能夠訪問【對標大廠】精品PHP架構師教程目錄大全,只要你能看完保證薪資上升一個臺階(持續更新)
以上內容但願幫助到你們,不少PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那裏入手去提高,對此我整理了一些資料,包括但不限於:分佈式架構、高可擴展、高性能、高併發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階乾貨須要的能夠免費分享給你們,須要的能夠加入個人 PHP技術交流羣