某知名搜索引擎提供商PHP工程师面试笔试真题1_第1页
某知名搜索引擎提供商PHP工程师面试笔试真题1_第2页
某知名搜索引擎提供商PHP工程师面试笔试真题1_第3页
某知名搜索引擎提供商PHP工程师面试笔试真题1_第4页
某知名搜索引擎提供商PHP工程师面试笔试真题1_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

某知名搜索引擎提供商PHP工程师面试笔试真题1一、选择题1.

以下说法错误的是______A.在外部访问静态成员属性时,使用类名::静态成员属性名B.在外部访问静态成员属性时,使用$实例化对象->静态(江南博哥)成员属性名C.在外部访问静态方法时,使用$实例化对象->静态方法名D.在外部访问静态方法时,使用类名::静态方法名正确答案:BC[解析]在类内部,一个静态方法调用另外一个静态方法(属性)的格式:self::静态方法(静态属性)。而在类外部访问静态方法(属性)的格式:类名::静态方法(属性)。此外,静态变量是属于类的,也就是说,在没有实例化对象时也可以访问静态变量。选项B选项C正确。

所以,本题的答案为BC。

2.

以下程序近似地表示了一种在PHP4中无法实现的特性,这个特性叫______

<?php

classmy_class{

functionmy_funct($my_param){

user_errors("Pleasedefineme",E_ERROR);

}

functionb(){

return10;

}

}

?>A.多重继承B.封装C.抽象方法D.private方法E.函数重载正确答案:C[解析]在面向对象编程语言中,抽象方法指一些只有方法声明,而没有具体方法体的方法。如果my_class是继承了父类,子类没有实现my_funct()方法,那么在调用子类的这个方法时会抛出一个错误。显然,这种方式简单地实现了类似抽象方法的功能。选项C正确。

所以,本题的答案为C。

3.

以下有关phpinfo()函数的说法中,不正确的是______A.它可以被用来查看PHP的配置信息B.可以用它来修改PHP的环境变量C.可以利用它来查看PHP是否启用了某个扩展库D.$_SERVER中包含的内容可以在phpinfo中查看到正确答案:B[解析]phpinfo()函数主要用来查看PHP的配置信息、启用的扩展库和$_SERVER中包含的内容,但是不能用来修改PHP的环境变量。选项B正确。

所以,本题的答案为B。

4.

以下关于MySQL索引的说法中,不正确的是______A.500万数据的用户表user在性别字段sex上建立了索引,语句“select*fromuserwheresex=1”并不会提速多少B.一般情况下不鼓励使用like操作,类似地“like"abc%"”可以使用索引C.唯一索引允许空值,而主键索引不允许为空值,除此之外它们是相同的D.对于需要写入数据的操作,例如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度正确答案:C[解析]唯一性索引列允许空值,而主键列不允许为空值,但除了这个不同外其他也并不是都相同的,如主键可以做外键,唯一索引不可以。选项C的说法是错误的。

所以,本题的答案为C。

5.

以下说法正确的是______A.使用索引能加快插入数据的速度B.良好的索引策略有助于防止跨站攻击C.应当根据数据库的实际应用合理设计索引D.删除一条记录将导致整个表的索引被破坏E.只有数字记录行需要索引正确答案:C[解析]索引的作用主要是帮助数据库快速查找到对应的数据,并不能加快插入数据的速度,选项A错误。

索引不能够帮助防止跨站攻击,选项B错误。

创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询,同样也能提高数据库效率。索引是占用物理空间的,所以在实际的应用中要合理设计使用索引。选项C正确。

索引是一种表结构,删除一条数据也不会影响到整个表的索引,并且索引不一定是数字,也可以是字符串。选项D选项E错误。

所以,本题的答案为C。

6.

下列关于全文检索技术的说法中,不正确的是______A.Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL做全文搜索,它可以提供比数据库本身更专业的搜索功能B.Solr是新一代的全文检索组件,它比Lucene的搜索效率高很多,还能支持HTTP的访问方式,PHP调用Solr也很方便C.MySQL中把一个字段建立FULLTEXT索引,就可以实现全文检索,目前MyISAM和InnoDB的table都支持FULLTEXT索引D.Lucene附带的二元分词分析器CJKAnalyzer切词速度很快,能满足一般的全文检索需要正确答案:B[解析]Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL、PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

