欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

小米2019年PHP工程师面试题和答案解析

程序员文章站 2022-03-29 20:16:21
一、单选题(共29题,每题5分) 1.PHP面向对象方法重写描述错误的是? A、子类必须继承父类 B、子类可以重写父类已有方法 C、重写之后子类会调用父类方法 D、子类也可以具有与父类同名的属性,进行属性覆盖 参考答案:C 答案解析:重写之后子类不会再去调用父类的方法,而是直接调用自身的方法。 2. ......

一、单选题(共29题,每题5分)

1.php面向对象方法重写描述错误的是?

a、子类必须继承父类

b、子类可以重写父类已有方法

c、重写之后子类会调用父类方法

d、子类也可以具有与父类同名的属性,进行属性覆盖

参考答案:c

答案解析:重写之后子类不会再去调用父类的方法,而是直接调用自身的方法。

 

2.php选项/信息函数作用错误的是?

a、phpinfo() 输出关于 php 配置的信息

b、php_sapi_name() 返回 web 服务器和 php 之间的接口类型

c、ini_set() 为一个配置选项设置值

d、ini_get() 获取所有配置选项

参考答案:d

答案解析:ini\_get() 是获取一个配置选项,获取所有配置选项的函数是ini\_get\_all()。

(加入群677079770获取更多面试题答案。)

 

3.下列说法错误的是:

a、链表分为单向链表,双向链表,循环链表

b、栈 先进后出

c、队列 先进先出,可以从头部插入

d、队列 先进先出

参考答案:c

答案解析:链表分为单向链表,双向链表,循环链表 栈 先进后出 队列 先进先出。

 

4.数组的遍历方式,下列错误的是?

a、foreach

b、each

c、for

d、list

参考答案:d

答案解析:list只能把数组的元素变成变量,并不是遍历。

联合使用list()、each()和while循环遍历数组

each()函数需要传递一个数组作为一个参数,返回数组中当前元素的键/值对,并向后移动数组指针到下一个元素的位置。

list()函数,这不是一个真正的函数,是php的一个语言结构。list()用一步操作给一组变量进行赋值。

小米2019年PHP工程师面试题和答案解析

 

 

 

5.以下哪种方法不可以设置php的最大执行时间为120秒?

a、修改php的配置文件 php.ini 文件,max_executin_time = 120;

b、$max_execution_time = 120

c、ini_set("max_execution_time", "120");

d、set_time_limit(120);

参考答案:b

答案解析:第一种方式需要重启服务器,第三种第四种直接在脚本中用函数设置,第二种只是一个普通变量,不管用。

 

6.正则中\w代表什么含义?

a、[0-9a-z]

b、[0-9a-za-z]

c、[0-9a-za-z_]

d、[0-9a-za-z_-\]

参考答案:c

答案解析:\w匹配字符数字和下划线。

 

7.java类库中,将信息写入内存的类是(  )。

a、 java.io.fileoutputstream

b、 java.io.bytearrayoutputstream

c、 java.io.bufferedoutputstream

d、 java.io.dataoutputstream

参考答案:b

答案解析:暂无。

(加入群677079770获取更多面试题答案。)

 

8.以下php代码运行结果正确的是?

小米2019年PHP工程师面试题和答案解析

 

 

 

a、array ( [val1] => array ( [0] => 1 [1] => 2 ) [val2] => 3 [val3] => array ( [0] => 4 [1] => 5 ) )

b、array(2) { [0]=> int(4) [1]=> int(5) }

c、array(2) { [0]=> int(1) [1]=> int(2) }

d、null

参考答案:b

答案解析:

array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组

 

10.关于php指针的函数作用,说法错误的?

a、current()返回数组中的当前单元

b、end() 将数组的内部指针指向最后一个单元

c、reset() 将数组的内部指针指向第一个单元

d、prev() 将数组的内部指针向前移动一位

参考答案:d

答案解析:prev()是 数组的内部指针倒回一位。

 

11.下面哪一个正则表达式用来验证电子邮件(如: zhang.san_123@scse.com.cn )的格式最正确()

a、[_\.0-9a-z]@([0-9a-z]+\.)+[0-9a-z\.-]{2,6}

b、[_\.0~9a~z-]*@([0~9a~z-]+\.)+[0~9a~z\.]+

