PHP面试题目 不指定

admin , 2010/08/01 10:43 , PHP , 评论(0) , 阅读(108) , Via 宝华的博客 原创 | |
1. echo count("abc"); 输出什么?
答案是1

2. 用PHP写出显示客户端IP与服务器IP的代码
获取客户端IP:
A、

<?
$iipp=$_SERVER["REMOTE_ADDR"];
echo $iipp;
?>

B、

<?
//php获取ip的算法
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
$ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
$ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif (getenv("HTTP_X_FORWARDED_FOR"))
{
$ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("HTTP_CLIENT_IP"))
{
$ip = getenv("HTTP_CLIENT_IP");
}
elseif (getenv("REMOTE_ADDR"))
{
$ip = getenv("REMOTE_ADDR");
}
else
{
$ip = "Unknown";
}
echo "你的IP:".$ip ;


获取服务器端IP

/**
* Get Client/Server IP
*
* @author  Yaron (http://yaron.org.cn)
* @version  0.1
* @package  
*/

class getIP{
function clientIP(){
  $cIP = getenv('REMOTE_ADDR');
  $cIP1 = getenv('HTTP_X_FORWARDED_FOR');
  $cIP2 = getenv('HTTP_CLIENT_IP');
  $cIP1 ? $cIP = $cIP1 : null;
  $cIP2 ? $cIP = $cIP2 : null;
  return $cIP;
}
function serverIP(){
  return gethostbyname($_SERVER_NAME);
}
}

$getIP  = new getIP();
$clientIp = getIP::clientIP();
$serverIp = getIP::serverIP();

echo 'Client IP is ',$clientIp,'<br />';
echo 'Server IP is ',$serverIp,'<br />';


3. error_reporting(2047)什么作用?


可以参考http://agileblog.cn/error-reporting-2047/

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

echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  
print只能打印出简单类型变量的值(如int,string)  
print_r可以打印出复杂类型变量的值(如数组,对象)  
echo -- 输出一个或者多个字符串  

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

system,passthru,exec,shell_exec,popen,phpinfo等等大部分的文件操作函数。
因为Safe_mode是php非常重要的内嵌的安全机制。默认是关闭的。

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

思路:首先生成一个锁文件,读写时判断时否存在, 存在则返回假值, 不存在执行程序, 并生成一个锁文件, 程序结束删除此锁文件。


7. 请写一个函数验证电子邮件的格式是否正确(要求使用正则)
<?php
function validateEmail($email){//使用正则表达式判断Email地址是否合法的函数
return ereg("^[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+$",$email);
}
echo validateEmail("myname@isstudy.com");//调用验证函数
?>

非正则的代码

<?php
function validateEmail($email){//判断Email地址是否合法的函数
$hasAtSymbol=strpos($email,"@");//判断是否存在@
$hasDot=strpos($email,".");//判断是否存在点号
if($hasAtSymbol and $hasDot)// 如果包含@和点号,则返回true
return true;
else  //否则返回false
return false;
}
echo validateEmail("domain@freezingsun.com");//调用验证函数
?>


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

9. MySQL数据库,一天一万条以上的增量,怎么优化?
做数据库负载即可。或者做数据仓库。
多台数据库服务器,设置一台为主数据库服务器,其他的为从数据库服务器。
也可参考:Query Cache 原理http://agileblog.cn/Query-Cache-Principle/

10. 写出一种排序算法(要写出代码),并说出优化它的方法。
以下是三种常见的排序算法,这些代码的话,无须优化了。可以说是一个标准的排序算法了。

<?
//插入排序(一维数组)
function insert_sort($arr){
 $count = count($arr);
 for($i=1; $i<$count; $i++){
  $tmp = $arr[$i];
  $j = $i - 1;
  while($arr[$j] > $tmp){
   $arr[$j+1] = $arr[$j];
   $arr[$j] = $tmp;
   $j--;
  }
 }
 return $arr;
}
  
//选择排序(一维数组)
function select_sort($arr){
 $count = count($arr);
 for($i=0; $i<$count; $i++){
  $k = $i;
  for($j=$i+1; $j<$count; $j++){
   if ($arr[$k] > $arr[$j])
    $k = $j;
   if ($k != $i){
    $tmp = $arr[$i];
    $arr[$i] = $arr[$k];
    $arr[$k] = $tmp;
   }
  }
 }
 return $arr;
}
  
//冒泡排序(一维数组)
function bubble_sort($array){
 $count = count($array);
 if ($count <= 0) return false;
 
 for($i=0; $i<$count; $i++){
  for($j=$count-1; $j>$i; $j--){
   if ($array[$j] < $array[$j-1]){
    $tmp = $array[$j];
    $array[$j] = $array[$j-1];
    $array[$j-1] = $tmp;
   }
  }
 }
 return $array;
}
  
//快速排序(一维数组)
function quick_sort($array){
 if (count($array) <= 1) return $array;
  
 $key = $array[0];
 $left_arr = array();
 $right_arr = array();
 for ($i=1; $i<count($array); $i++){
  if ($array[$i] <= $key)
   $left_arr[] = $array[$i];
  else
   $right_arr[] = $array[$i];
 }
 $left_arr = quick_sort($left_arr);
 $right_arr = quick_sort($right_arr);
 
 return array_merge($left_arr, array($key), $right_arr);
}
  
?>


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

public class TestSort {
public static void main(String[] args) {
   int[][] a={
     {1,1,2,4,2},
     {1,79,21,65},
     {111,23,6,2},
     {98,98,2,100}
     };
   int result=0;

   for(int i=0;i<a.length;i++)
   {
    for(int j=0;j<a[i].length;j++)
    {
     for(int k=j;k<a[i].length;k++)
     {
      int temp;
      if(a[i][j]>a[i][k])
      {
       temp=a[i][j];
       a[i][j]=a[i][k];
       a[i][k]=temp;
      }
      result++;
     }
    }
   }
   System.out.println("result="+result);
   for(int m=0;m<a.length;m++)
   {
    for(int n=0;n<a[m].length;n++)
    {
     System.out.print(a[m][n]+", ");
    }
    System.out.println();
   }
}
}



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

1. substr($sPath, -3)
2. $arPath = explode("/", $sPath); $arPath[ count($arPath)-1 ]
3. $arPath = explode(".", $sPath); $arPath[ 1 ]
4. $arPath = pathinfo( $sPath ); $arPath["extension"]
5. preg_match("/.(\w+)$/", $sPath, $arPath); $arPath[1]


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


<?php
/**
* 猴子选大王
*
* @param int $m 猴子数
* @param int $n 出局数
* @return array
*
*/
function king($m ,$n)
{
//构造数组
for($i=1 ;$i<$m+1 ;$i++){
   $arr[] = $i ;
}
$i = 0 ;    //设置数组指针

while(count($arr)>1)
{
   //遍历数组,判断当前猴子是否为出局序号,如果是则出局,否则放到数组最后
   if(($i+1)%$n ==0) {
    unset($arr[$i]) ;
   } else {
    array_push($arr ,$arr[$i]) ; //本轮非出局猴子放数组尾部
    unset($arr[$i]) ;   //删除
   }
   $i++ ;
}
return $arr ;
}

var_dump(king(6,4));


最后编辑: admin 编辑于2010/08/01 10:54

留下你的观点!

昵称

网址

Email

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]