PHP初級(jí)經(jīng)典面試題目匯總(下篇)

PHP初級(jí)經(jīng)典面試題目匯總(上篇)

17、isset、empty、is_null的區(qū)別

isset 判斷變量是否定義或者是否為空

  變量存在返回ture,否則返回false
  變量定義不賦值返回false
  unset一個(gè)變量,返回false
  變量賦值為null,返回false

empty:判斷變量的值是否為空,能轉(zhuǎn)換為false的都是空,為空返回true,反之返回false。

    "",0,"0",NULL,F(xiàn)ALSE都認(rèn)為為空,返回true
    沒有任何屬性的對象都認(rèn)為是空

is_null:檢測傳入的值(值、變量、表達(dá)式)是否為null

    定義了,但是賦值為Null
    定義了,但是沒有賦值
    unset一個(gè)變量

18、前端調(diào)試的工具

  • Firefox的firebug
  • Chrome的開發(fā)工具
  • Emmet
  • JSON格式校驗(yàn)工具

19. 簡單描述mysql中,索引,主鍵,唯一索引,聯(lián)合索引的區(qū)別,對數(shù)據(jù)庫的性能有什么影響(從讀寫兩方面)(新浪網(wǎng)技術(shù)部)

索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個(gè)組成部分),它們包含著對數(shù)據(jù)表里所有記錄的引用指針。
普通索引(由關(guān)鍵字KEY或INDEX定義的索引)的唯一任務(wù)是加快對數(shù)據(jù)的訪問速度。
普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。如果能確定某個(gè)數(shù)據(jù)列將只包含彼此各不相同的值,在為這個(gè)數(shù)據(jù)列創(chuàng)建索引的時(shí)候就應(yīng)該用關(guān)鍵字UNIQUE把它定義為一個(gè)唯一索引。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。
主鍵,是一種特殊的唯一索引,在一張表中只能定義一個(gè)主鍵索引,主鍵用于唯一標(biāo)識(shí)一條記錄,使用關(guān)鍵字 PRIMARY KEY 來創(chuàng)建。
索引可以覆蓋多個(gè)數(shù)據(jù)列,如像INDEX(columnA, columnB)索引,這就是聯(lián)合索引。
索引可以極大的提高數(shù)據(jù)的查詢速度,但是會(huì)降低插入、刪除、更新表的速度,因?yàn)樵趫?zhí)行這些寫操作時(shí),還要操作索引文件。

20.數(shù)據(jù)庫中的事務(wù)是什么?

事務(wù)(transaction)是作為一個(gè)單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功,即使只有一個(gè)操作失敗,事務(wù)也不成功。如果所有操作完成,事務(wù)則提交,其修改將作用于所有其他數(shù)據(jù)庫進(jìn)程。如果一個(gè)操作失敗,則事務(wù)將回滾,該事務(wù)所有操作的影響都將取消。ACID 四大特性,原子性、隔離性、一致性、持久性。

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

XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個(gè)特權(quán)模式去執(zhí)行攻擊者構(gòu)造的腳本,然后利用不安全的Activex控件執(zhí)行惡意的行為。
使用htmlspecialchars()函數(shù)對提交的內(nèi)容進(jìn)行過濾,使字符串里面的特殊符號(hào)實(shí)體化。

22.SQL注入漏洞產(chǎn)生的原因?如何防止?

SQL注入產(chǎn)生的原因:程序開發(fā)過程中不注意規(guī)范書寫sql語句和對特殊字符進(jìn)行過濾,導(dǎo)致客戶端可以通過全局變量POST和GET提交一些sql語句正常執(zhí)行。

防止SQL注入的方式:
  1. 開啟配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設(shè)置
  2. 執(zhí)行sql語句時(shí)使用addslashes進(jìn)行sql語句轉(zhuǎn)換
  3. Sql語句書寫盡量不要省略雙引號(hào)和單引號(hào)。
  4. 過濾掉sql語句中的一些關(guān)鍵詞:update、insert、delete、select、 * 。
  5. 提高數(shù)據(jù)庫表和字段的命名技巧,對一些重要的字段根據(jù)程序的特點(diǎn)命名,取不易被猜到的。
  6. Php配置文件中設(shè)置register_globals為off,關(guān)閉全局變量注冊
  7. 控制錯(cuò)誤信息,不要在瀏覽器上輸出錯(cuò)誤信息,將錯(cuò)誤信息寫到日志文件中。

