PHP初級經典面試題目彙總

1七、isset、empty、is_null的區別

isset 判斷變量是否認義或者是否爲空html

變量存在返回ture,不然返回false
  變量定義不賦值返回false
  unset一個變量,返回false
  變量賦值爲null,返回false

empty:判斷變量的值是否爲空,能轉換爲false的都是空,爲空返回true,反之返回false。前端

"",0,"0",NULL,FALSE都認爲爲空,返回true
    沒有任何屬性的對象都認爲是空

is_null:檢測傳入的值(值、變量、表達式)是否爲nullmysql

定義了,可是賦值爲Null
    定義了,可是沒有賦值
    unset一個變量
1八、前端調試的工具
  • Firefox的firebug
  • Chrome的開發工具
  • Emmet
  • JSON格式校驗工具
19. 簡單描述mysql中,索引,主鍵,惟一索引,聯合索引的區別,對數據庫的性能有什麼影響(從讀寫兩方面)(新浪網技術部)

索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表裏全部記錄的引用指針。
普通索引(由關鍵字KEY或INDEX定義的索引)的惟一任務是加快對數據的訪問速度。
普通索引容許被索引的數據列包含重複的值。若是能肯定某個數據列將只包含彼此各不相同的值,在爲這個數據列建立索引的時候就應該用關鍵字UNIQUE把它定義爲一個惟一索引。也就是說,惟一索引能夠保證數據記錄的惟一性。
主鍵,是一種特殊的惟一索引,在一張表中只能定義一個主鍵索引,主鍵用於惟一標識一條記錄,使用關鍵字 PRIMARY KEY 來建立。
索引能夠覆蓋多個數據列,如像INDEX(columnA, columnB)索引,這就是聯合索引。
索引能夠極大的提升數據的查詢速度,可是會下降插入、刪除、更新表的速度,由於在執行這些寫操做時,還要操做索引文件。 web

20.數據庫中的事務是什麼?

事務(transaction)是做爲一個單元的一組有序的數據庫操做。若是組中的全部操做都成功,則認爲事務成功,即便只有一個操做失敗,事務也不成功。若是全部操做完成,事務則提交,其修改將做用於全部其餘數據庫進程。若是一個操做失敗,則事務將回滾,該事務全部操做的影響都將取消。ACID 四大特性,原子性、隔離性、一致性、持久性。 算法

21.瞭解XSS攻擊嗎?如何防止?

XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構造的腳本,而後利用不安全的Activex控件執行惡意的行爲。
使用htmlspecialchars()函數對提交的內容進行過濾,使字符串裏面的特殊符號實體化。 sql

22.SQL注入漏洞產生的緣由?如何防止?

SQL注入產生的緣由:程序開發過程當中不注意規範書寫sql語句和對特殊字符進行過濾,致使客戶端能夠經過全局變量POST和GET提交一些sql語句正常執行。 數據庫

防止SQL注入的方式:
  1. 開啓配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設置
  2. 執行sql語句時使用addslashes進行sql語句轉換
  3. Sql語句書寫儘可能不要省略雙引號和單引號。
  4. 過濾掉sql語句中的一些關鍵詞:update、insert、delete、select、 * 。
  5. 提升數據庫表和字段的命名技巧,對一些重要的字段根據程序的特色命名,取不易被猜到的。
  6. Php配置文件中設置register_globals爲off,關閉全局變量註冊
  7. 控制錯誤信息,不要在瀏覽器上輸出錯誤信息,將錯誤信息寫到日誌文件中。
23.PHP網站的主要攻擊方式有哪些?
  1. 命令注入(Command Injection)
  2. eval 注入(Eval Injection)
  3. 客戶端腳本攻擊(Script Insertion)
  4. 跨網站腳本攻擊(Cross Site Scripting, XSS)
  5. SQL 注入攻擊(SQL injection)
  6. 跨網站請求僞造攻擊(Cross Site Request
    Forgeries, CSRF)
  7. Session 會話劫持(Session Hijacking)
  8. Session 固定攻擊(Session Fixation)
  9. HTTP 響應拆分攻擊(HTTP Response Splitting)
  10. 文件上傳漏洞(File Upload Attack)
  11. 目錄穿越漏洞(Directory Traversal)
  12. 遠程文件包含攻擊(Remote Inclusion)
  13. 動態函數注入攻擊(Dynamic Variable
    Evaluation)
  14. URL 攻擊(URL attack)
  15. 表單提交欺騙攻擊(Spoofed Form
    Submissions)
  16. HTTP 請求欺騙攻擊(Spoofed HTTP Requests)
