溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

PHP面試經(jīng)常見到的題型有哪些

發(fā)布時間:2021-11-25 15:22:54 來源:億速云 閱讀:160 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“PHP面試經(jīng)常見到的題型有哪些”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PHP面試經(jīng)常見到的題型有哪些”吧!

1、冒泡排序

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;}

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必須復(fù)制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。按引用傳遞則不需要復(fù)制值,對于性能提高很有好處。(優(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ù),行鎖,有崩潰恢復(fù)能力。讀寫速度比MyISAM慢,5.6之后支持全文索引。
    存儲引擎是基于表的,而不是數(shù)據(jù)庫
    (這道題還能更詳細點就詳細點)

6、對于大流量的網(wǎng)站,采用什么樣的方法來解決訪問量問題?

  • 首先,確認服務(wù)器硬件是否足夠支持當前的流量

  • 其次,優(yōu)化數(shù)據(jù)庫訪問。

  • 第三,禁止外部的盜鏈。

  • 第四,控制大文件的下載。

  • 第五,使用不同主機分流主要流量

  • 第六,使用流量分析統(tǒng)計軟件

  • 第七,盡量使用靜態(tài)頁,緩存

7、什么是面向?qū)ο??主要特征是什么?/strong>

面向?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ù)存到磁盤中,當恢復(fù)時又從磁盤中讀取到內(nèi)存中,當物理內(nèi)存使用完畢后,可以把數(shù)據(jù)寫入到磁盤中。

  • 從存儲數(shù)據(jù)的類型上來分,memcache和redis存儲的方式都是鍵值對,只不過redis值的類型比較豐富,有string(字符串),hash(哈希),list(列表),set(集合)zset(有序集合),而memcache主要存儲的是字符串

14、PHP的基本變量類型

  • 四種標量類型:boolean (布爾型)、integer (整型)、float (浮點型, 也稱作 double)、string (字符串)

  • 兩種復(fù)合類型: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ù)。

  • 一種是用戶在訪問我們的頁面時先判斷是否有對應(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)上比較清晰。

16、Mysql的讀寫分離?(進階的會遇到)

讀寫分離的實現(xiàn)原理就是在執(zhí)行SQL語句的時候,判斷到底是讀操作還是寫操作,把讀的操作轉(zhuǎn)向到讀服務(wù)器上(從服務(wù)器,一般是多臺),寫的操作轉(zhuǎn)到寫的服務(wù)器上(主服務(wù)器,一般是一臺,視數(shù)據(jù)量來看)。當然為了保證多臺數(shù)據(jù)庫數(shù)據(jù)的一致性,需要主從復(fù)制。

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ù)庫遠遠不夠,可以從讀寫分離、主從復(fù)制,數(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).選取最適用的字段屬性,應(yīng)該盡量把字段設(shè)置為NOT NULL(2).使用連接(JOIN)來代替子查詢(Sub-Queries)(3).使用聯(lián)合(UNION)來代替手動創(chuàng)建的臨時表(4).盡量少使用 LIKE 關(guān)鍵字和通配符(5).使用事務(wù)和外鍵

25、MySQL主從備份的原理?

mysql支持單向、異步復(fù)制,復(fù)制過程中一個服務(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ù)類型

    • 使用預(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)注!

向AI問一下細節(jié)

免責聲明:本站發(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)容。

php
AI