9月中旬大约两周左右时间的面试题汇总!

1、echo()、print()、print_r()的区别?
echo()是语言结构,无返回值
print()功能与echo()基本相同,也是语言结构,不同的是print有返回值,且总是返回1
print_r是递归打印,用于输出数组对象

2、表单中get与post提交方法的区别?
GET方法是form表单提交数据的默认方法,它通过URL请求来传递用户的数据。GET方法传输的数据量非常小,一般限制在2KB左右,但是其执行效率比POST方法要高。由于使用GET方法传输的数据对用户是透明的,因此可能会带来一定的安全问题。POST方法通过HTTP POST机制,将表单内的数据放置在HTML表头(header)内传递给服务器端。与GET方法不同,POST方法传递的数据对用户是不可见的,而且POST方法传递的数据量也是比较大的。

3、session与cookie的区别是什么?
cookie是保存在客户端的,session是保存在服务端的,而session id是保存在客户端的。

4、数据库中事务是什么?
一个操作单元,在这个单元中的所有操作要么都执行,要么都失败。如果所有操作成功,事务则提交(commit)。即使一个操作失败,事务也将回滚(roll back),所有被影响的数据将恢复到之前的状态。

5、如何实现字符串翻转?
<?php
$a = ‘abcde’;
$b = ”;
for ($i=strlen($a)-1;$i>=0;$i–) {
$b .= $a{$i};
}
// 或者
$c = strrev($a);
?>

6、优化mysql数据库的方法?
优化查询,如使用索引、用连接查询代替子查询
优化数据库结构,如分表、增加中间表、增加冗余字段、分析表、检查表、优化表
优化插入记录的速度,如插入记录前先禁用索引、一个insert语句插入多条记录
优化mysql服务器硬件配置,如增加内存、磁盘数量、提高磁盘读写速度
优化mysql服务器参数配置

7、请说明php中传值与传引用的区别,什么时候传值,什么时候传引用?
传值:变量默认总是传值赋值。当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
传引用:改动新的变量将影响到原始变量,反之亦然。
传值时,必须复制值,对于大型的字符串和对象来说,有一定的性能损耗,而传引用不需要复制值,对于性能提高有一定好处

8、mysql_fetch_row与mysql_fetch_array有什么区别?
mysql_fetch_row()从结果集中取得一行作为枚举数组
mysql_fetch_array()从结果集中取得一行作为关联数组,或数字数组,或二者兼有

9、请写出数据类型(int char varchar datetime text)的意思;请问char和varchar有什么区别
int 数字类型,char 固定长度的字符串,varchar 可变长度的字符串,datetime 日期/时间类型,日期和时间的组合,text 文本字符串
char的长度固定为创建表时声明的长度,当保存char值时,在它们的右边填充空格以达到指定的长度。varchar为可变长字符串,varchar值保存时不进行填充。

10、请写出php5权限控制修饰符
public 公有 protected 保护 private 私有

11、请写出php5的构造函数和析构函数
__construct  __destruct

12、求$a、$b、$c三个数中的最大值与最小值
<?php
$a = 3;
$b = 44;
$c = 40;
echo max($a,$b,$c);
echo min($a,$b,$c);
?>

13、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来
表名user
name tel content date
张三 13333663366  大专毕业 2006-10-11
张三 13612312331  大专毕业 2006-10-15
张四 021-55665566 大专毕业 2006-10-15
请根据上面的题目完成代码:

<?php $mysqli = new mysqli("localhost", "my_user", "my_password", "my_db"); /* check connection */ if ($mysqli->connect_errno) {
    echo("Connect failed: ", $mysqli->connect_error);
    exit();
}

$query = "SELECT * FROM user WHERE name='张三'";

if ($result = $mysqli->query($query)) {

    /* fetch associative array */    while ($row = $result->fetch_assoc()) {
 echo $row['name'].' ';
 echo $row['tel'].' ';
 echo $row['content'].' ';
 echo $row['date']. '
’;
    }

    /* free result set */    $result->free();
}

/* close connection */$mysqli->close();
?>

14、如何使用下面的类,并解释下面是什么意思?

<?php class test { function Get_test($num) { $num = md5(md5($num)."En"); return $num; } } $test = new test(); $num = 1; $test->Get_test($num);
?>

