首頁  >  文章  >  後端開發  >  php面試必問的面試問題

php面試必問的面試問題

不言
不言原創
2018-05-15 14:04:4321483瀏覽

這篇文章內容是php面試中必問的面試問題,在這裡分享給大家,也可以給有需要的朋友一點參考,大家一起來看一看吧

相關推薦:《 2019年PHP面試題大總結(收藏)

1、css的定位有哪些方式?以及用法


position 在英文中表示「位置」的意思  它主要是用來實現對元素的定位

在CSS中定位分為三種:

position:fixed          固定定位

position:relatvie   相對定位

position:relatvie   相對定位#1

 

#position:absolute

       絕對定位

position:static       無特殊定位  (預設值)。

注意:    使用定位屬性時,請務必搭配定位的座標來使用!

left表示定位的元素離左邊多遠

##right

表示定位的元素離右邊多遠

top

表示定位的元素離上邊多遠

bottom

表示定位的元素離下邊多遠

1固定定位語法:

    position:fixed

#固定定位,它是相對於

瀏覽器視窗

來進行定位。不管頁面如何捲動,固定定位元素顯示的位置不會改變!

特點:

固定定位元素它脫離了標準文檔流

固定定位元素的的層級比標準文檔流裡面的元素要高所以固定定位元素它會壓蓋住標準文件流程裡面的元素

固定定位元素它不再佔用空間

固定定位元素它顯示的位置不會隨著瀏覽器滾動而滾動

#2相對定位語法:

    position:relative;

相對定位它是相對於「

原來的自己

」來進行定位!

特點:

相對定位元素它沒有脫離標準文檔流

相對定位元素如果沒有設定定位的座標,那麼相對定位元素它還在原來的位置

相對定位元素設定了定位的座標以後,那麼它會在老家留下一個坑

相對定位元素它會將標準文件流中的元素壓蓋住。

相對定位元素的定位座標值可以是負數注意:

    相對定位元素它會在老家留下一個坑,所以一般情況下它很少單獨使用,相對定位元素它主要是用來配合“

絕對定位

”元素來使用的。

3絕對定位語法:

   

position:absolute;

什麼是絕對定位?

    絕對定位元素是相對於「

祖先定位元素

」來進行定位! 什麼是祖先定位元素?

絕對定位元素

它會先去尋找其父元素是否設定了定位的屬性

如果有設定定位的屬性那麼它就會相對於其父元素來進行定位;

但是如果它的父元素沒有設定定位屬性那麼它就會去查找其父元素的上一層元素是否設定了定位的屬性,

如果有設定就相對於其父元素的上一層元素進行定位但是如果沒有設定那麼會繼續往向一級進行查找,

如果其祖先元素都沒有設定定位屬性,那麼它會相對於「

瀏覽器視窗

」來進行定位! ①自己設定了絕對定位時:如果父元素沒有設定定位屬性,那麼就相對於body進行定

②自己設定了絕對定位時:如果父元素設定定位屬性,那麼就會相對於父元素進行定位

③自己設定了絕對定位時:如果父元素

設定定位屬性,那麼就會相對於父元素進行定位


2、用JQ發送AJAX請求時,$.ajax需要配置哪些參數? ?分別代表什麼意義? ?

jQuery.ajax(options)

###參數說明:######options :只有一個參數,要求是JSON格式的數據,其可以設定如下屬性:###

async :是否非同步,true代表非同步,false代表同步。預設為true

cache :是否緩存,true代表緩存,false代表不緩存,預設為true

complete :當Ajax狀態碼為4時所觸發的回呼函數

contentType :請求頭,如果是POST請求,此參數為application/x-www-form-urlencoded

data : 發送Ajax請求時所傳遞的參數,要求為字串

dataType :期待的回傳值類型,可以是text/xml/json資料類型

success :當Ajax狀態碼為4且回應狀態碼為200時所觸發的回呼函數

type :發送的http請求,可以是get,也可以是post

url :請求的url位址

3、什麼時候用同步請求? ?什麼時候用非同步請求? ?


一.什麼是同步請求:(false)

#同步請求即是目前發出請求後,瀏覽器什麼都不能做,必須等到請求完成回傳資料之後,才會執行後續的程式碼,相當於排隊,前一個人辦理完自己的事務,下一個人才能接著辦。也就是說,當JS程式碼載入到目前AJAX的時候會把頁面裡所有的程式碼停止載入,頁面處於一個假死狀態,當這個AJAX執行完畢後才會繼續運行其他程式碼頁面解除假死狀態(即當ajax返回資料後,才執行後面的function2)。
二.什麼是非同步請求:(true)
    非同步請求就當發出請求的同時,瀏覽器可以繼續做任何事,Ajax發送請求並不會影響頁面的載入與使用者的操作,相當於是在兩條線上,各走各的,互不影響。
