PHP面试题答案

PHP工程师面试题

1.echo count(“abcd”);输出多少?

int count(mixed var)

返回单元数目,通常是一个array,任何其他类型都只有一个单元,有一个例外,如果var是null结果是0

2.

$a=$b=$c=0;

$a=$b && $c;

运行以上代码后$a $b $c 分别是?

$a=false

$c=0

$b=0

2.PHP打印出前一天的时间,格式是2011-12-29 22:21:21

echo date('Y-m-d H:i:s',strtotime('-1 day'));

strtotime 将任何英文文本的日期时间解析成时间戳

4. 请用php的heredoc语法格式输出:hello world!

echo <<

hello world!

EOT;

5. $string = "abcdefg",那么$string{4}的值是?

$string{4}=e

因为PHP是弱类型语言,可以将字符串“视为数组”,当做字符集合看待,字符串中的字符可以在字符串之后用花括号指定所要字符从零开始的偏移量来访问和修改。

6. 简述echo(),print(),print_r()的区别。

echo,print是PHP语言结构, print_r是函数,语言结构没有返回值,函数可以有返回值(即便没有用)

print只能打印出简单类型变量的值(如int,string)

print_r可以打印出复杂类型变量的值(如数组,对象)

7.用PHP写出显示客户端IP与服务器IP的代码。

客户端: $_SERVER[REMOTE_ADDR]

服务器: $_SERVER[SERVER_ADDR]

8、用正则表达式判断$a是否是一个以半角逗号分隔的多个手机号码组成的字符串,是输出yes

$phone = '137********,185********,188********';

$pattern = '/^(1[34568]\d{9},)+(1[34568]\d{9})?$/';

if(preg_match_all($pattern,$phone,$out)){

echo 'yes';

}else{

echo 'no';

}

echo '

';

print_r($out);

9、解释MVC,介绍几种目前比较流行的MVC框架

由模型(model),视图(view),控制器(controller)完成的应用程序

MVC模式的目的就是实现Web系统的功能分工,它强制性地把应用程序的输入、处理和输出分开,可以各自处理自己的任务,是一种分层的概念。Model层实现系统中的业务逻辑,View层用于与用户的交互,Controller层是Model和View之间沟通的桥梁。

Symfony:是为开发大型web准备的,学习曲线比较长。

Laravel:简洁、优雅。

10、描述一下大流量高并发网站的解决方案

1) LVS或nginx负载均衡器,通过负载均衡把压力分担到多台服务器.

2) squid缓存或nginx web cache缓存

3) web 服务器选型(nginx代替apache)

4) 页面静态化(smarty或框架),数据缓存(memcache Redis)

5) memcache

6) sql语句一定要注意索引使用

7) 主从数据库

8) 分库分表或分区

主要从以下几个方面回答:

1、硬件

1)垂直拓展:买更好的服务器。一般不建议这么做,因为单个服务器都有上限

2)水平拓展:多买几台服务器,利用负载均衡器(LVS、F5),将压力分担到不同服

务器上。

2、数据库

a)数据库优化:1、分表和分区2、主从数据库

b)数据库的选型:可以考虑将apache换成nginx

c)SQl语句优化

3、缓存

a) 数据缓存:使用memcache

B) 页面静态化:框架的页面静态化、smarty

C) 使用CDN

参考答案:

1、硬件

购买更好的服务器,这种是纵向扩展,但是不太推荐。购买更多的服务器,利用LVS或者F5搭建服务器集群。从而提高整个网站的计算速度。

2、web服务器

由于Apache的并发处理能力有限,所以可以考虑使用Nginx。

3、数据库

Mysql要结合NoSQL使用,由于单个数据库能力有限,所以要搭建主从数据库。

4、缓存

a) 为了减小数据库的压力,考虑使用Memcache或Redis做缓存。

b) 把网站的绝大多数页面进行页面静态化。(phpcms)

c) 把静态资源放到CDN上。

5、禁止外部的盗链

6、控制大文件的下载

11、如何防SQL注入

//表单尽量用post提交,核心用户验证都走post,避开get

1、表单尽量用post,表单判断控制走get,因为get比post速度快

2、$_SERVER[HTTP_REFERER]判断提交者的源头,只能本站提交。

3、使用addslashes转义用户提交的数据

4、服务器本身的安全

5、数据库使用PDO,因为PDO有预处理

12、如何实现多台web服务器共享session数据

1、改变session的域,比如域名是https://www.360docs.net/doc/6e13547580.html,

域就应该是https://www.360docs.net/doc/6e13547580.html,

2、使用数据库或者memcache存储session数据

相关文档
最新文档