15、写出SQL语句的格式:插入、更新、删除
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 本科毕业 2006-10-15
张四 021-55665566 中专毕业 2006-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2007-05-06)请用SQL语句新增至表中
(b) 请用sql语句把张三的时间更新成为当前系统时间
(c) 请写出删除名为张四的全部记录
(a)
INSERT INTO User(‘Name’,’Tel’,’Content’,’Date’) VALUES(‘小王’,’13254748547′,’高中毕业’,’2007-05-06′)
(b)
UPDATE User SET Date=DATE_FORMAT(NOW(),’%Y-%m-%d’) WHERE Name=’张三’
(c)
DELETE FROM User WHERE Name=’张四’

16、写出以下程序的输出结果
<?php
$b = 201;
$c = 40;
$a = $b>$c?4:5;
echo $a;
?>
4

17、防止SQL注入可以用哪些函数?
intval()、htmlspecialchars()

18、php的垃圾回收机制是怎样的?
在php中,没有任何变量指向这个对象时,这个对象就成为垃圾。php会将其在内存中销毁,这是php的GC垃圾处理机制,防止内存溢出。

19、你用什么方法检查php脚本的执行效率(通常是脚本执行时间)和数据库SQL的效率(通常是数据库query时间),并定位和分析脚本执行和数据库查询的瓶颈所在?

<?php
$begin = microtime(true); //获取程序执行开始的时间
// some code here 待执行的代码
$stop = microtime(true); //获取程序执行结束的时间
echo $begin;
echo '
';
echo $stop;
list($m0, $s0) = explode(" ", $begin);
list($m1, $s1) = explode(" ", $stop);
$runtime = ($s1 + $m1 - $s0 - $m0) * 1000;
echo '
当前脚本执行时间:' . $runtime . '微秒';
?>

explain

20、请举例说明在你的开发过程中用什么方法来加快页面的加载速度?
后端:
生成静态html
生成xml
使用加速软件,如zend
前端:
js、css、图片的压缩、合并

21、对于大流量的网站,你采用什么样的方法来解决访问量的问题?
1、使用流量分析统计软件;
2、确认服务器硬件是否足够支持当前的流量;
3、优化数据库访问;
4、禁止外部的盗链;
5、控制大文件的下载;
6、使用不同主机分流主要流量;
7、squid[反向代理],最好的选择;
8、增加带宽;

22、请写出面向对象的三个特性?
封装 继承 多态

23、请谈一谈MVC
MVC的目标是将业务逻辑从用户界面的考虑中分离。在MVC中,模型(model)代表信息(数据)和业务规则;视图(view)包含了用户界面元素,例如文本、表单等;控制器(controller)则管理模型和视图中的通信。

24、是否使用过设计模式,请列举出来?
工厂模式 单元素模式 观察者模式 命令链模式 策略模式

25、书写冒泡排序算法

<?php
$arr = array(45,56,67,32,33,23,37,455,223,223,23);
for ($i=1;$i<count($arr);$i++) { for ($j=count($arr)-1;$j>=$i;$j–) {
  if ($arr[$j]<$arr[$j-1]) { $temp = $arr[$j-1]; $arr[$j-1] = $arr[$j]; $arr[$j] = $temp; } } } ?>

26、写一个函数,尽可能高效的,从一个标准的url取出文件的扩展名

