Php面試數(shù)據(jù)結(jié)構(gòu)與算法 php面試基礎(chǔ)知識(shí)

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

某大公司的PHP面試題

公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出雄縣免費(fèi)做網(wǎng)站回饋大家。

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

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

[php]

echo $_SERVER ['PHP_SELF'];

echo $_SERVER ['SERVER_ADDR'];

[/php]

2. 求兩個(gè)日期的差數(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. 請(qǐng)寫(xiě)一個(gè)函數(shù),實(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ě)一段程序,實(shí)現(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. 請(qǐng)簡(jiǎn)述數(shù)據(jù)庫(kù)設(shè)計(jì)的范式及應(yīng)用。

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

ANSWER:

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

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

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

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

存儲(chǔ)過(guò)程:

[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語(yǔ)句實(shí)現(xiàn):當(dāng)A列大于B列時(shí)選擇A列否則選擇B列,當(dāng)B列大于C列時(shí)選擇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請(qǐng)簡(jiǎn)述項(xiàng)目中優(yōu)化sql語(yǔ)句執(zhí)行效率的方法,從哪些方面,sql語(yǔ)句性能如何分析?

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

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

[php]$data = array(

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

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

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

……

)[/php]

寫(xiě)出在模板頁(yè)的代碼? 若用foreach語(yǔ)句又要怎樣顯示呢?

占無(wú)答案.

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

[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 長(zhǎng)沙 2

5 武漢 3

………. 廣州

province:

id Province

1 廣東

2 湖南

3 湖北

……….

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

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

如:

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

。。。。。。。。。

。。。。。。。。。

(2)如果要統(tǒng)計(jì)每個(gè)省份有多少個(gè)城市,請(qǐng)用group by 查詢出來(lái)。?

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

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)驗(yàn)請(qǐng)簡(jiǎn)述軟件工程進(jìn)行軟件開(kāi)發(fā)的步驟。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用過(guò)那種,有缺點(diǎn)是什么?

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

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

14. 請(qǐng)使用偽語(yǔ)言結(jié)合數(shù)據(jù)結(jié)構(gòu)冒泡排序法對(duì)以下一組數(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面試有什么技巧么?

PHP程序員在面試的時(shí)候一般應(yīng)該抓住以下幾個(gè)點(diǎn)。

一、應(yīng)該介紹自己掌握的開(kāi)發(fā)一種,主要介紹PHP語(yǔ)言的獨(dú)特語(yǔ)法以及如何使用,比如PHP語(yǔ)言會(huì)比CGI更快的執(zhí)行動(dòng)態(tài)頁(yè)面。

二、必須熟悉Oracle、Mysql等數(shù)據(jù)庫(kù),并能簡(jiǎn)單的介紹自己掌握的程度。由于php做出的動(dòng)態(tài)頁(yè)面比用其他語(yǔ)言做出來(lái)的頁(yè)面在執(zhí)行效率以及CGI方面高得多,所以你還需要在面試中說(shuō)出自己的文檔撰寫(xiě)能力很強(qiáng)。

三、PHP程序員應(yīng)該具備獨(dú)立分析和解決問(wèn)題的能力,可以在自我介紹中講講自己曾經(jīng)遇到過(guò)的問(wèn)題是如何解決的。讓面試官看到你的能力,這將會(huì)直接影響到你自我介紹的成功與否。

四、一個(gè)PHP程序員必須有良好的職業(yè)道德和工作態(tài)度,所以在面試中應(yīng)該盡量講自己在做項(xiàng)目時(shí)的認(rèn)真態(tài)度以及今后的工作規(guī)劃,表現(xiàn)出自己的進(jìn)取心。

五、還有關(guān)于溝通能力和理解能力的體現(xiàn),這個(gè)在與HR的交談中就可以表現(xiàn)出來(lái),所以需要做的工作就是從容的有條理的把自我介紹說(shuō)完,回答每一個(gè)問(wèn)題時(shí)都應(yīng)該簡(jiǎn)潔明了,關(guān)于自我介紹可以提前做個(gè)草稿,背一下。

六、團(tuán)隊(duì)合作能力也是企業(yè)非??粗氐模谂嘤?xùn)中老師一般都會(huì)帶領(lǐng)大家做項(xiàng)目,大的項(xiàng)目一般會(huì)分小組,每個(gè)人都有相對(duì)應(yīng)的任務(wù),這就模擬了公司中的團(tuán)隊(duì)合作,在自我介紹過(guò)程中要把做項(xiàng)目的具體流程以及相互協(xié)作的過(guò)程說(shuō)出來(lái),讓HR看到自己具備團(tuán)隊(duì)合作的能力。

七、最后就是執(zhí)行力,每當(dāng)任務(wù)分配下來(lái)的時(shí)候該如何執(zhí)行,還有自己講過(guò)職業(yè)規(guī)劃后該如何執(zhí)行,還有在學(xué)習(xí)的過(guò)程中是如何人字形的,遇到困難又是如何執(zhí)行的,這些都可以體現(xiàn)出php程序員的執(zhí)行力,回答的時(shí)候抓住發(fā)現(xiàn)及時(shí)尋找原因,快速展開(kāi)行動(dòng)的這個(gè)主線即可。

八、最重要的是你的能力、技術(shù)以及自己的項(xiàng)目

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編碼。例如空格就會(huì)變成加號(hào)。

rawurlencode()將url編碼成url的字符串專(zhuān)用格式,特殊字符回轉(zhuǎn)換成百分號(hào)后面加兩個(gè)十六子介數(shù)字的格式。

4,strip_tags(),html_entity_decode();

5,$str=preg_replace("/\script.*\.*\\/script\/i","",$str);

6,左連接,左連接的表如果沒(méi)有匹配的數(shù)據(jù)不影響結(jié)果。

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 后者的權(quán)限大于前者,后者是OFF的話,前者就算是E-ALL也沒(méi)用。

11,$_SERVER['REMOTE_ADDR'];

12,incov()

echo iconv("gbk",""UTF-8,"我們");

mb_convert_encoding($str, "GBK", "UTF-8")

13 explode() split() ;implode() join()

14 注意事項(xiàng)挺多的,懶得寫(xiě)。

1,超時(shí),服務(wù)器已經(jīng)關(guān)閉連接

2 靜態(tài)表字段長(zhǎng)度固定,自動(dòng)填充,讀寫(xiě)速度很快,便于緩存和修復(fù),但比較占硬盤(pán),動(dòng)態(tài)表是字段長(zhǎng)度不固定,節(jié)省硬盤(pán),但更復(fù)雜,容易產(chǎn)生碎片,速度慢,出問(wèn)題后不容易重建。

3InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類(lèi)型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定?;镜牟顒e為:MyISAM類(lèi)型不支持事務(wù)處理等高級(jí)處理,而InnoDB類(lèi)型支持。MyISAM類(lèi)型的表強(qiáng)調(diào)的是性能,其執(zhí)行數(shù)度比InnoDB類(lèi)型更快,但是不提供事務(wù)支持,而InnoDB提供事務(wù)支持已經(jīng)外部鍵等高級(jí)數(shù)據(jù)庫(kù)功能。

MyIASM是IASM表的新版本,有如下擴(kuò)展:

二進(jìn)制層次的可移植性。

NULL列索引。

對(duì)變長(zhǎng)行比ISAM表有更少的碎片。

支持大文件。

更好的索引壓縮。

更好的鍵嗎統(tǒng)計(jì)分布。

更好和更快的auto_increment處理。

1.MySQL最大的優(yōu)勢(shì)在于MyISAM引擎下的簡(jiǎn)單SELECT,INSERT和UPDATE快速操作

2.MyISAM類(lèi)型的數(shù)據(jù)文件可以在不同操作系統(tǒng)中COPY,這點(diǎn)很重要,布署的時(shí)候方便點(diǎn)。

以下是一些細(xì)節(jié)和具體實(shí)現(xiàn)的差別:

1.InnoDB不支持FULLTEXT類(lèi)型的索引。

2.InnoDB 中不保存表的具體行數(shù),也就是說(shuō),執(zhí)行select count(*) from table時(shí),InnoDB要掃描一遍整個(gè)表來(lái)計(jì)算有多少行,但是MyISAM只要簡(jiǎn)單的讀出保存好的行數(shù)即可。注意的是,當(dāng)count(*)語(yǔ)句包含 where條件時(shí),兩種表的操作是一樣的。

3.對(duì)于AUTO_INCREMENT類(lèi)型的字段,InnoDB中必須包含只有該字段的索引,但是在MyISAM表中,可以和其他字段一起建立聯(lián)合索引。

4.DELETE FROM table時(shí),InnoDB不會(huì)重新建立表,而是一行一行的刪除。

5.LOAD TABLE FROM MASTER操作對(duì)InnoDB是不起作用的,解決方法是首先把InnoDB表改成MyISAM表,導(dǎo)入數(shù)據(jù)后再改成InnoDB表,但是對(duì)于使用的額外的InnoDB特性(例如外鍵)的表不適用。

另外,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,例如update table set num=1 where name like “%aaa%”

以暫對(duì)存儲(chǔ)引擎的認(rèn)識(shí),覺(jué)得 InnoDB 支持外鍵,在數(shù)據(jù)量可以用“龐大”來(lái)形容時(shí),在有良好的 INDEX 的基礎(chǔ)上,InnoDB 的查詢速度應(yīng)該比 MyISAM 要快。

在 Falcon 有穩(wěn)定版本前,我想 MyISAM 是一個(gè)可用的選擇方案。

任何一種表都不是萬(wàn)能的,只用恰當(dāng)?shù)尼槍?duì)業(yè)務(wù)類(lèi)型來(lái)選擇合適的表類(lèi)型,才能最大的發(fā)揮MySQL的性能優(yōu)勢(shì)

3, 都是1 ^^懶得回答了,睡覺(jué)去。

本文題目:Php面試數(shù)據(jù)結(jié)構(gòu)與算法 php面試基礎(chǔ)知識(shí)
文章路徑:http://bm7419.com/article22/ddepijc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google網(wǎng)站內(nèi)鏈、用戶體驗(yàn)、靜態(tài)網(wǎng)站、網(wǎng)站營(yíng)銷(xiāo)網(wǎng)站收錄

廣告

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

外貿(mào)網(wǎng)站制作