本篇文章給大家匯總整理了一些PHP常見面試題型(附答案),有一定的參考價值,需要的朋友可以參考一下,希望對大家有所幫助。
記得我第一次面試PHP這個崗位的時候,哪個時候剛從學校出來混,不知道啥行情啊,又是零經(jīng)驗的(這里插一句,零經(jīng)驗的,如果你從來都沒接觸過開發(fā)一個完整的,或者半成品的項目,公司一般是不會要的,因為公司招你進去,是要你會幫忙做東西,實現(xiàn)公司的業(yè)務(wù)與業(yè)績的提升的)。那個時候我就直接說試用期800元了,當然,好多年前的了哈!也是一個相當?shù)偷膬r位的,所以公司直接就要了!?。〉览砗芎唵?,大家都懂的!
【相關(guān)推薦:php面試題(匯總)】
在公司里做項目,成長是一個過程,提升你自己的學習技能更是一個關(guān)鍵所在的。進入公司之前,你會有一兩輪的面試與筆試,做我們這個行業(yè)的都是這樣,所以除了口語表達能力(能吹)之外,還有一點就是實力能力的,這個也是你的面試題所要體現(xiàn)的。面試題的題型很多,但是都是離不開PHP基礎(chǔ)的。一些剛出來的可能不懂試題的。告訴你一個方法,那個時候我真的用了!就是把所有題型都背下來了!方法很老套又不切合實際。但是很有用,因為常見的題型都遇到了~~可能是幸運吧!
可能學習各有各的方法!我以前就是那樣子過來的!現(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數(shù)據(jù)庫中的字段類型varchar和char的主要區(qū)別是什么?
Varchar是變長,節(jié)省存儲空間,char是固定長度。查找效率要char型快,因為varchar是非定長,必須先查找長度,然后進行數(shù)據(jù)的提取,比char定長類型多了一個步驟,所以效率低一些。
5、MySQL數(shù)據(jù)庫的常用存儲引擎以及它們的區(qū)別?
MyISAM:不支持事務(wù),表鎖,易產(chǎn)生碎片,要經(jīng)常優(yōu)化,讀寫速度較快,支持全文索引。
InnoDB:支持事務(wù),行鎖,有崩潰恢復能力。讀寫速度比MyISAM慢,5.6之后支持全文索引。
存儲引擎是基于表的,而不是數(shù)據(jù)庫
(這道題還能更詳細點就詳細點)
6、對于大流量的網(wǎng)站,采用什么樣的方法來解決訪問量問題?
首先,確認服務(wù)器硬件是否足夠支持當前的流量
其次,優(yōu)化數(shù)據(jù)庫訪問。
第三,禁止外部的盜鏈。
第四,控制大文件的下載。
第五,使用不同主機分流主要流量
第六,使用流量分析統(tǒng)計軟件
第七,盡量使用靜態(tài)頁,緩存
7、什么是面向?qū)ο??主要特征是什么?/span>
面向?qū)ο笫浅绦虻囊环N設(shè)計方式,它利于提高程序的重用性,使程序結(jié)構(gòu)更加清晰。主要特征:封裝、繼承、多態(tài)。
8、SESSION 與 COOKIE的區(qū)別是什么?這是重點
SESSION存儲在服務(wù)器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。禁用cookie后,session還可以使用,在存儲session的文件中,生成sessionID,通過get傳參的方式將sessionID傳到要實現(xiàn)session共享的頁面,讀取sessionID,從而從session中獲取數(shù)據(jù)。
建議查找session與cookie這方面的詳細教程
9、對緩存技術(shù)的了解?redis是個考點
1、緩存技術(shù)是將動態(tài)內(nèi)容緩存到文件中,在一定時間內(nèi)訪問動態(tài)頁面直接調(diào)用緩存文件,而不必重新訪問數(shù)據(jù)庫。
2、使用memcache可以做緩存。
10、表單中g(shù)et和post提交方式的區(qū)別
get是顯式的,數(shù)據(jù)從url中可以看到,傳輸?shù)臄?shù)據(jù)量小,安全性低;
post是隱式的,傳送的數(shù)據(jù)量較大,安全性較高
11、優(yōu)化數(shù)據(jù)庫的方法
選取最適用的字段屬性,盡可能減少定義字段寬度,盡量把字段設(shè)置NOTNULL
使用連接(JOIN)來代替子查詢
適用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表
事務(wù)處理
鎖定表、優(yōu)化事務(wù)處理
使用外鍵,優(yōu)化鎖定表
使用索引
優(yōu)化查詢語句
12、語句include和require的區(qū)別是什么?語句include和require的區(qū)別是什么?
require是無條件包含,也就是如果一個流程里加入require,無論條件成立與否都會先執(zhí)行require,當文件不存在或者無法打開的時候,會提示錯誤,并且會終止程序執(zhí)行
include有返回值,而require沒有(可能因為如此require的速度比include快),如果被包含的文件不存在的化,那么會提示一個錯誤,但是程序會繼續(xù)執(zhí)行下去
13、redis和memcacahe、mongoDB的區(qū)別?
都是非關(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ù)存到磁盤中,當恢復時又從磁盤中讀取到內(nèi)存中,當物理內(nèi)存使用完畢后,可以把數(shù)據(jù)寫入到磁盤中。
從存儲數(shù)據(jù)的類型上來分,memcache和redis存儲的方式都是鍵值對,只不過redis值的類型比較豐富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存儲的是字符串。
14、PHP的基本變量類型
四種標量類型:boolean (布爾型)、integer (整型)、float (浮點型, 也稱作 double)、string (字符串)
兩種復合類型:array (數(shù)組)、object (對象)
最后是兩種特殊類型:resource(資源)、NULL(NULL)
15、靜態(tài)化如何實現(xiàn)的?偽靜態(tài)如何實現(xiàn)?
1、 靜態(tài)化指的是頁面靜態(tài)化,也即生成實實在在的靜態(tài)文件,也即不需要查詢數(shù)據(jù)庫就可以直接從文件中獲取數(shù)據(jù),指的是真靜態(tài)。
實現(xiàn)方式主要有兩種:
一種是我們在添加信息入庫的時候就生成的靜態(tài)文件,也稱為模板替換技術(shù)。
一種是用戶在訪問我們的頁面時先判斷是否有對應的緩存文件存在,如果存在就讀緩存,不存在就讀數(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的文件,在里面配置相應的重寫規(guī)則來實現(xiàn)偽靜態(tài),這種每次重寫時不需要重啟web服務(wù)器,且結(jié)構(gòu)上比較清晰。
16、Mysql的讀寫分離?(進階的會遇到)
讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉(zhuǎn)向到讀服務(wù)器上(從服務(wù)器,一般是多臺),寫的操作轉(zhuǎn)到寫的服務(wù)器上(主服務(wù)器,一般是一臺,視數(shù)據(jù)量來看)。當然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復制。
17、如何處理負載,高并發(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ù)庫遠遠不夠,可以從讀寫分離、主從復制,數(shù)據(jù)庫集群方面來著手。另外盡量減少數(shù)據(jù)庫的訪問,可以使用緩存數(shù)據(jù)庫如memcache、redis。
4、鏡像:
盡量減少下載,可以把不同的請求分發(fā)到多個鏡像端。
5、負載均衡:
Apache的最大并發(fā)連接為1500,只能增加服務(wù)器,可以從硬件上著手,如F5服務(wù)器。當然硬件的成本比較高,我們往往從軟件方面著手。
18、說一下單引號雙引號?(基礎(chǔ)考點)
單引號內(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).選取最適用的字段屬性,應該盡量把字段設(shè)置為NOT NULL (2).使用連接(JOIN)來代替子查詢(Sub-Queries) (3).使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表 (4).盡量少使用 LIKE 關(guān)鍵字和通配符 (5).使用事務(wù)和外鍵
25、MySQL主從備份的原理?
mysql支持單向、異步復制,復制過程中一個服務(wù)器充當主服務(wù)器,而一個或多個其它服務(wù)器充當從服務(wù)器。
26、error_reporting() 的作用?
設(shè)置 PHP 的報錯級別并返回當前級別。
27、如何修改session的生存時間
在php.ini 中設(shè)置 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è)計與數(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。
生成另一個一次性的令牌并將其嵌入表單,保存在會話中(一個會話變量),在提交時檢查它。 如laravel中的 _token
代碼注入:代碼注入是利用計算機漏洞通過處理無效數(shù)據(jù)造成的。問題出在,當你不小心執(zhí)行任意代碼,通常通過文件包含。寫得很糟糕的代碼可以允許一個遠程文件包含并執(zhí)行。如許多PHP函數(shù),如require可以包含URL或文件名。
防止代碼注入
過濾用戶輸入
在php.ini中設(shè)置禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠程文件
題型還有很多,希望大家在學習過程中,慢慢的去發(fā)現(xiàn)和慢慢的提升自己的學習技能,最后祝大家學習愉快?。?/p>

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)