4月初大约两周左右时间的面试题汇总!
1、echo()、print()、print_r()的区别
echo()是语言结构,无返回值
print()功能与echo()基本相同,也是语言结构,不同的是print有返回值,且总是返回1
print_r是递归打印,用于输出数组对象
2、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
发生异常时,include产生警告,require产生致命错误
include_once()/require_once()
3、如何修改SESSION的生存时间
// 保存一天
$lifetime = 24 * 3600;
session_set_cookie_params($lifetime);
session_start();
4、写出发帖数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
SELECT name FROM members ORDER BY posts,id DESC limit 0,10
5、请说明php中传值与传引用的区别。什么时候传值,什么时候传引用?
传值:变量默认总是传值赋值。当一个变量的值赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量。
传引用:改动新的变量将影响到原始变量,反之亦然。
传值时,必须复制值,对于大型的字符串和对象来说,有一定的性能损耗,而传引用不需要复制值,对于性能提高有一定好处
6、在php中error_reporting这个函数有什么作用?
设置脚本运行时的错误报告级别
7、请写一个函数验证电子邮件的格式是否正确
preg_match(“/^(?:w+.?)*w+@(?:w+.?)*w+$/”,$email);
8、js表单弹出对话框函数是?获得输入焦点函数是?
alert()、prompt()、confirm()
focus()
9、js的转向函数是?怎么引入一个外部js文件?
window.location.href
<srcipt type=”text/javascript” src=”*.js”></srcipt>
10、请使用jquery获得下列文档中的class为gb2的元素
$(‘.gb2’)
11、mysql_fetch_row()和mysql_fetch_array()之间有什么区别?
mysql_fetch_row()从结果集中取得一行作为枚举数组
mysql_fetch_array()从结果集中取得一行作为关联数组,或数字数组,或二者兼有
12、下面哪个函数可以打开一个文件,以对文件进行读和写操作?
(a)fget()
(b)file_open()
(c)fopen()
(d)open_file()
(c)
13、下面哪个选项没有将john添加到users数组中?
(a)$users[] = ‘john’;
(b)array_add($users,’john’);
(c)array_push($users,’john’);
(d)$users ||= ‘john’;
(b)、(d)皆是没有添加到的
14、下面的程序会输出多少?
<?php
$num = 10;
function multiply() {
$num = $num * 10;
}
multiply();
echo $num;
?>
10
15、使用php写一段简单查询,查出所有姓名为“张三”的内容并打印出来
表名User
Name Tel Content Date
张三 13333663366 大专毕业 2006-10-11
张三 13612312331 大专毕业 2006-10-15
张四 021-55665566 大专毕业 2006-10-15
请根据上面的题目完成代码:
<?php
$mysql_db = mysql_connect(“localhost”,”root”,”pass”);
@mysql_select_db(“DB”,$mysql_db);
$sql = “SELECT Name,Tel,Content,Date FROM User WHERE Name=’张三'”;
$result = mysql_query($sql);
if ($row = mysql_fetch_array($result)) {
echo $row[‘Name’].$row[‘Tel’].$row[‘Content’].$row[‘Date’];
}
?>
16、如何使用下面的类,并解释下面是什么意思?
<?php
class test {
function Get_test($num) {
$num = md5(md5($num).”En”);
return $num;
}
}
$test = new test();
$num = 1;
$test->Get_test($num);
?>
17、写出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=’张四’
18、请写出数据类型(int char varchar datetime text)的意思;请问char和varchar有什么区别
int 数字类型,char 固定长度的字符串,varchar 可变长度的字符串,datetime 日期/时间类型,日期和时间的组合,text 文本字符串
char的长度固定为创建表时声明的长度,当保存char值时,在它们的右边填充空格以达到指定的长度。varchar为可变长字符串,varchar值保存时不进行填充。
19、MySQL自增类型(通常为表ID字段)必须将其设为(?)字段
primary key
20、写出以下程序的输出结果
<?php
$b = 201;
$c = 40;
$a = $b>$c?4:5;
echo $a;
?>
4
21、检测一个变量是否有设置的函数是?是否为空的函数是?
isset()
empty()
22、取得查询结果集总数的函数是?
mysql_num_rows($result);
23、$arr = array(‘james’,’tom’,’symfony’);
(1)请打印出第一个元素的值
(2)请将数组的值用’,’分隔并合并成字串输出
(1)
<?php
$arr = array(‘james’,’tom’,’symfony’);
echo $arr[0];
?>
(2)
<?php
$arr = array(‘james’,’tom’,’symfony’);
echo implode(‘,’,$arr);
?>
24、$a = ‘abcdef’;请取出$a的值并打印出第一个字母
<?php
$a = ‘abcdef’;
echo $a{0};
?>
25、请写出php5权限控制修饰符
public(公有)protected(保护)private(私有)
26、请写出php5的构造函数和析构函数
_construct
_destruct
27、您是否用过版本控制软件?如果有您用的版本控制软件的名字是?
用过,如SVN、Git等
28、您是否用过模板引擎?如果有您用是模板引擎的名字是?
用过,如Smarty、Ease Template等
29、对于大流量的网站,您采用什么样的方法来解决访问量问题?
1、使用流量分析统计软件;
2、确认服务器硬件是否足够支持当前的流量;
3、优化数据库访问;
4、禁止外部的盗链;
5、控制大文件的下载;
6、使用不同主机分流主要流量;
30、谈谈对MVC的认识?
MVC的目标是将业务逻辑从用户界面的考虑中分离。在MVC中,模型(model)代表信息(数据)和业务规则;视图(view)包含了用户界面元素,例如文本、表单等;控制器(controller)则管理模型和视图中的通信。
31、您是否用过eclipse作为php开发IDE?如果有请说出至少三个debug的快捷键及对应功能
32、写一个函数,尽可能高效的,遍历文件夹‘home’中的所有子文件夹,并返回子文件夹名称的数组
<?php
/**
* 遍历目录,结果存入数组,支持php4及以上,php5以后可用scandir()函数代替while循环
* @param string $dir
* @return array
*/
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;
}
}
}
closedir($handle);
return $files;
}
}
function my_scandir1($dir){
$files = array();
$dir_list = scandir($dir);
foreach ($dir_list as $file) {
if ($file != “..” && $file != “.”) {
if (is_dir($dir . “/” . $file)) {
$files[$file] = my_scandir1($dir . “/” . $file);
} else {
$files[] = $file;
}
}
}
return $files;
}
$result = my_scandir(‘E:\php\home’);
// $result1 = my_scandir1(‘E:\php\home’);
print_r($result);
?>
33、详细描述如下代码片段的意义(注:无法达到预期,这是原始代码)
<?php
$text = ‘快来加入我们的 !企业 社会化讨论组吧’;
// preg_replace(‘/(^|[\s\.\,\:\;]+)!([A-Za-z0-9\x80-\xff]{1,64})/e’,”‘\\1!’.common_link($id, ‘\\2′)”, $text);
?>
执行一个正则表达式的搜索和替换,将$text中的标点符号去除掉
34、按要求编写代码
(1)声明一个Cat对象,该对象有一个公共属性:name;两个行为:walk(),talk()
(2)声明一个MyCat对象,继承Cat对象
(3)MyCat有一个公共属性:color
(4)实例化一个MyCat对象,并将color属性赋值为’blank’
(5)执行MyCat的talk方法,打印出当前MyCat对象的color属性值
<?php
// (1)
class Cat {
public $name;
function walk() {
}
function talk() {
}
}
// (2)(3)
class MyCat extends Cat {
public $color;
}
// (4)(5)
$mycat = new MyCat();
$mycat->color = ‘black’;
$mycat->talk();
print($mycat->color);
?>
1、BOM是什么,有哪些危害?
BOM(Byte Order Mark)是UTF编码方案里用于标识编码的标准标记
由于BOM的存在,php会误认为文本内容已经输出,因此会对页面渲染造成影响
2、如果前端工程师所编写的html网页编码为gb2312,而数据库与php文件编码为UTF-8,则如何快速解决此问题?
快速解决:php文件要输出头:header(“Content-type:text/html;charset=gb2312”),且php文件本身编码需要转为gb2312
mysql_query(“SET NAMES GBK”);
彻底解决:将html网页转换为utf-8,全部统一为utf-8
3、<!– 将[img]http://www.leshisz.com/themes/default/images/index/ad/ad-stay-tuned.png[/img]替换为<img alt=”敬请期待” src=”http://www.leshisz.com/themes/default/images/index/ad/ad-stay-tuned.png” height=”288″ width=”500″></img>,UBB代码 –>
<?php
$str = ‘[img]http://www.leshisz.com/themes/default/images/index/ad/ad-stay-tuned.png[/img]’;
//<img alt=”敬请期待” src=”http://www.leshisz.com/themes/default/images/index/ad/ad-stay-tuned.png” height=”288″ width=”500″></img>
$img = str_replace(‘[img]’, ‘<img alt=”敬请期待” src=”‘, $str);
$img = str_replace(‘[/img]’, ‘” height=”288″ width=”500″></img>’, $img);
echo $img;
?>
4、mysql性能检测,在SQL语句前加上什么?
如果在SELECT语句前放上关键词EXPLAIN,MySQL将解释它如何处理SELECT,提供有关表如何联接的次序。
5、不同的用户有可能具有相同的IP,需要统计出不同的IP数量,且按照降序排列
表名User
id Name Tel Ip Date
1 张三 13333663366 01.33.22.33 2006-10-11
2 张三 13612312331 03.22.33.33 2006-10-15
3 张四 021-55665566 01.33.22.33 2006-10-15
SELECT count(ip) AS count FROM user GROUP BY id ORDER BY count DESC
6、打印出当前表单的$_POST与$_GET
<form method=”post” action=”2.php?s=1&a=2″>
<input type=”hidden” name=”var[]” value=”aa”>
<input type=”hidden” name=”var[]” value=”bb”>
<input type=”checkbox” name=”checkbox” value=”cc”>
<input type=”submit” name=”submit” value=”submit”>
</form>
$_POST = array (
var => Array (
0 => ‘aa’,
1 => ‘bb’
)
submit => ‘submit’
)
$_GET = array (
s => 1,
a => 2
)
(一)基础题
1、写出该程序在浏览器中输出结果:
<?php
$str1=null;
$str2=false;
echo $str1==$str2?’相等’:’不相等’;
$str3=”;
$str4=0;
echo $str3==$str4?’相等’:’不相等’;
$str5=0;
$str6=’0′;
echo $str5===$str6?’相等’:’不相等’;
?>
相等 相等 不相等
2、写出该程序在浏览器中输出结果:
<?php
$a1=null;
$a2=false;
$a3=0;
$a4=”;
$a5=’0′;
$a6=’null’;
$a7=array();
$a8=array(array());
echo empty($a1)?’true’:’false’;echo'</br>’;
echo empty($a2)?’true’:’false’;echo'</br>’;
echo empty($a3)?’true’:’false’;echo'</br>’;
echo empty($a4)?’true’:’false’;echo'</br>’;
echo empty($a5)?’true’:’false’;echo'</br>’;
echo empty($a6)?’true’:’false’;echo'</br>’;
echo empty($a7)?’true’:’false’;echo'</br>’;
echo empty($a8)?’true’:’false’;
?>
true
true
true
true
true
false
true
false
3、写出该程序在浏览器中输出结果:
<?php
$str=”a”;
$$str=”net”;
$$str.=”work”;
$b=&$a;
unset($b);
$b=”hello wolrd”;
echo $a;
echo “</br>”;
echo $b;
?>
network
hello wolrd
4、写出该程序在浏览器中输出结果:
<?php
$a=99;
$b=100;
$c=10;
++$a>$b–?$c++:$c+=$b;
echo $a.”</br>”.$b.”</br>”.$c;
?>
100
99
109
5、用php打印出前一天的时间格式是2004-4-8 11:11:11
<?php
print_r(date(‘Y-n-j H:i:s’),strtotime(‘-1 day’));
?>
6、用php写出显示客户端IP与服务器IP的代码
<?php
echo $_SERVER[‘REMOTE_ADDR’];
echo $_SERVER[‘SERVER_ADDR’];
?>
7、请列举几种php页面传值的方法
GET POST COOKIE
8、不用新变量直接交换现有两个变量的值
<?php
$a = 1;
$b = 2;
// 把数组中的值赋给一些变量
list($b, $a) = array($a, $b);
?>
10、列举几种常用php框架
Yii,thinkphp,Zend Framework,CakePHP
(二)算法及程序题
1、如何实现字符串翻转
<?php
$a = ‘abcde’;
$b = ”;
for ($i=strlen($a)-1;$i>=0;$i–) {
$b .= $a{$i};
}
// 或者
$c = strrev($a);
?>
2、书写冒泡排序算法
<?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;
}
}
}
?>
4、有一表menu(parent,clildren,url),请用递归法写出一树形菜单,将所有的menu列出来
<?php // parent为null,表示无父级,为一级菜单,clildren为其本身ID $menu = array( 0 => array(null,1,url1), 1 => array(null,2,url2), 2 => array(1,3,url3), 3 => array(1,4,url4), 4 => array(2,5,url5), 5 => array(1,6,url6), 6 => array(4,7,url7), 7 => array(5,8,url8) ); function menu($menu) { $menu1 = array(); $menu2 = array(); // 一级菜单 foreach ($menu as $k => $v) { if ($v[0] == null) { $menu1[$v[1]] = $v; unset($menu[$k]); } } // 二级菜单 foreach ($menu as $k => $v) { foreach ($menu1 as $k1 => $v1) { if ($v[0] == $v1[1]) { $menu1[$v1[1]]['clildren'][$v[1]] = $v; unset($menu[$k]); } } } // 三级菜单 foreach ($menu as $k => $v) { foreach ($menu1 as $k1 => $v1) { if ($v1['clildren']) { foreach ($v1['clildren'] as $k2 => $v2) { if ($v[0] == $v2[1]) { $menu1[$v1[1]]['clildren'][$v2[1]]['clildren'][$v[1]] = $v; unset($menu[$k]); } } } } } return $menu1; } $menu3 = menu($menu); print_r($menu3); ?>
(三)综合问答题
3、谈谈事务处理
什么是事务呢?所谓事务(transaction),其实就是一个操作单元,在这个单元中的所有操作要么都执行,要么都失败。如果所有操作成功,事务则提交(commit)。即使一个操作失败,事务也将回滚(roll back),所有被影响的数据将恢复到以前的状态。
4、表单提交get和post有何区别?如何在客户端实现局部更新与服务器完成交互?
GET方法是form表单提交数据的默认方法,它通过URL请求来传递用户的数据。GET方法传输的数据量非常小,一般限制在2KB左右,但是其执行效率比POST方法要高。由于使用GET方法传输的数据对用户是透明的,因此可能会带来一定的安全问题。POST方法通过HTTP POST机制,将表单内的数据放置在HTML表头(header)内传递给服务器端。与GET方法不同,POST方法传递的数据对用户是不可见的,而且POST方法传递的数据量也是比较大的。
ajax
7、SQL注入原理是什么及如何防止SQL注入?
SQL注入,就是攻击者通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到让后台数据库执行恶意的SQL命令的目的,并根据程序返回的结果,获得某些攻击者想得知的数据。
防止方法:
程序员加强自身技术水平,使用固定开发的标准;
在提交服务端处理之前对数据的合法性进行检查;
封闭客户端提交信息;
替换或删除敏感字符、字符串;
错误信息不返回给用户;
数据敏感信息非常规加密,防止信息外泄;
加强数据库检查,WEB服务器日志检查;
不用字串连接建立SQL查询,而使用SQL变量,因为变量不是可以执行的脚本;
8、有如下两个表结构,用户表:’user’,用户组表:’group’:
// 表名及字段名不能够加上单引号,且group不能够使用,因此将字段group修改为groupid,表group修改为groups
CREATE TABLE user(
id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
username varchar(50) DEFAULT NULL,
age int(11) DEFAULT NULL,
level int(11) DEFAULT NULL,
groupid int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE groups(
groupid int(11) NOT NULL AUTO_INCREMENT,
groupname varchar(50) DEFAULT NULL,
grouplevel int(11) DEFAULT NULL,
PRIMARY KEY(groupid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
书写SQL查询语句查询:
(1)取出年纪在20-50之间,姓“张”,等级小于5的用户id;按降序排列
SELECT id FROM user WHERE (age BETWEEN 20 AND 50) AND username LIKE ‘张%’ AND level<5 ORDER BY age,id DESC
(2)取出所在用户组名称为“技术部”且用户组等级在2-10之间的所有年纪大于25的用户姓名
SELECT username FROM user AS u LEFT OUTER JOIN groups AS g ON u.groupid=g.groupid WHERE g.groupname=’技术部’ AND (g.grouplevel BETWEEN 2 AND 10) AND u.age>25
(3)取出年纪范围1-10,11-20,21-30,31以上各范围属于用户组“技术部”的成员数量,按照范围对应数量显示
SELECT COUNT(id) FROM user AS u
LEFT OUTER JOIN groups AS g ON u.groupid=g.groupid
WHERE (g.groupname=’技术部’) AND (u.age between 1 AND 10)
如此再重复执行3次就是了
(四)Socket操作
1、列举php Socket通信几个常用的操作函数,分别的作用是什么及如何判断获取每个操作的异常?
getprotobyname() 获取与协议名称相关的协议号
socket_create() 创建一个套接字(通讯节点)
socket_bind() 给套接字绑定名字
2、书写一个简单的Socket请求程序,指定IP为:192.168.0.1,指定端口为:9501,发送内容:12345,协议为TCP
<?php //确保在连接客户端时不会超时 set_time_limit(0); $ip = '192.168.0.1'; $port = 9501; /* +------------------------------- * @socket通信整个过程 +------------------------------- * @socket_create * @socket_bind * @socket_listen * @socket_accept * @socket_read * @socket_write * @socket_close +-------------------------------- */ /*---------------- 以下操作都是手册上的 -------------------*/ if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0) { echo "socket_create() 失败的原因是:".socket_strerror($sock)."\n"; } if(($ret = socket_bind($sock,$ip,$port)) < 0) { echo "socket_bind() 失败的原因是:".socket_strerror($ret)."\n"; } if(($ret = socket_listen($sock,4)) < 0) { echo "socket_listen() 失败的原因是:".socket_strerror($ret)."\n"; } $count = 0; do { if (($msgsock = socket_accept($sock)) < 0) { echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n"; break; } else { //发到客户端 $msg ="测试成功!\n"; socket_write($msgsock, $msg, strlen($msg)); echo "测试成功了啊\n"; $buf = socket_read($msgsock,8192); $talkback = "收到的信息:$buf\n"; echo $talkback; if(++$count >= 5){ break; }; } //echo $buf; socket_close($msgsock); } while (true); socket_close($sock); ?>
<?php error_reporting(E_ALL); set_time_limit(0); echo " <h2>TCP/IP Connection</h2> \n"; $port = 9501; $ip = "192.168.0.1"; /* +------------------------------- * @socket连接整个过程 +------------------------------- * @socket_create * @socket_connect * @socket_write * @socket_read * @socket_close +-------------------------------- */ $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n"; }else { echo "OK.\n"; } echo "试图连接 '$ip' 端口 '$port'...\n"; $result = socket_connect($socket, $ip, $port); if ($result < 0) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n"; }else { echo "连接OK\n"; } $in = "12345\r\n"; $out = ''; if(!socket_write($socket, $in, strlen($in))) { echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n"; }else { echo "发送到服务器信息成功!\n"; echo "发送的内容为:<font color='red'>$in</font> "; } while($out = socket_read($socket, 8192)) { echo "接收服务器回传信息成功!\n"; echo "接受的内容为:",$out; } echo "关闭SOCKET...\n"; socket_close($socket); echo "关闭OK\n"; ?>
1、用您自己的方式,写一个计算器,包含功能+-*/等等,按自己技术水平发挥,代码质量越高越好
<?php // 第1个参数为计算符号,第2、3个参数为需要计算的值 function calculate($symbol, $v1, $v2) { if (is_numeric($v1) && is_numeric($v2)) { switch ($symbol) { case '+': return $v1+$v2; break; case '-': return $v1-$v2; break; case '*': return $v1*$v2; break; case '/': return $v1/$v2; break; default: return '计算符号只支持+-*/,其他的晢不支持'; break; } } else { return '第1个参数为计算符号,第2、3个参数为需要计算的值,且必须为数字'; } } echo calculate('-', 6, 3); ?>
2、简述一下mysql高级技术及在实践中的故事
3、谈谈. , – @ & — ++ ^ $ 等符号在程序编码中的用处,越详尽越好
.:连接字符串
,:array中的间隔符号
-:减法运算符
@:错误抑制运算符
&:&&为逻辑运算符,表示且
–:自减运算符(当运算符位于变量后面时,先返回变量值然后再自减;当运算符位于变量前面时,先自减然后再返回变量值)
++:自加运算符(当运算符位于变量后面时,先返回变量值然后再自加;当运算符位于变量前面时,先自加然后再返回变量值)
^:异或操作符
$:变量前缀符号
4、谈谈您对面向对象的理解
“面向对象”将构成问题的事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤中的行为。
6、编程实现颠倒一个字符串字母的顺序
<?php $v1 = 'abcde'; $v2 = ''; for ($i=strlen($v1)-1; $i>=0; $i--) { $v2 .= $v1{$i}; } echo $v2; ?>
7、写出至少5个优化mysql数据库的方法
优化查询,如使用索引、用连接查询代替子查询
优化数据库结构,如分表、增加中间表、增加冗余字段、分析表、检查表、优化表
优化插入记录的速度,如插入记录前先禁用索引、一个insert语句插入多条记录
优化mysql服务器硬件配置,如增加内存、磁盘数量、提高磁盘读写速度
优化mysql服务器参数配置
1、用js语法(非jquery语法)写出下面语句的等价语句($表示jquery中的$)
<script> $.each([0, 1, 2], function(i, n){ alert(i); }); var a = new Array(0, 1, 2); for (var i = 0; i < a.length; i++) { alert(i); } </script>
2、以下语句的作用是什么?($代表jquery中的$)
2.1
<script> var a = 2; var b = 3; var fun = $.extend({ min:function(a, b){ return a < b ? a : b; }, max:function(a, b){ return a > b ? a : b; } }); //合并一个对象,{min:2, max:3},一般是需要两个对象才执行合并的 </script>
2.2
<script> $(document).ready(function(){ $("tr").hover(function(){ $(this).addClass("over"); },function(){ $(this).addClass("out"); }) }) //当鼠标移动到tr上时,给tr添加类over,移开时,给tr添加类out </script>
3、行内元素有哪些?块级元素有哪些?
行内元素:
a – 锚点、br – 换行、em – 强调、img – 图片、input – 输入框、span – 定义文本内区块、textarea – 多行文本输入框、sub – 下标、sup – 上标、label – 表格标签等
块级元素:
h1 – 大标题、h2 – 副标题、h3 – 3级标题、h4 – 4级标题、h5 – 5级标题、h6 – 6级标题、div – 常用块级内容,也是css layout的主要标签、dl – 定义列表、dt – 定义列表中的项目、ul – 非排序列表、ol – 排序列表、li – 定义列表项目、table – 表格、 tbody – 表格主体(正文)、td – 表格中的标准单元格、thead – 表格的表头、tfoot – 表格的页脚(脚注或表注)、tr – 表格中的行等
4、按照你的理解描述一下javascript中的对象
javascript中的所有事物都是对象:字符串、数值、数组、函数…
此外,javascript允许自定义对象。
5、列举你工作中遇到的IE6 hack,谈谈解决方案
终极方法:条件注释 <!–[if lte IE 6]><html><![endif]–>
css选择器区分,IE6不支持子选择器,先针对IE6使用常规申明选择器,然后再用子选择器针对IE7+及其他浏览器
使用IE6不支持但其余浏览器支持的!important
当元素浮动时,IE6会错误的把浮动方向的margin值双倍计算,因此应尽量避免float和margin的同时使用
:hover(除了href)在IE6中不支持,最好不要用:hover来实现重要的功能,直接使用js事件
png半透明图片的问题,建议尽量采用png-8,如果采用png-24或者png-32的话,就需要通过js实现
6、css引入的方式有哪些?link和@import的区别是?
使用link标签
使用style属性
使用style标签
使用@import引入
区别:
link属于xhtml标签,而@import完全是css提供的一种方式
加载顺序的差别,当一个页面被加载的时候,link引用的css会同时被加载,而@import引用的css会等到页面全部被下载完才被加载
兼容性的差别,@import在一些老版本的浏览器(IE5-)不被支持
使用dom控制样式时的差别,当使用javascript控制dom去改变样式的时候,只能使用link标签,因为@import不是dom可以控制的
7、清除浮动的方法有哪些,分别适用于什么情形
使用空标签清除浮动
使用overflow属性
使用after伪对象清除浮动
8、有没有关注html5和css3?请简单说一些你对它们的了解情况,或写几行代码解释说明
html5将成为html、xhtml以及html dom的新标准。
html的上一个版本诞生于1999年,自从那以后,web世界已经经历了巨变。
html5仍处于完善之中,然而,大部分现代浏览器已经具备了某些html5支持。
css3是最新的css标准。
w3c仍然在对css3规范进行开发。现代浏览器已经实现了相当多的css3属性。
9、如果让你来制作一个访问量很高的大型网站,你会如何来管理所有css文件、js文件与图片?
前端开发规范的确立,如编码模式、css重置/全局文件、背景图片采用聚合等;
页面进行标注,如模块的开始、结束等;
单个功能模块标注作者、模块名称等基本信息;
单个功能模块的名称,html/js/css/image等均要统一命名;
在前端文件url后面加上状态值,如md5值等,对应某一个具体版本;
指定图片尺寸、不要使用尺寸缩放等;
优化图片,在保持质量一定的情况下,如ysmush.it(无损压缩)等;
在生产环境中压缩、合并文件;
10、有没有做过asp.net项目的前端开发?你在项目中的角色是?
11、有一个网站,其栏目如下:
站长之家|网站运营|设计在线|网络编程|联盟资讯|服务器
其中鼠标移动到 设计在线 上显示如下二级菜单:
网页设计|web标准|视频处理|设计活动
其中鼠标移动到 网络编程 同样显示如下二级菜单
php编程|.net编程|xml编程
鼠标离开 设计在线 或 网络编程,二级菜单均会自动隐藏
利用服务器端输出的json或xml数据(数据自己构造),请使用javascript将该数据输出到层<div id=”nav”></div>中。(请求服务器端数据的方法如下 ajaxRead;服务器端地址为:”/ajax.aspx?type=nav”)
function ajaxRead(src,fun){
//该方法可以根据请求地址src读出相关的json或xml数据,然后执行回调函数fun
}
请构造出该菜单的json或者xml数据
<?php
$nav = array(
‘站长之家’ => array(),
‘网站运营’ => array(),
‘设计在线’ => array(
‘网页设计’ => array(),
‘web标准’ => array(),
‘视频处理’ => array(),
‘设计活动’ => array()
),
‘网络编程’ => array(
‘php编程’ => array(),
‘.net编程’ => array(),
‘xml编程’ => array()
),
‘联盟资讯’ => array(),
‘服务器’ => array()
);
print_r($nav);
$code = json_encode($nav);
echo preg_replace(“#\\\u([0-9a-f]+)#ie”, “iconv(‘UCS-2′,’UTF-8’, pack(‘H4’, ‘\\1’))”, $code);
?>
<script>
var json = {“站长之家”:[],”网站运营”:[],”设计在线”:{“网页设计”:[],”web标准”:[],”视频处理”:[],”设计活动”:[]},”网络编程”:{“php编程”:[],”.net编程”:[],”xml编程”:[]},”联盟资讯”:[],”服务器”:[]};
var nav = eval(json);
$(nav).each(function(i,n) {
var val = nav[i];
if (typeof (val.summary) == “object”) {
$(val.summary).each(function(i,n) {
// 二级菜单
});
} else {
// 一级菜单
}
});
</script>
请完善回调函数fun
// 遍历json数据,构建ul菜单,然后插入(append)div中
3、有一个网页地址,比如弘和公司主页:http://www.sc66666.com/index.html,如何得到它的内容?
<?php
$url = “http://www.sc66666.com/index.html”;
$contents = file_get_contents($url);
echo $contents;
?>
4、分别描述php5.2和php5.3的垃圾回收算法,并比较其优劣
php5.2的垃圾回收算法-Reference Counting,中文翻译为“引用计数”,其思想直观且简洁,容易造成内在泄露
php5.3的垃圾回收算法-Concurrent Cycle Collection in Reference Counted Systems,在可能引发累积性内存泄露的场景下,php5.2发生持续累积性内存泄露,而php5.3则总能将内存泄露控制在一个阈值以下(与根缓冲区大小有关),但是其垃圾回收机制的性能会低上一些
近期评论