某知名资讯运营商PHP工程师面试笔试真题及答案_第1页
某知名资讯运营商PHP工程师面试笔试真题及答案_第2页
某知名资讯运营商PHP工程师面试笔试真题及答案_第3页
某知名资讯运营商PHP工程师面试笔试真题及答案_第4页
某知名资讯运营商PHP工程师面试笔试真题及答案_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

某知名资讯运营商PHP工程师面试笔试真题及答案一、选择题1、在PHP面向对象中,以下关于__call()方法的描述中,错误的是______

A.__call方法在调用对象中不存在的方法时会自动调用

B.__call方法有两个参数

C.格式如下:function__call($方法名,$参数数组){//.....}

D.__call方法在使用对象报错时会自动调用

2、在PHP面向对象中,有一个通用方法__toString()方法,下面关于此方法的描述或定义中,错误的是______

A.此方法是在直接输出对象引用时自动调用的方法

B.如果对象中没有定义此方法,那么直接使用echo输出此对象,会报如下错误:

Catchablefatalerror:ObjectofclassAcouldnotbeconvertedtostring

C.此方法中一定要有一个字符串作为返回值

D.此方法用于输出信息,如下:publicfunction__toString(){echo"ThisisClass....";}

3、下列语句中,正确定义一个常量的是______

A.varconstPI=3.14;

B.constPI=3.14;

C.publicconstPI=3.14;

D.staticPI=3.14;

4、要把microtime()的输出转化成一个数字值,以下方法最简便的是______

A.$time=implode('',microtime());

B.$time=explode('',microtime());$time=$time[0]+$time[1];

C.$time=microtime()+microtime();

D.$time=array_sum(explode('',microtime()));

E.以上都不对

5、考虑如下E-mail:

From:JohnCoggeshall

To:JoeUser

Subject:HellofromJohn!

Date:Wed,

20Dec200420:18:47-0400

Message-ID:

<1234@local.machine.example>

Hello,HOWareyou?

在头信息里添加什么才能让它成为一份MIME邮件?______

A.MIME-Version

B.Content-Disposition

C.Content-Type

D.Content-Transfer-Encoding

E.Content-ID

6、如果register_globals必须要被打开,那么能防止恶意用户危害系统安全的是______(双选)

A.过滤所有来自非信任源的数据

B.过滤所有外部数据

C.所有变量在使用前先初始化

D.使用难猜变量名来防止用户篡改数据

E.以上都对

7、MySQL字符集setnames*命令设置哪几个系统变量的值?______

A.character_set_client

B.character_set_system

C.character_set_resultsD.character_set_server

E.character_set_connection

8、以下能把字符串里存储的二进制数据转化成十六进制的函数是______

A.encodehex()

B.pack()

C.hex2bin()

D.bin2hex()

E.printf()

9、访问会话变量(Session)的方式是______

A.通过$_GET

B.通过$_POST

C.通过$_REQUEST

D.通过全局变量

E.以上都不对

10、下面不是PHP中面向对象的机制的是______

A.类

B.属性、方法

C.单一继承

D.多继承

二、填空题11、PHP中的PEAR是______。

12、获得当前会话ID的方法是______。

13、代码return?=='a';在“?”中加入______函数后返回true。

14、Session会话的值存储在______。

15、向数组开头插入一个值可以使用______函数。

三、简答题16、使用Memcache需要注意哪些问题?

17、Session的运行机制是什么?

18、假设有5台服务器,请大致描述一下,如何搭建一个日pv300万左右的中型网站?

19、在PHP中,模板引擎的目的是什么?

20、MySQL数据库存在哪些引擎?并请对常用的4种数据库引擎做个介绍。

四、编程题21、要求写一段程序,实现把以下数组$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')

)

);

22、写代码创建二维数组存储10位同学的学号和本课程的成绩,10组数据:(“20170101”,95)(“20170102”,88)(“20170103”,47)(“20170104”,92)(“20170105”,90)(“20170106”,75)(“20170107”,85)(“20170108”,65)(“20170109”,98)(“20170110”,55)。

1)求出成绩最高者显示在网页上。

2)求出不及格的学生信息显示在网页上。

23、一个球从100m高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

24、给定一个由n-1个整数组成的未排序的数组序列,其元素都是1~n中的不同的整数。请写出一个寻找数组序列中缺失整数的线性时间算法。

答案:

一、选择题

1、D[解析]__call()方法用于监视错误的方法调用。为了避免当调用的方法不存在时产生错误,可以使用__call()方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。方法原型如下:

function__call(string$funcfion_name,array$arguments)

{......}

