PHP面试题整理

1、使用foreach、for、while来循环遍历数组的时候,那个效率最高?为什么?

 

 

2、php读取文件有哪些文件?有什么区别?

 

 

3、函数empty、isset、is_null有什么区别?在使用的时候需要注意什么?

  关于empty和isset的介绍,可以看这篇博客:http://www.cnblogs.com/hoohack/p/5523007.html

  empty:查看官方手册http://php.net/manual/zh/function.empty.php

bool empty ( mixed $var )

判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

<?php
    var_dump(empty(0));     //bool(true)
    var_dump(empty(0.0));   //bool(true)
    var_dump(empty('0'));   //bool(true)
    var_dump(empty(''));    //bool(true)
    var_dump(empty('    '));//bool(false)
    var_dump(empty(trim('    ')));//bool(true)
    var_dump(empty(null));  //bool(true)
    var_dump(empty(NULL));  //bool(true)
    var_dump(empty($undefine));//bool(true)
    var_dump(empty(false)); //bool(true)
    var_dump(empty(FALSE)); //bool(true)
    var_dump(empty(array()));//bool(true)
?>

  

  isset,查看官方手册http://php.net/manual/zh/function.isset.php

bool isset ( mixed $var [, mixed $... ] )

检测变量是否设置,并且不是 NULL

如果已经使用 unset() 释放了一个变量之后,它将不再是 isset()。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符("\0")并不等同于 PHP 的 NULL 常量。

如果一次传入多个参数,那么 isset() 只有在全部参数都以被设置时返回 TRUE 计算过程从左至右,中途遇到没有设置的变量时就会立即停止。

  注意传入的参数不能使常量或者常量表达式,比如下面的做法是错误的:

<?php
    var_dump(isset("123"));//wrong
    var_dump(isset(array()));//wrong
    var_dump(isset(__FILE__));//wrong
    var_dump(isset(null));//wrong
    var_dump(isset(false));//wrong
?>

   正确用法:传入isset的是一个变量,只要为该变量赋过值(null除外),那么判断结果都是true。使用unset对一个变量进行“销毁”操作后,再对该变量进行isset判断,返回的结果是false。

<?php
    $a = '';
    var_dump(isset($a));//bool(true)
    unset($a);
    var_dump(isset($a));//bool(false)

    $b = null;
    var_dump(isset($b));//bool(false)

    $c = false;
    var_dump(isset($c));//bool(true)

    $d = 0;
    var_dump(isset($d));//bool(true)

    $arr = array();//空数组
    var_dump(isset($arr));//bool(true)

    $arr2 = array("one"=>"demo");
    var_dump(isset($arr2));//bool(true)
    unset($arr2['one']);
    var_dump(isset($arr2));//bool(true)
    var_dump(isset($arr2['one']));//bool(false)
?>

  

  is_null,查看官方手册:http://php.net/manual/zh/function.is-null.php

bool is_null ( mixed $var )

如果 var 是 null 则返回 TRUE,否则返回 FALSE

查看 NULL 类型获知变量什么时候被认为是 NULL,而什么时候不是。

  有手册声明可知,只要赋给变量的值,并且赋的值不是null,那么is_null判断的结果都返回false,即都不认为是空。

<?php
    var_dump(is_null($a=null));//bool(true)
    var_dump(is_null($a=0)); //bool(false)
    var_dump(is_null($a=''));//bool(false)
    var_dump(is_null($a=array()));//bool(false)
    var_dump(is_null($a=false));//bool(false)
?>

  

 

5、一个多维数组,写一个递归输出所有内容,并返回元素的总数。

 

 

6、删除数组中的元素有哪些方法?以及各个方法优缺点?

 

 

7、php语法中,变量名和函数名区分大小写吗?

  变量区分大小写。

  函数名不区分大小写。

 

8、php魔术方法

 

 

9、@foo()与foo()的区别?

 

 

10、Object和Array之间的转换

 

 

