基础题:
$_request与$_post、$_get的区别和特点$_REQUEST[]具用$_POST[] $_GET[]的功能,但是$_REQUEST[]比较
慢。通过post和get方法提交的所有数据都可以通过$_REQUEST数组获得二、$_post、$_get的区别和特点
1. get是从服务器上获取数据,post是向服务器传送数据。 2. get是把参数数据队列加到提交表单的
ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,
将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个
过程。 3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用
Request.Form获取提交的数据。 4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一
般被默认为不受限制
1.表单中 get与post提交方法的区别?
答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.
2.session与cookie的区别?
答:session:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置进行的存

cookie:用来存储连续蕴?一个?面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过 时间来设置时间长短
3.数据库中的事务是什么?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成
功,即使只有一个操 作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库
进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
简述题:
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
答:<?php
//echo date('Y-m-d H:i:s',time()-60*60*24
echo date("Y:m:d H:i:s",strtotime("-1 day"));
?>
获取前天的日期,格式如:2009-01-12 17:15:20
答:echo date('Y-m-d h:i:s',time()-2*24*60*60);
echo date('Y-m-d h:i:s',strtotime('2 days ago')); 未来几天的话把 ago 去掉就行
2、echo(),print(),print_r()的区别(3分)
答:echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)
print()只能打印出简单类型变量的值(如int,string)
print_r()可以打印出复杂类型变量的值(如数组,对象)
echo 输出一个或者多个字符串 是语言结构,无返回值;
3、能够使HTML和PHP分离开使用的模板(1分)
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
4、使用哪些工具进行版本控制?(1分)
答:cvs,svn,vss;
5、如何实现字符串翻转?(3分)
答:echo strrev($a);
5.如何将字符串翻转过来?
答:$str = '7654321';
echo strrev($str); //1234567
另一种方法:
$strlen = strlen($str);
for ($i = 1; $i <= $strlen; $i++) {
echo substr($str,-$i,1);
}
6)- 给你三个数,写程序求出其最大值。
答: $var1=1;
$var2=7;
$var3=8;
$max=$var1>$var2?$var1:$var2;
$max=$max>$var3?$max:$var3;
echo $max;
9)- 写出发贴数最多的十个人名字的SQL,利用下表:
members(id,username,posts,pass,email)
答: SELECT username,count(*) as num FROM `members` group by username desc order by count(*) desc
limit 10
10)如何通过javascript判断一个窗口是i已经被屏蔽。
答: <script>
var result = window.open("/somepage.aspx");
if(result==null)
{
alert("浏览器不允许弹出窗口");
}
</script>
11)-写出session的运行机制
用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个
session_id,这个session id一 般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置
session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递 。)。这时候SESSION ID表现为
$_COOKIE['PHPSESSID'];(PHPSESSID可用session_name()函数来修改)
用户A接着访问,这个session id($_COOKIE['PHPSESSID'])就会在A每次访问Y的时候传送到站点Y。在站点Y上,
会有这么一个目录, 是用来保存SESSION的实际数据的.站点Y接收到session id,然后通过session id,来获得与
SESSION数据的关联,并返回SESSION数据。
13)-防止SQL注射漏洞一般用【addslashes】函数。
2 在PHP中error_reporting这个函数有什么作用?
设定php脚本的错误报告级别,error_reporting(E_ALL);。
5 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列。要求执行效率高。并说明如
何改善执行效率。
(该函数必须自己实现,不能使用php函数)
可以用冒泡排序
<?php
function BubbleSort($str)
{
for ($i=0;$i<count($str);$i++)
{
for ($j=count($str)-2;$j>=$i;$j--)
{
if($str[$j+1]<$str[$j])
{
$tmp = $str[$j+1];
$str[$j+1]=$str[$j];
$str[$j]=$tmp;
}
}
}
return $str;
}
$str = array(3,6,1,5,9,0,4,6,11);
print_r(BubbleSort($str));
?>
11.
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是问题
$a = "hello";
$b = &$a;
unset($b);
$b = "world";
//答案为:hello
echo $a;
?>
12.
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是问题
$a = 1;
$x = &$a;
$b = $a++;
//以下为答案:1
echo $b;
?>
13
<?php
$empty = '';
$null = NULL;
$bool = FALSE;
$notSet;
$array = array();
//以下是问题
$x = empty($array);
//以下为答案:true
echo $x?"true":"false";
?>
1.$array['anykey']和$array[anykey]的区别?
答:单引号和没有单引号区别,就是字符串和常量。而单引号和双引号的区别,就是字符串和变量吧。
不加单引号的话,php会首先认为他是常量,然后去搜寻是否存在这个常量,若不存在,则理解为字符串,所以在效
率上就慢了。
2.echo 输出语句时候的连接符号: "." 和 ","。点号和逗号的区别?
答:echo用点号时先把语句连接再输出,而用逗号就等于给它传多个参数,不需要进行字符串拼接这一步,效率
高!
4、用javascipt打印"上海爱吉"
<html>
<head><title>JS打印</title></head>
<body>
<script type="text/javascript">
document.write("上海吉它");
</script>
</body>
</html>
5、写出 SQL语句的格式 : 插入,更新,删除
代码
select expression
from tablename
where condition
group by columns asc
with rollup
order by column asc
limit offset,rowcount;
insert into tablename(columname) values(exp);
update tablename set columnname=exp where condition order by column limit rowcount;
delete from tablename where condition order by column limit rowcount;
#######################################################################6、优化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` where id=".$id);
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";
8、PHP的意思(送1分)
答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
9、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分) 答:now(),date()当前日期函数为 NOW();
格式化日期函数是:
SELECT DATE_FORMAT('2009-01-11 17:25:36',"%H:%i:%s %m/%d/%Y");
->17:25:36 01/11/2009
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;
}
}
12、您是否用过模板引擎? 如果有您用的模板引擎的名字是?(1分) 答:用过,smarty
4.如何实现PHP、JSP交互?
  题目有点含糊不清,SOAP,XML_RPC,Socket function,CURL都可以实现这些,如果是考PHP和Java的整合,PHP内置了这