其中,第一个参数$function_name会自动接收不存在的方法名,第二个参数$arguments则以数组的方式接收不存在方法的多个参数。选项A选项B选项C的说法都正确,选项D说法错误。

所以,本题的答案为D。2、D[解析]__toString()是快速获取对象的字符串信息的便捷方式,似乎魔术方法都有一个“自动”的特性,如自动获取、自动打印等,__toString()也不例外,它是在直接输出对象引用时自动调用的方法。__toString()方法一定要有个返回值(return语句,所以,选项D错误。正确的写法应该是

function__toString(){

return"stringvalue";

}

所以,本题的答案为D。3、B[解析]const与define都可以用于定义常量,而const本身就是一个语言结构,使用const的代码简单易读,而define是一个函数。而且,const在编译时要比define快很多。

具体而言,const与define在定义常量方面,区别如下:

1)const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。

2)const可在类中使用,define不能。

3)const不能在条件语句中定义常量。

4)const采用一个普通的常量名称,define可以采用表达式作为名称。

5)const只能接受静态的标量,而define可以采用任何表达式。

6)const定义的常量是大小写敏感的,而define可通过第三个参数(为true表示大小写不敏感)来指定大小写是否敏感。

public通常用来声明类中的方法,static是定义静态变量或方法。静态变量仅在局部函数域中存在且只被初始化一次,当程序执行离开此作用域时,其值不会消失,下次调用的时候不会重新初始化,而会使用上次执行的结果。static关键字在类中,描述一个成员是静态的,被static修饰的成员是属于类的,不属于任何对象实例。

所以,本题的答案为B。4、D[解析]microtime函数返回一个由时间戳和小数两部分组成的字符串,两部分由空格分开。因此,explode()将字符串分割并放入数组,array_sum()把它们相加,转换成数字。选项D正确。

所以,本题的答案为D。5、ACD[解析]

如果要从给定的文本信息中创建一份合法的MIME邮件,那么MIME邮件在开头处必须有MIME-Version头信息,而邮件的每个片段(包括“root”片段)都必须有Content-Type和content-transfer-encoding这两个部分。而Content-Disposition和Content-ID两个头信息是可选的,Content-Disposition用来指出片段要如何显示(比如显示为附件),Content-ID是片段中的各个内容的唯一识别符。选项A选项C选项D正确。

所以,本题的答案为ACD。6、BC[解析]

对于选项A,即使过滤所有来自非信任源的数据,也可能造成安全问题。选项A错误。

对于选项B,可以通过过滤所有外部数据来防止第三方用户的恶意注入。选项B正确。

对于选项C,如果register_globals打开,那么需要保证所有变量在使用前都已初始化,以防止用户恶意注入。选项C正确。

对于选项D,即使变量名难猜,也可以传入恶意信息。选项D错误。

所以,本题的答案为BC。7、ACE[解析]

在MySQL中通过setnames*设定字符集时,主要设置客户端使用的编码字符集(character_set_client)、数据库给客户端返回时使用的字符集(character_set_results)、连接数据库的字符集设置编码类型(character_set_connection)等三个系统变量的值。选项A选项C选项E正确。

所以,本题的答案为ACE。8、BD[解析]PHP中不存在encode_hex()函数。pack()函数可以将数据装入一个二进制字符串中,可以将字符转化成十六进制表示。bin2hex()函数也可以将字符串转化成十六进制。hex2bin()函数可以把ASCII字符的字符串转换为十六进制值,并通过pack()函数转换回来。而printf()函数可以把数字转换成十六进制,但是不能转换字符串为十六进制。选项B选项D正确。

所以,本题的答案为BD。9、E[解析]

访问会话变量是使用$_SESSION方法获取的。而$_GET、$_POST、$_REQUEST方法都是获取表单提交的数据,全局变量也没有办法获取会话变量。选项E正确。

所以,本题的答案为E。10、D[解析]PHP面向对象的机制有类、属性、方法,只支持单一继承,不支持多继承。选项D正确。

所以,本题的答案为D。二、填空题11、PEAR全称为PHP扩展与应用库(PHPExtensionandApplicationRepository),它是一个PHP扩展及应用的一个代码仓库。可以直接下载下来,在代码中包含扩展开发使用。12、session_id()。[解析]

可以通过session_id()函数获取和设置当前会话的ID。使用session_id()时,如果当前存在会话ID,那么返回当前会话ID,如果没有会话,那么返回空字符串("")。13、chr(65)。[解析]ord()函数可以返回字符串的首个字符的ASCII值。chr()函数可以返回指定ASCII值的字符串,可以通过chr(65)转换成字符串A(备注:字符'A'的ASCII值为65),和A比较为真返回TRUE。而65+"和"+65都不能强制转换成字符串A,无法和A比较为真。14、服务器端。[解析]Session会话的值是存储在服务器端的,而Cookie的值存储在客户端。15、array_unshift()。三、简答题16、1)将程序、Memcache、mysql分开存放。在实际的开发过程中,因为Memcache使用过程中把数据缓存在内存中,因此会消耗很大的内存。所以建议把代码、mysql数据库和Memcache分开存放。

