PHP面试题

作者: 某尤 | 来源:发表于2016-09-26 00:51 被阅读222次

    1.用PHP打印出前一天凌晨的时间,格式是2006-6-10 22:22:22
    echo date("Y-m-d 00:00:00", strtotime("-1 day"));
    2.jQuery中当页面完全载入后使 <div id="test">test</div> 隐藏

    $(document).ready(function(){
        $("#test").hide();
    });
    

    3.linux下改变文件权限的命令?如使test.php变为所有用户可读写不可执行。
    chmod 666 test.php
    4.MySQL如何取得当前时间的UNIX时间戳?如何格式化UNIX时间戳?

    UNIX_TIMESTAMP();
    FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i:%s');
    

    5.PHP中如何验证邮件格式是否正确?

    filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);
    //或者正则 TODO
    

    6.用户表a(user_id, user_name),发表文章的表b(a_id,user_id, create_time, content),其中a_id为文章id,用一个sql语句得到每一个用户在2010-1-1以后发表文章数量的列表

    SELECT a.user_id AS user_id, COUNT(b.a_id) AS num FROM a LEFT JOIN b ON a.user_id = b.a_id WHERE a.create_time > '2010-1-1';

    7.请用PHP遍历目录下所有文件和文件夹

    function tree($dir) { 
        $mydir = dir($dir); 
    
        while($file = $mydir->read()) { 
            if((is_dir("$dir/$file")) 
            && ($file!=".") && ($file!="..")) {
                echo $file, "\\n"; 
                tree("$dir/$file"); 
            } else {
                echo $file, "\\n"; 
            }
        } 
    
        $mydir->close(); 
    }
    

    8.写出你知道的几个HTTP返回状态码,并说明用途

    200 ok
    
    301 永久重定向
    302 临时重定向
    
    对浏览器一样都做跳转,对搜索引擎不一样。
    301 搜索引擎在抓取新内容的同时也将旧的网址替换为重定向之后的网址,302 搜索引擎会抓取新的内容而保留旧的网址。
    304 文档未修改 一般用在做静态资源缓存
    
    403 拒绝
    404 未找到
    
    500 内部错误  常见错误可能是文件目录权限或数据库连接问题
    501 未实现
    502 错误网关
    503 服务不可用
    

    9.Linux命令,请用Linux命令获取文件log.txt的行数
    wc -l log.txt //-c 字节数 -w 字数
    10.请使用PHP描述冒泡排序和快排,对象可以是一个数组

    $arr = array(1,3,4,5,9,6,2);
    
    function maopao($arr) {  
      $len = count($arr);
      for($i=1; $i<$len; $i++) {
        for($k=0; $k<$len-$i; $k++) {
           if($arr[$k]>$arr[$k+1]) {
                $tmp=$arr[$k+1];
                $arr[$k+1]=$arr[$k];
                $arr[$k]=$tmp;
            }
        }
      }
      return $arr;
    } 
    //Ο(logN)
    function quick($arr) {
        $len = count($arr);
        if($len <= 1) {
            return $arr;
        }
    
        $base = $arr[0];
    
        $left = array();  //小于 base
        $right = array();  //大于 base
        for($i=1; $i<$len; $i++) {
            if($base > $arr[$i]) {
                $left[] = $arr[$i];
            } else {
                $right[] = $arr[$i];
            }
        }
    
        $left = quick($left);
        $right = quick($right);
    
        return array_merge($left, array($base), $right);
    }
    

    11.PHP5中魔术方法函数有哪几个,请举例说明各自用法

        __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __clone() 
    
    __sleep()、 __wakeup()
    
    对应 serialize()/unserialize(),__sleep 清理对象,__wakeup 预先准备对象需要的资源
    
    __toString()用于一个类被当成字符串时应怎样回应
    

    12.如何在命令行下运行PHP脚本(写出两种方式)同时向PHP脚本传递参数?

    $argv、getopt()

    13.请写一段PHP代码、确保多个进程同时写入同一文件成功

    $fd = fopen("test.txt", "a");
    if(flock($fd, LOCK_EX)) { // or LOCK_NB 区别 阻塞 与 非阻塞
        fwrite($fd, "write");
        flock($fd, LOCK_UN);
    } else {
        echo "locking";
    }
    
    fclose($fd);
    

    14.请描述mysql的innodb和myisam的区别

    Innodb支持事务处理与外键。
    Innodb行级锁。MyISAM表锁。写入频繁时MyISAM可能会出现lock table。
    MyISAM支持全文索引。
    count(*)MyISAM比较快。
    灾后恢复机制Innodb比较完善。
    Innodb是官方推荐的引擎。
    

    15.一个MySQL数据表,每天写入数据量非常大,该如何优化写效率
    上下文没给全。具体问题具体分析。常规做法:检查索引是否过多,读写分离,切分(水平or垂直)。
    16.如何进行防SQL注入

    1)对特殊字符进行转义(mysql_escape_string、addslashes)、过滤或者使用预编译的SQL语句绑定变量
    2)最小权限原则,不用root账户。
    3)SQL语句运行出错时,不要显示错误信息给用户。```

    相关文章

      网友评论

        本文标题:PHP面试题

        本文链接:https://www.haomeiwen.com/subject/cdtqyttx.html