基于PHP和AJAX创建RSS聚合器 移动IP与DHCP、VPN等技术的比较 五招让Vista电脑更具个性化 Oracle 如何搞垮他的数据库——谈Oracle安全

最新的新浪PHP面试题(2009.3)

[ 412 查看 / 61 回复 ]

昨天刚去新浪面试,趁着没忘(可惜还是忘了至少4道题),赶快发出来,大家有兴趣的做做。

1. echo count("abc"); 输出什么?

2. echo,print()和print_r()有什么区别?

3. 打开php.ini中的Safe_mode,会影响哪些参数?至少说出6个。

4. 写个函数来解决多线程同时读写一个文件的问题。

5. 写出一种排序算法(要写出代码),并说出优化它的方法。

6. 写个函数用来对二维数组排序。

7. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。

8. 一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
TOP

最新的新浪PHP面试题(2009.3)

4.5.8 这三道题貌似见过N次了。。。
TOP

最新的新浪PHP面试题(2009.3)

我又想了想,又回忆了一些,一共13道题,应该差不多就是这些了:

1. echo count("abc"); 输出什么?

2. 用PHP写出显示客户端IP与服务器IP的代码

3. error_reporting(2047)什么作用?

4. echo,print()和print_r()有什么区别?

5. 打开php.ini中的Safe_mode,会影响哪些参数?至少说出6个。

6. 写个函数来解决多线程同时读写一个文件的问题。

7. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)

8. 考SQL语句的题,题太长了,实在不好回忆了。

9. MySQL数据库,一天一万条以上的增量,怎么优化?

10. 写出一种排序算法(要写出代码),并说出优化它的方法。

11. 写个函数用来对二维数组排序。

12. 写5个不同的自己的函数,来截取一个全路径的文件的扩展名,允许封装php库中已有的函数。

13. 一群猴子排成一圈,按1,2,...,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去...,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
TOP

最新的新浪PHP面试题(2009.3)

够狠的T
出8道

呵呵,不是非常熟手估计要写很久
TOP

最新的新浪PHP面试题(2009.3)

虽说不跳槽,但是就喜欢解这种题,感谢分享!
TOP

最新的新浪PHP面试题(2009.3)

最后一题,不知道对与否,大家可以测试验证
PHP code

function re($n,$m)
{
   
$a = array();
   
$b = array();
   
for($i=0;$i<$n;$i++)
    {
       
$a[$i]=$i+1;
    }
   
$start=0;
   
$k=0;
   
for($i = $n;$i >= 2;$i--)     
            {
               
$start = ($start + $m - 1) % $i;
               
if ($start == 0)
                   
$start = i;
               
$b[$k] = $a[$start];
               
$k++;
               
for ($j = $start + 1; $j <= $i; $j++)
                   
$a[$j - 1] = $a[$j];
            } 
       
$b[$k]=$a[0];
   
return $b[$k];
}
echo re(10,3);

TOP

最新的新浪PHP面试题(2009.3)

上面写错了

应该似乎
PHP code

function re($n,$m)
{
   
$a = array();
   
$b = array();
   
for($i=0;$i<$n;$i++)
    {
       
$a[$i]=$i+1;
    }
   
$start=0;
   
$k=0;
   
for($i = $n;$i >= 2;$i--)     
            {
               
$start = ($start + $m - 1) % $i;
               
$b[$k] = $a[$start];
               
$k++;
               
for ($j = $start + 1; $j <= $i; $j++)
                   
$a[$j - 1] = $a[$j];
            } 
       
$b[$k]=$a[0];
   
return $b[$k];
}
echo re(10,3);

TOP

最新的新浪PHP面试题(2009.3)

学习一下
TOP

最新的新浪PHP面试题(2009.3)

第十三题是约瑟夫环问题,相当经典的算法了
http://tieba.baidu.com/f?kz=307686067 这个是C++的算法
TOP

最新的新浪PHP面试题(2009.3)

等答案。
TOP

最新的新浪PHP面试题(2009.3)


1-7题是手册题,看手册解决!
TOP

最新的新浪PHP面试题(2009.3)

error_reporting(2047)什么作用? 
打开php.ini中的Safe_mode,会影响哪些参数?至少说出6个。

比较变态的题目(如果不允许查手册的话)。而且是一大抄。

error_reporting共有14个参数,至少要记住11种参数及意义。出题目的人都未必能回答

Safe_mode在php6中属于淘汰技术。
TOP

最新的新浪PHP面试题(2009.3)

Q8:记得学C语言时,好像就是用前后指针弄的.
===============================================
PHP code

function kickMonkey($n,$m)
{
   
/*monkeys array*/
   
$monkeys = array();
   
$before[1] = $n;
   
for($i=1;$i<=$n;$i++)
    {
       
$before[$i] = $i == 1 ? $n : $i-1;
       
$next[$i]    = $i == $n ? 1 : $i+1;
    }
   
$i = 1;
   
$loop = 1;
   
while($next[$next[$i]])
    {
       
if($loop == $m)
        {   
           
$x = $next[$before[$i]] = $next[$i];
           
$before[$next[$i]] = $before[$i];
           
unset($next[$i]);
           
$loop = 1;
        }
       
else
        {
           
$x = $next[$i];
           
$loop++;
        }
       
$i = $x;       
    }
   
return $i;
}
echo "The king is monkey :".kickMonkey(10,4);

