1、什么是面向對象?主要特征是什么?
面向對象是程序的一種設計方式,它利于提高程序的重用性,使程序結構更加清晰。
主要特征:封裝、繼承、多態。
2、SESSION 與 COOKIE的區別是什么,請從協議,產生的原因與作用說明?
http無狀態協議,不能區分用戶是否是從同一個網站上來的,同一個用戶請求不同的頁面不能看做是同一個用戶。
SESSION存儲在服務器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段可以修改,不安全。Session依賴于cookie進行傳遞。禁用cookie后,session不能正常使用。
Session的缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗。Session保存在服務器端的文件或數據庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。
3、HTTP 狀態中302、403、 500代碼含義?
一二三四五原則:(即一:消息系列;二:成功系列;三:重定向系列;四:請求錯誤系列;五:服務器端錯誤系列。)
302:臨時轉移成功,請求的內容已轉移到新位置
403:禁止訪問
500:服務器內部錯誤
401:代表未授權
4、請寫出數據類型(int char varchar datetime text)的意思;請問 varchar 和 char有什么區別?
Int 整數
char 定長字符
Varchar 變長字符
Datetime 日期時間型
Text 文本型
Varchar與char的區別:
char是固定長度的字符類型,分配多少空間,就占用多長空間。Varchar是可變長度的字符類型,內容有多大就占用多大的空間,能有效節省空間。由于varchar類型是可變的,所以在數據長度改變的時,服務器要進行額外的操作,所以效率比char類型低。
5、MyISAM和 InnoDB 的基本區別?索引結構如何實現?
MyISAM類型不支持事務,表鎖,易產生碎片,要經常優化,讀寫速度較快,適合用于頻繁查詢的應用;
InnoDB類型支持事務,行鎖,有崩潰恢復能力,讀寫速度比MyISAM慢,適合于插入和更新操作比較多的應用,空間占用大,不支持全文索引等。
創建索引:alert table tablename add index 索引名 (`字段名`)
6、isset() 和 empty() 區別
isset判斷變量是否存在,可以傳入多個變量,若其中一個變量不存在則返回假;empty判斷變量是否為空為假,只可傳一個變量,如果為空為假則返回真。
7、請說明 PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?
傳值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略
傳引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:傳值傳遞時,php必須復制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。傳引用傳遞則不需要復制值,對于性能提高很有好處。
8、在PHP中error_reporting這個函數有什么作用?
設置PHP的報錯級別并返回當前級別。
9、說說你對緩存技術的了解?
緩存技術是將動態內容緩存到文件中,在一定時間內訪問動態頁面直接調用緩存文件,而不必重新訪問數據庫。
10、現在編程中經常采取MVC三層結構,請問MVC分別指哪三層,有什么優點?
MVC三層分別指:業務模型、視圖、控制器,由控制器層調用模型處理數據,然后將數據映射到視圖層進行顯示
優點是:
①可以實現代碼的重用性,避免產生代碼冗余;
②M和V的實現代碼分離,從而使同一個程序可以使用不同的表現形式
11、AJAX的優勢是什么?
ajax是異步傳輸技術,可以通過javascript實現,也可以通過JQuery框架實現,實現局部刷新,減輕了服務器的壓力,也提高了用戶體驗。
12、在程序的開發中,如何提高程序的運行效率?
優化SQL語句,查詢語句中盡量不使用select *,用哪個字段查哪個字段;
少用子查詢可用表連接代替;
少用模糊查詢;
數據表中創建索引;
對程序中經常用到的數據生成緩存。
13、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?
有效使用緩存,增加緩存命中率
使用負載均衡
對靜態文件使用cdn進行存儲和加速
想法減少數據庫的使用
查看出現統計的瓶頸在哪里
反向代理
14、語句include和require的區別是什么?為避免多次包含同一文件,可用什么語句代替它們?
區別:在失敗的時候:include產生一個warning,而require產生直接產生錯誤中斷require在運行前載入include在運行時載入代替:require_onceinclude_once
15、foo()和@foo()之間有什么區別?
@代表所有warning忽略
16、簡述php的垃圾收集機制。
php中的變量存儲在變量容器zval中,zval中除了存儲變量類型和值外,還有is_ref和refcount字段。refcount表示指向變量的元素個數,is_ref表示變量是否有別名。如果refcount為0時,就回收該變量容器。
如果一個zval的refcount減1之后大于0,它就會進入垃圾緩沖區。當緩沖區達到最大值后,回收算法會循環遍歷zval,判斷其是否為垃圾,并進行釋放處理。
17、如何實現PHP的安全最大化?
怎樣避免SQL注入漏洞和XSS跨站腳本攻擊漏洞? 答:基本原則:不對外界展示服務器或程序設計細節(屏蔽錯誤),不相信任何用戶提交的數據(過濾用戶提交)。
18、echo、print_r、print、var_dump區別
echo:語句結構;
print:是函數,有返回值
print_r:能打印數組,對象
var_dump:能打印對象數組,并且帶數據類型
19、寫出smarty模板的特點
速度快,編譯型,緩存技術,插件機制,強大的表現邏輯
20、如果需要原樣輸出用戶輸入的內容,在數據入庫前,要用哪個函數處理?
htmlspecialchars或者htmlentities