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注入的方式:
- 開啟配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設(shè)置
- 執(zhí)行sql語句時(shí)使用addslashes進(jìn)行sql語句轉(zhuǎn)換
- Sql語句書寫盡量不要省略雙引號(hào)和單引號(hào)。
- 過濾掉sql語句中的一些關(guān)鍵詞:update、insert、delete、select、 * 。
- 提高數(shù)據(jù)庫表和字段的命名技巧,對一些重要的字段根據(jù)程序的特點(diǎn)命名,取不易被猜到的。
- Php配置文件中設(shè)置register_globals為off,關(guān)閉全局變量注冊
- 控制錯(cuò)誤信息,不要在瀏覽器上輸出錯(cuò)誤信息,將錯(cuò)誤信息寫到日志文件中。
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 會(huì)話劫持(Session Hijacking)
- Session 固定攻擊(Session Fixation)
- HTTP 響應(yīng)拆分攻擊(HTTP Response Splitting)
- 文件上傳漏洞(File Upload Attack)
- 目錄穿越漏洞(Directory Traversal)
- 遠(yuǎn)程文件包含攻擊(Remote Inclusion)
- 動(dòng)態(tài)函數(shù)注入攻擊(Dynamic Variable
Evaluation) - URL 攻擊(URL attack)
- 表單提交欺騙攻擊(Spoofed Form
Submissions) - HTTP 請求欺騙攻擊(Spoofed HTTP Requests)
24、框架中什么是單一入口和多入口 , 單一入口的優(yōu)缺點(diǎn)?
- 多口就是通過訪問不同的文件來完成用戶請求。單一入口只 web 程序所有的請求都指向一個(gè)腳本文件的。
- 單一入口更容易控制權(quán)限,方便對 http 請求可以進(jìn)行安全性檢查。
缺點(diǎn):URL 看起來不那么美觀,特別是對搜索引擎來說不友好。
25、 對于關(guān)系型數(shù)據(jù)庫而言,索引是相當(dāng)重要的概念,請回答有關(guān)索引的幾個(gè)問題:
a)、索引的目的是什么?
- 快速訪問數(shù)據(jù)表中的特定信息,提高檢索速度
- 創(chuàng)建唯一性索引,保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
- 加速表和表之間的連接
- 使用分組和排序子句進(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ù)表建立索引的原則有哪些?
- 在最頻繁使用的、用以縮小查詢范圍的字段上建立索引。
- 在頻繁使用的、需要排序的字段上建立索引
d)、 什么情況下不宜建立索引?
- 對于查詢中很少涉及的列或者重復(fù)值比較多的列,不宜建立索引。
- 對于一些特殊的數(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)載請注明出處