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

PHP程序员搜狐2019年面试题和答案解析

程序员文章站 2022-04-19 10:33:25
一、单选题(共27题,每题5分) 1.阅读下面PHP代码,并选择输出结果( ) A、0 B、1 C、2 D、3 参考答案:D 答案解析:static属性常驻内存 2.PHP单例模式操作描述错误的是? A、单例模式第一次实例会被建立以后执行可以直接使用 B、需要一个保存类的唯一实例的静态成员变量 C、 ......

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

1.阅读下面php代码,并选择输出结果( )

PHP程序员搜狐2019年面试题和答案解析

 

 

 

a、0

b、1

c、2

d、3

参考答案:d

答案解析:static属性常驻内存

2.php单例模式操作描述错误的是?

a、单例模式第一次实例会被建立以后执行可以直接使用

b、需要一个保存类的唯一实例的静态成员变量

c、构造函数和克隆函数必须声明为私有的

d、必须提供一个访问这个实例的公共的静态方法

参考答案:a

答案解析:php中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时, 都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎php单例模式就没有什么意义了, 所以php单例模式只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时有意义

 

3.下面那个不是mysql存储引擎的锁类型?

a、表锁

b、页锁

c、行锁

d、无

参考答案:b

答案解析:mysql中myisam是有表锁,innodb是行锁,基于索引加锁,如果where条件没有索引,是所有行加锁;sql server才有页锁

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

 

4.以下哪条不是php语言的特性?

a、开源

b、免费

c、基于客户端

d、便捷高效

参考答案:c

答案解析:php语言的特性为:开源、免费和便捷高效。

 

5.关于php模式修饰符说法错误的是?

a、i 大小写不敏感匹配

b、m ^将只匹配字符串的开头

c、x 空白和#注释将被忽略

d、将替换后的字符串作为php代码评估执行

参考答案:b

答案解析:m为增强的行锚点模式,\\n的前后也会被认为结束和开始

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

 

6.关于laravel中间件错误的是?

a、运行artisan 命令 make:middleware 创建新的中间件

b、可定义前置 & 后置中间件

c、中间件是代理模式

d、中间件是中介模式

参考答案:c

答案解析:运行artisan 命令 make:middleware 创建新的中间件 可定义前置 & 后置中间件

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

7.要激活gd库,必须启用配置文件中的( )命令

a、php_gd2.dll

b、php.dll

c、php.ini

d、php_mbstring.dll

参考答案:a

答案解析:php中要想使用gd库必须启用php_gd2.ll动态连接库文件

 

8.关于在php中的socket,说法错误的是

a、可使用fsocketopen函数建立socket连接

b、工作在第七层,可基于tcp和udp协议

c、在php中默认超时时间是30秒

d、工作在第四层,可基于tcp和udp协议

参考答案:b

答案解析:工作在第四层,可基于tcp和udp协议 在php中默认超时时间是30秒

 

9.json格式数据,错误的是?

a、json一种轻量级的数据交换格式

b、json采用完全独立于语言的文本格式,但是也使用了类似于c语言家族的习惯(包括c, c++, c#, java, javascript, perl, python等)

c、这些特性使json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

d、值是无序列表

参考答案:d

答案解析:值是有序列表

 

10.关于php数组排序原理,错误的是?

a、申请n个额外空间

b、遍历双链表

c、排序后单链表中节点的位置发生变化,因而调整指定指向

d、设置hashtable的plisttail

参考答案:c

答案解析:1.申请n个额外空间 2.遍历双链表 3.调用排序函数zend\_qsort(内部是快速排序算法)对数组排序 4.排序后,双链表中节点的位置发生变化,因而调整指定指向 5.遍历数组,分别设置每一个节点的plistlast和plistnext 6.设置hashtable的plisttail

 

11.关于redis的应用场景,以下说法不正确的是?

a、交集,并集,差集

b、计数器、队列

c、排行榜

d、新闻发布系统

参考答案:d

答案解析:缓存——热数据、计算器、队列、位操作、最新列表、分布式锁与单线程机制、交集,并集,差集、排行榜,这些都是典型的 redis处理场景。答案为d

 

12.关于漏洞扫描的描述,以下哪项是错误的?

a、漏洞扫描是一种基于网络远程检测目标网络或主机安全性脆弱性的技术,可以被用来进行模拟攻击实验和安全审计.

b、漏洞扫描用来探测目标主机系统是否存在漏洞,一般是对目标主机进行特定漏洞的扫描.

c、漏洞扫描就是一种被动的防范措施,可以有效避免黑客攻击行为.

d、可以根据ping扫描和端口扫描的结果进行漏洞扫描.

参考答案:c

答案解析:漏洞扫描是一种主动的防范措施,能有效避免黑客攻击行为,做到防患于未然安全扫描就是一种主动的防范措施

 

13.php程序使用utf-8编码, 以下程序输出结果是什么?
PHP程序员搜狐2019年面试题和答案解析

 

a、9

b、13(gbk)

c、18

d、17(utf8)

参考答案:d

答案解析:strlen() 函数返回字符串的长度。utf-8编码一个汉字是3个字符,5个英文字符+3字符\*4个中文=17个字符

 

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

a、抽象数据类型

b、逻辑结构

c、存储结构

d、运算

参考答案:b

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

 

15.为什么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、多字段联合唯一索引的情况),该表的存取效率就会比较差

 

