SESSION 與 COOKIE的區別是什麼,請從協議,產生的緣由與做用說明? javascript
一、http無狀態協議,不能區分用戶是不是從同一個網站上來的,同一個用戶請求不一樣的頁面不能看作是同一個用戶。php
二、SESSION存儲在服務器端,COOKIE保存在客戶端。Session比較安全,cookie用某些手段能夠修改,不安全。Session依賴於cookie進行傳遞。html
禁用cookie後,session不能正常使用。Session的缺點:保存在服務器端,每次讀取都從服務器進行讀取,對服務器有資源消耗。Session保存在服務器端的文件或數據庫中,默認保存在文件中,文件路徑由php配置文件的session.save_path指定。Session文件是公有的。java
不使用cookie向客戶端發送一個cookie. mysql
理解:session_start()開啓時,生成一個常量 SID,當COOKIE開啓時,這個常量爲空,當COOKIE關閉時,這個常量中存儲了PHPSESSID的值。經過在URL後加一個SID參數來傳遞SESSIONID的值,從而使客戶端頁面可使用SESSION裏面的值。 當客戶端開啓COOKIE和服務器端開啓SESSION時。 瀏覽器第一次請求,服務器會向瀏覽器端發送一個COOKIE裏面存儲SESSIONID. 當瀏覽器第二次請求時,會把已存在的COOKIE一塊兒提交到服務器端。jquery
簡述Cookie的設置及獲取過程c++
設置COOKIE的值:程序員
Setcookie(名稱,值,保存時間,有效域);web
獲取值:$_COOKIE['名稱'];正則表達式
HTTP 狀態中30二、40三、 500、200、40四、502代碼含義?
一二三四五原則: 一. 消息系列 二. 成功系列 三. 重定向系列 四. 請求錯誤系列 五. 服務器端錯誤系列 302:臨時轉移成功,請求的內容已轉移到新位置 403:禁止訪問 500:服務器內部錯誤 401表明未受權。 200是請求成功,404是文件未找到,502是服務器內部錯誤。
MyISAM 和 InnoDB 的基本區別?索引結構如何實現?
MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行速度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持以及外部鍵等高級數據庫功能。
建立索引:alert table tablename add index (`字段名`)
include與require的區別?
1.include()在執行文件時每次都要進行讀取和評估
require()文件只處理一次(實際上文件內容替換了require()語句)
2.require()一般放在PHP腳本程序的最前面
include()的使用和require()同樣,通常放在流程控制的處理區段中,PHP腳本文件讀到include()語句時,纔將它包含的文件讀進來,這種方式,能夠把程序執行時的流程簡單化
3,require()和include()語句是語言結構,不是真正的函數,能夠像PHP的其餘語言結構同樣
4,include_once()和require_once()語句也是在腳本執行期間包括並運行指定文件,與include()require()惟一的區別是若是文件中的代碼已經被包括了,則不會再次包括.
5,require()包含文件失敗,中止執行,給出錯誤(致命的)
include()經常使用於動態包含.
一般是自動加載的文件,即便加載出錯,整個程序仍是繼續執行
一個頁面聲明,另外一個頁面調用
包函文件失敗,繼續向下執行,返回一條警告
PHP字符串中單引號與雙引號的區別?
單引號不能解釋變量,而雙引號能夠解釋變量。
單引號不能解釋轉義字符,而雙引號能夠解釋轉義字符。
請說明 PHP 中傳值與傳引用的區別。何時傳值何時傳引用?
按值傳遞:函數範圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數範圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:按值傳遞時,php必須複製值。特別是對於大型的字符串和對象來講,這將會是一個代價很大的操做。按引用傳遞則不須要複製值,對於性能提升頗有好處。
function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//輸出1
test($b); //這裏$b傳遞給函數的實際上是$b的變量內容所處的內存地址,經過在函數裏改變$a的值 就能夠改變$b的值了
echo "<br>";
echo $b;//輸出101
面向對象中接口和抽象類的區別及應用場景?
一、有抽象方法的類叫作抽象類,抽象類中不必定有抽象方法,抽象方法必須使用abstract關鍵字定義。
二、接口中所有是抽象方法,方法不用使用abstract定義。
三、當有子類要設計一個上層,一般設計爲抽象類,當多個類要設計一個上層,一般設計爲接口。
echo(),print(),print_r()的區別?
echo是PHP語句, print和print_r是函數,語句沒有返回值,函數能夠有返回值(即使沒有用)
Print()只能打印出簡單類型變量的值(如int,string)
print_r()能夠打印出複雜類型變量的值(如數組,對象)
echo 輸出一個或者多個字符串
mysql_fetch_row() 和mysql_fetch_array之間有什麼區別?
Mysql_fetch_row()以索引數組的方式取查詢的結果集,mysql_fetch_array()以索引數組和關聯數組兩種方式取查詢的結果集。
33. HTTP協議中GET、POST和HEAD的區別?
HEAD: 只請求頁面的首部。
GET: 請求指定的頁面信息,並返回實體主體。
POST: 請求服務器接受所指定的文檔做爲對所標識的URI的新的從屬實體。
(1)HTTP 定義了與服務器交互的不一樣方法,最基本的方法是 GET 和 POST。事實上 GET 適用於多數請求,而保留 POST 僅用於更新站點。
(2)在FORM提交的時候,若是不指定Method,則默認爲GET請 求,Form中提交的數據將會附加在url以後,以?分開與url分開。字母數字字符原樣發送,但空格轉換爲「+「號,其它符號轉換爲%XX,其中XX爲 該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;
GET方式提交的數據最多隻能有1024字節,而POST則沒有此限制。
(3)GET 這個是瀏覽器用語向服務器請求最經常使用的方法。POST這個方法也是用來傳送數據的,可是與GET不一樣的是,使用POST的時候,數據不是附在URI後面傳遞的,而是要作爲獨立的行來傳遞,此時還必需要發送一個Content_length標題,以標明數據長度,隨後一個空白行,而後就是實際傳送的數據。網頁的表單一般是用POST來傳送的。
表單中 get與post提交方法的區別?
1. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中能夠看到。post是經過HTTP post機制,將表單內各個字段與其內容放置在HTML HEADER內一塊兒傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
2. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。
3. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,通常被默認爲不受限制。但理論上,IIS4中最大量爲80KB,IIS5中爲100KB。
get安全性很是低,post安全性較高。
foo()和@foo()之間有什麼區別?(1分)
@foo()控制錯誤輸出
什麼是數據庫索引,主鍵索引,惟一索引的區別,索引的缺點是什麼?
索引用來快速地尋找那些具備特定值的記錄。
主鍵索引和惟一索引的區別:主鍵是一種惟一性索引,但它必須指定爲「PRIMARY KEY」,每一個表只能有一個主鍵。惟一索引索引列的全部值都只能出現一次,即必須惟一。
索引的缺點:
一、建立索引和維護索引要耗費時間,這種時間隨着數據量的增長而增長。
二、索引須要佔用物理空間,除了數據表佔數據空間以外,每個索引還要佔必定的物理空間,若是要創建聚簇索引,須要的空間就會更大。
3、當對錶中 的數據進行增長、刪除、修改的時候,索引也要動態的維護,這樣就下降了數據的維護速度。
使用那些工具進行版本控制?
Clear case、CVS、SVN、PVCS、Perforce、CCC、StarTeam、RCS
寫出三種以上MySQL數據庫存儲引擎的名稱(提示:不區分大小寫)
MyISAM、InnoDB、BDB(Berkeley DB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB 等等十幾個引擎
什麼是模板技術、可以使HTML和PHP分離開使用的模板?
模板技術就是使程序的邏輯代碼和界面分開的技術。
可以使HTML和PHP分開的模板有:Smarty、Template、PHPlib Template、FastTemplate
實現中文字串截取無亂碼的方法
Mb_substr();
用PHP寫出顯示客戶端IP與服務器IP的代碼
獲取客戶端IP:get_env(「REMOTE_ADDR」);
獲取服務器端IP:$_SERVER["SERVER_ADDR"];
寫幾個魔術方法並說明做用?
__call()當調用不存在的方法時會自動調用的方法
__autoload()在實例化一個還沒有被定義的類是會自動調用次方法來加載類文件
__set()當給未定義的變量賦值時會自動調用的方法
__get()當獲取未定義變量的值時會自動調用的方法
__construct()構造方法,實例化類時自動調用的方法
__destroy()銷燬對象時自動調用的方法
__unset()當對一個未定義變量調用unset()時自動調用的方法
__isset()當對一個未定義變量調用isset()方法時自動調用的方法
__clone()克隆一個對象
__tostring()當輸出一個對象時自動調用的方法
$_REQUEST、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE的意思是什麼?
它們都是PHP預約義變量
$_REQUEST用來獲取post或get方式提交的值
$_POST用來獲取post方式提交的值
$_GET用來獲取get方式提交的值
$_COOKIE用來獲取cookie存儲的值
$_SESSION用來獲取session存儲的值
$_FILE用來獲取上傳文件表單的值
數組中下標最好是什麼類型的,爲何?
數組的下標最好是數字類型的,數字類型的處理速度快。
++i和i++哪個效率高,爲何?
++i效率比i++的效率更高,由於++i少了一個返回i的過程。
magic_quotes_gpc()、magic_quotes_runtime()的意思是什麼?
Magic_quotes_gpc()是php配置文件中的,若是設置爲on則會自動POST,GET,COOKIE中的字符串進行轉義,在‘以前加\
Magic_quotes_runtime()是php中的函數,若是參數爲true則會數據庫中取出來的單引號、雙引號、反斜線自動加上反斜槓進行轉義。
框架中什麼是單一入口和多入口,單一入口的優缺點?
一、多入口就是經過訪問不一樣的文件來完成用戶請求。
單一入口只web程序全部的請求都指向一個腳本文件的。
二、單一入口更容易控制權限,方便對http請求能夠進行安全性檢查。
缺點:URL看起來不那麼美觀,特別是對搜索引擎來講不友好。
你對Memcach的理解,優勢有哪些?
Memcache是一種緩存技術,在必定的時間內將動態網頁通過解析以後保存到文件,下次訪問時動態網頁就直接調用這個文件,而沒必要在從新訪問數據庫。使用memcache作緩存的好處是:提升網站的訪問速度,減輕高併發時服務器的壓力。
Memcache的優勢:穩定、配置簡單、多機分佈式存儲、速度快。
對關係型數據庫而言,索引是至關重要的概念,請回答有關索引幾個問題:
a) 索引的目的是什麼?
一、快速訪問數據表中的特定信息,提升檢索速度
二、建立惟一性索引,保證數據庫表中每一行數據的惟一性
三、加速表和表之間的鏈接
四、使用分組和排序子句進行數據檢索時,能夠顯著減小查詢中分組和排序的時間
b) 索引對數據庫系統的小負面影響是什麼?
負面影響:建立索引和維護索引須要耗費時間,這個時間隨着數據量的增長而增長;索引須要佔用物理空間,不光是表須要佔用數據空間,每一個索引也須要佔用物理空間;當對錶進行增、刪、改的時候索引也要動態維護,這樣就下降了數據的維護速度。
c) 爲數據表創建索引的原則有哪些?
一、在最頻繁使用的、用以縮小查詢範圍的字段上創建索引
二、在平頻繁使用的、須要排序的字段上創建索引
d) 什麼狀況下不宜創建索引?
一、對於查詢中不多涉及的列或者重複值比較多的列,不宜創建索引
二、對於一些特殊的數據類型,不宜創建索引,好比文本字段(text)等。
web應用中,數據庫的讀取頻率遠高於寫入頻率, 如何優化MySQL而應對此種情景?
使用memcache緩存技術,而沒必要從新訪問數據庫,這樣就減小了查詢數據庫的次數。
若是網站的訪問量很大,能夠把數據庫讀寫服務器分開,使用多態服務器去處理數據庫查詢,使用較少的服務器去處理數據庫的寫入和修改。
請舉例說明在你的開發過程當中用什麼方法來加快頁面的加載速度
要用到服務器資源時纔打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具。
描述一下大流量高併發量網站的解決方案
一、確認服務器硬件是否足夠支持當前的流量。
二、使用memcache緩存技術,將動態數據緩存到內存中,動態網頁直接調用這些文件,而沒必要在訪問數據庫。
三、禁止外部的盜鏈。
四、外部網站的圖片或者文件盜鏈每每會帶來大量的負載壓力,所以應該嚴格限制外部對自身圖片或者文件盜鏈,目前能夠簡單的經過refer來控制盜鏈,apache本身就能夠經過配置來禁止盜鏈。
五、控制大文件的下載。大文件的下載會佔用很大的流量,對於非SCSI硬盤來講會消耗,使得網站響應能力降低。
六、使用不一樣的主機分流主要流量
七、使用流量統計軟件。在網站上安裝一個流量統計軟件,能夠即時知道哪些地方耗費了大量流量,哪些頁面須要再進行優化。
八、分庫分表。
設定網站的用戶數量在千萬級,可是活躍用戶的數量只有1%,如何經過優化數據庫提升活躍用戶的訪問速度?
咱們能夠根據用戶的活躍程度,把活躍的用戶提取出來放到另一張表裏面,每次活躍的用戶登錄的時候就直接到活躍用戶表中進行查詢,這樣就提升了數據庫的查詢速度。
瞭解XSS攻擊嗎? 如何防止 ?
XSS是跨站腳本攻擊,首先是利用跨站腳本漏洞以一個特權模式去執行攻擊者構造的腳本,而後利用不安全的Activex控件執行惡意的行爲。
使用htmlspecialchars()函數對提交的內容進行過濾,使字符串裏面的特殊符號實體化。
SQL注入漏洞產生的緣由 ? 如何防止?
SQL注入產生的緣由:程序開發過程當中不注意規範書寫sql語句和對特殊字符進行過濾,致使客戶端能夠經過全局變量POST和GET提交一些sql語句正常執行。
如何進行防SQL注入?
一、過濾掉一些常見的數據庫操做關鍵字:select,insert,update,delete,and,*等或者經過系統函數:addslashes(須要被過濾的內容)來進行過濾。
二、在PHP配置文件中Register_globals=off;設置爲關閉狀態 //做用將註冊全局變量關閉。
三、SQL語句書寫的時候儘可能不要省略小引號(tab鍵上面那個)和單引號
四、提升數據庫命名技巧,對於一些重要的字段根據程序的特色命名,取不易被猜到的
五、對於經常使用的方法加以封裝,避免直接暴漏SQL語句
六、開啓PHP安全模式Safe_mode=on;
七、打開magic_quotes_gpc來防止SQL注,Magic_quotes_gpc=off;默認是關閉的,它打開後將自動把用戶提交的sql語句的查詢進行轉換,把'轉爲\',這對防止sql注入有重大做用。所以開啓:magic_quotes_gpc=on;
八、控制錯誤信息,關閉錯誤提示信息,將錯誤信息寫到系統日誌。
九、使用mysqli或pdo預處理。
用PHP寫出一個安全的用戶登陸系統須要注意哪些方面。
一、密碼要使用MD5(密碼+字符串)進行加密。
二、登陸表單的名稱不要跟數據庫字段同樣,以避免暴漏表字段。
三、用戶表的表名、字段名、密碼儘可能用不容易被猜到的。
四、要使用驗證碼驗證登錄,以防止暴力破解。
五、驗證提交的數據是否是來自本網站。
六、登陸後臺處理代碼數據庫部分使用預處理,作好過濾,防止sql注入。
如何實現多個線程安全的寫入一個文件數據。
採用鎖機制,當一個用戶在對此文件進行讀寫入操做時,將此文件鎖定,操做完畢後解除鎖定,在該用戶進行讀寫入操做過程當中,其餘用戶不能操做此文件,須要排隊等待。
字符串轉數組,數組轉字符串,字符串截取,字符串替換,字符串查找的函數分別是什麼?
Implode()、explode()、substr()、str_replace()、strpos、strrpos、strstr
GD庫是作什麼用的? (1分)
gd庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。
在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。
在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。
談談對mvc的認識?
由模型(model),視圖(view),控制器(controller)完成的應用程序
由模型發出要實現的功能到控制器,控制器接收組織功能傳遞給視圖;
MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分紅三個核心部件:模型、視圖、控制器。它們各自處理本身的任務。
視圖是用戶看到並與之交互的界面。
模型表示企業數據和業務規則。
控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。
MVC的優勢:低耦合性、高重用性和可適用性、較低的生命週期成本、快速的部署、可維護性、可擴展性,有利於軟件工程化管理
PHP如何拋出和接收錯誤?
使用try...catch,異常的代碼放在try代碼塊內,若是沒有觸發異常,則代碼繼續執行,若是異常被觸發,就會拋出一個異常。Catch代碼塊捕獲異常,並建立一個包含異常信息的對象。$e->getMessage(),輸出異常的錯誤信息。
一、命令注入(Command Injection)
二、eval注入(Eval Injection)
三、客戶端腳本攻擊(Script Insertion)
四、跨網站腳本攻擊(Cross Site Scripting, XSS)
五、SQL注入攻擊(SQL injection)
六、跨網站請求僞造攻擊(Cross Site Request Forgeries, CSRF)
七、Session 會話劫持(Session Hijacking)
八、Session 固定攻擊(Session Fixation)
九、HTTP響應拆分攻擊(HTTP Response Splitting)
十、文件上傳漏洞(File Upload Attack)
十一、目錄穿越漏洞(Directory Traversal)
十二、遠程文件包含攻擊(Remote Inclusion)
1三、動態函數注入攻擊(Dynamic Variable Evaluation)
1四、URL攻擊(URL attack)
1五、表單提交欺騙攻擊(Spoofed Form Submissions)
1六、HTTP請求欺騙攻擊(Spoofed HTTP Requests)
幾個重要的php.ini選項
Register Globals
php>=4.2.0,php.ini的register_globals選項的默認值預設爲Off,當register_globals的設定爲On時,程序能夠接收來自服務器的各類環境變量,包括表單提交的變量,並且因爲PHP沒必要事先初始化變量的值,從而致使很大的安全隱患。
safe_mode
安全模式,PHP用來限制文檔的存取、限制環境變量的存取,控制外部程序的執行。啓用安全模式必須設置php.ini中的safe_mode = On
一、限制文件存取
safe_mode_include_dir = 「/path1:/path2:/path3″
不一樣的文件夾用冒號隔開
二、限制環境變量的存取
safe_mode_allowed_env_vars = string
指定PHP程序能夠改變的環境變量的前綴,如:safe_mode_allowed_env_vars = PHP_ ,當這個選項的值爲空時,那麼php能夠改變任何環境變量
safe_mode_protected_env_vars = string
用來指定php程序不可改變的環境變量的前綴
三、限制外部程序的執行
safe_mode_exec_dir = string
此選項指定的文件夾路徑影響system、exec、popen、passthru,不影響shell_exec和「` `」。
disable_functions = string
不一樣的函數名稱用逗號隔開,此選項不受安全模式影響
magic quotes
用來讓php程序的輸入信息自動轉義,全部的單引號(「’」),雙引號(「」」),反斜槓(「\」)和空字符(NULL),都自動被加上反斜槓進行轉義
magic_quotes_gpc = On 用來設置magic quotes 爲On,它會影響HTTP請求的數據(GET、POST、Cookies)
程序員也可使用addslashes來轉義提交的HTTP請求數據,或者用stripslashes來刪除轉義
使用過哪些PHP框架。
一、YII框架:
二、ThinkPHP框架:
php中,模板引擎的目的是什麼? 你用過哪些模板引擎?
使用模板引擎的目的是使程序的邏輯代碼和html界面代碼分離開,是程序的結構更清晰。
使用過的模板引擎:Smarty、ThinkPHP的ThinkTemplate
你所知道的php數組相關的函數?
array()----建立數組
array_combine()----經過合併兩個數組來建立一個新數組
range()----建立並返回一個包含指定範圍的元素的數組
compact()----創建一個數組
array_chunk()----將一個數組分割成多個
array_merge()----把兩個或多個數組合併成一個數組
array_slice()----在數組中根據條件取出一段值
array_diff()----返回兩個數組的差集數組
array_intersect()----計算數組的交集
array_search()----在數組中搜索給定的值
array_splice()----移除數組的一部分且替代它
array_key_exists()----判斷某個數組中是否存在指定的key
shuffle()----把數組中的元素按隨機順序從新排列
array_flip()----交換數組中的鍵和值
array_reverse()----將原數組中的元素順序翻轉,建立新的數組並返回
array_unique()----移除數組中重複的值
你所熟悉的開源項目有哪些?
你所知道的設計模式有哪些?
工廠模式、策略模式、單元素模式、觀察者模式、命令鏈模式
常使用那些代碼版本控制軟件?
一般一個項目是由一個團隊去開發,每一個人將本身寫好的代碼提交到版本服務器,由項目負責人按照版本進行管理,方便版本的控制,提升開發效率,保證須要時能夠回到舊版本。
經常使用的版本控制器:SVN
PHP加速模式/擴展? PHP調試模式/工具?
Zend Optimizer加速擴展
調試工具:xdebug
show processlist; 這個命令的做用?
顯示哪些線程正在運行
SHOW VARIABLES; 這個命令的做用?
顯示系統變量和值
SHOW VARIABLES like ’%conn%’; 這個命令的做用?
顯示系統變量名包含conn的值
LEFT JOIN 寫一個SQL語句?
SELECT A.id,A.class FROM A LEFT JOIN B ON A.cid=B.id
請寫出5個經常使用的unix操做命令。
一、Ls -l
二、tar -zxvf
三、Touch
四、Cat
五、Mkdir
六、rm
請寫出如下5個UNIX系統配置文件/服務的做用。
/etc/passwd
/etc/hosts
/etc/fstab
Crontab
sshd
一、/etc/passwd :用戶信息文件,其中包含用戶名、用戶是否有密碼、用戶ID及用戶所屬組
二、/etc/hosts:主機名數據庫,包IP地址、主機名或域名、別名等信息,在此文件中添加記錄可繞過DNS
三、/etc/fstab 保存了系統全部分區信息的配置文件。
四、Crontab 計劃任務命令
五、Sshd 遠程鏈接管理命令
請列出5個經常使用的PHP操做MySQL的函數
一、Mysql_connect()
二、Mysql_select_db()
三、Mysql_query()
四、Mysql_fetch_row()
五、Mysql_close()
什麼是時間戳? 如何取得當前時間戳?
時間戳是從1970年1月1日 00:00:00到指定日期的秒數。
獲取當前時間戳:time()
有一個網頁地址, 好比PHP開發資源網主頁: http://www.phpres.com/index.html,如何獲得它的內容?
獲取網頁內容:
$url=」http://www.phpres.com/index.html「;
$str=file_get_contents($url);
如何獲得當前執行腳本路徑,包括所獲得參數
$_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];取得當前頁面的完整路徑和參數。
取得參數:$_SERVER['QUERY_STRING'];
如何用php的環境變量獲得一個網頁地址的內容?ip地址又要怎樣獲得?
echo $_SERVER ["PHP_SELF"];
echo $_SERVER ["SERVER_ADDR"];
求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數
$begin=strtotime(「2007-2-5″);
$end=strtotime(「2007-3-6″);
echo ($end-$begin)/(24*3600);
給一個變量賦值爲0123,可是輸出該變量的值老是爲其餘數字,請問這是什麼問題?
PHP 解釋器會把以0開始的數字當作是八進制的,因此它的值會變成八進制的。
PHP裏面如何定義一個常量(constant)?
經過define()指令,例如:define(」MYCONSTANT」, 100)
如何對一個變量進行值傳遞?
能夠像C++那樣, 在變量的前面加上&, 例如:$a = &$b
在PHP裏面能夠對string 「10″ 和整型 11進行比較嗎?
能夠,PHP內部實現會把全部東西轉換成整型,因此數字10和11能夠進行比較
在什麼狀況下須要用endif 來結束條件語句?
當if語句後面跟的是冒號」:」而不是大括號{時,須要用endif來結束條件語句
優化MYSQL數據庫的方法。
一、選取最適用的字段屬性,儘量減小定義字段長度,儘可能把字段設置NOT NULL,例如’省份,性別’,最好設置爲ENUM
二、使用鏈接(JOIN)來代替子查詢:
三、使用聯合(UNION)來代替手動建立的臨時表
四、事務處理:
五、鎖定表,優化事務處理:
六、使用外鍵,優化鎖定表
七、創建索引:
a.格式:
(普通索引)->
建立:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
創表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(惟一索引)->
建立:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
創表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主鍵)->
它是惟一索引,通常在建立表是創建,格式爲:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
八、優化查詢語句
分別指出php.ini中 magic_quotes_gpc, magic_quotes_runtime兩項參數的做用.
Magic_quotes_gpc的做用是在POST、GET、COOKIE數據上使用addslashes()自動轉義。
Magic_quotes_runtime參數的做用是設置狀態,當狀態爲0時則關閉自動轉義,設置爲1則自動轉義,將數據庫中取出來的單引號、雙引號、反斜線這些字符加上反斜槓轉義。
如何快速下載一個遠程http服務器上的圖片文件到本地?
$file=」";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=」./」;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
一個字節佔多少bit ? 一個IPv4地址佔幾個字節? 一個IPv6地址呢?
一個字節佔8bit,一個IPV4佔用4字節,一個IPV6佔用16字節。
如何實例化一個名爲」myclass」的對象?
new myclass()
你如何訪問和設置一個類的屬性? (2分)
$object = new myclass();
$newstr = $object->test;
$object->test = "info";
請寫出一個正則表達式,用於匹配一個HTML文件中<img />標記中的圖片地址
$url=」<img src=’11.jpg’/>」;
/<img[\s]*src=['|\"](.*)['|\"][\s]*\/>/
在PHP中error_reporting這個函數有什麼做用?
設置 PHP 的報錯級別並返回當前級別。
使用PHP描述快速排序算法,對象能夠是一個數組?
原理:快速排序使用分治策略來把待排序數據序列分爲兩個子序列,具體步驟爲:
(1)從數列中挑出一個元素,稱該元素爲「基準」。
(2)掃描一遍數列,將全部比「基準」小的元素排在基準前面,全部比「基準」大的元素排在基準後面。
(3)經過遞歸,將各子序列劃分爲更小的序列,直到把小於基準值元素的子數列和大於基準值元素的子數列排序。
//快速排序(數組排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i<$num;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i=0;$i<$r;$i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}
使用PHP描述順序查找和二分查找(也叫作折半查找)算法,順序查找必須考慮效率,對象能夠是一個有序數組
//二分查找(數組裏查找某個元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//順序查找(數組裏查找某個元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
寫一個二維數組排序算法函數,可以具備通用性,能夠調用php內置函數
//二維數組排序, $arr是數據,$keys是排序的健值,$order是排序規則,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
PHP session擴展默認將session數據儲存在哪裏? D
A) SQLite Database
B) MySQL Database
C) Shared Memory
D) File System
E) Session Server
若是你想要自動加載類,下面哪一種函數聲明是正確的 C
A) function autoload($class_name)
B) function __autoload($class_name, $file)
C) function __autoload($class_name)
D) function _autoload($class_name)
E) function autoload($class_name, $file)
設計一個頁面(4個 div 第一個div 寬960px 居中;嵌入第2-4個div等分960px;)
<style>
Body{ Text-align:center; Margin:0; Padding:0; }
#box{ Width:960px; Margin:0 auto; }
.small{ Width:320px; Float:left; }
</style>
<div id=’box’>
<div class=’small’></div>
<div class=’small’></div>
<div class=’small’></div>
</div>
簡述如何獲得當前執行腳本路徑,包括所獲得參數。(2分)
$script_name = basename(__file__); print_r($script_name);
js中網頁前進和後退的代碼
前進: history.forward();=history.go(1);
後退: history.back();=history.go(-1);
JS表單彈出對話框函數是?得到輸入焦點函數是? (2分)
彈出對話框: alert(),prompt(),confirm()
得到輸入焦點 focus()
JS的轉向函數是?怎麼引入一個外部JS文件?(2分)
window.location.href,
<script type="text/javascript" src="hello.js"></script>
用javascript取得一個input的值?取得一個input的屬性?
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
用Jquery取得一個input的值?取得一個input的屬性?
$(「input[name='aa']「).val();
$(「input[name='aa']「).attr(‘name’);
寫一個簡單的jquery顯示隱藏代碼?
$("#aa").hide();
$("#aa").show();
javascript可否定義二維數組,若是不能你如何解決?
javascript不支持二維數組定義,能夠用arr[0] = new array()來解決
請使用JavaScript寫出三種產生一個Image 標籤的方法(提示:從方法、對象、HTML角度考慮)
(1)var img = new Image();
(2)var img = document.createElementById(「image」)
(3)img.innerHTML = 「<img src=」xxx.jpg」 />」
假設a.html和b.html在同一個文件夾下面,用javascript實現當打開a.html五秒鐘後,自動跳轉到b.html。
<script>
function go2b(){
window.location = 「b.html」;
window.close();
}
setTimeout( 「go2b()」,5000 ); //5秒鐘後自動執行go2b()
</script>
Linux的目錄進行遍歷,編寫shell腳本
#!/bin/bash
Tree
指出如下代碼片斷中的SQL注入漏洞以及解決方法(magic_quotes_gpc = off)
mysql_query(「select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%’」, $link);
注入漏洞主要存在用戶提交的數據上,這裏的注入漏洞主要是$_GET[catid]和$_GET[keyword]
解決注入漏洞:
$_GET[catid]=intval($_GET[catid]);
$sql=」select id,title from content where catid=’{$_GET[catid]}’ and title like ’%$_GET[keywords]%」;
$sql=addslashes($sql);
Mysql_query($sql);
把 John 新增到 users數組?
$users[] = ‘john’; array_push($users,‘john’);
在PHP中error_reporting這個函數有什麼做用?
error_reporting() 設置 PHP 的報錯級別並返回當前級別。
如何修改SESSION的生存時間.
方法1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache
方法2:$savePath = 「./session_save_dir/」;
$lifeTime = 小時 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
方法3:
setcookie() and session_set_cookie_params($lifeTime);
請寫一個函數,實現如下功能:
字符串「open_door」 轉換成 「OpenDoor」、」make_by_id」 轉換成 」MakeById」。
方法:
function str_explode($str){
$str_arr=explode(「_」,$str);$str_implode=implode(」 「,$str_arr); $str_implode=implode
(「」,explode(」 「,ucwords($str_implode)));
return $str_implode;
}
$strexplode=str_explode(「make_by_id」);print_r($strexplode);
方法二:$str=」make_by_id!」;
$expStr=explode(「_」,$str);
for($i=0;$i<count($expStr);$i++){
echo ucwords($expStr[$i]);
}
方法三:echo str_replace(‘ ‘,」,ucwords(str_replace(‘_’,’ ‘,’open_door’)));
下面的類是否正確,若是正確請補全方法輸入類屬性$_a;錯誤請修改並輸出屬性$_a
<?php
Class A{
protected$a=1;
publicfunction test(){
echo$this->a;
}
}
答:
$a=new A;
$a->test();
請取出數組中的最大值?
$a=array(1,9,3,5,6,8);
$a=array(1,2,3,4,5,9);
答:
$b=max($a);
echo $b;
or
$a=array(1,9,3,5,6,8);
rsort($a);
Echo array_shift($a);
寫出一個簡單的靜態數組?
Class A{
Static $a=array('11'=>'1111');
}
Print_r(A::$a);
從表login中選出name字段包含admin的前10條結果全部信息的sql語句
Select *from login where name like '%admin%' limit 0,10;
寫出發貼數最多的十我的名字的SQL,利用下表:members(id,username,posts,pass,email)
SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
檢測一個變量是否有設置的函數是否?是否爲空的函數是?(2分)
isset($str),empty($str);
取得查詢結果集總數的函數是?(1分)
答:mysql_num_rows($result);
$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值 (1分)
答:echo $array[0];
完成如下:
(一)建立新聞發佈系統,表名爲message有以下字段 (3分)
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
在數據庫test中的一個表student,字段是name,class,score。分別表明姓名、所在班級,分數。
1) 學出每一個班級中的學生,按照成績降序排序;
select * from student order by score desc;
2) 查出每一個班的及格人數和不及格人數,格式爲:class、及格人數、不及格人數;
Select A.class,A.及格人數,B.不及格人數 from (select class, count(*) as ’及格人數‘ from student where score>=60 group by class) as A,(select class,count(*) as ’不及格人數‘ from student where score<60 group by class) as B where A.class=B.class;
3) 用PHP寫入鏈接數據庫(「localhost」,」msuser」,」mspass」)、執行以上SQL、顯示結果、判斷錯誤、關閉數據庫的過程;
$conn=mysql_connect(‘localhost’,'root’,’12345′);
Mysql_select_db(‘test’);
$sql=」";
$result=Mysql_query($sql);
Mysql_close();
ftp://pub.foo.bar.com:2121/incoming/rls.sfv 請給出這個URL各部分的意義
一、ftp:// ;使用的協議是:ftp
二、Pub.foo.bar.com 是域名
三、2121 是使用的端口
四、Incoming/rls.sfv 是當前訪問的文件。
下列不屬於Javascrip DOM操做事件的是 C
A. onclick
B. onkeydown
C. onbodyload
D. onmouseover
下列PHP函數中不能直接在頁面輸出字符串的函數是 B
A. echo
B. sprintf
C. printf
在PHP中,‘+’操做符的功能不包括 A
A. 字符串鏈接
B. 數組數據合併
C. 變量數據相加
下面哪一個選項沒有將john添加到users數組中?C
(A) $users[] = ’john’;
(B) array_push($users, ’john’);
(C) $users ||= ’john’;
(D) array_unshift($users, ’john’);
請列出3種PHP數組循環操做的語法,並註明每種循環的優缺點
一、Foreach() 能夠遍歷關聯數組和索引數組,操做簡單。
二、For() 只能遍歷索引數組。
三、Each list while 以關聯和索引兩種方式遍歷數組,操做複雜。
請列出3個PHP中的預約義全局變量
一、$_SESSION
二、$_COOKIE
三、$_SERVER
四、$_GET
五、$_POST
從PHP4.2.0開始 PHP默認配置將register_globals配置設定爲off,請指出這個設定的做用和對PHP相關程序的影響。
Register_globals=off;的時候,關閉了全局變量註冊,訪問POST方式提交值時用$_POST[];來訪問,訪問GET方式提交的值時用$_GET[];方式訪問。
輸出用戶的IP地址,而且判斷用戶的IP地址是否在192.168.1.100 — 192.168.1.150之間
Echo $ip=getenv(‘REMOTE_ADDR’);
$ip=Str_replace(‘.’,」",$ip);
If($ip<1921681150 && $ip>1921681100){
Echo ’ip在192.168.1.100—–192.168.1.150之間‘;
}Else{
Echo ’ip不在192.168.1.100—–192.168.1.150之間‘;
}
輸出爲Mozilla/4.0(compatible;MSIE5.01;Window NT 5.0)時,可能的輸出語句是:B
A.$_SERVER['HTTP_USER_AGENT_TYPE'];
B. $_SERVER['HTTP_USER_AGENT'];
C. $_SERVER['USER_AGENT'];
D. $_SERVER['AGENT'];
下面說法不正確的是:C
A. PHP有四種標量類型:布爾型(boolean),整型(integer),浮點型(float),字符串(string)
B. 浮點型(float)與雙精度型(double)是同一種類型
C. 符合類型包括:數組(array),對象(object),資源(resource)
D. 僞類型:混合型(mixed),數字型(number),回調(callback)
下面不是PHP語法的組成部分的函數是:AD
A. array
B. eval
C. each
D. list
執行下面的代碼的結果是什麼?A
<?php
$bool = TRUE;
echo gettype($bool);
echo is_string($bool);
?>
A. boolean
B. boolean0
C. booleanFALSE
D. booleanfalse
一、 若是能將類的方法定義成static,就儘可能定義成static,它的速度會提高將近4倍。
二、$row[’id’] 的速度是$row[id]的7倍。
三、echo 比 print快,而且使用echo的多重參數(譯註:指用逗號而不是句點)代替字符串鏈接,好比echo$str1,$str2。
四、在執行for循環以前肯定最大循環數,不要每循環一次都計算最大值,最好運用foreach代替。
五、註銷那些不用的變量尤爲是大數組,以便釋放內存。
六、儘可能避免使用__get,__set,__autoload。
七、require_once()代價昂貴。
八、include文件時儘可能使用絕對路徑,由於它避免了PHP去include_path裏查找文件的速度,解析操做系統路徑所需的時間會更少。
九、若是你想知道腳本開始執行(譯註:即服務器端收到客戶端請求)的時刻,使用$_SERVER[‘REQUEST_TIME’]要好於 time()。
十、函數代替正則表達式完成相同功能。
十一、str_replace函數比preg_replace函數快,但strtr函數的效率是str_replace函數的四倍。
十二、若是一個字符串替換函數,可接受數組或字符做爲參數,而且參數長度不太長,那麼能夠考慮額外寫一段替換代碼,使得每次傳遞參數是一個字符,而不是隻寫一行代碼接受數組做爲查詢和替換的參數。
1三、使用選擇分支語句(譯註:即switch case)好於使用多個if,else if語句。
1四、用@屏蔽錯誤消息的作法很是低效,極其低效。
1五、打開apache的mod_deflate模塊,能夠提升網頁的瀏覽速度。
1六、數據庫鏈接當使用完畢時應關掉,不要用長鏈接。
1七、錯誤消息代價昂貴。
1八、在方法中遞增局部變量,速度是最快的。幾乎與在函數中調用局部變量的速度至關。
1九、遞增一個全局變量要比遞增一個局部變量慢2倍。
20、遞增一個對象屬性(如:$this->prop++)要比遞增一個局部變量慢3倍。
2一、遞增一個未預約義的局部變量要比遞增一個預約義的局部變量慢9至10倍。
2二、僅定義一個局部變量而沒在函數中調用它,一樣會減慢速度(其程度至關於遞增一個局部變量)。PHP大概會檢查看是否存在全局變量。
2三、方法調用看來與類中定義的方法的數量無關,由於我(在測試方法以前和以後都)添加了10個方法,但性能上沒有變化。
2四、派生類中的方法運行起來要快於在基類中定義的一樣的方法。
2五、調用帶有一個參數的空函數,其花費的時間至關於執行7至8次的局部變量遞增操做。相似的方法調用所花費的時間接近於15次的局部變量遞增操做。
2六、Apache解析一個PHP腳本的時間要比解析一個靜態HTML頁面慢2至10倍。儘可能多用靜態HTML頁面,少用腳本。
2七、除非腳本能夠緩存,不然每次調用時都會從新編譯一次。引入一套PHP緩存機制一般能夠提高25%至100%的性能,以避免除編譯開銷。
2八、儘可能作緩存,可以使用memcached。memcached是一款高性能的內存對象緩存系統,可用來加速動態Web應用程序,減輕數據庫負載。對運算碼 (OP code)的緩存頗有用,使得腳本沒必要爲每一個請求作從新編譯。
2九、當操做字符串並須要檢驗其長度是否知足某種要求時,你想固然地會使用strlen()函數。此函數執行起來至關快,由於它不作任何計算,只返回在zval 結構(C的內置數據結構,用於存儲PHP變量)中存儲的已知字符串長度。可是,因爲strlen()是函數,多多少少會有些慢,由於函數調用會通過諸多步驟,如字母小寫化(譯註:指函數名小寫化,PHP不區分函數名大小寫)、哈希查找,會跟隨被調用的函數一塊兒執行。在某些狀況下,你可使用isset() 技巧加速執行你的代碼。
(舉例以下)
if (strlen($foo) < 5) { echo 「Foo is too short」$$ }
(與下面的技巧作比較)
if (!isset($foo{5})) { echo 「Foo is too short」$$ }
調用isset()恰巧比strlen()快,由於與後者不一樣的是,isset()做爲一種語言結構,意味着它的執行不須要函數查找和字母小寫化。也就是說,實際上在檢驗字符串長度的頂層代碼中你沒有花太多開銷。 3四、當執行變量$i的遞增或遞減時,$i++會比++$i慢一些。這種差別是PHP特有的,並不適用於其餘語言,因此請不要修改你的C或 Java代碼並期望它們能當即變快,沒用的。++$i更快是由於它只須要3條指令(opcodes),$i++則須要4條指令。後置遞增實際上會產生一個臨時變量,這個臨時變量隨後被遞增。而前置遞增直接在原值上遞增。這是最優化處理的一種,正如Zend的PHP優化器所做的那樣。牢記這個優化處理不失爲一個好主意,由於並非全部的指令優化器都會作一樣的優化處理,而且存在大量沒有裝配指令優化器的互聯網服務提供商(ISPs)和服務器。 3五、並非事必面向對象(OOP),面向對象每每開銷很大,每一個方法和對象調用都會消耗不少內存。 3六、並不是要用類實現全部的數據結構,數組也頗有用。 3七、不要把方法細分得過多,仔細想一想你真正打算重用的是哪些代碼? 3八、當你須要時,你總能把代碼分解成方法。 3九、儘可能採用大量的PHP內置函數。 40、若是在代碼中存在大量耗時的函數,你能夠考慮用C擴展的方式實現它們。 4一、評估檢驗(profile)你的代碼。檢驗器會告訴你,代碼的哪些部分消耗了多少時間。Xdebug調試器包含了檢驗程序,評估檢驗整體上能夠顯示出代碼的瓶頸。 4二、mod_zip可做爲Apache模塊,用來即時壓縮你的數據,並可以讓數據傳輸量下降80%。 4三、在能夠用file_get_contents替代file、fopen、feof、fgets等系列方法的狀況下,儘可能用 file_get_contents,由於他的效率高得多!可是要注意file_get_contents在打開一個URL文件時候的PHP版本問題; 4四、儘可能的少進行文件操做,雖然PHP的文件操做效率也不低的; 4五、優化Select SQL語句,在可能的狀況下儘可能少的進行Insert、Update操做; 4六、儘量的使用PHP內部函數(可是我卻爲了找個PHP裏面不存在的函數,浪費了本能夠寫出一個自定義函數的時間,經驗問題啊!); 4七、循環內部不要聲明變量,尤爲是大變量:對象(這好像不僅是PHP裏面要注意的問題吧?); 4八、多維數組儘可能不要循環嵌套賦值; 4九、在能夠用PHP內部字符串操做函數的狀況下,不要用正則表達式; 50、foreach效率更高,儘可能用foreach代替while和for循環; 5一、用單引號替代雙引號引用字符串; 5二、「用i+=1代替i=i+1。符合c/c++的習慣,效率還高」; 5三、對global變量,應該用完就unset()掉。