面试题(php部分)
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)
【答案】
$a = date("Y-m-d H:i:s", strtotime("-1 day"));
print_r($a);
【备注】
strtotime的参数还可以是:
echo date("Y-m-d H:i:s", strtotime("-1 year +1 week 1 month -1 hour -3 days +10 second"));
echo date("Y-m-d H:i:s", strtotime("last monday +3 days"));
strtotime("now");
【备注】
date和strtotime参数的字符串可以用双引号也可以用单引号,结果一样。
2、$a = true and false; var_dump($a)写出结果
【答案】
bool(true)
【原因】运算符的优先级别问题,赋值运算符=的优先级高于and、or逻辑运算符,所以先执行赋值,然后再做and逻辑运算。所以$a的值是true。
【注意】如果是echo $a;那么结果是 1,因为echo对于bool型,true会打印1,false打印的结果为空,就是没任何打印,注意这里不是打印0。

3、isset、empty和is_null的区别
【答案】
1)isset和empty是语言结构,is_null是函数
2)isset和empty是先判断变量是否存在,然后再判断值;is_null是直接判断值是否为null。
3)未定义变量、0、null、false、空数组和空字符串,empty返回true;
4)isset是判断变量是否定义了,null和未定义变量都返回false;
5)is_null判断变量的值是否为null,如果是未定义的变量回返回notice报错“变量未定义“
【注意】$a = null ; var_dump(isset($a))返回false,因为变量值为null。is_null(0)和is_null("")和is_null(false)都是返回false。
4、$str = “”, $a = explode(‘,’, $str), $b = empty($a); $b的值是true还是false?
【答案】false。
【原因】
explode的函数说明(参考:http://php.net/manual/zh/function.explode.php):

当目标字符串无法分割时,返回结果就是一个只有一个元素的数组,该元素的值比如$a[0]的值就是目标字符串的值,哪怕目标字符串是空串。
【运行实例】
$str = "";
$a = explode(',', $str);
var_dump($a);
if(empty($a)){
echo "true , empty\n";
}else{
echo "false , not empty\n";
}
结果输出:
array(1) {
[0]=>
string(0) ""
}
false , not empty
【注意】上面输出的$a 并不等于 array()空数组。var_dump(array())输出:
array(0) {
}
【注意】如果题目中$str为null呢,结果又如何?
$str = null;
$a = explode(",", $str);
$b = empty($a);
var_dump($a);
var_dump($b);
【结果】
array(1) {
[0]=>
string(0) ""
}
bool(false)
【分析】结果没变,原因是null在explode函数的参数传入时临时参数是被转化为空串。
5、$str = 1,echo “$str”, ‘$str’, “\\\$str”, “${str}”, “$str”.”$str”, “$str”+”$str”;
【答案】

6、http 500错误码会是什么情况?
参考:http://www.cnblogs.com/huqiang/p/5333975.html
【答案】
1)web脚本错误:php代码有语法错误;
2)访问量大的时候,由于系统资源限制,不能打开太多的文件;
3)nginx配置的问题:比如rewrite的规则写的有问题,导致不停rewrite(死循环)也会报错500。
7、写一个function遍历一个路径下的所有文件夹和文件
【答案】
<?php
function getAllFiles($path){ $result = array();
$handle = opendir($path);
if($handle){
while(($file = readdir($handle))!== false){
if($file != '.' && $file != '..'){
$cur_path = $path . '/'. $file;
if(is_dir($cur_path)){
$result[$path][$cur_path] = getAllFiles($cur_path);
}else{
$result[$path]['file'][] = $file;
}
}
}
closedir($handle);
} return $result;
} $dir = '/tmp';
$res = getAllFiles($dir);
print_r($res); 【打印的结果】
Array
(
[/tmp] => Array
(
[file] => Array
(
[0] => 1.php
[1] => php-cgi.sock
[2] => mysql.sock
[3] => timesync.log
[4] => 2.php
[5] => test.php
)
[/tmp/.ICE-unix] => Array
(
)
)
)
8、描述下session机制,多台服务器的情况下session如何保存?
【参考答案】
9、如何获取客户端ip、服务端ip和query string?
【答案】
客户端ip: $_SERVER['REMOTE_ADDR']
服务端ip:$_SERVER['SERVER_ADDR']
query string: $_SERVER['QUERY_STRING']
URI:$_SERVER['REQUEST_URI']
执行的脚本名称:$_SERVER['PHP_SELF']
10、正则表达式匹配电子邮箱
【参考答案】
$pattern = "/^[a-z]([a-z0-9]*[-_\.]?[a-z0-9]+)+@[a-z]([a-z0-9]*[-_\.]?[a-z0-9]+)+\.[a-z]{2,3}$\i";
preg_match($pattern, $email);
【分析】
/^表示这就是开头
$/表示这是结尾
i表示不区分大小写
\.表示句点,需要转义的
这里的$pattern变量是以字母开头,然后中间可以有一个或多个- _ . 符号,然后@前必须是字母或者数字
@后是可以有数字或- _ . 构成的域名一部分,然后是.com 或.cn这种结尾就是要匹配2-3个字母结尾。
11、移动数组的指针的函数
【答案】
each()
prev()
next()
end()
reset()
12、PHP设置脚本最大执行时间的三种方法
1、在php.ini里面设置
max_execution_time = 120;
2、通过PHP的ini_set函数设置
ini_set("max_execution_time", "120");
3、通过set_time_limit 函数设置
set_time_limit(120);
以上几个数字设置为0则无限制,脚本会一直执行下去,直到执行结束。
所以,需要长时间执行的脚本,一般在php代码开头处添加如下代码就可以了
set_time_limit(0);
13、isset、in_array、array_search和array_key_exists对比
【参考】对比4个函数 isset in_array array_search array_key_exists 速率对比及初步分析原因
【答案】
isset最快,因为isset是语言结构不是函数,所以减少函数调用的开销;
array_key_exists第二快,因为该函数是判断key是否存在,而array的key是hash排序的,所以快。
in_array和array_search都是查找元素是否存在,就是查询值,而不是查询key,所以慢一些。这两者之间的速度相差无几。
面试题(php部分)的更多相关文章
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- .NET面试题系列[4] - C# 基础知识(2)
2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...
- 我们公司的ASP.NET 笔试题,你觉得难度如何
本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
- 猫哥网络编程系列:详解 BAT 面试题
从产品上线前的接口开发和调试,到上线后的 bug 定位.性能优化,网络编程知识贯穿着一个互联网产品的整个生命周期.不论你是前后端的开发岗位,还是 SQA.运维等其他技术岗位,掌握网络编程知识均是岗位的 ...
随机推荐
- Oracle 存储过程的导出导入序列的导出
昨天发布网站,需要将oracle的存储过程导出来,再在新的电脑加上去.登陆—>工具—>导出用户对象—>选取需要导出的存储过程—>导出 保存格式为.sql.当然利用该种方法也可以 ...
- word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览
其实这是我好几年前的项目,现在再用这种方式我也不建议了,毕竟未来flash慢慢会淘汰,此方式也是因为目测大部分人都装了flash,才这么做的,但是页面展示效果也不好.其实还是考虑收费的控件,毕竟收费的 ...
- 设计模式的征途—23.解释器(Interpreter)模式
虽然目前计算机编程语言有好几百种,但有时人们还是希望用一些简单的语言来实现特定的操作,只需要向计算机输入一个句子或文件,就能按照预定的文法规则来对句子或文件进行解释.例如,我们想要只输入一个加法/减法 ...
- netty 入门二 (传输bytebuf 或者pojo)
基于流的数据传输:在基于流的传输(如TCP / IP)中,接收的数据被存储到套接字接收缓冲器中. 不幸的是,基于流的传输的缓冲区不是数据包的队列,而是字节队列. 这意味着,即使您将两个消息作为两个独立 ...
- MXNet之ps-lite及parameter server原理
MXNet之ps-lite及parameter server原理 ps-lite框架是DMLC组自行实现的parameter server通信框架,是DMLC其他项目的核心,例如其深度学习框架MXNE ...
- Windows下pycharm远程连接服务器调试-tensorflow无法加载问题
最近打算在win系统下使用pycharm开发程序,并远程连接服务器调试程序,其中在import tensorflow时报错如图所示(在远程服务器中执行程序正常): 直观错误为: ImportError ...
- 《java.util.concurrent 包源码阅读》08 CopyOnWriteArrayList和CopyOnWriteArraySet
CopyOnWriteArrayList和CopyOnWriteArraySet从数据结构类型上来说是类似的,都是用数组实现的保存一组数据的数据结构,区别也简单就是List和set的区别.因此这里就先 ...
- java八大基本数据类型
java中八大数据类型的储存空间以及使用场景表示如下 )1.int:4字节,可以表示的数为-2^31 - 2^31-1.整数的默认类型.封装类也如此 .整数相除的时候,会舍弃小数部分.结果也是整数,例 ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- JavaFx新手教程-布局-StackPane
cmlanche: 您叫什么名字? StackPane cmlanche: 您好,StackPane君,可以问下您在JavaFX家族中是什么地位? stackpane君: 我可重要了,我是在JavaF ...