c、[_\.0-9a-z-]+@([0-9a-z-]+\.)+[0-9a-z\.]+

d、[_\.0~9a~z-]+@([0~9a~z-]+\.)+[0~9a~z]{2,6}

参考答案:c

答案解析:c

小米2019年PHP工程师面试题和答案解析

 

 

 

12.php面向对象继承特征描述错误的是?

a、类使用extends关键字,让子类继承父类

b、子类只能继承父类的非私有属性

c、类继承父类后,相当于将父类的属性和方法copy到子类可以直接使用$this调用

d、php只支持单继承不支持一个类继承多个类和多层继承

参考答案:d

答案解析:php是单继承只能继承一个类,但是可以进行多层继承。

(加入群677079770获取更多面试题答案和学习资料。)

 

13.下列哪种php运行模式在php5.3之后不再支持?

a、cgi

b、fastcig

c、isipa

d、cli

参考答案:c

答案解析:在php5.3以后,php不再有isapi模式,安装后也不再有php5isapi.dll这个文件。要在iis6上使用高版本php,必须安装fastcgi扩展,然后使iis6支持fastcgi。

 

14.为什么innodb表要建议用自增列做主键?

a、使用自增列(int/bigint类型)做主键,这时候写入顺序是自增的,和b+数叶子节点分裂顺序一致

b、无

c、该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候innodb会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致

d、使用自增列(int/bigint类型)做主键,这时候写入顺序是自增的,和b+数叶子节点分裂顺序一致; 该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候innodb会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致; 除此以外,如果一个innodb表又没有显示主键,又有可以被选择为主键的唯一索引,但该唯一索引可能不是递增关系时(例如字符串、uuid、多字段联合唯一索引的情况),该表的存取效率就会比较差

参考答案:d

答案解析:1.innodb引擎表是基于b+树的索引组织表(iot); 2.每个表都需要有一个聚集索引(clustered index); 3.所有的行记录都存储在b+树的叶子节点(leaf pages of the tree); 4.基于聚集索引的增、删、改、查的效率相对是最高的; 5.如果我们定义了主键(primary key),那么innodb会选择其作为聚集索引; 6.如果没有显式定义主键,则innodb会选择第一个不包含有null值的唯一索引作为主键索引; 7.如果也没有这样的唯一索引,则innodb会选择内置6字节长的rowid作为隐含的聚集索引(rowid随着行记录的写入而主键递增,这个rowid不像oracle的rowid那样可引用,是隐含的)。 因此: 1.使用自增列(int/bigint类型)做主键,这时候写入顺序是自增的,和b+数叶子节点分裂顺序一致; 2.该表不指定自增列做主键,同时也没有可以被选为主键的唯一索引(上面的条件),这时候innodb会选择内置的rowid作为主键,写入顺序和rowid增长顺序一致; 3.如果一个innodb表又没有显示主键,又有可以被选择为主键的唯一索引,但该唯一索引可能不是递增关系时(例如字符串、uuid、多字段联合唯一索引的情况),该表的存取效率就会比较差。

 

15.哪项不是yii入口脚本主要工作?

a、定义全局常量

b、包含 [[yii]] 类文件

c、加载应用配置

d、加载过滤器

参考答案:d

