最新消息:

PHP面试题第八回

PHP huayuguoji 66浏览 0评论

1、PHP与java是怎么整合的?

PHP简单易学,开发动态网页效率高,但草根文化气息浓重,是语言世界的平民英雄。

Java强大而复杂,有众多高端功能,更有IMB、Oracle等企业大鳄的追捧,是语言世界的贵族王子。

不管是平民英雄还是贵族王子,都不满足在各自领域称王称霸。于是,平民英雄祭出LAMP大旗,并在PHP 5中增加对象模型,试图往上一阶层硬闯,可是金融、电信等应用王侯不大欢迎;而贵族王子也想重视Web基层社会,先制定Servlet/JSP,接着推出struts、JSF、Taglib、JSTL、Spring等系列框架,试图吸引更多的平民百姓,但因为其实施手法复杂而无法深得民心。

如何才能充分利用两者的优势,PHP结合Java是很多人在思考的问题:PHP主要负责Web层,而Java负责业务和数据逻辑层,形成一对黄金组合。目前已有多种解决方案:1) PHP中内置调用Java的方法(使用PHP的Java扩展模块);2) 使用minij2ee应用服务器提供的SJOP(Sample Java ORB Protocol,简单Java对象请求代理协议)协议实现;3) 采用PHP/Java Bridge;4) 使用Quercus;5) 通过SOAP(Simple Object Access Protocol)。

以前提到Java的最大特点是跨平台、一次编写到处运行。近几年来,Java领域最大的变化是基于JVM的语言开始流行,Java已经进入了混合编程时代。Java和PHP的整合也是这一趋势的表现。

在Web开发市场中,Java和PHP都是目前应用的热门技术。Java的强大不容置疑,不仅体现在WEB的开发上,在各个软件应用领域,Java也无所不在。而PHP是全球2200万个网站都在使用的语言,可见PHP的发展趋势不可小觑,再加上PHP有开源力量及ZEND、IBM、Oracle等公司的大力推动,PHP日渐繁荣。有人预言“PHP将比Java更受欢迎”,但PHP永远也不可能完全替换Java,两种的融合更是技术发展的趋势。 两种技术可以激烈竞争,也可以紧密合作。从客户的角度来说,技术之间的融合非常重要,因为一个庞大的应用系统,通常不可能由单一语言或技术独立完成。PHP和Java的融合,为需要结合PHP与Java的企业提供了一个良好的选择。

2. PHP为什么需要Java

1)、 PHP中的组件都是短暂、非持久性的。对于复杂的应用体系,必须提供中间层组件(如Java beans/EJB)或者企业级的缓存技术、连接池或商业逻辑给PHP组件生成页面。例如,解析XML文件是一个比较耗资源的工作,需要缓存;连接数据库更是一个比较耗资源的工作,需要资源重用。标准的PHP XML和DB抽象层效率很低,因为它们都不能通过一个中间层来实现缓存和连接池。

2) 、即使是一些小任务,也可能需要用到Java Class或Java类库,例如需要跨平台地生成Word、Excel或PDF文档。

3)、 PHP代码、PHP/Java Bridge可以打包成标准的J2EE档案包格式,以方便布置到一个J2EE应用服务器或Servlet引擎中,而用户不需要安装 PHP。从用户的角度来说,用户看不到这些用JSP、Servlet或PHP生成的页面有什么区别。由于Bridge允许PHP和J2EE间的session共享,所以开发者可以一步步地把基于JSP的程序和PHP集成起来。

3 Java也存在不足

对于Java程序员来说,PHP和PHP/Java Bridge也许可能有用。许多基于JSP的技术,如Struts及JSF存在缺陷,再把它们整合在一起去建立面向对象的WEB系统,就更暴露了这些问题。即使JSF的作者也承认了这样的系统有严重缺陷,并推荐用像tapestry或facelets 等用Java类定义的组件并通过它们的ID绑定到XML/HTML模板中。PHP与Java的整合可以将PHP代码嵌入到Java系统中,这样用户界面设计师就可以集中精力设计HTML模板,而程序员可以用PHP建立原型,并使用已有的开发框架。现在,不少大型站点前端使用PHP,而核心使用Java等语言来构建。

4. JSR及JSR223

JSR(Java 规范请求)是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR(Java 规范请求),以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。

在Java Servlet规范(Servlet 2.4,JSR-154)中,定义了一系列核心的抽象概念(WEB程序处理过程中需要考虑的各种对象)来让Java程序员编写WEB程序,包括Session、Request、Response等。当程序员在编写程序时,可以很方便安全地与这些对象进行通信。JSR223描述的是这些Java对象如何向用其他脚本语言编写的WEB页面开放,使其他语言也可以访问这些对象。这个规范已被用于PHP及其他脚本语言,因为JSR223提出的概念独立于脚本语言,其目的是将脚本语言集成到Java平台之上。

5、Php开启safe-mode之后对php系统函数的影响?

safe_mode是提供一个基本安全的共享环境。在一个多用户共享的phpweb服务器上,当这台服务器开启了safe_mode模式,有以下函数将会受到影响。首先,一下尝试访问文件系统的函数将会被限制,运行服务器的用户id,如果想要尝试操作某个文件,必须要用户该文件的读取或者写入的访问权限。

因此,在safe_mode打开的情况下,下列函数将会收到限制:

Ckdir,move_uploaded_file,chgrp,parse_ini_file,chown,rmdir,copy,rename,fopen,require,highlight_file,show_source,include,symlink,link,touch,mkdir,unlink

以上都是跟操作文件系统有关的函数,除此之外,一些php扩展的函数也会受到限制,不能在程序里面直接加载扩展,只能到php.ini里加载,而且php如果需要执行操作系统的程序时,必须在safe_mode_exec_dir中指定程序的路径,否则执行将失败。此外还有exec,shell_exec,pasathru,system,popen等函数会收到限制

6、对于大流量网站,你采用什么样的方法来解决访问量问题?

首先,确认服务器硬件是否足够支持当前的流量。 普通的P4服务器一般最多能支持每天10万独立IP,如果访问量比这个还要大,那么必须首先配置一台更高性能的专用服务器才能解决问题,否则怎么优化都不可能彻底解决性能问题。

其次,优化数据库访问。 服务器的负载过大,一个重要的原因是CPU负荷过大,降低服务器CPU的负荷,才能够有效打破瓶颈。而使用静态页面可以使得CPU的负荷最小化。前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站,静态化往往不能满足某些功能。 缓存技术就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术。 如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大量SQL查询。

第三,禁止外部的盗链。 外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗 链,Apache自己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当然,伪造refer也可以通过代码来实现盗链, 不过目前蓄意伪造refer盗链的还不多,可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。

第四,控制大文件的下载。 大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下 载, 如果需要提供,建议将大文件放在另外一台服务器上。目前有不少免费的Web 2.0网站提供图片分享和文件分享功能,因此可以尽量将图片和文件上传到这些分享网站。

第五,使用不同主机分流主要流量 将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将RSS 输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。

第六,使用流量分析统计软件 在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。

PHP面试题—第五回

转载请注明:PHP学习 » PHP面试题第八回

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址