php笔试题2
php笔试题2
2011年04月24日
说在前面:
1、以下题目,除了编程任务外其他都需要写在给你提供的草纸上。纸张是珍贵的地球资源,请节约使用。编程任务在有相应的环境时,会要求上机书写,实在没有条件,就只能写在草纸上了。
2、时间:
基础任务+进阶任务+设计任务 = 90分钟
编程任务 = 60分钟
基础任务:
1、请列举你能想到的unix信号,并说明信号用途。
2、请列举、你能想到的所有的字符串查找算法,并加注释简单说明。
3、有一个ip地址(192.168.0.1),请写出其32位无符号整数形式。
4、写出、你能想到的所有http返回状态值,并说明用途(比如:返回404表示找不到页面)
基础任务-选作(会得到额外分数):
1、画几个你最熟悉的server端模型出来(格式不重要,尽量将图画清楚,说明思路即可)
进阶任务:
1、php的垃圾收集机制是怎样的?
说明:
1)如果,你熟悉php源码,那么请从源码入手,回答些问题,会获得额外加分
2)如果,你不熟悉php源码,那么尽你所能,多写点东西,包括利用自己的编程直觉得到的信息,都可以。
3)对,则有分,错误不扣,不写无分。
2、请写出http头,并符合以下要求:
1)这是一个post请求
2)目标:http://www.example.com:8080/test
3)post变量:
username: test
pwd: test2
intro: hello world!
4)包含以下cookie信息:
cur_query: you&me
说明:
1)如果,你记不得某个http协议中的指令字了,那么,无奈这举是用汉字代替。
2)如果,你能记住更多的http协议指令字,那么多写几句,总是没坏处,对吧?
3)最关键的,只需要画出正确的轮廓(还记得httpwatch等工具打印出来的头部吗?那就是轮廓的含义),也会有分数,但如果,连轮廓都写错了,那么就很遗憾了。
设计任务:
1、最近总有人骚扰我们的投票模块,需要你来设计一个投票限制的东东
要求如下:
1)要求每个qq号码(假设此qq号码在unit32内可以表示)10分钟这内只能投5票。
2)我们的用户很踊跃,平均每天要有2000万人左右通过此程序投票。
说明:
1)无需写代码,只需要图跟文字即可。
2)对于关键逻辑,请用图加代码表示出来,这也是对你文字表达能力的一个考验。
3)对你能想到的所有的边界条件列出来,这是对你逻辑思维全面与敏捷性的考验。
4)存储部分,尽你所能吧。如果,你需要一个自己设计的存储层,那么把这个存储层的实现,用文字+图片方式描述清楚,要是设计合理,你会获得华丽的奖分。
编程任务:
1、我们碰到了*烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧。
要求如下:
1)/myworks/example/bbe.txt,98版本英文圣经一本
2)输入部分要求如下:php ./example.php [单词]
3)输出部分如下:[单词] 1,2 2,4 5,6 表示:此单词在1行2列(第二个单词),2行4列...
说明:
1)此文本4mb之巨...
2)单词的含义:由英文字母(大小写),数字(0-9)组成的串
3)提供给你的机器os为ubuntu 9.10,内存只有1g,而且,很不幸的,其中700m用来做了别的
4)上机考试不允许上网,但我装了man文档以及读取chm以及pdf的阅读器,在电脑的桌面的chm文件夹中,有相应的php参考手册
5)算法复杂度要求不能大于o(n^2)(就是n的平方)
6)什么?php低效且用起来不顺手,好的,你可以用别的语言来实现。但注意:提供给你的机器上只有python 2.4/perl 5.8/gcc[g++] 4.1
=============
1.在php中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的url记录在预定义变量(2)中。
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;
}
}