php數(shù)據(jù)結(jié)構(gòu)面試題 php新特性 面試題

PHP中高級面試題 – 第三天

一、簡述一下MongoDB的應(yīng)用場景

成都創(chuàng)新互聯(lián)專注于吉縣企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,購物商城網(wǎng)站建設(shè)。吉縣網(wǎng)站建設(shè)公司,為吉縣等地區(qū)提供建站服務(wù)。全流程按需設(shè)計網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

mongodb 支持副本集、索引、自動分片,可以保證較高的性能和可用性。

更高的寫入負(fù)載

默認(rèn)情況下,MongoDB 更側(cè)重高數(shù)據(jù)寫入性能,而非事務(wù)安全,MongoDB 很適合業(yè)務(wù)系統(tǒng)中有大量 “低價值” 數(shù)據(jù)的場景。但是應(yīng)當(dāng)避免在高事務(wù)安全性的系統(tǒng)中使用 MongoDB,除非能從架構(gòu)設(shè)計上保證事務(wù)安全。

高可用性

MongoDB 的復(fù)副集 (Master-Slave) 配置非常簡潔方便,此外,MongoDB 可以快速響應(yīng)的處理單節(jié)點故障,自動、安全地完成故障轉(zhuǎn)移。這些特性使得 MongoDB 能在一個相對不穩(wěn)定(如云主機(jī))的環(huán)境中,保持高可用性。

數(shù)據(jù)量很大或者未來會變得很大

依賴數(shù)據(jù)庫 (MySQL) 自身的特性,完成數(shù)據(jù)的擴(kuò)展是較困難的事,在 MySQL 中,當(dāng)一個單達(dá)表到 5-10GB 時會出現(xiàn)明顯的性能降級,此時需要通過數(shù)據(jù)的水平和垂直拆分、庫的拆分完成擴(kuò)展,使用 MySQL 通常需要借助驅(qū)動層或代理層完成這類需求。而 MongoDB 內(nèi)建了多種數(shù)據(jù)分片的特性,可以很好地適應(yīng)大數(shù)據(jù)量的需求。

基于位置的數(shù)據(jù)查詢

MongoDB 支持二維空間索引,因此可以快速及精確地從指定位置獲取數(shù)據(jù)。

表結(jié)構(gòu)不明確

在一些傳統(tǒng) RDBMS 中,增加一個字段會鎖住整個數(shù)據(jù)庫 / 表,或者在執(zhí)行一個重負(fù)載的請求時會明顯造成其它請求的性能降級。通常發(fā)生在數(shù)據(jù)表大于 1G 的時候(當(dāng)大于 1TB 時更甚)。 因 MongoDB 是文檔型數(shù)據(jù)庫,為非結(jié)構(gòu)貨的文檔增加一個新字段是很快速的操作,并且不會影響到已有數(shù)據(jù)。另外一個好處當(dāng)業(yè)務(wù)數(shù)據(jù)發(fā)生變化時,是將不再需要由 DBA 修改表結(jié)構(gòu)。

二、數(shù)據(jù)庫設(shè)計經(jīng)驗,為什么進(jìn)行分表?分庫?一般多少數(shù)據(jù)量開始分表?分庫?分庫分表的目的?

1、為什么要分表

當(dāng)一張表的數(shù)據(jù)達(dá)到幾百萬時,你查詢一次所花的時間會變多,如果有聯(lián)合查詢的話,有可能會死在那兒了。分表的目的就在于此,減小數(shù)據(jù)庫的負(fù)擔(dān),縮短查詢時間。日常開發(fā)中我們經(jīng)常會遇到大表的情況,所謂的大表是指存儲了百萬級乃至千萬級條記錄的表。這樣的表過于龐大,導(dǎo)致數(shù)據(jù)庫在查詢和插入的時候耗時太長,性能低下,如果涉及聯(lián)合查詢的情況,性能會更加糟糕。

分表和表分區(qū)的目的就是減少數(shù)據(jù)庫的負(fù)擔(dān),提高數(shù)據(jù)庫的效率,通常點來講就是提高表的增刪改查效率。數(shù)據(jù)庫中的數(shù)據(jù)量不一定是可控的,在未進(jìn)行分庫分表的情況下,隨著時間和業(yè)務(wù)的發(fā)展,庫中的表會越來越多,表中的數(shù)據(jù)量也會越來越大,相應(yīng)地,數(shù)據(jù)操作,增刪改查的開銷也會越來越大;另外,由于無法進(jìn)行分布式式部署,而一臺服務(wù)器的資源(CPU、磁盤、內(nèi)存、IO 等)是有限的,最終數(shù)據(jù)庫所能承載的數(shù)據(jù)量、數(shù)據(jù)處理能力都將遭遇瓶頸。

2、分表的方案

