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