一般預設值為true,非同步。 非同步請求可以完全不影響使用者的體驗效果,無論請求的時間長或短,使用者都在專心的操作頁面的其他內容,並不會有等待的感覺。

4、PHP有哪些魔術方法? ?


魔術方法包括:

__construct(),類別的建構子

__destruct(),類別的析構函數

__call(),在物件中呼叫一個不可存取方法時呼叫

__callStatic(),用靜態方式中呼叫一個不可存取方法時呼叫

__get(),取得當一個類別的成員變數時呼叫

__set(),設定一個類別的成員變數時呼叫

__isset(),當對​​不可存取屬性呼叫isset()或empty()時呼叫

__unset(),當對​​不可存取屬性呼叫unset()時被呼叫。

__sleep(),執行serialize()時,先會呼叫這個函數

__wakeup(),執行unserialize()時,先會呼叫這個函數

__toString( ),類別被當成字串時的回應方法

__invoke(),當呼叫函數的方式呼叫一個物件時的回應方法

__set_state(),呼叫var_export()導出類別時,此靜態方法會被呼叫。

__clone(),當物件複製完成時呼叫

__autoload(),嘗試載入未定義的類別

__debugInfo(),列印所需偵錯資訊

5、簡述get方法和post方法


① 傳參方式不同

get請求是在url的尾部傳遞參數的

post請求是在請求空白行的位置傳遞參數的

② 傳參的大小不同

get請求,其傳參的最大值為2kb

post請求理論上是沒有任何限制的,但是實際應用中,受到php.ini檔案的影響,一般為2M

③ 傳參的類型不同

get請求,只能傳遞字串

post請求,不僅可以傳遞字串還可以傳遞二進位資料

④ 安全性不同

#相對而言,post請求的安全性要略高於get請求

 其請求頭參數不同

6、PHP中的單字函數


##I接收函數

M:實例化基礎模型類別

D:實例化自訂模型類別

U:對URL位址進行組裝

#7、抽象類別和介面又什麼不同? ?


1、對介面的使用是透過關鍵字implements。對抽象類別的使用是透過關鍵字extends。當然介面也可以透過關鍵字extends繼承。

2、介面中不可以宣告成員變數(包括類別靜態變數),但是可以宣告類別常數。抽象類別中可以宣告各種型別成員變量,實作資料的封裝

3、介面沒有建構函數,抽象類別可以有建構子。

4、介面中的方法預設都是public類型的,而抽象類別中的方法可以使用private,protected,public來修飾。

5、一個類別可以同時實作多個接口,但一個類別只能繼承於一個抽象類別。

共通點:做規範用

抽象類別:不能被實例化,只能被繼承;透過關鍵字abstract宣告;抽象類別中至少要包

含一個抽象方法,該抽象方法沒有方法體,天生要被子類別重寫;

介面:透過interface宣告;介面中的成員常數和方法都是public 的,方法可以不寫關鍵字public;介面能實現多繼承;

#象類別可以範例

#他

類別

類別

使

#用。

抽象類別是透過關鍵字

abstract

來宣告的。

抽象類別與普通類別相似,都包含成員變數與成員方法,兩者的差異在於,抽象類別中至少要包含一個抽象方法,

#抽象方法沒有方法體,該方法天生就是要被子類別重寫的。 抽象方法的格式為:abstract function abstractMethod();


介面是透過interface

關鍵字來宣告的,介面中的成員常數和方法都是public 的,方法可以不寫關鍵字public,

介面中的方法也是沒有方法體。接口中的方法也天生就是要被子類別來實現的。 抽象類別和介面實作的功能十分相似,最大的不同是介面能實現多繼承。在應用程式中選擇抽

象類別還是介面要看具體實作。


子類別繼承抽象類別使用 extends

,子類別實作介面使用implements。

8、如何理解命名空間? ?


防止類別與函數方法衝突

命名空間可以解決下面兩個問題:

(1)使用者所寫的程式碼與PHP內部的類別/函數/常數或第三方類別/函數/常數之間的名字衝突。

(2)為很長的標識符建立一個別名,提高程式碼的可讀性,並減少程式碼的編寫量。

9、PHP哪個版本開始支援命名空間? ?

ThinkPHP3.2


PHP 在 5.3.0 以後的版本開始支援命名空間。

10、PHP擁有那些擴充? ?

PDO: PHP存取資料庫定義的一個輕量級的一致介面。

