這篇文章為大家總結(jié)了一些PHP常見面試題型(附答案),有一定的參考價值,需要的朋友可以參考一下,希望對大家有幫助。
記得我第一次面試PHP這個職位的時候,哪個時候剛從學校出來混,不知道啥行情啊,又是零經(jīng)驗的(這裡插一句,零經(jīng)驗的,如果你從來都沒接觸過開發(fā)一個完整的,或者半成品的項目,公司一般是不會要的,因為公司招你進去,是要你會幫忙做東西,實現(xiàn)公司的業(yè)務與業(yè)績的提升的)。那時候我就直接說試用期800元了,當然,好多年前的了哈!也是相當?shù)偷膬r位的,所以公司直接就要了! ! !道理很簡單,大家都懂的!
【相關(guān)推薦:php面試題(總結(jié))】
在公司裡做項目,成長是一個過程,提升你自己的學習技能更是一個關(guān)鍵所在的。進入公司之前,你會有一兩輪的面試與筆試,做我們這個行業(yè)的都是這樣,所以除了口語表達能力(能吹)之外,還有一點就是實力能力的,這個也是你的面試題所要體現(xiàn)的。面試題的題型很多,但是都是離不開PHP基礎的。一些剛出來的可能不懂試題的。告訴你一個方法,那時候我真的用了!就是把所有題型都背下來了!方法很老套又不切實際。但很有用,因為常見的題型都遇到了~~可能是幸運吧!
可能學習各有各的方法!我以前就是那樣子過來的!現(xiàn)在呢,還是要繼續(xù)的學習與提陞技能,活到老學到老!一旦進坑了,很難出來!
以下推薦一些面試常見的試題,希望對你有用! !
1、冒泡排序,面試前一定要記得!
function maopao($arr) { $len = count($arr); $n = count($arr) - 1; for ($i = 0; $i < $len; $i++) { for ($j = 0; $j < $n; $j++) { if ($arr[$j] > $arr[$j + 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } } return $arr; }
2、快速排序,面試前一定要記得!
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); }
3、請說明PHP 中傳值與傳引用的區(qū)別,什麼時候傳值什麼時候傳引用?
按值傳遞:函數(shù)範圍內(nèi)對值的任何改變在函數(shù)外部都會被忽略
按引用傳遞:函數(shù)範圍內(nèi)對值的任何改變在函數(shù)外部也能反映出這些修改
優(yōu)缺點:按值傳遞時,php必須複製值。特別是對於大型的字串和物件來說,這將會是一個代價很大的操作。按引用傳遞則不需要複製值,對於效能提升很有好處。 (優(yōu)缺點會考到)
4、MySQL資料庫中的欄位型別varchar和char的主要差異是什麼?
##Varchar是變長,節(jié)省儲存空間,char是固定長度。找出效率要char型快,因為varchar是非定長,必須先找長度,然後進行資料的擷取,比char定長型別多了一個步驟,所以效率低一些。5、MySQL資料庫的常用儲存引擎以及它們的差異?
MyISAM:不支援事務,表鎖,易產(chǎn)生碎片,要經(jīng)常優(yōu)化,讀寫速度較快,支援全文索引。 InnoDB:支援事務,行鎖,有崩潰復原能力。讀寫速度比MyISAM慢,5.6之後支援全文索引。儲存引擎是基於表格的,而不是資料庫
6、對於大流量的網(wǎng)站,採用什麼樣的方法來解決訪問量問題?
首先,確認伺服器硬體是否足夠支援目前的流量
其次,優(yōu)化資料庫存取。
第三,禁止外部的盜鏈。
第四,控制大檔案的下載。
第五,使用不同主機分流主要流量
第六,使用流量分析統(tǒng)計軟體
第七,盡量使用靜態(tài)頁,快取
7、什麼是物件導向?主要特徵是什麼?
物件導向是程式的一種設計方式,它利於提高程式的重複使用性,使程式結(jié)構(gòu)更加清晰。主要特徵:封裝、繼承、多型。
8、SESSION 與 COOKIE的差別是什麼?這是重點
SESSION儲存在伺服器端,COOKIE保存在客戶端。 Session比較安全,cookie用某些手段可以修改,不安全。 Session依賴cookie進行傳遞。停用cookie後,session還可以使用,在儲存session的檔案中,產(chǎn)生sessionID,透過get傳參的方式將sessionID傳到要實現(xiàn)session共享的頁面,讀取sessionID,從而從session中取得資料。
建議查找session與cookie這方面的詳細教學
9、對快取技術(shù)的了解? redis是個考點
1、快取技術(shù)是將動態(tài)內(nèi)容快取到文件中,在一定時間內(nèi)存取動態(tài)頁面直接呼叫快取文件,而不必重新存取資料庫。
2、使用memcache可以做快取。
10、表單中g(shù)et和post提交方式的區(qū)別
get是明確的,資料從url中可以看到,傳輸?shù)馁Y料量小,安全性低;
post是隱式的,傳送的資料量較大,安全性較高
##11、最佳化資料庫的方法
選取最適用的欄位屬性,盡可能減少定義欄位寬度,盡量把欄位設定NOTNULL使用連接(JOIN)來取代子查詢適用聯(lián)合(UNION)來取代手動建立的暫存資料表交易處理鎖定表、最佳化交易處理#使用外鍵,最佳化鎖定表使用索引優(yōu)化查詢語句
12、語句include和require的差別是什麼?語句include和require的差別是什麼?
require是無條件包含,也就是如果一個流程裡加入require,無論條件成立與否都會先執(zhí)行require,當檔案不存在或無法開啟的時候,會提示錯誤,並且會終止程式執(zhí)行include有回傳值,而require沒有(可能因為如此require的速度比include快),如果被包含的檔案不存在的化,那麼會提示一個錯誤,但是程式會繼續(xù)執(zhí)行下去13、redis和memcacahe、mongoDB的差別?
都是非關(guān)係型資料庫,效能都非常高,但是mongoDB和memcache、redis是不同的兩種型別。後兩者主要用於資料的緩存,前者主要用在查詢和儲存大數(shù)據(jù)方面,是最接近資料庫的文檔型的非關(guān)聯(lián)式資料庫。 從資料儲存位置上來分,memcache的資料存在記憶體中,而redis既可以儲存在記憶體中,也可以儲存的到磁碟中,達到持久化儲存的功能,memcache一旦斷電,數(shù)據(jù)全部遺失,redis可以利用快照和AOF把資料存到磁碟中,當恢復時又從磁碟讀取到記憶體中,當物理記憶體使用完畢後,可以把資料寫入磁碟中。 從儲存資料的類型上來分,memcache和redis儲存的方式都是鍵值對,只不過redis值的類型比較豐富,有string(字串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要儲存的是字串。14、PHP的基本變數(shù)類型
# 四種標量類型:boolean (布林類型)、integer (整數(shù))、float (浮點型, 也稱為double)、string (字串)兩種複合型別:array (陣列)、object (物件)最後是兩種特殊型別:resource(資源)、NULL(NULL)15、靜態(tài)化如何實現(xiàn)的?偽靜態(tài)如何實作?
1、 靜態(tài)化指的是頁面靜態(tài)化,也即產(chǎn)生實實在在的靜態(tài)文件,也即不需要查詢資料庫就可以直接從文件中獲取數(shù)據(jù),指的是真靜態(tài)。實作方式主要有兩種:
2、偽靜態(tài)不是真正意義上的靜態(tài)化,之所以使用偽靜態(tài),主要是為了SEO推廣,搜索引擎對動態(tài)的文件獲取難度大,不利于網(wǎng)站的推廣。實習原理是基于Apache或Nginx的rewrite機智
主要有兩種方式:
一種是直接在配置虛擬機的位置配置偽靜態(tài),這個每次修改完成后需要重啟web服務器。
另一種采用分布式的,可以在網(wǎng)站的根目錄上創(chuàng)建.htaccess的文件,在里面配置相應的重寫規(guī)則來實現(xiàn)偽靜態(tài),這種每次重寫時不需要重啟web服務器,且結(jié)構(gòu)上比較清晰。
16、Mysql的讀寫分離?(進階的會遇到)
讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉(zhuǎn)向到讀服務器上(從服務器,一般是多臺),寫的操作轉(zhuǎn)到寫的服務器上(主服務器,一般是一臺,視數(shù)據(jù)量來看)。當然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復制。
17、如何處理負載,高并發(fā)?
1、HTML靜態(tài)化
效率最高、消耗最小的就是純靜態(tài)化的html頁面,所以我們盡可能使我們的 網(wǎng)站上的頁面采用靜態(tài)頁面來實現(xiàn),這個最簡單的方法其實也是最有效的方法。
2、圖片服務器分離
把圖片單獨存儲,盡量減少圖片等大流量的開銷,可以放在一些相關(guān)的平臺上,如七牛等
3、數(shù)據(jù)庫集群和庫表散列及緩存
數(shù)據(jù)庫的并發(fā)連接為100,一臺數(shù)據(jù)庫遠遠不夠,可以從讀寫分離、主從復制,數(shù)據(jù)庫集群方面來著手。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如memcache、redis。
4、鏡像:
盡量減少下載,可以把不同的請求分發(fā)到多個鏡像端。
5、負載均衡:
Apache的最大并發(fā)連接為1500,只能增加服務器,可以從硬件上著手,如F5服務器。當然硬件的成本比較高,我們往往從軟件方面著手。
18、說一下單引號雙引號?(基礎考點)
單引號內(nèi)部的變量不會執(zhí)行, 雙引號會執(zhí)行
單引號解析速度比雙引號快。
單引號只能解析部分特殊字符,雙引號可以解析所有特殊字符。
19、PHP7的新特性?重點
標量類型聲明: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 來實例化一個匿名類
20、PHP 數(shù)組排序
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ù)組進行排序
21、建立索引
(普通索引)-> 創(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[索引字段])
22、PHP支持多繼承嗎?
不支持。PHP中只允許單繼承,父類可以被一個子類用關(guān)鍵字“extends”繼承。
23、使用過Memcache緩存嗎,如果使用過,能夠簡單的描述一下它的工作原理嗎?
Memcahce是把所有的數(shù)據(jù)保存在內(nèi)存當中,采用hash表的方式,每條數(shù)據(jù)又key和value組成,每個key是獨一無二的,當要訪問某個值的時候先按照找到值,然后返回結(jié)果。
Memcahce采用LRU算法來逐漸把過期數(shù)據(jù)清除掉。
24、優(yōu)化MYSQL數(shù)據(jù)庫的方法
(1)選擇最有效率的表名順序 (2)WHERE子句中的連接順序 (3)SELECT子句中避免使用‘*’ (4)用Where子句替換HAVING子句 (5)通過內(nèi)部函數(shù)提高SQL效率 (6)避免在索引列上使用計算。 (7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。 (1).選取最適用的字段屬性,應該盡量把字段設置為NOT NULL (2).使用連接(JOIN)來代替子查詢(Sub-Queries) (3).使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表 (4).盡量少使用 LIKE 關(guān)鍵字和通配符 (5).使用事務和外鍵
25、MySQL主從備份的原理?
mysql支持單向、異步復制,復制過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。
26、error_reporting() 的作用?
設置 PHP 的報錯級別并返回當前級別。
27、如何修改session的生存時間
在php.ini 中設置 session.gc_maxlifetime = 1440 //默認時間
代碼實現(xiàn)
$lifeTime = 24 * 3600; // 保存一天 session_set_cookie_params($lifeTime); session_start();
28、常見的 PHP 安全性攻擊
SQL注入:用戶利用在表單字段輸入SQL語句的方式來影響正常的SQL執(zhí)行。
防止:
使用mysql_real_escape_string()過濾數(shù)據(jù)
手動檢查每一數(shù)據(jù)是否為正確的數(shù)據(jù)類型
使用預處理語句并綁定變量
參數(shù)化SQL:是指在設計與數(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ā)送出去的表單。有兩點一定要記?。?/p>
對使用者會話採用適當?shù)陌踩胧?,例?給每一個會話更新id和使用者使用SSL。
產(chǎn)生另一個一次性的令牌並將其嵌入表單,保存在會話中(一個會話變數(shù)),在提交時檢查它。如laravel中的 _token
程式碼注入:程式碼注入是利用電腦漏洞透過處理無效資料所造成的。問題出在,當你不小心執(zhí)行任意程式碼,通常透過檔案包含。寫得很糟糕的程式碼可以允許一個遠端檔案包含並執(zhí)行。如許多PHP函數(shù),如require可以包含URL或檔名。
防止程式碼注入
過濾使用者輸入
在php.ini設定停用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠端檔案
題型還有很多,希望大家在學習過程中,慢慢的去發(fā)現(xiàn)和慢慢的提升自己的學習技能,最後祝大家學習愉快! !

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)