23.PHP網(wǎng)站的主要攻擊方式有哪些?

  1. 命令注入(Command Injection)
  2. eval 注入(Eval Injection)
  3. 客戶端腳本攻擊(Script Insertion)
  4. 跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS)
  5. SQL 注入攻擊(SQL injection)
  6. 跨網(wǎng)站請求偽造攻擊(Cross Site Request
    Forgeries, CSRF)
  7. Session 會(huì)話劫持(Session Hijacking)
  8. Session 固定攻擊(Session Fixation)
  9. HTTP 響應(yīng)拆分攻擊(HTTP Response Splitting)
  10. 文件上傳漏洞(File Upload Attack)
  11. 目錄穿越漏洞(Directory Traversal)
  12. 遠(yuǎn)程文件包含攻擊(Remote Inclusion)
  13. 動(dòng)態(tài)函數(shù)注入攻擊(Dynamic Variable
    Evaluation)
  14. URL 攻擊(URL attack)
  15. 表單提交欺騙攻擊(Spoofed Form
    Submissions)
  16. HTTP 請求欺騙攻擊(Spoofed HTTP Requests)

24、框架中什么是單一入口和多入口 , 單一入口的優(yōu)缺點(diǎn)?

  1. 多口就是通過訪問不同的文件來完成用戶請求。單一入口只 web 程序所有的請求都指向一個(gè)腳本文件的。
  2. 單一入口更容易控制權(quán)限,方便對 http 請求可以進(jìn)行安全性檢查。
    缺點(diǎn):URL 看起來不那么美觀,特別是對搜索引擎來說不友好。

25、 對于關(guān)系型數(shù)據(jù)庫而言,索引是相當(dāng)重要的概念,請回答有關(guān)索引的幾個(gè)問題:

a)、索引的目的是什么?
  1. 快速訪問數(shù)據(jù)表中的特定信息,提高檢索速度
  2. 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
  3. 加速表和表之間的連接
  4. 使用分組和排序子句進(jìn)行數(shù)據(jù)檢索時(shí),可以顯著減少查詢中分組和排序的時(shí)間
b)、索引對數(shù)據(jù)庫系統(tǒng)的負(fù)面影響是什么?

負(fù)面影響:
創(chuàng)建索引和維護(hù)索引需要耗費(fèi)時(shí)間,這個(gè)時(shí)間隨著數(shù)據(jù)量的增加而增加;索引需要占用物理空間,不光是表需要占用數(shù)據(jù)空間,每個(gè)索引也需要占用物理空間;當(dāng)對表進(jìn)行增、刪、改、的時(shí)候索引也要?jiǎng)討B(tài)維護(hù),這樣就降低了數(shù)據(jù)的維護(hù)速度。

c)、為數(shù)據(jù)表建立索引的原則有哪些?
  1. 在最頻繁使用的、用以縮小查詢范圍的字段上建立索引。
  2. 在頻繁使用的、需要排序的字段上建立索引
d)、 什么情況下不宜建立索引?
  1. 對于查詢中很少涉及的列或者重復(fù)值比較多的列,不宜建立索引。
  2. 對于一些特殊的數(shù)據(jù)類型,不宜建立索引,比如文本字段(text)等。

26、 簡述在MySQL數(shù)據(jù)庫中MyISAM和InnoDB的區(qū)別

區(qū)別于其他數(shù)據(jù)庫的最重要的特點(diǎn)就是其插件式的表存儲(chǔ)引擎。切記:存儲(chǔ)引擎是基于表的,而不是數(shù)據(jù)庫。

InnoDB與MyISAM的區(qū)別:

InnoDB存儲(chǔ)引擎: 主要面向OLTP(Online Transaction Processing,在線事務(wù)處理)方面的應(yīng)用,是第一個(gè)完整支持ACID事務(wù)的存儲(chǔ)引擎(BDB第一個(gè)支持事務(wù)的存儲(chǔ)引擎,已經(jīng)停止開發(fā))。

