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

2020小米高级PHP工程师面试题

时间:2023-03-29 15:02:09 PHP

1.哪个函数可以用来将错误转化为异常处理?A:set_error_handlerB:error_reportingC:error2exceptionD:catch正确答案:A答案分析:set_error_handler()可以指定一个回调函数,当发生错误时,会通过指定的回调函数自动处理。只需在回调函数中抛出一个新异常即可。Github2。以下哪个shell函数描述是正确的?A:shell函数可以先调用再定义B:shell函数需要用关键字function定义C:shell函数中的变量可以声明为局部变量D:shell函数只能通过返回值返回,1表示成功,0表示失败正确答案:C答案分析:调用前必须定义shell函数;声明时,无需使用关键字;函数中的局部变量可以通过local来定义;shell函数的返回值,0表示成功,非0表示错误,其他选项正确3、下列关于全文搜索技术的说法错误的是:A:Solr是新一代的全文搜索组件,比Lucene效率高很多,并且支持HTTP访问。PHP调用Solr也很方便。B:在MySQL的某个字段上创建FULLTEXT索引,实现全文检索。目前,MyISAM和InnoDB表都支持FULLTEXT索引。C:Sphinx是一个基于SQL的全文搜索引擎,可以结合MySQL进行全文搜索。它可以提供比数据库本身更专业的搜索功能。D:Lucene附带的二进制分词分析器CJKAnalyzer分词速度快,可以满足一般全文检索的需要。正确答案:A答案分析:Solr是新一代的全文搜索组件,它是基于Lucene的,所以说它比Lucene快是扯淡:)4、关于单例模式,错的是?A:单例模式的目的是保证一个类的实例在全局环境中只存在一个。B:单例模式一般将构造函数设置为privateC:只需要将构造函数设置为private即可保证只有一个例子D:连接数据库的功能通常采用单例模式实现正确答案:C答案分析:构造函数设置为private,只是保证不能通过new创建新的实例,但是通过clone、反序列化等方式仍然可以创建多个实例。5.正则引擎表达式有什么问题?一个正则化引擎主要可以分为两类:一类是DFA,一类是NFA。B一般而言,NFA引擎搜索速度更快。但是DFA是面向表达式的,更容易操作,所以一般程序员更喜欢DFA引擎!CNFA表达式主导,DFA文本主导。D可以用是否支持忽略优先级量词和组捕获来判断引擎类型:支持NFA,不支持DFA正确答案:B答案分析:正确的说法应该是:一般来说,DFA引擎搜索速度更快。但是NFA以表达式为主,更容易操作,所以一般程序员更喜欢NFA引擎!**6。方框内的正则表达式可以匹配以下哪些选项?/.\123\d/**A.**123B。****1234C。1234D.123正确答案:B答题解析:本题重点是理解这个正则表达式的含义——从左到右,首先是零个或多个任意字符(.),后面是星号(),然后是123,最后是一个数字。所以答案是B。7.下列关于数据库的说法错误的是?A:数据库为了效率可以有多个读库B:数据库可以使用主从作为热备C:数据库不能提供多主多从的架构D:数据库主从是通过日志同步的正确答案:C答案分析:数据库可以提供多主多从架构。8.以下哪项不是修复XSS漏洞的方法?A:用htmlspecialchars过滤参数B:对参数使用白名单过滤C:不允许将输入的内容显示给浏览器D:禁止在js标签中输出用户输入的内容正确答案:A这种过滤可以解决尖括号typejs标签中的xss无法解析。9、下列哪项不是PHPSAPI模式?A.ISAPIB.CGIC.FastCGID.RESTFULAPi正确答案:D答案解析:A~C是最常用的模式,D是接口组织方式。10.逐行遍历一个大文件,下面哪种方法性能更高?A:写一个实现了IteratorAggregate接口的类,用foreach遍历这个类。B:使用file_get_contents将文件内容一次性加载到内存中,然后逐行遍历。C:使用exec函数调用shell工具遍历D:使用别人写的类库正确答案:A答案分析:使用IteratorAggregate打开文件后移动指针逐行遍历文件,不是受文件大小的影响。使用file_get_contents处理大文件容易导致PHP内存溢出;调用exec会产生额外的进程,影响性能;别人写的类库质量可能不高。11、下列选项中,哪一个不是设计模式应遵循的原则?A:组合优于继承B:接口编程C:尽可能降低耦合D:尽可能使用高性能语法正确答案:D答案分析:设计模式的重点是代码的可维护性和可重用性,D选项不是设计模式的重点。12.下列关于回溯的表述错误的是?Aab.lmn匹配abcdeflmnghijklmn中的abcdeflmnghijklmnab.?lmn匹配abcdeflmnghijklmn中的abcdeflmnCab??c匹配abcdeflmnghijklmn中的abcD.*lmn匹配abcdeflmnghijklmn中的abcdeflmn正确答案:D答案分析:D所以应该是贪心匹配,结果是abcdeflmnghijklmn13。如果函数中使用了trycatchfinally的语法结构,那么return应该写在哪里呢?A:在finally中B:在try中C:在catch中D:任意位置正确答案:A答案分析:try中返回后,finally会继续执行。如果finally中有return,那么最终的返回值就是finally中return的值。14、下列关于NOSQL的说法错误的是:A: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的表锁会在表发生变化时触发C:Innodb会自动给涉及到的行加上排它锁,并创建一个Mirror副本,此时,选择时查询镜像副本的数据。D:Innodb行锁状态下,读不受影响,写会受影响(涉及数据)。正确答案:A16。下面哪个是创建一个每周三01:00~04:00每3分钟执行一次crontab命令?A:1,43/bin/bash/home/sijiaomao/ok.shB:/31,43/bin/bash/home/sijiaomao/ok.shC:/31-43/bin/bash/home/sijiaomao/ok.shD:/31-4*/bin/bash/home/sijiaomao/ok.sh正确答案:C答案解析:A:每周三凌晨1:00和4:00每分钟执行一次B:每天星期三1:00和4:00每3分钟执行一次C:满足要求D:每天1:00和4:00每3分钟执行一次17.拆分前,很多列表和详情页需要的数据在系统中可以通过sqljoin完成。拆分之后,数据库可能分布在不同的实例和不同的主机上,join会变得很麻烦。以下哪种方法不是解决此问题的有效方法?一个全局表,系统中所有模块可能依赖的一些表存储在每个库中。B字段是多余的。而“订单表”中保存的是“SellerId”,而卖家的“Name”字段也是多余的,这样查询订单详情时就不需要去查询“SellerUserTable”了。C主从复制,将数据库的读写分离。D数据同步,定时关联A库中的tbl_a表和B库中的tbl_b,可以主从定时同步指定表。正确答案:C答案解析:主从复制,将数据库的读写分离。只能扩大读并发,不能缓解跨库join的问题。18.关于网络IO模型,下列哪项是正确的?A.select比epoll快B.nginx使用select模型C.apache支持select和epoll的切换D.epoll可以支持更大的并发正确答案:C答案分析:epoll更快。Bnginx采用epoll模型。Capache只支持select19。PHP在执行时,有如下执行过程:扫描(Lexing)-编译-执行-解析,其含义为:A:将PHP代码转换为语言片段(Tokens),将Tokens转换为简单有意义的表达式,将表达式编译为Opocdes,并依次执行OpcodesB:将PHP代码转化为语言片段(Tokens),将Tokens转化为简单有意义的表达式,依次执行Opcodes,并将表达式编译成OpocdesC:将PHP代码转化为语言片段(Tokens),将表达式编译为Opocdes,依次执行Opcodes,将Tokens转化为简单有意义的表达式D:将PHP代码转化为语言片段(Tokens),将表达式编译成Opocdes,将Tokens转化为简单有意义的表达式,依次执行Opcodes正确答案:C答案分析:正确答案是C,正确顺序是:Scanning(Lexing),Parsing,Compilation,Execution只要注意,不要迷路各位,以上就是本文的全部内容,能看到这里的都是人才。前面说了PHP的技术点很多,也是因为太多了,写的太多了,写完了也不会看太多,所以我这里整理成了PDF和文档,有需要的可以点击进入密码:想了解更多内容可以访问【比大厂】优质PHP架构师教程目录,只要会看,就可以保证你的薪水会上升到一个更高的水平(不断更新)。以上内容希望对大家有所帮助,很多PHPer在进阶的时候总会遇到一些问题和瓶颈。业务代码写多了,没有方向感,就不知道从哪里入手改进。我整理了一些这方面的资料,包括但不限于:高扩展、高性能、高并发、服务器性能调优、TP6、laravel、YII2、Redis、Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务,Nginx等知识点进阶进阶干货需要的可以免费分享给大家,需要的可以加我的PHP技术交流群953224940