PHP笔试题及答案
“陈小生”通过精心收集,向本站投稿了12篇PHP笔试题及答案,下面是小编帮大家整理后的PHP笔试题及答案,欢迎阅读,希望大家能够喜欢。
篇1:PHP笔试题及答案
PHP笔试题及答案
1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前一页面URL记录在预定义变量(2)中
//本页地址,SCRIPT_NAME也可以:php/test.php
echo $_SERVER['PHP_SELF'].“
“;
//链接到当前页面的前一页面的 URL 地址:
echo $_SERVER['HTTP_REFERER'].”
“;
//其它的见参考手册:语言参考》变量》预定义变量
//前执行脚本的绝对路径名:D:Inetpubwwwrootphp est.php
echo $_SERVER[”SCRIPT_FILENAME“].”
“;
//正在浏览当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER[”REMOTE_ADDR“].”
“;
//查询(query)的字符串(URL 中第一个问号 ? 之后的内容):id=1&bi=2
echo $_SERVER[”QUERY_STRING“].”
“;
//当前运行脚本所在的文档根目录:d:inetpubwwwroot
echo $_SERVER[”DOCUMENT_ROOT“].”
“;
?>
2.执行程序段将输出__,
//参考手册》语言参考》运算符》算术运算符》%为取模运算,输出0
echo 8%(-2).”
“;
//取模 $a % $b 在 $a 为负值时的结果也是负值。输出-2
echo ((-8)%3).”
“;
//输出2
echo (8%(-3)).”
“;
?>
3.在HTTP 1.0中,状态码 401 的`含义是____;如果返回“找不到文件”的提示,则可用 header 函数,其语句为____。
答:401表示未授权;header(“HTTP/1.0 404 Not Found”);[见参考手册》函数参考》HTTP函数》header]
4.数组函数 arsort 的作用是____;语句 error_reporting(2047)的作用是____,
答:arsort:对数组进行逆向排序并保持索引关系 error_reporting(2047)的作用是:report All errors and warnings
5.写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):
$script=“以下内容不显示:”;
echo preg_replace(“/].*?>.*?/si”, “替换内容”, $script);
?>
6.以Apache模块的方式安装PHP,在文件http.conf中首先要用语句____动态装载PHP模块,
然后再用语句____使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
答:LoadModule php5_module “c:/php/php5apache2.dll”;AddType application/x-httpd-php .php
见参考手册》目录》II. 安装与配置》6. Windows 系统下的安装》Microsoft Windows 下的 Apache 2.0.x
7.语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是____;为了避免多次包含同一文件,可以用语句____来代替它们。
答:在如何处理失败时,include 产生一个警告而 require() 则导致一个致命错误;require_once()/include_once()
8.一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on.
答:allow_call_time_pass_reference boolean :是否启用在函数调用时强制参数被按照引用传递, 见参考手册》附录G
9.SQL 中LEFT JOIN的含义是__,如果 tbl_user记录了学生的姓名(name)和学号(ID),
tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句____.
答:自然左外连接
create database phpinterview;
use phpinterview
create table tbl_user
(
ID int not null,
name varchar(50) not null,
primary key (ID)
篇2:PHP经典笔试题
PHP经典笔试题
1 请说明 PHP 中传值与传引用的区别,什么时候传值什么时候传引用?
答: 传值只是把某一个变量的.值传给了另一个变量,而引用则说明两者指向了同一个地方。
2 在PHP中error_reporting这个函数有什么作用?
答: The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.
3 请用正则表达式(Regular Expression)写一个函数验证电子邮件的格式是否正确。
答:
php
if(isset($_POST['action']) &&
$_POST['action']==’submitted’)
{
$email=$_POST['email'];
if(!preg_match(“/^(?:w+.?)*w+@(?:w+.?)*w+$/”,$email))
{
echo
“电子邮件检测失败”;
}
else
{
echo
“电子邮件检测成功”;
}
}
else
{
?>
篇3:经典PHP笔试题
经典PHP笔试题
1.考虑如下脚本。标记处应该添加什么代码才能让脚本输出字符串php?
$alpha = 'abcdefghijklmnopqrstuvwxyz';
$letters = array(15, 7, 15);
foreach($letters as $val)
{/* 这里应该加入什么 */
}?>
A.echo chr($val);
B.echo asc($val);
C.echo substr($alpha, $val, 2);
D.echo $alpha{$val};
E.echo $alpha{$val+1}
答案解析:substr 函数能够胜任,但考虑到输出三个字母就需要三次调用该函数,所以排除此方法。那么$alpha{$val}和$alpha{$val+1}是仅有的两个可能输出题目要求的字符串的选项。因为 0 是数
组的第一个索引,所以答案是 D。
2. 以下哪一项不能把字符串$s1 和$s2 组成一个字符串?
A.$s1 + $s2
B.”{$s1}{$s2}”
C.$s1.$s2
D.implode(”, array($s1,$s2))
E.以上都可以
答案解析:除 A 以外的选项都能输出题目要求的字符串。PHP中,加号+不能把两个字符串合并成一个。
3. 变 量 $email 的 值 是 字 符 串 user@example.com , 以 下 哪 项 能 把 字 符 串 转 化 成example.com?
A.substr($email, strpos($email, “@”));
B.strstr($email, “@”);
C.strchr($email, “@”);
D.substr($email, strpos($email, “@”)+1);
E.strrpos($email, “@”);
答案解析:substr 函数返回字符串的一部分,而 strpos 函数擅长从一个字符串中找出某个指定的子串。同时使用这两个函数将满足题目要求。注意,前一个函数从 0 开始索引,而后者不是,因此需
要+1。答案是 D。
4. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就把每个独立的值放入一个新创建的数组?
A.strstr
B.不可能只调用一次就完成
C.extract()
D.explode()
E.strtok()
答案解析:答案是 D。explode 函数使用一个字符串分隔另一个字符串,并把结果放入一个新建的数组。strtok 函数也可以做同样的事,但需要多次调用。
5. 要比较两个字符串,以下那种方法最万能?
A.用 strpos 函数
B.用==操作符
C.用 strcasecmp()
D.用 strcmp()
答案解析:答案是 D。strcmp()提供了安全的字符串比较机制。注意,选项 C 是错的,strcasecmp()不是一个“万能”函数,因为它不区分大小写。
6. 以下哪个 PCRE 正则表达式能匹配字符串 php|architect?
A..*
B.…|………
C.\d{3}\|\d{8}
D.[az]{3}\|[az]{9}
E.[a-z][a-z][a-z]\|\w{9}
答案解析:选项中没有一个正则表达式能真正代表题目所给字符串的匹配方式,但是选项 A 和 E仍然能勉强匹配。选项 A 太普通了,它能够匹配任何字符串,因此答案是 E。
7. 以下哪些函数能用来验证字符串的完整性?(三选)
A.md5()
B.sha1()
C.str_rot13()
D.crypt()
E.crc32()
答案解析:正确答案是 A,B 和 E。用 crypt()和 str_rot13()来验证一个字符串是否被改变,效率很低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。
8. 哪个 PHP 函数与以下脚本在 UNIX 系统下执行的效果近似?
function my_funct ($filename)
{
$f = file_get_contents ($filename);
return explode (“\n”, $f);
}
?>
A.fopen()
B.fread()
C.flock()
D.split_string()
E.file()
答案解析:正确答案是 A,B 和 E。用 crypt()和 str_rot13()来验证一个字符串是否被改变,效率很低。crc32()比前面两个函数好些,如果能容忍一些小错误的话,它是个不错的选择。
9. 基于指定的式样(pattern)把一个字符串分隔开并放入数组,以下哪些函数能做到?(双
选)
A.preg_split()
B.ereg()
C.str_split()
D.explode()
E.chop()
答案解析:尽管条件不同,但 preg_split 和 explode 函数都能满足题目要求。ereg()拿一个正则表达式匹配一个字符串;str_split()按固定长度分隔字符串;而 chop()则是 rtrim()别名,用来移除
字符串末尾处的`空格。
10.以下脚本输出什么?
echo 'Testing ' . 1 + 2 . '45';
?>
A.Testing 1245
B.Testing 345
C.Testing 1+245
D.245
E.什么都没有
答案解析:本题考察你对字符串操作及操作符优先级的认识,
连接运算符(.)的优先级比加号(+)高。因此 PHP 解释器实际执行的运算可以表示为(‘Testing’ . 1) + (2 . ‘45’)。由于字符串
test 1 不是数字,所以加号前面的运算等于 0。加号后面的运算等于 245,PHP 输出的结果是 0+245,等于 245,所以答案是 D。
11.以下脚本输出什么?
$s = '12345';
$s[$s[1]] = '2';
echo $s;
?>
A.12345
B.12245
C.22345
D.11345
E.Array
答案解析:可以用访问数组元素的方式访问字符串中的字符,因此脚本只是把字符串中的第二个字符($s[1])替换成了字符 2,最终将输出 12245。答案是 B。
12.方框中的正则表达式能与以下哪些选项匹配?(双选)
/.*\*123\d/
A.******123
B.*****_1234
C.******1234
D._*1234
E._*123
答案解析:本题的要点是理解这个正则表达式的含义——从左往右,首先是零个或多个任意字符(.*),跟着是一个星号(\*),然后是 123,最后是一个数字。因此答案是 C 和 D。
13.以下哪个比较将返回 true?(双选)
A.‘1top’ == ‘1’
B.‘top’ == 0
C.‘top’ === 0
D.‘a’ == a
E.123 == ‘123’
答案解析:B 和 E 正确。选项 B 中,在比较时,字符串 top 等同于数字 0。==操作符不比对数据类型,所以将返回 true。答案 E 中,字符串 123 等同于数字 123,比较将返回 true。
14.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样?
A.解释器输出一个类型错误
B.字符串将被转换成数字,再与整型数字相加
C.字符串将被丢弃,只保留整型数字
D.字符串和整型数字将连接成一个新字符串
E.整形数字将被丢弃,而保留字符串
答案解析:字符串将被转换成数字(如果无法发生转换就是 0),然后与整型数字相加。答案是 B。
15.考虑如下脚本。假设 www.php.net 能被访问,脚本将输出什么?
$s = file_get_contents (“www.php.net”);
strip_tags ($s, array ('p'));
echo count ($s);
?>
A.www.php.net 的主页的字符数
B.剔除标签后的 www.php.net 主页的字符数
C.1
D.0
E.剔除以外的标签后的 www.php.net 主页的字符数
答案解析:代码的本意是剔除 www.php.net 主页上除了 p 以外的的所有 HTML 标签。可实际上,在代码的最后一行使用了 count 函数,它统计变量中的元素数量,而不是字符串中的字符数。由于字符
串是标量,对字符串使用 count 函数将永远返回 1。答案是 C。
16.哪个函数能不区分大小写得对两个字符串进行二进制比对?
A.strcmp()
B.stricmp()
C.strcasecmp()
D.stristr()
E.以上都不能
答案解析:题目其实就是在描述 strcasecmp 函数的作用,因此答案是 C。
17.以下哪些函数能把字符串里存储的二进制数据转化成十六进制?(双选)
A.encode_hex()
B.pack()
C.hex2bin()
D.bin2hex()
E.printf()
答案解析:正确答案是 B 和 D。pack 函数能对二进制数据进行复杂的格式化,包括将字符串中的字符转化成十六进制表示。bin2hex 函数也有同样的转化功能。注意,printf()能将整数转化成十六进
制数,但无法转化字符串。
18.哪个函数能用来确保一个字符串的字符数总是大于一个指定值?
答案解析:这是在说 str_pad 函数,它可以把字符串填充到指定长度。
19.以下脚本输出什么?
echo wordwrap ($a, 1, “c”, false);
?>
答案解析:脚本将输出 ablecostscindy。wordwrap 函数通常用来把字符串切割成指定长度。然而在本题中,长度被设置为 1,因此函数将从空格处切割(第四个参数被设置为 false,因此函数不会从
单词的中间进行切割)。填充字符串是 c,等于把每个空格都换成了 c。
20.以下脚本输出什么?
echo substr_replace ($x, 'x', 1, 2);
?>
A.x
B.axle
C.axxle
D.applex
E.xapple
答案解析:脚本将输出 ablecostscindy。wordwrap 函数通常用来把字符串切割成指定长度。然而在本题中,长度被设置为 1,因此函数将从空格处切割(第四个参数被设置为 false,因此函数不会从
单词的中间进行切割)。填充字符串是 c,等于把每个空格都换成了 c。
篇4:PHP笔试题
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’;//true
echo empty($a2) ? ‘true’ : ‘false’;//true
echo empty($a3) ? ‘true’ : ‘false’;//true
echo empty($a4) ? ‘true’ : ‘false’;//true
echo empty($a5) ? ‘true’ : ‘false’;//true
echo empty($a6) ? ‘true’ : ‘false’;//false
echo empty($a7) ? ‘true’ : ‘false’;//true
echo empty($a8) ? ‘true’ : ‘false’;//false
?>
3. 写出如下程序的'输出结果
$test = ‘aaaaaa’;
$abc = & $test;
unset($test);
echo $abc;//’aaaaaa’
?>
4. 写出如下程序的输出结果
function get_count(){
static $count = 0;
return $count++;
}
echo $count; //5
++$count;
echo get_count();//0
echo get_count();//1
?>
5. 写出如下程序的输出结果
$GLOBALS['var1'] = 5;
$var2 = 1;
function get_value(){
global $var2;
$var1 = 0;
return $var2++;
}
get_value();
echo $var1; //0
echo $var2; //2
?>
6. 写出如下程序的输出结果
function get_arr($arr){
unset($arr[0]);
}
$arr1 = array(1, 2);
$arr2 = array(1, 2);
get_arr(&$arr1);
get_arr($arr2);
echo count($arr1);//1
echo count($arr2);//2
?>
篇5:php笔试题附带详细答案
php笔试题附带详细答案
1、用PHP打印出前一天的时间格式是-5-10 22:21:21
解:echo date(‘Y-n-d H:i:s’, strtotime(‘-1 day’));
原因:
format 字符说明返回值例子a小写的上午和下午值am 或 pmA大写的上午和下午值AM 或 PMd月份中的第几天,有前导零的 2 位数字01 到 31D星期中的第几天,文本表示,3 个字母Mon 到 SunF月份,完整的文本格式,例如 January 或者 MarchJanuary 到 Decemberg小时,12 小时格式,没有前导零1 到 12G小时,24 小时格式,没有前导零0 到 23h小时,12 小时格式,有前导零01 到 12H小时,24 小时格式,有前导零00 到 23i有前导零的分钟数00 到 59>I是否为夏令时如果是夏令时为 1,否则为 0j月份中的第几天,没有前导零1 到 31l(“L”的小写字母)星期几,完整的文本格式Sunday 到 SaturdayL是否为闰年如果是闰年为 1,否则为 0m数字表示的月份,有前导零01 到 12M三个字母缩写表示的月份Jan 到 Decn数字表示的月份,没有前导零1 到 12O与格林威治时间相差的小时数例如:+0200rRFC 822 格式的日期例如:Thu, 21 Dec 16:01:07 +0200s秒数,有前导零00 到 59>S每月天数后面的英文后缀,2 个字符st,nd,rd 或者 th,可以和 j 一起用。t给定月份所应有的天数28 到 31T本机所在的时区例如:EST,MDT(【译者注】在 Windows 下为完整文本格式,例如“Eastern Standard Time”,中文版会显示“中国标准时间”)。w星期中的第几天,数字表示0(表示星期天)到 6(表示星期六)WISO-8601 格式年份中的第几周,每周从星期一开始(PHP 4.1.0 新加的.)例如:42(当年的第 42 周)Y4 位数字完整表示的年份例如: 或 y2 位数字表示的年份例如:99 或 03z年份中的第几天0 到 366
2、能够使HTML和PHP分离开使用的模板
解:其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表
:www.sitepoint.com/forums/showthread.php?t=123769
3、使用哪些工具进行版本控制?
解:CVS 和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,呃,这个可能需要这么回答:CVS Server on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做服务端,TortoiseSVN做客户端,或者Subclipse做客户端.
4、如何实现字符串翻转?
解: 用strrev函数,不准用PHP内置的就自己写:
function strrev($str)
{
$len=strlen($str);
$newstr = “”;
for($i=$len;$i>=0;$i–)
{
$newstr .= $str{$i};
}
return $newstr;
}
5、优化MYSQL数据库的方法?
我的答案:
(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可以提高一个数量级的查询速度.
6、谈谈事务处理?
解:如同是个编程语言都会有答应Hello World的例子一样,是本数据库的教材都会讲A给B的账户转账50美元的例子,回答这个就好了.不过据我所知,用MySQL的企业,很少用MySQL来实现事务处理.何况现在Oracle收购了InnoDB的公司.
7、apache+mysql+php实现最大负载的方法
8、实现中文字串截取无乱码的方法,
解:mb_substr
9、echo(),print(),print_r()的区别
解:echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象
10、在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量什么中;而链接到当前页面的URL记录在预定义变量什么中。
解:echo $_SERVER['PHP_SELF']; echo $_SERVER[“HTTP_REFERER”];
11、执行程序段将输出??
解:0
12、在HTTP 1.0中,状态码 401 的含义是什么;如果返回“找不到文件”的提示,则可用 header 函数,其语句为什么。
解:未授权 header(“HTTP/1.0 404 Not Found”);
13、数组函数 arsort 的作用是(对数组进行逆向排序并保持索引关系);语句 error_reporting(2047)的作用是(All errors and warnings)。
14、PEAR中的数据库连接字符串格式是()?
15、写出一个正则表达式,过虑网页上的所有JS/VBS脚本(即把script标记及其内容都去掉):( /
16、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句(1)动态装载PHP模块,然后再用语句(2)使得Apache把所有扩展名为php的文件都作为PHP脚本处理。
解:(1) LoadModule php5_module “D:/xampp/apache/bin/php5apache2.dll” (2) AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .php5 .php4 .php3 .phtml
17、语句 include 和 require 都能把另外一个文件包含到当前文件中,它们的区别是什么;为了避免多次包含同一文件,可以用语句()来代替它们。
解:发生异常时include产生警告require产生致命错误 (13) require_once()/include_once()
18、类的属性可以序列化后保存到 session 中,从而以后可以恢复整个类,这要用到的函数是( serialize() /unserialize() )
19、一个函数的参数不能是对变量的引用,除非在php.ini中把(allow_call_time_pass_reference)设为on.
20、SQL 中LEFT JOIN的含义是(自然左外连接)。
如果 tbl_user记录了学生的姓名(name)和学号(ID),
tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),
要想打印出各个学生姓名及对应的的各科总成绩,则可以用SQL语句: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
21、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须(结束标识符所在的行不能包含任何其它字符除”;”)。
22、写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。
解
/** * 遍历目录,结果存入数组。支持php4及以上。php5以后可用scandir()函数代替while循环。 * @param string $dir * @return array */
function 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;
}
}
23、简述论坛中无限分类的实现原理。
24、设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示。
篇6:PHP程序员笔试题
PHP程序员笔试题
1、用php打印出前一天的时间格式是2006-5-10 22:21:21(2分)
echo date(“Y-m-d G:i:s”,strtotime(“-1 day”));
2、echo(),print(),print_r()的区别(3分)
echo()是一个php语句,所以没有返回值,能打印简单的数据,
print()是一个函数,有返回值,能打印简单的'数据。
print_r()是一个函数,能打印复杂的(mix)数据。
如:
'wangking','qq'=>'123456');print_r($arr);?>
运行结果:
hello word
the value is 1
Array ( [name] =>wangking [qq] =>123456 ) ......
3、能够使html和php分离开使用的模板(1分)
smarty模板
4、使用哪些工具进行版本控制?(1分)
TortoiseSVN
6、如何实现字符串翻转?(3分)
strrev(“Hello world!”);
篇7:PHP基础笔试题
,
在服务器配置文件中定义。
$_SERVER['HTTP_HOST ']
当前请求的 Host: 头部的内容
$_SERVER['REMOTE_ADDR']
正在浏览当前页面用户的 IP 地址
篇8:PHP笔试题含答案
PHP笔试题含答案
1、用PHP打印出前一天的时间,格式是-5-10 22:21:21
//echo date('Y-m-d H:i:s',time-60*60*24
echo date(“Y:m:d H:i:s”,strtotime(“-1 day”));
?>
2、echo(),print(),print_r()的区别
echo是语言结构,无返回值;print功能和echo基本相同,不同的是print是函数,有返回值;print_r是递归打印,用于输出数组对象
3、能够使HTML和PHP分离开使用的模板
so much,其实PHP本身就是一种模版引擎,我用过的是smarty,常见的还有PHPLib,FastTemplate,Savant这里有个模板引擎列表:www.sitepoint.com/forums/showthread.php?t=123769
4.如何实现PHP、JSP交互?
题目有点含糊不清,SOAP,XML_RPC,Socket function,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.如何实现字符串翻转?
其实PHP本身就有字符串翻转的函数:strrev(),不妨试试echo strrev($str);不过所有的这三种方法都不能解决中文字符串翻转的问题,会出错的,
function reverse($var)
{
$res=“”;
for($i=0,$j=strlen($var);$i<$j;$i++)
{
$res=$var[$i].$res;
}
return $res;
}
$tmpvar=“wofang”;
$res=reverse($tmpvar);
echo $res;
?>
7、优化MYSQL数据库的方法,
(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、谈谈事务处理
A给B的账户转账50美元的例子
篇9:几道PHP笔试题
几道PHP笔试题
1. 如何用php的环境变量得到一个网页地址的内容?ip地址又要怎样得到?
2. 求两个日期的差数,例如-2-5 ~ 2007-3-6 的'日期差数
3. 请写一个函数,实现以下功能:
字符串“open_door” 转换成 “OpenDoor”、”make_by_id” 转换成 ”MakeById”,
4. 要求写一段程序,实现以下数组$arr1转换成数组$arr2:
$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′ )
)
);
5. 请简述数据库设计的范式及应用,
一般第3范式就足以,用于表结构的优化,这样做既可以避免应用程序过于复杂同时也避免了SQL语句过于庞大所造成系统效率低下。
6.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数,用SQL语句及视图、存储过程分别实现。
DELIMITER //
CREATE PROCEDURE ProcGet
(
IN ID_a INT(11)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
SELECT COUNT(*) AS Sum FROM News Where ID = ID_a;
END;//
CALL ProcGet(88)//
7 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
DELIMITER //
CREATE PROCEDURE ProcOut()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN END;
DECLARE Sum_a INT(11);
DECLARE Sum_b INT(11);
DECLARE Sum_c INT(11);
– 获取A列中的总值 <–
DECLARE cur_1 CURSOR FOR SELECT SUM(A) FROM table_name;
OPEN cur_1;
FETCH cur_ 1 INTO Sum_a;
CLOSE cur_1;
– 获取B列中的总值 <–
DECLARE cur_2 CURSOR FOR SELECT SUM(B) FROM table_name;
OPEN cur_2;
FETCH cur_ 2 INTO Sum_b;
CLOSE cur_2;
– 获取C列中的总值 <–
DECLARE cur_3 CURSOR FOR SELECT SUM(C) FROM table_name;
OPEN cur_3;
FETCH cur_ 3 INTO Sum_c;
CLOSE cur_3;
IF Sum_a >Sum_b THEN
SELECT A FROM table_name;
ELSEIF Sum_b >Sum_c THEN
SELECT B FROM table_name;
篇10:php练习笔试题
简答题
1. 写出5个以上你所知道的常用的Linux命令和它的功能
cat,显示文件内容。
cd,改变目录路径。
cp,复制文件。
find,查找文件。
grep,搜索、过滤信息。
ls,列出目录信息。
more,分页显示。
rm,删除文件或目录。
vi,调用vi文本编辑器。
who,显示登录用户信息。
2. HTTP/1.0 中,状态码 200 301 304 403 404 500的含义
200 - 服务器成功返回网页
301(永久移动)请求的网页已永久移动到新位置。
304(未修改)自从上次请求后,请求的网页未修改过
403(禁止)服务器拒绝请求
404 - 请求的网页不存在
503 - 服务器超时
3. 请写出以下html标签的含义:input form script style table b img
4. 写出PHP(或其他语言)的public、protected、private三种访问控制模式的区别?
属于OOP面向对象语言中的类中访问控制模式
Public可以外部访问
Protected,private只可以内部访问
Public,protected可以被继承
Private不可以被继承
5. 请描述 PHP(或其他语言) Session 的运行机制,大型网站中Session方面应注意什么?
运行机制:客户端将session id传递到服务器,服务器根据session id找到对应的文件,读取的时候对文件内容进行反序列化就得到session的值,保存的时候先序列化再写入
注意:1,session在大访问量网站上确实影响系统性能,影响性能的原因之一由文件系统设计造成,在同一个目录下超过10000个文件时,文件的定位将非常耗时,可以通过修改php.ini中session.save_path设置两级子目录 ,session将存储在两级子目录中,每个目录有16个子目录[0~f],不过好像PHP session不支持创建目录,你需要事先把那么些目录创建好 。
2,还有一个问题就是小文件的效率问题,可以通过存储方式中的memcache来解决I/O效率低下的问题
3,session同步问题,session同步有很多种,如果你是存储在memcached或者MySQL中,那就很容易了,指定到同样的位置即可,还有一种方法就是在负载均衡那一层保持会话,把访问者绑定在某个服务器上,他的所有访问都在那个服务器上就不需要session同步了
6. 简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面)
索引就相当于对指定的列进行排序,排序有利于对该列的查询,可以大大增加查询效率
建立索引也是要消耗系统资源,所以索引会降低写操作的效率
主键,唯一,联合都属于索引
主键属于唯一索引,且一个表只能有一个主键,主键列不允许空值
唯一索引可以一个表中可以有多个,而且允许为空,列中的值唯一
多个字段的多条件查询多使用联合索引
7. MySQL 数据库中 varchar和char的主要区别是什么,哪种查询效率更高,为什么?
varchar变长字符串,char定长字符串
Char效率更高,由于不需要对储存空间计算后在存储,所以效率更高
8. 解释MySQL外连接、内连接与自连接的区别
Mysql外连接分为左连接(left join....on)和右连接(right join.... on),左连接是以左表作为条件查询关联右表数据,无对应数据则补空,右连接则相反
Mysql内连接(inner join.....on)是做关联查询时,内连接的特性是只显示符合连接条件的记录
Mysql自连接:在FROM clause(子句)中我们可以给这个表取不同的别名, 然后在语句的其它需要使用到该别名的地方用dot(点)来连接该别名和字段名
9. 说说下面这些这些协议的全称和中文解释SMTP、POP3、HTTP、FTP、DNS
Smtp简单邮件协议
Pop3邮局协议
http超文本传输协议
ftp文件传送协议
Dns域名解析协议
10. javascript 包括那些基本数据类型?
数字,字符串,null,undefined,boolean
11. 用css、html编写一个两列布局的网页,右侧固定宽度200px,左侧自适应
右边固定200px宽度
左边自适应
项目设计
假设有一个包含Tag功能的博客系统,数据库存储采用mysql,用户数量为1000万,预计文章总数为10亿,每天有至少10万的更新量,每天访问量为5000万,对数据库的读写操作的比例超过10:1。
你如何设计该系统,以确保其系统高效,稳定的运行?
提示:可以从数据库设计,系统框架,及网络架构方面进行描述,可以写代码/伪代码辅助说明,可以自由发挥
读写分离,读写服务器比例10:1,使用分页查询减少数据库压力,静态化分页后使用memcache分布式缓存,减少i/o开销和数据压力,增删改时删除对应的静态化数据,通过查询分页,分开静态化对应的分页信息缓存,数据库分库分表分区,使用lvs负载均衡,活跃和不活跃的文章进行分表存储,提高数据库中文章查询
效率,建立联合索引,提高查询效率,使用中文分词技术提高文章内容的查询效率
编写程序(请任选两题)
1. 描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组
2. 假设有“123abc456def789”这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。
要求:
1 和标记不得计算在长度之内。
2 截取后的字符串,要保留原有标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。
示例:
题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长度8,应返回123abc45。
function newsubstr($str,$num){
$strNeed = preg_replace(array('/<\/\w+>/','/<\w+>/'),array('',','),$str);
$arr = explode(',',$strNeed);
$arrCount = array_map('strlen',$arr);
$newstr = '';
if($num < $arrCount[0]+$arrCount[1] && $num >= 0){
$newstr .= ($num<=$arrCount[0]) ? substr($arr[0],0,$num) : substr($arr[0],0,$arrCount[0]).substr($arr[1],0,$num-$arrCount[0]);
}else{
foreach($arr as $key=>$val){
if( $key>1 && $num < array_sum(array_slice($arrCount,0,$key+1)) && $num >= array_sum(array_slice($arrCount,0,$key))){
//echo $key;
$newstr .= $arr[0].“{$arr[1]}”;
for($i = 2;$i <= $key; $i++ ){
$newstr .= $i<$key ? ''.$arr[$i].'' : substr($arr[$key],0,$num-array_sum(array_slice($arrCount,0,$key+1)));
}
}
}
if($num >= array_sum($arrCount)){
$newstr = $str;
}
}
echo $newstr;
}
$str = ‘123abc456def789’;
newsubstr($str,8);
3. 一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
function monkeyKing($n, $m) { //$n为猴子总数,$m为剔除猴子步长
$s = 0; //$s为大王坐标,只有一只猴子时,大王坐标为0
for($i = 2; $i <= $n; $i++) { //依次向后递推,求到共有$n只猴子,剔除步长为$m时的大王坐标
$s = ($s + $m) % $i; //大王坐标递推公式
}
return $s;
}
echo monkeyKing(6, 2);
4. 翻转字符串中的单词,字符串仅包含大小写字母和空格,单词间使用空格分隔。
如:输入 “This is PHP”,输出 “PHP is This”
非必要请不要使用PHP自带函数
function myrev($str){
$arr = explode(' ',$str);
$num = count($arr);
for($i = 0; $i < $num/2; $i++){
$temp = $arr[$i];
$arr[$i] = $arr[$num-$i-1];
$arr[$num-$i-1] = $temp;
}
return implode(' ',$arr);
}
$str = 'This is PHP';
echo myrev($str);
篇11:笔试题PHP工程师
笔试题(PHP工程师)
1. 请对POSIX风格和兼容Perl风格两种正则表达式的主要函数进行类比说明
ereg preg_match
ereg_replace preg_replace
2. 请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响
3. PHP5中魔术方法函数有哪几个,请举例说明各自的用法
__sleep
__wakeup
__toString
__set_state
__construct,
__destruct
__call,
__get,
__set,
__isset,
__unset
__sleep,
__wakeup,
__toString,
__set_state,
__clone
__autoload
4. 请写出让,并说明如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?
5. PHP的垃圾收集机制是怎样的'
6.使对象可以像数组一样进行foreach循环,要求属性必须是私有,
(Iterator模式的PHP5实现,写一类实现Iterator接口)
7.请写一段PHP代码,确保多个进程同时写入同一个文件成功
8. 用PHP实现一个双向队列
9. 使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的情况,如大小写不敏感,属性名值与等号间有空格等)。此处假设需提取test标签的attr属性值,请自行构建包含该标签的串
10.请使用socket相关函数(非curl)实现如下功能:构造一个post请求,发送到指定http server的指定端口的指定请求路径(如www.example.com:8080/test)。请求中包含以下变量:
用户名(username):温柔一刀
密码(pwd):&123=321&321=123&
个人简介(intro):Hello world!
且该http server需要以下cookie来进行简单的用户动作跟踪:
cur_query:you&me
last_tm:…(上次请求的unix时间戳,定为当前请求时间前10分钟)
cur_tm:…(当前请求的unix时间戳)
设置超时为10秒,发出请求后,将http server的响应内容输出。复制内容到剪贴板代码:Function encode($data, $sep = ‘&’){
while (list($k,$v) = each($data)) {
$encoded .= ($encoded ? “$sep” : “”);
$encoded .= rawurlencode($k).”=”.rawurlencode($v);
}
Return $encoded;
}
Function post($url, $post, $cookie){
$url = parse_url($url);
$post = encode($data, ‘&’);
$cookie = encode($cookieArray, ‘;’);
$fp = fsockopen($url['host'], $url['port'] ? $url['port'] : 80, $errno, $errstr, 10);
if (!$fp) return “Failed to open socket to $url[host]“;
fputs($fp, sprintf(“POST %s%s%s HTTP/1.0\n”, $url['path'], $url['query'] ? “?” : “”, $url['query']));
fputs($fp, “Host: $url[host]\n”);
fputs($fp, “Content-type: application/x-www-form-urlencoded\n”);
fputs($fp, “Content-length: ” . strlen($encoded) . “\n”);
fputs($fp, “Cookie: $cookie\n\n”);
fputs($fp, “Connection: close\n\n”);
fputs($fp, “$post \n”);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
$url = ‘www.example.com:8080/test’;
$encoded = username=温柔一刀& pwd=
$post = array(
‘username’=>‘温柔一刀’,
‘pwd =>‘&123=321&321=123&’,
‘intro =>‘Hello world!’
);
$cookie = array(
‘cur_query’ =>‘you&me,
‘last_tm’ =>time – 600,
‘cur_tm ‘=>time()
);
Post($url, $post, $cookie);
11.你用什么方法检查PHP脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库Query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?
1.脚本执行时间,启用xdebug,使用WinCacheGrind分析,
2.数据库查询,mysql使用EXPLAIN分析查询,启用slow query log记录慢查询。
PHP LAMP Engineer Test Paper
Question 1
What does print out?
A) 3
B) False
C) Null
D) 1
E) 0
篇12:PHP实习生笔试题
PHP实习生笔试题
笔试题:需要多少只小白鼠才能在24小时内找到毒药
有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒?
分析:
最容易想到的就是用1000只小白鼠,每只喝一瓶,但显然这不是最好答案。
既然每只小白鼠喝一瓶不是最好答案,那就应该每只小白鼠喝多瓶。那每只应该喝多少瓶呢?
首先让我们换种问法,如果有x只小白鼠,那么24小时内可以从多少瓶水中找出那瓶有毒的?
由于每只小白鼠都只有死或者活这两种结果,所以x只小白鼠最大可以表示2^x种结果。如果让每种结果都对应到某瓶水有毒,那么也就可以从2^x瓶水中找到有毒的.那瓶水。那如何来实现这种对应关系呢?
第一只小白鼠喝第1到2^(x-1)瓶,第二只小白鼠喝第1到第2^(x-2)和第2^(x-1)+1到第2^(x-1) + 2^(x-2)瓶….以此类推,
回到此题,总过1000瓶水,所以需要最少10只小白鼠。
笔试题:根据上排的数填写下排的数,并满足要求。
根据上排给出十个数,在其下排填出对应的十个数, 要求下排每个数都是上排对应位置的数在下排出现的次数。上排的数:0,1,2,3,4,5,6,7,8,9。
笔试题:判断数字是否出现在40亿个数中?
给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
分析:
unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。
【PHP笔试题及答案】相关文章:
6.笔试题
10.CPMP笔试题






文档为doc格式