2四、框架中什麼是單一入口和多入口 , 單一入口的優缺點?
  1. 多口就是經過訪問不一樣的文件來完成用戶請求。單一入口只 web 程序全部的請求都指向一個腳本文件的。
  2. 單一入口更容易控制權限,方便對 http 請求能夠進行安全性檢查。
    缺點:URL 看起來不那麼美觀,特別是對搜索引擎來講不友好。
2五、 對於關係型數據庫而言,索引是至關重要的概念,請回答有關索引的幾個問題:
a)、索引的目的是什麼?
  1. 快速訪問數據表中的特定信息,提升檢索速度
  2. 建立惟一性索引,保證數據庫表中每一行數據的惟一性。
  3. 加速表和表之間的鏈接
  4. 使用分組和排序子句進行數據檢索時,能夠顯著減小查詢中分組和排序的時間
b)、索引對數據庫系統的負面影響是什麼?

負面影響:
建立索引和維護索引須要耗費時間,這個時間隨着數據量的增長而增長;索引須要佔用物理空間,不光是表須要佔用數據空間,每一個索引也須要佔用物理空間;當對錶進行增、刪、改、的時候索引也要動態維護,這樣就下降了數據的維護速度。 json

c)、爲數據表創建索引的原則有哪些?
  1. 在最頻繁使用的、用以縮小查詢範圍的字段上創建索引。
  2. 在頻繁使用的、須要排序的字段上創建索引
d)、 什麼狀況下不宜創建索引?
  1. 對於查詢中不多涉及的列或者重複值比較多的列,不宜創建索引。
  2. 對於一些特殊的數據類型,不宜創建索引,好比文本字段(text)等。
2六、 簡述在MySQL數據庫中MyISAM和InnoDB的區別

區別於其餘數據庫的最重要的特色就是其插件式的表存儲引擎。切記:存儲引擎是基於表的,而不是數據庫。 設計模式

InnoDB與MyISAM的區別: 瀏覽器

InnoDB存儲引擎: 主要面向OLTP(Online Transaction Processing,在線事務處理)方面的應用,是第一個完整支持ACID事務的存儲引擎(BDB第一個支持事務的存儲引擎,已經中止開發)。

特色:

  • 行鎖設計、支持外鍵;
  • 支持相似於Oracle風格的一致性非鎖定讀(即:默認狀況下讀取操做不會產生鎖);
  • InnoDB將數據放在一個邏輯的表空間中,由InnoDB自身進行管理。從MySQL4.1版本開始,能夠將每一個InnoDB存儲引擎的表單獨存放到一個獨立的ibd文件中;
  • InnoDB經過使用MVCC(多版本併發控制:讀不會阻塞寫,寫也不會阻塞讀)來得到高併發性,而且實現了SQL標準的4種隔離級別(默認爲REPEATABLE級別);
  • InnoDB還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用的功能;
  • InnoDB採用了彙集(clustered)的方式來存儲表中的數據,每張標的存儲都按主鍵的順序存放(若是沒有顯式的在建表時指定主鍵,InnoDB會爲每一行生成一個6字節的ROWID,並以此做爲主鍵);
  • InnoDB表會有三個隱藏字段:除了上面提到了6字節的DB_ROW_ID外,還有6字節的DB_TX_ID(事務ID)和7字節的DB_ROLL_PTR(指向對應回滾段的地址)。這個能夠經過innodb monitor看到;

MyISAM存儲引擎: 是MySQL官方提供的存儲引擎,主要面向OLAP(Online Analytical Processing,在線分析處理)方面的應用。
特色:

  • 不支持事務,支持表所和全文索引。操做速度快;
  • MyISAM存儲引擎表由MYD和MYI組成,MYD用來存放數據文件,MYI用來存放索引文件。MySQL數據庫只緩存其索引文件,數據文件的緩存交給操做系統自己來完成;
    MySQL5.0版本開始,MyISAM默認支持256T的單表數據;
2七、 解釋MySQL外鏈接、內鏈接與自鏈接的區別