CURL擴充功能


GD擴充功能

Memcache

#Mysql

11、SVN出現衝突怎麼辦? ?

SVN作用:協同開發。

融合:######更新:######12、如何理解MVC? ? ###############MVC是一個框架模式,它強制性的使應用程式的輸入、處理和輸出分開。使用MVC應用程式被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。 ######MVC所指的就是在軟體設計中一種程式設計模式。在該模式下會將業務操作、資料顯示、資料互動會進行一個拆分操作######M:代表就是具體的模型(model) 主要作用就是與資料庫進行資料互動####### V:代表就是具體的視圖(view)主要作用就是與使用者進行資料互動######C:代表就是具體的控制器(controller)主要作用就是處理具體的業務邏輯#######由模型(model),視圖(view),控制器(controller)完成的應用程序,model 層負責提供數據,和數據庫有關的操作都交給模型層來處理,view 層則提供交互的界面,並輸出數據,而controller 層則負責接收請求,並分發給對應的model 來處理,然後呼叫view 層來顯示。 ###

13、商品表裡有哪些欄位? ?

商品id,商品名稱,商品貨號,商品分類id,市場售價,本店售價,商品縮圖,商品縮略小圖,是否熱賣1表示熱賣0表示不是,是否推薦1表示推薦0表示不推薦,是否熱賣1表示新品0表示不是,添加時間,表示商品是否刪除1正常0刪除狀態,商品是否銷售1銷售0下架狀態,

14、相同商品ID的屬性不同,怎麼辦? ?

商品表中的屬性存成一個集合,屬性表

#15、cookie跟session


比較一下兩者,有以下幾點不同:

1.作用位置:cookie是在客戶端保存使用者訊息,session實在伺服器端保存使用者資訊;

2.儲存內容:cookie儲存的是字串,session中保存的是物件;

3.作用時間:cookie可以長期保存在客戶端,session隨會話結束而關閉;

4.一般cookie保存不重要的使用者資訊,重要的資訊由session保存。

5、cookie分為兩種:會話cookie和檔案Cookie。會話cookie當瀏覽器關閉時,資料消失,檔案Cookie是將資料儲存在一個檔案中,設定過期時間,關閉瀏覽器後,若沒到過期時間,再次開啟瀏覽器,資料還存在。

16、購物車的實現原理


分成兩種情況:

1、使用者沒有登錄,將資料儲存在cookie中,若使用者登入,再將cookie中的資料轉存到資料庫。

2、使用者登入後,將資料直接儲存到資料庫。

17、RBAC權限管理

基於角色的權限存取控制(Role-Based Access Control)

五張表:兩個中間表admin、role、rule、 admin_role、role_rule

三張表:一個中間表

透過程式碼控制不同的管理員是否能夠存取某個方法的過程就是權限控制。


RBAC(Role-Based AccessControl,基於角色的存取控制),就是使用者透過角色與權限進行關聯。簡單地說,一個使用者擁有若干角色,每個角色擁有若干權限。這樣,就建構成「使用者-角色-權限」的授權模型。在這種模型中,使用者與角色之間,角色與權限之間,一般者是多對多的關係。

18、如何理解介面開發

先下載第三方介面文件,

19、簡訊驗證碼如何防止簡訊轟炸? ?

JS用戶端驗證驗證

手機號碼限制簡訊條數(計數器)

(一)增加圖形驗證

惡意攻擊者採用自動化工具,呼叫「動態簡訊取得」介面進行動態簡訊傳送,原因主要是攻擊者可以自動對介面進行大量呼叫。
採用圖片驗證碼可有效防止工具自動化調用,即當用戶進行「獲取動態短信」 操作前,彈出圖片驗證碼,要求用戶輸入驗證碼後,伺服器端再發送動態短信到用戶手機上,該方法可有效解決簡訊轟炸問題。

安全的圖形驗證碼必須滿足以下防護要求

- 產生過程安全性:圖片驗證碼必須在伺服器端進行產生與校驗;
- 使用過程安全:單次有效,且以用戶的驗證請求為準;
- 驗證碼自身安全:不易被識別工具識別​​,能有效防止暴力破解。

圖形驗證的範例:

(二)單IP請求次數限制

使用了圖片驗證碼後,能防止攻擊者有效進行「動態簡訊」功能的自動化呼叫;
但若攻擊者忽略圖片驗證碼驗證錯誤的情況,大量執行請求會給伺服器帶來額外負擔,影響業務使用。建議在伺服器端限制單一IP 在單位時間內的請求次數,一旦使用者請求次數(包括失敗請求次數)超出設定的閾值,則暫停對該IP 一段時間的請求;若情節特別嚴重,可以將IP 加入黑名單,禁止該IP 的存取請求。此措施能限制一個 IP 位址的大量請求,避免攻擊者透過同一個 IP 對大量使用者進行攻擊,增加了攻擊難度,保障了業務的正常運作。