做 mysql 集群,有人會問 mysql 集群,根分表有什么關(guān)系嗎?雖然它不是實際意義上的分表,但是它啟到了分表的作用,做集群的意義是什么呢?為一個數(shù)據(jù)庫減輕負(fù)擔(dān),說白了就是減少 sql 排隊隊列中的 sql 的數(shù)量,舉個例子:有 10 個 sql 請求,如果放在一個數(shù)據(jù)庫服務(wù)器的排隊隊列中,他要等很長時間,如果把這 10 個 sql 請求,分配到 5 個數(shù)據(jù)庫服務(wù)器的排隊隊列中,一個數(shù)據(jù)庫服務(wù)器的隊列中只有 2 個,這樣等待時間是不是大大的縮短了呢?

linux mysql proxy 的安裝,配置,以及讀寫分離

mysql replication 互為主從的安裝及配置,以及數(shù)據(jù)同步

優(yōu)點:擴(kuò)展性好,沒有多個分表后的復(fù)雜操作(php 代碼)

缺點:單個表的數(shù)據(jù)量還是沒有變,一次操作所花的時間還是那么多,硬件開銷大。

三、簡述一下數(shù)據(jù)庫主從復(fù)制,讀寫分離

* 什么是主從復(fù)制

主從復(fù)制,是用來建立一個和主數(shù)據(jù)庫完全一樣的數(shù)據(jù)庫環(huán)境,稱為從數(shù)據(jù)庫;

* 主從復(fù)制的原理:

1.數(shù)據(jù)庫有個bin-log二進(jìn)制文件,記錄了所有的sql語句。

2.只需要把主數(shù)據(jù)庫的bin-log文件中的sql語句復(fù)制。

3.讓其從數(shù)據(jù)的relay-log重做日志文件中再執(zhí)行一次這些sql語句即可。

* 主從復(fù)制的作用

1.做數(shù)據(jù)的熱備份,作為后備數(shù)據(jù)庫,主數(shù)據(jù)庫服務(wù)器故障后,可切換到從數(shù)據(jù)庫繼續(xù)工作,避免數(shù)據(jù)丟失。

2.架構(gòu)的擴(kuò)展。業(yè)務(wù)量越來越大,I/O訪問頻率過高,單機(jī)無法滿足,此時做多庫的存儲,降低磁盤I/O訪問頻率,提高單機(jī)的I/O性能

3.主從復(fù)制是讀寫分離的基礎(chǔ),使數(shù)據(jù)庫能制成更大 的并發(fā)。例如子報表中,由于部署報表的sql語句十分慢,導(dǎo)致鎖表,影響前臺的服務(wù)。如果前臺服務(wù)使用master,報表使用slave,那么報表sql將不會造成前臺所,保證了前臺的訪問速度。

* 主從復(fù)制的幾種方式:

1.同步復(fù)制:所謂的同步復(fù)制,意思是master的變化,必須等待slave-1,slave-2,…,slave-n完成后才能返回。

2.異步復(fù)制:如同AJAX請求一樣。master只需要完成自己的數(shù)據(jù)庫操作即可。至于slaves是否收到二進(jìn)制日志,是否完成操作,不用關(guān)心。MYSQL的默認(rèn)設(shè)置。

3.半同步復(fù)制:master只保證slaves中的一個操作成功,就返回,其他slave不管。

這個功能,是由google為MYSQL引入的。

* 關(guān)于讀寫分離

在完成主從復(fù)制時,由于slave是需要同步master的。所以對于insert/delete/update這些更新數(shù)據(jù)庫的操作,應(yīng)該在master中完成。而select的查詢操作,則落下到slave中。

程序員面試必備PHP基礎(chǔ)面試題 – 第十三天

一、在HTTP1.0中,狀態(tài)嗎500的含義的是什么?如果返回“找不到文件”的提示,則可用header(函數(shù)),其語句為?

500 Internal Server Error 服務(wù)器遇到了意料不到的情況,不能完成客戶的請求

Header(“ HTTP/1.0 404 NOT FOUND”);

二、數(shù)組函數(shù)arsort()的作用是什么?語句err_reporting(2047)的作用是什么?

arsort:對數(shù)組進(jìn)行逆向排序并保持索引關(guān)系;

error_reporting(2047)的作用是:report All errors and warnings

三、語句include和require都能把另外一個文件包含到當(dāng)前文件中,它們的區(qū)別是___;為避免多此包含同一個文件,可以用語句_____來代替它們。

在如何處理失敗時,include() 產(chǎn)生一個警告而 require() 則導(dǎo)致一個致命錯誤; require_once()/include_once()

四、get_magic_quotes_gpc的作用是_______

