PHP笔试题1

来源:互联网 发布:sql去重复多个字段 编辑:程序博客网 时间:2024/06/02 09:04

基础题:
1.表单中 getpost提交方法的区别?
:get是发送请求HTTP协议通过url参数传递进行接收,post是实体数据,可以通过表单提交大量信息.

2.sessioncookie的区别?
:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放
cookie:用来存储连续访问一个页面时所使用,是存储在客户端,对于Cookie来说是存储在用户WINTemp目录中的。
两者都可通过时间来设置时间长短

3.数据库中的事务是什么?
:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,

事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

简述题:
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2)
:echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));

2echo(),print(),print_r()的区别(3)
:echoPHP语句, printprint_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print() 只能打印出简单类型变量的值(int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串

3、能够使HTMLPHP分离开使用的模板(1)
:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

5、使用哪些工具进行版本控制?(1)
:cvs,svn,vss;

6、如何实现字符串翻转?(3)
:echo strrev($a);

7、优化MYSQL数据库的方法。(4分,多写多得)
:
1、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如省份,性别’,最好设置为ENUM
2、使用连接(JOIN)来代替子查询:

a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)
c.提高b的速度优化:SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid
WHERE orderinfo.customerid IS NULL
3、使用联合(UNION)来代替手动创建的临时表
a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`
4、事务处理:
a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败
mysql_query(“BEGIN”);
mysql_query(“INSERT INTO customerinfo (name) VALUES (‘$name1′)”;
mysql_query(“SELECT * FROM `orderinfo` where customerid=”.$id”);
mysql_query(“COMMIT”);
5、锁定表,优化事务处理:
a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。
包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前,
不会有其它的访问来对 inventory 进行插入、更新或者删除的操作
mysql_query(“LOCK TABLE customerinfo READ, orderinfo WRITE”);
mysql_query(“SELECT customerid FROM `customerinfo` wheremso-spacerun: yes”> mysql_query(“UPDATE `orderinfo` SET ordertitle=’$title’ where customerid=”.$id);
mysql_query(“UNLOCK TABLES”);
6、使用外键,优化锁定表
a.customerinfo里的customerid映射到orderinfo里的customerid,
任何一条没有合法的customerid的记录不会写到orderinfo
CREATE TABLE customerinfo
(
customerid INT NOT NULL,
PRIMARY KEY(customerid)
)TYPE = INNODB;
CREATE TABLE orderinfo
(
orderid INT NOT NULL,
customerid INT NOT NULL,
PRIMARY KEY(customerid,orderid),
FOREIGN KEY (customerid) REFERENCES customerinfo
(customerid) ON DELETE CASCADE

)TYPE = INNODB;
注意:’ON DELETE CASCADE’,该参数保证当customerinfo表中的一条记录删除的话同时也会删除order
表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;
7、建立索引:
a.格式:
(普通索引)->
创建:CREATE INDEX <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))
(唯一索引)->
创建:CREATE UNIQUE <索引名> ON tablename (索引字段)
修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)
创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))
(主键)->
它是唯一索引,一般在创建表是建立,格式为:
CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])
8、优化查询语句
a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作
例子1:
SELECT * FROM order WHERE YEAR(orderDate)<2008;()
SELECT * FROM order WHERE orderDate<”2008-01-01″;()
例子2:
SELECT * FROM order WHERE addtime/7<24;()
SELECT * FROM order WHERE addtime<24*7;()
例子3:
SELECT * FROM order WHERE title like “%good%”;
SELECT * FROM order WHERE title>=”good” and name<”good”;

8PHP的意思(1)
:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHPHTML生成网站主页

9MYSQL取得当前时间的函数是?,格式化日期的函数是(2)
:now(),date()

10、实现中文字串截取无乱码的方法。(3)
:function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){

$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.’…’;
}else{
return $string;
}
}

11、您是否用过版本控制软件如果有您用的版本控制软件的名字是?(1)
12、您是否用过模板引擎如果有您用的模板引擎的名字是?(1)
:用过,smarty

===================

一、基础题 

1. 写出如下程序的输出结果

<?

$str1 = null;

$str2 = false;

echo $str1==$str2 ? '相等' : '不相等';

$str3 = '';

$str4 = 0;

echo $str3==$str4 ? '相等' : '不相等';

$str5 = 0;

$str6 = '0';

echo $str5===$str6 ? '相等' : '不相等';

?>

2. 写出如下程序的输出结果

<?

$a1 = null;

$a2 = false;

$a3 = 0;

$a4 = '';

$a5 = '0';

$a6 = 'null';

$a7 = array();

$a8 = array(array());

echo empty($a1) ? 'true' : 'false';

echo empty($a2) ? 'true' : 'false';

echo empty($a3) ? 'true' : 'false';

echo empty($a4) ? 'true' : 'false';

echo empty($a5) ? 'true' : 'false';

echo empty($a6) ? 'true' : 'false';

echo empty($a7) ? 'true' : 'false';

echo empty($a8) ? 'true' : 'false';

?>

3. 写出如下程序的输出结果

<?

$test = 'aaaaaa';

$abc = & $test;

unset($test);

echo $abc;

?>

4. 写出如下程序的输出结果

<?$count = 5;

function get_count(){

static $count = 0;

return $count++;

}

echo $count;

++$count;

echo get_count();

echo get_count();

?>

5. 写出如下程序的输出结果

<?

$GLOBALS['var1'] = 5;

$var2 = 1;

function get_value(){

global $var2;

$var1 = 0;

return $var2++;

}

get_value();

echo $var1;

echo $var2;

?>

6. 写出如下程序的输出结果

<?

function get_arr($arr){

unset($arr[0]);

}

$arr1 = array(1, 2);

$arr2 = array(1, 2);

get_arr(&$arr1);

get_arr($arr2);

echo count($arr1);

echo count($arr2);

?>

7. 使用五种以上方式获取一个文件的扩展名

要求:dir/upload.image.jpg,找出 .jpg 或者 jpg 

必须使用PHP自带的处理函数进行处理,方法不能明显重复,可以封装成函数,比如 get_ext1($file_name), get_ext2($file_name)

 

二、算法题

1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

 

【附答案】(以下答案不一定是最好的,只是一个简单的参考)

一、基础题

1. 相等 相等 不相等

2. true true true true true false true false

3. aaaaaa

4. 5 0 1

5. 5 2

6. 1 2

7. 使用五种以上方式获取一个文件的扩展名

function get_ext1($file_name){

return strrchr($file_name, '.');

}

function get_ext2($file_name){

return substr($file_name, strrpos($file_name, '.'));

}

function get_ext3($file_name){

return array_pop(explode('.', $file_name));

}

function get_ext4($file_name){

$p = pathinfo($file_name);

return $p['extension'];

}

function get_ext5($file_name){

return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), '.')));

}

 

二、算法题

1. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

//冒泡排序(数组排序) 

function bubble_sort($array) 

        $count = count($array); 

        if ($count <= 0) return false;

        for($i=0; $i<$count; $i++){ 

                for($j=$count-1; $j>$i; $j--){ 

                        if ($array[$j] < $array[$j-1]){ 

                                $tmp = $array[$j]; 

                                $array[$j] = $array[$j-1]; 

                                $array[$j-1] = $tmp; 

                        } 

                } 

        } 

        return $array; 

}

//快速排序(数组排序) 

function quick_sort($array) { 

        if (count($array) <= 1) return $array;

        $key = $array[0]; 

        $left_arr = array(); 

        $right_arr = array();

        for ($i=1; $i<count($array); $i++){ 

                if ($array[$i] <= $key) 

                        $left_arr[] = $array[$i]; 

                else 

                        $right_arr[] = $array[$i]; 

        }

        $left_arr = quick_sort($left_arr); 

        $right_arr = quick_sort($right_arr);

        return array_merge($left_arr, array($key), $right_arr); 

}

2. 使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组

//二分查找(数组里查找某个元素) 

function bin_sch($array, $low, $high, $k){ 

    if ($low <= $high){ 

        $mid = intval(($low+$high)/2); 

        if ($array[$mid] == $k){ 

            return $mid; 

        }elseif ($k < $array[$mid]){ 

            return bin_sch($array, $low, $mid-1, $k); 

        }else{ 

            return bin_sch($array, $mid+1, $high, $k); 

        } 

    } 

    return -1; 

}

//顺序查找(数组里查找某个元素) 

function seq_sch($array, $n, $k){ 

    $array[$n] = $k; 

    for($i=0; $i<$n; $i++){ 

        if($array[$i]==$k){ 

            break; 

        } 

    } 

    if ($i<$n){ 

        return $i; 

    }else{ 

        return -1; 

    } 

}

3. 写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序

function array_sort($arr, $keys, $order=0) {

if (!is_array($arr)) {

   return false;

}

$keysvalue = array();

foreach($arr as $key => $val) {

   $keysvalue[$key] = $val[$keys];

}

if($order == 0){

   asort($keysvalue);

}else {

   arsort($keysvalue);

}

reset($keysvalue);

foreach($keysvalue as $key => $vals) {

   $keysort[$key] = $key;

}

$new_array = array();

foreach($keysort as $key => $val) {

   $new_array[$key] = $arr[$val];

}

return $new_array;

}

==============================

1.请写出PHP中用来完成如下功能的函数
A.判断一个变量的值是否为空:
B.判断一个变量是否为NULL
C.判断一个变量是否存在:
D.释放一个变量:

2. 函数strpos的原型为:int strpos ( string haystack, string needle [, int offset]),用来从haystack中查找needle,如果找到返回needlehaystack的偏移,否则返回false
问:如何区分strpos返回false和返回0
3.请指出函数includerequire的区别
4.请列出您所知道的php模版对象
5.请写出PHP脚本中执行SHELL命令的方法,要求至少写两种。
6.请写出PHP变量序列化和反序列化的函数,并举出1个应用例子 

7.举例说明php错误处理的方法
8.PHP程序中,有些关键性的任务,需要保证资源的正确释放,所以有必要设置清场函数,请选出正确的清场函数:___________
A. register_shutdown_function
B. register_exit_function
C. set_abort
D. set_cleanup_function
9.WWW应用的PHP程序中,如何捕捉页面缓存的输出?
10.请陈述Session的实现机制。如果PHP没有提供Session的实现,请用PHP设计一个简单的Session实现。
11.写一个*函数*,尽可能高效的,从一个标准url里取出文件的扩展名
例如http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出php.php
12.HTML语言中,页面头部的meta标记可以用来输出文件的编码格式,以下是一个标准的meta语句 

请使用PHP语言写一个函数,把一个标准HTML页面中的类似meta标记中的charset部分值改为big5
请注意:
1. 需要处理完整的html页面,即不光此meta语句
2. 忽略大小写
3. ' 和 在此处是可以互换的
4. 'Content-Type'两侧的引号是可以忽略的,但'text/html; charset=gbk'两侧的不行
5. 注意处理多余空格
13.写一个函数,算出两个文件的相对路径
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
计算出$b相对于$a的相对路径应该是 ../../c/d 

15.请用html写一个35列的表格
16. 有如下一个表单

窗体顶端

用户名:

密 码:



窗体底端


请用javascript写一个函数,来判断表单提交的时候,用户名和密码不能为空。
17.选择合适数据类型写出建立如下学生信息表的SQL语句
表名(Student)
字段名称 描述 要求
ID 学生证号 主键
Name 姓名 不能为空
Birth 生日 不能为空
Gender 性别 默认为男
Desc 备注信息

写出统计1980-1-1后出生的女生数量的SQL语句
简述PRIMARY KEYUNIQUE KEYFOREIGN KEY和普通索引的差别,以及建立索引对数据库性能的可能影响

原创粉丝点击