11、php实现各种设计模式

 

 

12、php类的知识。

 

 

13、定义常量的方法?有什么区别?

<?php
    //直接设置常量
    define("TEST","this is test");
    const DEMO = "this is demo";
    echo TEST; //this is test
    echo DEMO; //this is demo

    //使用define时,常量名称可以是变量,但是变量值是字符串
    $name = "AAA";
    define($name,"this is aaa");
    echo AAA; //this is aaa
    //const不能这样使用
    const $name = "this is other aaa";//wrong
?>

  1、使用define时,常量名可以保存在一个变量中,即常量名称就是变量的值,而const不行。

  2、使用define时,指定的值可以是任何形式,比如表达式、变量、以及字面值;而使用const时,指定的值只能是字面值,不能是表达式或者变量。

  3、在class内部声明常量只能用const,不能使用define。

  4、define可以出现在判断和循环中,而const不行。 

<?php
    while($i<10){
        //define("N",$i);//没有问题,按预期运行
        const N = 1;//报错
        $i++;
    }
    if($i){
        define("N","de");//没有问题
    } else {
        const N = "zh"; //const不能再判断中
    }
?>

  有兴趣的话,可以参考C和C++中的define和const:http://blog.sina.com.cn/s/blog_79b01f6601018xdg.html

 

 

14、lamp中各部分的作用?运行逻辑?

 

 

 

15、include和require相关的区别?

 

 

16、php的内存回收机制(GC)

 

17、php底层运行机制

  可以参考麦子学院课程:http://www.maiziedu.com/course/760/ 

 

 

  1. 有一个日期,,输出data的上周末的日期。

  2. PHP数组随机打乱函数是? 过滤数组中空的元素的函数是?

  3. PHP中自动加载类是怎么实现的?

  4. 写一个正则,实现路由匹配 /live/index?roomid=1001 成 /1001

  5. 写一个函数, 实现在一个数组的任意位置插入一个值。要求尽量简洁高效。

  6. 一个勋章的名字是不超过4个字符的(1个汉字算2个字符)。请简单写出这个逻辑判断的关键代码。

  7. 有一个所有正在直播的房间的列表roomList,包括roomid, title, uid, online 字段信息,请把roomList按照online字段正序排列。

  8. unset($_COOKIE['bili_uid') 会删除本地的cookie吗?

  9. 请简单描述 session 的实现原理。如何实现session同步到服务器集群?

  10. 请简单描述redis和memcache的区别和各自的利弊。以及哪种场景用哪个更合适?

  11. 请用文字或者关键代码说明如何用redis实现一个7日礼物投喂榜。榜单循环7日变化,第8天会删掉第1天的数据(不是自然周的7天)

  12. 请写出 5 个mysql中你常用的函数或者常量,以及各自的作用。

  13. 分库分表的目的是什么? 一般如何数据表水平拆分数据表。

  14. 请简单描述单索引和聚合索引的区别。哪些场景各自适合?

  15. 有一张表 user(uid, uname, face, register_time, last_login_time) 里面有 几千万条记录,索引字段是uid。写出关键sql,要求使用索引,高效的取出50000000后的10条数据。

  16. php-fpm进程分配有哪几种方式?如何选择?

  17. Linux中,查看当前php的版本的系统命令是? 查看 php-fpm 的进程的命令是? 查看端口号 6379 的进程的命令是? 重启 nginx 的命令是?

  18. 查看内存占用的命令是? 能够实时显示系统中各个进程的资源占用状况的命令是?

  19. 写一个nginx简单的 rewrite 实现由 http://static.hdslb.com/live-static/js/jquery.min.js 跳转到 http://live.bilibili.com/js/jquery.js

  20. 简述TCP三次握手的过程?

  21. 写出 5 个你接触过的 http 的状态码,分别代表什么意思?

posted @ 2018-06-25 21:33  寻觅beyond  阅读(240)  评论(0编辑  收藏  举报
返回顶部