本函數(shù)取得 PHP 環(huán)境配置的變量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關(guān)閉本功能;返回 1 表示本功能打開。當(dāng) magic_quotes_gpc 打開時,所有的 ‘ (單引號), ” (雙引號), (反斜線) and 空字符會自動轉(zhuǎn)為含有反斜線的溢出字符。

五、在php中, heredoc是一種特殊的字符串, 他的結(jié)束標(biāo)志必須是_____

結(jié)束標(biāo)識符所在的行不能包含任何其它字符除”;”

六、寫出一個正則表達(dá)式, 把$string中的所有數(shù)字全部刪除

preg_replace(‘/d/U’,’’,$string);

七、找出/data1/source 目錄中大于100k 的文件, 并復(fù)制到 ~/tmp/35/下

find /data1/source +size 100k | cp ~/temp/35/

八、perl –pi –e ‘s|ABCD|Linux|g’ `find ./ -type f`的含義是

find ./-type f:找尋當(dāng)前目錄下的類型為f的文件

九、10 2 * * * /data0/apache/schedule/ussd/topnews/import_data.pl /dev/null 的含義:_______將import_data.pl清空或刪除

十、rsync -avu 105903.zip 218.206.86.68::mmsres/resource/291/205的含義:_________備份數(shù)據(jù)用

-a 歸檔模式,遞歸傳輸文件;

-v 詳細(xì)模式輸出;

-u, –update 僅僅進(jìn)行更新,也就是跳過所有已經(jīng)存在于DST,并且文件時間晚于要備份的文件。(不覆蓋更新的文件)

十一、寫出x,y的值

十二、使用純CSS實現(xiàn)未知寸的圖片(但高度都小于200px) 在200px的正方形容器中水平和垂直居中,HTML代碼如下

PHP程序員上機(jī)面試題(并附答案,回答好的加分)

某大公司的PHP面試題

管理提醒: 本帖被 haowubai 執(zhí)行取消置頂操作(2009-07-30)

1. 如何用php的環(huán)境變量得到一個網(wǎng)頁地址的內(nèi)容?ip地址又要怎樣得到?

[php]

echo $_SERVER ['PHP_SELF'];

echo $_SERVER ['SERVER_ADDR'];

[/php]

2. 求兩個日期的差數(shù),例如2007-2-5 ~ 2007-3-6 的日期差數(shù)

[php]

$begin=strtotime('2007-2-5');

$end=strtotime('2007-3-6');

echo ($end-$begin)/(24*3600);

[/php]

3. 請寫一個函數(shù),實現(xiàn)以下功能:

字符串“open_door” 轉(zhuǎn)換成 “OpenDoor”、”make_by_id” 轉(zhuǎn)換成 ”MakeById”。

[php]

function changeStyle( $str) {

/*$str = str_replace ( "_", " ", $str );

$str = ucwords ( $str );

$str = str_replace ( " ", "", $str );

return $str;*/

$arrStr=explode('_',$str);

foreach($arrStr as $key=$value){

$arrStr[$key]=strtoupper(substr($value,0,1)).substr($value,1);

}

return implode('',$arrStr);

}

$s = "open_door";

echo changeStyle ( $s );

[/php]

4. 要求寫一段程序,實現(xiàn)以下數(shù)組$arr1轉(zhuǎn)換成數(shù)組$arr2:

[php]$arr1 = array (

'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),

'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),

'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),

'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),

'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )

);

$arr2 = array (

'0' = array (

'0' = array ( 'tid' = 1, 'name' = 'Name1'),

'1' = array ( 'tid' = 2, 'name' = 'Name2'),

'2' = array ( 'tid' = 5, 'name' = 'Name3'),

'3' = array ( 'tid' = 7, 'name' = 'Name4')

),

'1' = array (

'0' = array ( 'tid' = 9, 'name' = 'Name5' )

)

);

?php

$arr1 = array (

'0' = array ('fid' = 1, 'tid' = 1, 'name' ='Name1' ),

'1' = array ('fid' = 1, 'tid' = 2 , 'name' ='Name2' ),

'2' = array ('fid' = 1, 'tid' = 5 , 'name' ='Name3' ),

'3' = array ('fid' = 1, 'tid' = 7 , 'name' ='Name4' ),

'4' = array ('fid' = 3, 'tid' = 9, 'name' ='Name5' )

);

function changeArrayStyle($arr){

foreach($arr as $key=$value){

$result[$value['fid']][]=$value;

}

return array_values($result);

}

$arr2=changeArrayStyle($arr1);

echo "pre";

var_dump($arr2);

[/php]

5. 請簡述數(shù)據(jù)庫設(shè)計的范式及應(yīng)用。

一般第3范式就足以,用于表結(jié)構(gòu)的優(yōu)化,這樣做既可以避免應(yīng)用程序過于復(fù)雜同時也避免了SQL語句過于龐大所造成系統(tǒng)效率低下。