2)不要使用Memcache保存重要数据。因为Memcache是把数据存放在内存中,所以服务器突然断电或挂掉,重启后数据就会消失,没有办法找回。所以建议不要使用Memcache保存重要的数据。

3)定期查看缓存的分布状况和击中情况。只有定期查看缓存的分布状况和击中情况才能更好地分析缓存的工作效率和对缓存进行优化,发现缓存中可能存在的问题并及时解决。

17、Session是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个Session的时候,服务器首先检查这个客户端的请求里是否已包含了一个Session标识SessionID,如果已包含一个SessionID,则说明已经为此客户端创建Session,服务器就按照SessionID把这个Session检索出来使用;如果客户端请求不包含SessionID,则为此客户端创建一个Session并且生成一个与此Session相关联的SessionID,SessionID的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个SessionID将被在本次响应中返回给客户端保存。

18、3台Web服务器,2台MySQL数据库服务器,采样master/slave同步的方式减轻数据库负载,Web服务器可以结合缓存来减少负载,同时3台Web服务器内容一致,可以采用DNS轮询的方式来进行负载均衡。

19、因为PHP是一种内嵌脚本在HTML页面中执行的服务器端脚本语言,所以PHP开发出来的Web网站的模板都是混杂了许多视图和逻辑的代码,使得代码的可读性变差,前后端人员的开发不能有效分开。通过模板引擎可以有效地解决这个问题,让网页的逻辑和视图分开,后端人员只用处理程序的输入、逻辑,然后输出内容到视图中显示即可。所以模板引擎的目的是在Web开发中分离应用程序的业务逻辑和表现逻辑,前端人员只要将开发好的页面指定为模板,后端人员负责逻辑编写进行数据库交互、用户交互部分,定义特殊的变量,当用户打开模板时特殊的变量可以动态地改变内容呈现给用户浏览。

20、在MySQL中存在MyISAM、InnoDB、BDB(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated、Archive、CSV、Blackhole、MaxDB等十几种引擎,其中用得最多的引擎是MyISAM、InnoDB。下面简单地对常用的4个引擎做个介绍。

1)MyISAM:默认的MySQL插件式存储引擎。如果应用是以读写和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么可选用此种存储引擎。

2)InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB比较合适。InnoDB存储引擎除了有效地降低由于删除和更新操作导致的锁定,还可以确保事务的完整提交和回滚。

3)Memory:将所有的数据保存在RAM中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。Memory的缺陷是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表数据可以恢复,数据库异常终止后表中的数据是可以恢复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。

4)Merge:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。MERGE表的优点在于可以突破对单个MyISAM表大小的限制,并且将不同的表分布在多个磁盘上,可以有效地改善Merge表的访问效率。四、编程题21、$arr1转换成$arr2的根据是数组把$arr1里面的fid=1的“放”一个数组里,fid=3的“放”在另一个数组,可以根据fid的值对数组进行分组,然后通过array_values()函数返回排序后的数组值即可。

实现代码如下:

$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')

);

foreach($arr1as$key=>$value){

$result[$value['fid']][]=$value;

}

$arr2=array_values($result);

print_r($arr2);

程序的运行结果为Array([0]=>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))[1]=>Array([0]=>Array([fid]=>3[tid]=>9[name]=>Name5)))。

22、根据题意创建一个二维数组的实现代码如下:

<?php

$score=array(95,88,47,92;90,75,85;65,98,55);

for($i=1;$i<=10;$i++){

$arr["2017010".$i][]=$score[$i-1];

}

?>

1)可以使用array_search()函数和max()函数求出最高者,实现代码如下:

echoarray_search(max($arr),arr);

程序的运行结果为20170109。

2)求出不合格学生的信息,可以对数组进行遍历判断二维数组的值是否小于60。

实现代码如下:

<?php

foreach($arras$key=>$val){

if($arr[$key][0]<60){

echo$key."分数为:".$arr[$key][0]."";

}

}

?>

程序的运行结果为20170103分数为:47

201701010分数为:55。

23、根据题目要求,设初始总高度为100m,知道每次下落反弹回的高度为上一次的一半,循环10次,每次循环都对上次反弹后的高度除以2并且累加到总高度中,从而求解出共经过多少米和第10次的反弹高度。

实现代码如下:

<?php

header("Coment-type:text/html;c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论