【PHP Interview 004】

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

答:"1"

count — 计算数组中的单元数目或对象中的属性个数
int count ( mixed $var [, int $mode ] ), 如果 var 不是数组类型或者实现了 Countable 接口的对象,将返回 1,有一个例外,如果 var NULL 则结果是 0

对于对象,如果安装了 SPL,可以通过实现Countable 接口来调用 count()。该接口只有一个方法 count(),此方法返回 count() 函数的返回值。

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

答:$_SERVER['SERVER_ADDR'] 服务器ip

function get_client_ip()
{
    if (getenv('HTTP_CLIENT_IP')) {
        $client_ip = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $client_ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('REMOTE_ADDR')) {
        $client_ip = getenv('REMOTE_ADDR');
    } else {
        $client_ip = $_SERVER['REMOTE_ADDR'];
    }
    return $client_ip;
}

3. error_reporting(2047)什么作用?

答:PHP 显示所有错误和警告。

4. echoprint()print_r()有什么区别?

答:echo是一个语言结构,没有返回值。
print是一个语言结构,返回int类型的值。[只能打印int string]
print_r()是一个函数,返回bool类型值,按结构输出变量的值。打印关于变量的易于理解的信息[数组、对象等]

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

move_uploaded_file — 将上传的文件移动到新位置

exec — 执行一个外部程序

system — 执行外部程序,并且显示输出、passthru — 执行外部程序并且显示原始输出

popen — 打开进程文件指针、fopen — 打开文件或者 URL

mkdir()、rmdir()、rename()、unlink()、copy()、

chgrp() — 改变文件所属的组、chown() — 改变文件的所有者、 chmod()改变文件模式、touch() — 设定文件的访问和修改时间

symlink()-建立符号连接、link() — 建立一个硬连接、parse_ini_file()

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

答:flock($hander,LOCK_EX);

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

function validEmail($email)
{
    $regex = '/^[\w\-\.]+@[0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?$/';
    if (preg_match($regex, $email)) {
        return true;
    } else {
        return false;
    }
}

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

1)按月进行分表,因为是日志表,主要操作是insert操作,所以每月初自动生成新的数据表,数据插入到对应月份的那张数据表。[比如表明前缀是cdb_smslog 后面加200910 及时cdb_smslog_200910]

2)对于insert频率较大的表,可以适当删除不常用的索引,可以减少对表索引维护的开销

3)在业务允许的情况下,也就是说不需要事物机制,建议用myisam引擎,相比较而言,myisam比innodb的批量插入要快很多,当然还有archive引擎,不过这个引擎很少用,所以建议还是用myisam

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

function maopao($arr)
{
    $count = count($arr);
    for ($i = 0; $i < $count - 1; ++$i) {
        for ($j = 0; $j < $count - $i - 1; ++$j) {
            if ($arr[$j] > $arr[$j + 1]) {
                $temp = $arr[$j];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $temp;
            }
        }
    }
    return $arr;
}

function shunxu($arr)
{
    $count = count($arr);
    for ($i = 0; $i < $count - 1; ++$i) {
        $pos = $i;
        for ($j = $i + 1; $j < $count; ++$j) {
            $p = $arr[$pos] > $arr[$j] ? $j : $pos;
        }
        if ($pos != $i) {
            $tvalue = $arr[$i];
            $arr[$i] = $arr[$p];
            $arr[$p] = $tvalue;
        }
    }
    return $arr;
}

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

//排序二维数组
function array_sort($array, $order_row, $order_by = "ASC")
{
    $array_temp = array();
    foreach ($array as $key => $value) {
        $array_temp[$key] = $value[$order_row];
    }
    if ($order_by == 'ASC') {
        asort($array_temp);
    } else {
        arsort($array_temp);
    }
    $result_array = array();
    foreach ($array_temp as $key => $val) {
        $result_array[$key] = $array[$key];
    }
    return $result_array;
}

$arr = array(
    array('num' => 5, 'value' => 6),
    array('num' => 2, 'value' => 39),
    array('num' => 36, 'value' => 29)
);
print_r(array_sort($arr, 'num'));

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

//截取一个全路径的文件的扩展名
$path = str_replace('\\', '/', __FILE__);

function getExt1($path)
{
    $arr = explode('.', $path);
    return $arr[count($arr) - 1];
}

function getExt2($path)
{
    return strrchr($path, '.');
}

function getExt3($path)
{
    $position = strrpos($path, '.');
    return substr($path, $position);
}

function getExt4($path)
{
    preg_match_all('/^[\w\/\:]+(\.[\w]+)$/', $path, $out);
    return $out[1][0];
}

function getExt5($path)
{
    return preg_replace('/^[^\.]+(\.[\w]+)$/', '${1}', $path);
}
View Code

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

//方案一,使用php模拟这个过程
function king($n, $m)
{
    $monkeys = range(1, $n);
    $i = 0;
    while (count($monkeys) > 1) {
        if (($i + 1) % $m == 0) {
            unset($monkeys[$i]);
        } else {
            array_push($monkeys, $monkeys[$i]);
            unset($monkeys[$i]);
        }
        $i++;
    }
    return current($monkeys);
}

//方案二,数学方法
function yuesefu($n, $m)
{
    $r = 0;
    for ($i = 2; $i <= $n; $i++) {
        $r = ($r + $m) % $i;
    }
    return $r + 1;
}

 

posted on 2016-07-17 23:22  gimin  阅读(192)  评论(0)    收藏  举报