试题
一、 选择题
1. 以下说法错误的是()
A. 在外部访问静态成员属性时,使用类名::静态成员属性名
B. 在外部访问静态成员属性时,使用$实例化对象->静态成员属性名
C. 在外部访问静态方法时,使用$实例化对象->静态方法名
D. 在外部访问静态方法时,使用类名::静态方法名
2. 如下程序近似地表示了一种在php4中无法实现的特性,这个特性叫()
<?php
class my_class {
function my_funct($my_params){
user_errors("Please define me",E_ERROR);
}
function b() {
return 10;
}
}
?>
A. 多重继承
B. 封装
C. 抽象方法
D. private方法
E. 函数重载
3. 以下有关phpinfo()函数的说法中,不正确的是()
A. 它可以被用来查询PHP的配置信息
B. 可以用他来修改PHP的环境配置
C. 可以利用他查看PHP是否启用了某个扩展库
D. $_SERVER中包含的内容可以在phpinfo()中查看
4. 以下关于MySql索引的说法中,不正确的是()
A. 500万数据的用户表user在性别字段sex上建立了索引,语句"select * from user where sex = 1" 并不会提速多少
B. 一般情况下不鼓励使用like操作,类似地 "like 'abc%'" 可以使用索引
C. 唯一索引运行空值,而主键不允许为空值,除此之外它们是相同的
D. 对于需要写入数据的操作,例如DELETE、UPDATE以及INSERT操作,索引会降低它们的速度
5. 以下说明正确的是()
A. 使用索引能加快插入数据的速度
B. 良好的索引策略有助于防止跨站攻击
C. 应当根据数据库的实际应用合理设计索引
D. 删除一条记录将导致整个表的索引被破坏
E. 只有数字记录行需要索引
6. 下列关于全文检索技术的说法中,不正确的是()
A. Sphinx是一个基于SQL的全文检索引擎,可以结合MySql做全文搜索,它可以提供比数据库本身更专业的搜索功能
B. Solr是新一代的全文检索组件,它比Lucene的搜索效率高很多,还能支持HTTP的访问方式,PHP调用Solr也方便
C. MySql中把一个字段建立FULLTEXT索引,就可以实现全文检索,目前MyISAM和InnoDB都支持FULLTEXT索引
D. Lucene附带的二元分词分析器CJKAnalyzer切词速度很快,能满足一般的全文检索需要
7. 默认情况下,PHP 把会话(Session) 数据存储在()里。
A. 文件系统
B. 数据库
C. 虚拟内容
D. 共享内容
E. 以上都不是
8. 以下关于大型网站的说法中,正确的是()
A . 大型网站程序异常后,程序员可以依据服务器日志信息定位错误,然后在服务器上用VIM修正错误即可。
B. 大型网站开发有很多细节和小网站存在巨大差异,如浏览次数,小网站用数据库记录,大型网站才用NoSQL来存储。
C. 大型网站选择开发语言很重要,PHP只适合开发中小型网站,并不适合开发大型网站
D. 虚拟机技术不能用在大型网站上,是因为虚拟机性能较差,而大型网站的访问压力太大,采用后服务器科能宕机
9. 以下关于NOSQL的说法中,不正确的是()
A. MongoDB支持CAP定理中的AP,MySQL支持CAP中的CA,全部都支持不可能存在
B. Redis支持字符串,哈希,列表,集合,有序集合等数据结构,目前Redis不支持事务
C. Memcache既支持TCP协议,也支持UDP协议,可以把PHP的Session存放到Memcache中
D. MongoDB不用先创建Collection的结构就可以直接插入数据,目前MongoDB不支持事务。
10. 在HTTP协议中,用于发送大量数据的方法是 ()
A. get
B. post
C. put
D. options
二、填空题
1. 在HTTP 1.0 中,状态401的含义是____________;如果返回 "找不到文件" 的提示,则可用heaer函数,其语句为________________。
2. 以Apache模块的方式安装PHP,在文件http.conf中首先要用语句_____动态装载PHP模块,然后用语句________使得Apache把所有扩展名PHP的文件都作为PHP脚本处理
3. PHP可以执行系统命令的函数是(至少写出3个) ____________________________________。
4. Cookie 存储在_________________,Session是将数据存储在______________,会话的生命周期默认为________________。
5. 语句include 和 require 都能把另外一个文件包含到当前文件中,他们的区别是_______________;为了避免多次包含同一文件,可以用语句________________来代替它们。
三、简答题
1. 面向对象的特征是什么?
2. 写出3中以上MySql数据库存储引擎的名称(提示:不区分大小写)
3. 如何优化MySQL数据库?
4. 程序、进程与线程的区别是什么?
5. PHP的垃圾回收机制是什么?
四、编程题
1. 如何快速下载一个远程HTTP服务器上的图片文件到本地
2. 输出用户的IP地址,并且判断用户的IP地址是否存在192.168.1.100 ~ 192.168.1.150之间。
3. 请写一个函数验证电子邮件的格式正确。
4.对于用户输入遗传字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则表达式验证,对于不符合要求的$string返回出错信息。
答案
一、选择题
1. 答案:B、C
分析:在类内部,一个静态方法调用另外一个静态方法(属性)的格式:self::静态方法(静态属性)。而在类外部访问静态方法(属性)的格式:类名::静态方法(属性)。此外,静态变量是属于类的,也就是说,在没有实例化对象时也可以访问静态变量。选项B、选型C正确。
2. 答案:C
分析:在面向对象编程语言中,抽象方法指一些只有方法声明,而没有具体方法体的方法。如果my_class是继承了父类,子类没有实现my_funct()方法,那么在调用子类的这个方法时会抛出一个错误。显然,这种方式简单地实现了类似抽象方法的功能。选项C正确。
3. 答案:B
分析:phpinfo()函数主要用来查看PHP配置信息、启用的扩展库和$_SERVER中包含的内容,但是不能用来修改PHP的环境变量。选项B正确。
4.答案:C
分析:唯一性索引列允许空值,而主键列不允许为空值,但除了这个不同外其他也并不是都相同的,如主键可以做外键,唯一索引不可以。选项C的说法是错误的。
5.答案:C
分析:索引的作用主要是帮助数据库快速朝朝对应的数据,并不能加快插入数据的速度,选项A错误。
索引不能够帮助防止跨站攻击,选项B错误
创建合理的索引需要分析苏杭巨款的实际用途并找出它的弱点。优化脚本中的冗余查询,同样也能提高数据库效率。索引是占用物理空间的,所以在实际的应用中要合理设计使用索引。选项C正确
索引是一种表结构,删除一条数据也不会影响到整个表的索引,并且索引不一定是数字,也可以是字符串。选项D、选项E错误。
6.答案:B
分析:Sphinx是要给基于SQL的全文检索引擎,可以结合MySQL\PostgreSQL做全文搜索,它可以提供比数据库本身更专业的搜索,使得应用程序更容易实现专业化的全文搜索。
Solr是一个独立的企业级搜索应用服务器,用户可以通过HTTP请求访问它,它是采用Java5开发,基于Lucene的全文搜索服务器,同时对其进行扩展,提供了比Lucene更加丰富的查询语言,实现了可配置、可扩展并查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。Solr比Lucene的搜索效率高很多,但是PHP调用Solr并不方便,选项B的说法错误,所以,选项B正确
MySQL中MyISAM和InnoDB都是支持FULLTEXT全文索引的。全文搜索引擎可以在不使用模板匹配操作的情况下查找单词或短语。
7.答案:A
分析:默认情况下,PHP把所有会话信息存储在/tmp文件夹中;在没有这个文件夹中操作系统中(例如windows),必须在php.ini 中给session.save_path设置一个合适的位置(例如C:\Temp)
8.答案:B
分析:当大型网站出现异常后,可以根据服务器的日志信息定位错误,但是要修改错误并不是简单地通过vim就可以解决地,还需要分析错误发生地原因,根据错误去修改程序中相应地bug,避免异常再次发生。如果是服务器地配置文件出现地问题导致错误,那么用vim修改好配置文件后,还需要重启服务器。选项A错误。
大型网站地访问次数非常多,不能像小网站针对浏览次数那样可以时常向数据库进行写操作,因为这样会使数据库负担加重。所以大型网站会通过NoSql减少数据库的请求和操作,从而把浏览次数缓存在NoSQL中。选项B正确。
开发语言只是一个工具,目前PHP是用于开发网站最多的语言,并不是只能开发中小型网站,它也可以用来开发大型的网站,例如亚马逊、优酷、51job等,选项C错误。
虚拟机技术并不是不可用在大型网站上,因为它可以产生非常多的虚拟机将大型网站的流量进行分散,减少同一个服务器的访问压力,将压力分散到不同的虚拟机中,而虚拟机的性能问题是可以通过分配内存解决的。选项D错误。
9.答案:B
分析:Redis目前是可以支持简单的事务的,由于Redis是单线程来处理所有client的请求,一般情况下,Redis在接受到一个client发来的命令后会立即处理并返回处理结果,但是当一个client在一个链接中发出multi命令,这个链接会进入一个事务上下文,该连接后续的命令并不是立即执行的,而是先放到一个队列中。当此连接收到exec命令后,Redis会顺序地执行队列中地所有命令,并将所有命令地运行结果打包一起返回给client,然后此连接结束事务上下文。选项B地说法错误。
10.答案:B
分析:get方法是通过URL路径传递数据,而URL地长度和大小有限制,不能进行大量数据地发送,而POST可以发送大量数据。
二、填空题
1. 答案:客户端在授权头信息中没有有效地身份信息时访问受到密码保护地页面;header("HTTP/1.0 404 Not Found");.
2.答案:1) LoadModule;2) AddType application/x-https-php.hp。
分析:在用Apache模块地方式安装php时,需要现在http.conf配置中加入LoadModule说明加载PHP模块地功能。保存好配置文件后,还需要使用AddType application/x-http-php.php指明Apache对php文件地支持。
3.答案:可以执行系统命令地函数有:1)system()函数可以执行外部程序并显示输出;2)exec()函数可以执行一个外部程序;3. popen()函数可以打开进程文件指针。
4.答案:客户端;服务端;1440s
分析:Cookie存储在客户端,而Session存储在服务器端,PHP的Session默认有效期是1440s(24min),既用户在24min内没有刷新,当前Sesion就会失效。如果用户关闭了浏览器,Session也会消失。
5.答案:include会产生一个警告并继续执行后面的代码,而require则提示是致命错误;require_once()或include_once()。
分析:include和require引用文件的区别在于,当引用文件出错时,include会产生一个警告并继续执行后面的代码,而require则提示是致命错误,并停止继续执行。为了避免多次包含同一个文件,可以使用require_once()或include_once()代替它们。
三、简单题
1.答案:面向对象的主要特征有抽象、继承、封装和多态。
1)抽象:抽象就是忽略一个主体中与当前目标无关的那些方面,以便更充分地注意与当前目标有关地方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且子类可以修改或增加新的方法使之更适合特殊的需要。
3)封装:封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或对象操作,对不可信的信息进行隐藏。
4)多态:多态是指允许不同类的对象对同一消息做出相应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。
2.答案:MyISAM、InnoDB、DBD(Berkeley DB)、Merge、Memory(Heap)、Example、Federated等。以下为4种常用数据库存储引擎地简单介绍。
MyISAM:默认地MySQL插件式存储引擎。如果应用是以读写和插入操作为主,只有很少地更新和删除操作,并且对事务地完整性、并发性要求不是很高,那么可选用此种存储引擎。
InnoDB:用于事务处理应用程序,支持外键。如果应用对事务地完整性有比较高地要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多地更新,删除操作,那么InnoDB比较合适。InnoDB存储引擎除了能有效地降低由于删除和跟新操作导致地锁定,还可以确保事务地完整提交和回滚。
Memory:将所有地数据保存在RAM中,在需要快速定位记录和其他类似数据地环境下,可提供极快地访问。Memory的缺陷首先是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表数据可以恢复,数据库异常终止表中的数据是可以恢复的。Memory表通常用于更新不太频繁的小表,从而快速得到访问结果。
Merge:用于将一系列等同地MyISA表以逻辑方式组合在一起,并作为一个对象引用它们。Merge表的优点在于可以突破对单个MyISAM表大小的限制,并且将不同的表分布在多个磁盘上,可以有效地改善Merge表地访问效率。
3. 答案:优化数据库主要有以下几个方面:
1)库表设计方面。设计结构良好的数据库表,考虑良好的范式规则,避免join操作,提高查询效率。
2)系统脚骨设计方面。散列方法,把海量数据散列到不同的表中,进行快慢表设计,进行服务器主从设计。
3)索引的使用。给所有经常查询的字段增加适当的索引。
4)优化SQL语句,减少distinct、group、join等语句的操作。
4. 答案:程序、进程与线程的区别
程序:一组指令的有序结合,是静态的指令,是永久存在的。
进程:具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单元。进程的存在是暂时的,是一个动态概念。
线程:线程的一个实体,是CPU调度和运行的基本单元,是比进程更小的能独立运行的基本单元。其本身基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(程序计数器、一组寄存器和栈)。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
5.答案:PHP可以自动进行内存管理,清除不在需要的对象。PHP使用了饮用计数的垃圾回收机制。每个对象都内含一个引用计数器,当reference连接到对象是,计数器加1.当reference离开作用域或被设置为NULL时,计数器减1.当某个对象的引用计数器为0时,则PHP认为不在需要使用这个对象,释放其所占的内存空间。
四、编程题
1.答案:先通过fopen()函数打开要下载地图片路径,然后使用fread()函数读取图片,再在本地打开指定存储图片的目录,将读取到的图片信息写入该目录内的文件中,既可远程下载一个图片到本地。实现代码如下:
<?php
$file = "https://image.upwqy.com/upload/default/20230823/8c3f178663718870894503faaba38a6e.png";
$fp = fopen($file,'rb');
$img = fread($fp,100000);
$dir = "./";
$local = fopen($dir.'/'.basename($file),'w');
fwrite($local,$img);
?>
2.答案:在获取用户的IP地址后,将IP地址转换为数值,然后进行区间比较查询是否在IP地址中。
实现代码如下:
<?php
$IP = getenv("REMOTE_ADDR");
$nip = str_replace(".","",$IP);
if($nip > 1921681100 and $nip < 1921681150) {
echo $IP."在192.168.1.100 --- 192.168.1.150之间";
} else {
echo $IP."不在192.168.1.100 --- 192.168.1.150之间";
}
?>
3.答案:实现代码如下:
如果匹配到的格式时正确的邮箱格式,那么函数返回1,否则返回0.
分析:邮箱首尾两个斜杠/是正则表达式的限定符,这是Perl正则的标准,而PHP与Perl有相同的正则规范。两个斜杠之间表示的是正则内容,后面的i表示忽略大小写。
这个正则表达式表示的含义如下:
1)必须以([0-9A-Za-z\\-_\\.]+)开头,也就是说,邮件地址以多个字母、数组、"-"或"."开头。
2)紧接着是字符"@"
3)然后是多个字母或数字的字符串,接着是一个字符"."和两个或三个字母;后面一部分可有可无,既一个"."后面跟着两个字母。
4)邮件的结束符是满足3)的字符串。
4.答案:通过preg_match()函数匹配符合正则规则的字符串,匹配大于0的数字、英文和逗号的表达式为/^([1-9,])+$/,"/"表示后跟的字符为特殊字符不解析,"^"表示匹配的字符必须在开头,"[1-9,]"表示匹配大于0的数字和英文逗号,"+"表示匹配加号前面的字符1次或n次,"$"表示匹配最末尾的字符。
实现代码如下:
<?php
function check($str) {
if(preg_match("/^([1-9,])+$/",$str)){
return true
}
return false
}
$str = 12311;
if(check($str)) {
echo "数字";
} else {
echo "不是数字";
}
?>