种机制(如果考PHP和.NET的整合,也可以这么回答),例如$foo = new Java('java.lang.System');
5.使用哪些工具进行版本控制?
CVS和SVN,SVN号称下一代CVS,功能强大,不过CVS是老牌,市占率很高.我一直用SVN,题目是问用什么工具,
这个可能需要这么回 答:CVSServer on Apache作服务端,WinCVS作客户端;Subversion on Apache/DAV 做
服务端,TortoiseSVN做客户端,或者Subclipse做客户端
6 请举例说明在你的开发过程中用什么方法来加快页面的加载速度
答:要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器.使用
代码优化工具
1.以下哪一句不会把 John 新增到 users 阵列?
$users[] = 'john';
成功把 John 新增到阵列 users。
array_add($users,'john');
函式 array_add() 无定义。
array_push($users,'john');
成功把 John 新增到阵列 users。
$users ||= 'john';
语法错误。
2.sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用?
sort() 根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号.主要是当阵列索引键的
值无关疼痒时用来把阵列排序。
assort() PHP 没有 assort() 函式,所以可能是 asort() 的笔误.
asort() 与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替
联想阵列排序.
ksort() 根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列.
3.以下的代码会产生什么?为什么?
$num =10;
function multiply(){
$num =$num *10;
}
multiply();
echo $num;
由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者 $_GLOBALS['num']),所以 $num 的值
是 10。
4. reference 跟一个正规的变量有什么分别?如何 pass by reference?在什么情况下我们需要这样做?
Reference 传送的是变量的地址而非它的值,所以在函式中改变一个变量的值时,整个应用都见到这个变量的新
值。
一个正规变量传送给函式的是它的值,当函式改变这个变量的值时,只有这个函式才见到新值,应用的其他部分仍
然见到旧值。
$myVariable = "its' value"; Myfunction(&$myVariable); // 以 reference 传送参数
以 reference 传送参数给函式,可以使函式改变了的变量,即使在函式结束后仍然保留新值。
5.些函式可以用来在现正执行的脚本中插入函式库?
我的第一个想法是插入 PHP 函式库不外乎 include(),include_once(),require(),require_once(),但 细心再
想,"函式库"也应该包括 com 物 件和 .net 函式库,所以我们的答案也要分别包括 com_load 和 dotnet_load,下次
有人提起"函式库"的时候,别忘记这两个函式。
6.foo() 与 @foo() 有什么分别?
foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。
@foo() 在执行这个函式时,会隐藏所有上述的错误讯息。
很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,
因为错误不该被隐 藏,你必须妥善处理它们,可能的话解决