PHP 精典面试题(附答案)
1.输出Mozilla/4.0(compatible;MISIE5.01;Window NT 5.0)是,可能输出的语句是?
A:$_SERVER['HTTP_USER_AGENT_TYPE'];
B: $_SERVER['HTTP_USER_AGENT'];
C: $_SERVER['USER_ACENT'];
D: $_SERVER['AGENT'];
2.下面功能php无法实现的是?
A: 服务端脚本运行;
B: 命令行脚本运行;
C: 客户端图形界面(GUI)程序;
D: 浏览器执行DOM操作
3.下面说法不正确的是?
A: PHP有四种标量类型:布尔型,整型,浮点型,字符串;
B: 浮点型与双精度是同一种类型
C: 复合类型包括:数组,对象,资源;
D: 伪类型:混合型,数字型,回调;
4.执行代码后
<?php echo function_exists('print'); ?>
输出的结果是?
A: 空
B: true
C: false
D: FALSE
5.下面不是PHP语法的组成部分的函数是?
A: array
B: eval
C: each
D: list
6.执行下面代码的结果是什么?
<?php $bool = true; echo gettype($bool); echo is_string($bool); ?>
A: boolean
B: boolean0
C: booleanFalse
D: booleanfalse
7.写出下面程序代码执行结果
<?php $a = 12; $b = 012; $c = 0x12; echo $a,"\n",$b,"\n",$c; ?>
A: 22
B: 10
C: 6
D: 12
8下面代码的执行结果是?
<?php echo 1+2+"3+5+6"; ?>
A: 0
B: 3
C: 6
D: "33+4+5"
9.下面代码加入下面那个函数后返回true?
return ? == 'A';
A: ord(65)
B: chr(65)
C: 65+"
D: "65+
10.下面代码输出正确的是?
<?php $a = array(1=>5,5=>8,22,2=>'8',81); echo $a[7]; echo $a[6]; echo $a[3]; ?>
A: 空 22 81
B: 空 81 22
C: 81 22 空
D: 空 空 空
11.下面代码的输出结果是?
<?php $a[bar] = 'hello'; echo $a[bar]; echo $a['bar']; ?>
A: hello
B: 空空
C: 报错
D: hello hello
12.写出下面代码的结果:
<?php echo 1>>0; echo 2>>1; echo 3<<2; ?>
A: 012
B: 106
C: 1112
D: 123
13.下面代码执行结果?
<?php for($i=1;$i<10;$i++){ print $i; } ?>
A: 0123456789
B: 01234567890
C: 无输出
D: 死循环
14.下面对于echo,print 的描述正确的是?
A: echo,print都可以打印多个参数
B: print 可以打印多个参数,echo不可以
C: echo可以打印多个参数,print不可以
D: echo,print 都不可以打印多个参数
15.对于以下的代码
<?php $fruits = array('strawberry'=>'red','banana'=>'yellow'); ?>
能够正确得到结果'yellow' 的代码是?
A: echo "A banana is {$fruits['banana']}";
B: echo "A banana is $fruits['banana']";
C: echo "A banana is {$fruits[banana]}";
D: echo "A banana is $fruits[banana]";
16.下面代码执行结果是?
<?php function change(){ static $i = 0; $i++; return $i; } print change(); print change(); ?>
正确答案:1,2
17.
<?php $foo = 'test'; $bar = <<<EOT $foo bar EOT; echo $bar; ?>
上面语句输出的结果是?
A: $foo bar;
B: 'EOT' $foo bar EOT
C: test bar
D: 'EOT' test bar EOT
18.
$a = 3; $b = 4; if($a || $b = 5){ echo 'tudou'; }
$b的值是?
A: 4;
B: 5
C: 3;
D: false;
19.下面那个表达式不能将两个字符串$s1和$s2串联成一个单独的字符串?
A: $s1+$s2
B: "{$s1}{$s2}"
C: $s1.$s2
D: implode(",array($s1,$s2))
E: 以上方法都能实现
20.下面的脚本运行以后,$array数组所包含的值是什么?
<?php $array = array('1','1'); foreach($array as $k => $v){ $v = 2; } ?>
A: array('2','2')
B: array('1','1')
C: array(2,2)
D: array(Null,Null)
21.cron后台常驻程序(daemon)用于?
A: 负责文件在网络中共享
B: 管理打印子系统Manages theprinting subsystem
C: 跟踪管理系统信息和错误
D: 管理系统日常任务的调度(scheduing)
22.怎么了解您在当前的目录下还有多大空间?
A: Use df
B: Use du /
C: Use du .
D: Use df .
23.有一个备份程序mybackup,需要在周一至周五下午一点和晚上八点各运行次,下面那一条crontab的项可以完成工作?
A: 0 13,20 * * 1,5 mybackup
B: 0 13,20 * * 1,2,3,4,5 mybackup
C: *13,20 * * 1,2,3,4,5, mybackup
D: 0 13,20 1,5 * * mybackup
24.下面那条命令可以吧f1.txt复制为f2.txt ?
A: cp f1.txt f2.txt
B: cat f1.txt|f2.txt
C: cat f1.txt||f2.txt
D: copy f1.txt|f2.txt
25.使用命令可以查看linux的启动信息?
A: mesg -d
B: dmesg
C: cat /etc/mesg
D: cat /var/mesg
26.在vi 中退出不保存的命令是?
A: :qt
B: :r
C: :wq
D: :q!
27.下面那个选项没有将john添加到users数组中?
A: $users[] = 'john';
B: array_add($users,'john');
C: array_push($users,'john');
D: $users ||= 'john';[a,c]
28.下列不属于Javascript语法关键字/保留字的是?
A: var
B: $
C: functiom
D: while
29.下列不属于JavaScript DOM事件的是?
A: onclick
B: onkeydown
C: onbodyload
D: onmouseover
30.下列PHP函数中不能直接在页面上输出字符串的函数是?
A: echo
B: sprintf
C: printf
31.在PHP中,'+'操作符的功能不包括
A: 字符串连接
B: 数组数据合并
C: 变量数据相加
32.用php获取当前时间并打印,打印格式为2006-5-10 22:21:21
echo date('Y-n-m H:i:s');
33,字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?
字符串转数组函数:
str_split()
explode()
数组转字符串
join()
implode()
字符串截取
substr()
mb_substr()
字符串替换
str_replace()
preg_replace()
字符串查找
preg_match()
preg_match_all()
strops()
strrops()
34.解释一下php类中pretect,public,private,interface,abstract,final,static的含义
pretect:受保护的
public:公有的
private:私有的
interface:接口
abstract:抽象类或者抽象方法
final:最终版本的类或者方法
static:静态属性或者方法
35.如何把字符串'08/26/2004'替换成'2004-08-26'?
$date = '08/26/2004'; echo preg_replace('/(\d+)\/(\d+)\/(\d+)/',$3-$1-$2,$date);
36.从表login中选出name字段包含admin的前10条结果所有信息的sql语句
select * from login where name '%admin%' limit 10;
37.解释左连接,右连接,内连接,索引:
左连接: left join on
左连接是以左边的表为主表,先输出左边表的所有数据,右边匹配输出,不匹配的为null
右连接:right join on
右连接是以右边的表为主表,先输出右边表的所有数据,左边匹配输出,不匹配的为null
内连接:inner join on
内连接必须同时符合条件的内容才会输出,相等于普通的多表查询
38.写一个函数。尽可能高效的。从一个标准的url里取出文件的扩展名,已知url如下: $url = 'http://www.baidu.com/web/index.php?id=4&name=lisi';
$arr = parse_url($url); $arr2 = path_info($arr['path']); $ext = $arr2['extension'];
39.解决网站服务器大流量高并发的问题:
把apache服务器(3000)换成nginx服务器(30000)
修改Apache或者nginx的默认配置,把其中的并发数调到最高
多增加几台服务器同时对用户提供服务(负载均衡技术)
减少客户在服务器上的链接时间断开时间
php代码的优化
数据缓存(文件缓存,或者内存缓存redis,memcache等)
40.如何设计或者配置mysql ,才能达到高效的目的
服务器优化:max_connections = 1500 并发链接数调到最大
wait_timeout = 10 链接关闭时间
表优化:字段索引:主键索引,唯一索引,普通索引
负载均衡(mysql主从复制)
41.如何进行防sql注入
表单尽量使用post提交
使用HTTP_REFERER检查源文件
开启addslashes在特殊符号前加\
使用htmlspecialchars对字符进行转义
42.防止盗链
使用HTTP_REFERER检查源文件
43.用PHP写出一个安全的用户登录系统需要注意哪些方面?
表单使用post提交
限制错误登录次数
使用验证码防止机器破解
同时做前后端表单验证
44.使用过哪些版本控制工具?
svn
git
45.什么是面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利用提高程序的重用性,使程序结构更加清晰
主要特征:封装,继承,多态
46.HTTP状态中302,403,500代码的含义:
302重定向,403服务器拒绝访问,500服务器内部错误
47.linux下建立压缩包,解压缩包的命令是?
tar czf test.tar.gz test.php
tar xzf test.tar.gz
48.myisam和innodb的基本区别:
在增删改查方面,myisam要优于innodb表引擎,当数据量特别大时,他们的速度相差不大,
innodb支持事务,存储过程,行锁等等
49.isset()和empty()的区别:
isset 是判断变量是否存在,是否定义
empty 是判断变量是是否为空
50.如何在页面之间传递变量(至少两种)
get,post,ajax,curl,cookie,session
51.写出匹配url的正则表达式:
$url = "wwww.baidu.com"; preg_match('/^(\w+\.)?\w+\.\w+$/',$url);
52.请写出常见的排序算法,并用PHP实现冒泡排序,将数组$a = array()按照从小到大的方式进行排序:
冒泡排序,快速排序
function mysort($arr){ for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-$i-1;$j++){ if($arr[$i]>$arr[$j+1]){ $x = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $x; } } } return $arr }
53.在数据库test中的一个表student,字段是name,class,score,分别代表姓名,所在班级,分数
查出每个班级中的学生,按照成绩降序排序
select * from student order by class asc,score desc;
查出每个班的及格人数和不及格人数,格式为:class,及格人数,不及格人数
select class,sum(if(score>=60,1,0)) jige,sum(if(score<60,1,0)) bujige from student group by class;
54.请写出你认为语言中的高级函数
array_filter()
array_map()
array_multisort()
array_count_values()
array_splice()
htmlspecialchars()
55.表结构入下
名称 | 类型 |
uid | int |
name | varchar |
age | tinyint |
需求:
增加一个字段性别sex,写出修改语句
alter table user add sex varchar(10) not null default '男';
查询出年龄介于20到30岁之间的用户
select uid,name,age from user where age>20 && age<30;
如果提个web频繁的访问查询,上题的查询如何优化?
给age字段添加索引
create index in_age on user(age);
56.web开发的遇到的问题有哪些?
功能需求分析
数据库设计
sql语句的优化
前端编写js特效
57.求两个日期的差数,例如:2007-2-5~2007-3-6的日期差数
$s = strtotime('2007-3-6') - strtotime('2007-2-5');//秒差 echo $s/86400;//相差天数
58.写出如下程序运行结果
<?php $test = 'hello'; $abc = &$test; unset($test); echo $abc; ?>
正确答案:hello
59.在空表news中,字段id为自增主键,批量插入17条记录后,发现最后三条数据有误,删除此三条数据后重启mysql数据库,再重新插入三条记录,请问最后一条记录值的id是多少?
myisam 引擎 18
innodb 引擎 20
60.至少写出一种验证139开头的11位手机号码的正则表达式:
$str = "13911111111"; preg_match('/^139\d{8}$/',$str);
61.请写出一个函数,实现如下功能:
字符串"open_door" 转换为 "OpenDoor","make_id"转换为"MakeId"
<?php $str = "make_hello"; $arr = explode('_',$str); $str2 = ''; foreach($arr as $val){ $str2.=ucfirst($val); } echo $str2; ?>
62.请写一个函数将1234567890转成1,234,567,890,每3位用逗号隔开的形式
<?php $str = "1234567890"; $str2 = strrev($str);//翻转字符串 $arr = str_split($str2,3); $str3 = join(',',$arr); $str4 = strrev($str3); echo $str4; //还有一个函数直接能搞定: $str = "1234567890"; echo number_format($str); ?>
63.有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条sql语句,将B中的age>50的记录的c1,c2更新到A表中统一记录中的c1,c2字段中:
update A,B set A.c1 = B.c1,A.c2 = B.c2 where A.id = B.id and B.age>50;
64.如何实现每天的0点钟重启linux服务器?
crontab -e
00 00 * * * /sbin/init 6
65.当前目录下有一个文件showdown.sh,如何修改文件,将其指定为使用/bin/bash运行,如何修改其权限为所有用户可读写,所有用户可执行?
vim showdown.sh #!/bin/bash chmod 777 showdown.sh
66.当前目录下有一个文件为showdown.sh,如何修改其所有人为root
chown root showdown.sh chown root:root showdown.sh//修改所有人为root,并且修改所属组为root
67.请用用php程序,编写读取www.baidu.com 的首页的内容,并将其存入字符串$str中
68.请用php将上题中读取出来的网页内容的<title>标签的值解析出来
preg_match('/<title>(.*)<\/title>/',$str,$arr);
69.通过php函数的方式对目录进行遍历,写出程序:
<?php function delDir($dir){ $files = scandir($dir); foreach($files as $file){ if($file!='.' && $file!='..'){ $path = $dir.'/'.$file; if(is_dir($path)){ delDir($path); }else{ unlink($path); } } } rmdir($dir); } ?>
70.什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?
数据库索引是给数据库中的每张表建立索引,便于提高查询检索效率
主键索引是给每张表的主键设置索引
唯一索引是给每张表的唯一值字段设置索引
索引的缺点是建立索引需要增加存储空间,空间利用率低,并且当数据发生变化时改索引资源消耗比较大
71.通过js 实现前进和后退操作:
<a href="javascript:Window.history.go(1)">前进</a> <a href="javascript:Window.history.go(-1)">后退</a>
72.写出程序运行结果:
<?php $a = 0; $b = 0; if($a=3 || $b = 3){ $a++; $b++; } echo $a.",".$b; ?>
正确答案是:1,1
<?php $a = 0; $b = 0; if($a = 4 | $b = 3){ $a++; $b++; } echo $a.",".$b; ?> 正确答案是:8,4(未或运算)
73.写出下列代码的输出结果?
<?php function myfunc($argument){ echo $argument+10; } $variable = 10; echo "myfunc($variable)=".myfunc($variable); ?>
正确答案是:10myfunc(10)=;
74.请用尽可能少的语句实现对输出email地址进行验证功能:
$email = "test@qq.com"; preg_match('/^\w+@\w+\.\w+$/',$email,$arr);
75.如何判断sql语句的运行效率,如何优化一个查询sql
desc select * from table; explain select * from table; 给查询条件增加索引
76.apache默认使用的是进程管理还是线程管理?
apache默认使用的是进程管理
77.实现中文字符串截取无乱码的方法是?
mb_substr();
78.用php写出显示客户端ip和服务端的ip代码:
$_SERVER['REMOTE_ADDR']
$_SERVER['SERVER_ADDR']
79.在http1.0中,状态码为401的含义是?如果返回"找不到文件"的提示,则用header函数,其语句为?
401代表未被授权
header("HTTP/1.0 404 Not Found");
80.在php中error_reporting这个函数的作用是?
设置错误级别与错误信息回报
81.简述如何得到当前执行脚本路径,包括所得到的参数?
$_SERVER['REQUEST_URI'];
82.mysql_fetch_row和mysql_fetch_array之间的区别?
mysql_fetch_row获取一个索引数组
mysql_fetch_assoc获取一个关联数组
83.下面程序会输出什么?
<?php $num = 10; function multiply(){ $num = $num*10; } multiply(); echo $num; ?> 正确答案是:10
84.写出下面程序的输出结果?
<?php $b = 201; $c = 40; $a = $b>$c:4:5; echo $a; ?> 正确答案是:4
85.$a = 'abcdef';请取出$a的值并打印第一个字母:
echo $a{0};
86.请写出php5的权限修饰符
public 公有的
private 私有的
protected 受保护的
87.ftp://pub.foo.bar.com:2121/incoming/rls.sfv请给出这个url的各部分的含义
ftp:// 是协议
pub.foo.bar.com 是域名
2121 是端口
/incoming/ 是目录
rls.sfv 是文件
88.服务器常用端口?
80 http协议
21 ftp协议
22 ssh协议
53 dns协议
443 https协议
89.请写出5条linux命令
ls
cd
pwd
mkdir
rmdir
90.请列出5个常用的php操作mysql函数:
mysql_connect()
mysql_query();
mysql_select_db()
mysql_fetch_assoc()
mysql_fetch_row
91.有两张数据表,表user(id,name)记录了用户的id和昵称,表article(id,uid,title,content,time)记录了用户发表的文章标题,内容和时间,写一个sql语句打印出每个用户的昵称及其发表的文章总数?
select user.name,count(*) from user left join article on user.id = article.id group by user.id;
92.把左连接中产生的null替换成"0":
select user.name,count(article.uid) from user left join article on user.id = article.uid group by user.id;
93.请写出3个php中预定义全局变量
__LINE__
__FILE__
__FOUCTION__
94.请写出下列代码的执行结果
<?php $var1 = 5; $var2 = 10; function foo(&$my_var){ global $var1; $var1 +=2; $var2 = 4; $my_var +=3; return $var2; } $my_var = 5; echo foo($my_var);//4 echo $my_var;//8 echo var1;//7 echo $var2;//10 $bar = 'foo'; $my_var = 10; echo $bar($my_var);//4 ?>
95.输出用户的ip地址,并判断用户的IP地址是否在192.168.1.100-----192.168.1.150之间
$sip = ip2long('192.168.1.100'); $eip = ip2long('192.168.1.150'); $getip = ip2long('192.168.1.120'); if($getip>=$sip and $getip<=$eip){ echo 'yes'; }else{ echo 'no'; }
96.将二维数组按照name的长度进行重新排序,按照顺序将id赋值(从1开始),二维数组如下:
$arr = array( array('id'=>0,'name'=>'123833'), array('id'=>0,'name'=>'aaa'), array('id'=>0,'name'=>'dfsdfsdfsdfs'), array('id'=>0,'name'=>'12245'), array('id'=>0,'name'=>'122lll') ); 实现代码如下: foreach($arr as $val){ $arr2[] = strlen($val['name']); } array_multisort($arr2,$arr); foreach($arr as &$val2){ $val2['id'] = ++$i; } print_r($arr);
97.实现不用第三个变量交换,$a,$b的值,$a,$b的初始值自己定:
$a = "linux"; $b = "php"; $b = array($a,$b); $a = $b[1]; $b = $b[0]; echo $a;
98.用php打印前一天的日期格式为:2006-5-10 22:22:21:
date('Y-n-d H:i:s' ,strtotime('-1 day'));
99.下面程序输出什么?
<?php $int_a = 5; function factorial(){ for($int_i=$int_a;$int_i>0;$int_i--){ $int_a = $int_a * $int_i; } } factorial(); echo $int_a; ?> 正确答案是:5
100.在项目开发中,需要上传超过8M的文件时,请说明php.ini需要修改的配置项
upload_max_filesize = 8
post_max_size = 9一定要大于等于上面的那个
101.php代码如下
<?php $data = array('a','b','c'); foreach($data as $key => $val){ $val = &$data[$key]; } ?>
问题1:程序执行时,每一次循环结束后变量$data的值是什么?请解释
第一次:
$data = array('a','b','c');
第二次:
$data = array('b','b','c');
第三次:
$data = array('b','c','c');
问题2:程序执行完成后,变量$data的值是什么?请解释
$data = array('b','c','c');