php高級面試題
❶ 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中高級面試題 – 第三天
一、簡述一下MongoDB的應用場景
mongodb 支持副本集、索引、自動分片,可以保證較高的性能和可用性。
更高的寫入負載
默認情況下,MongoDB 更側重高數據寫入性能,而非事務安全,MongoDB 很適合業務系統中有大量 「低價值」 數據的場景。但是應當避免在高事務安全性的系統中使用 MongoDB,除非能從架構設計上保證事務安全。
高可用性
MongoDB 的復副集 (Master-Slave) 配置非常簡潔方便,此外,MongoDB 可以快速響應的處理單節點故障,自動、安全地完成故障轉移。這些特性使得 MongoDB 能在一個相對不穩定(如雲主機)的環境中,保持高可用性。
數據量很大或者未來會變得很大
依賴資料庫 (MySQL) 自身的特性,完成數據的擴展是較困難的事,在 MySQL 中,當一個單達表到 5-10GB 時會出現明顯的性能降級,此時需要通過數據的水平和垂直拆分、庫的拆分完成擴展,使用 MySQL 通常需要藉助驅動層或代理層完成這類需求。而 MongoDB 內建了多種數據分片的特性,可以很好地適應大數據量的需求。
基於位置的數據查詢
MongoDB 支持二維空間索引,因此可以快速及精確地從指定位置獲取數據。
表結構不明確
在一些傳統 RDBMS 中,增加一個欄位會鎖住整個資料庫 / 表,或者在執行一個重負載的請求時會明顯造成其它請求的性能降級。通常發生在數據表大於 1G 的時候(當大於 1TB 時更甚)。 因 MongoDB 是文檔型資料庫,為非結構貨的文檔增加一個新欄位是很快速的操作,並且不會影響到已有數據。另外一個好處當業務數據發生變化時,是將不再需要由 DBA 修改表結構。
二、資料庫設計經驗,為什麼進行分表?分庫?一般多少數據量開始分表?分庫?分庫分表的目的?
1、為什麼要分表
當一張表的數據達到幾百萬時,你查詢一次所花的時間會變多,如果有聯合查詢的話,有可能會死在那兒了。分表的目的就在於此,減小資料庫的負擔,縮短查詢時間。日常開發中我們經常會遇到大表的情況,所謂的大表是指存儲了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,性能低下,如果涉及聯合查詢的情況,性能會更加糟糕。
分表和表分區的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增刪改查效率。資料庫中的數據量不一定是可控的,在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的數據量也會越來越大,相應地,數據操作,增刪改查的開銷也會越來越大;另外,由於無法進行分布式式部署,而一台伺服器的資源(CPU、磁碟、內存、IO 等)是有限的,最終資料庫所能承載的數據量、數據處理能力都將遭遇瓶頸。
2、分表的方案
做 mysql 集群,有人會問 mysql 集群,根分表有什麼關系嗎?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什麼呢?為一個資料庫減輕負擔,說白了就是減少 sql 排隊隊列中的 sql 的數量,舉個例子:有 10 個 sql 請求,如果放在一個資料庫伺服器的排隊隊列中,他要等很長時間,如果把這 10 個 sql 請求,分配到 5 個資料庫伺服器的排隊隊列中,一個資料庫伺服器的隊列中只有 2 個,這樣等待時間是不是大大的縮短了呢?
linux mysql proxy 的安裝,配置,以及讀寫分離
mysql replication 互為主從的安裝及配置,以及數據同步
優點:擴展性好,沒有多個分表後的復雜操作(php 代碼)
缺點:單個表的數據量還是沒有變,一次操作所花的時間還是那麼多,硬體開銷大。
三、簡述一下資料庫主從復制,讀寫分離
* 什麼是主從復制
主從復制,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫;
* 主從復制的原理:
1.資料庫有個bin-log二進制文件,記錄了所有的sql語句。
2.只需要把主資料庫的bin-log文件中的sql語句復制。
3.讓其從數據的relay-log重做日誌文件中再執行一次這些sql語句即可。
* 主從復制的作用
1.做數據的熱備份,作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作,避免數據丟失。
2.架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁碟I/O訪問頻率,提高單機的I/O性能
3.主從復制是讀寫分離的基礎,使資料庫能製成更大 的並發。例如子報表中,由於部署報表的sql語句十分慢,導致鎖表,影響前台的服務。如果前台服務使用master,報表使用slave,那麼報表sql將不會造成前台所,保證了前台的訪問速度。
* 主從復制的幾種方式:
1.同步復制:所謂的同步復制,意思是master的變化,必須等待slave-1,slave-2,…,slave-n完成後才能返回。
2.非同步復制:如同AJAX請求一樣。master只需要完成自己的資料庫操作即可。至於slaves是否收到二進制日誌,是否完成操作,不用關心。MYSQL的默認設置。
3.半同步復制:master只保證slaves中的一個操作成功,就返回,其他slave不管。
這個功能,是由google為MYSQL引入的。
* 關於讀寫分離
在完成主從復制時,由於slave是需要同步master的。所以對於insert/delete/update這些更新資料庫的操作,應該在master中完成。而select的查詢操作,則落下到slave中。
❸ 面試高級php工程師,一般會問到哪些問題
高並發大訪問量的mysql優化,伺服器優化?
欄位建索引、主從資料庫、讀寫分離、表分區、負載均衡。
linux的慢查詢日誌會記錄mysql的超時查詢sql語句,定期察看進行優化。
2.大訪問量下秒殺模塊程序怎麼設計,如果使用mysql會有多賣的情況,就是訂單超過庫存。
將訂單數據緩存到內存,如果用資料庫直接崩掉,毫無懸念的。
3.緩存的使用
能用靜態的用靜態,不能靜態的用內存緩存,例如memcache、redis,不能緩存的用資料庫。
4.session可不可以跨域?怎麼跨域?
將PHP session機制重寫(PHP提供),將session存儲在memcache或者資料庫就可以跨域了。
另外session能以三種方式存儲,文件、資料庫、緩存。
5.了不了解非關系型資料庫?
mongodb
6.會不會寫shell腳本以及linux的操作
還會問一下時下流行的東西,比如做沒做過微信開發,例如微信支付開發、APP移動開發,等等問題。
問的核心東西都是圍繞這些轉的,如果有筆試會讓你寫sql,php功能(例如冒泡排序等排序),還有邏輯題。
我當初面試了很多,這是一個我的面試經驗的總結,純手打忘採納。
❹ php面向對象面試題
其實這個問題很簡單啦,兩分鍾就可以請清楚啦,我在這里先說一下思想;
首先你得寫一個類表示人,如:person類;
小劉、小張、MrJosnon、MrJohn等都是這個person類的一個實例;
並且人力資源部問問題這是這個person類當中的一個方法,然後每個人都可以繼承自person類,然後又有各自己相關方法等;
然後你得寫一個國家類,如:Country類,然後中國是這個國家的一個具體實例;
然後你得寫一個城市類,如:City類;然後上海是City類的一個實例;
同樣,你得寫一個公司類,如:Company類,然後那兩個公司又是Company類的兩個實例,並且你還得寫一個部門類,如:Depart類,然後人力資源部是部門的一個實例;
上面只是這個問題的中文描述,你可以參考一下;
❺ PHP程序員上機面試題(並附答案,回答好的加分)
題集網上有一套php的面試題:http://www.tijee.com/tags/46-php-face-questions/posts
❻ 誰能告訴我一些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面試題
騰訊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中高級面試題 – 第一天
一、寫一個函數,獲取一篇文章內容中的全部圖片,並下載
二、什麼是 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 有問題。