一、选择题2. 以下程序近似地表示了一种在PHP4中无法实现的特性,这个特性叫______
<?php
class my_class{
function my_funct($my_param){
user_errors("Please define me",E_ERROR);
}
function b(){
return 10;
}
}
?>
- A.多重继承
- B.封装
- C.抽象方法
- D.private方法
- E.函数重载
A B C D E
C
[解析] 在面向对象编程语言中,抽象方法指一些只有方法声明,而没有具体方法体的方法。如果my_class是继承了父类,子类没有实现my_funct()方法,那么在调用子类的这个方法时会抛出一个错误。显然,这种方式简单地实现了类似抽象方法的功能。选项C正确。
所以,本题的答案为C。
二、填空题1. 在HTTP 1.0中,状态码401的含义是______;如果返回“找不到文件”的提示,则可用header函数,其语句为______。
客户端在授权头信息中没有有效的身份信息时访问受到密码保护的页面;header("HTTP/1.0 404 Not Found");。
2. 以Apache模块的方式安装PHP,在文件http.conf中首先要用语句______动态装载PHP模块,然后用语句______使得Apache把所有扩展名为PHP的文件都作为PHP脚本处理。
①LoadModule;②AddType application/x-httpd-php.php。
[解析] 在用Apache模块的方式安装PHP时,需要先在http.conf配置文件中加入LoadModule说明加载PHP模块的功能。保存好配置文件后,还需要使用AddTypeapplication/x-httpd-php.php指明Apache对PHP文件的支持。
3. PHP可以执行系统命令的函数是(至少写出3个)______。
可以执行系统命令的函数有:①system()函数可以执行外部程序并显示输出;②exec()函数可以执行一个外部程序;③popen()函数可以打开进程文件指针。
4. Cookie存储在______,Session是将数据存储在______,会话的生命周期默认为______。
客户端;服务端;1440s。
[解析] Cookie存储在客户端,而Session存储在服务器端,PHP中的Session默认有效期是1440s(24min),即用户在24min内没有刷新,当前Session就会失效。如果用户关闭了浏览器,Session也会消失。
5. 语句include和require都能把另外一个文件包含到当前文件中,它们的区别是______;为了避免多次包含同一文件,可以用语句______来代替它们。
include会产生一个警告并继续执行后面的代码,而require则提示是致命错误;require_once()或include_once()。
[解析] include和require引用文件的区别在于,当引用文件出错时,include会产生一个警告并继续执行后面的代码,而require则提示是致命错误,并停止继续执行。为了避免多次包含同一个文件,可以使用require_once()或include_once()代替它们。
三、简答题1. 面向对象的特征是什么?
面向对象的主要特征有抽象、继承、封装和多态。
1)抽象:抽象就是忽略一个主体中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。
2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且子类可以修改或增加新的方法使之更适合特殊的需要。
3)封装:封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的信息进行隐藏。
4)多态:多态是指允许不同类的对象对同一消息做出响应。多态包括参数化多态和包含多态。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。
2. 写出3种以上MySQL数据库存储引擎的名称(提示:不区分大小写)。
MyISAM、InnoDB、DBD(Berkeley DB)、Merge、Memory(Heap)、Example、Federated等。以下为4种常用数据库存储引擎的简单介绍。
MyISAM:默认的MySQL插件式存储引擎。如果应用是以读写和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么可选用此种存储引擎。
InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB比较合适。InnoDB存储引擎除了能有效地降低由于删除和更新操作导致的锁定,还可以确保事务的完整提交和回滚。
Memory:将所有的数据保存在RAM中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。Memory的缺陷首先是对表的大小有限制,太大的表无法缓存在内存中,其次要确保表数据可以恢复,数据库异常终止后表中的数据是可以恢复的。Memory表通常用于更新不太频繁的小表,从而快速得到访问结果。
Merge:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。Merge表的优点在于可以突破对单个MyISAM表大小的限制,并且将不同的表分布在多个磁盘上,可以有效地改善Merge表的访问效率。
3. 如何优化MySQL数据库?
优化数据库主要有以下几个方面:
1)库表设计方面。设计结构良好的数据库表,考虑良好的范式规则,避免join操作,提高查询效率。
2)系统架构设计方面。散列方法,把海量数据散列到不同的表中,进行快慢表设计,进行服务器主从设计。
3)索引的使用。给所有经常查询的字段增加适当的索引。
4)优化SQL语句,减少distinct、group、join等语句的操作。
4. 程序、进程与线程的区别是什么?
程序、进程与线程的区别见下表。
名 称
|
描 述
|
程序
|
一组指令的有序结合,是静态的指令,是永久存在的
|
进程
|
具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单 元。进程的存在是暂时的,是一个动态概念
|
线程
|
线程的一个实体,是CPU调度和运行的基本单元,是比进程更小的能独立运行的基本单元。其本身基本上 不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和栈)。一个线程可以创 建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行
|
简而言之,一个程序至少有一个进程,一个进程至少有一个线程。
5. PHP的垃圾回收机制是什么?
PHP可以自动进行内存管理,清除不再需要的对象。PHP使用了引用计数的垃圾回收机制。每个对象都内含一个引用计数器,当reference连接到对象时,计数器加1。当reference离开作用域或被设置为NULL时,计算器减1。当某个对象的引用计数器为0时,则PHP认为不再需要使用这个对象,释放其所占的内存空间。
四、编程题1. 如何快速下载一个远程HTTP服务器上的图片文件到本地?
先通过fopen()函数打开要下载的图片路径,然后使用fread()函数读取图片,再在本地打开指定存储图片的目录,将读取到的图片信息写入该目录内的文件中,即可远程下载一个图片到本地。实现代码如下:
<?php
$file="http://static.nipic.com/images/originalNewtip.png";
$fp=fopen($file,'rb');
$img=fread($fp,100000);
$dir="./";
$local=fopen($dir.'/'.basename($file),'w');
fwrite($local,$img);
?>
2. 输出用户的IP地址,并且判断用户的IP地址是否在192.168.1.100~192.168.1.150之间。
在获取用户的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. 请写一个函数验证电子邮件的格式是否正确。
实现代码如下:
function checkEmail($email)
{
$pregEmail="/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i";
return preg_match($pregEmail,$email);
}
如果匹配到的格式是正确的邮箱格式,那么函数返回1,否则返回0。
[解析] 邮箱首尾两个斜杠/是正则表达式的限定符,这是Perl正则的标准,而PHP与Perl有相同的正则规范。两个斜杠之间表示的是正则内容,后面的i表示忽略大小写。
这个正则表达式表示的含义如下:
1)必须以([0-9A-za-z\\-_\\.]+)开头,也就是说,邮件地址以多个字母、数组、“_”或“.”开头。
2)紧接着是字符“@”。
3)然后是多个字母或数字的字符串,接着是一个字符“.”和两个或三个字母;后面一部分可有可无,即一个“.”后面跟着两个字母。
4)邮件的结束符是满足3)的字符串。
4. 对于用户输入一串字符串$string,要求$string中只能包含大于0的数字和英文逗号,请用正则表达式验证,对于不符合要求的$string返回出错信息。
通过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"不是数字";
}
?>