您的位置:首页 > 职场人生

(转贴)PHP面试题系列一【附答案】

2010-08-22 18:36 369 查看

(转贴)PHP面试题系列一【附答案】

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的URL记录在预定义变量(2)中。

2.执行程序段<?php
echo 8%(-2) ?>将输出(3)。

3.在HTTP 1.0中,状态码 401 的含义是(4);如果返回“找不到文件”的提示,则可用
header 函数,其语句为(5)。

4.数组函数 arsort 的作用是(6);语句
error_reporting(2047)的作用是(7)。

5.PEAR中的数据库连接字符串格式是(8)。

6.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把标记及其内容都去掉):(9)。

7.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(10)动态装载PHP模块,

然后再用语句(11)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。

8.语句
include 和 require
都能把另外一个文件包含到当前文件中,它们的区别是(12);为了避免多次包含同一文件,可以用语句(13)来代替它们。

9.类的属性可以序列化后保存到
session
中,从而以后可以恢复整个类,这要用到的函数是(14)。

10.一个函数的参数不能是对变量的引用,除非在php.ini中把(15)设为on.

11.SQL
中LEFT JOIN的含义是(16)。

如果
tbl_user记录了学生的姓名(name)和学号(ID),

tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),

要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句(17)。

12.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(18)。

13.写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

14.简述论坛中无限分类的实现原理。

15.设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。

答案(填空):

1.
echo $_SERVER['PHP_SELF']; echo $_SERVER["HTTP_REFERER"];

2. 0

3.
(4)未授权 (5) header("HTTP/1.0 404 Not Found");

4.
(6)对数组进行逆向排序并保持索引关系 (7)All errors and warnings

5. 没弄明白

6.
/<[^>].*?>.*?<//>/si

7.(10) LoadModule php5_module
"D:/xampp/apache/bin/php5apache2.dll"

(11) AddType
application/x-httpd-php-source .phps

AddType application/x-httpd-php
.php .php5 .php4 .php3 .phtml

8.(12) 发生异常时include产生警告require产生致命错误 (13)
require_once()/include_once()

9. serialize() /unserialize()

10.
allow_call_time_pass_reference

11. (16) 自然左外连接

(17) select name ,
count(score) as sum_score from tbl_user left join tbl_score on
tbl_user.ID=tbl_score.ID group by tbl_user.ID

12.
结束标识符所在的行不能包含任何其它字符除";"

13.

/**

*
遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。

* @param string $dir

*
@return array

*/

my_scandir($dir)

{

$files = array();

if
( $handle = opendir($dir) )

{

while ( ($file =
readdir($handle)) !== false )

{

if ( $file != ".."
&& $file != "." )

{

if ( is_dir($dir .
"/" . $file) )

{

$files[$file] =
rec_scandir($dir . "/" . $file);

}

else

{

$files[] = $file;

}

}

}

closedir($handle);

return $files;

}

}

===============================================================================

PHP面试题系列二【附答案】

1、用PHP打印出前一天的时间格式是2006-5-10
22:21:21

2、echo(),print(),print_r()的区别

3、能够使HTML和PHP分离开使用的模板

4、如何实现PHP、JSP交互?

5、使用哪些工具进行版本控制?

6、如何实现字符串翻转?

7、优化MYSQL数据库的方法。

8、谈谈事务处理

9、apache+mysql+php实现最大负载的方法

10、实现中文字串截取无乱码的方法。

答案:

1.echo
date('Y-m-d H:i:s', strtotime('-1 day'));

2.echo是语言结构,无返回值;print功能
和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象

3.so
much,其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表:http://www.sitepoint.com/forums/showthread.php?t=123769

4.
题目有点含糊不清,SOAP,XML_RPC,Socket
,CURL都可以实现这些,如果是考PHP和Java的整合,PHP内置了这种机制(如果考PHP和.NET的整合,也可以这么回答),例如$foo = new
Java('java.lang.System');

5.CVS
和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server
on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV
做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.

6.用strrev函数呗,不准用PHP内置的就自己写:

strrev($str)

{

$len=strlen($str);

$newstr = '';

for($i=$len;$i>=0;$i--)

{

$newstr .= $str{$i};

}

return
$newstr;

}

7.高考政治题,把你知道的知识点都写上吧.我的答案:

(1).数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据库,必要的时候,去正规化(英文是这个:denormalize,中文翻译成啥我不知道),允许部分数据冗余,避免JOIN操作,以提高查询效率

(2).系统
架构设计方面,表散列,把海量数据散列到几个不同的表里面.快慢表,快表只留最新数据,慢表是历史存档.集群,主服务器
Read
& write,从服务器
read
only,或者N台服务器
,各机器互为Master