答案解析:入口文件主要工作如下: 定义全局常量; 注册 composer 自动加载器; 包含
\[yii
\[yii
\] 类文件; 加载应用配置; 创建一个应用实例并配置; 调用
\[yiibaseapplication::run()
\[yiibaseapplication::run()
\] 来处理请求。

 

16.栈和队列具有相同的()

a、抽象数据类型

b、逻辑结构

c、存储结构

d、运算

参考答案:b

答案解析:线性表、栈、队列的逻辑结构是一样的,都属于线性结构。只是他们对数据的运算不同,从而表现出不同的特点。

17.以下代码中$third的结果是多少?

小米2019年PHP工程师面试题和答案解析

 

 

 

a、array(1,2,3,4)

b、array(1,2)

c、array(3,4)

d、以上都不对

参考答案:b

答案解析:两个数组的array_merge()与两个数组相加不同: 如果键值为字符串: $arr1 = array("a"=>"aaa"); $arr2 = array("a"=>"bbb"); $arr3 = array_merge($arr1,$arr2); // bbb $arr4 = $arr1+$arr2; // aaa /* 如果两个数组的键值为字符串且相同,array_merge()操作,则后数组的值会覆盖前数组的值 如果两个数组的键值为字符串且相同,两个数组相加,则前数组的值会覆盖后数组的值 */ 如果键值为整型: $arr1 = array("aaa"); $arr2 = array("bbb"); $arr3 = array_merge($arr1,$arr2); // array( [0] => aaa [1] => bbb) $arr4 = $arr1+$arr2; // aaa /* 如果两个数组的键值为数字且相同,array_merge()操作,两数组的值不存在覆盖 如果两个数组的键值为数字且相同,两个数组相加,则前数组的值会覆盖后数组的值 */

 

18.正则表达式中,表示匹配非数字字符的字符是()?

a、\b

b、\d

c、\b

d、\d

参考答案:d

 

18.正则表达式中,表示匹配非数字字符的字符是()?

a、\b

b、\d

c、\b

d、\d

参考答案:d

答案解析:

元字符

描述

\

将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。

^

匹配输入字符串的开始位置。如果设置了regexp对象的multiline属性,^也匹配“\n”或“\r”之后的位置。

$

匹配输入字符串的结束位置。如果设置了regexp对象的multiline属性,$也匹配“\n”或“\r”之前的位置。

*

匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于o{0,}

+

匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

?

匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。

{n}

n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“bob”中的“o”,但是能匹配“food”中的两个o。

{n,}

n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

{n,m}

m和n均为非负整数,其中n

?

当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多的匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少的匹配“o”,得到结果 ['o', 'o', 'o', 'o']

.点

匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\s]”的模式。

(pattern)

匹配pattern并获取这一匹配。所获取的匹配可以从产生的matches集合得到,在vbscript中使用submatches集合,在jscript中则使用$0…$9属性。要匹配圆括号字符,请使用“”或“”或“”。

(?:pattern)

非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

(?=pattern)

非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“windows(?=95|98|nt|2000)”能匹配“windows2000”中的“windows”,但不能匹配“windows3.1”中的“windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

(?!pattern)

非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“windows(?!95|98|nt|2000)”能匹配“windows3.1”中的“windows”,但不能匹配“windows2000”中的“windows”。

(?

非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?

(?

非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?

此处用或任意一项都不能超过2位,如“(?

x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[zf]ood”则匹配“zood”或“food”。

[xyz]

字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。

[^xyz]

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

[a-z]

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

[^a-z]

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

\b

匹配一个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。

\b

匹配非单词边界。“er\b”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

\cx

匹配由x指明的控制字符。例如,\cm匹配一个control-m或回车符。x的值必须为a-z或a-z之一。否则,将c视为一个原义的“c”字符。

\d

匹配一个数字字符。等价于[0-9]。grep 要加上-p,perl正则支持

\d

匹配一个非数字字符。等价于[^0-9]。grep要加上-p,perl正则支持

\f

匹配一个换页符。等价于\x0c和\cl。

\n

匹配一个换行符。等价于\x0a和\cj。

\r

匹配一个回车符。等价于\x0d和\cm。

\s

匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

\s

匹配任何可见字符。等价于[^ \f\n\r\t\v]。

\t

匹配一个制表符。等价于\x09和\ci。

\v

匹配一个垂直制表符。等价于\x0b和\ck。

\w

匹配包括下划线的任何单词字符。类似但不等价于“[a-za-z0-9_]”,这里的"单词"字符使用unicode字符集。

\w

匹配任何非单词字符。等价于“[^a-za-z0-9_]”。

19.以下代码输出的结果是?

小米2019年PHP工程师面试题和答案解析

 

a、1

b、2

c、3

d、4

参考答案:a

答案解析:if($str==0),字符串和数字比较是否相等, 相当于 把$str 字符串隐性转换为数字,然后再比较,相当于 if( intval($str) == 0 ) 。if($str==0) 判断 和 if( intval($str) == 0 ) 是等价的,而和 if ($str) 是不一样的。if ($str) 可以判断 $str值有没有被初始化。有没有付值,只要付值,就返回true。 当然你也可以使用 $str="字符串";if($str===0){ echo "返回了true.";} ,就是 判断 $str的数据类型 和值 都和0的值 数据类型一样,才可以返回true。

 

20.fopen()不支持哪种打开方式?

a、c

b、z

c、x

d、a

参考答案:b

答案解析:fopen()支持“r、r+、w、w+、a、a+、x、x+、c、c+”10种方式。

 

21.下列哪一项不是关系型数据库的优势?

a、保持数据的一致性

b、由于以标准为前提,数据更新的开销小

c、可以进行join等复杂查询

d、易扩展,加一台新的服务器很快

参考答案:d

答案解析:关系型数据库扩展的时候比较费事。答案先d

(加入群677079770获取更多面试题答案。)

22.以下程序段 输出结果是?

echo 24%(-5);

a、5

b、4

c、-4

d、19

参考答案:b

答案解析:在php中,取模运算符%的结果和被除数的符号(正负号)相同。即$a%$b的结果和$a的符号相同。 因此24%(-5)的符号为正,结果为4.

 

23.大型信息系统是以信息技术和( )为支撑的大系统,具有规模庞大、分布广阔、采用多级网络结构、提供多种类型应用等特征。

a、通信技术

b、安全技术

c、数据处理技术

d、虚拟化技术

参考答案:a

答案解析:信息系统项目管理师教程第三版p113,1.9.1大型信息系统: 大型信息系统是指以信息技术和通信技术为支撑,规模庞大,分布广阔,采用多级网络结构,跨越多个安全域,处理海量的,复杂且形式多样的数据,提供多种类型应用的大系统。

 

24.某银行为用户提供网上服务,允许用户通过浏览器管理自己的银行账户信息。为保障通信的安全,该web服务器可选的协议是()。

a、pop

b、snmp 

c、http

d、https

参考答案:d

答案解析:常识。

 

25.mysql5.7中关于json类型的说明,不对的是那个

a、json数据可以做有效性检查

b、json数据中,还是需要遍历所有字符串才能找到数据

c、json使得查询性能提升

d、json支持部分属性索引,通过虚拟列的功能可以对json中的部分数据进行索引

参考答案:b

答案解析:原生的json优势如下: 1. 存储上类似text,可以存非常大的数据。 2. json有效性检查:插入的数据必须是json类型的字符串才行。 3. 相比于传统形式,不需要遍历所有字符串才能找到数据。 4. 支持索引:通过虚拟列的功能可以对json中部分的数据进行索引。

 

26下面php运行模式是模块模式的?

a、cgi

b、cli

c、apache2handler

d、fast-cgi

参考答案:c

答案解析:apache2handler是模块模式

 

27.想匹配 字符串 "abc 123" 中的数字,哪个正则表达式是正确的?

a、/\d*/

b、/[0-9]*/

c、/[^a-z]*/

d、/\d+/

参考答案:d

答案解析:这个是匹配数字,\d+ 表示至少配置一个数字,a和b都是没有至少这个含义,c这个不是数字。

 

28.虽然linux系统没有文件扩展名的概念,但是我们通常认为以()结尾的文件是shell脚本

a、exe

b、doc

c、sh

d、py

参考答案:c

答案解析:linux运维基本规范,非必须。

 

29.php的运行模式不包含下面的那个?

a、iasapi

b、fast-cgi

c、cli

d、apache2handler

参考答案:a

答案解析:应该为 isapi 是微软提供的面向internet服务的api接口。

 

二、多选题(共1题,每题5分)

1.如何让php网站运行更快?

a、压缩代码,去除无用的注释或空白

b、尽量使用php内置函数或扩展函数

c、用apc/xcache/opcache等缓存php的opcode

d、把服务器配置把fastcgi参数调整最大

参考答案:a,b,c

答案解析:d 错误,应该依据资源情况对fastcgi配置合适的参数,而不是一味的调到最大性能

 

不定期分享限时内容:(加入群677079770获取更多面试题答案和学习资料。)

 ★腾讯高级php工程师笔试题目 

 ★亿级pv高并发场景订单的处理 

 ★laravel开发天猫商城组件服务 

 ★战旗tv视频直播的架构项目实战 
小米2019年PHP工程师面试题和答案解析

 

小米2019年PHP工程师面试题和答案解析