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