据说是新浪乐居的面试题及我的答案以及对笔试题的一些建议
程序员文章站
2022-05-02 08:25:03
...
一、
1、有如下HTML:
1)用js取得________方法取得该对象;
2)用________属性取得属性title的属性值;
3)用________方法取得属性sina_title的属性值;
(1) document.getElementById('img1');
(2) document.getElementById('img1').getAttribute('title');
(3) document.getElementById('img1').getAttribute('sina_title');
2、php中对数组序列化和反序列化的函数分别是______和_______;
serialize,upserialize
3、rawurlencode和urlencode函数的区别是__________________;
rawurlencode会将空格转换为+,urlencode会把空格转换为%20
4、php中过滤HTML的函数是_______,转义的函数是____________;
strip_tags,htmlspecialchars
5、写出用正则把HTML中的js脚本过滤掉;
preg_replace('//is','',$htmlcode);
6、SQL中LEFT JOIN的含义是______________;
如果有一个表tl_user存储学生ID和名字name,另外一个表tl_score存储学生ID、科目subject和成绩score(有的学生没有考试成绩),写出sql语句打印出学生名字和各科总成绩;
左联接,首先将左表中所有数据取出,然后再将满足where条件中的右表数据取出来。当此行的数据并不满足where条件,则返回空.
select tu.name,sum(ts.score) as totalscore from tl.user left join tl_score on tl.uid = ts.uid;
7、写出三个调用系统命令的函数;
system,passthru,exec
8、josn处理数组的函数是;
json_encode,json_decode
9、php中判断变量是否被设置是函数是_______;判断是否为空的是___________;
isset,empty
10、error_reporting("E_ALL")和ini_set("display_errors", "on")的区别_________;
前者是设置错误显示等级,E_ALL代表提示全部错误(包括notice,warnning和error)。后者是设置让php显示错误,在关于错误显示控制中,后者的优先级最高。
11、PHP写出显示客户端IP的预定义变量________;提供来路url的是__________;
$_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_REFERER']
12、php把utf-8转换成gbk的函数是___________;
iconv('UTF-8','GBK',$str);
13、php中分割字符串成数组的函数__________,连接数组成字符串的是_______;
explode,implode
14、php中类的静态方法怎么使用_____________________________________;
在类外部,使用:类名后面跟双冒号,再后面是方法名,类似classname::staticFucntion(),由于静态方法不属于某个对象,而是隶属于整个类,所以要用类名来调用它。
二、
1、如下错误:mysql server not go away,的原因是什么?(大概这是这样)
应该是mysql has gone away吧?
一般情况下是由于max_allowed_packet设置的值过小导致的,max_allowed_packet用来控制缓冲区的包大小,有时在导入数据的时候,此值过小就容易造成缓冲区容量不够。将my.ini或my.cnf中的此值设置大一些即可解决。
还有一种可能是连接数据库时使用了单例模式,多次操作数据库但都使用的是同一个连接,由于mysql处理每个线程也是队列模式,当前一个操作还没执行完毕并且间隔小于wait_timeout所设置的值时就容易出现此问题,解决办法是将wait_timeout的值设置大一些。
2、mysql的静态表和动态表的区别,MyISAM和InnoDB的区别.
静态表是当一个表中没有采用varchar,blob,text这种可变长字段时,此表就是静态表,反之,如果一个表内存在至少一个可变长字段时,或者如果一个表被用ROW_FORMAT=DYNAMIC选项来创建,此表就为动态表。
myisam与innodb的区别在于,myisam不支持事务处理,因为其不用去做commit操作,所以操作起来速度会比innodb较快。innodb在安全性方面要好于myisam,由于支持事务处理,insert,update,delete,select。等操作在默认autocommit=0时,会将每一个操作都当作一个事务,可以进行rollback。如果autocommit=1时,每一个操作后它都会自动提交此事务,会造成执行的效率很慢,大概会比myisam慢10倍。
3、$a = 1; $b = & $a;
unset($a),$b是否还是1,为什么?
unset($b),$a是否还是1,为什么?
都等于1。
在php中,引用赋值不同于指针的感念,他只是将另一个变量名指向了某个内存地址。此题中:$b = &$a;只是将$b这个名字也指向了$a变量所指向的内存地址。unset时只是释放了这个名字的指向,并没有释放内存中的值。另一方面讲unset($a),其实也并未真正立刻释放内存中的值,也只是释放了这个名字的指向而已,该函数只有在变量值所占空间超过256字节长的时候才会释放内存,并且只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放。
三、
1、写出至少三个函数,取文件名的后缀,如文件'/as/image/bc.jpg',得到 jpg或者.jpg。
function myGetExtName1( $path ){
//取出最后一个出现.这个字符的索引位置
$begin = strrpos($path,'.');
//取出整个字符串长度
$end = strlen($path);
//从最后一个.的索引的位置截取到字符串的总长度后的结果返回
return $begin?substr($path,$begin,$end):'该文件没有扩展名';
}
function myGetExtName2( $path ){
return preg_match_all('/\.[^\.]+/is',$path,$m)?$m[0][count($m[0])-1]:'该文件没有扩展名';
}
function myGetExtName3( $path ){
//找到最后一个出现.字符的索引位置并将其后面的所有字符一起返回
return strrchr($path,'.')?strrchr($path,'.'):'该文件没有扩展名';
}
2、写一个函数,算出两个文件的相对路径如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; 计算出 $b 相对于 $a 的相路径。
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
//求$b相对于$a的相对路径
function getRelativelyPath($a,$b){
//拆分成数组
$a = explode('/',$a);
$b = explode('/',$b);
$path = '';
//将两个数组的索引重置
$c = array_values(array_diff($a,$b));
$d = array_values(array_diff($b,$a));
//去除掉a路径的文件名
array_pop($c);
//将a路径中的目录名替换为..
foreach($c as &$v) $v = '..';
//合并两个数组
$e = array_merge($c,$d);
//拼接路径
foreach($e as &$v)
$path .= $v.'/';
return rtrim($path,'/');
}
3、用二分法(也叫折半查找法)查找某元素,对像可以是有序数组。
//二分法查找一个数组中是否存在某值
function binSearchWithArray($array,$searchValue){
global $time;
if(count($array)>=1){
$mid = intval(count($array)/2);
echo '第',$time++,'次
';
echo '当前数组:';print_r($array);echo '
';
echo '查找位置索引:',$mid,'
';
echo '值:',$array[$mid],'
';
if($searchValue == $array[$mid]){
$time--;
return $searchValue.'被找到了,于第'.$time.'次,索引为'.$mid.'
';
}
elseif($searchValue
$array = array_slice($array,0,$mid);
return binSearchWithArray($array,$searchValue);
}
else{
$array = array_slice($array,$mid+1,count($array));
return binSearchWithArray($array,$searchValue);
}
}
return $searchValue.'没找到
';
}
$time = 1;
//要查找的数组
$array = array(1,5,8,101,13,19,25,50,60,199,35);
//要查找的值
$searchValue = 13;
//对数组排序,二分法的关键
sort($array);
echo '要查找的值为:',$searchValue,'
';
echo binSearchWithArray($array,$searchValue);
这些题说实话不难,但我还是必须承认有些题我查了资料,因为很多函数平时不借助IDE根本想不起来怎么写,有些概念以前即使知道并理解,但好长时间不涉及却会渐渐淡忘,比如按引用传递那个。
面试时都是让拿笔写,我相信没几个人能用笔在短时间内把这些东西都写出来,尤其是后面的写代码的,需要反复修改,因为你在思考的过程中逻辑肯定会出现些漏洞,需要将代码执行下才能明白哪里出了问题,用笔写真的是扯淡。就算在计算机上写,后面的一些代码我还写了2,3个小时呢。
面试时的笔试题,真的有待商榷,相信不止我一个人有此感受吧?上次去腾讯面试我就被笔试题给害了。到那了头脑一片空白,回家后慢慢回忆那些题,发现都能写出来的。
1、有如下HTML:
1)用js取得________方法取得该对象;
2)用________属性取得属性title的属性值;
3)用________方法取得属性sina_title的属性值;
(1) document.getElementById('img1');
(2) document.getElementById('img1').getAttribute('title');
(3) document.getElementById('img1').getAttribute('sina_title');
2、php中对数组序列化和反序列化的函数分别是______和_______;
serialize,upserialize
3、rawurlencode和urlencode函数的区别是__________________;
rawurlencode会将空格转换为+,urlencode会把空格转换为%20
4、php中过滤HTML的函数是_______,转义的函数是____________;
strip_tags,htmlspecialchars
5、写出用正则把HTML中的js脚本过滤掉;
preg_replace('/
6、SQL中LEFT JOIN的含义是______________;
如果有一个表tl_user存储学生ID和名字name,另外一个表tl_score存储学生ID、科目subject和成绩score(有的学生没有考试成绩),写出sql语句打印出学生名字和各科总成绩;
左联接,首先将左表中所有数据取出,然后再将满足where条件中的右表数据取出来。当此行的数据并不满足where条件,则返回空.
select tu.name,sum(ts.score) as totalscore from tl.user left join tl_score on tl.uid = ts.uid;
7、写出三个调用系统命令的函数;
system,passthru,exec
8、josn处理数组的函数是;
json_encode,json_decode
9、php中判断变量是否被设置是函数是_______;判断是否为空的是___________;
isset,empty
10、error_reporting("E_ALL")和ini_set("display_errors", "on")的区别_________;
前者是设置错误显示等级,E_ALL代表提示全部错误(包括notice,warnning和error)。后者是设置让php显示错误,在关于错误显示控制中,后者的优先级最高。
11、PHP写出显示客户端IP的预定义变量________;提供来路url的是__________;
$_SERVER['REMOTE_ADDR'],$_SERVER['HTTP_REFERER']
12、php把utf-8转换成gbk的函数是___________;
iconv('UTF-8','GBK',$str);
13、php中分割字符串成数组的函数__________,连接数组成字符串的是_______;
explode,implode
14、php中类的静态方法怎么使用_____________________________________;
在类外部,使用:类名后面跟双冒号,再后面是方法名,类似classname::staticFucntion(),由于静态方法不属于某个对象,而是隶属于整个类,所以要用类名来调用它。
二、
1、如下错误:mysql server not go away,的原因是什么?(大概这是这样)
应该是mysql has gone away吧?
一般情况下是由于max_allowed_packet设置的值过小导致的,max_allowed_packet用来控制缓冲区的包大小,有时在导入数据的时候,此值过小就容易造成缓冲区容量不够。将my.ini或my.cnf中的此值设置大一些即可解决。
还有一种可能是连接数据库时使用了单例模式,多次操作数据库但都使用的是同一个连接,由于mysql处理每个线程也是队列模式,当前一个操作还没执行完毕并且间隔小于wait_timeout所设置的值时就容易出现此问题,解决办法是将wait_timeout的值设置大一些。
2、mysql的静态表和动态表的区别,MyISAM和InnoDB的区别.
静态表是当一个表中没有采用varchar,blob,text这种可变长字段时,此表就是静态表,反之,如果一个表内存在至少一个可变长字段时,或者如果一个表被用ROW_FORMAT=DYNAMIC选项来创建,此表就为动态表。
myisam与innodb的区别在于,myisam不支持事务处理,因为其不用去做commit操作,所以操作起来速度会比innodb较快。innodb在安全性方面要好于myisam,由于支持事务处理,insert,update,delete,select。等操作在默认autocommit=0时,会将每一个操作都当作一个事务,可以进行rollback。如果autocommit=1时,每一个操作后它都会自动提交此事务,会造成执行的效率很慢,大概会比myisam慢10倍。
3、$a = 1; $b = & $a;
unset($a),$b是否还是1,为什么?
unset($b),$a是否还是1,为什么?
都等于1。
在php中,引用赋值不同于指针的感念,他只是将另一个变量名指向了某个内存地址。此题中:$b = &$a;只是将$b这个名字也指向了$a变量所指向的内存地址。unset时只是释放了这个名字的指向,并没有释放内存中的值。另一方面讲unset($a),其实也并未真正立刻释放内存中的值,也只是释放了这个名字的指向而已,该函数只有在变量值所占空间超过256字节长的时候才会释放内存,并且只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放。
三、
1、写出至少三个函数,取文件名的后缀,如文件'/as/image/bc.jpg',得到 jpg或者.jpg。
function myGetExtName1( $path ){
//取出最后一个出现.这个字符的索引位置
$begin = strrpos($path,'.');
//取出整个字符串长度
$end = strlen($path);
//从最后一个.的索引的位置截取到字符串的总长度后的结果返回
return $begin?substr($path,$begin,$end):'该文件没有扩展名';
}
function myGetExtName2( $path ){
return preg_match_all('/\.[^\.]+/is',$path,$m)?$m[0][count($m[0])-1]:'该文件没有扩展名';
}
function myGetExtName3( $path ){
//找到最后一个出现.字符的索引位置并将其后面的所有字符一起返回
return strrchr($path,'.')?strrchr($path,'.'):'该文件没有扩展名';
}
2、写一个函数,算出两个文件的相对路径如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; 计算出 $b 相对于 $a 的相路径。
$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
//求$b相对于$a的相对路径
function getRelativelyPath($a,$b){
//拆分成数组
$a = explode('/',$a);
$b = explode('/',$b);
$path = '';
//将两个数组的索引重置
$c = array_values(array_diff($a,$b));
$d = array_values(array_diff($b,$a));
//去除掉a路径的文件名
array_pop($c);
//将a路径中的目录名替换为..
foreach($c as &$v) $v = '..';
//合并两个数组
$e = array_merge($c,$d);
//拼接路径
foreach($e as &$v)
$path .= $v.'/';
return rtrim($path,'/');
}
3、用二分法(也叫折半查找法)查找某元素,对像可以是有序数组。
//二分法查找一个数组中是否存在某值
function binSearchWithArray($array,$searchValue){
global $time;
if(count($array)>=1){
$mid = intval(count($array)/2);
echo '第',$time++,'次
';
echo '当前数组:';print_r($array);echo '
';
echo '查找位置索引:',$mid,'
';
echo '值:',$array[$mid],'
';
if($searchValue == $array[$mid]){
$time--;
return $searchValue.'被找到了,于第'.$time.'次,索引为'.$mid.'
';
}
elseif($searchValue
$array = array_slice($array,0,$mid);
return binSearchWithArray($array,$searchValue);
}
else{
$array = array_slice($array,$mid+1,count($array));
return binSearchWithArray($array,$searchValue);
}
}
return $searchValue.'没找到
';
}
$time = 1;
//要查找的数组
$array = array(1,5,8,101,13,19,25,50,60,199,35);
//要查找的值
$searchValue = 13;
//对数组排序,二分法的关键
sort($array);
echo '要查找的值为:',$searchValue,'
';
echo binSearchWithArray($array,$searchValue);
这些题说实话不难,但我还是必须承认有些题我查了资料,因为很多函数平时不借助IDE根本想不起来怎么写,有些概念以前即使知道并理解,但好长时间不涉及却会渐渐淡忘,比如按引用传递那个。
面试时都是让拿笔写,我相信没几个人能用笔在短时间内把这些东西都写出来,尤其是后面的写代码的,需要反复修改,因为你在思考的过程中逻辑肯定会出现些漏洞,需要将代码执行下才能明白哪里出了问题,用笔写真的是扯淡。就算在计算机上写,后面的一些代码我还写了2,3个小时呢。
面试时的笔试题,真的有待商榷,相信不止我一个人有此感受吧?上次去腾讯面试我就被笔试题给害了。到那了头脑一片空白,回家后慢慢回忆那些题,发现都能写出来的。
各位都看看我的答案,有有没有疏漏或错误的地方,我并不是觉得考这些东西完全没有价值,只是觉得面试时作为笔试题很不妥。希望各位在各个公司参与面试别人的朋友能参考下我的意见,换一种更加合理的考核方式。
原文地址:http://bbs.csdn.net/topics/340149214
以上就介绍了据说是新浪乐居的面试题及我的答案以及对笔试题的一些建议,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。