日期:2014-05-17  浏览次数:20579 次

一些PHP面试题目

前言

生活总是要往前看,等待了一天也没有阿里的面试通知,心情是相当灰暗,但是生活总要继续,还是要向前看,做几道PHP的面试题目,毕竟我的主要开发语言还是PHP

题目

1、一个包含中英文的字符串如何获得它的自然长度

需要考虑汉字的字符编码,注意UTF-8中一个汉字占3个字节

<?php
/**
 * 获取中英文混排的字符串的长度
 */

$str = "还没等到阿里的面试通知123456";

$nor_len = mb_strlen($str, "utf8");

echo $nor_len."<br>";

$len = strlen($str);

echo $len."<br>";


2、问一问什么是ORM,有时候会问这个词的英文全称是什么,问问ta对于ORM有什么个人的看法

对象关系映射(Object Relationl Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系型数据库中。本质上是将数据从一种形式转换到另一种形式


3、问一问假如ta要自己去实现一个framework,ta会怎么设计

这里我直接谈一下自己对MVC的理解,我都是用原生php开发,没有用过框架



所以就算不用框架,自己代码里也可以做到mvc分层


4、问一问framework设计里的url dispatcher他会怎么考虑

还是MVC的问题,可以通过url进行设计:http://example.com/<controler>/<action>/<id>/, 还可以通过nginx的rewrite进行跳转


5、如何访问会话变量(session)?
A.通过$_GET
B.通过$_POST
C.通过$_REQUEST
D.通过全局变量
E.以上都不对

E,解释:session变量只能通过$_SESSION数组获得


6、哪个函数能让服务器输出如下header?
set-Cookie: foo=bar;

解答:setcookie('foo', 'bar', time() + 3600);


7、在忽略浏览器bug的正常情况下,如何用一个与先前设置的域名(domain)不同的新域名来访问某个cookie?
A.通过HTTP_REMOTE_COOKIE访问
B.不可能
C.在调用setcookie()时设置一个不同的域名
D.向浏览器发送额外的请求
E.使用Javascript,把cookie包含在URL中发送

B,解释:cookie不能跨域访问


8、在HTTPS下,URL和查询字串(query string)是如何从浏览器传到Web服务器上的?
A.这两个是明文传输,之后的信息加密传输
B.加密传输
C.URL明文传输,查询字串加密传输
D.URL加密传输,查询字串明文传输
E.为确保加密,查询字串将转换为header,夹在POST信息中传输

B,解释:ssl加密


9、当把一个有两个同名元素的表单提交给PHP脚本时会发生什么?
A.它们组成一个数组,存储在超级全局变量数组中
B.第二个元素的值加上第一个元素的值后,存储在超级全局变量数组中
C.第二个元素将覆盖第一个元素
D.第二个元素将自动被重命名
E.PHP输出一个警告

C

10、如何把数组存储在cookie里?
A.给cookie名添加一对方括号[]
B.使用implode函数
C.不可能,因为有容量限制
D.使用serialize函数
E.给cookie名添加ARRAY关键词

D,解释:序列化,serialize序列化数组即可,采用implode会丢失关联数组的key值


11、以下脚本输出什么?(E)
<?php
ob_start();
for ($i = 0; $i < 10; $i++) {
echo $i;
}
$output = ob_get_contents();
ob_end_clean();
echo $output;
?>
A.12345678910
B.1234567890
C.0123456789
D.什么都没有
E.一个提示

C,解释:ob_start打开输出缓存,将输出字符保存在缓冲区里。通过ob_get_contents()获取输出的字符串


12、默认情况下,PHP把会话(session)数据存储在______里。
A.文件系统
B.数据库
C.虚拟内容
D.共享内存
E.以上都不是

A,解释:默认存在文件系统里,为了分布式,一般都放在Nosql数据库里,例如nginx+fastcgi+php5_fpm,修改fpm的php.ini session.save_path=tcp://redisip:redisport?auth=redispasswd


14、假设浏览器没有重启,那么在最后一次访问后的多久,会话(session)才会过期并被回收?
A.1440秒后
B.在session.gc_maxlifetime设置的时间过了后