主要總結(jié)一些平常不大注意到的一些知識點(面試估計會問到吧)。
--------------------------------------------3.14-----------------------------------------------
1. PHP 變量規(guī)則:
1)變量以 符號開頭妒牙,其后是變量的名稱 2)變量名稱必須以字母或下劃線開頭 3)變量名稱不能以數(shù)字開頭 4)變量名稱只能包含字母數(shù)字字符和下劃線(A-z彼哼、0-9 以及 _) 5)變量名稱對大小寫敏感(y 與 $Y 是兩個不同的變量)
2. 關(guān)于require()和include():
1)require函數(shù)通常放在 PHP 程序的最前面
2)include函數(shù)一般是放在流程控制的處理部分中
3)require_once 語句和 require 語句完全相同,唯一區(qū)別是 PHP 會檢查該文件是否已經(jīng)被包含過单旁,如果是則不會再次包含
4)include在引入不存文件時產(chǎn)生一個警告且腳本還會繼續(xù)執(zhí)行沪羔,而require則會導(dǎo)致一個致命性錯誤且腳本停止執(zhí)行
3. foreach循環(huán)并不能改變數(shù)組元素的值,如果要改變數(shù)組元素的值象浑,需要使用引用類型
4.preg_match() 定義和用法
1)preg_match() 函數(shù)用于進(jìn)行正則表達(dá)式匹配蔫饰,成功返回 1 ,否則返回 0 愉豺。
2)preg_match() 匹配成功一次后就會停止匹配篓吁,如果要實現(xiàn)全部結(jié)果的匹配,則需使用preg_match_all()函數(shù)蚪拦。
5.雙引號和單引號的區(qū)別
1)雙引號解釋變量杖剪,單引號不解釋變量
2)雙引號里插入單引號,其中單引號里如果有變量的話驰贷,變量解釋
3)雙引號的變量名后面必須要有一個非數(shù)字盛嘿、字母、下劃線的特殊字符括袒,或者用講變量括起來次兆,否則會將變量名后面的部分當(dāng)做一個整體,引起語法錯誤
4)雙引號解釋轉(zhuǎn)義字符锹锰,單引號不解釋轉(zhuǎn)義字符芥炭,但是解釋'\和\
5)能使單引號字符盡量使用單引號,單引號的效率比雙引號要高(因為雙引號要先遍歷一遍恃慧,判斷里面有沒有變量园蝠,然后再進(jìn)行操作,而單引號則不需要判斷)
--------------------------------------------3.20更新-----------------------------------------------
6.請描述出兩點以上 XHTML 和 和 HTML 最顯著的區(qū)別
1).XHTML 必須強(qiáng)制指定文檔類型 DocType痢士,HTML 不需要
2).XHTML 所有標(biāo)簽必須閉合彪薛,HTML 比較隨意
3).XHTML 嚴(yán)格區(qū)分大小寫,所有標(biāo)簽的元素和屬性的名字都必須使用小寫
4).XHTML 要求所有的標(biāo)記都必須要有一個相應(yīng)的結(jié)束標(biāo)記
5).XHTML 規(guī)定所有屬性都必須有一個值,沒有值的就重復(fù)本身
7. CSS 中 中 class 和 和 id 的區(qū)別
id:每個頁 ID 是唯一的不能重復(fù)陪汽。
class:可以設(shè)置多個 class 為同一個值训唱。
8.表單中 get 與 與 post 提交方法的區(qū)別?傳輸?shù)淖畲笕萘糠謩e是多少?
答:get 是發(fā)送請求 HTTP 協(xié)議通過 url 參數(shù)傳遞進(jìn)行接收挚冤,而 post 是實體數(shù)據(jù),可以通過表單提交大量信息赞庶。POST 根據(jù)你 php.ini 文件配置(默認(rèn)是 8M)训挡,GET 的話大小限制在 2KB。
--------------------------------------------4.21更新-----------------------------------------------
(一晃已經(jīng)一個月后…再不寫就要發(fā)霉了…)
9.memcache和redis的區(qū)別
寫出下列幾個預(yù)定義全局變量的作用
_SERVER['DOCUMENT_ROOT'] //當(dāng)前運(yùn)行腳本所在的文檔根目錄_SERVER['HTTP_HOST '] //當(dāng)前請求的 Host: 頭部的內(nèi)容
_SERVER['REMOTE_ADDR'] //正在瀏覽當(dāng)前頁面用戶的 IP 地址_SERVER['HTTP_REFERER'] //鏈接到當(dāng)前頁面的前一頁面的 URL 地址
_SERVER['SERVER_NAME'] //當(dāng)前運(yùn)行腳本所在服務(wù)器主機(jī)的名稱_FILES //包含有所有上傳的文件信息
S_FILES['userfile']['name'] //客戶端機(jī)器文件的原名稱
_FILES['userfile']['type'] //文件 MIME 類型歧强,如果瀏覽器提供此信息的話澜薄,如“image/gif”。_FILES['userfile']['size'] //已上傳文件的大小摊册,單位為字節(jié)
_FILES['userfile']['tmp_name'] //文件被上傳后在服務(wù)端儲存的臨時文件名_FILES['userfile']['error'] //和該文件上傳相關(guān)的錯誤代碼PHP 的意思肤京,它能干些什么?
PHP( Hypertext Preprocessor茅特,超文本預(yù)處理器的字母縮寫)是一種被廣泛應(yīng)用的開放
源代碼的多用途腳本語言忘分,它可嵌入到 HTML 中,尤其適合 web 開發(fā)白修。
PHP 能做任何事妒峦。PHP 主要是用于服務(wù)端的腳本程序,因此可以用 PHP 來完成任何
其它的 CGI 程序能夠完成的工作兵睛,例如收集表單數(shù)據(jù)肯骇,生成動態(tài)網(wǎng)頁,或者發(fā)送/接收
Cookies祖很。但 PHP 的功能遠(yuǎn)不局限于此笛丙。
PHP 腳本主要用于以下三個領(lǐng)域:
- 服務(wù)端腳本。這是 PHP 最傳統(tǒng)假颇,也是最主要的目標(biāo)領(lǐng)域胚鸯。
- 命令行腳本〔鹑冢可以編寫一段 PHP 腳本蠢琳,并且不需要任何服務(wù)器或者瀏覽器來運(yùn)行它。
通過這種方式镜豹,僅僅只需要 PHP 解析器來執(zhí)行傲须。 - 編寫桌面應(yīng)用程序。
12.說出數(shù)組涉及到的常用函數(shù)趟脂。
array -- 聲明一個數(shù)組
count -- 計算數(shù)組中的單元數(shù)目或?qū)ο笾械膶傩詡€數(shù)
foreach -- 遍歷數(shù)組
list -- 遍歷數(shù)組
explode -- 將字符串轉(zhuǎn)成數(shù)組
implode -- 將數(shù)組轉(zhuǎn)成一個新字符串
array_merge -- 合并一個或多個數(shù)組
is_array -- 檢查是否是數(shù)組
print_r -- 輸出數(shù)組
sort -- 數(shù)組排序
array_keys -- 返回數(shù)組中所有的鍵名
array_values -- 返回數(shù)組中所有的值
key -- 從關(guān)聯(lián)數(shù)組中取得鍵名
13.字符串的常用函數(shù)泰讽?
trim() -- 去除字符串首尾處的空白字符(或者其他字符)
strlen() -- 字符串長度
substr() -- 截取字符串
str_replace() -- 替換字符串函數(shù)
substr_replace() -- 對指定字符串中的部分字符串進(jìn)行替換
strstr() -- 檢索字符串函數(shù)
explode() -- 分割字符串函數(shù)
implode() -- 將數(shù)組合并成字符串
str_repeat() -- 重復(fù)一個字符串
addslashes(); -- 轉(zhuǎn)義字符串
htmlspecialchars() -- THML 實體轉(zhuǎn)義
14.寫出 php 的 的 public 、protected 、private 三種訪問控制模式的區(qū)別
public:公有已卸,任何地方都可以訪問
protected:繼承佛玄,只能在本類或子類中訪問,在其它地方不允許訪問
private:私有累澡,只能在本類中訪問梦抢,在其他地方不允許訪問
15.PHP5 中魔術(shù)方法函數(shù)有哪幾個,請舉例說明各自的用法
__sleep serialize 之前被調(diào)用
__wakeup unserialize 時被調(diào)用
__toString 打印一個對象時被調(diào)用
__set_state 調(diào)用 var_export 時被調(diào)用愧哟,用__set_state 的返回值作為 var_export 的返回值
__construct 構(gòu)造函數(shù)奥吩,實例化對象時被調(diào)用
__destruct 析構(gòu)函數(shù),當(dāng)對象銷毀時被調(diào)用
__call 對象調(diào)用某個方法蕊梧,若存在該方法霞赫,則直接調(diào)用,若不存在肥矢,則調(diào)用__call 函數(shù)
__get 讀取一個對象屬性時端衰,若屬性存在,則直接返回甘改,若不存在旅东,則調(diào)用__get 函數(shù)
__set 設(shè)置一個對象的屬性時,若屬性存在楼誓,則直接賦值玉锌,若不存在,則調(diào)用__set 函數(shù)
__isset 檢測一個對象的屬性是否存在時被調(diào)用
__unset unset 一個對象的屬性時被調(diào)用
__clone 克隆對象時被調(diào)用
__autoload 實例化一個對象時疟羹,如果對應(yīng)的類不存在主守,則該方法被調(diào)用
--------------------------------------------4.26更新-----------------------------------------------
16. 三個內(nèi)置函數(shù)
get_class 返回一個對象的類的名稱
get_object_vars 得到給定對象的屬性
get_class_methods 獲取類方法的名字
17. PDO對象中的成員方法:
getAttribute() 獲取一個數(shù)據(jù)庫連接對象的屬性
setAttribute() 為一個數(shù)據(jù)庫連接對象設(shè)定屬性
errorCode() 獲取錯誤碼
errorInfo() 獲取錯誤信息
exec() 處理一條SQL語句,并返回所影響的條數(shù)
query() 處理一條SQL語句榄融,并返回一個PDOStatement對象
quote() 為某個sql中的字符串添加引號
lastInsertId() 獲取插入到表中的最后一條數(shù)據(jù)的主鍵
prepare() 負(fù)責(zé)準(zhǔn)備執(zhí)行的sql語句
getAvailableDriver() 獲取有效的PDO驅(qū)動器名稱
beginTransaction() 開始一個事務(wù)
commit() 提交事務(wù)
rollback() 回滾事務(wù)
--------------------------------------------7.7更新 PHP面試100題-----------------------------------------------
正文內(nèi)容
1参淫,Http 和Https的區(qū)別
第一:http是超文本傳輸協(xié)議,信息是明文傳輸愧杯,https是具有安全性的ssl加密傳輸協(xié)議
第二:http和https使用的是完全不同的連接方式涎才,端口也不一樣,前者80 或者443
第三:http連接很簡單力九,是無狀態(tài)的耍铜。https協(xié)議是由ssl+http協(xié)議構(gòu)建的可進(jìn)行加密傳輸,身份認(rèn)證的網(wǎng)絡(luò)協(xié)議跌前。
2.什么方法來加快頁面的加載速度
1棕兼,用到服務(wù)器資源時在打開,不用時抵乓,立即關(guān)閉服務(wù)器資源伴挚。
2靶衍,數(shù)據(jù)庫添加索引
3,頁面可生成靜態(tài)
4茎芋,圖片等大文件單獨放在一個服務(wù)器
5颅眶,能不查詢數(shù)據(jù)庫的盡量不去數(shù)據(jù)取數(shù)據(jù),可以放在緩存中田弥。
3.表單中 get與post提交方法的區(qū)別?
答:get是發(fā)送請求HTTP協(xié)議通過url參數(shù)傳遞進(jìn)行接收,而post是實體數(shù)據(jù),可以通過表單提交大量信息.
4.echo ,print,print_r 的區(qū)別:
echo 是php語句涛酗,無返回值。
print,print_r是函數(shù),有返回值偷厦。
print() 只能打印出簡單類型變量的值(如int,string)
print_r() 可以打印出復(fù)雜類型變量的值(如數(shù)組,對象)
echo 輸出一個或者多個字符串
5.session與cookie區(qū)別
session與cookie相同:跨頁面煤杀、不跨用戶
session與cookie不相同:
1、session可以存儲任意類型的數(shù)據(jù)沪哺,但cookie只能存儲字符串
2、cookie產(chǎn)生在服務(wù)器端酌儒、存儲在客戶端
session產(chǎn)生在服務(wù)器端辜妓、存儲在服務(wù)器端
6.魔術(shù)常量
答案:
LINE文件中的當(dāng)前行號。
FILE文件的完整路徑和文件名忌怎。
FUNCTION函數(shù)名稱
CLASS類的名稱
METHOD類的方法名
7.數(shù)據(jù)庫中的事務(wù)是什么?
答:事務(wù)(transaction)是作為一個單元的一組有序的數(shù)據(jù)庫操作籍滴。如果組中的所有操作都成功,則認(rèn)為事務(wù)成功榴啸,即使只有一個操作失敗孽惰,事務(wù)也不成功。如果所有操作完成鸥印,事務(wù)則提交勋功,其修改將作用于所有其他數(shù)據(jù)庫進(jìn)程。如果一個操作失敗库说,則事務(wù)將回滾狂鞋,該事務(wù)所有操作的影響都將取消。
8.1優(yōu)化MYSQL數(shù)據(jù)庫的方法潜的。
1骚揍、選擇合適的字段的數(shù)據(jù)類型
1)能用數(shù)字不用字符串
2)char、varchar啰挪、text 能用varchar不用char
3)給字段加not null 避免在表中出現(xiàn)NULL關(guān)鍵字(default 值)
2信不、選擇合適的字段充當(dāng)主鍵
1)建議每張表必須有主鍵
2)用數(shù)字類型的字段充當(dāng)主鍵
拆分表
拆分字段,將文章的標(biāo)題與內(nèi)容分開
2)拆分記錄亡呵,將今年的記錄與往年的記錄分開
給字段合理添加索引
a.格式:
(普通索引)->
創(chuàng)建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
創(chuàng)表指定索引:CREATE TABLE tablename([...],INDEX索引名)
(唯一索引)->
創(chuàng)建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
創(chuàng)表指定索引:CREATE TABLE tablename([...],UNIQUE索引名)
(主鍵)->
它是唯一索引,一般在創(chuàng)建表是建立,格式為:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
5抽活、事務(wù)處理:
a.保證數(shù)據(jù)完整性,例如添加和修改同時,兩者成立則都執(zhí)行,一者失敗都失敗
mysql_query("BEGIN");
mysql_query("INSERT INTO customerinfo (name) VALUES ('name1')"; mysql_query("SELECT * FROM `orderinfo` where customerid=".id");
mysql_query("COMMIT");
6、鎖定表,優(yōu)化事務(wù)處理:
a.我們用一個 SELECT 語句取出初始數(shù)據(jù)政己,通過一些計算酌壕,用 UPDATE 語句將新值更新到表中掏愁。
包含有 WRITE 關(guān)鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執(zhí)行之前,
不會有其它的訪問來對 inventory 進(jìn)行插入卵牍、更新或者刪除的操作
mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
mysql_query("SELECT customerid FROM customerinfo
where id=".id); mysql_query("UPDATE `orderinfo` SET ordertitle='title' where
customerid=".$id);
mysql_query("UNLOCK TABLES");
7果港、使用外鍵,優(yōu)化鎖定表
a.把customerinfo里的customerid映射到orderinfo里的customerid,
任何一條沒有合法的customerid的記錄不會寫到orderinfo里
CREATE TABLE customerinfo(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE
)TYPE = INNODB;
注意:'ON DELETE CASCADE',該參數(shù)保證當(dāng)customerinfo表中的一條記錄刪除的話同時也會刪除order
表中的該用戶的所有記錄,注意使用外鍵要定義事務(wù)安全類型為INNODB;
8、優(yōu)化查詢語句
a用內(nèi)連接代替子查詢代替子查詢糊昙,用sphinx代替like模糊查詢
b最好在相同字段進(jìn)行比較操作,在建立好的索引字段上盡量減少函數(shù)操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
例子2:
SELECT * FROM order WHERE addtime/7<24;(慢)
SELECT * FROM order WHERE addtime<24*7;(快)
例子3:
SELECT * FROM order WHERE title like "%good%";
SELECT * FROM order WHERE title>="good" and name<"good";
緩存辛掠,靜態(tài)化
選擇合適存儲引擎用Innodb增刪改,用myisam查詢
主從數(shù)據(jù)庫
負(fù)載均衡
最好拿數(shù)字類型的字段充當(dāng)where條件
最好拿相同類型的字段進(jìn)行比對(避免發(fā)生數(shù)據(jù)類型的轉(zhuǎn)換)
不要在具有索引的字段上添加數(shù)據(jù)庫函數(shù)(索引失效)
8.2請簡述項目中優(yōu)化sql語句執(zhí)行效率的方法,從哪些方面,sql語句性能如何分析?
答:(1)選擇最有效率的表名順序
(2)WHERE子句中的連接順序
(3)SELECT子句中避免使用‘*’
(4)用Where子句替換HAVING子句
(5)通過內(nèi)部函數(shù)提高SQL效率
(6)避免在索引列上使用計算释牺。
(7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉萝衩。
9.對于大流量網(wǎng)站,采用什么方法解決訪問量問題没咙?
1猩谊,確認(rèn)服務(wù)器的硬件是否足夠支持當(dāng)前的流量
2,優(yōu)化數(shù)據(jù)庫的訪問
3祭刚,禁止外部的盜鏈
4牌捷,控制大文件的下載
5,使用不同主機(jī)分流主要流量
6涡驮,使用流量分析統(tǒng)計軟件
10.一個函數(shù)暗甥,能夠遍歷一個文件夾下的所有文件和子文件夾(20分)
10.2寫一個函數(shù),能夠遍歷一個文件夾下的所有文件和子文件夾捉捅。
11撤防、能夠使HTML和PHP分離開使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
12、使用哪些工具進(jìn)行版本控制?(1分)
答:cvs,svn,vss;
13棒口、如何實現(xiàn)字符串翻轉(zhuǎn)?(3分)
英文:
strrev($a)
中文或其他文字:
中文:GB2312寄月, 代碼是使用GB2312編碼
14.PHP的意思(送1分)
PHP是一個基于服務(wù)端來創(chuàng)建動態(tài)網(wǎng)站的腳本語言,您可以用PHP和HTML生成網(wǎng)站主頁
15.MYSQL取得當(dāng)前時間的函數(shù)是?陌凳,格式化日期的函數(shù)是(2分)
答:now(),date()
16.用PHP寫出顯示客戶端IP與服務(wù)器IP的代碼1分)
答:打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服務(wù)器IP:echo gethostbyname("www.bolaiwu.com")
17剥懒、語句include和require的區(qū)別是什么?為避免多次包含同一文件,可用(?)語句代替它們?
答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否 都會先執(zhí)行require
include->include有返回值合敦,而require沒有(可能因為如此require的速度比include快)
注意:包含文件不存在或者語法錯誤的時候require是致命的,include不是
18.http請求返回狀態(tài)碼
400 請求無效
401 未授權(quán)
403 請求被禁止
404 請求資源不存在
405 請求資源被禁止
406 無法接受
407 要求代理身份驗證
500 Internal Server Error 服務(wù)端源代碼錯誤
600 源站沒有返回響應(yīng)頭部初橘,只返回實現(xiàn)內(nèi)容
19,linux授權(quán)碼:
600 屬主有讀寫權(quán)限
644 屬主有讀寫權(quán)限充岛,屬性組有讀權(quán)限
700 屬主有讀寫執(zhí)行權(quán)限
755 屬主有讀寫執(zhí)行權(quán)限保檐,屬性組有讀,執(zhí)行權(quán)限
711 屬主有讀寫執(zhí)行權(quán)限崔梗,屬性組有執(zhí)行權(quán)限
666 所有用戶都有文件的讀寫權(quán)限
777 所有用戶都有文件的讀寫執(zhí)行權(quán)限
20.有一個網(wǎng)頁地址, 比如PHP開發(fā)資源網(wǎng)主頁: http://www.phpres.com/index.html,如何得到它的內(nèi)容?($1分)