不灭的焱

革命尚未成功,同志仍须努力

作者:php-note.com  发布于:2012-05-24 21:13  分类:招聘/面试/总结  编辑
最流行的PHP MVC框架

http://yp.oss.org.cn/software/show_resource.php?resource_id=742

Yii(音 易框架,我一般直接读YII) CodeIgniter(简读CI) Symfony CakePHP

MVC ,这个看百度就行,MVC在计算机界通用

http://baike.baidu.com/view/31.htm

如何提高PHP运行速度

http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2012/0105/9616.html

这里提到了Zend Optimizer,一般这个都不太用,

Zend Cache、APC和Afterburner Cache,这几种模块缓存,APC是常用的,一般用它缓存include require的东西(开启apc功能后,这些自动的,即之后php运行到require的东西不会去读硬盘,而是读cache)。

压缩网页内容,是指内容类的网站,输出的html代码很多,开启gzip减少网络传输量,

代码层面的,代码复用,使用内部函数,算法好一些,逻辑简化,都能一定程度加速,

我补充一些:提高速度,本质的找到一个功能块的性能瓶颈,针对问题做特别的优化。

比如如果mysql读取量较大,根据使用频繁程度做cache,避免多次请求mysql,分担压力。cache可以使用本地文件cache,可以使用memcache redis以及一些nosql数据库(nosql的数据库一般都是key-value数据库)。

有一些很耗时的处理,可以考虑是否可以预处理,通过计划任务定时处理好存起来,使用时直接调用,而不用现计算。

还有一些耗时,但是此次请求并不直接关心结果的,可以考虑异步处理,比如把它丢给[消息队列],由另一个程序去执行相关操作,这样当前程序可以很快返回结果。

所有高并发的网站架构,都是要分布式的,即一个请求可能会由好多个机器共同分担完成,网站服务器分布,数据库分布,存储分布。

网站分布,为了增加不同地区用户访问速度,会将网站主机布到多种机房内,电信,联通,铁通,移动,海外等机房。访问的时候根据来源分配到相应的服务器上, 一般同一种网络内的服务器是随机分配的,使用负载均衡器,来做调度,也可以使用DNS轮循的方式随机分配。问你负载均衡等实现细节可以不知道,提到这些词 就可以了,有硬件专门做,也可以用程序来模拟实现。程序实现无非是写一个算法来随机分配。DNS轮循的要在DNS解析层做,这些是运维的事情。

网站分布了,资源请求是内部的,各机房之内通过服务器之间打通来实现高速访问,这是网络运维的事情。简单的做法是在服务器上采用双线或多线,即一台服务器有电信的IP也有网通的IP,这样不同的网络过来,请求不同的IP地址,达到更高速访问的目的。

数据库分布,mysql提供主从(master-slave)的方式,即数据库有一个主服务器,可以有许多从服务器,slave从master同步数据, 网站服务器请求时从slave来查询,减轻master压力。也可以按数据业务切分,将不同的数据放在不同的服务器上,这样也会减轻数据请求的压力(但同 时要访问多台数据库服务器,又增加了一些开销)。mysql的主从同步原理是binlog,通过同步主服务器的操作命令过程,来实现在从服务器上重建数据。同时这种模式也实现了读写分离,写的时候在master上写,读的时候在slave上读。防止大并发时受写入速度影响读取速度。

存储分布,一些资源可以不必放在主网站上,比如js、css、 图片,可以放到其它机器上,我们经常会发现一些大网站的图片,可能是img1、img2 img3、static、pic等域名开头的这些都是将这种资源分开的做法。同时这些静态资源,可以使用CDN来加速(CDN的全称是Content Delivery Network,即内容分发网络),CDN服务器可以自己建,也可以购买第三方服务。

版本管理,从CVS 到SVN 以及GIT,一般要会SVN,CVS是早期使用的,现在被SVN取代,新一代的GIT现在正在崛起。
代码版本管理软件的作用是,将代码保存在服务器上,通过更新,提交两种操作,来实现代码的最终修改,这样多人合作时方便。在版本发布时,打一个tag,就将代码定格在那一时刻。你可以继续开发你的,不会干扰那个tag。也可以开多个分支,这样可以由不同的人开发多种版本,可以1.0 2.0等版本同时开发,互不影响。开发完了,也可以版本合并。使用版本管理还有一个好处是,代码在服务器上,即使本机坏了,也不会影响大家工作成果。如果有人误操作,将代码毁了,也可以回滚。
关于这三种版本管理软件使用方法,自己百度。

HTTP协议

http://www.blogjava.net/zjusuyong/articles/304788.html

重点看一下状态码,200 304 403 404 500 502,其中304是服务器设置一个静态文件失效时间,在有效期内,浏览器接到服务器端返回304状态,不再从服务器传送文件,而使用浏览器缓存。这篇文 章有时间要细读,这是整个web请求的根基。很多优化的本质都是围绕这个协议进行的。包括cookie是http协议的组成部分。

两种常见保持会话的手段cookie session的区别

http://www.cnblogs.com/shiyangxt/archive/2008/10/07/1305506.html

GET POST两种http请求的区别

http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

JSON 和 XML 这两种数据格式

http://wenku.baidu.com/view/49800b83d4d8d15abe234e83.html

这两种数据格式,通常做为第三方请求数据的返回格式,也可以是服务器向前端返回数据的格式。自己的项目多用在AJAX请求返回。

关于AJAX

http://www.w3school.com.cn/ajax/

AJAX = 异步 JavaScript 和 XML,也可以使用Json来替代XML。

然后又涉及JavaScript的几个框架

http://www.blogjava.net/kent/articles/202855.html

主流使用的是 jQuery,它的普遍使用是因为它使用起来很简单,容易理解。

jQuery教程 http://www.w3school.com.cn/jquery/

Linux常用命令

cd ls cp rm mkdir ssh rsync wcp sudo

具体的命令不一定会考,但一定会问你会不会用linux,因为90%的互联网公司的web项目使用都是linux 或unix 做为服务器,而不是windows。

Mysql的几种存储(表)引擎

http://database.51cto.com/art/201105/259232.htm

主流使用MyISAM InnoDB

InnoDB和Myisam区别

http://wenku.baidu.com/view/2630add5b9f3f90f76c61b35.html

NoSQL数据库

http://www.infoq.com/cn/news/2011/01/nosql-why

http://robbin.iteye.com/blog/524977

Redis、Tokyo Cabinet、MongoDB

Memcache也是NoSQL数据库,但是它并不是持久存储,只是放在内存中的cache,

memcache的用法

http://www.cnblogs.com/qiantuwuliang/archive/2011/03/07/1974499.html

三大WEB服务器对比分析 apache、lighttpd、nginx

http://wenku.baidu.com/view/96095c1f227916888486d7d2.html

全文搜索的几种工具 Coreseek、 Sphinx、 Lucene

PHP的三种运行方式

http://blog.csdn.net/anljf/article/details/7086034

apache模块方式、 CGI方式 、FastCGI方式

PHP开发程序应该注意的42个优化准则

http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2012/0105/9617.html

关于PHP本身的面试题,直接百度,一般查到的都是围绕PHP语法的,
本文不敢称之为高级面试题,因为还没有涉及PHP扩展,PHP的源码实现等内容展开,
相关内容就写这么多,有一些东西的使用手册,实现原理,优化办法要自己去百度其它相关文章了,这里就不帮着归类了,
这些问题要是大家都掌握了,那么恭喜你已经是一名相对合格的PHP成手,常见web的架构方案你都能搞定。