(三)限制發送時長

#

建議採用限制重複發送動態簡訊的間隔時長, 即當單一使用者請求發送一次動態簡訊之後,伺服器端限制只有在一定時長之後(此處一般為60秒),才能進行第二次動態簡訊請求。此功能可進一步保障使用者體驗,並避免包含手工攻擊惡 意發送垃圾驗證簡訊。

完整的動態簡訊驗證碼使用流程

20、商品的圖片上傳是怎麼處理的? ?

21、如何設定session的有效期限? ?

22、支付的同步回呼和非同步回呼? ?


具體同步回呼跟非同步回呼

同步回呼作用:實作當使用者支付完成之後能夠跳到對應的商家頁面(確保使用者支付完成之後能夠正確的對用戶的支付做一個處理操作)

異步回調作用:確保商戶對用戶的支付做了一個正確的處理

23、支付寶的支付流程?


1、申請付款寶帳戶訊息,得到對應的APPID與公鑰(交給支付寶)、私鑰(自己儲存)

#2、下載官方文檔,在本地搭建demo測試,config.php設定APPID、同步非同步回呼地址、支付寶私鑰等資訊。

3、建立後台應用程式

4、具體使用程式碼實現支付功能

#24、支付寶非同步回呼的作用? ?


非同步回呼作用:確保商家對使用者的支付做了一個正確的處理

1、確保同步沒執行,非同步單方面請求。 ()

2、解決掉單問題

3、比較安全性

同步回呼作用:實作當使用者支付完成之後能夠跳到對應的商家頁面(確保用戶支付完成之後能夠正確的對用戶的支付做一個處理操作)(get方式)

異步回調作用:確保商家對用戶的支付做了一個正確的處理(post方式)

25、商品模組的多維屬性

26、Linux常用的指令

#查找檔案:

find 

-name依照檔案名稱進行查找

-group :根據檔案的所屬群組進行搜尋

-user :根據檔案的擁有者進行搜尋

locate指令,用於檢索資料

locate 檔案名稱

df指令:顯示磁碟資訊

-l :顯示本機磁磁碟資訊

-h :以1024進位顯示磁碟資訊

-H :以1000 進位顯示磁碟資訊

##- T :顯示磁碟格式資訊

-t #:顯示指定格式的磁碟資訊

cd  用戶名:進入用於

cd ~ :回到家

yy:複製p :貼上

vim 檔名: 檢視檔案

#27、hppt的狀態碼? ?

1、301 MovedPermanently:被要求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本回應返回的若干個 URI 之一。

永久重定向

2、302 Move temporarily:請求的資源暫時從不同的URI回應請求。由於這樣的

重定向是暫時的,客戶端應繼續向原有位址發送以後的請求

3、404 Not Found:請求失敗,請求所希望得到的資源未被在伺服器上發現。沒有資訊能夠告訴使用者這個狀況到底是暫時的還是永久的

4、200 OK:請求已成功,請求所希望的回應頭或資料體將隨此回應傳回。出現此狀態碼是


表示正常狀態。

200(成功):伺服器已成功處理了請求。通常,這表示伺服器提供了請求的網頁
201(已建立):請求成功並且伺服器建立了新的資源
202(已接受):伺服器已接受請求,但尚未處理
203(非授權資訊):伺服器已成功處理了請求,但傳回的資訊可能來自另一來源
204(無內容):伺服器成功處理了請求,但沒有傳回任何內容
205(重設內容) :伺服器成功處理了請求,但沒有回傳任何內容
206 (部分內容):伺服器成功處理了部分GET 請求
404(未找到):伺服器找不到請求的網頁
500(伺服器內部錯誤):伺服器遇到錯誤,無法完成請求

28、require與include


# require()語句的效能與include()相似,都是包括並運行指定檔案。

不同之處在於:對include()語句來說,在執行檔時每次都要進行讀取和評估;報錯時不會阻止後面的程式碼運行;而對於require()來說,文件只處理一次(實際上,文件內容會取代require()語句)。這就意味著如果可能執行多次的程式碼,則使用require()效率比較高。另外一方面,如果每次執行程式碼時是讀取不同的文件,或是有透過一組文件迭代的循環,就使用include()語句

incluce在用到時載入

require一開始就載入

29、Linux系統中怎麼編譯PHP程式的擴充? ?