<?php $url = 'http://www.sina.com.cn/abc/de/fg.php?id=1'; function getext($url) { //解析url,返回其组成部分,返回值为一数组 $arr = parse_url($url); //print_r($arr); $file = basename($arr['path']); $ext = explode(".", $file); return $ext[1]; } echo getext($url); ?>

27、sort()、asort()、和ksort()有什么区别?它们分别在什么情况下使用?
sort() 对数组排序,当本函数结束时数组单元将被从最低到最高重新安排
asort() 对数组进行排序,并保持索引关系
ksort() 对数组按照键名排序

28、以下的代码输出是什么?为什么?
<?php
$num = 10;
function multiply() {
$num = $num * 10;
}
multiply();
echo $num;
?>
因为function中的$num未定义,且其作用域是在函数内

29、执行程序段<?php echo 8%(-2) ?>将输出什么
0

30、reference跟一个正规的变量有什么区别?如何pass by reference?在什么情况下我们需要这样做?
reference传送的是变量的地址而非它的值
<?php
$var = ‘aad’;
//myfunction(&$var); //pass by reference
?>
以reference传送参数给函数,可以使函数改变了的变量,即使在函数结束后仍然保留新值

31、foo()与@foo()有什么区别?
foo()在发生错误时,会显示错误信息
@foo()在发生错误时,会隐藏错误信息

32、分别解释“===”与“==”
==判断值是否相等
===判断值是否相等,且要求类型一致

33、include与include_once有什么区别?require又如何?
include_once 如果文件已经被包含过,则不会再次包含
require_once 如果文件已经被包含过,则不会再次包含
<?php
define(‘__ROOT__’, dirname(dirname(__FILE__)));
//require_once(__ROOT__.’/1.php’);
//require_once(__ROOT__.’/1.php’);
?>

34、redir()、herder()、location()、redirect()中哪一个函数可以反浏览器转向到另一个页面?
header()

35、fget()、file_open()、fopen()、open_file()中哪一个函数可以用来开启档案以便读/写?
fopen()

36、你如何利用php解决http的无状态本质?
session cookie

37、GD函数库用来做什么?
处理图片

38、一个函数的参数不能是对变量的引用,除非在php.ini中把____设为on?
allow_call_time_pass_reference

39、写一个函数,尽可能高效的,遍历文件夹‘home’中的所有子文件夹,并返回子文件夹名称的数组
<?php
function my_scandir($dir) {
$files = array();
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false) {
if ($file != ‘..’ && $file != ‘.’) {
if (is_dir($dir . ‘/’ . $file)) {
$files[$file] = my_scandir($dir . ‘/’ . $file);
} else {
$files[] = $file;
}
}
}
}
return $files;
}
$result = my_scandir(‘E:\php\home’);
print_r($result);
?>

40、打印出昨天的此刻的时间,格式:“年-月-日 时:分:秒”
<?php
echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’,time()));
?>

41、HTTP协议中几个状态码的含义:503,500,401,200,301,302
503 请求超时
500 内部服务错误,一般是php程序导致
401 未授权访问
200 正确响应
301 永久重定向
302 临时重定向

42、实现函数,把字符串“action_test”转换成ActionTest、“my_book”转换成“MyBook”
<?php
$a = ‘action_test’;
$b = str_replace(‘_’,’ ‘,$a);
$c = ucwords($b);
$d = str_replace(‘ ‘,”,$c);
echo $d;
?>

43、php5中魔术方法有哪些,请举例说明各自的用法?
__sleep 序列化
__wakeup 反序列化
__toString 打印一个对象时被调用
__invoke 当尝试以调用一个函数的方式调用一个对象的时候,其会被自动调用
__set_state
__construct 构造方法
__destruct 析构方法
__call 当调用类中不存在的方法时自动调用
__get 当调用类中不存在或者访问级别受限的属性时自动调用
__set 当对类中不存在或者访问级别受限的属性赋值时自动调用
__isset 当对类中不存在或者访问级别受限的属性使用isset函数时自动调用
__unset 当对类中不存在或者访问级别受限的属性使用unset函数时自动调用
__clone 克隆对象时被自动调用
__autoload 实例化一个类时,如果其对应的类不存在,则自动调用

44、php通过什么函数可以重置php.ini中的配置
ini_set()

45、写出mysql两种以上存储引擎名称,并简述其区别?
MyISAM是mysql的默认存储引擎,支持全文索引,但不是事务安全的,不支持外键
InnoDB不支持全文索引,是事务安全的

46、列举开源的一些数据库
mysql memcached MariaDB PostgreSQL

47、列举一些常用的php扩展,如GD
mysql mysqli pdo sockets zip openssl xmlrpc

48、请将“2014-2-17 00:00:00”转换为unix时间戳(格林威治时间到当前时间的秒数),将1392612299格式化为年月日格式
<?php
echo strtotime(‘2014-2-17 00:00:00′).'<br />’;
echo date(‘Ymd’,1392612299);
?>

49、请用php求2014-2-17至2008-8-8相差的天数?
<?php
$startdate = strtotime(‘2014-2-17’);
$enddate = mktime(‘0′,’0′,’0′,’8′,’8′,’2008’);
echo round(($startdate-$enddate)/3600/24);
?>