(3).(1)和(2)超越PHP
Programmer的要求了,会更好,不会没关系.检查有没有少加索引

(4).写高效的SQL语句,看看有没有写低效的SQL语句,比如生成笛卡尔积的全连接啊,大量的Group
By和order by,没有limit等等.必要的时候,把数据库逻辑封装到DBMS端的存储过程里面.缓存查询结果,explain每一个sql语句

(5).
所得皆必须,只从数据库取必需的数据,比如查询某篇文章的评论数,select count(*) ... where article_id = ?
就可以了,不要先select * ... where article_id =
?然后msql_num_rows.

只传送必须的SQL语句,比如修改文章的时候,如果用户只修改了标题,那就update ... set title = ?
where article_id = ?不要set content =
?(大文本)

(6).必要的时候用不同的存储引擎.比如InnoDB可以减少死锁.HEAP可以提高一个数量级的查询速度
.

8.如同是个编程语言都会有答应Hello
World的例子一样,是本数据库的教材都会讲A给B的账户转账50美元的例子,回答这个就好了.不过据我所知,用MySQL的企业,很少用MySQL来实现事务处理.何况现在Oracle收购了InnoDB的公司.

9.参见第七题的答案,那个地方搞好了这个问题就迎刃而解了.

10.哈哈哈,我猜出题的人是不是被substr的中文处理问题烦恼很久了,是不是还用了网上流传的用正则匹配中文字符然后截取的函数,其实,有非常简单的解决方法:mb_substr()

===============================================================================

PHP
面试题系列三【附答案】

1、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来

表名User

Name
Tel Content Date

张三 13333663366 大专毕业
2006-10-11

张三 13612312331 本科毕业 2006-10-15

张四
021-55665566 中专毕业
2006-10-15

2、请根据上面的题目完成代码:

$mysql_db=mysql_connect("local","root","pass");

@mysql_select_db("DB",$mysql_db);

3、如何使用下面的类,并解释下面什么意思?

class
test

{

Get_test($num)

{

$num=md5(md5($num)."En");

return $num;

}

}

4、用javascipt打印 “上海爱吉”

5、写出 SQL语句的格式 : 插入 ,更新
,删除

6、谈谈对你PHP认识或你擅长的技术


答案:

1.SELECT
Name,Tel,Content,Date FROM User WHERE Name='张三'

2.

$mysql_db =
mysql_connect("local","root","pass");

@mysql_select_db("DB",$mysql_db);

$sql
= "SELECT Name,Tel,Content,Date FROM User WHERE Name='张三'";

$result =
mysql_query($sql);

while ($row = mysql_fetch_array($result))

{

echo
$row['Name'] . ' ' . $row['Tel'] . ' ' . $row['Content'] . ' ' .
$row['Date'] . "<br>/r/n";

}

3.

用法:

$get_test = new
test();

$result =
$get_test->Get_test(2);

将$num变量进行两次md5后返回,第2次的md5中的参数,在第一次md5($num)后多加了En

4.

<>

write('上海爱吉');

</>

5.

插入

INSERT
INTO table (a1,a2,a3) S ($val1, '$val2', $val3);

修改

UPDATE table SET
a1=$a1, a2='$a2' WHERE id=3;

删除

DELETE FROM table WHERE
id=3;

6.

自己发挥

===============================================================================

PHP面试题系列四【附答案】

1、假定要使用Apache+Php的配置
,并将php3编译成Apache的一个模块。那麽以下httpd.conf文件的语句是必须的:【


A、AddModule mod_php3.c

B、LoadModule php3_module
libexec/libphp3.so

C、AddType application/x-httpd-php3.php3

D、setup

E、make install

2、PHP支持的数据类型有七种,以下被支持的有:【】

A、array

B、floating-point numbers(double)

C、integer

D、date

E、string

3、以下程序:

<HTML>

<HEAD>

<TITLE></TITLE>

<HEAD>

<BODY>

<?php

$num1 = 15;

$num2 = $num1;

echo "<p>$num2</p>";

$num2 = &$num1;

$num2 = 20;

echo
"<p>$num1</p>";

?>

</BODY>

</HTML>

程序输出为:[
]

A、15

B、35

C、20

D、5

4、以下程序

<HTML>

<HEAD>

<TITLE></TITLE>

<HEAD>

<BODY>

<?php

$str1 = "01";

$str1++;

$str1 += 1;

echo "<p>/$str1
=> $str1</p>";

?>

</BODY>

</HTML>

程序输出为:[
]

A、$str1 => 01

B、$str1 => 2

C、$str1 => 03

D、$str1 => 3

E、$str1 =>
1

5、全局变量与局部变量

$a=1;

sum()

{

echo
$a;

}

sum();

程序输出为:[ ]

A、1

B、10

