天天看點

php面試知識點,PHP面試知識點

一.redis和memcached

Redis 和 Memcache 都是基于記憶體的資料存儲系統。Memcached是高性能分布式記憶體緩存服務;Redis是一個開源的key-value存儲系統。與Memcached類似,Redis将大部分資料存儲在記憶體中,支援的資料類型包括:字元串、哈希 表、連結清單、等資料類型的相關操作

1.儲存的資料類型

redis:1.String(字元串)512MB。  2.Hash(哈希) 3.List(清單) 4.Set(集合) 5.zset(sorted set:有序集合)

Memcached:僅支援簡單的key-value結構的資料

2.差別

1、Redis和Memcache都是将資料存放在記憶體中,都是記憶體資料庫。不過memcache還可用于緩存其他東西,例如圖檔、視訊等等;

2、Redis不僅僅支援簡單的k/v類型的資料,同時還提供list,set,hash等資料結構的存儲;

3、虛拟記憶體--Redis當實體記憶體用完時,可以将一些很久沒用到的value 交換到磁盤;

4、過期政策--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定,例如expire name 10;

5、分布式--設定memcache叢集,利用magent做一主多從;redis可以做一主多從。都可以一主一從;

6、存儲資料安全--memcache挂掉後,資料沒了;redis可以定期儲存到磁盤(持久化);

7、災難恢複--memcache挂掉後,資料不可恢複; redis資料丢失後可以通過aof恢複;

8、Redis支援資料的備份,即master-slave模式的資料備份;

9、應用場景不一樣:Redis出來作為NoSQL資料庫使用外,還能用做消息隊列、資料堆棧和資料緩存等;Memcached适合于緩存SQL語句、資料集、使用者臨時性資料、延遲查詢資料和session等。

二.mysql資料庫優化

InnoDB支援表、行(預設)級鎖,而MyISAM支援表級鎖

InnoDB支援事務,MyISAM不支援

InnoDB支援外鍵,而MyISAM不支援

一個表最多隻能建立一個主鍵,但可以建立多個唯一索引。

1、選取最适用的字段屬性,盡量把字段設定為NOTNULL

2、使用連接配接(JOIN)來代替子查詢(Sub-Queries)

3、使用事務 保持資料庫中資料的一緻性和完整性

4、使用外鍵

5、使用索引

三.PHP開發安全機制

1. 禁用遠端代碼執行

2.将PHP錯誤記入日志

3.為了確定程式的安全性,健壯性,資料驗證應該包括

1、php一些安全配置

(1)關閉php提示錯誤功能

(2)關閉一些“壞功能”

(3)嚴格配置檔案權限。

2、嚴格的資料驗證,你的使用者不全是“好”人

2.1為了確定程式的安全性,健壯性,資料驗證應該包括内容。

2.2程式員容易漏掉point或者說需要注意的事項

3、防注入

3.1簡單判斷是否有注入漏洞以及原理

3.2常見的mysql注入語句

(1)不用使用者名和密碼

(2)在不輸入密碼的情況下,利用某使用者

(3)猜解某使用者密碼

(4)插入資料時提權

(5)更新提權和插入提權同理

(6)惡意更新和删除

(7)union、join等

(8)通配符号%、_

(9)還有很多猜測表資訊的注入sql

33防注入的一些方法

2.3.1 php可用于防注入的一些函數和注意事項。

2.3.2防注入字元優先級。

2.3.3防注入代碼

(1)參數是數字直接用intval()函數

(2)對于非文本參數的過濾

(3)文本資料防注入代碼。

(4)當然還有其他與addslashes、mysql_escape_string結合的代碼。

4、防止xss攻擊

4.1Xss攻擊過程

4.2常見xss攻擊地方

4.3防XSS方法

5、CSRF

5.1簡單說明CSRF原理

5.2防範方法

6、防盜鍊

7、防拒CC攻擊

四.cookie 和session 的差別

差別:

1、數bai據存放du位置不同:

cookie資料存放在客戶的浏覽zhi器上,session資料放在伺服器上。

2、安全程度不同dao:

cookie不是很安全,别人可以分析存放在本地的COOKIE并進行COOKIE欺騙,考慮到安全應當使用session。

3、性能使用程度不同:

session會在一定時間内儲存在伺服器上。當通路增多,會比較占用你伺服器的性能,考慮到減輕伺服器性能方面,應當使用cookie。

4、資料存儲大小不同:

單個cookie儲存的資料不能超過4K,很多浏覽器都限制一個站點最多儲存20個cookie,而session則存儲與服務端,浏覽器對其沒有限制。

在程式中,會話跟蹤是很重要的事情。理論上,一個使用者的所有請求操作都應該屬于同一個會話,而另一個使用者的所有請求操作則應該屬于另一個會話,二者不能混淆。例如,使用者A在超市購買的任何商品都應該放在A的購物車内,不論是使用者A什麼時間購買的,這都是屬于同一個會話的,不能放入使用者B或使用者C的購物車内,這不屬于同一個會話。

而Web應用程式是使用HTTP協定傳輸資料的。HTTP協定是無狀态的協定。一旦資料交換完畢,用戶端與伺服器端的連接配接就會關閉,再次交換資料需要建立新的連接配接。這就意味着伺服器無法從連接配接上跟蹤會話。即使用者A購買了一件商品放入購物車内,當再次購買商品時伺服器已經無法判斷該購買行為是屬于使用者A的會話還是使用者B的會話了。要跟蹤該會話,必須引入一種機制。

Cookie就是這樣的一種機制。它可以彌補HTTP協定無狀态的不足。在Session出現之前,基本上所有的網站都采用Cookie來跟蹤會話。