php工程师面试题及答案
第1篇:php工程师面试题及答案
php工程师面试题及答案
PHP全称:Hypertext Preprocessor,是一种用来开发动态网站的服务器脚本语言。下面是小编整理的php工程师面试题及答案,希望对大家有帮助!
【1 】Memcached、redis的使用和理解
Memcached和redis 都是一个key-value的内存式存储系统,通过hash表来存储检索结果,做到强大的缓存机制。像新浪的微博、淘宝等大流量站点都必须的使用了这些东东。
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
【2】你对于设计模式和MVC的理解
Model-View-Controller,模型、视图、控制器,一想到MVC就会想到JAVA,因为JAVA是一个完全面向对象的语言,MVC最早出现在smalltalk中,其核心就是要将试图和数据模型分离,这样不同的程序就可以有不同的展示。
模型,即程序员写的功能、算法和数据模型,也就是我们说的系统业务逻辑层。
视图,即前端,图形界面。展示给用户看的。
控制器,主要负责对请求处理、转发和加载视图。
设计模式,说白了就是代码的设计经验的总结和归类,设计模式最早应用于建筑行业,编程的设计模式按最早的GoF所述,包括23种设计模式,主要用于面向对象的程序编程。遵循几个设计原则:开闭原则、单一职责原则、里氏替换原则、依赖注入、接口分离、迪米特原则、优先使用组合而不是继承等等。包括创建型模式、结构性模式、行为模式三类。
【3】HTTP协议1.0及1.1的区别,并简单说下HTTP协议
HTTP,超文本传输协议。它定义了浏览器和服务器的通信规则。HTTP协议是基于TCP/IP的TCP协议上,现在万维网使用的是HTTP1.1版本,其特点包括,C/S模式,请求简单(GET/POST/HEAD),灵活(可以传输任何类型的数据HTML、XML、JSON、自定义等),无连接(每次连接只处理一个请求,从发出请求到收到200状态为止断开连接),无状态。
对HTTP协议的考察主要包括,响应消息格式、请求消息格式、状态码等知识点。
一般一个HTTP协议包括:起始行(start line)、首部(header)、主体(body)三个部分。
[响应消息格式]
HTTP/1.1 200 0K
Connectlon:close
Date: Thu, 13 Oct 2005 03:17:33 GMT
Server: Apache/2.0.54 (Unix)
Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT
Content—Length:682l
Content—Type:text/html
这个响应消息分为3部分:1个起始的状态行(status line),首部、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。
[请求消息格式]
GET /somedir/page.html HTTP/1.1
Host:www.chinaitlab.com
Connection:close
User-agent:Mozilla/4.0
Accept-language:zh-cn
(额外的回车符和换行符)
该请求消息的第一行称为请求行 (request line),后续各行都称为头部行(header)。请求行有3个字段:方法字段、URL字段、HTTP版本字段。
[状态码]参见http://www.cnblogs.com/TankXiao/archive/2013/01/08/2818542.html
1xx 消息
2xx 成功
3xx 重定向
4xx 请求错误
5xx 服务器错误
[常见状态码]
200 OK。请求已成功,请求所希望的响应头或数据体将随此响应返回。
300 Multiple Choices。请求资源有多个选择,如请求文本有法语版、英语版等等。
301 Moved Permanently。表示请求的网页已永久转移到新位置
302 Found。表示页面在做临时跳转时返回的状态。
304 Not Modified。客户的缓存资源是最新的, 要客户端使用缓存。
400 Bad Request。错误的请求。
403 Forbidden。请求被服务器拒绝了。
404 Not Found。表示服务器找不到请求的网页,服务器上不存在的网页经常会返回的HTTP状态码。
500 Internal Server Error。
503 Service Unavailable。服务器目前无法为请求提供服务,但过一段时间就可以恢复服务。
504 Gateway Timeout。与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时。
505 HTTP Version not supported。 HTTP协议版本不支持。
【4】简单说下Apache中rewrite机制和PHP框架中URI路由机制
1)URL重写,其实就是把用户通过浏览器请求的URL,到了后台,apache根据预先配置的重写规则将该请求指向真正的.资源路径,说白了就是打马虎眼,把真正的路径改头换面后给用户访问,可问题是这样做有啥用处呢。
1、SEO方面。将动态的URL静态化,以满足搜索引擎的胃口。
2、访问控制。比如,通过重写规则后,客户端不易判断后台程序类型等。
3、URL重定向。当网站更改域名或增加别名URL后,可以通过规则轻松的指向要访问的URL。
http://httpd.apache.org/docs/current/mod/mod_rewrite.html
mod_rewrite 使用基于正则表达式动态的修改传入请求的URL。它可以将URL映射到文件系统路径,也可以将一个URL映射到另一个URL。它使用了没有限制数量的规则来操纵URL,每条规则可以包括没有限制数量的附加条件。你可以通过多种方式来检测,如,服务器变量、环境变量、HTTP头、时间戳等。
mod_rewrite 操作整个URL路径,包括path-info的部分。一个重写规则可以被设置在http.conf或者.htaccess中。一个重写规则生成的路径可以包括一个请求字符串,或者内部的子程序处理,外部请求的重定向,或者穿透内部代理等。
2)PHP框架中的URI路由机制,与apache重写类似,一般包括通配符和正则两种规则。让用户可以重新定向(remap)URI处理程序. 设定你自己的路由规则。
【5】MySQL的索引机制,复合索引的使用原则
(深入浅出MySQL一书中对索引的使用讲的比较细致)
一般都会用书本中的目录来介绍索引机制,包括有些书本会有专门的快速检索附录,就很类似于数据库的索引。
MySQL的索引包括4类:主键索引(primary key)、唯一索引(unique)、常规索引(index)、全文索引(fullindex)。
Show index from table_name; –查看表中的索引
Show status like ‘Handler_read%’ –查看索引的使用情况
复合索引,一般遵循最左前缀原则,如table_a 的 a b c 三列建复合索引
create index ind_table_a on table_a(a,b,c);
那么,只有在条件中用到a,或者a、b,或者a、b、c这样的情况下,才会用到刚建的复合索引。
【6】如何理解OOP
OOP,面向对象编程,包括三个方面,继承性、封装性、多态性,其中最根本的东西就是抽象。
继承性,即扩展性,通过子类对已经存在的父类进行功能扩展。
封装性,要求外部不能随意存取对象的内部数据,即对该类中的具体实现做封装,用户不必知道内部的具体实现,只有知道它是干什么的,怎么用就好了。
多态性,就是类的抽象和接口,同一个类能够处理多种类型对象的能力。
我们在现实中,看到的任何东东都可以看做为一个对象,然后通过进一步的抽象为类,类又可以演变为很多类似的对象。举个简单的例子,将我们看到的一个房子抽象为一个ROOM类,包括基本的门,窗,桌子等物件,人可以进出等功能。 现在我们继承ROOM类为Classroom,包括扇门,有大窗,有桌椅,另外只包括一个黑白和一个讲台,老师和同学可以上课。现在我们实例化这个Classroom类为Classroom_621对象,包括两扇门,四扇大窗,30套桌椅,有同学正在上毛概课。
第2篇:php工程师面试题及答案
PHP全称:Hypertext Preproceor,是一种用来开发动态网站的服务器脚本语言。下面是小编整理的php工程师面试题及答案,希望对大家有帮助!
【1 】Memcached、redis的使用和理解
Memcached和redis 都是一个key-value的内存式存储系统,通过hash表来存储检索结果,做到强大的缓存机制。像新浪的微博、淘宝等大流量站点都必须的使用了这些东东。
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。
【2】你对于设计模式和MVC的理解
Model-View-Controller,模型、视图、控制器,一想到MVC就会想到JAVA,因为JAVA是一个完全面向对象的语言,MVC最早出现在smalltalk中,其核心就是要将试图和数据模型分离,这样不同的程序就可以有不同的展示。
模型,即程序员写的功能、算法和数据模型,也就是我们说的系统业务逻辑层。
视图,即前端,图形界面。展示给用户看的。
控制器,主要负责对请求处理、转发和加载视图。
设计模式,说白了就是代码的设计经验的总结和归类,设计模式最早应用于建筑行业,编程的设计模式按最早的GoF所述,包括23种设计模式,主要用于面向对象的程序编程。遵循几个设计原则:开闭原则、单一职责原则、里氏替换原则、依赖注入、接口分离、迪米特原则、优先使用组合而不是继承等等。包括创建型模式、结构性模式、行为模式三类。
【3】HTTP协议1.0及1.1的区别,并简单说下HTTP协议
HTTP,超文本传输协议。它定义了浏览器和服务器的通信规则。HTTP协议是基于TCP/IP的TCP协议上,现在万维网使用的是HTTP1.1版本,其特点包括,C/S模式,请求简单(GET/POST/HEAD),灵活(可以传输任何类型的数据HTML、XML、JSON、自定义等),无连接(每次连接只处理一个请求,从发出请求到收到200状态为止断开连接),无状态。
对HTTP协议的考察主要包括,响应消息格式、请求消息格式、状态码等知识点。
一般一个HTTP协议包括:起始行(start line)、首部(header)、主体(body)三个部分。
[响应消息格式]
HTTP/1.1 200 0K
Connectlon:close
Date: Thu, 13 Oct 2005 03:17:33 GMT
Server: Apache/2.0.54(Unix)
Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT
Content—Length:682l
Content—Type:text/html
这个响应消息分为3部分:1个起始的状态行(status line),首部、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。
[请求消息格式]
GET /somedir/page.html HTTP/1.1Host:www.daodoc.com/
mod_rewrite 使用基于正则表达式动态的修改传入请求的URL。它可以将URL映射到文件系统路径,也可以将一个URL映射到另一个URL。它使用了没有限制数量的规则来操纵URL,每条规则可以包括没有限制数量的附加条件。你可以通过多种方式来检测,如,服务器变量、环境变量、HTTP头、时间戳等。
mod_rewrite 操作整个URL路径,包括path-info的部分。一个重写规则可以被设置在http.conf或者.htacce中。一个重写规则生成的路径可以包括一个请求字符串,或者内部的子程序处理,外部请求的重定向,或者穿透内部代理等。
2)PHP框架中的URI路由机制,与apache重写类似,一般包括通配符和正则两种规则。让用户可以重新定向(remap)URI处理程序.设定你自己的路由规则。
【5】MySQL的索引机制,复合索引的使用原则
(深入浅出MySQL一书中对索引的使用讲的比较细致)
一般都会用书本中的目录来介绍索引机制,包括有些书本会有专门的快速检索附录,就很类似于数据库的索引。
MySQL的索引包括4类:主键索引(primary key)、唯一索引(unique)、常规索引(index)、全文索引(fullindex)。
Show index from table_name;–查看表中的索引
Show status like ‘Handler_read%’ –查看索引的使用情况
复合索引,一般遵循最左前缀原则,如table_a 的 a b c 三列建复合索引
create index ind_table_a on table_a(a,b,c);
那么,只有在条件中用到a,或者a、b,或者a、b、c这样的情况下,才会用到刚建的复合索引。
【6】如何理解OOP
OOP,面向对象编程,包括三个方面,继承性、封装性、多态性,其中最根本的东西就是抽象。
继承性,即扩展性,通过子类对已经存在的父类进行功能扩展。
封装性,要求外部不能随意存取对象的内部数据,即对该类中的具体实现做封装,用户不必知道内部的具体实现,只有知道它是干什么的,怎么用就好了。
多态性,就是类的抽象和接口,同一个类能够处理多种类型对象的能力。
我们在现实中,看到的任何东东都可以看做为一个对象,然后通过进一步的抽象为类,类又可以演变为很多类似的对象。举个简单的例子,将我们看到的一个房子抽象为一个ROOM类,包括基本的门,窗,桌子等物件,人可以进出等功能。现在我们继承ROOM类为Claroom,包括扇门,有大窗,有桌椅,另外只包括一个黑白和一个讲台,老师和同学可以上课。现在我们实例化这个Claroom类为Claroom_621对象,包括两扇门,四扇大窗,30套桌椅,有同学正在上毛概课。
第3篇:关于精选php面试题及答案
关于精选php面试题及答案(共8篇)由网友 “夏有凉风冬有雪” 投稿提供,以下是小编精心整理的关于精选php面试题及答案,供大家阅读参考。
篇1:php常用面试题及答案
1、谈对mvc的认识?
答:由模型(Model),视图(View),控制器(Controller)完成的应用程序
由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;
2、写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)
答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
3、GD库是做什么用的?
答:gd库提供了一系列用来处理图片的功能,使用GD库可以处理图片,或者生成图片。
在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。
4、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么别?
答:int是数字类型
第4篇:php 面试题
php 面试题(合集10篇)由网友 “暴走萝莉金克丝” 投稿提供,以下是小编整理过的php 面试题,欢迎阅读分享,希望对大家有帮助。
篇1:PHP面试题
这是一份比较全面的PHP面试题.对准备去新公司应聘PHP职位的开发者应该有帮助.
或者说,对招聘PHP开发人员的企业也有些帮助,不过就不要原样打印出来考了,稍微改一改.
简述题(50分)
1、用PHP打印出前一天的时间格式是-5-10 22:21:21(2分)
2、echo,print(),print_r()的区别(3分)
3、能够使HTML和PHP分离开使用的模板(1分)
4、使用哪些工具进行版本控制?(1分)
5、如何实现字符串翻转?(3分)
---------------------------------------------------------------
6、优化MYSQL数据库的方法,(4分,多写多得)
7、PHP的意思(送1分)
8、MYSQL取得当前时间的函数是?,格式化日期的函数是(2分)
9、实现中文字串截取无乱码的方法。(3分)
------
第5篇:PHP面试题
PHP程序员初级面试题
一、解释一下语句作用,并标示出以下哪一句不会把 John 新增到 users 阵列?
$users[] = 'john';
array_add($users,‟john‟);
array_push($users,„john‟);
$users ||= 'john';
二、sort()、aort()、和 ksort()有什么分别?它们分别在什么情况下使用? sort()
asort()
ksort()
三、以下的代码会产生什么?为什么? $num =10;function multiply(){ $num =$num *10;} multiply();echo $num;
四、reference 跟一个正规的变量有什么分别?如何 pa by reference?在什么情况下我们需要这样做?
五、哪些函式可以用来向正在执行的脚本中插入函式库?
六、foo()与 @foo()有什么分别?
七、你如何替 PHP 的应用程式侦错?
八、“===”是什么?试举一个“==”是真但“===”是假的例子。
九、你
第6篇:PHP程序员面试题经典及答案集锦
都是经典
基础题: 1.表单中 get与post提交方法的区别? 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.2.seion与cookie的区别? 答:seion:储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(seion_dir)的位置进行的存放
cookie:用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
两者都可通过时间来设置时间长短
3.数据库中的事务是什么? 答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
简述题:
1、用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)答:echo date('Y-