特點(diǎn):

  • 行鎖設(shè)計(jì)、支持外鍵;
  • 支持類似于Oracle風(fēng)格的一致性非鎖定讀(即:默認(rèn)情況下讀取操作不會(huì)產(chǎn)生鎖);
  • InnoDB將數(shù)據(jù)放在一個(gè)邏輯的表空間中,由InnoDB自身進(jìn)行管理。從MySQL4.1版本開始,可以將每個(gè)InnoDB存儲(chǔ)引擎的表單獨(dú)存放到一個(gè)獨(dú)立的ibd文件中;
  • InnoDB通過使用MVCC(多版本并發(fā)控制:讀不會(huì)阻塞寫,寫也不會(huì)阻塞讀)來獲得高并發(fā)性,并且實(shí)現(xiàn)了SQL標(biāo)準(zhǔn)的4種隔離級(jí)別(默認(rèn)為REPEATABLE級(jí)別);
  • InnoDB還提供了插入緩沖(insert buffer)、二次寫(double write)、自適應(yīng)哈希索引(adaptive hash index)、預(yù)讀(read ahead)等高性能和高可用的功能;
  • InnoDB采用了聚集(clustered)的方式來存儲(chǔ)表中的數(shù)據(jù),每張標(biāo)的存儲(chǔ)都按主鍵的順序存放(如果沒有顯式的在建表時(shí)指定主鍵,InnoDB會(huì)為每一行生成一個(gè)6字節(jié)的ROWID,并以此作為主鍵);
  • InnoDB表會(huì)有三個(gè)隱藏字段:除了上面提到了6字節(jié)的DB_ROW_ID外,還有6字節(jié)的DB_TX_ID(事務(wù)ID)和7字節(jié)的DB_ROLL_PTR(指向?qū)?yīng)回滾段的地址)。這個(gè)可以通過innodb monitor看到;

MyISAM存儲(chǔ)引擎: 是MySQL官方提供的存儲(chǔ)引擎,主要面向OLAP(Online Analytical Processing,在線分析處理)方面的應(yīng)用。
特點(diǎn):

  • 不支持事務(wù),支持表所和全文索引。操作速度快;
  • MyISAM存儲(chǔ)引擎表由MYD和MYI組成,MYD用來存放數(shù)據(jù)文件,MYI用來存放索引文件。MySQL數(shù)據(jù)庫只緩存其索引文件,數(shù)據(jù)文件的緩存交給操作系統(tǒng)本身來完成;
    MySQL5.0版本開始,MyISAM默認(rèn)支持256T的單表數(shù)據(jù);

27、 解釋MySQL外連接、內(nèi)連接與自連接的區(qū)別

先說什么是交叉連接: 交叉連接又叫笛卡爾積,它是指不使用任何條件,直接將一個(gè)表的所有記錄和另一個(gè)表中的所有記錄一一匹配。

內(nèi)連接 則是只有條件的交叉連接,根據(jù)某個(gè)條件篩選出符合條件的記錄,不符合條件的記錄不會(huì)出現(xiàn)在結(jié)果集中,即內(nèi)連接只連接匹配的行。
外連接 其結(jié)果集中不僅包含符合連接條件的行,而且還會(huì)包括左表、右表或兩個(gè)表中
的所有數(shù)據(jù)行,這三種情況依次稱之為左外連接,右外連接,和全外連接。

左外連接,也稱左連接,左表為主表,左表中的所有記錄都會(huì)出現(xiàn)在結(jié)果集中,對于那些在右表中并沒有匹配的記錄,仍然要顯示,右邊對應(yīng)的那些字段值以NULL來填充。右外連接,也稱右連接,右表為主表,右表中的所有記錄都會(huì)出現(xiàn)在結(jié)果集中。左連接和右連接可以互換,MySQL目前還不支持全外連接。

28、 寫出三種以上MySQL數(shù)據(jù)庫存儲(chǔ)引擎的名稱(提示:不區(qū)分大小寫)

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

29、 什么是面向?qū)ο??主要特征是什么?幾大原則是什么?

面向?qū)ο笫浅绦虻囊环N設(shè)計(jì)模式,它利于提高程序的重用性,使程序機(jī)構(gòu)更加清晰。 主要特征是:封裝、繼承、多態(tài)。
五大基本原則: 單一職責(zé)原則;開放封閉原則;替換原則; 依賴原則; 接口分離原則。