50、请将$aa=’12,32,11,11’转换为数组array(12,32,11,11),并将其还原成$aa=’12,32,11,11’的代码;
<?php
$aa = ‘12,32,11,11’;
$aa_array = explode(‘,’,’12,32,11,11′);
print_r($aa_array);
$bb = implode(‘,’,$aa_array);
echo $bb;
?>

51、
<?php
$b = 13;
6 + $a = $b;
echo(abs($a));
?>
13

52、
<?php
echo 1+2+”a+4+5″;
?>
3

53、
<?php
echo 1+2+”3+a+5″;
?>
6

54、
<?php
echo 1+2+”1+1+2″;
?>
4

55、显示结果:
<?php
$a = 12;
$b = 012;
$c = 0*12;
echo $a,”\n”,$b,”\n”,$c;
?>
12 10 0

56、输出为Mozilla/5.0 (Windows NT 6.1; rv:32.0) Gecko/20100101 Firefox/32.0时,可能的输出语句是:
<?php
echo $_SERVER[‘HTTP_USER_AGENT’];
?>

57、以下说法不正确的是:D
A.PHP有四种标量类型:布尔型(boolean),整型(integer),浮点型(float),字符串(string)
B.浮点型(float)与双精度型(double)是同一种类型
C.符合类型包括:数组(array),对象(object),资源(resource)
D.伪类型:混合型(mixed),数字型(number),回调(callback)

58、执行下面的代码后,
<?php
echo function_exists(‘print’);
?>
得到的输出是:空

59、下面不是PHP语法的组成部分的函数是:A
A.array 它是一个数据结构不是常规函数
B.eval eval()函数把字符串按照PHP代码来计算。
C.each 返回数组中当前的键/值对并将数组指针向前移动一步
D.list list–把数组中的值赋给一些变量

60、下面对于echo,print的描述正确的是:C
A.echo,print都可以打印多个参数
B.print可以打印多个参数,echo不可以
C.echo可以打印多个参数,print不可以
D.echo,print都不可以打印多个参数

61、下面代码的输出正确的是:C
<?php
$a = array(1=>5,5=>8,22,2=>’8′,81);
echo $a[7];
echo $a[6];
echo $a[3];
?>
A.空2281
B.空8122
C.8122空
D.空空空

62、下面代码的输出结果:D
<?php
$a[bar] = ‘hello’;
echo $a[bar];
//注:如果没有加引号,php可以把常量自动转为字符串,但是效率会降低,大约8倍左右
echo $a[‘bar’];
?>
A.hello
B.空空
C.报错
D.hellohello

63、执行下面的代码的结果是什么?A
<?php
$bool = TRUE;
echo gettype($bool);
echo is_string($bool);
?>
A.boolean
B.boolean0
C.booleanFALSE
D.booleanfalse
注:gettype获取变量类型;is_string检测变量是否是字符串

64、写出下面代码的结果:C
<?php
echo 1>>0;
echo 2>>1;
echo 3<<2;
//注:左移一位*2,右移除2
?>
A.012
B.106
C.1112
D.123

65、下面代码的执行结果:A
<?php
for($i=0;$i<10;$i++){
//注:第二个参数少$,所以不是变量是常量,常量转化成字符串在转化成数字为0,0<10,所以一直循环下去
print $i;
}
?>
A.0123456789
B.012345678910
C.无输出
D.死循环

66、对于正面的代码
<?php
$fruits = array(‘strawberry’=>’red’,’banana’=>’yellow’);
?>
能够正确得到结果’yellow’的代码是:ACD
<?php
echo “A banana is {$fruits[‘banana’]}”;
//考点:双引号里嵌入变量,大括号起限定范围的作用
//echo “A banana is $fruits[‘banana’]”;
echo “A banana is {$fruits[banana]}”;
//类型转化,所以慢,但是是正确的
echo “A banana is $fruits[banana]”;
//双引号里的变量到特殊符号停止,【不属于特殊符号,所以会继续向下读取
?>

67、C
<?php
$foo = ‘test’;
$bar = <<< EOT
$foo bar
EOT;
echo $bar;
?>
上面的语句输出结果:
A.$foo bar;
B.’EOT’ $foo bar EOT;
C.test bar;
D.’EOT’ test bar EOT

68、A
<?php
$a = 3;
$b = 4;
if($a||$b=5){
echo ‘todo’;
}
?>
$b的值是():
A.4;
$a=3;3是布尔型真所以就不往后执行,所以$b还是4
B.5;
C.3;
D.false

69、preg_replace与preg_replace_callback的区别是什么?
preg_replace 执行一个正则表达式的搜索与替换
preg_replace_callback 执行一个正则表达式的搜索并且使用一个回调进行替换

70、如何使用css显示/隐藏一个dom元素,如果有多种,请指出它们的区别?
display:block;
display:none;

71、请写出常用的清除浮动的方法
在需要清除浮动的父级元素内部的所有浮动元素后添加一个内容为空的标签来清除浮动,.clear{clear:both;}
overflow:auto;zoom:1;
:after

72、若div分别使用以下样式会具有什么特性 display:inline;display:block;display:inline-block;
display:inline;此元素会被显示为内联元素,元素前后没有换行符
display:block;此元素会被显示为块级元素,元素前后带有换行符
display:inline-block;行内块元素

73、IE6双倍margin的bug是如何出现的,可以怎样解决?
float,margin
display:inline;

74、已知一个div样式,width:100px;height:100px;margin:50px 20px;padding:50px 20px;这个div的实际高度是多少?
200px

75、一个已知宽高的容器,如何使它在页面中左右居中、上下居中?
text-align:center;vertical:middle;

76、判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20(用正则)
<script>
var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;
reg.test(“aeu3_di876”);
</script>

77、请指出IE与FF脚本兼容性问题的现象与解决方法
(1)window.event;
表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象
(2)获取事件源
IE用srcElement获取事件源,FF用target获取事件源
(3)添加、去除事件
IE:element.attach(“onclick”,function);element.detach(“onclick”,function);
FF:element.addEventListener(“onclick”,function,true);element.removeEventListener(“onclick”,function,true);
(4)获取标签的自定义属性
IE:div.value、div[“value”]
FF:div.getAttribute[“value”]
(5)document.getElementByName()和document.all[name]
IE:均不能获取元素
FF:可以
(6)input.type的属性
IE:只读
FF:可读写
(7)innerText textContent outerHTML
IE:支持innerText outerHTML
FF:支持textContent

78、javascript中面向对象中继承实现
<script>
function Animal(name){
this.name = name;
}
Animal.prototype.getName = function(){
alert(this.name)
}
function Dog(){};
Dog.prototype = new Animal(“Buddy”);
Dog.prototype.constructor = Dog;
var dog = new Dog();
</script>

79、编写一个方法,去掉一个数组的重复元素
<script>
var arr = [1,1,2,3,3,2,1];
Array.prototype.unique = function(){
var ret = [];
var o = {};
var len = this.length;
for (var i=0;i<len;i++){
var v = this[i];
if (!o[v]){
o[v] = 1;
ret.push(v);
}
}
return ret;
};
//alert(arr.unique());
</script>

80、JavaScript中如何检测一个变量是一个String类型?请写出函数实现
<script>
//String类型有两种生成方式
//var str = “hello world”;
var str2 = new String(“hello world”);
function IsString(str){
return (typeof str == “string” || str.constructor == String);
}
var str = “”;
//alert(IsString(1));
//alert(IsString(str2));
</script>

81、补充代码,鼠标单击Button1后将Button1移动到Button2的后面
<div>
<input type=”button” id=”button1″ value=”1″ > <input type=”button” id=”button2″ value=”2″ />
</div>
<script>
function moveBtn(obj) {
var clone = obj.cloneNode(true);
var parent = obj.parentNode;
parent.appendChild(clone);
parent.removeChild(obj);
}
</script>

82、下面css标签在JavaScript中调用应如何拼写,border-left-color,-moz-viewport
borderLeftColor
mozViewport

83、请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象
<script>
function parseQueryString(url){
var params = {};
var arr = url.split(“?”);
if (arr.length <= 1) return params;
arr = arr[1].split(“&”);
for(var i=0,l=arr.length; i<l; i++){
var a = arr[i].split(“=”);
params[a[0]] = a[1];
}
return params;
}
var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2”;
var ps = parseQueryString(url);
//alert(ps[“key2”]);
</script>

永夜