1、找到軟體壓縮包,解壓縮

2、編譯make &&make install

3、設定php.ini

4、重啟Apache

30、對事務的理解


邏輯上的一組操作,含有幾個組成部分,這幾個部分構成一個整體,操作要么全部成功,要么全部失敗並返回原狀態!

在執行SQL語句之前,先執行start  transaction,這就開啟了一個事務(事務的起點),然後可以去執行多條SQL語句,最後要結束事務,commit表示提交,即事務中的多條SQL語句所做出的影響會持久化到資料庫中。或者rollback,表示回滾,即回滾到事務的起點,之前做的所有操作都被撤消了!

事務的四大特性(ACID)

原子性(Atomicity):事務中所有操作是不可再分割的原子單位。事務中所有操作要麼全部執行成功,要麼全部執行失敗。

一致性(Consistency):交易執行後,資料庫狀​​態與其它業務規則保持一致。如轉帳業務,無論事務執行成功與否,參與轉帳的兩個帳號餘額總和應該是不變的。

隔離性(Isolation):隔離性是指在並發操作中,不同事務之間應該隔離開來,使每個並發中的事務不會相互幹擾。

持久性(Durability):一旦事務提交成功,事務中所有的資料操作都必須被持久化到資料庫中,即使提交交易後,資料庫馬上崩潰,在資料庫重新啟動時,也必須能保證透過某種機制恢復資料。

31、

PHP取得目前時間time()

Php截取字串:substr函數

PHP查找字串中是否有子字串:

32、五個有關陣列處理函數?

In_array:判斷數組中是否存在某個元素

array_reverse() 將陣列中的元素倒敘,傳回值為倒敘之後的陣列。

array_splice(array1,start,length,array2) 從陣列中移除對應的元素,並用新元素取代它

array_push() (進堆疊)在陣列的尾部新增一個或多個元素,

array_pop() (出棧)從陣列的中刪除最後一個元素

33、跨域請求有哪幾種方式? ?

JSONP

CORS

#34、儲存引擎有幾個?有什麼區別? ?

Mysiam與innodb


MyISAM 類型不支援交易處理等高階處理,而 InnoDB 類型支援。
MyISAM 類型的表強調的是效能,其執行速度比 InnoDB 類型更快,但是不提供事務支持,而 InnoDB 提供事務支持以及外部鍵等高級資料庫功能。
建立索引:alert tabletablename add index (`字段名`)

35、Redis預設連接埠號碼?資料型別?


6379

String、hash、list(鍊錶)、set(集合)、zset(有序集合)

36、 Redis實用案例--搶購秒殺、計數器、推薦、收藏案例

秒殺:


#使用Redis的list鍊錶,pop操作,即使是許多用戶同時到達也是依序執行

1、現將商品表的庫存存入佇列

2、搶購開始,設定庫存的快取週期

3、客戶端執行下單一操作,下單前判斷redis佇列庫存量

計數器:

37、MySQL中的左連結跟右連結有什麼不同? ?


Left join(左聯接):是已左表為準,左表中的記錄都會出現在查詢結果中,如果右表沒有相符的記錄,則以 null 填入。

Right join(右聯接):是以右表為準,右表中的記錄都會出現在查詢結果中,如果左表沒有相符的記錄,則以 null 填入。

Inner join(內聯):兩張表地位是平等的,符合聯結條件的記錄才會出現在查詢結果中。

38、memcache預設埠號? ? ,Memcache跟Redis的區別??

27017,28017


Memcache 快取是把所有的資料保存在記憶體中,採用hash 表的方式,把每個資料有key 和value 組成,每個key 獨一無二的,當要存取的某個值的時候先按照找到值,然後在返回結果,Memcache採用LRU 演算法來逐漸把過期的資料清除掉

39、mysql鎖定機制

40、資料庫最佳化從哪幾個方面做? ?

1、設計資料庫方面

2、建立索引

3、讀寫分離

4、快取

41、電商項目中,商品庫存什麼時候會改變? ?


1、新增商品時,商品庫存增加。庫存表針對不同的屬性,當添加

2、訂單支付成功時,庫存會減少

3、訂單支付失敗,庫存不會減少

4、客戶退貨,庫存增加

42、最佳化MySQL的查詢

1、避免全表查詢,給對應欄位建立索引

2、避免查詢語句過長,分批查詢。

3、where後面不能有函數運算

4、左原則like第一個欄位要有索引

5、在where和group by後面建立索引

 相關推薦:

PHP面試題目整理分享

php面試中長見問題記錄

#

以上是php面試必問的面試問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn