1. 程式人生 > >php面試題常見面試題

php面試題常見面試題

又是跳槽季,跳槽就有面試,面試難免會問一些理論問題,前面面試了幾家,做了一些面試題,記住了一部分,整理了一下:

1.cookie 和session區別

session存在伺服器,cookie存在瀏覽器;session安全性比cookie高;session為會話服務,在使用時需要開啟服務,cookie不需要開啟,可以直接使用。

2.redis和memcached區別
redis 系統庫有個快照,即突然斷電,資料還會存在,而memached 就沒了
memcached 是簡單的鍵值對,Key-Value, redis 支援的儲存方式很多,應用場景很多

redis 效能比memached 要高

3.myisam和innodb區別

MyISAM 是非事務的儲存引擎;適合用於頻繁查詢的應用;表鎖,不會出現死鎖;適合小資料,小併發
innodb是支援事務的儲存引擎;合於插入和更新操作比較多的應用;設計合理的話是行鎖(最大區別就在鎖的級別上);適合大資料,大併發。

4.require和include區別
報錯的時候,include報嚴重警告,還是會繼續執行後面程式,require報致命錯誤,不會繼續執行。

5.優化網站
(1).確認伺服器是否能支撐當前訪問量。
(2).優化資料庫訪問。
(3).禁止外部訪問連結(盜鏈), 比如圖片盜鏈。
(4).控制檔案下載。
(5).使用不同主機分流。
(6).使用瀏覽統計軟體,瞭解訪問量,有針對性的進行優化。

6.資料庫索引


是一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似於生活中書的目錄,不需要查詢整本書的內容就可以找到想要的資料,索引可以是唯一的,建立索引允許指定單個列或者是多個列,缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。

7.什麼是建構函式,什麼是解構函式,作用是什麼?
建構函式(方法)是物件建立完成後第一個被物件自動呼叫的方法。它存在於每個宣告的類中,是一個特殊的成員方法。作用是執行一些初始化的任務。Php中使用__construct()宣告構造方法,並且只能宣告一個。解構函式(方法)作用和構造方法正好相反,是物件被銷燬之前最後一個被物件自動呼叫的方法。是PHP5中新新增的內容作用是用於實現在銷燬一個物件之前執行一些特定的操作,諸如關閉檔案和釋放記憶體等。

8.說說對SQL語句優化有哪些方法?

(1)Where子句中:where表之間的連線必須寫在其他Where條件之前,那些可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾.HAVING最後。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用計算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
(6)應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描
(7)應儘量避免在 where 子句中對欄位進行表示式操作,這將導致引擎放棄使用索引而進行全表掃描

9.char和varchar的區別?
char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:
char(M)型別的資料列裡,每個值都佔用M個位元組,如果某個長度小於M,MySQL就會在它的右邊用空格字元補足.
(在檢索操作中那些填補出來的空格字元將被去掉)在varchar(M)型別的資料列裡,每個值只佔用剛好夠用的位元組再加上一個用來記錄其長度的位元組(即總長度為L+1位元組).

10.常見關係型資料庫
oracle,sql server,mysql,db2,sybase,access

11.什麼是SQL注入?
SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。一部分程式設計師在編寫程式碼的時候,沒有對使用者輸入資料的合法性進行判斷,注入者可以在表單中輸入一段資料庫查詢程式碼並提交,程式將提交的資訊拼湊生成一個完整sql語句,伺服器被欺騙而執行該條惡意的SQL命令。注入者根據程式返回的結果,成功獲取一些敏感資料,甚至控制整個伺服器,這就是SQL注入。

12.ThinkPHP如何防止SQL注入
(1)查詢條件儘量使用陣列方式,這是更為安全的方式;
(2)如果不得已必須使用字串查詢條件,使用預處理機制;
(3)開啟資料欄位型別驗證,可以對數值資料型別做強制轉換;(3.1版本開始已經強制進行欄位型別驗證了)
(4)使用自動驗證和自動完成機制進行鍼對應用的自定義過濾;
(5)使用欄位型別檢查、自動驗證和自動完成機制等避免惡意資料的輸入。

13.事務
事務是一系列的操作,是資料庫應用的基本邏輯單位,事務的特性:原子性,要麼全部被執行,要麼全部不被執行;一致性和可串性:事務的執行使資料庫從一種正確狀態換成另一種正確狀態。隔離性:在事務正確提交前,不允許把該事務的任何資料提交給任何其他事務。永續性:事務提交成功後,其結果將永遠儲存在資料庫中。

14.程式開發中,如何提高程式執行效率
優化sql語句,查詢中儘量不使用select*,用哪個欄位查哪個欄位;少用子查詢,可以用表連線代替;少用模糊查詢;資料表建立索引;對經常用到的資料生成快取。

15.mvc哪三層,有什麼優點
M:模型層,V:檢視層,C:控制器
由控制器呼叫模型處理資料,然後將資料對映到檢視層進行顯示,優點是可以實現程式碼重用性,避免程式碼冗餘,M和V實現程式碼分離,從而使同一個程式可以使用不同的表現形式。

16.print,echo,print_r有什麼區別
echo和print都可輸出,echo不是函式,沒有返回值,而print是一個函式,有返回值,如果只是輸出,echo會更快,而print_r通常用於列印變數相關的資訊,一般在除錯的時候用。
print是列印字串
prin_r列印複合型別,陣列或者物件