一、 1、有如下HTML:<img title='aaaa' sina_title='bbbb' id='img1'> 
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('/<script.*?\/script>/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++,'次<br/>';
  echo '当前数组:';print_r($array);echo '<br/>';
  
  echo '查找位置索引:',$mid,'<br/>';
  echo '值:',$array[$mid],'<br/><br/>';  if($searchValue == $array[$mid]){
   $time--;
   return $searchValue.'被找到了,于第'.$time.'次,索引为'.$mid.'<br/>';
  }
  elseif($searchValue < $array[$mid]){
   $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.'没找到<br/>';
}$time = 1;//要查找的数组
$array = array(1,5,8,101,13,19,25,50,60,199,35);
//要查找的值
$searchValue = 13;//对数组排序,二分法的关键
sort($array);echo '要查找的值为:',$searchValue,'<br/><br/>';
echo binSearchWithArray($array,$searchValue); 这些题说实话不难,但我还是必须承认有些题我查了资料,因为很多函数平时不借助IDE根本想不起来怎么写,有些概念以前即使知道并理解,但好长时间不涉及却会渐渐淡忘,比如按引用传递那个。面试时都是让拿笔写,我相信没几个人能用笔在短时间内把这些东西都写出来,尤其是后面的写代码的,需要反复修改,因为你在思考的过程中逻辑肯定会出现些漏洞,需要将代码执行下才能明白哪里出了问题,用笔写真的是扯淡。就算在计算机上写,后面的一些代码我还写了2,3个小时呢。面试时的笔试题,真的有待商榷,相信不止我一个人有此感受吧?上次去腾讯面试我就被笔试题给害了。到那了头脑一片空白,回家后慢慢回忆那些题,发现都能写出来的。各位都看看我的答案,有有没有疏漏或错误的地方,我并不是觉得考这些东西完全没有价值,只是觉得面试时作为笔试题很不妥。希望各位在各个公司参与面试别人的朋友能参考下我的意见,换一种更加合理的考核方式。

解决方案 »

  1.   

    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';
    echo getRelativelyPath($a,$b); // ../../12/34/c.php$a = '/a/b/c/d/e.php';
    $b = '/a/c/12/34/c.php';
    echo getRelativelyPath($a,$b); // ../../12/34/c.php
      

  2.   

    2)用________属性取得属性title的属性值;
    (2) document.getElementById('img1').title;       
      

  3.   

    请教下这题的正确答案,不知是否我的理解有误。求$b相对于$a的路径,我理解为从$a文件去找$b文件的路径。此函数得出的结果为../../12/34/c.php。1 去除两个文件的公共目录部分。/a/b/
    2 之后从e.php要找到c.php,需要向上两层,到达他们的公共目录中,也就是../../。
    3 然后再按照$b的目录向下去找那个文件,也就是./12/34/因此连起来就应该是../../12/34/c.php。
      

  4.   


    楼上朋友用$a = '/a/b/c/d/e.php';
    $b = '/a/c/12/34/c.php';
    测试的时候,得到../../12/34/c.php,这结果不对,往上要三层,呵呵~~~~~~~~~~~~
      

  5.   

    目录那题
    array_diff的时候,出现同名不同级目录时候,会有问题不过,笔试这么强悍,对我辈来说已经是高山仰止了啊啊
      

  6.   

    哦,谢谢楼上,我知道问题所在了。
    我是把路径放在数组中处理的,第一步去除公共目录部分的时候,检索有误,只考虑到了单个目录。没有考虑到$a = '/a/b/c/d/e.php';
    $b = '/a/c/12/34/c.php';按我的方法去除公共部分后,将a和c分别去掉,目录结构就不正确了。这个应该只去除c,谢谢,我再去改一下。
      

  7.   

    我比较笨$a = array("a","b","c","d");
    $b = array("a","c","12","34");
    $c=array();
    $d=array();
    $temp_value=0;
    $flag=0;
    foreach($a as $key=>$value){
    if($a[$key]==$b[$key]){
    $temp_value=$key;
    $flag=1;
    continue;
    }else{
    $c[]="../";
    if($b[$key]!=""){
    $d[]=$b[$key]."/";
    }
    $temp_value=$key;
    }
    }
    for($n=++$temp_value;$n<$b.length;$n++){
    $d[]=$b[$n];
    }
    $e = array_merge($c,$d);
    if($flag==1){
    echo  "../".implode("", $e);
    }else{
    echo  implode("", $e);
    }
      

  8.   

    做得不赖,,希望面试成功。3、rawurlencode和urlencode函数的区别是__________________; rawurlencode会将空格转换为+,urlencode会把空格转换为%20这题颠倒了,urlencode空格是+,rawurlencode是%20
      

  9.   

    2、写一个函数,算出两个文件的相对路径如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; 计算出 $b 相对于 $a 的相路径。
    这题以前好像做过一次,有不少陷阱。。基本几种情况1.
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/12/34/c.php';//题目故意出了比较简单的例子,试图降低我们的警惕性。
    2.
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/12/d/c.php';//LZ用array_diff可能会有问题的,上层目录都是d3.
    $a = '/a/b/c/d/x/x/x/x/x/e.php';//a目录比较深
    $b = '/a/b/12/d/c.php';4.
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/12/34/0/aa/c.php';//b目录比较深,注意目录名字有0,可能会影响判断。5
    $a = '/a/b/c/d/e.php';
    $b = '/x/xxx/xxxx/x/c.php';//相对根目录
    。。
    try..估计还是有问题。 $a = '/x/e.php';
    $b = '/a/b/12/34/c.php';


    $p1  = explode('/',$a);
    $p2  = explode('/',$b);
    $rel = false;
    $len    = count($p2);
    $t      = array();
    foreach( $p2 as $k=>$v)
    {
    //目录名相同,且之前未出现目录分支
    if( $p1[$k] == $v && $rel == false)
    {
    $s[]   = $v;
    continue;
    }
    else
    {
    //路径分支标志
    $rel = true;
    }

    if($rel && $k!=$len-1) $t[] = '..'; 
    }
    if(count($s) > 1)
    {
    $ts = implode('/',$t);
    echo preg_replace('#^'.implode('/',$s).'/#i',($ts ? $ts : '.').'/',$a);
    }
    else echo implode('/',$t).$a;
      

  10.   

    我刚才也写了个关于目录的那个问题的代码,大家看看,有什么漏了的没??
    function makePath($path){
    $os = explode(" ", php_uname());
    $win = $os[0]=="Windows" ? true : false;
    $win && $path = preg_replace("/(\\\\+)/","/",$path);//因为有转义,所以是4个\实际为\\
    $path = preg_replace("/(\/+)/","/",$path);
    $path_arr = explode('/',$path);
    $arrLength = count($path_arr);
    for($i=0;$i<$arrLength;$i++){
    if($path_arr[$i]=="."){
    unset($path_arr[$i]);
    }elseif($path_arr[$i]==".."){
    for($z=($i-1);$z>=0;$z--){
    if(isset($path_arr[$z]) && $path_arr[$z]!=".."){
    unset($path_arr[$z]);
    unset($path_arr[$i]);
    break;
    }
    }
    }
    }
    echo join("/",$path_arr)."<br>";
    return join("/",$path_arr);
    }
    function getRelpath($spath,$rpath){
    //$spath如果是文件夹,就一定加上末尾的“/”,否则会少一级目录
    $os = explode(" ", php_uname());
    $win = $os[0]=="Windows" ? true : false;
    //处理路径
    $spath_arr = explode("/",makePath($spath));
    $rpath_arr = explode("/",makePath($rpath)); //预定义
    $parentPath = array(); //记录上级路径
    $relPath = array(); //$rpath与$spath不同的路径
    $start = false;//是否开始计算
    $maxfor = max(count($spath_arr),count($rpath_arr));//得到元素最多的数组的个数,以便能完全遍历2个数组
    //循环遍历
    for($i=0;$i<$maxfor;$i++){
    if($spath_arr[$i] != $rpath_arr[$i] && $start == false)$start=true;
    if($start){
    if(isset($spath_arr[$i]))$parentPath[]= "..";
    $relPath[]= $rpath_arr[$i];
    }
    }
    //这里有一个问题需要注意,$spath是一个文件则要少一个../
    if(isset($parentPath[0]))unset($parentPath[0]);
    if(count($parentPath)==0)$parentPath[]= ".";
    $returnRelpath = join("/",$parentPath)."/".join("/",$relPath);
    $win && $returnRelpath = preg_replace("/(\/+)/","\\",$returnRelpath);
    return $returnRelpath;
    }$a1="E:\wwwroot\webroot\\\atert\\\\\\\\atert\\jftest\gfd/.//gfdgfd//..////gdgfd/fff/";
    $b1="E:\wwwroot\webroot\\\atert\\\\atert\\jftests\gfd2/.//5436546//..////hyt454/34/5436546/6547/56/75/6/4565/345/3g54t/1.php";
    $a2="./../../../retre/tre/tretre/./tretre/hgf4ee3../43trete/../../tretrete/./treter/tretreterbhgfbf/gd54/./4.xml";
    $b2="./../../../retre/tre/tretre/./tretre/hgf4ee3../43trete/../../tretrete/./treter/tretreterbhgfbf/gd54/./41.xml";
    echo getRelpath($a1,$b1)."<br><br>";
    echo getRelpath($a2,$b2)."<br><br>";
      

  11.   


    平时没机会,也写了一个:
    function getRelPath($a,$b){
     $a = explode('/',$a);
     $b = explode('/',$b); // $c = array_values(array_diff($a,$b));
     $c = count(array_diff($a,$b))-1;
     $d = array_diff($b,$a);
     return str_repeat("../", $c).implode('/',$d);}$a = '/a/f/g/h/e.php';
    $b = '/a/b/d/c.php';echo getRelPath($a,$b);
    http://www.zzxj.net/blog/fxs_2008/archive/2010/06/23/165.html
      

  12.   

    3、$a = 1; $b = & $a; 
    unset($a),$b是否还是1,为什么? 
    unset($b),$a是否还是1,为什么?  
    $a = 1;
    /**此时内存的symbols table存字符'a',且指向真实存储内容的zval结构体,(refcount=1;is_ref=0)*/
    $b = & $a;
    /**此时内存的symbols table存字符'b',且指向'a'所指向的zval,(refcount=2;is_ref=1)*/
    无论unset($a) 或者 unset($b),都只是把指向的zval的refcount减1,并不影响另一条指向,当zval的refcount置为0,zval才会被GC掉.手册说了原理
    http://www.php.net/manual/en/features.gc.refcounting-basics.php
    这位高手写的更详细些
    http://www.laruence.com/2008/09/19/520.html当然LZ的回答已经颇为接近了,再加点内部实现的一些粗略的说明,可能会被加分..呵呵
      

  13.   

    综合一下就完美了..<?php
    //写一个函数,算出两个文件的相对路径如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; 计算出 $b 相对于 $a 的相路径。function rp($p) {
        $os            = explode(" ", php_uname());
        $win        = $os[0]=="Windows" ? true : false;
        $win && $p        = preg_replace("/(\\\\+)/","/",$p);
        $p                = preg_replace("/(\/+)/","/",$p);    $p=explode('/', $p);
        $o=array();
        for ($i=0; $i<sizeof($p); $i++) {
            if (''==$p[$i] || '.'==$p[$i]) continue;
            if ('..'==$p[$i] && $i>0 && '..'!=$o[sizeof($o)-1]) {
                array_pop($o);
                continue;
            }
            array_push($o, $p[$i]);
        }
        return implode('/', $o);
    }function getRelPath($a,$b){
     $a = explode('/',$a);
     $b = explode('/',$b); // $c = array_values(array_diff($a,$b));
     $c = count(array_diff($a,$b))-1;
     $d = array_diff($b,$a);
     return str_repeat("../", $c).implode('/',$d);
    }
    $a = 'd:/..\a/f/g/h/../e.php';
    $b = 'd:/../a/b/d/c.php';echo getRelPath(rp($a),rp($b));?>
      

  14.   

    array_diff...
    我#27说了有一种情况,情况2,你看看
    不妨测试下
    $a = '/a/b/c/e.php';//b相对a应为 ../../c/c/c.php
    $b = '/a/c/c/c.php';
      

  15.   

    关于相对路径的问题,再说两句看了楼上同仁的解答,基本都是先求两路径的差集
    其实应先求出两路径的交集作为测试,先给出一种写法
    function rp($a, $b) {
      $a = split('/', $a);
      $b = split('/', $b);
      $d = array_intersect_assoc($a, $b);
      /** 求开始处连续的元素个数 **/
      for($i=0; $i<count($d); $i++) if(! isset($d[$i])) break;
      return str_repeat('../', count(array_slice($a, $i))-1) . join('/', array_slice($b, $i));
    }测试
    $ar = array(
      array(
        '/a/b/c/d/e.php',
        '/a/b/12/34/c.php',
      ),
      array(
        '/a/b/c/d/e.php',
        '/a/c/12/34/c.php',
      ),
      array(
        '/a/b/c/d/e.php',
        '/a/c/12/34/c.php',
      ),
      array(
        '/a/b/c/d/x/x/x/x/x/e.php',//a目录比较深
        '/a/b/12/d/c.php',
      ),
      array(
        '/a/b/c/d/e.php',
        '/a/b/12/34/0/aa/c.php',
      ),
      array(
        '/a/b/c/d/e.php',
        '/x/xxx/xxxx/x/c.php',//相对根目录
      ),
      array(
        '/a/b/c/e.php',//b相对a应为 ../../c/c/c.php
        '/a/c/c/c.php',
      ),
    );
    foreach($ar as $v) {
      echo "<br>$v[0]<br>$v[1]<br>";
      echo opposite_path($v[0], $v[1]) . '<br>';
      echo rp($v[0], $v[1]) . '<br>';
    }这是我早年写的代码
    /**
     * 函数 opposite_path
     * 功能 计算出$path到$consult的相对路径
     * 参数
     *  $path 字符串,起始路径
     *  $consult 字符串,目标路径
     * 说明 若路径中不包含文件名,则路径应该以“/”结束
     **/
    if(! function_exists('opposite_path')):
    function opposite_path($path, $consult) {
            $path = str_replace('\\', '/', $path);
            $consult = str_replace('\\', '/', $consult);
            if($path[0] != '/') $path = '/'.$path;
            if($consult[0] != '/') $consult = '/'.$consult;
            $i = $k = 0;
            while($path[$i] == $consult[$i]) {
                    if($path[$i] == '/') $k = $i;
                    $i++;
            }        if($n = substr_count(substr($path, $k+1), '/')) {
                    return c_dirname(str_repeat('../', $n).substr($consult, $k+1));
            }
            return c_dirname('./'. substr($consult, $k+1));
    }
    endif;
      

  16.   


    $a1="E:\wwwroot\webroot\\\atert\\\\\\\\atert\\jftest\gfd/.//gfdgfd//..////gdgfd/fff/";
    $b1="E:\wwwroot\webroot\\\atert\\\\atert\\jftests\gfd2/.//5436546//..////hyt454/34/5436546/6547/56/75/6/4565/345/3g54t/1.php";
    $a2="./../../../retre/tre/tretre/./tretre/hgf4ee3../43trete/../../tretrete/./treter/tretreterbhgfbf/gd54/./4.xml";
    $b2="./../../../retre/tre/tretre/./tretre/hgf4ee3../43trete/../../tretrete/./treter/tretre/../../terbhgfbf/gd54/./41.xml";function opposite_path($path, $consult) {
            $path = str_replace('\\', '/', $path);
            $consult = str_replace('\\', '/', $consult);
            if($path[0] != '/') $path = '/'.$path;
            if($consult[0] != '/') $consult = '/'.$consult;
            $i = $k = 0;
            while($path[$i] == $consult[$i]) {
                    if($path[$i] == '/') $k = $i;
                    $i++;
            }        if($n = substr_count(substr($path, $k+1), '/')) {
                    return c_dirname(str_repeat('../', $n).substr($consult, $k+1));
            }
            return c_dirname('./'. substr($consult, $k+1));
    }echo opposite_path($a1,$b1)."<br><br>";
    echo opposite_path($a2,$b2)."<br><br>";
    测试了下,老大的还是有问题。就是不知道c_dirname是做什么的正确的
    E:/wwwroot/webroot/atert/atert/jftest/gfd/gdgfd/fff/
    E:/wwwroot/webroot/atert/atert/jftests/gfd2/hyt454/34/5436546/6547/56/75/6/4565/345/3g54t/1.php
    ..\..\..\..\jftests\gfd2\hyt454\34\5436546\6547\56\75\6\4565\345\3g54t\1.php../../../retre/tre/tretre/tretre/tretrete/treter/tretreterbhgfbf/gd54/4.xml
    ../../../retre/tre/tretre/tretre/tretrete/terbhgfbf/gd54/41.xml
    ..\..\..\terbhgfbf\gd54\41.xml\
    老大的:
    ../../../../../../../../../../../../../../../atert/jftests/gfd2/.//5436546//..////hyt454/34/5436546/6547/56/75/6/4565/345/3g54t/1.php
    ../../../tretre/../../terbhgfbf/gd54/./41.xml
      

  17.   

    话说dingsongtao真够认真的,呵呵.替换多斜杠,模拟实现realpath,不错.
    如果是真实存在的路径,可以使用realpath函数format成绝对路径,然后算法都差不多了..
      

  18.   

    关于 二分法查找一个数组中是否存在某值 是不需要使用递归的//要查找的数组
    $array = array(1,5,8,101,13,19,25,50,60,199,35);
    //要查找的值
    $searchValue = 13;//对数组排序,二分法的关键
    sort($array);$n = tuo($array,$searchValue);
    echo $n==flase? 'no' : "$n : {$array[$n]}";function tuo($array, $searchValue) {
      list($start, $end) = array(0, count($array));
      while($end-$start > 1) {
      $mid = floor(($end-$start)/2);
        if($array[$mid] == $searchValue) return $mid;
        if($array[$mid] < $searchValue) list($start, $end) = array($start, $mid);
        else list($start, $end) = array($mid, $end);
      }
      if($array[$mid] == $searchValue) return $mid;
      return flase;
    }
      

  19.   


    测了一下,好像有误//$array = array(1,3,4,6,7,5,8,101,13,19,25,50,34);
      

  20.   

    preg_replace('/<script.*?\/script>/is','',$htmlcode);
    -->>
    preg_replace('/<script[\s\S]*?\/script>/is','',$htmlcode);js正则里“.”不包括\n,不知道php也是一样。
      

  21.   


    有几个笔误,比如false,
    $mid = floor(($end-$start)/2);  应该是+
    if($array[$mid] < $searchValue) list($start, $end) = array($start, $mid); 改成>
      

  22.   

    测了一下,还是有问题,当13排第一时,显示false
    题不大,要是上机拿分还真不容易
      

  23.   

    第二题写错了吧,应该是“unserialize”而不是“upserialize”
    看了几题,看不下去了。好难啊~~~~
    我跟面试的考官说我每次上网查就可以了,结果直接被PASS掉~
    一次伤心的记忆~,可惜之后我死记硬背仍旧是记不住这些,太多了,正则表达式还有其他的一些东西~
      

  24.   

    这样好像可以
    <?php
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/c/34/c.php';function getRelativePath($a,$b){
    $a1=explode("/",$a);
    $b1=explode("/",$b); $la=count($a1);
    $lb=count($b1);
    $l=min($la,$lb);
    for($i=0;$i<$l;$i++){
    if($a1[$i]==$b1[$i]){
    $a1[$i]="..";
    $b1[$i]="..";
    }else{
    break;
    }
    } array_shift($b1);
    $path=implode("/",$b1);
    return $path;
    }echo getRelativePath($a,$b);
    ?>
      

  25.   


    这个算法有问题的试下这个
    $a = '/a/f/c/d/e.php';
    $b = '/a/b/c/34/c.php';要找从第几个是不同的,返回这位置,其后才有意义
      

  26.   

    嗯,确实是笔误,序列化的函数我还是经常用的,但还是记不住。
    其实大多数面试官也不是特别难为人,你的代码写出来不一定要完全正确,也不一定要考虑各种复杂情况一点bug都没有。只要让他看出你的大体思路是正确的他们就算你答对了。谁也不是神,逻辑无法做到那么严谨。对于传说中盖茨当年写了个basic解析器一次性编译通过没有一点bug的事迹,我表示相当佩服也有些怀疑。
      

  27.   

    新浪的人 可能更想知道你的JavaScript基础...
    有基础 还搞不定jquery? 不过用jquery写这题真的十分方便...
      

  28.   


    嗯,这就是一个基本的语法问题,没任何逻辑的,经常写的人肯定会知道。跟用不用jquery没啥关系。