30、什么是靜態(tài)路由,其特點(diǎn)是什么?什么是動(dòng)態(tài)路由,其特點(diǎn)是什么?

參考答案:
  靜態(tài)路由是由系統(tǒng)管理員設(shè)計(jì)與構(gòu)建的路由表規(guī)定的路由。適用于網(wǎng)關(guān)數(shù)量有限的場 合,且網(wǎng)絡(luò)拓樸結(jié)構(gòu)不經(jīng)常變化的網(wǎng)絡(luò)。其缺點(diǎn)是不能動(dòng)態(tài)地適用網(wǎng)絡(luò)狀況的變化,當(dāng) 網(wǎng)絡(luò)狀況變化后必須由網(wǎng)絡(luò)管理員修改路由表。
動(dòng)態(tài)路由是由路由選擇協(xié)議而動(dòng)態(tài)構(gòu)建的,路由協(xié)議之間通過交換各自所擁有的路由信 息實(shí)時(shí)更新路由表的內(nèi)容。動(dòng)態(tài)路由可以自動(dòng)學(xué)習(xí)網(wǎng)絡(luò)的拓樸結(jié)構(gòu),并更新路由表。其 缺點(diǎn)是路由廣播更新信息將占據(jù)大量的網(wǎng)絡(luò)帶寬。

31、使用過 Memcache 緩存嗎,如果使用過,能夠簡單的描述一下它的工作原理嗎?

Memcahce 是把所有的數(shù)據(jù)保存在內(nèi)存當(dāng)中,采用 hash 表的方式,每條數(shù)據(jù)由 key 和 value 組成,每個(gè) key 是獨(dú)一無二的,當(dāng)要訪問某個(gè)值的時(shí)候先按照找到值,然后返回結(jié)果。
Memcahce 采用 LRU 算法來逐漸把過期數(shù)據(jù)清除掉。

32. 列舉流行的 Ajax 框架?說明 Ajax 實(shí)現(xiàn)原理是什么及 json 在 Ajax 中起什么作用?

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

Ajax 的工作原理是一個(gè)頁面的指定位置可以加載另一個(gè)頁面所有的輸出內(nèi)容,這樣就實(shí)現(xiàn)了一個(gè)靜態(tài)頁面也能獲取到數(shù)據(jù)庫中的返回?cái)?shù)據(jù)信息了。所以 Ajax 技術(shù)實(shí)現(xiàn)了一個(gè)靜態(tài)網(wǎng)頁在不刷新整個(gè)頁面的情況下與服務(wù)器通信,減少了用戶等待時(shí)間,同時(shí)也從而降低了網(wǎng)絡(luò)流量,增強(qiáng)了客戶體驗(yàn)的友好程度。
在使用 Ajax 時(shí),涉及到數(shù)據(jù)傳輸,即將數(shù)據(jù)從服務(wù)器返回到客戶端,服務(wù)器端和客戶端分別使用不同的腳步語言來處理數(shù)據(jù),這就需要一種通用的數(shù)據(jù)格式,XML 和 json 就是最常用的兩種,而 json 比 XML 更簡單。

33、Myql中的事務(wù)回滾機(jī)制概述

事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位,事務(wù)回滾是指將該事務(wù)已經(jīng)完成的對數(shù)據(jù)庫的更新操作撤銷。

要同時(shí)修改數(shù)據(jù)庫中兩個(gè)不同表時(shí),如果它們不是一個(gè)事務(wù)的話,當(dāng)?shù)谝粋€(gè)表修改完,可能第二個(gè)表修改過程中出現(xiàn)了異常而沒能修改,此時(shí)就只有第二個(gè)表依舊是未修改之前的狀態(tài),而第一個(gè)表已經(jīng)被修改完畢。而當(dāng)你把它們設(shè)定為一個(gè)事務(wù)的時(shí)候,當(dāng)?shù)谝粋€(gè)表修改完,第二表修改出現(xiàn)異常而沒能修改,第一個(gè)表和第二個(gè)表都要回到未修改的狀態(tài),這就是所謂的事務(wù)回滾。

……

整理By--Demoer
轉(zhuǎn)載請注明出處

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容