TOP

最新的新浪PHP面试题(2009.3)

LS的貌似比我的还复杂

TOP

最新的新浪PHP面试题(2009.3)

虽然用过N年的PHP,看了这些题,我准备转行了。

TOP

最新的新浪PHP面试题(2009.3)

我贴一下猴子题我的解法,比较笨,但是测试过了,是正确的:
PHP code

  /*
  13. 一群猴子排成一圈,按1,2,...,n依次编号。
  然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,
  再数到第m只,在把它踢出去...,如此不停的进行下去,
  直到最后只剩下一只猴子为止,那只猴子就叫做大王。
  要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。
 
*/
 
 
 
// 输入m,n. 本程序用6和4来举个例子
  $n = 6;
 
$m = 4;
 
 
$monkeys = array();
 
 
for($i=1; $i<=$n; $i++){ //按1,2,...,n依次编号
      $monkeys[] = $i;
  }
 
 
echo '<pre>';
 
echo "start:";
 
print_r($monkeys);  //输出初始状态
 
 
$i = 0; //数组下标
  $z = 0; //数数的变量
  $c = $n; //用来记录还剩下的猴子个数
  while($c>1){ //只要剩下的猴子还多余一个,就继续循环
   
   
if($i == $n){
     
$i = 0//如果下标跑到头,就回0;用这个方法来模拟不停转圈。
    }
   
if($monkeys[$i] != null){ //跳过之前已经踢出去的猴子
      $z++; // 往下数
   
     
if($z == $m){ //如果数到了m
        $monkeys[$i] = null//数到第m只,把它踢出圈
    $c--; //猴子数量减1
    $z = 0//重新再数
    echo "temp:";
       
print_r($monkeys); //这里去掉注释可以输出中间过程,看清踢出的顺序
      } 
    }
   
   
$i++; //下标往下走
  }//while
 
 
echo "final:";
 
print_r($monkeys);//打印最后结果
 
 
echo '</pre>';

TOP

最新的新浪PHP面试题(2009.3)

运行结果如下:最后的大王编号是5
start:Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
)
temp:Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 
   [4] => 5
   [5] => 6
)
temp:Array
(
   [0] => 1
   [1] => 
   [2] => 3
   [3] => 
   [4] => 5
   [5] => 6
)
temp:Array
(
   [0] => 
   [1] => 
   [2] => 3
   [3] => 
   [4] => 5
   [5] => 6
)
temp:Array
(
   [0] => 
   [1] => 
   [2] => 
   [3] => 
   [4] => 5
   [5] => 6
)
temp:Array
(
   [0] => 
   [1] => 
   [2] => 
   [3] => 
   [4] => 5
   [5] => 
)
final:Array
(
   [0] => 
   [1] => 
   [2] => 
   [3] => 
   [4] => 5
   [5] => 
)

TOP

最新的新浪PHP面试题(2009.3)

我的想法很简单,就是用程序一丝不苟的来模拟整个过程:用数组来模拟圈,转到最后一个,就让下标归0;用一个变量来数数,数到m就归1;数到m的时候把当时那个数组元素赋为空值;最后剩下的唯一个不为空的数组元素肯定是大王;(这其中要注意的就是数的时候要跳过空值)。这样就避开了数组拆分,整除,取余等复杂算法,那些东西我脑子绕不过来。
TOP

最新的新浪PHP面试题(2009.3)

有人说我的算法貌似有点复杂,那我注释一下吧,其实很简单,是个牺牲空间换取时间的思路。
PHP code

function kickMonkey($n,$m)
{
       
//构造前后指向的猴子环状链表
    for($i=1;$i<=$n;$i++)
    {
       
$before[$i] = $i == 1 ? $n : $i-1;//当前猴子的前指向
        $next[$i]    = $i == $n ? 1 : $i+1;//当前猴子的后指向
    }
   
$i = 1;
   
$loop = 1;
       
//如果还有下一只猴子
    while($next[$next[$i]])
    {
       
if($loop == $m)
        {
//踢除猴子   
            $x = $next[$before[$i]] = $next[$i];//把前一只猴子的后指向改为下一只猴子
            $before[$next[$i]] = $before[$i];//把后一只猴子的前指向改为前一只猴子
            unset($next[$i]);//踢掉数到的猴子,直接踢掉,那下一次循环不会读到这只猴子了,所以循环只会越来越快
            $loop = 1;//从下一只猴子开始数
        }
       
else
        {
//继续数数
            $x = $next[$i];//当前猴子不踢除的话,就数到下一只猴子
            $loop++;
        }
       
$i = $x;       
    }
   
return $i;
}

TOP

最新的新浪PHP面试题(2009.3)

6楼和12楼的代码我都测试了一下,结果都是正确的。
TOP