php面試題常見面試題

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

1.cookie 和session區別程序員

session存在服務器,cookie存在瀏覽器;session安全性比cookie高;session爲會話服務,在使用時須要開啓服務,cookie不須要開啓,能夠直接使用。面試

2.redis和memcached區別
redis 系統庫有個快照,即忽然斷電,數據還會存在,而memached 就沒了
memcached 是簡單的鍵值對,Key-Value, redis 支持的存儲方式不少,應用場景不少redis

 

redis 性能比memached 要高sql

 

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打印複合類型,數組或者對象  

相關文章
相關標籤/搜索