版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
某知名出行打车服务商PHP工程师面试笔试真题及答案一、选择题1、如果等式12*25=311成立,那么使用的是______进制运算。
A.七
B.八
C.九
D.十一
2、下面说法错误的是______
A.如果一个类的成员前面有访问修饰符private,那么这些成员不能被继承,在类的外部不可见。但如果成员被指定为protected和public,那么可以被继承,在类的外部也是可见的。
B.PHP5中,final关键字可以禁止继承和重载
C.PHP5中,析构函数的名称是__destruct(),并且不能有任何参数
D.继承接口的类必须实现接口中声明的所有方法,在PHP中,如果继承接口的类没有实现接口中的方法,那么将会产生一个致命错误
3、考虑如下脚本:运行时,尽管文件test.txt已经被用unlink(()函数删除,脚本仍然输出1,1。在脚本的最后添加什么函数才能解决这个问题?______
<?php
$f=fopen("test.txt","w");
fwrite($f,"test");
fclose($f);
echo(int)file_exists("test.txt").',';
unlink("c:\\test.txt");
echo(int)file_exists("test.txt");
?>
A.clearstatcache()
B.fflush()
C.ob_flush()
D.touch()
4、在PHP的“安全模式”下,有助于降低安全风险的是______
A.限制shell命令的执行
B.限制对系统环境变量的访问
C.限制PHP的文件包含目录
D.限制允许对数据库进行的操作
E.以上全部
5、PHP的mysql系列函数中常用的遍历数据的函数是______
A.mysql_fetch_row,mysql_fetch_assoc,mysql_affetced_rows
B.mysql_fecth_row,mysql_fecth_assoc,mysql_affetced_rows
C.mysql_fetch_rows,mysql_fetch_array,mysql_fetch_assoc
D.mysql_fecth_row,mysql_fecth_array,mysql_fecth_assoc
6、使用mysqli扩展可以很方便地完成数据库的事务处理功能,下面对数据库事务处理的描述中,不正确的是______
A.MySQL目前只有InnoDB和BDB两个数据表类型才支持事务
B.MySQL是以自动提交(autocommit)模式运行的,必须执行mysqli对象中的autocommit(0)方法关闭MySQL事务机制的自动提交模式
C.调用mysqli类对象的commit()方法提交事务
D.调用mysqli类对象的rollback()方法撤销事务,并开启自动提交模式运行
7、以下程序的功能是______
<?php
$a=array_sum(explode('',microtime()));
for($i=0;$i<10000;$i++);
$b=array_sum(explode('',microtime()));
echo$b-$a;
?>
A.测算for循环的执行时间
B.测定服务器的时钟频率
C.计算操作系统的硬件时钟频率与软件时钟频率的差
D.测算for循环、一个array_sum()函数与一个microtime()的总执行时间
E.测算for循环、两个array_sum()函数与两个microtime()的总执行时间
8、以下有关PHP字符串的说法中,不正确的是______
A.如果一个脚本的编码是ISO-8859-1,则其中的字符串也会被编码为ISO-8859-1
B.PHP的字符串在内部是字节组成的数组,用花括号访问或修改字符串对多字节字符集很不安全
C.substr()、strpos()、strlen()、htmlentities()处理字符串时依据的编码方式是相同的
D.一个布尔值Boolean的true被转换成string的“1”,false被转换成空字符串
9、以下程序如何用三元操作替代?______
if($a<10){
if($b>11){
if($c==10&&$d!=$c){
$x=0;
}else{
$x=1;
}
}
}
A.$x=($a<10||$b>11||$c==1&&$d!=$c)?0:1;
B.$x=($a<10||$b>11||($c==1&&$d!=$c))?0:1;
C.$x=(($a<10&&$b>11)||($c==1&&$d!=$c))?0:1;
D.$x=($a<10&&$b>11&&$c==1&&$d!=$c)?1:0;
E.以上都不对
10、下列有关关联数组和索引数组的描述中,正确的是______
A.索引数组是以字符串作为键名的数组
B.关联数组是以数字作为数组的键名的数组
C.关联数组是以字符串作为键值的数组
D.索引数组是以数字作为数组的键名的数组
二、填空题11、前置++和后置++的区别是______。
12、$array['anykey']和$array[anykey]的区别是______。
13、PHP中获取图像尺寸大小的方法是______。
14、varchar和char的区别是______。
15、在MySQL中提取数据时,用______来删除重复的记录。
三、简答题16、MySQL的索引都有哪些?
17、正则表达式是什么?PHP中有哪些常用的与正则相关的函数?请写出一个email的正则表达式、中国手机号码和座机号码的正则表达式?
18、PHP的魔术方法包含哪些(越多越好)?在什么情况下被自动调用?
19、请简述HTTP中POST、GET、PUT、DELETE方式的区别。
20、文件上传需要注意哪些细节?怎么把文件保存到指定目录?怎么避免上传文件重名问题?
四、编程题21、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
22、给定一个数d和n,如何计算d的n次方?例如,d=2,n=3,d的n次方为23=8。
23、给定一个数组,数组中含有重复元素,给定两个数字num1和num2,求这两个数字在数组中出现的位置的最小距离。
24、有一个函数fun能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数fun2,使fun2也只能返回0和1,且返回0的概率为1/4,返回1的概率为3/4。
答案:
一、选择题
1、C[解析]
当进行乘法运算时,无论是什么进制的数进行运算,其基本方法都是相同的,以十进制数的计算为例:2*5=10。如果是七进制,那么运算结果最后一位一定是10%7=3,相乘后进位值为10/7=1。同理,如果是八进制,相乘结果最后一位一定等于10%8=2。如果是九进制,最后一位一定是10%9=1。如果是十一进制,最后一位一定是10%11=A(类似于十六进制中,使用A表示数字10)。
本题中,计算结果为311,最后一位为1,可以排除选项A选项B和选项D,只有选项C满足题意。
所以,本题的答案为C。2、A[解析]
对于选项A,private修饰的成员是不可以被继承的,protected的成员是可以被继承的,但是在外部不可见。选项A说法错误,选项A正确。
对于选项B,final关键字的方法是禁止被继承和重载的。选项B说法正确,选项B错误。
对于选项C,析构函数不能有参数。选项C说法正确,选项C错误。
对于选项D,继承接口的类没有实现接口中的方法是会产生错误的。选项D说法正确,选项D错误。
所以,本题的答案为A。3、A[解析]
脚本仍然输出1,1,是因为PHP会缓存某些文件系统函数的返回值,例如file_exists()函数,为了提高脚本处理重复操作时的效率,所以可以使用clearstatcache()函数清理缓存,防止unlink()删除文件后仍然输出1,1。选项A正确。
fflush()函数是将缓冲内容输出到文件,ob_flush()函数是输出缓冲区中的内容,touch()函数是设置指定文件的访问和修改时间。选项B选项C选项D错误。
所以,本题的答案为A。4、ABC[解析]
在安全模式下,增加了许多附加的安全验证,从而降低了安全隐患。但是在安全模式下无法执行系统命令、访问环境变量和判断文件引入是否安全。正是这些限制使得安全模式下运行的代码有更小的风险。选项A选项B选项C正确。
所以,本题的答案为ABC。5、D[解析]mysql系列函数常用的遍历数据函数有mysql_fetch_row、mysql_fetch_array、mysql_fetch_assoc等三个函数,但不存在mysql_fetch_rows。
所以,本题的答案为D。6、D[解析]mysqli类对象的rollbackback()方法,只是撤销从上一次提交commit()后不成功的事务,并不会开启自动提交模式。选项D正确。
所以,本题的答案为D。7、A[解析]
代码array_sum(explode('',microtime()))求得的是时间戳和微妙数的一个和,在执行循环前的$a得到的是执行循环前的开始时间点,$b得到的是每次循环的运行时间点。所以每次循环后的$b的值都是执行一次循环后的总时间点,直到循环结束,$b得到的是执行10000次的总执行时间点,最后输出的$b减去$a的值是for循环的总执行时间。选项A正确。
所以,本题的答案为A。8、C[解析]substr在处理多字节字符的时候可能会出现乱码。
所以,本题的答案为C。9、E[解析]
由于需要$a<10为真才能执行内部语句,而$b>11也需要为真才能执行下一个条件,所以$a<10需要与$b>11同时为真才能执行到if($c==10&&$d!=$c),才会执行$x=0或$x=1,如果它们其中有一个条件为假,那么都不会执行得到$x=0或$x=1,因此可以改写用($a<10&&$b>11)?($c==10&&$d!=$c)?$x=0:$x=1:"的三元运算符替代。选项E正确。
所以,本题的答案为E。10、D[解析]
索引数组是以数字作为键名的数组,关联数组是以字符串作为键名的数组。但是关联数组的值不一定是字符串。选项D正确。
所以,本题的答案为D。二、填空题11、变量前置++是先将变量增加1,然后将值赋值给原来的变量;变量后置++是先返回变量的当前值,然后将变量的当前值增加1。
12、数组中键名一般由单引号指明键名为字符串,如果没有单引号,那么系统首先认为键名为常量,如果发现没有定义该常量值,那么认为该值为字符串并且会报NOTICE错误,但这样执行效率较低。它们的根本区别在于编译时系统认为'anykey'是字符串,而anykey可能是常量或者字符串。13、getimagesize()、Imagesx()、Imagesy()。可以使用getimagesize()获取图片的大小及相关信息,使用方法为getimagesize(图片路径),如果成功获取,那么返回数组,如果不成功,那么返回false。
2)可以使用Imagesx()函数用于获取图像的宽度,单位为像素,返回值为整型。
3)可以使用Imagesy()函数用于获取图像的高度,单位为像素,返回值为整型。14、varchar与char的区别是char是固定长度的字符类型,分配多少空间,就占用多少空间。varchar是可变长度的字符类型,内容有多大就占用多大的空间,比较节省空间。查找效率上char比varchar快,因为varchar是非定长,必须先查找长度,然后进行数据的提取,由于它比char定长类型多了一个步骤,所以效率比char低。15、DISTINCT。[解析]DISTINCT关键字可以对数据过滤重复记录,只返回唯一的、不同值的数据。三、简答题16、MySQL的索引如下:
1)唯一索引。唯一索引避免了表中存在重复的数据,提高了检索速度。创建唯一索引的目的是避免表中插入重复的数据,从而提高表的查询速度。
2)普通索引。普通索引允许被索引的数据列包含重复的值。优点如下:①简化MySQL对这个索引的管理工作,使工作更有效率;②MySQL会对新插入的数据自动检测是否有重复的值。
3)主索引。即主键索引,关键字PRIMARY。
4)外键索引。外键约束。
5)复合索引。索引可以覆盖多列数据,例如,INDEX(columnA,columnB)。这种索引的特点是MySQL可以有选择地使用索引,例如,INDEX(A,B,C)可以当作A或(A,B)的索引来使用,但不能当作B或(B,C)来使用。
6)索引的长度。在为char和varchar类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数,这个数字必须小于这个字段所允许的最大字符个数。
7)全文索引。针对内容开头的字符进行检索操作,如果检索的内容由多个字段构成,数据量很大,那么全文索引是必要的。注意,MySQL的InnoDB引擎不支持全文搜索索引。
17、正则表达式是一种字符串匹配的模式,可以判断一个字符串的组成是否满足某种特定的模式,将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
常用的正则函数有:
1)preg_match()函数用于通过正则表达式匹配字符串。
2)preg_quote()函数可以转义正则表达式字符。
3)preg_replace()函数用于执行正则表达式的搜索和替换。
4)preg_replace_callback()函数可以执行一个正则表达式搜索和使用回调替换。
5)preg_split()函数可以通过一个正则表达式分隔字符串。
email拥有固定的格式,可以根据这个格式匹配正确的email,它的正则表达式为/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/。
中国手机号码的正则表达式如下:
/^1[3-5,8]{1}[0-9]{9)$/
座机号码的验证的正则表达式如下:
/^([0,9]{3,4}-)?[0-9]{7,8}$/
18、PHP可用的魔术方法会在特定情况下被自动调用,但是前提是特定的条件被触发,并且这些魔术方法可以在类中作为方法。
PHP的魔术方法有:
1)__construct()。构造函数,创建对象时自动被调用。
2)__destruct()。析构函数,对象的所有引用都被删除或者当对象被显式销毁时执行。
3)__clone()。复制函数,调用clone方法时自动调用。
4)__set()。当程序试图写入一个不存在或不可见的成员变量时自动调用。该函数在类中定义时必须有两个参数,即变量名和变量值。
5)__get()。当程序调用一个未定义或不可见的成员变量时自动调用__get()来读取变量值。定义时必须有一个参数,即变量名。
6)__call()。当程序试图调用不存在或不可见的成员方法时,自动调用__call()。__call()方法一般用于监视错误的方法调用。为了避免当调用的方法不存在时产生错误,可以使用__call()方法来避免。该方法包含两个参数,即方法名和方法参数。其中方法参数以数组形式存在。
7)__sleep()。使用serialize()实现序列化对象时,先调用该方法,可以用来清除对象并返回一个该对象中所有变量的数组。
8)__wakeup()。使用unserialize()还原一个被序列化的对象时,先执行该方法,恢复在序列化中可能丢失的数据库连接及相关工作。
9)__toString()。当使用echo或print输出对象时,将对象转化为字符串。
10)__autoload()。调用未被实例化的类时,自动调用,在指定路径下查找和该类名称相同的文件。
19、HTTP定义了与服务器交互的不同的方法,最基本的方法是POST、GET、PUT和DELETE,URL全称是资源描述符,可以认为一个URL地址用于描述一个网络上的资源,而对应的HTTP中的四种方法GET、POST、PUT、DELETE对应这个资源的查、改、增和删四个操作。它们的具体功能如下:
1)根据HTTP规范,GET用于信息获取,信息应该是安全的。
2)根据HTTP规范,POST表示可以修改服务器上的资源的请求。
3)PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器决定。
4)DELETE的功能是删除某一个资源。
20、文件上传需要注意以下几点:
1)确保php.ini中已经开启了文件上传功能。
2)如果对文件上传的大小有限制,那么需在php.ini中修改允许上传的最大值,默认是2MB。
3)在上传图片的表单中,form标签需要加上enctype="multipart/form-data"。
4)表单上传图片时,method必须使用post。
5)表单使用file类型,并且有name属性值,后台才能获取。
6)必须保证上传文件的大小不会超出限制,文件类型符合上传要求,上传文件的存储路径不存在问题。
7)需要使用$_FILES接收上传文件信息。其中$_FILES是一个二维数组,一维是上传空间的name,二维对应了文件名、文件类型、上传到临时目录下的临时文件名、文件大小、是否有错误等信息。如果是批量上传,那么二维数组下标是数组而不是字符串。
文件上传后是放置在服务器端的临时路径下的,需要使用move_uploaded_file()函数将上传后的文件保存到指定目录。
为了避免上传图片重名,可以使用时间戳加随机数的方式给文件重新命名。四、编程题21、利用for循环控制100~999个数,每个数分解出个位、十位和百位。利用循环,分别用$i代表百位,$i代表十位,$m代表个位,且百位的初始数值是1~9,而十位和个位初始数值是0~9,然后按百位、十位、个位的顺序嵌套循环,判断找出符合“水仙花数”的公式的数。
PHP代码实现如下:
<?php
for($i=1;$i<=9;$i++){
for($j=0;$j<=9;$j++){
for($m=0;$m<=9;$m++){
if(pow($i,3)+pow($j,3)+pow($m,3)==100*$i+10*$j+$m){
echo$i.$j.$m;
}
}
}
}
?>
程序的运行结果为
01153370371407
22、可以把n的取值分为如下几种情况:
1)当n=0时,计算结果肯定为1。
2)当n=1时,计算结果肯定为d。
3)当n>0时,计算方法为初始化计算结果result=1,然后对result执行n次乘以d的操作,得到的结果就是d的n次方。
4)当n<0时,计算方法为初始化计算结果result=1,然后对result执行|n|次除以d的操作,得到的结果就是d的n次方。
以2的三次方为例,首先初始化result=1,接着对result执行3次乘以2的操作:result=result*2=1*2=2,result=result*2=2*2=4,result=result*2=4*2=8,因此,2的三次方等于8。根据这个思路给出实现代码如下:
<?php
/*函数功能:计算一个数d的n次方*/
functionpower($d,$n)
{
if($n==0)return1;
if($n==1)return$d;
$result=1.0;
if($n>0)
{
for($i=1;$i<=$n;$i++)
{
$result*=$d;
}
return$result;
}
else
{
for($i=1;$i<=abs($n);$i++)
{
$result=$result/$d;
}
}
return$result;
}
printf("%0.2f<br>",power(2,3));
printf("%0.2f<br>",power(-2,3));
printf("%0.3f",power(2,-3));
?>
程序的运行结果为
8.00
-8.00
0.125
算法性能分析:这个算法时间复杂度为O(n),需要注意的是,当n非常大的时候,这种算法的效率是非常低下的。
23、对于这类问题,最简单的方法就是对数组进行双重遍历,找出最小距离,但是这种方法效率比较低下。由于在求距离的时候只关心num1与num2这两个数,因此,只需要对数组进行一次遍历即可,在遍历的过程中分别记录num1或num2的位置就可以非常方便地求出最小距离。
主要思路:对数组进行双重遍历,外层循环遍历查找num1,只要找到num1,就开始内层循环,即对数组从头开始遍历查找num2,当遍历到num2时,就计算它们的距离dist。当遍历结束后,最小的dist值就是它们之间的最小距离。
实现代码如下:
<?php
functionminDistance($arr,$num1,$num2){
$len=count($arr);
if(!$arr||$len<=0){
printf("参数不合理");
return";
}
$minDis=max($arr);
//num1与num2的最小距离
$dist=0;
for($i=0;$i<$len;++$i){
if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 班级辩论赛主题班会
- 感恩家园主题班会
- 吉利汽车发展战略研究报告
- 《ISO56001-2024创新管理体系 - 要求》之26:“10改进”解读和应用指导材料(雷泽佳编制-2024)
- 工伤旧伤复发继续治疗确认申请表
- 医疗机构中药饮片验收规范
- 岗位调动注意事项
- 农村土地使用协议书模板
- 离婚协议书放弃财产模板
- 代购退税合作协议书模板
- 2024年4月自考03709马克思主义基本原理概论试题及答案含解析含页码
- 《通风管道技术规程+JGJT+141-2017》详细解读
- 幼儿园跳蚤市场主题班会-跳蚤市场活动 儿童主题活动模板
- 施工现场安全操作规程汇编
- 五年高考高考英语真题分项详解 专题20 情景交际和特殊句式(含解析)-人教高三全册英语试题
- 力学性能检验
- 企业首席质量官培训
- 家委会方案及流程
- 《我爱读书快乐成长》主题班会课件
- JTG F90-2015 公路工程施工安全技术规范
- 你的孩子不是你的孩子
评论
0/150
提交评论