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/
-
有一个日期,,输出data的上周末的日期。
-
PHP数组随机打乱函数是? 过滤数组中空的元素的函数是?
-
PHP中自动加载类是怎么实现的?
-
写一个正则,实现路由匹配 /live/index?roomid=1001 成 /1001
-
写一个函数, 实现在一个数组的任意位置插入一个值。要求尽量简洁高效。
-
一个勋章的名字是不超过4个字符的(1个汉字算2个字符)。请简单写出这个逻辑判断的关键代码。
-
有一个所有正在直播的房间的列表roomList,包括roomid, title, uid, online 字段信息,请把roomList按照online字段正序排列。
-
unset($_COOKIE['bili_uid') 会删除本地的cookie吗?
-
请简单描述 session 的实现原理。如何实现session同步到服务器集群?
-
请简单描述redis和memcache的区别和各自的利弊。以及哪种场景用哪个更合适?
-
请用文字或者关键代码说明如何用redis实现一个7日礼物投喂榜。榜单循环7日变化,第8天会删掉第1天的数据(不是自然周的7天)
-
请写出 5 个mysql中你常用的函数或者常量,以及各自的作用。
-
分库分表的目的是什么? 一般如何数据表水平拆分数据表。
-
请简单描述单索引和聚合索引的区别。哪些场景各自适合?
-
有一张表 user(uid, uname, face, register_time, last_login_time) 里面有 几千万条记录,索引字段是uid。写出关键sql,要求使用索引,高效的取出50000000后的10条数据。
-
php-fpm进程分配有哪几种方式?如何选择?
-
Linux中,查看当前php的版本的系统命令是? 查看 php-fpm 的进程的命令是? 查看端口号 6379 的进程的命令是? 重启 nginx 的命令是?
-
查看内存占用的命令是? 能够实时显示系统中各个进程的资源占用状况的命令是?
-
写一个nginx简单的 rewrite 实现由 http://static.hdslb.com/live-static/js/jquery.min.js 跳转到 http://live.bilibili.com/js/jquery.js
-
简述TCP三次握手的过程?
-
写出 5 个你接触过的 http 的状态码,分别代表什么意思?