史上最难PHPer笔试题,40分就能月薪过万!附答案
请批判性的学习,欢迎大牛指正错误
1、有关PHP字符串的说法,不对的是:
A、如果一个脚本的编码是 ISO-8859-1,则其中的字符串也会被编码为
ISO-8859-1。
B、PHP的字符串在内部是字节组成的数组,用花括号访问或修改字符串对多字节字符集很不安全。
C、substr()、strpos()、strlen()、htmlentities()
处理字符串时依据的编码方式是相同的。
D、一个布尔值 Boolean 的 true 被转换成 string 的 “ 1 ”,false
被转换成空字符串。
2、下列Linux下Shell命令的说法,不正确的是:
A、crontab作业:“ 0 5,6,7 * *
*/home/www/test.sh ”意思是每天的第5,6,7小时执行脚本。
B、“ find ./ -type f -name "*.php"
-print0 | xargs -0 wc -l ” 能统计当前目录下PHP代码的总行数。
C、Shell下执行命令“ :(){:|:& };:
” ,系统会没有响应,只能重启了。
D、“ $@ ”将函数中所有参数当成单个字符串,“ $*
”把函数的所有参数当一个数组。
3、以下正则表达式的说法,错误的是:
A、POSIX兼容正则没有修正符,PERL兼容正则中可能用到修正符。
B、{n,},n是一个非负整数,意思是至少匹配n次;
?等价于匹配长度{0,1} 。
C、PERL风格正则默认的非贪婪模式尽可能少的匹配所搜索的字符串。
D、在执行效率上 preg_match
比ereg的速度要略快一些。
4、关于PHP数组的说法,不对的是:
A、处理PHP数组,foreach的效率要比for高很多,是因为foreach走的是链表的遍历。
B、PHP数组底层采用的是循环链表,正向、反向遍历数组都很方便。
C、无论是
array(1, 2, 3) 还是array(1 => 2, 2=>
4)等,本质上都是hash_table。
D、PHP数组插入和删除操作的时间复杂度都是O(1)。
5、有关PHP引用的说法,错误的是:
A、unset一个引用,只是断开了变量名和变量内容之间的绑定,这并不意味着变量内容被销毁了。
B、PHP引用本质就是指针,在函数调用范围内可以绑定到别的变量上面。
C、在一个对象的方法中,$this永远是调用它的对象的引用。
D、可以将一个变量通过引用传递给函数,这样该函数就可以修改其参数的值。
6、以下对PHP命名空间的说法,不对的是:
A、访问任意全局类、函数或常量,都可以使用完全限定名称,例如
\strlen() 或 \Exception 或 \INI_ALL。
B、关键字 namespace
可用来显式访问当前命名空间或子命名空间中的元素,它等价于类中的 this
操作符。
C、任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。
D、常量__NAMESPACE__的值是当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它就是一个空字符串。
7、下列PHP相关的说法,错误的是:
A、PHP官方推荐使用Apache的prefork模式,此模式下建议选用Non
Thread Safe版本。
B、FastCGI下选择Non Thread Safe版本;ISAPI下选择Thread
Safe版本。
C、用PHP彩蛋能大致获取PHP的版本,PHP中一共隐藏了4个彩蛋。
D、官方不建议将Non Thread
Safe用于生产环境,所以我们选择Thread Safe
版本的PHP来使用。
8、关于JavaScript的说法,不正确的是:
A、语句“ alert(1==true); ” 和语句
“ alert(2==true); ” 的结果都是true。
B、JS的数组其实就是对象,用for
in语句可以遍历数组的所有属性。
C、JS中的对象通过引用来传递,它们永远不会被复制。
D、JS中的函数就是对象,所以它们可以像任何其他的值一样被使用。
9、有关PHP面向对象的说法,不对的是:
A、要实现一个接口,使用
implements 操作符,类中必须实现接口中定义的所有方法,否则会报一个致命错误。
B、类名可以是任何非 PHP
保留字的合法标签,汉字也可以作为PHP的类名。
C、如果PHP的子类中定义了构造函数,则创建子类的对象时,会隐式的调用其父类的构造函数。
D、序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
10、以下PHP高级特性的说法,正确的是:
A、我们可以定义一个类去实现预定义接口Iterator,然后就能像访问数组一样访问这个类创建的对象。
B、spl_autoload_register()
提供了一种更加灵活的方式来实现类的自动加载,不再建议使用 __autoload() 函数。
C、PHP在对象中调用一个不可访问方法时,__invoke()
方法会被自动调用。
D、匿名函数也叫闭包函数,常用作回调函数参数的值,但是不能作为变量的值来使用。
11、下列关于HTTP协议的说法,错误的是:
A、如果本地开启了Cookie,那么每打开一个网址,HTTP请求就会把相应的Cookie传给Web服务器。
B、HTTP响应的状态码为301意思是暂时地把内容转移到一个新的URL,但是老的URL还没有废除。
C、HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,绝大多数的Web开发都是基于HTTP协议。
D、绝大多数的Web开发离不开Cookie,如果禁用Cookie导致Session失效,可以通过URL来传递sessionID。
12、以下对PHP文件处理的说法,正确的是:
A、file_get_contents()
函数能用来抓取网页数据,但是没办法设置超时时间 。(虽然不能直接设置超时时间,但可以通过其他方法设置超时)
B、file()
函数既能读取文本文件也能读取二进制文件,但是读取二进制文件有可能出现安全问题。(从PHP 4.3
开始本函数可以安全用于二进制文件。早期的版本则不行)
C、如果表单中没有选择上传的文件,则 PHP 变量 的值将为NULL
。
D、fsockopen()和fputs() 结合起来可以发送邮件,也可以用来抓取网页内容,下载ftp文件等。(上传ftp文件)
13、关于Mysql索引的说法,不对的是:
A、500万数据的用户表user在性别字段sex上建立了索引,语句
“select * from user where sex=1 ” 并不会提速多少。
B、一般情况下不鼓励使用like操作,类似的“ like
"abc%" ”
可以使用到索引。
C、唯一索引允许空值,而主键索引不允许为空值,除此之外它们是相同的。
D、对于需要写入数据的操作,比如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度。
14、下列有关数据结构的说法,不正确的是:
A、直接选择、二分法、冒泡、基数等排序方法都是稳定的排序方法。
B、5000个无序的元素,希望用最快的速度挑选出其中前50个最大的元素,最好选用堆排序。
C、栈和队列都只允许在端点处插入和删除元素。
D、深度优先遍历是一个递归算法,在遍历的过程中,先访问的点被压入栈底。
15、以下关于NOSQL的说法,不对的是:
A、MongoDB支持CAP定理中的AP,MySQL支持CAP中的CA,全部都支持不可能存在。
B、Redis支持字符串、哈希、列表、集合、有序集合等数据结构,目前Redis不支持事务。
C、Memcache既支持TCP协议,也支持UDP协议,我们可以把PHP的Session存放到Memcache中。
D、MongoDB不用先创建Collection的结构就可以直接插入数据,目前MongoDB不支持事务。
16、关于设计模式的说法,错误的是:
A、观察者模式中,观察者可以改变被观察者的状态,再由被观察者通知所有观察者依据被观察者的状态进行。
B、MVC模型的基本工作原理是基于观察者模式,实现是基于命令模式。
C、设计模式的核心原则是:"开-闭"原则:对扩展开放,对修改关闭。
D、创立型模式的根本意图是要把对象的创建和使用分离的责任进行分离,从而降低系统的耦合度。
17、下列关于常见开源PHP系统的说法,不对的是:
A、Laravel要求PHP版本>=
5.3
,它拥有更富有表现力的语法、高质量的文档、丰富的扩展包,被称为“巨匠级PHP开发框架”。
B、Discuz采用单一入口的设计模式,这样的模式在权限控制,URL重写等方面都很有优势。
C、HDWiki的插件共有三种类型,钩子类型、前台应用和后台应用类型,在后台可以在线安装HDWiki插件。
D、WordPress的博客程序定位,简单的数据库层等都注定了他不能适应大数据。
18、以下关于“表驱动法”的描述,错误的是:
A、表驱动法可以作为复杂继承结构的替代方案,难点在于一个经过深思熟虑的查询表。
B、表驱动法是一种编程模式——从数据库表里面查找信息而不使用逻辑语句。
C、凡是能通过逻辑来选择的事物,都可以通过查表来选择。
D、表驱动法查找无规则分布的数据采用阶梯访问的方法最佳。
19、下列关于全文检索技术的说法,不对的是:
A、Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL做全文搜索,它可以提供比数据库本身更专业的搜索功能。
B、Solr是新一代的全文检索组件,它比Lucene的搜索效率高很多,还能支持HTTP的访问方式,PHP调用Solr也很方便。
C、MySQL中把一个字段建立FULLTEXT索引,就可以实现全文检索,目前MyISAM和InnoDB的table都支持FULLTEXT索引。
D、Lucene附带的二元分词分析器CJKAnalyzer切词速度很快,能满足一般的全文检索需要。
20、以下关于大型网站的说法,正确的是:
A、大型网站程序异常后,程序员可以依据服务器日志信息定位错误,然后在服务器上用vim修正错误即可。
B、大型网站开发很多细节和小网站有巨大差异,如“浏览次数”,小网站用数据库记录,大型网站常采用NoSQL来存储。
C、大型网站选择开发语言很重要,PHP只适合开发中小型网站,并不适合开发大型网站。
D、虚拟机技术不能用在大型网站上,是因为虚拟机性能较差,而大型网站的访问压力太大,采用后服务器可能会宕机。
答案:
1、C
(编码方式不同,substr()操作中文的时候会乱码)
2、D
($@是数组,$*是字符串,$#是参数个数)
3、C
(默认的是贪婪模式)
4、B
(PHP数组使用的是双向链表,不是循环链表)
5、B
(PHP引用不是指针,是给一个变量起个别名,传递的不是空间地址)
6、B
(应该是等价于self)
7、C
(没人知道一共有多少个彩蛋,不然就不叫彩蛋了)
8、D
(JS的函数不是对象)
9、B
(汉字不能作为类名,参考PHP命名规范)
10、D
11、B
(301是永久转向)
12、C
(如果表单中没有选择上传的文件,则
PHP 变量 $_FILES[‘userfile‘][‘size‘] 的值将为 0,$_FILES[‘userfile‘][‘tmp_name‘] 将为
none)
13、C
(唯一索引当然不允许空值,不然就不叫唯一了)
14、A
(不稳定:简单选择排序,希尔排序,快速排序,堆排序,冒泡
稳定:直接插入排序,归并排序,基数排序)
15、B
(Redis支持事务,MongoDB不支持事务)
16、A
(观察者不能改变被观察者的状态)
17、C
(插件按照是否需要在前台显示,可以分为两类:前台展示类插件和非前台展示类插件)
18、D
(阶梯结构的基本想法是,表中的记录对于不同的数据范围(连续点)有效,而不是对不同的数据点(离散点)有效)
19、C
(InnoDB不支持FULLTEXT索引)
20、D