PHP初級經(jīng)典面試題目匯總(上篇)
17、isset、empty、is_null的區(qū)別
isset 判斷變量是否定義或者是否為空
變量存在返回ture,否則返回false
變量定義不賦值返回false
unset一個變量,返回false
變量賦值為null,返回false
empty:判斷變量的值是否為空,能轉換為false的都是空,為空返回true,反之返回false。
"",0,"0",NULL,F(xiàn)ALSE都認為為空,返回true
沒有任何屬性的對象都認為是空
is_null:檢測傳入的值(值、變量、表達式)是否為null
定義了,但是賦值為Null
定義了,但是沒有賦值
unset一個變量
18、前端調(diào)試的工具
- Firefox的firebug
- Chrome的開發(fā)工具
- Emmet
- JSON格式校驗工具
19. 簡單描述mysql中,索引,主鍵,唯一索引,聯(lián)合索引的區(qū)別,對數(shù)據(jù)庫的性能有什么影響(從讀寫兩方面)(新浪網(wǎng)技術部)
索引是一種特殊的文件(InnoDB數(shù)據(jù)表上的索引是表空間的一個組成部分),它們包含著對數(shù)據(jù)表里所有記錄的引用指針。
普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數(shù)據(jù)的訪問速度。
普通索引允許被索引的數(shù)據(jù)列包含重復的值。如果能確定某個數(shù)據(jù)列將只包含彼此各不相同的值,在為這個數(shù)據(jù)列創(chuàng)建索引的時候就應該用關鍵字UNIQUE把它定義為一個唯一索引。也就是說,唯一索引可以保證數(shù)據(jù)記錄的唯一性。
主鍵,是一種特殊的唯一索引,在一張表中只能定義一個主鍵索引,主鍵用于唯一標識一條記錄,使用關鍵字 PRIMARY KEY 來創(chuàng)建。
索引可以覆蓋多個數(shù)據(jù)列,如像INDEX(columnA, columnB)索引,這就是聯(lián)合索引。
索引可以極大的提高數(shù)據(jù)的查詢速度,但是會降低插入、刪除、更新表的速度,因為在執(zhí)行這些寫操作時,還要操作索引文件。
20.數(shù)據(jù)庫中的事務是什么?
事務(transaction)是作為一個單元的一組有序的數(shù)據(jù)庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用于所有其他數(shù)據(jù)庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。ACID 四大特性,原子性、隔離性、一致性、持久性。
21.了解XSS攻擊嗎?如何防止?
XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執(zhí)行攻擊者構造的腳本,然后利用不安全的Activex控件執(zhí)行惡意的行為。
使用htmlspecialchars()函數(shù)對提交的內(nèi)容進行過濾,使字符串里面的特殊符號實體化。
22.SQL注入漏洞產(chǎn)生的原因?如何防止?
SQL注入產(chǎn)生的原因:程序開發(fā)過程中不注意規(guī)范書寫sql語句和對特殊字符進行過濾,導致客戶端可以通過全局變量POST和GET提交一些sql語句正常執(zhí)行。
防止SQL注入的方式:
- 開啟配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設置
- 執(zhí)行sql語句時使用addslashes進行sql語句轉換
- Sql語句書寫盡量不要省略雙引號和單引號。
- 過濾掉sql語句中的一些關鍵詞:update、insert、delete、select、 * 。
- 提高數(shù)據(jù)庫表和字段的命名技巧,對一些重要的字段根據(jù)程序的特點命名,取不易被猜到的。
- Php配置文件中設置register_globals為off,關閉全局變量注冊
- 控制錯誤信息,不要在瀏覽器上輸出錯誤信息,將錯誤信息寫到日志文件中。
23.PHP網(wǎng)站的主要攻擊方式有哪些?
- 命令注入(Command Injection)
- eval 注入(Eval Injection)
- 客戶端腳本攻擊(Script Insertion)
- 跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS)
- SQL 注入攻擊(SQL injection)
- 跨網(wǎng)站請求偽造攻擊(Cross Site Request
Forgeries, CSRF)
- Session 會話劫持(Session Hijacking)
- Session 固定攻擊(Session Fixation)
- HTTP 響應拆分攻擊(HTTP Response Splitting)
- 文件上傳漏洞(File Upload Attack)
- 目錄穿越漏洞(Directory Traversal)
- 遠程文件包含攻擊(Remote Inclusion)
- 動態(tài)函數(shù)注入攻擊(Dynamic Variable
Evaluation)
- URL 攻擊(URL attack)
- 表單提交欺騙攻擊(Spoofed Form
Submissions)
- HTTP 請求欺騙攻擊(Spoofed HTTP Requests)
24、框架中什么是單一入口和多入口 , 單一入口的優(yōu)缺點?
- 多口就是通過訪問不同的文件來完成用戶請求。單一入口只 web 程序所有的請求都指向一個腳本文件的。
- 單一入口更容易控制權限,方便對 http 請求可以進行安全性檢查。
缺點:URL 看起來不那么美觀,特別是對搜索引擎來說不友好。
25、 對于關系型數(shù)據(jù)庫而言,索引是相當重要的概念,請回答有關索引的幾個問題:
a)、索引的目的是什么?
- 快速訪問數(shù)據(jù)表中的特定信息,提高檢索速度
- 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
- 加速表和表之間的連接
- 使用分組和排序子句進行數(shù)據(jù)檢索時,可以顯著減少查詢中分組和排序的時間
b)、索引對數(shù)據(jù)庫系統(tǒng)的負面影響是什么?
負面影響:
創(chuàng)建索引和維護索引需要耗費時間,這個時間隨著數(shù)據(jù)量的增加而增加;索引需要占用物理空間,不光是表需要占用數(shù)據(jù)空間,每個索引也需要占用物理空間;當對表進行增、刪、改、的時候索引也要動態(tài)維護,這樣就降低了數(shù)據(jù)的維護速度。
c)、為數(shù)據(jù)表建立索引的原則有哪些?
- 在最頻繁使用的、用以縮小查詢范圍的字段上建立索引。
- 在頻繁使用的、需要排序的字段上建立索引
d)、 什么情況下不宜建立索引?
- 對于查詢中很少涉及的列或者重復值比較多的列,不宜建立索引。
- 對于一些特殊的數(shù)據(jù)類型,不宜建立索引,比如文本字段(text)等。
26、 簡述在MySQL數(shù)據(jù)庫中MyISAM和InnoDB的區(qū)別
區(qū)別于其他數(shù)據(jù)庫的最重要的特點就是其插件式的表存儲引擎。切記:存儲引擎是基于表的,而不是數(shù)據(jù)庫。
InnoDB與MyISAM的區(qū)別:
InnoDB存儲引擎: 主要面向OLTP(Online Transaction Processing,在線事務處理)方面的應用,是第一個完整支持ACID事務的存儲引擎(BDB第一個支持事務的存儲引擎,已經(jīng)停止開發(fā))。
特點:
- 行鎖設計、支持外鍵;
- 支持類似于Oracle風格的一致性非鎖定讀(即:默認情況下讀取操作不會產(chǎn)生鎖);
- InnoDB將數(shù)據(jù)放在一個邏輯的表空間中,由InnoDB自身進行管理。從MySQL4.1版本開始,可以將每個InnoDB存儲引擎的表單獨存放到一個獨立的ibd文件中;
- InnoDB通過使用MVCC(多版本并發(fā)控制:讀不會阻塞寫,寫也不會阻塞讀)來獲得高并發(fā)性,并且實現(xiàn)了SQL標準的4種隔離級別(默認為REPEATABLE級別);
- InnoDB還提供了插入緩沖(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead)等高性能和高可用的功能;
- InnoDB采用了聚集(clustered)的方式來存儲表中的數(shù)據(jù),每張標的存儲都按主鍵的順序存放(如果沒有顯式的在建表時指定主鍵,InnoDB會為每一行生成一個6字節(jié)的ROWID,并以此作為主鍵);
- InnoDB表會有三個隱藏字段:除了上面提到了6字節(jié)的DB_ROW_ID外,還有6字節(jié)的DB_TX_ID(事務ID)和7字節(jié)的DB_ROLL_PTR(指向對應回滾段的地址)。這個可以通過innodb monitor看到;
MyISAM存儲引擎: 是MySQL官方提供的存儲引擎,主要面向OLAP(Online Analytical Processing,在線分析處理)方面的應用。
特點:
- 不支持事務,支持表所和全文索引。操作速度快;
- MyISAM存儲引擎表由MYD和MYI組成,MYD用來存放數(shù)據(jù)文件,MYI用來存放索引文件。MySQL數(shù)據(jù)庫只緩存其索引文件,數(shù)據(jù)文件的緩存交給操作系統(tǒng)本身來完成;
MySQL5.0版本開始,MyISAM默認支持256T的單表數(shù)據(jù);
27、 解釋MySQL外連接、內(nèi)連接與自連接的區(qū)別
先說什么是交叉連接: 交叉連接又叫笛卡爾積,它是指不使用任何條件,直接將一個表的所有記錄和另一個表中的所有記錄一一匹配。
內(nèi)連接 則是只有條件的交叉連接,根據(jù)某個條件篩選出符合條件的記錄,不符合條件的記錄不會出現(xiàn)在結果集中,即內(nèi)連接只連接匹配的行。
外連接 其結果集中不僅包含符合連接條件的行,而且還會包括左表、右表或兩個表中
的所有數(shù)據(jù)行,這三種情況依次稱之為左外連接,右外連接,和全外連接。
左外連接,也稱左連接,左表為主表,左表中的所有記錄都會出現(xiàn)在結果集中,對于那些在右表中并沒有匹配的記錄,仍然要顯示,右邊對應的那些字段值以NULL來填充。右外連接,也稱右連接,右表為主表,右表中的所有記錄都會出現(xiàn)在結果集中。左連接和右連接可以互換,MySQL目前還不支持全外連接。
28、 寫出三種以上MySQL數(shù)據(jù)庫存儲引擎的名稱(提示:不區(qū)分大小寫)
MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、
Archive、CSV、Blackhole、MaxDB 等等十幾個引擎
29、 什么是面向對象?主要特征是什么?幾大原則是什么?
面向對象是程序的一種設計模式,它利于提高程序的重用性,使程序機構更加清晰。 主要特征是:封裝、繼承、多態(tài)。
五大基本原則: 單一職責原則;開放封閉原則;替換原則; 依賴原則; 接口分離原則。
30、什么是靜態(tài)路由,其特點是什么?什么是動態(tài)路由,其特點是什么?
參考答案:
靜態(tài)路由是由系統(tǒng)管理員設計與構建的路由表規(guī)定的路由。適用于網(wǎng)關數(shù)量有限的場 合,且網(wǎng)絡拓樸結構不經(jīng)常變化的網(wǎng)絡。其缺點是不能動態(tài)地適用網(wǎng)絡狀況的變化,當 網(wǎng)絡狀況變化后必須由網(wǎng)絡管理員修改路由表。
動態(tài)路由是由路由選擇協(xié)議而動態(tài)構建的,路由協(xié)議之間通過交換各自所擁有的路由信 息實時更新路由表的內(nèi)容。動態(tài)路由可以自動學習網(wǎng)絡的拓樸結構,并更新路由表。其 缺點是路由廣播更新信息將占據(jù)大量的網(wǎng)絡帶寬。
31、使用過 Memcache 緩存嗎,如果使用過,能夠簡單的描述一下它的工作原理嗎?
Memcahce 是把所有的數(shù)據(jù)保存在內(nèi)存當中,采用 hash 表的方式,每條數(shù)據(jù)由 key 和 value 組成,每個 key 是獨一無二的,當要訪問某個值的時候先按照找到值,然后返回結果。
Memcahce 采用 LRU 算法來逐漸把過期數(shù)據(jù)清除掉。
32. 列舉流行的 Ajax 框架?說明 Ajax 實現(xiàn)原理是什么及 json 在 Ajax 中起什么作用?
流行的 Ajax 框架有 jQuery,Prototype,Dojo,MooTools。
Ajax 的工作原理是一個頁面的指定位置可以加載另一個頁面所有的輸出內(nèi)容,這樣就實現(xiàn)了一個靜態(tài)頁面也能獲取到數(shù)據(jù)庫中的返回數(shù)據(jù)信息了。所以 Ajax 技術實現(xiàn)了一個靜態(tài)網(wǎng)頁在不刷新整個頁面的情況下與服務器通信,減少了用戶等待時間,同時也從而降低了網(wǎng)絡流量,增強了客戶體驗的友好程度。
在使用 Ajax 時,涉及到數(shù)據(jù)傳輸,即將數(shù)據(jù)從服務器返回到客戶端,服務器端和客戶端分別使用不同的腳步語言來處理數(shù)據(jù),這就需要一種通用的數(shù)據(jù)格式,XML 和 json 就是最常用的兩種,而 json 比 XML 更簡單。
33、Myql中的事務回滾機制概述
事務是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位,事務回滾是指將該事務已經(jīng)完成的對數(shù)據(jù)庫的更新操作撤銷。
要同時修改數(shù)據(jù)庫中兩個不同表時,如果它們不是一個事務的話,當?shù)谝粋€表修改完,可能第二個表修改過程中出現(xiàn)了異常而沒能修改,此時就只有第二個表依舊是未修改之前的狀態(tài),而第一個表已經(jīng)被修改完畢。而當你把它們設定為一個事務的時候,當?shù)谝粋€表修改完,第二表修改出現(xiàn)異常而沒能修改,第一個表和第二個表都要回到未修改的狀態(tài),這就是所謂的事務回滾。
……
整理By--Demoer
趙公子記
轉載請注明出處
|