Solr是一个独立的企业级搜索应用服务器,用户可以通过HTTP请求访问它,它是采用Java5开发的,基于Lucene的全文搜索服务器,同时对其进行了扩展,提供了比Lucene更加丰富的查询语言,实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。Solr比Lucene的搜索效率高很多,但是PHP调用Solr并不方便,选项B的说法错误,所以,选项B正确。

MySQL中的MyISAM和InnoDB都是支持FULLTEXT全文索引的。全文搜索引擎可以在不使用模板匹配操作的情况下查找单词或短语。

所以,本题的答案为B。

7.

默认情况下,PHP把会话(Session)数据存储在______里。A.文件系统B.数据库C.虚拟内容D.共享内存E.以上都不是正确答案:A[解析]默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹的操作系统中(例如Windows),必须在php.ini中给session.save_path设置一个合适的位置(例如C:\Temp)。

所以,本题的答案为A。

8.

以下关于大型网站的说法中,正确的是______A.大型网站程序异常后,程序员可以依据服务器日志信息定位错误,然后在服务器上用vim修正错误即可B.大型网站开发有很多细节和小网站存在巨大差异,如浏览次数,小网站用数据库记录,大型网站常采用NoSQL来存储C.大型网站选择开发语言很重要,PHP只适合开发中小型网站,并不适合开发大型网站D.虚拟机技术不能用在大型网站上,是因为虚拟机性能较差,而大型网站的访问压力太大,采用后服务器可能会宕机正确答案:B[解析]当大型网站出现异常后,可以根据服务器的日志信息定位错误,但是要修改错误并不是简单地通过vim就可以解决的,还需要分析错误发生的原因,根据错误去修改程序中相对应的bug,避免异常再次发生。如果是服务器的配置文件出现的问题导致出错,那么用vim修改好配置文件后,还需要重启服务器。选项A错误。

大型网站的访问次数非常多,不能像小网站针对浏览次数那样可以时常向数据库进行写操作,因为这样会使数据库负担加重。所以大型网站会通过NoSQL减少数据库的请求和操作,从而把浏览次数缓存在NoSQL中。选项B正确。

开发语言只是一个工具,目前PHP是用于开发网站最多的语言,并不是只能开发中小型网站,它也可以用来开发大型的网站,例如亚马孙、优酷、51job等,选项C错误。

虚拟机技术并不是不可用在大型网站上,因为它可以产生非常多的虚拟机将大型网站的流量进行分散,减少同一个服务器的访问压力,将压力分散到不同的虚拟机中,而虚拟机的性能问题是可以通过分配内存解决的。选项D错误。

所以,本题的答案为B。

9.

以下关于NOSQL的说法中,不正确的是______A.MongoDB支持CAP定理中的AP,MySQL支持CAP中的CA,全部都支持不可能存在B.Redis支持字符串、哈希、列表、集合、有序集合等数据结构,目前Redis不支持事务C.Memcache既支持TCP协议,也支持UDP协议,可以把PHP的Session存放到Memcache中D.MongoDB不用先创建Collection的结构就可以直接插入数据,目前MongoDB不支持事务正确答案:B[解析]Redis目前是可以支持简单的事务的,由于Redis是单线程来处理所有client的请求,一般情况下,Redis在接收到一个client发来的命令后会立即处理并返回处理结果,但是当一个client在一个连接中发出multi命令,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一个队列中。当此连接收到exec命令后,Redis会顺序地执行队列中的所有命令,并将所有命令的运行结果打包到一起返回给client,然后此连接结束事务上下文。选项B的说法错误。

所以,本题的答案为B。

10.

在HTTP协议中,用于发送大量数据的方法是______A.getB.postC.putD.options正确答案:B[解析]get方法是通过URL路径传递数据,而URL的长度和大小有限制,不能进行大量数据的发送,而post可以发送大量数据。

所以,本题的答案为B。

二、填空题1.

在HTTP1.0中,状态码401的含义是______;如果返回“找不到文件”的提示,则可用header函数,其语句为______。正确答案:客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面;header("HTTP/1.0404NotFound");。

2.

以Apache模块的方式安装PHP,在文件http.conf中首先要用语句______动态装载PHP模块,然后用语句______使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理。正确答案:①LoadModule;②AddTypeapplication/x-httpd-php.php。[解析]在用Apache模块的方式安装PHP时,需要先在http.conf配置文件中加入LoadModule说明加载PHP模块的功能。保存好配置文件后,还需要使用AddTypeapplication/x-httpd-php.php指明Apache对PHP文件的支持。

3.

