PHP初级程序员能力测试部分参考答案2由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“php程序员测试题答案”。
PHP初级程序员能力测试参考答案[闭卷]
注:①本测试满分100分,80分及格,形式为闭卷,不得翻阅任何手册和参考书籍。本试卷使用的PHP版本为5.2.6+,WEB服务器使用APACHE2+,开发平台为WINDOWS xp+
②本测试时间为3小时,若题后标明不限语言平台,则你可以使用PHP,C/C++,JAVA等任意一门语言完成。
③出题人:陈小白。
1.已知三点A,B,C的坐标为A(20,20),B(15,40),C(50,30),三点构成一个三角形,求判断点D(30,18)是否在此三角形内。【本题主要考察基本算法,解答不限语言平台 5分】
连接AD,BD,CD,可以计算ABD+ACD+BCD的面积,如果三者之和等于ABC,那么点D在三角形内。海伦公式可以求三角形面积。S=SQRT(p*(p-a)*(p-b)*(p-c));p=1/2(a+b+c)也可以用向量叉积的办法来判断。也就是余弦公式的变形
ad×ab
代表矢量ad与ab的叉积,其坐标表达式为
ad×ab =(xd-xa)*(yb-ya)-(yd-ya)*(xb-xa)
于是判别过程如下:若三个叉积大于等于0,则则可判定d在△abc内(上)。原理是点在三角行内,必在每条边的同一侧
2.求1~50万以内的素数。【本题主要考察基本算法,解答不限语言平台 5分】
要点:首先从3开始,偶数一定不是素数,所以循环条件是i+2,而不是我们习惯了的i++
一旦能被从2~N/2间的任何一个数整除,则一定不是素数,跳出
还可以再加上一个筛子,把3,5,7,11,13,17,19的倍数踢出。
另外还有许多技巧,主要是减少循环次数,固定循环次数等方式。筛法求素数:
if($all[$i] == 0){
//echo $i,“n”;
for($j = $i;$j
$all[$j] = 1;
}
} } echo microtime(TRUE)-$t1;PHP生成的话,应控制在0.8秒内。C的话应该在20MS以内。(普通PC机 1G 内存,1.8GHZ)附加题:用PHP求出1亿以内的素数并保存在文件中;求出100亿以内的素数的大概个数。【+4分】 第一问需要用到glob函数以及JS定时刷新来完成,第二问的答案是434294481,涉及数论和密码学的知识。
//定义10亿,目前测试1000万
PHP初级程序员测试
$j=$i+4;
$sqrt = sqrt($j);
foreach($array as $value){
if($j%$value===0){
break;
}
if($value>$sqrt){
//写入串
$s.= $j.PHP_EOL;
break;
}
}
}
//将串写入文件
fwrite($fp,$s);}
fclose($fp);echo microtime(true)-$time;?> lim π(x)/(x/Ln x)=1
3.请问$_GET,$_POST,$_REQUEST变量的作用是什么?区别是什么?【考察点:php 的变量机制 本小步骤:3分】
$_GET,$_POST都用于从表单中取值,$_GET取到的值会显示在浏览器中,而$_POST不会,并且$_GET取值有大小限制(2K),所以同等要求下优先使用$_POST。$_REQUEST=$_GET+$_POST+$_COOKIE
已知现在有一个表单定义如下:
那么$_GET['na.me']和$_POST['na.me']的值是什么?为什么?【本小步骤:2分】
:得不到任何值。因为点是非法字符,将会自动转换为下划线。可用$_POST['na_me']访问。
然而某衰哥在某次测试中总是打印不出POST过来的值,问题可能出在什么地方?【本小步骤:1分】 :可能是PHP.INI文件里variables_order选项屏蔽了P
为了解决上面涉及的部分问题,我们需要了解PHP的变量机制。
在每个请求到来以后,apache处理到response阶段的时候,会将控制权交给PHP模块,PHP模块会在处理请求之前首先间接调用php_request_startup(具体调用序列是
send_php-> apache_php_module_main-> php_request_startup).通过这位衰哥的分析,在php_request_startup中,找到了初始化请求相关的变量的函数。其部分代码如下:
PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_array TSRMLS_DC){
char *p = NULL;
PHP初级程序员测试
$sa = new sample();foreach($sa as $key => $val){ print $key.“=>”.$val;} ?> 或者直接把对象转为数组
5.PHP语言细节【考察点:PHP基础语法知识和杂类】(1)有下面一段不够优雅的代码,也许还存在BUG:
:register_shutdown_function — Register a function for execution on shutdown。利用这个函数可以模拟PHP5中的虚构函数。
函数原型如下:void register_shutdown_function(callback $function [, mixed $parameter [, mixed $...]])
(3)include()和require()函数有什么区别?可以在一个文件里多次include同一个文件吗?【2分】
: 这两种结构除了在如何处理失败之外完全一样。include()产生一个警告而 require()则导致一个致命错误。可以在一个文件里多次include同一个文件,但是会造成变量和函数重复定义的错误,后者是一个致命错误。
(4)在C语言的循环判断条件中,为了实现计数器的累加,可以有三种形式,也就是:i++,++i,i+=1.试给这三种形式计数器的速度快慢排序并解释。【假设编译器不进行自动优化 3分】
1.++i要比i++快一些 因为i++要在stack里面保存自增之前的i值 而++i可以不用
2.i++比i+=1要快。++ 就是一个inc命令,如果编译器不优化的话,+=1 就是 add eax,1(5)已知一个MYSQL数据库中有100万条用户资料数据,现在需要随机取出10条不重复的记录,应该如何做最快最简单?【4分】
:答案一:用程序来产生10个随机数,这10个随机数可以用在Limit中定位, 生成10条SQL 如果ID是连续(没有删除)的话, 也可以生成一条SQL, 里面有10个OR ID=随机数(4分)
答案二:SELECT * FROM __TABLE__ AS t1 JOIN(SELECT ROUND(RAND()*((SELECT MAX(id)FROM __TABLE__)-(SELECT MIN(id)FROM __TABLE__))+(SELECT MIN(id)FROM __TABLE__))AS id)AS t2
PHP初级程序员测试
(11)写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pa,email)【2分】
答案略。
6.WEB页面相关技术。【考察点:HTML,CSS,JS的基础知识】(1)利用CSS技术实现横向菜单。【兼容性要求:IE6+,FIREFOX 3+。3分】 效果图如下:
: 首页产品介绍 服务介绍技术支持 联系我们