ANSWER:

第一范式:若關(guān)系模式R的每一個屬性是不可再分解的,再屬于第一范式。

第二范式:若R屬于第一范式,且所有的非碼屬性都完全函數(shù)依賴于碼屬性,則為第二范式。

第三范式:若R屬于第二范式,且所有的非碼屬性沒有一個是傳遞函數(shù)依賴于候選碼,則屬于第三范式。

6.一個表中的Id有多個記錄,把所有這個id的記錄查出來,并顯示共有多少條記錄數(shù),用SQL語句及視圖、存儲過程分別實現(xiàn)。

存儲過程:

[php]

DELIMITER //

create procedure proc_countNum(in columnId int,out rowsNo int)

begin

select count(*) into rowsNo from member where member_id=columnId;

end

call proc_countNum(1,@no);

select @no;

[/php]

視圖:

create view v_countNum as select member_id,count(*) as countNum from member group by member_id

select countNum from v_countNum where member_id=1

7 表中有A B C三列,用SQL語句實現(xiàn):當(dāng)A列大于B列時選擇A列否則選擇B列,當(dāng)B列大于C列時選擇B列否則選擇C列。

[php]select

case

when first_namemiddle_name then

case when first_namelast_name then first_name

else last_name end

else

case when middle_namelast_name then middle_name else last_name

end

end as name

from member

[/php]

8請簡述項目中優(yōu)化sql語句執(zhí)行效率的方法,從哪些方面,sql語句性能如何分析?

ANSWER: sql優(yōu)化有鳥用,不如直接加索引。

9 如果模板是用smarty模板。怎樣用section語句來顯示一個名為$data的數(shù)組。比如:

[php]$data = array(

[0] = array( [id]=8 [name]=’name1′)

[1] = array( [id]=10 [name]=’name2′)

[2] = array( [id]=15 [name]=’name3′)

……

)[/php]

寫出在模板頁的代碼? 若用foreach語句又要怎樣顯示呢?

占無答案.

10 寫一個函數(shù),能夠遍歷一個文件夾下的所有文件和子文件夾。(目錄操作)

[php] ?php

$d = dir(dirname(__file__));

//echo "Handle: " . $d-handle . "\n";

//echo "Path: " . $d-path . "\n";

while ( false !== ($entry = $d-read ()) ) {

echo $entry . "br /";

}

$d-close ();

[/php]

11 兩張表 city表和province表。分別為城市與省份的關(guān)系表。

city:

id City Provinceid

1 廣州 1

2 深圳 1

3 惠州 1

4 長沙 2

5 武漢 3

………. 廣州

province:

id Province

1 廣東

2 湖南

3 湖北

……….

(1) 寫一條sql語句關(guān)系兩個表,實現(xiàn):顯示城市的基本信息。?

(2) 顯示字段:城市id ,城市名, 所屬省份 。

如:

Id(城市id) Cityname(城市名) Privence(所屬省份)

。。。。。。。。。

。。。。。。。。。

(2)如果要統(tǒng)計每個省份有多少個城市,請用group by 查詢出來。?

顯示字段:省份id ,省份名,包含多少個城市。

ANSWER:

1.select A.id,A.Cityname,B.Province from city A,province B where A.provinceid=B.id

2.select B.id,B.Province,count(*) as num from city A,province B where A.provinceid=B.id group by B.id

12. 按照你的經(jīng)驗請簡述軟件工程進(jìn)行軟件開發(fā)的步驟。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用過那種,有缺點是什么?

公司用dbdesigner及cvs,測試管理工具用的是Mantis

13. 請簡述操作系統(tǒng)的線程與進(jìn)程的區(qū)別。列舉LINUX下面你使用過的軟件?

14. 請使用偽語言結(jié)合數(shù)據(jù)結(jié)構(gòu)冒泡排序法對以下一組數(shù)據(jù)進(jìn)行排序 10 2 36 14 10 25 23 85 99 45。

[php]function bubble_sort( $arr){

$number=count($arr);

for($i=0;$i$number-1;$i++){

for($j=0;$j$number-1-$i;$j++){

if($arr[$j]$arr[$j+1]){

$tmp=$arr[$j];

$arr[$j]=$arr[$j+1];

$arr[$j+1]=$tmp;

}

}

}

}

$str="10 2 36 14 10 25 23 85 99 45";

$arr=explode(" ",$str);

bubble_sort($arr);

echo "pre";

var_dump($arr);

[/php]

分享名稱:php數(shù)據(jù)結(jié)構(gòu)面試題 php新特性 面試題
文章轉(zhuǎn)載:http://muchs.cn/article24/doocdce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、建站公司品牌網(wǎng)站設(shè)計、面包屑導(dǎo)航、網(wǎng)站收錄、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)