PHP可以执行系统命令的函数是(至少写出3个)______。正确答案:可以执行系统命令的函数有:①system()函数可以执行外部程序并显示输出;②exec()函数可以执行一个外部程序;③popen()函数可以打开进程文件指针。

4.

Cookie存储在______,Session是将数据存储在______,会话的生命周期默认为______。正确答案:客户端;服务端;1440s。[解析]Cookie存储在客户端,而Session存储在服务器端,PHP中的Session默认有效期是1440s(24min),即用户在24min内没有刷新,当前Session就会失效。如果用户关闭了浏览器,Session也会消失。

5.

语句include和require都能把另外一个文件包含到当前文件中,它们的区别是______;为了避免多次包含同一文件,可以用语句______来代替它们。正确答案:include会产生一个警告并继续执行后面的代码,而require则提示是致命错误;require_once()或include_once()。[解析]include和require引用文件的区别在于,当引用文件出错时,include会产生一个警告并继续执行后面的代码,而require则提示是致命错误,并停止继续执行。为了避免多次包含同一个文件,可以使用require_once()或include_once()代替它们。

三、简答题1.

面向对象的特征是什么?正确答案:面向对象的主要特征有抽象、继承、封装和多态。

1)抽象:抽象就是忽略一个主体中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且子类可以修改或增加新的方法使之更适合特殊的需要。

3)封装:封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏。

4)多态:多态是指允许不同类的对象对同一消息做出响应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。

2.

写出3种以上MySQL数据库存储引擎的名称(提示:不区分大小写)。正确答案:MyISAM、InnoDB、DBD(BerkeleyDB)、Merge、Memory(Heap)、Example、Federated等。以下为4种常用数据库存储引擎的简单介绍。

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

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

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

Merge:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。Merge表的优点在于可以突破对单个MyISAM表大小的限制,并且将不同的表分布在多个磁盘上,可以有效地改善Merge表的访问效率。

3.

如何优化MySQL数据库?正确答案:优化数据库主要有以下几个方面:

1)库表设计方面。设计结构良好的数据库表,考虑良好的范式规则,避免join操作,提高查询效率。

2)系统架构设计方面。散列方法,把海量数据散列到不同的表中,进行快慢表设计,进行服务器主从设计。

3)索引的使用。给所有经常查询的字段增加适当的索引。

4)优化SQL语句,减少distinct、group、join等语句的操作。

4.

程序、进程与线程的区别是什么?正确答案:程序、进程与线程的区别见下表。名称描述程序一组指令的有序结合,是静态的指令,是永久存在的进程具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。进程的存在是暂时的,是一个动态概念线程线程的一个实体,是CPU调度和运行的基本单元,是比进程更小的能独立运行的基本单元。其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈)。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行

简而言之,一个程序至少有一个进程,一个进程至少有一个线程。

5.

PHP的垃圾回收机制是什么?正确答案:PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数的垃圾回收机制。每个对象都内含一个引用计数器,当reference连接到对象时,计数器加1。当reference离开作用域或被设置为NULL时,计算器减1。当某个对象的引用计数器为0时,则PHP认为不再需要使用这个对象,释放其所占的内存空间。

四、编程题1.

如何快速下载一个远程HTTP服务器上的图片文件到本地?正确答案:先通过fopen()函数打开要下载的图片路径,然后使用fread()函数读取图片,再在本地打开指定存储图片的目录,将读取到的图片信息写入该目录内的文件中,即可远程下载一个图片到本地。实现代码如下:

<?php

$file="/images/originalNewtip.png";

$fp=fopen($file,'rb');

$img=fread($fp,100000);

$dir="./";

$local=fopen($dir.'/'.basename($file),'w');

fwrite($local,$img);

?>

2.

输出用户的IP地址,并且判断用户的IP地址是否在00~50之间。正确答案:在获取用户的IP地址后,将IP地址转换为数值,然后进行区间比较查看是否在IP地址之中。

实现代码如下:

<?php

$IP=getenv("REMOTE_ADDR");

$nip=str_replace(".","",$IP);

if($nip>1921681100and$nip<1921681150){

echo$IP."在00—50之间";

}else{

echo$IP."不在00—50之间";

}

?>

3.

请写一个函数验证电子邮件的格式是否正确。正确答案:实现代码如下:

functioncheckEmail($email)

{

$pregEmail="/^([0-9A-Za-z\\-_\\.]+)@([0-9a

温馨提示

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

评论

0/150

提交评论