先說什麼是交叉鏈接: 交叉鏈接又叫笛卡爾積,它是指不使用任何條件,直接將一個表的全部記錄和另外一個表中的全部記錄一一匹配。

內鏈接 則是隻有條件的交叉鏈接,根據某個條件篩選出符合條件的記錄,不符合條件的記錄不會出如今結果集中,即內鏈接只鏈接匹配的行。
外鏈接 其結果集中不只包含符合鏈接條件的行,並且還會包括左表、右表或兩個表中
的全部數據行,這三種狀況依次稱之爲左外鏈接,右外鏈接,和全外鏈接。

左外鏈接,也稱左鏈接,左表爲主表,左表中的全部記錄都會出如今結果集中,對於那些在右表中並無匹配的記錄,仍然要顯示,右邊對應的那些字段值以NULL來填充。右外鏈接,也稱右鏈接,右表爲主表,右表中的全部記錄都會出如今結果集中。左鏈接和右鏈接能夠互換,MySQL目前還不支持全外鏈接。

2八、 寫出三種以上MySQL數據庫存儲引擎的名稱(提示:不區分大小寫)

MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、
Archive、CSV、Blackhole、MaxDB 等等十幾個引擎

2九、 什麼是面向對象?主要特徵是什麼?幾大原則是什麼?

面向對象是程序的一種設計模式,它利於提升程序的重用性,使程序機構更加清晰。 主要特徵是:封裝、繼承、多態。
五大基本原則: 單一職責原則;開放封閉原則;替換原則; 依賴原則; 接口分離原則。

30、什麼是靜態路由,其特色是什麼?什麼是動態路由,其特色是什麼?

 參考答案:
  靜態路由是由系統管理員設計與構建的路由表規定的路由。適用於網關數量有限的場 合,且網絡拓樸結構不常常變化的網絡。其缺點是不能動態地適用網絡情況的變化,當 網絡情況變化後必須由網絡管理員修改路由表。
動態路由是由路由選擇協議而動態構建的,路由協議之間經過交換各自所擁有的路由信 息實時更新路由表的內容。動態路由能夠自動學習網絡的拓樸結構,並更新路由表。其 缺點是路由廣播更新信息將佔據大量的網絡帶寬。

3一、使用過 Memcache 緩存嗎,若是使用過,可以簡單的描述一下它的工做原理嗎?

Memcahce 是把全部的數據保存在內存當中,採用 hash 表的方式,每條數據由 key 和 value 組成,每一個 key 是獨一無二的,當要訪問某個值的時候先按照找到值,而後返回結果。
Memcahce 採用 LRU 算法來逐漸把過時數據清除掉。

32. 列舉流行的 Ajax 框架?說明 Ajax 實現原理是什麼及 json 在 Ajax 中起什麼做用?

流行的 Ajax 框架有 jQuery,Prototype,Dojo,MooTools。

Ajax 的工做原理是一個頁面的指定位置能夠加載另外一個頁面全部的輸出內容,這樣就實現了一個靜態頁面也能獲取到數據庫中的返回數據信息了。因此 Ajax 技術實現了一個靜態網頁在不刷新整個頁面的狀況下與服務器通訊,減小了用戶等待時間,同時也從而下降了網絡流量,加強了客戶體驗的友好程度。
在使用 Ajax 時,涉及到數據傳輸,即將數據從服務器返回到客戶端,服務器端和客戶端分別使用不一樣的腳步語言來處理數據,這就須要一種通用的數據格式,XML 和 json 就是最經常使用的兩種,而 json 比 XML 更簡單。

3三、Myql中的事務回滾機制概述

事務是用戶定義的一個數據庫操做序列,這些操做要麼全作要麼全不作,是一個不可分割的工做單位,事務回滾是指將該事務已經完成的對數據庫的更新操做撤銷。

  要同時修改數據庫中兩個不一樣表時,若是它們不是一個事務的話,當第一個表修改完,可能第二個表修改過程當中出現了異常而沒能修改,此時就只有第二個表依舊是未修改以前的狀態,而第一個表已經被修改完畢。而當你把它們設定爲一個事務的時候,當第一個表修改完,第二表修改出現異常而沒能修改,第一個表和第二個表都要回到未修改的狀態,這就是所謂的事務回滾。

……

整理By--Demoer

相關文章
相關標籤/搜索