php開發面試題
① 騰訊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調試工具。
;② 在面試PHP工程師時會被問哪些問題
面試官在面試求職的PHP工程師時所問的問題千奇百怪,但由於他們需要的是一個PHP工程師,所以他們提問的問題一般不會偏離以下幾個角度:
技術線(偏深度):
1. 基礎知識,比如數據結構,多線程,I/O,Http協議等。
2. 語言深度,比如PHP的運行機制,性能優化,APC(以及其原理等)。
3. 源碼閱讀,比如看過哪些框架,其中的機制是怎麼樣的,往細了問。
4. 知識寬度,靜態語言,比如C、Java等,我始終覺得只會一門語言不是什麼好事情。
5. 項目經驗,做過什麼,是否復雜,負責什麼,做了什麼。
業務線(偏能力):
1. 業務能力,也就是之前做過的項目(擔任的角色,負責的部分)。
2. 溝通能力,這一點能從溝通中就看出來。
3. 主動性,之前主動推動的事物等等,哪怕是一個小的點也可以。
4. 抗壓能力,之前做過的項目中去挖掘細節。
5. 技術寬度,了解不一定要深入,一般會問一些比較泛的,比如多語言,Linux操作,HTTP協議等。
③ PHP程序員上機面試題(並附答案,回答好的加分)
題集網上有一套php的面試題:http://www.tijee.com/tags/46-php-face-questions/posts
④ PHP工程師面試常見問題有哪些
基礎知識,資料庫,框架,也很可能問你他們工作遇到的問題
⑤ PHP面試題
1.有一個IP地址(192.168.0.1),請寫出其32位無符號整數形式。
2. 請列舉你能想到的UNIX信號,並說明信號用途。
答案:UNIX定義了許多信號,比如SIGINT表示中斷字元信號,也就是Ctrl+C的信號,SIGBUS表示硬體故障的信號;SIGCHLD表示子進程狀態改變信號;SIGKILL表示終止程序運行的信號
⑥ php面試題解答
1,
var x=document.getElementById("img1");
var title=document.getElementById("img1").title;
var sina_title=document.getElementById("img1").sina_title;
2,serialize(),unserialize();
3,編碼方式不同,urlencode()將字串以URL編碼。例如空格就會變成加號。
rawurlencode()將url編碼成url的字元串專用格式,特殊字元回轉換成百分號後面加兩個十六子介數字的格式。
4,strip_tags(),html_entity_decode();
5,$str=preg_replace("/\<script.*\>.*\<\/script\>/i","",$str);
6,左連接,左連接的表如果沒有匹配的數據不影響結果。
7
SELECT name,score FROM tl_user LEFT JOIN tl_score ON tl_user.ID=tl_score.ID
7 system(),exec(),passthru()
8,json_decode ,json_encode
9 isset() empty()
10 後者的許可權大於前者,後者是OFF的話,前者就算是E-ALL也沒用。
11,$_SERVER['REMOTE_ADDR'];
12,incov()
echo iconv("gbk",""UTF-8,"我們");
mb_convert_encoding($str, "GBK", "UTF-8")
13 explode() split() ;implode() join()
14 注意事項挺多的,懶得寫。
二
1,超時,伺服器已經關閉連接
2 靜態表欄位長度固定,自動填充,讀寫速度很快,便於緩存和修復,但比較占硬碟,動態表是欄位長度不固定,節省硬碟,但更復雜,容易產生碎片,速度慢,出問題後不容易重建。
3InnoDB和MyISAM是在使用MySQL最常用的兩個表類型,各有優缺點,視具體應用而定。基本的差別為:MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,但是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級資料庫功能。
MyIASM是IASM表的新版本,有如下擴展:
二進制層次的可移植性。
NULL列索引。
對變長行比ISAM表有更少的碎片。
支持大文件。
更好的索引壓縮。
更好的鍵嗎統計分布。
更好和更快的auto_increment處理。
1.MySQL最大的優勢在於MyISAM引擎下的簡單SELECT,INSERT和UPDATE快速操作
2.MyISAM類型的數據文件可以在不同操作系統中COPY,這點很重要,布署的時候方便點。
以下是一些細節和具體實現的差別:
1.InnoDB不支持FULLTEXT類型的索引。
2.InnoDB 中不保存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出保存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
3.對於AUTO_INCREMENT類型的欄位,InnoDB中必須包含只有該欄位的索引,但是在MyISAM表中,可以和其他欄位一起建立聯合索引。
4.DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
5.LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導入數據後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。
另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like 「%aaa%」
以暫對存儲引擎的認識,覺得 InnoDB 支持外鍵,在數據量可以用「龐大」來形容時,在有良好的 INDEX 的基礎上,InnoDB 的查詢速度應該比 MyISAM 要快。
在 Falcon 有穩定版本前,我想 MyISAM 是一個可用的選擇方案。
任何一種表都不是萬能的,只用恰當的針對業務類型來選擇合適的表類型,才能最大的發揮MySQL的性能優勢
3, 都是1 ^^懶得回答了,睡覺去。
⑦ PHP面試的內容一般有哪些一般會問那些問題有什麼技巧嗎
PHP程序員在面試的時候一般應該抓住以下幾個點。
一、應該介紹自己掌握的開發一種,主要介紹PHP語言的獨特語法以及如何使用,比如PHP語言會比CGI更快的執行動態頁面。
二、必須熟悉Oracle、Mysql等資料庫,並能簡單的介紹自己掌握的程度。由於php做出的動態頁面比用其他語言做出來的頁面在執行效率以及CGI方面高得多,所以你還需要在面試中說出自己的文檔撰寫能力很強。
三、PHP程序員應該具備獨立分析和解決問題的能力,可以在自我介紹中講講自己曾經遇到過的問題是如何解決的。讓面試官看到你的能力,這將會直接影響到你自我介紹的成功與否。
四、一個PHP程序員必須有良好的職業道德和工作態度,所以在面試中應該盡量講自己在做項目時的認真態度以及今後的工作規劃,表現出自己的進取心。
五、還有關於溝通能力和理解能力的體現,這個在與HR的交談中就可以表現出來,所以需要做的工作就是從容的有條理的把自我介紹說完,回答每一個問題時都應該簡潔明了,關於自我介紹可以提前做個草稿,背一下。
六、團隊合作能力也是企業非常看重的,在培訓中老師一般都會帶領大家做項目,大的項目一般會分小組,每個人都有相對應的任務,這就模擬了公司中的團隊合作,在自我介紹過程中要把做項目的具體流程以及相互協作的過程說出來,讓HR看到自己具備團隊合作的能力。
七、最後就是執行力,每當任務分配下來的時候該如何執行,還有自己講過職業規劃後該如何執行,還有在學習的過程中是如何人字形的,遇到困難又是如何執行的,這些都可以體現出php程序員的執行力,回答的時候抓住發現及時尋找原因,快速展開行動的這個主線即可。
八、最重要的是你的能力、技術以及自己的項目
⑧ 誰能告訴我一些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
⑨ php技術面試一般都是什麼問題
可能會問以下問題:(這是一個多元的問題,這和你應聘的公司規模,行業,技術層次有一定的關系)
1、你會使用什麼框架?
2、你知道PHP有哪些框架?
3、你知道或使用過哪些PHP庫?
4、你用PHP寫過框架嗎?
5、你有作品嗎?
6、你怎麼調試PHP?
7、你知道設計模型嗎?
8、說一下PHP個版本的差異。
9、說一下某函數的具體作用。
10、給你一個演算法讓你用PHP實現。
... ...
總之有很多問題可能是意料不到的,所以建議你去牛客網多練習一下或者去海投簡歷體驗應聘過程,失敗沒什麼大不了的。
⑩ PHP面試題2--常用的數組函數
一,數組操作的基本函數
1. 數組的鍵名與值
array_values($arr); 獲得數組的值
array_keys($arr); 獲得數組的鍵名
array_flip($arr); 數組的值與鍵名互換(如果有重復前面的會被後面的覆蓋)
in_array("apple",$arr); 在數組中檢索apple
array_search("apple",$arr); 在數組中檢索apple,如果存在返回鍵名
array_key_exists("apple",$arr); 檢索給定的鍵名是否存在數組中
isset($arr["apple"]); 檢索給定的鍵名是否存在數組中
array_unique() 刪除數組中的重復值
2. 數組的內部指針
current($arr); 返回數組中的當前單元
pos($arr); 返回數組中的當前單元
key($arr); 返回數組中的當前單元的鍵名
prev($arr); 將數組中的內部指針倒回一位
next($arr); 將數組中的內部指針向前移動一位
end($arr); 將數組中的內部指針指向最後一單元
reset($arr); 將數組中的內部指針指向第一單元
each($arr); 將返回數組當前元素的一個鍵/值的構造數組,並使數組指針向前移動一位
list($key,$value) = each($arr); 獲得數組當前元素的鍵名和值
3. 數組和變數之間的轉換
extract(array,extract_rules,prefix); 函數從數組中將變數導入到當前符號表。該函數使用數組鍵名作為變數名,使用數組鍵值作為變數值。針對數組中的每個元素,將在當前符號表中創建對應的一個變數。
compact(var1,var2...); 創建一個包含變數名和它們的值的數組。任何沒有變數名與之對應的字元串都被略過。
二,數組的分段和填充
1. 數組的分段
array_slice(array,start,length,preserve); 返回數組中的選定部分。如果數組中有字元串鍵名,返回的數組將保留鍵名。
array_splice(array1,start,length,array2); 從數組中移除選定的元素,並用新元素取代它。函數返回被移除元素的數組,如果函數沒有移除任何元素(length=0),則替代數組將從start參數的位置插入。不保留替代數組的鍵名。
2. 數組的分割
array_chunk(array,size,preserve_keys); 把一個數組分割為新的數組塊。
3. 數組的填充
array_pad(array,size,value); 將指定數量的帶有指定值的元素插入到數組。如果將size參數設置為負數,該函數會在原始數組之前插入新的元素。如果size參數小於原始數組的長度,該函數不會刪除任何元素。
三,數組與棧
array_push(array,value1,value2...); 向數組尾部插入一個或多個元素。即使數組有字元串鍵名,添加的元素將是數字鍵名。
array_pop(array); 刪除數組的最後一個元素。返回值是數組的最後一個值,即,被刪除的元素值。如果數組為空,或者不是一個數組,將返回NULL。
四,數組和隊列
array_shift(array); 用於刪除數組中的第一個元素,並返回被刪除的元素。如果鍵名是數字,所有的元素都將獲得新的鍵名,從0開始,並以1遞增。
array_unshift(array,value1,value2,value3...); 用於向數組插入新元素,新數組的值將被插入到數組的開頭。數值鍵名將從0開始,以1遞增。字元串鍵名將保持不變。
五,回調函數
array_walk(array,myfunction,parameter...); 將數組中的每個元素應用到 用戶自定義函數。在函數中,數組的鍵名和鍵值是參數。可以通過把用戶自定義函數的第一個參數指定為引用:&$value,來改變數組元素的值。
array_map(myfunction,array1,array2,array3...); 函數將用戶自定義函數作用到數組中的每個值上,並返回用戶自定義函數作用後的帶有新的值的數組。myfunction可以為null
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ); 用回調函數過濾數組中的元素。該函數把輸入數組中的每個鍵值傳給回調函數。如果回調函數返回true,則把輸入數組中的當前鍵值返回給結果數組,數組鍵名保持不變。
array_rece(array,myfunction,initial); 函數發送數組中的值到用戶自定義函數,並返回一個字元串。如果數組是空的或者初始值未傳遞,該函數返回null。initial為可選,規定發送到函數處理的第一個值。
六,數組的計算
1. 數組元素的求和
array_sum(array); 返回數組中的所有值的和
2. 數組的合並
array_merge(array1,array2,array3...); 用於把一個或多個數組合並成一個數組。如果兩個或更多個數組有相同的鍵名。則最後的數組會覆蓋其他數組。如果向函數輸入了一個數組,且鍵名是整數,則該函數會返回帶有整數鍵名的新數組,其鍵名以0開始進行重新索引。
array_merge_recursive(array1,array2,array3...); 用於把一個或多個數組合並為一個數組,該函數與array_merge()函數之間的不同是在處理兩個或多個數組元素有相同的鍵名的情況下,array_merge_recursive()不會進行鍵名覆蓋,而是將多個相同鍵名的值遞歸組成一個數組。如果您僅僅向 array_merge_recursive() 函數輸入一個數組,結果與 array_merge() 相同。
3. 數組的差集
array_diff(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的值,並返回差集。該函數比較兩個(或更多個)數組的值(key=>value中的value),並返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2或array3等等)中的值。
array_diff_assoc(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵名和鍵值,並返回差集。該函數比較兩個(或更多個)數組的鍵名和鍵值,並返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2 或 array3 等等)中的鍵名和鍵值。
4. 數組的並集
array_intersect(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵值,並返回交集。該函數比較兩個(或更多個)數組的鍵值,返回一個交集數組,該數組包括了所有在被比較的數組(array1)中,同時也在任何其他參數數組(array2 或 array3 等等)中的鍵值。
array_intersect_assoc(array1,array2,array3...); 函數用於比較兩個(或更多個)數組的鍵名和鍵值,並返回交集。該函數比較兩個(或更多個)數組的鍵名和鍵值,並返回一個交集數組,該數組包括了所有在被比較的數組(array1)中,同時也在任何其他參數數組(array2 或 array3 等等)中的鍵名和鍵值。
七,數值的排序
array_multisort(): 對多個數組或多維數組進行排序
sort(): 以升序對數組排序
rsort(): 以降序對數組排序
asort(): 根據值,以升序對關聯數組進行排序
ksort(): 根據鍵,以升序對關聯數組進行排序
arsort(): 根據值,以降序對關聯數組進行排序
krsort(): 根據鍵,以降序對關聯數組進行排序
資料參考:
https://www.php.cn/php-weizijiaocheng-381347.html
https://www.runoob.com/php/php-ref-array.html