您好,登錄后才能下訂單哦!
這篇文章主要講解了“PHP面試經(jīng)常見到的題型有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP面試經(jīng)常見到的題型有哪些”吧!
function bubble_sort($array){$count = count($array);if ($count <= 0) return false;for($i=0; $i<$count; $i++){for($j=$i; $j<$count-1; $j++){if ($array[$i] > $array[$j]){$tmp = $array[$i];$array[$i] = $array[$j];$array[$j] = $tmp;}}}return $array;}
function quick_sort($array) {if (count($array) <= 1) return $array;$key = $array[0];$left_arr = array();$right_arr = array();for ($i=1; $i<count($array); $i++){if ($array[$i] <= $key)$left_arr[] = $array[$i];else$right_arr[] = $array[$i];}$left_arr = quick_sort($left_arr);$right_arr = quick_sort($right_arr);return array_merge($left_arr, array($key), $right_arr);}
按值傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部都會被忽略
按引用傳遞:函數(shù)范圍內(nèi)對值的任何改變在函數(shù)外部也能反映出這些修改
優(yōu)缺點:按值傳遞時,php必須復(fù)制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復(fù)制值,對于性能提高很有好處。(優(yōu)缺點會考到)
Varchar是變長,節(jié)省存儲空間,char是固定長度。查找效率要char型快,因為varchar是非定長,必須先查找長度,然后進行數(shù)據(jù)的提取,比char定長類型多了一個步驟,所以效率低一些。
MyISAM:不支持事務(wù),表鎖,易產(chǎn)生碎片,要經(jīng)常優(yōu)化,讀寫速度較快,支持全文索引。
InnoDB:支持事務(wù),行鎖,有崩潰恢復(fù)能力。讀寫速度比MyISAM慢,5.6之后支持全文索引。
存儲引擎是基于表的,而不是數(shù)據(jù)庫
(這道題還能更詳細點就詳細點)
首先,確認服務(wù)器硬件是否足夠支持當前的流量
其次,優(yōu)化數(shù)據(jù)庫訪問。
第三,禁止外部的盜鏈。
第四,控制大文件的下載。
第五,使用不同主機分流主要流量
第六,使用流量分析統(tǒng)計軟件
第七,盡量使用靜態(tài)頁,緩存
面向?qū)ο笫浅绦虻囊环N設(shè)計方式,它利于提高程序的重用性,使程序結(jié)構(gòu)更加清晰。主要特征:封裝、繼承、多態(tài)。
SESSION存儲在服務(wù)器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。禁用cookie后,session還可以使用,在存儲session的文件中,生成sessionID,通過get傳參的方式將sessionID傳到要實現(xiàn)session共享的頁面,讀取sessionID,從而從session中獲取數(shù)據(jù)。
建議查找session與cookie這方面的詳細教程
1、緩存技術(shù)是將動態(tài)內(nèi)容緩存到文件中,在一定時間內(nèi)訪問動態(tài)頁面直接調(diào)用緩存文件,而不必重新訪問數(shù)據(jù)庫。
2、使用memcache可以做緩存。
get是顯式的,數(shù)據(jù)從url中可以看到,傳輸?shù)臄?shù)據(jù)量小,安全性低;
post是隱式的,傳送的數(shù)據(jù)量較大,安全性較高
選取最適用的字段屬性,盡可能減少定義字段寬度,盡量把字段設(shè)置NOTNULL
使用連接(JOIN)來代替子查詢
適用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表
事務(wù)處理
鎖定表、優(yōu)化事務(wù)處理
使用外鍵,優(yōu)化鎖定表
使用索引
優(yōu)化查詢語句
require是無條件包含,也就是如果一個流程里加入require,無論條件成立與否都會先執(zhí)行require,當文件不存在或者無法打開的時候,會提示錯誤,并且會終止程序執(zhí)行
include有返回值,而require沒有(可能因為如此require的速度比include快),如果被包含的文件不存在的化,那么會提示一個錯誤,但是程序會繼續(xù)執(zhí)行下去
都是非關(guān)系型數(shù)據(jù)庫,性能都非常高,但是mongoDB和memcache、redis是不同的兩種類型。后兩者主要用于數(shù)據(jù)的緩存,前者主要用在查詢和儲存大數(shù)據(jù)方面,是最接近數(shù)據(jù)庫的文檔型的非關(guān)系數(shù)據(jù)庫。
從數(shù)據(jù)存儲位置上來分,memcache的數(shù)據(jù)存在內(nèi)存中,而redis既可以存儲在內(nèi)存中,也可以存儲的到磁盤中,達到持久化存儲的功能,memcache一旦斷電,數(shù)據(jù)全部丟失,redis可以利用快照和AOF把數(shù)據(jù)存到磁盤中,當恢復(fù)時又從磁盤中讀取到內(nèi)存中,當物理內(nèi)存使用完畢后,可以把數(shù)據(jù)寫入到磁盤中。
從存儲數(shù)據(jù)的類型上來分,memcache和redis存儲的方式都是鍵值對,只不過redis值的類型比較豐富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存儲的是字符串
四種標量類型:boolean (布爾型)、integer (整型)、float (浮點型, 也稱作 double)、string (字符串)
兩種復(fù)合類型:array (數(shù)組)、object (對象)
最后是兩種特殊類型:resource(資源)、NULL(NULL)
1、 靜態(tài)化指的是頁面靜態(tài)化,也即生成實實在在的靜態(tài)文件,也即不需要查詢數(shù)據(jù)庫就可以直接從文件中獲取數(shù)據(jù),指的是真靜態(tài)。
實現(xiàn)方式主要有兩種:
一種是我們在添加信息入庫的時候就生成的靜態(tài)文件,也稱為模板替換技術(shù)。
一種是用戶在訪問我們的頁面時先判斷是否有對應(yīng)的緩存文件存在,如果存在就讀緩存,不存在就讀數(shù)據(jù)庫,同時生成緩存文件。
2、偽靜態(tài)不是真正意義上的靜態(tài)化,之所以使用偽靜態(tài),主要是為了SEO推廣,搜索引擎對動態(tài)的文件獲取難度大,不利于網(wǎng)站的推廣。實習原理是基于Apache或Nginx的rewrite機智
主要有兩種方式:
一種是直接在配置虛擬機的位置配置偽靜態(tài),這個每次修改完成后需要重啟web服務(wù)器。
另一種采用分布式的,可以在網(wǎng)站的根目錄上創(chuàng)建.htaccess的文件,在里面配置相應(yīng)的重寫規(guī)則來實現(xiàn)偽靜態(tài),這種每次重寫時不需要重啟web服務(wù)器,且結(jié)構(gòu)上比較清晰。
讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉(zhuǎn)向到讀服務(wù)器上(從服務(wù)器,一般是多臺),寫的操作轉(zhuǎn)到寫的服務(wù)器上(主服務(wù)器,一般是一臺,視數(shù)據(jù)量來看)。當然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復(fù)制。
1、HTML靜態(tài)化
效率最高、消耗最小的就是純靜態(tài)化的html頁面,所以我們盡可能使我們的 網(wǎng)站上的頁面采用靜態(tài)頁面來實現(xiàn),這個最簡單的方法其實也是最有效的方法。
2、圖片服務(wù)器分離
把圖片單獨存儲,盡量減少圖片等大流量的開銷,可以放在一些相關(guān)的平臺上,如七牛等
3、數(shù)據(jù)庫集群和庫表散列及緩存
數(shù)據(jù)庫的并發(fā)連接為100,一臺數(shù)據(jù)庫遠遠不夠,可以從讀寫分離、主從復(fù)制,數(shù)據(jù)庫集群方面來著手。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如memcache、redis。
4、鏡像:
盡量減少下載,可以把不同的請求分發(fā)到多個鏡像端。
5、負載均衡:
Apache的最大并發(fā)連接為1500,只能增加服務(wù)器,可以從硬件上著手,如F5服務(wù)器。當然硬件的成本比較高,我們往往從軟件方面著手。
單引號內(nèi)部的變量不會執(zhí)行, 雙引號會執(zhí)行
單引號解析速度比雙引號快。
單引號只能解析部分特殊字符,雙引號可以解析所有特殊字符。
標量類型聲明:PHP 7 中的函數(shù)的形參類型聲明可以是標量了。在 PHP 5 中只能是類名、接口、array 或者 callable (PHP 5.4,即可以是函數(shù),包括匿名函數(shù)),現(xiàn)在也可以使用 string、int、float和 bool 了。
返回值類型聲明:增加了對返回類型聲明的支持。 類似于參數(shù)類型聲明,返回類型聲明指明了函數(shù)返回值的類型??捎玫念愋团c參數(shù)聲明中可用的類型相同。
NULL 合并運算符:由于日常使用中存在大量同時使用三元表達式和 isset()的情況,NULL 合并運算符使得變量存在且值不為NULL, 它就會返回自身的值,否則返回它的第二個操作數(shù)。
use 加強:從同一 namespace 導入的類、函數(shù)和常量現(xiàn)在可以通過單個 use 語句 一次性導入了
匿名類:現(xiàn)在支持通過new class 來實例化一個匿名類
sort() - 以升序?qū)?shù)組排序
rsort() - 以降序?qū)?shù)組排序
asort() - 根據(jù)值,以升序?qū)﹃P(guān)聯(lián)數(shù)組進行排序
ksort() - 根據(jù)鍵,以升序?qū)﹃P(guān)聯(lián)數(shù)組進行排序
arsort() - 根據(jù)值,以降序?qū)﹃P(guān)聯(lián)數(shù)組進行排序
krsort() - 根據(jù)鍵,以降序?qū)﹃P(guān)聯(lián)數(shù)組進行排序
(普通索引)->創(chuàng)建:CREATE INDEX <索引名> ON tablename (索引字段)修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)創(chuàng)表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))(唯一索引)->創(chuàng)建:CREATE UNIQUE <索引名> ON tablename (索引字段)修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)創(chuàng)表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))(主鍵)->它是唯一索引,一般在創(chuàng)建表是建立,格式為:CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
不支持。PHP中只允許單繼承,父類可以被一個子類用關(guān)鍵字“extends”繼承。
Memcahce是把所有的數(shù)據(jù)保存在內(nèi)存當中,采用hash表的方式,每條數(shù)據(jù)又key和value組成,每個key是獨一無二的,當要訪問某個值的時候先按照找到值,然后返回結(jié)果。
Memcahce采用LRU算法來逐漸把過期數(shù)據(jù)清除掉。
(1)選擇最有效率的表名順序(2)WHERE子句中的連接順序(3)SELECT子句中避免使用‘*’(4)用Where子句替換HAVING子句(5)通過內(nèi)部函數(shù)提高SQL效率(6)避免在索引列上使用計算。(7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。(1).選取最適用的字段屬性,應(yīng)該盡量把字段設(shè)置為NOT NULL(2).使用連接(JOIN)來代替子查詢(Sub-Queries)(3).使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表(4).盡量少使用 LIKE 關(guān)鍵字和通配符(5).使用事務(wù)和外鍵
mysql支持單向、異步復(fù)制,復(fù)制過程中一個服務(wù)器充當主服務(wù)器,而一個或多個其它服務(wù)器充當從服務(wù)器。
設(shè)置 PHP 的報錯級別并返回當前級別。
在php.ini 中設(shè)置 session.gc_maxlifetime = 1440 //默認時間
代碼實現(xiàn)
$lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params($lifeTime); session_start();
SQL注入:用戶利用在表單字段輸入SQL語句的方式來影響正常的SQL執(zhí)行。
防止:
使用mysql_real_escape_string()過濾數(shù)據(jù)
手動檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型
使用預(yù)處理語句并綁定變量
參數(shù)化SQL:是指在設(shè)計與數(shù)據(jù)庫鏈接并訪問數(shù)據(jù)時,在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù) (Parameter) 來給值,用@或?來表示參數(shù)。
XSS攻擊 :跨站點腳本攻擊,由用戶輸入一些數(shù)據(jù)到你的網(wǎng)站,其中包括客戶端腳本(通常JavaScript)。如果你沒有過濾就輸出數(shù)據(jù)到另一個web頁面,這個腳本將被執(zhí)行。
防止:為了防止XSS攻擊,使用PHP的htmlentities()函數(shù)過濾再輸出到瀏覽器。
CSRF:跨站點請求偽造,是指一個頁面發(fā)出的請求,看起來就像是網(wǎng)站的信任用戶,但是是偽造的
防止:一般來說,確保用戶來自你的表單,并且匹配每一個你發(fā)送出去的表單。有兩點一定要記住:
對用戶會話采用適當?shù)陌踩胧?,例?給每一個會話更新id和用戶使用SSL。
生成另一個一次性的令牌并將其嵌入表單,保存在會話中(一個會話變量),在提交時檢查它。 如laravel中的 _token
代碼注入:代碼注入是利用計算機漏洞通過處理無效數(shù)據(jù)造成的。問題出在,當你不小心執(zhí)行任意代碼,通常通過文件包含。寫得很糟糕的代碼可以允許一個遠程文件包含并執(zhí)行。如許多PHP函數(shù),如require可以包含URL或文件名。
防止代碼注入
過濾用戶輸入
在php.ini中設(shè)置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠程文件
感謝各位的閱讀,以上就是“PHP面試經(jīng)常見到的題型有哪些”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對PHP面試經(jīng)常見到的題型有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。