C、100

D、1000

E、空值

6、PHP的控制语句

<?php

$a = 3;

$b =
$a++;

if ($a > $b)

{

echo "a 比 b 大";

}

elseif ($a == $b)

{

echo "a 等于 b";

}

else

{

echo "a 比 b 小";

}

?>

输出结果为:[ ]

A、a 比 b


B、a 等于 b

C、a 比 b 小

D、"a 比 b 小"

E、无输出

7、include的功能和require一样,不同的是,require不能用在[ ]

A、判断语句或循环里,

B、连接语句里

C、声明语句里

D、文件的开头

E、文件的中间

8、PHP对字符串的处理程序

$name="Jollen";

echo
'Name:$name';

echo "Name:$name";

输出结果为:[ ]

A、Name:Jollen

Name:Jollen

B、Name:Jollen

Name:$name

C、Name:$name

Name:Jollen

D、Name:$name

Name:$name

E、Name:"Jollen"

Name:Jollen

9、数据处理程序

$string="This is a
test.";

echo ereg_replace(" is"," was",$string)."<br>";

echo
ereg_replace("() is","//1was",$string)."<br>";

echo
ereg_replace("(() is)","//2was",$string)."<br>";

输出为:[ ]

A、This was a test.

This is a test.

This was a test.

B、This is a test.

This is a test.

This was a test.

C、This is a test.

This is a test.

This is a test.

D、This was a test.

This is a test.

This is a test.

E、This was a test.

This was a test.

This was a
test.

10、下面建立与MySQL Server的连接语法正确的是:[ ]

A、$link=connect("host_name","user_name","password");

B、$link=mysql_connect("host_name","user_name","password");

C、$link=mysqlconnect("host_name","user_name","password");

D、$link=mysql_pconnect("host_name","user_name","password");

E、$link=pconnect("host_name","user_name","password");

11、下面程序

<?

$message="abcdefghijklmnopqrstuvwxyz";

mail("php@wilson.gs", "No
topic", $message, "From:

someone@wahaha.org.tw
/nReply-To: reply@wahaha.org.tw
/nX-Mailer: PHP/"

. phpversion());

?>[ ]

A、从php@wilson.gs
接收邮件

B、发送邮件到reply@wahaha.org.tw

C、发送邮件到php@wilson.gs

D、从reply@wahaha.org.tw
接收邮件

E、不能发送任何邮件

12、rawurlencode()的作用是[ ]

A、对PHP3将要输出的URL部分进行编码

B、对PHP3将要输入的URL部分进行编码

C、对PHP3已经输出的URL部分进行编码

D、对PHP3已经输出的URL部分进行编码

E、对PHP3将要输出的URL部分进行解码

13、假如我们要删除一个,再建立一个同样的,应写成:[ ]

A、set("fullname");

set("fullname","Jacky");

B、set("fullname","Jacky");

C、set("fullname","Jacky");

set("fullname");

D、set("fullname");

E、sets("fullname","Jacky");

sets("fullname");

14、如果要在大量的数据里读取一个字段的数据,则最好使用mysql_fetch_row()、mysql_fetch_array()、

mysql_fetch_object()函数。因为这几个函数的速度都比[ ]

A、mysql_num_rows

B、mysql_num_fields

C、mysql_result

D、mysql_list_fields

E、mysql_insert_id

来得快。

15、在PHP中,如果派生类与父类有相同名字的函数,则派生类的函数会替换父类的函数,程序

class
A

{

disName()

{

echo "Picachu";

}

}

class B extends A

{

var tmp;

disName()

{

echo "Doraemon";

}

}

$cartoon = new
B;

$cartoon->disName();

结果为:[ ]

A、tmp

B、Picachu

C、disName

D、Doraemon

E、无输出

答案:

1.[C]

2.[ A B
C E ]

PHP的变量属于松散数据类型,在计算时动态(dynamic)决定。如果要强制设置
变量的数据类型的话,可以利用
settype()

函数。或利用 c 语言的强制转型方式(type casting)。

3.[ A C ]

4.[ D
]

5.[ E ]

6.[ A ]

7.[ E ]

但include可以。

8.[ C
]

9.[ E ]

10.[ B D ]

11.[ C ]

12.[ C D ]

13.[
B ]

14.[ C ]

15.[ D
]

===============================================================================

PHP面试题系列五【附答案】

一、基础题

1.
写出如下程序的输出结果

<?

$str1 = null;

$str2 = false;

echo
$str1==$str2 ? '相等' : '不相等';

$str3 = '';

$str4 = 0;

echo $str3==$str4 ? '相等' : '不相等';

$str5 = 0;

$str6 =
'0';

echo $str5===$str6 ? '相等' : '不相等';

?>

2.
写出如下程序的输出结果