16.对以下javascript代码说法正确的是?
PHP程序员搜狐2019年面试题和答案解析

 

a、值为 0

b、obj2引用了obj1的方法

c、执行call时,函数里的this指向obj1

d、最后obj1的value值为6

参考答案:b

答案解析:调用了 call ,则obj2 , add的this就指向了 obj2 。就像obj2借用了obj1的方法

 

17.以下关于引用说法错误的是?

a、引用不是c的指针

b、引用不允许用两个变量来指向同一个内容

c、用引用可以传递变量

d、可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。

参考答案:b

答案解析:引用是允许用两个变量来指向同一个内容的

 

18.goaccess虽然很强大但是他不能做以下哪项工作?

a、生成统计数据带宽统计

b、可生成html报告

c、可发送http请求

d、各http状态码统计

参考答案:c

答案解析:goaccess:是一款开源、实时,运行在命令行终端下的web日志分析工具。该工具提供快速、 多样的http状态统计,可以令管理员不再纠结于统计各类数据 goaccess主要以统计为主

 

19.关于线程的,说法错误的是?

a、线程是进程的一个实体,是cpu调度和分派的基本单位

b、它是比进程更小的能独立运行的基本单位

c、线程和进程一样拥有系统资源

d、线程自己基本上不拥有系统资源

参考答案:c

答案解析:线程是指进程内的一个执行单元,也是进程内的可调度实体。线程自己基本上不拥有系统资源

 

20.关于php文件指针的说法错误的是?

a、feeek() 移动文件指针到指定位置

b、fcreate() 用于创建一个文件

c、rewind()将文件指针设为文件流的开头

d、feof() 测试文件指针是否到达文件结束的位置

参考答案:b

答案解析:php中 打开和创建文件都是fopen()函数,不存在fcreate()函数

 

21.下边是php的函数而不是语言结构的是?

a、eval()

b、require_once()

c、list()

d、empty()

参考答案:b

答案解析:仅仅是提纲挈领、提醒下大家注意 php的语言结构和函数这个点、可能过多的时候我们认为empty、list、isset等这类的是函数、实际上不上。 语言结构列表 : echo() print() die() isset() unset() include(),注意,include_once()是函数 require(),注意,require_once()是函数 array() list() empty()

 

22.该正则可以匹配下列哪个字符串? /^sjm/

a、absjm

b、phpsjm

c、sjmphp

d、phpsimd

参考答案:c

答案解析:该正则匹配以sjm开头的字符串

 

23.下列哪个选项可以查看php运行模式?

a、php -r phpinfo();|find / grep"server api"

b、php -r "echo php_sapi_name();"

c、phpinfo();

d、以上都是

参考答案:d

答案解析:三个都可以查看php的运行模式

 

24.以下inode不包含的是?

a、文件的读写权限

b、文件的位置

c、当前目录下的文件数

d、文件的时间戳

参考答案:c

答案解析:inode中存的是该文件种的信息,包含文件的字节数,uid和gid,读写执行权限,时间戳ctime、mtime、atime,链接数:有多少个文件名指向这个inode,文件数据block位置

 

25.以下代码输出的结果是?
PHP程序员搜狐2019年面试题和答案解析

 

 

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

 

26.把css样式表与html网页关联,不正确的方法是( )

a、在html文档的<head>标签内定义css样式

b、用@import引入样式表文件

c、在html文档的<!-- -->标签内定义css样式

d、用<link>标签链接网上可访问的css样式表文件

参考答案:c

答案解析:是html注释的表示方式,在这里定义css样式无效。

 

27.一下哪个不是php的运行模式?

a、cgi

b、fastcgi

c、apache2handler

d、apache

参考答案:d

答案解析:前三个是常用的运行模式,apache是web服务器软件

 

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

1.分库分表之后,id 主键如何处理?

a、单库生成自增 id

b、设置数据库 sequence 或者表自增字段步长

c、uuid

d、snowflake 算法

参考答案:a,b,c,d

答案解析:

snowflake 算法

a、b、c 也是理论可行的,但是都各自有缺点,最好用snowflake 算法。

snowflake 算法是 twitter 开源的分布式 id 生成算法,采用 scala 语言实现,是把一个 64 位的 long 型的 id,1 个 bit 是不用的,用其中的 41 bit 作为毫秒数,用 10 bit 作为工作机器 id,12 bit 作为序列号。

1 bit:不用,为啥呢?因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。 41 bit:表示的是时间戳,单位是毫秒。41 bit 可以表示的数字多达 2^41 - 1,也就是可以标识 2^41 - 1 个毫秒值,换算成年就是表示69年的时间。 10 bit:记录工作机器 id,代表的是这个服务最多可以部署在 2^10台机器上哪,也就是1024台机器。但是 10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意思就是最多代表 2^5个机房(32个机房),每个机房里可以代表 2^5 个机器(32台机器)。 12 bit:这个是用来记录同一个毫秒内产生的不同 id,12 bit 可以代表的最大正整数是 2^12 - 1 = 4096,也就是说可以用这个 12 bit 代表的数字来区分同一个毫秒内的 4096 个不同的 id。

 

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

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

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

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

 ★战旗tv视频直播的架构项目实战 
PHP程序员搜狐2019年面试题和答案解析

 

 PHP程序员搜狐2019年面试题和答案解析