当前位置: 首页 > 后端技术 > PHP

PHP工程师面试题

时间:2023-03-29 22:29:31 PHP

面试前多看看公司的面试资料,对后面的面试会有很大的帮助。今天给大家整理PHP高级工程师面试题(仿试卷),有一定的参考价值,现分享给大家,希望对大家有所帮助!  1。哪个函数可以用来将错误转化为异常处理?  A:set_error_handler  B:error_reporting  C:error2exception  D:catch  正确答案:A  答案分析:set_error_handler()可以指定一个回调函数,当发生错误时,会通过指定的回调函数自动处理。只需在回调函数中抛出一个新异常即可。  2。以下哪项对shell函数的描述是正确的?  A:shell函数可以先调用再定义  B:shell函数需要使用关键字function来定义  C:shell函数中的变量可以声明为部分变量  D:shell函数只能通过return返回一个值,1代表成功,0代表失败  正确答案:C  答案分析:shell函数必须在调用前定义;声明时,不需要使用关键字;函数中的一些变量可以通过local来定义;shell函数的返回值,0表示成功,非0表示错误,其他选项正确  3.下列关于全文搜索技术的说法错误的是:答:Solr是新一代的全文搜索组件。在搜索上比Lucene效率高很多,而且还可以支持HTTP访问。PHP调用Solr也很方便。  B:在MySQL的字段上设置FULLTEXT索引可以实现全文检索。目前,MyISAM和InnoDB表都支持FULLTEXT索引。  C:Sphinx是一个基于SQL的全文搜索引擎,可以结合MySQL进行全文搜索。它可以提供比数据库本身更专业的搜索功能。  D:CJKAnalyzer,Lucene附带的二进制分词分析器,分词速度很快,可以满足普通全文检索的需要。网站建设  正确答案:A  答案解析:Solr是新一代的全文搜索组件,它是基于Lucene的,所以说它比Lucene快是废话:)  4.关于单例形式,错了吗?  A:单例形式的目的是保证在全局环境下,一个类的实例只能存在一个  B:单利益形式通常将结构函数设置为private  C:只需要将结构函数设置为private即可保证全世界只有一个实例private只能保证不能通过new创建新的实例,但是通过clone、反序列化等方式仍然可以创建多个实例。  5.哪个正则引擎表达式是错误的?  一个正则引擎主要分为两类:一类是DFA,一类是NFA。  B一般来说,NFA引擎搜索速度更快。但是DFA以表达式为主,更容易控制,所以普通程序员更喜欢DFA引擎!  CNFA表达式主导,DFA文本主导。  D可以通过是否支持忽略优先量词和组捕获来判断引擎类型:支持NFA,不支持DFA  正确答案:B  答案分析:正确的说法应该是:一般来说,DFA引擎搜索速度更快。但是NFA以表达式为主,更容易控制,所以普通程序员更喜欢NFA引擎!  6。方框内的正则表达式可以匹配以下哪些选项?  /.123d/  A.**123  B.**1234  C.1234  D.123  正确答案:B  答案解析:本题重点是理解这个正则表达式的含义——从左到右,首先是零个或多个任意字符(.),然后是星号(.),然后是123,最后是数字。所以答案是B。  7。下列关于数据库的说法错误的是?  A:为了效率,数据库可以有多个reader  B:数据库可以使用master-slave作为热备  C:数据库不能提供多主多从架构日志同步  正确答案:C  答案解析:数据库可以提供多主多从架构。  8.以下哪项不是XSS漏洞的修复方法?  A:对参数进行htmlspecialchas过滤  B:对参数使用白名单过滤  C:不允许在浏览器上显示输入内容  D:禁止在js标签中输入用户输入内容  正确答案:A  答案分析:这种过滤可以处理尖括号中的xss,但是不能处理js标签中的xss  9.以下哪项不是PHPSAPI的形式?  A.ISAPI  B.CGI  C.FastCGI  D.RESTFULAPi  正确答案:D  答案解析:A~C是最常用的形式,D是a界面是如何组织的。  10。逐行遍历一个大文件,下面哪种方法性能更高?  A:写一个实现了IteratorAggregate接口的类,用foreach遍历这个类。  B:使用file_get_contents将文件内容一次性加载到内存中,然后逐行遍历。  C:通过exec函数,调用shell工具遍历  D:使用别人写的类库  正确答案:A  答案分析:使用IteratorAggregate打开文件,移动pointer逐行遍历,不受文件大小影响。使用file_get_contents处理大文件容易导致PHP内存溢出;调用exec会产生额外的进程,影响性能;别人写的类库质量可能不高。  11。以下哪个选项不是设计形式应遵循的准则?  A:组合优于继承  B:接口编程  C:尽可能减少耦合  D:尽量使用高性能语法  正确答案:D  答案分析:设计表单的重点是代码的可维护性和复用性,选项D不是设计表单的重点。  12。下列关于回溯的表述错误的是?  Aab.lmn匹配abcdeflmnghijklmn  Bab。结果应该是abcdeflmnghijklmn。可以参考:https://zzzjtd.com  13。如果函数中使用了trycatchfinally语法结构,return应该写在Where?  A:在finally中  B:在try中  C:在catch中  D:任意位置  正确答案:A  答案分析:finally在try中return后会继续执行,如果finally中也有return,那么最后的返回值就是finally中return的值。  14。以下关于NOSQL的说法错误的是:  答:Redis支持字符串、哈希、列表、合流、有序合流等数据结构。目前,Redis不支持事务。  B:MongoDB支持CAP定理中的AP,MySQL支持CAP中的CA。支持所有这些是不可能的。  C:MongoDB可以直接插入数据,无需先创建Collection结构。目前,MongoDB不支持事务。  D:Memcache同时支持TCP协议和UDP协议。我们可以将PHPSession存储在Memcache中。  正确答案:A  答案分析:Redis支持事务。  15。Innodb的锁机制有什么问题?  A:Innodb提供表锁和行锁两种锁机制  B:Innodb的表锁会在表发生变化时触发,加排他锁,创建镜像副本。此时停止select,查询镜像副本的数据正确答案:A  16。以下哪项是创建一个crontab命令,每周三的01:00到04:00每3分钟执行一次?  A:1,43/bin/bash/home/sijiaomao/ok.sh  B:/31,43/bin/bash/home/sijiaomao/ok.sh  C:/31-43/bin/bash/home/sijiaomao/ok.sh  D:/31-4*/bin/bash/home/sijiaomao/ok.sh  正确答案:C  答案分析:A:每每周三1点4分每分钟执行一次B:每周三1点4分每3分钟执行一次C:满足请求D:每天1点4分每3分钟执行一次  17、拆分前,系统中很多列表、详情页需要的数据,都可以通过sqljoin来完成。拆分之后,数据库可能分布在不同的实例和不同的主机上,加入会变得很麻烦。以下哪项不是解决此问题的有效方法?  一个全局表,系统中所有模块可能依赖的一些表保存在每个库中。  B字段是冗余的,而“订单表”中存储的是“卖家Id”,卖家的“姓名”字段也是冗余的,这样在查询订单详情时,就不需要查询“卖家”用户表”。  C主从复制,数据库的读写分离。  D数据同步,定时关联A库中的tbl_a表和B库中的tbl_b表,可以主从定时同步指定表。  正确答案:C  答案解析:主从复制,数据库读写分离。只能扩大读并发,不能缓解跨库join的问题。  18.关于网络IO模型,下列哪项是正确的?  A.select比epoll快  B.nginx使用select模型  C.Apache支持select和epoll的切换  D.epoll可以支持更大的并发性  正确答案:D  答案分析:Aepoll更快。Bnginx使用epoll模型。Capache只支持select  19。PHP在执行时,有如下执行过程:扫描(Lexing)-编译-执行-解析,其含义为:  A:将PHP代码转换成语言片段(Tokens),ConvertTokensintosimpleandmeaningfulexpressions,compileexpressionsintoOpocdes,andexecuteOpcodes  B:将PHP代码转换为语音片段(Tokens),将Tokens转换为简单有意义的表达式,依次执行Opcodes,将表达式编译为Opocdes  C:转换PHP代码转化为语音片段(Tokens),将表达式编译成Opocdes,依次执行Opcodes,将Tokens转化为简单有意义的表达式  D:将PHP代码转化为语言片段(Tokens),将表达式编译成Opocdes,将Tokens转化为简单有意义有意义的表达式,依次执行Opcodes  正确答案:C  答案分析:正确答案为C,正确顺序为:Scanning(Lexing)、Parsing、Compilation、Execution