php中級面試題
1. 騰訊php面試題
騰訊php面試題
php程序員一般會遇到的面試題:
1. 基本知識點
HTTP協議中幾個狀態碼的含義:503 500 401 200 301 302
Include require include_once require_once 的區別.
PHP/Mysql中幾個版本的進化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改進等。
HEREDOC介紹
寫出一些php魔幻方法;
一些編譯php時的configure 參數
向php傳入參數的兩種方法。
(mysql)請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別;
error_reporting 等調試函數使用
您是否用過版本控制軟體? 如果有您用的版本控制軟體的名字是?
posix和perl標準的正則表達式區別;
Safe_mode 打開後哪些地方受限.
寫代碼來解決多進程/線程同時讀寫一個文件的問題。
寫一段上傳文件的代碼。
Mysql 的存儲引擎,myisam和innodb的區別。
2. web 架構,安全,項目經驗
介紹xdebug,apc,eAccelerator,Xcache,Zend opt的使用經驗。
使用mod_rewrite,在伺服器上沒有/archivers/567.html這個物理文件時,重定向到index.php?id=567 ,請先打開mod_rewrite.
MySQL資料庫作發布系統的存儲,一天五萬條以上的增量,預計運維三年,怎麼優化?
寫出一種排序演算法(原理),並說出優化它的方法。
請簡單闡述您最得意的開發之作
對於大流量的網站,您採用什麼樣的方法來解決各頁面訪問量統計問題
您是否用過模板引擎? 如果有您用的模板引擎的名字是?
請介紹Session的原理,大型網站中Session方面應注意什麼?
測試php性能和mysql資料庫性能的工具,和找出瓶頸的方法。
正則提出一個網頁中的'所有鏈接.
介紹一下常見的SSO(單點登陸)方案(比如dedecms整合discuz的passport)的原理。
您寫過的PHP框架的特點,主要解決什麼問題,與其他框架的不同點。
大型的論壇/新聞文章系統/SNS網站在性能優化上有什麼區別?
相冊類應用:要求在瀏覽器中能同時選中並上傳多個文件,圖片要求能剪裁,壓縮包在伺服器端解壓。能上傳單個達50M的文件。上傳過程中有進度條顯示。每個圖片能生成四種大小縮略圖,視頻文件要轉成flv供flash播放。敘述要涉及的各類開源軟體和簡單用途。
一群猴子排成一圈,按1,2,…,n依次編號。然後從第1隻開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的進行下去,直到最後只剩下一隻猴子為止,那隻猴子就叫做大王。要求編程模擬此過程,輸入m、n, 輸出最後那個大王的編號。用程序模擬該過程。
3. unix/linux 基本使用
linux下查看當前系統負載信息的一些方法。
vim的基本快捷鍵。
ssh 安全增強方法;密碼方式和rsa key 方式的配置。
rpm/apt/yum/ports 裝包,查詢,刪除的基本命令。
Makefile的基本格式,gcc 編譯,連接的命令,-O0 和-O3區別。
gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this對象的作用域。
IE和firefox事件冒泡的不同。
什麼是怪異模式,標准模式,近標准模式。
DTD的定義
IE/firefox常用hack.
firefox,IE下的前端js/css調試工具。
;2. 誰能告訴我一些PHP開發常見的面試題呢
1、表單提交get和post有何區別?
答:get的方式是把數據在地址欄中發送,get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
2、用PHP列印出前一天的時間格式是2006-5-1022:21:21
復制代碼代碼示例:
echo date("Y-m-dH:i:s",time()-(3600*24));或echodate("Y-m-d H:i:s",strtotime("-1 day"));
3、php中include和require的區別?
這兩種結構除了在如何處理失敗之外完全一樣。include()產生一個警告而 require() 則導致一個致命錯誤。換句話說,如果你想在遇到丟失文件時停止處理頁面就用 require()。include() 就不是這樣,腳本會繼續運行。
4、echo(),print(),print_r()的區別
echo可以接多個參數,print只能接一個參數,它們都是PHP的語言結構,print_r是遞規列印,用來列印數組或對象
5、能夠使HTML和PHP分離開使用的模板
smarty,phplib,SmartTemplate
6、如何理解MVC模式?
首先說一下框架,框架:就是別人把一些底層,常用操作.比如數據操作(增,刪,改,查)寫好.你來直接用.其它的功能要自己來做。
MVC:設計模式,M模型,V顯示,C控制.現在許多框架都是基於MVC來做的把邏輯和顯示分開.比如你要換頁面,只需要改V裡面的東西並不需要再去變動程序!(詳細的東西可以上網上查一下)
7、如何實現PHP、JSP交互?
PHP提供了支持JAVA的類庫文件,或者通過HTTP協議來交互數據
8、使用哪些工具進行版本控制?
VSS,CVS,SVN
http://www.jbxue.com/php/25446.html
3. PHP中高級面試題 – 第一天
一、寫一個函數,獲取一篇文章內容中的全部圖片,並下載
二、什麼是 CSRF 攻擊?XSS 攻擊?如何防範?
CSRF:跨站請求偽造,可以通過通過判斷來源和加 Token 的方式來防範。
XSS:跨站腳本攻擊,可以通過對內容轉義和過濾來防範,還有 CSP
三、應用中我們經常會遇到在 user 表隨機調取 10 條數據來展示的情況,簡述你如何實現該功能。
四、MYSQL 中主鍵與唯一索引的區別
主鍵:絕對不能有空值。唯一索引:可以有空值
五、http 與 https 的主要區別
關鍵是 S 上。簡而言之,https 建立連接後要先把 SSL 的證書發下去,有了公鑰和私鑰,就可以解密了。
六、兩台 mysql 伺服器,其中一台掛了,怎麼讓業務端無感切換,並保證正常情況下講台伺服器的數據是一致的
不是核心業務的話,先停寫,把備機拉起來,查看兩台機器的日誌,進行數據補償,開寫。
如果是核心業務的話,現在所有的操作都在正常的狀態機器上。把好的這台機器的備機拉起來,當主機。
以上全是應急操作。實際上資料庫的容災設計要復雜得多。
面試官要是問你,備機的數據不一致怎麼辦,你要勇敢懟回去,你們每秒多少寫入操作。按照百萬級表,每秒 1000 的寫入效率,正常的設計是,分布在 2 台機器上每台 500。這個級別的數據同步,出現差異的概率 可以忽略不計的。有一台出現問題,另一台也可以抗住。
(正常的操作,還是先停寫,等數據一致,切換,開寫。我們公司搞這些切換都是在凌晨 4.00 左右,核心業務的每秒寫操作,只有十幾個。前後耽擱不到 20 秒)。
七、10 瓶水,其中一瓶有毒,小白鼠喝完有毒的水之後,會在 24 小時後死亡,問:最少用幾只小白鼠可以在 24 小時後找到具體是哪一瓶水有毒。
答案:四隻
二進制問題。薛定諤的老鼠。
一隻老鼠有兩個狀態,死活,對應 01。假設老鼠的個數為 A,則有 2^A>=10; A=4;
思路很簡單,十瓶葯編號:0,1,10,11….1001;
0 不喝。第一隻老鼠喝所有個位是 1 的:13579,第二隻喝十位是 1 的,第三隻和百位是 1 的,第四隻喝千位是 1 的。
24 小時後,看下死了的是 1,活著的是 0。按老鼠的順序乖乖站好…… 假如第一隻和第三隻死了,那就是 0101,就是 5 有問題。
4. PHP面試題(附答案)
以下是一些常見的PHP面試題及其答案:
FILE的含義及使用:
- 答案:__FILE__是一個魔術常量,返迴文件的完整路徑和名稱,包含絕對路徑。在PHP 4.0.2及以後的版本中總是如此,而在早期版本中可能為相對路徑。
獲取客戶端IP地址:
- 答案:使用$_SERVER['REMOTE_ADDR']變數可以獲取客戶端的IP地址。
跳轉頁面的header函數示例:
- 答案:header;用於頁面重定向。
去除HTML文本中的JS腳本:
- 答案:使用正則表達式如preg_replace</script>/is', '', $str);來去除HTML文本中的JS腳本。
刪除數組中的空值:
- 答案:使用array_filter;函數可以過濾掉數組中的空值。
獲取當前時間戳和前一天的時間格式化:
- 答案:$timestamp = time; echo date);。
PHP編碼轉換函數:
- 答案:iconv用於字元編碼轉換,將字元串從UTF8編碼轉換為GBK編碼。
字元串轉數組:
- 答案:$arr = array_map);將逗號分隔的字元串轉化為數組。
serialize和unserialize功能:
- 答案:serialize用於序列化數據,將PHP的值或對象轉換為一個可存儲或傳輸的字元串表示;unserialize用於反序列化已存儲的數據,將字元串恢復為PHP的值或對象。
指定月的天數查詢函數:
- 答案:function daysInMonth { return date); }。該函數返回指定年份和月份的天數。
獲取文件擴展名:
- 答案:$ext = pathinfo;。使用pathinfo函數獲取文件路徑信息,並通過PATHINFO_EXTENSION參數獲取文件擴展名。
PHP模板引擎使用經驗:
- 答案:常用的PHP模板引擎有Smarty、Twig以及ThinkPHP自帶的模板引擎等。模板引擎可以提高代碼的可讀性和可維護性,將前端頁面與後端邏輯分離。
類的實例化及操作:
- 答案:創建一個類class MyClass { public $attr; function __construct { $this>attr = 'example' } public function myMethod { echo $this>attr; } },然後實例化並調用方法:$obj = new MyClass; $obj>myMethod;。
MySQL資料庫操作示例:
- 答案:可以使用mysqli或PDO連接MySQL資料庫。具體連接和操作的代碼略,但通常包括連接資料庫、執行SQL語句和處理結果集等步驟。
SQL操作實例:
- 答案:SQL操作包括插入、查詢、刪除和清空等操作。具體編寫依賴於資料庫連接和所使用的SQL語句。例如,插入操作可以使用INSERT INTO語句,查詢操作可以使用SELECT語句等。
5. 37道PHP面試題(附答案)
以下是37道PHP面試題及簡潔答案概述:
面向對象是什麼?
- 答案:面向對象是通過封裝、繼承和多態提高程序復用性和清晰性的設計方法。
SESSION與COOKIE的區別?
- 答案:SESSION依賴cookie傳遞,存儲在伺服器,安全但消耗資源;COOKIE保存在客戶端,易被篡改。
HTTP狀態代碼302、403、500、401分別代表什麼?
- 答案:302代表臨時重定向;403表示禁止訪問;500表示伺服器內部錯誤;401代表未授權。
常見的數據類型有哪些?varchar與char的區別是什麼?
- 答案:數據類型包括int、char、varchar、datetime和text等。varchar與char的區別在於存儲空間:varchar動態分配,char固定長度。
MyISAM與InnoDB的區別?
- 答案:MyISAM適合頻繁查詢,不支持事務;InnoDB支持事務,適合大量插入和更新,但佔用空間大,不支持全文索引。
isset與empty的區別?
- 答案:isset檢查變數是否存在,可傳遞多個變數;empty判斷變數是否為空,只接受一個變數。
PHP中按值傳遞和按引用傳遞的區別?
- 答案:按值傳遞在函數外部忽略修改;按引用傳遞則反映外部修改,根據操作需求選擇傳遞方式。
error_reporting函數的作用?
- 答案:設置PHP錯誤報告級別,並顯示當前級別的錯誤。
什麼是緩存技術?
- 答案:緩存技術是存儲動態內容以減少資料庫訪問,提高頁面響應速度。
MVC結構包括哪些部分?其優點是什麼?
- 答案:MVC結構包括業務模型、視圖和控制器。優點是代碼重用、分離視圖和業務邏輯。
AJAX的優勢是什麼?
- 答案:非同步更新、減輕伺服器壓力、提升用戶體驗。
如何優化程序效率?
- 答案:包括優化SQL、創建索引、緩存數據和合理架構。
解決大流量問題的策略有哪些?
- 答案:使用緩存、負載均衡、CDN加速和減少資料庫使用。
include與require的區別?
- 答案:require在失敗時會中斷執行,include則不會。可用require_once和include_once避免多次包含。
@foo與foo的區別?
- 答案:@foo忽略警告,foo則不會忽略。
PHP的垃圾收集機制是怎樣的?
- 答案:通過refcount跟蹤變數引用,當引用計數為0時釋放內存。
如何確保程序安全?
- 答案:避免SQL注入和XSS攻擊,過濾用戶輸入,保護伺服器細節。
echo、print_r、var_mp、print的區別?
- 答案:echo用於輸出;print_r和var_mp用於列印變數結構;print有返回值,var_mp更詳細。
Smarty模板的特點是什麼?
- 答案:速度快、編譯型、緩存、插件支持和強大邏輯。
PHP頁面跳轉的方法有哪些?
- 答案:包括header函數直接跳轉、meta標簽刷新和模板跳轉。
如何使用iconv函數轉換字元編碼?
- 答案:使用iconv函數將GB2312格式字元串轉換為UTF8。
如何處理用戶輸入以防止XSS攻擊?
- 答案:入庫前使用htmlspecialchars或htmlentities處理用戶輸入。
CSRF攻擊和XSS攻擊分別是什麼?如何防範?
- 答案:CSRF攻擊模擬用戶請求,XSS攻擊注入惡意腳本。防範方法包括驗證token和過濾輸入。
開發PHP應用時需關注哪些安全機制?
- 答案:防止遠程提交、SQL注入、驗證碼等。
JSON是什麼?
- 答案:JSON是輕量級數據交換格式,易於跨語言傳輸。
事務具有哪些特性?
- 答案:事務具有原子性、一致性、隔離性和持久性。
鎖在資料庫中的作用是什麼?
- 答案:鎖用於並發控制,保證資料庫一致性,包括行級鎖和表級鎖。
索引的作用及其缺點?
- 答案:索引加速數據檢索,但增加存儲和寫入開銷。
範式理論是什麼?
- 答案:範式理論解釋了數據結構的規范化,減少數據冗餘。
主鍵、外鍵和索引的作用分別是什麼?
- 答案:主鍵用於唯一標識記錄;外鍵用於關聯關系;索引用於加快查詢速度。
private、protected和public修飾符的作用?
- 答案:分別定義不同許可權范圍的類成員。
堆和棧的區別是什麼?
- 答案:堆動態分配內存,棧在編譯時分配內存。
魔術方法是什麼?
- 答案:魔術方法如construct、destruct等在特定場景下自動執行。
$this、self、parent的區別和使用場景?
- 答案:$this代表當前對象;self代表當前類;parent代表父類,根據需要選擇使用。
作用域操作符::的作用?
- 答案:用於訪問類常量和靜態方法。
__autoload函數的作用?
- 答案:自動載入類,當實例化未引入的類時執行。
高並發網站的解決方案涉及哪些方面?
- 答案:涉及前端、服務端、資料庫和伺服器層面的優化。
6. php面試題get和post的區別
1、Get 方法通過 URL 請求來傳遞用戶的數據,將表單內各欄位名稱與其內容,以成對的字元串連接,置於 action 屬性所指程序的 url 後,如http://www.domain.com/test.asp?name=51js&password=51js,數據都會直接顯示在 url 上,就像用戶點擊一個鏈接一樣;Post 方法通過 HTTP post 機制,將表單內各欄位名稱與其內容放置在 HTML 表頭(header)內一起傳送給伺服器端交由 action 屬性能所指的程序處理,該程序會通過標准輸入(stdin)方式,將表單的數據讀出並加以處理
2、 Get 方式需要使用 Request.QueryString 來取得變數的值;而 Post 方式通過 Request.Form 來訪問提交的內容
3、Get 方式傳輸的數據量非常小,一般限制在 2 KB 左右,但是執行效率卻比 Post 方法好;而 Post 方式傳遞的數據量相對較大,它是等待伺服器來讀取數據,不過也有位元組限制,這是為了避免對伺服器用大量數據進行惡意攻擊,根據微軟方面的說法,微軟對用 Request.Form() 可接收的最大數據有限制,IIS 4 中為 80 KB 位元組,IIS 5 中為 100 KB 位元組
建議:除非你肯定你提交的數據可以一次性提交,否則請盡量用 Post 方法
4、Get 方式提交數據,會帶來安全問題,比如一個登陸頁面,通過 Get 方式提交數據時,用戶名和密碼將出現在 URL 上,如果頁面可以被緩存或者其他人可以訪問客戶這台機器,就可以從歷史記錄獲得該用戶的帳號和密碼,所以表單提交建議使用 Post 方法;Post 方法提交的表單頁面常見的問題是,該頁面如果刷新的時候,會彈出一個對話框
建議:出於安全性考慮,建議最好使用 Post 提交數據
***********************************
在B/S應用程序中,前台與後台的數據交互,都是通過HTML中Form表單完成的。Form提供了兩種數據傳輸的方式——get和post。雖然它們都是數據的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對數據產生嚴重的影響。雖然為了方便的得到變數值,Web容器已經屏蔽了二者的一些差異,但是了解二者的差異在以後的編程也會很有幫助的。
Form中的get和post方法,在數據傳輸過程中分別對應了HTTP協議中的GET和POST方法。二者主要區別如下:
1、Get是用來從伺服器上獲得數據,而Post是用來向伺服器上傳遞數據。
2、Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用「?」連接,而各個變數之間使用「&」連接;Post是將表單中的數據放在form的數據體中,按照變數和值相對應的方式,傳遞到action所指向URL。
3、Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多伺服器、代理伺服器或者用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
4、Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能使用Post(當然還有一個原因,將在後面的提到)。
5、Get限制Form表單的數據集的值必須為ASCII字元;而Post支持整個ISO10646字元集。
6、Get是Form的默認方法。
*.Post傳輸數據時,不需要在URL中顯示出來,而Get方法要在URL中顯示。
*.Post傳輸的數據量大,可以達到2M,而Get方法由於受到URL長度的限制,只能傳遞大約1024位元組.
*.Post顧名思義,就是為了將數據傳送到伺服器段,Get就是為了從伺服器段取得數據.而Get之所以也能傳送數據,只是用來設計告訴伺服器,你到底需要什麼樣的數據.Post的信息作為http請求的內容,而Get是在Http頭部傳輸的。
網頁表單當中的get方式和post方式的區別
1、get方式可傳遞的數據量有限,大約是2K左右,而post在iis5當中則達到100k,一般人們可以默認post是無限制的;
2、get方式在提交帳號密碼等表單時不如post方式安全。在get提交表單以後瀏覽器的url會將你提交的表單參數全部顯示在地址欄當中,而且可以通過機器的緩存來直接查看到各項參數;而post方式則不會;
3、get方式在後台處理頁面用Request.QueryString接收各個參數;而post則用Request.Form獲取;
4、get方式會忽略<form action="a.asp?a=a"里邊的"a=a"這個參數;而post方式則不會