<?

$a1 = null;

$a2 = false;

$a3 = 0;

$a4 = '';

$a5 = '0';

$a6 = 'null';

$a7 = array();

$a8 = array(array());

echo empty($a1) ? 'true' : 'false';

echo empty($a2) ? 'true' : 'false';

echo empty($a3) ? 'true' :
'false';

echo empty($a4) ? 'true' : 'false';

echo empty($a5) ?
'true' : 'false';

echo empty($a6) ? 'true' : 'false';

echo
empty($a7) ? 'true' : 'false';

echo empty($a8) ? 'true' :
'false';

?>

3. 写出如下程序的输出结果

<?

$test = 'aaaaaa';

$abc = & $test;

unset($test);

echo
$abc;

?>

4. 写出如下程序的输出结果

<?

$count = 5;

get_count()

{

static $count = 0;

return
$count++;

}

echo $count;

++$count;

echo
get_count();

echo get_count();

?>

5.
写出如下程序的输出结果

<?

$GLOBALS['var1'] = 5;

$var2 = 1;

get_()

{

global $var2;

$var1 = 0;

return
$var2++;

}

get_();

echo $var1;

echo
$var2;

?>

6. 写出如下程序的输出结果

<?

get_arr($arr)

{

unset($arr[0]);

}

$arr1 = array(1, 2);

$arr2 =
array(1, 2);

get_arr(&$arr1);

get_arr($arr2);

echo count($arr1);

echo count($arr2);

?>

7.
使用五种以上方式获取一个文件的扩展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg


必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name),
get_ext2($file_name)

二、算法题

1.
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

2.
使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

3.
写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

答案(以下答案不一定是最好的,只是一个简单的参考)

一、基础题

1.
相等 相等 不相等

2. true true true true true false true false

3.
aaaaaa

4. 5 0 1

5. 5 2

6. 1 2

7.
使用五种以上方式获取一个文件的扩展名

1)

get_ext1($file_name)

{

return
strrchr($file_name, '.');

}

2)

get_ext2($file_name)

{

return substr($file_name, strrpos($file_name,
'.'));

}

3)

get_ext3($file_name)

{

return
array_pop(explode('.',
$file_name));

}

4)

get_ext4($file_name)

{

$p =
pathinfo($file_name);

return
$p['extension'];

}

5)

get_ext5($file_name)

{

return
strrev(substr(strrev($file_name), 0, strpos(strrev($file_name),
'.')));

}

二、算法题

1.
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

//冒泡排序(数组排序)

bubble_sort($array)

{

$count = count($array);

if ($count <= 0)

return false;

for($i=0; $i<$count; $i++)

{

for($j=$count-1;
$j>$i; $j--)

{

if ($array[$j] <
$array[$j-1])

{

$tmp = $array[$j];

$array[$j] = $array[$j-1];

$array[$j-1] = $tmp;

}

}

}

return
$array;

}

//快速排序(数组排序)

quick_sort($array)

{

if
(count($array) <= 1)

return $array;

$key =
$array[0];

$left_arr = array();

$right_arr = array();

for ($i=1; $i<count($array); $i++)

{

if ($array[$i] <=
$key)

$left_arr[] = $array[$i];

else

$right_arr[] = $array[$i];

}

$left_arr =
quick_sort($left_arr);

$right_arr = quick_sort($right_arr);

return array_merge($left_arr, array($key), $right_arr);

}

2.
使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

//二分查找(数组里查找某个元素)

bin_sch($array,
$low, $high, $k)

{

if ($low <= $high)

{

$mid =
intval(($low+$high)/2);

if ($array[$mid] == $k)

{

return $mid;

}

elseif ($k <
$array[$mid])

{

return bin_sch($array, $low, $mid-1,
$k);

}

else

{

return
bin_sch($array, $mid+1, $high, $k);

}

}

return -1;

}

//顺序查找(数组里查找某个元素)

seq_sch($array, $n, $k)

{

$array[$n] = $k;

for($i=0; $i<$n; $i++)

{

if($array[$i]==$k)

{

break;

}

}

if ($i<$n)

{

return $i;

}

else

{

return -1;

}

}

3.
写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

//二维数组排序,
$arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

array_sort($arr, $keys,
$order=0)

{

if (!is_array($arr))

{

return
false;

}

$keys = array();

foreach($arr as $key =>
$val)

{

$keys[$key] = $val[$keys];

}

if($order
== 0)

{

asort($keys);

}

else

{

arsort($keys);

}

reset($keys);

foreach($keys as $key
=> $vals)

{

$keysort[$key] = $key;

}

$new_array = array();

foreach($keysort as $key => $val)

{

$new_array[$key] = $arr[$val];

}

return $new_array;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: