Php面试数据结构与算法 php面试基础知识

PHP程序员上机面试题(并附答案,回答好的加分)

某大公司的PHP面试题

公司主营业务:网站设计、成都网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。成都创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。成都创新互联推出雄县免费做网站回馈大家。

管理提醒: 本帖被 haowubai 执行取消置顶操作(2009-07-30)

1. 如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?

[php]

echo $_SERVER ['PHP_SELF'];

echo $_SERVER ['SERVER_ADDR'];

[/php]

2. 求两个日期的差数,例如2007-2-5 ~ 2007-3-6 的日期差数

[php]

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

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

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

[/php]

3. 请写一个函数,实现以下功能:

字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”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. 要求写一段程序,实现以下数组$arr1转换成数组$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. 请简述数据库设计的范式及应用。

一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下。

ANSWER:

第一范式:若关系模式R的每一个属性是不可再分解的,再属于第一范式。

第二范式:若R属于第一范式,且所有的非码属性都完全函数依赖于码属性,则为第二范式。

第三范式:若R属于第二范式,且所有的非码属性没有一个是传递函数依赖于候选码,则属于第三范式。

6.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。

存储过程:

[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语句实现:当A列大于B列时选择A列否则选择B列,当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请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析?

ANSWER: sql优化有鸟用,不如直接加索引。

9 如果模板是用smarty模板。怎样用section语句来显示一个名为$data的数组。比如:

[php]$data = array(

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

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

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

……

)[/php]

写出在模板页的代码? 若用foreach语句又要怎样显示呢?

占无答案.

10 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(目录操作)

[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表。分别为城市与省份的关系表。

city:

id City Provinceid

1 广州 1

2 深圳 1

3 惠州 1

4 长沙 2

5 武汉 3

………. 广州

province:

id Province

1 广东

2 湖南

3 湖北

……….

(1) 写一条sql语句关系两个表,实现:显示城市的基本信息。?

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

如:

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

。。。。。。。。。

。。。。。。。。。

(2)如果要统计每个省份有多少个城市,请用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. 按照你的经验请简述软件工程进行软件开发的步骤。以下工具Rational Rose、PowerDesigner、Project、VSS或CVS、TestDirector使用过那种,有缺点是什么?

公司用dbdesigner及cvs,测试管理工具用的是Mantis

13. 请简述操作系统的线程与进程的区别。列举LINUX下面你使用过的软件?

14. 请使用伪语言结合数据结构冒泡排序法对以下一组数据进行排序 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程序员在面试的时候一般应该抓住以下几个点。

一、应该介绍自己掌握的开发一种,主要介绍PHP语言的独特语法以及如何使用,比如PHP语言会比CGI更快的执行动态页面。

二、必须熟悉Oracle、Mysql等数据库,并能简单的介绍自己掌握的程度。由于php做出的动态页面比用其他语言做出来的页面在执行效率以及CGI方面高得多,所以你还需要在面试中说出自己的文档撰写能力很强。

三、PHP程序员应该具备独立分析和解决问题的能力,可以在自我介绍中讲讲自己曾经遇到过的问题是如何解决的。让面试官看到你的能力,这将会直接影响到你自我介绍的成功与否。

四、一个PHP程序员必须有良好的职业道德和工作态度,所以在面试中应该尽量讲自己在做项目时的认真态度以及今后的工作规划,表现出自己的进取心。

五、还有关于沟通能力和理解能力的体现,这个在与HR的交谈中就可以表现出来,所以需要做的工作就是从容的有条理的把自我介绍说完,回答每一个问题时都应该简洁明了,关于自我介绍可以提前做个草稿,背一下。

六、团队合作能力也是企业非常看重的,在培训中老师一般都会带领大家做项目,大的项目一般会分小组,每个人都有相对应的任务,这就模拟了公司中的团队合作,在自我介绍过程中要把做项目的具体流程以及相互协作的过程说出来,让HR看到自己具备团队合作的能力。

七、最后就是执行力,每当任务分配下来的时候该如何执行,还有自己讲过职业规划后该如何执行,还有在学习的过程中是如何人字形的,遇到困难又是如何执行的,这些都可以体现出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面试数据结构与算法 php面试基础知识
分享路径:http://pwwzsj.com/article/ddepijc.html