PHP面试题part2

1.PHP是什么

答案:PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。



2.什么是MVC?


答案:

MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。

Model:数据信息存取层。

View:view层负责将应用的数据以特定的方式展现在界面上。

Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。



3.在页面中引用CSS有几种方式?(前端问题)

答案:在页面中使用CSS有3中方式:引用外部CSS文件;内部定义Style样式;内联样式



4.优化MYSQL数据库的方法

答案:

语句方面:

1 使用索引,增加查询效率

2 优化查询语句,提高索引命中率

数据库涉及方面:

1 构造分库分表,提高数据库的存储和扩展能力

2 根据需要使用不同的存储引擎



5.描述一下php开发中常见的几种攻击以及解决方案 

答案:SQL注入: 
解决这个问题的办法是,将 PHP 的内置 mysql_real_escape_string() 函数用作任何用户输入的包装器。这个函数对字符串中的字符进行转义,使字符串不可能传递撇号等特殊字符并让 
MySQL 根据特殊字符进行操作。 
跨站点脚本攻击(XSS): 
strip_tags() 函数,这个函数可以清除任何包围在 HTML 标记中的内容 
或者使用htmlspecialchars() 函数。



6.PHP里面是区分大小写的吗?

答案:

PHP对于系统函数、用户自定义函数、类名称等是不区分大小写的

PHP中的变量和常量是区分大小写的

对于文件名又因服务器操作系统而定,linux中区分,Win不区分

7.$_POST,$HTTP_RAW_POST_DATA 和 php://input 的区别?

答案:

$_POST:

是获取表单POST过来数据,MIME类型是“application/x-www-form-urlencoded”。可参考《什么是 MIME TYPE?

意思就是字段名和值都编码了,每个 key-value 对使用 ‘&’ 字符分隔开,key 和 value 使用 ‘=’ 分开,其他特殊字符都会被使用 urlencode 方式进行编码。

$HTTP_RAW_POST_DATA:

可以获取原始的POST数据,但需要在 php.ini 中设置开启,并且不支持 enctype="multipart/form-data"方式传递的数据

php://input:

可以获取原始的 POST 数据,并且比$HTTP_RAW_POST_DATA更少消耗内存,也不支持"multipart/form-data",

可以使用 file_get_contents() 函数去获取它的内容



8.没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用?

答案:不能。会产生一个strict错误,但在会继续执行代码。参考《PHP静态调用非静态方法》。这篇文章里面还讲到了一个概念“calling scope”。静态调用并不是说有::就是静态调用,而是看calling scope。$this指针指向的对象就是这个方法被调用时刻的calling scope。



9.请介绍Session的原理

答案:

因为HTTP是无状态的,所以一次请求完成后客户端和服务端就不再有任何关系了,谁也不认识谁。

但由于一些需要(如保持登录状态等),必须让服务端和客户端保持联系,session ID就成了这种联系的媒介了。

当用户第一次访问站点时,PHP会用session_start()函数为用户创建一个session ID,这就是针对这个用户的唯一标识,

每一个访问的用户都会得到一个自己独有的session ID,这个session ID会存放在响应头里的cookie中,之后发送给客户端。

这样客户端就会拥有一个该站点给他的session ID。

当用户第二次访问该站点时,浏览器会带着本地存放的cookie(里面存有上次得到的session ID)随着请求一起发送到服务器,

服务端接到请求后会检测是否有session ID,如果有就会找到响应的session文件,把其中的信息读取出来;如果没有就跟第一次一样再创建个新的。

参考《Session原理简述



10.没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用?

答案:不能。会产生一个strict错误,但在会继续执行代码。参考《PHP静态调用非静态方法》。这篇文章里面还讲到了一个概念“calling scope”。静态调用并不是说有::就是静态调用,而是看calling scope。$this指针指向的对象就是这个方法被调用时刻的calling scope。


11.对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题

答案:

a. 确认服务器是否能支撑当前访问量。

b. 优化数据库访问。(参考3.5)

c. 禁止外部访问链接(盗链), 比如图片盗链。

d. 控制文件下载。

e. 使用不同主机分流。

f. 使用浏览统计软件,了解访问量,有针对性的进行优化。



12.请介绍Session的原理

答案:

因为HTTP是无状态的,所以一次请求完成后客户端和服务端就不再有任何关系了,谁也不认识谁。

但由于一些需要(如保持登录状态等),必须让服务端和客户端保持联系,session ID就成了这种联系的媒介了。

当用户第一次访问站点时,PHP会用session_start()函数为用户创建一个session ID,这就是针对这个用户的唯一标识,

每一个访问的用户都会得到一个自己独有的session ID,这个session ID会存放在响应头里的cookie中,之后发送给客户端。

这样客户端就会拥有一个该站点给他的session ID。

当用户第二次访问该站点时,浏览器会带着本地存放的cookie(里面存有上次得到的session ID)随着请求一起发送到服务器,

服务端接到请求后会检测是否有session ID,如果有就会找到响应的session文件,把其中的信息读取出来;如果没有就跟第一次一样再创建个新的。

参考《Session原理简述



13.session共享问题解决方案

答案:

a. 客户端Cookie保存,以cookie加密的方式保存在客户端,每次session信息被写在客户端,然后经浏览器再次提交到服务器。

b. 服务器间Session同步,使用主-从服务器的架构,当用户在主服务器上登录后,通过脚本或者守护进程的方式,将session信息传递到各个从服务器中

c. 使用集群统一管理Session,当应用系统需要session信息的时候直接到session群集服务器上读取,目前大多都是使用Memcache来对Session进行存储。

d. 把Session持久化到数据库,目前采用这种方案时所使用的数据库一般为mysql。

参考《Session共享实现方案调研



14.测试php性能性能的工具,和找出瓶颈的方法。

答案:

XHProf(windows安装方法参照这里)是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包

括阻塞时间,CPU时间和内存使用情况。

它有一个简单的HTML的用户界面,基于浏览器的性能分析用户界面能更容易查看,也能绘制调用关系图。参数值

查看



15.介绍一下常见的SSO(单点登陆)的原理。

答案:SSO是一种统一认证和授权机制,通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。

解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录。

统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;

认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行效验,判断其有效性。

参考《单点登录SSO



16.禁掉cookie的session使用方案

答案:

a. 通过 url 传值,把session id附加到url上(缺点:整个站点中不能有纯静态页面,因为纯静态页面session id 将无法继续传到下一页面)

b. 通过隐藏表单,把session id 放到表单的隐藏文本框中同表单一块提交过去(缺点:不适用<a>标签这种直接跳转的非表单的情况)

c. 直接配置php.ini文件,将php.ini文件里的session.use_trans_sid= 0设为1(好像在win上不支持)

d. 用文件、数据库等形式保存Session ID,在跨页过程中手动调用



17.PHP缓存技术有哪些? 

答案:

1. 全页面静态化缓存:也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程

2. 页面部分缓存:将一个页面中不经常变的部分进行静态缓存,而经常变化的块不缓存,最后组装在一起显示

3. 数据缓存:通过一个id进行请求的数据,将数据缓存到一个php文件中,id和文件是对应的,下次通过这个id进行请求时直接读php文件

4. 查询缓存:和数据缓存差不多,根据查询语句进行缓存;

5. 内存式缓存:redis和memcache

参考《PHP中9大缓存技术总结



18.JSON格式数据有哪些特点

答案:

a. JSON一种轻量级的数据交换格式。它基于ECMAScript的一个子集。

b. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)

c. 这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

d. "名称/值"对的集合,不同语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),键列表(keyed list)等

e. 值的有序列表,多数语言中被理解为数组(array)

参考《介绍JSON



19.HTTP协议header头域包含哪些

答案:

(1)通用头域
  通用头域包含请求和响应消息都支持的头域,通用头域包含Cache-Control、Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通讯双方都支持此扩展,如果存在不支持的通用头域,一般将会作为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。

(2)Cache-Control头域

(3)Date头域

(4)Pragma头域

(5)请求消息

(6)Host头域

(7)Referer头域

(8)Range头域

(9)User-Agent头域

(10)Location响应头

(11)Server响应头

(12)实体

(13)Content-Type实体头

(14)Content-Range实体头

(15)Last-modified实体头

详细了解header http://www.cnblogs.com/petitprince/archive/2008/09/12/1289854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值