1、- LAMP 40 - 1 -PHP 的意思PHP 是一个基于服务端来创建动态网站的脚本语言,您可以用 PHP 和 HTML 生成网站主页什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。SESSION 与 COOKIE 的区别是什么,请从协议,产生的原因与作用说明? 1、http 无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。2、SESSION 存储在服务器端,COOKIE 保存在客户端。Session 比较安全,cookie 用某些手段可以修改,不安全。Se
2、ssion 依赖于 cookie 进行传递。禁用 cookie 后,session 不能正常使用。Session 的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。Session 保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由 php 配置文件的 session.save_path 指定。Session 文件是公有的。不使用 cookie 向客户端发送一个 cookie. 理解:session_start()开启时,生成一个常量 SID,当 COOKIE 开启时,这个常量为空,当 COOKIE关闭时,这个常量中存储了 PHPSESSID 的值。通过在URL
3、后加一个 SID 参数来传递 SESSIONID 的值,从而使客户端页面可以使用 SESSION 里面的值。 当客户端开启 COOKIE 和服务器端开启 SESSION 时。 浏览器第一次请求,服务器会向浏览器端发送一个COOKIE 里面存储 SESSIONID. 当浏览器第二次请求时,会把已存在的 COOKIE 一起提交到服务器端。简述 Cookie 的设置及获取过程设置 COOKIE 的值:Setcookie(名称,值,保存时间,有效域);获取值:$_COOKIE名称;HTTP 状态中 302、403 、 500、200、404、502代码含义?一二三四五原则: 一. 消息系列 二. 成功
4、系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401 代表未授权。 200 是请求成功,404 是文件未找到,502 是服务器内部错误。请写出数据类型(int char varchar datetime text)的意思;请问 varchar 和 char 有什么区别?19、Int 整数 char 定长字符 Varchar 变长字符 Datetime 日期时间型 Text 文本型 Varchar 与char 的区别 char 是固定长度的字符类型,分配多少空间,就占用多长空间。 Va
5、rchar 是可变长度的字符类型,内容有多大就占用多大的空间,能有效节省空间。Varchar 是变长,节省存储空间,char 是固定长度。查找效率要 char 型快,因为 varchar 是非定长,必须先查找长度,然后进行数据的提取,比 char 定长类型多了一个步骤,所以效率低一些MyISAM 和 InnoDB 的基本区别?索引结构如何实现?MyISAM 类型不支持事务处理等高级处理,而InnoDB 类型支持。MyISAM 类型的表强调的是性能,其执行速度比 InnoDB 类型更快,但是不提供事务支持,而 InnoDB 提供事务支持以及外部键等高级数据库功能。创建索引:alert table
6、 tablename add index (字段名)isset() 和 empty() 区别Isset 判断变量是否存在,如果存在则返回真,empty 判断变量是否为空为假,如果为空为假则返回真。include 与 require 的区别?1.include()在执行文件时每次都要进行读取和评估require()文件只处理一次(实际上文件内容替换了 require()语句)2.require()通常放在 PHP 脚本程序的最前面include()的使用和 require()一样, 一般放在流程控制的处理区段中,PHP 脚本文件读到 include()语句时,才将它包含的文件读进来,这种方式,可
7、以把程序执行时的流程简单化3,require()和 include()语句是语言结构 ,不是真正的函数,可以像 PHP 的其他语言结构一样4,include_once()和 require_once()语句也是在脚本执行期间包括并运行指定文件,与 include()require()唯一的区别是如果文件中的代码已经被包括了,则不会再次包括.5,require()包含文件失败,停止执行,给出错误(致命的)include()常用于动态包含 .通常是自动加载的文件,即使加载出错 ,整个程序还是继续执行一个页面声明,另一个页面调用包函文件失败,继续向下执行 ,返回一条警告PHP 字符串中单引号与双引号
8、的区别?单引号不能解释变量,而双引号可以解释变量。单引号不能转义字符,在双引号中可以转义字符。请说明 PHP 中传值与传引用的区别。什么时候传值什么时候传引用?按值传递:函数范围内对值的任何改变在函数外部都会被忽略按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改优缺点:按值传递时,php 必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。function test($b=1;echo $b;/输出test($b); /这里$b 传递给函数的其实是$b 的变量内容所处的内存地址,通过在函数里改变$a 的值 就
9、可以改变$b 的值了echo “;echo $b;/输出101in, not ni, exist, not exist 的作用和区别?in 在什么中Not in 不在什么中Exists 存在- LAMP 40 - 2 -Not exists 不存在面向对象中接口和抽象类的区别及应用场景?1、有抽象方法的类叫做抽象类,抽象类中不一定有抽象方法,抽象方法必须使用 abstract 关键字定义。2、接口中全部是抽象方法,方法不用使用 abstract 定义。3、当多个同类的类要设计一个上层,通常设计为抽象类,当多个异构的类要设计一个上层,通常设计为接口。echo(),print(),print_r(
10、)的区别?echo 是 PHP 语句 , print 和 print_r 是函数, 语句没有返回值,函数可以有返回值(即便没有用) Print()只能打印出简单类型变量的值( 如 int,string) print_r()可以打印出复杂类型变量的值(如数组,对象) echo 输出一个或者多个字符串mysql_fetch_row() 和 mysql_fetch_array 之间有什么区别?Mysql_fetch_row()以索引数组的方式取查询的结果集,mysql_fetch_array()以索引数组和关联数组两种方式取查询的结果集。请描述出两点以上 XHTML 和 HTML 最显著的区别(1)
11、XHTML 必须强制指定文档类型 DocType,HTML不需要(2)XHTML 所有标签必须闭合,HTML 比较随意33. HTTP 协议中 GET、POST 和 HEAD 的区别?HEAD: 只请求页面的首部。GET: 请求指定的页面信息,并返回实体主体。POST: 请求服务器接受所指定的文档作为对所标识的 URI 的新的从属实体。(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。(2)在 FORM 提交的时候,如果不指定 Method,则默认为 GET 请 求,Form 中提交的数据将会附
12、加在url 之后,以?分开与 url 分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中 XX为 该符号以16进制表示的 ASCII(或 ISO Latin-1)值。GET 请求请提交的数据放置在 HTTP 请求协议头中,而 POST 提交的数据则放在实体数据中;GET 方式提交的数据最多只能有1024 字节,而 POST则没有此限制。(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST 这个方法也是用来传送数据的,但是与 GET不同的是,使用 POST 的时候,数据不是附在 URI 后面传递的,而是要做为独立的行来传递,此时还必须要发送一个 Conten
13、t_length 标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用 POST 来传送的。表单中 get 与 post 提交方法的区别?1. get 是把参数数据队列加到提交表单的 ACTION属性所指的 URL 中,值和表单内各个字段一一对应,在 URL 中可以看到。post 是通过 HTTP post 机制,将表单内各个字段与其内容放置在 HTML HEADER 内一起传送到 ACTION 属性所指的 URL 地址。用户看不到这个过程。2. 对于 get 方式,服务器端用 Request.QueryString 获取变量的值,对于 post 方式,服务器端用
14、Request.Form 获取提交的数据。3. get 传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB 。get 安全性非常低,post 安全性较高。foo()和foo()之间有什么区别?(1分)foo()控制错误输出线性表和顺序表的区别?1、线性表包括顺序表和链表。2、顺序表中的元素的地址是连续的,链表里面节点的地址不是连续的,是通过指针连起来的。什么是数据库索引,主键索引,唯一索引的区别,索引的缺点是什么?索引用来快速地寻找那些具有特定值的记录。主键索引和唯一索引的区别:主键是一种唯一性索引,但
15、它必须指定为“PRIMARY KEY”,每个表只能有一个主键。唯一索引索引列的所有值都只能出现一次,即必须唯一。索引的缺点:1、创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。2、索引需要占用物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,需要的空间就会更大。3、当对表中 的数据进行增加、删除、修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。浏览器 IE 和非 IE 浏览器的划分,区别是什么?IE 浏览器指的是使用 IE 内核的浏览器,对一些 W3C标准的网页代码的支持不是很好。非 IE 浏览器指的是没有使用 IE 内核的浏览器
16、,对W3C 标准的网页代码有很好的支持。数据库中的事务是什么?事务(transaction )是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作 完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。解释:左连接,右连接,内连接,索引。1、內连接仅选出两张表中互相匹配的记录因此,这会导致有时我们需要的记录没有包含进来。内部连接是两个表中都必须有连接字段的对应值的记录,数据才能检索出来。2、左连接和右连接都是外部连接,也就是区别于内部连接,它对不满足连接条件的
17、行并不是象内部连接一样将数据完全过滤掉,而是保留一部分数据,行数不会减少。3、左连接是只要左边表中有记录,数据就能检索出来,而右边有的记录必要在左边表中有的记录才能被检索出来4、右连接是只要右边表中有记录,数据就能检索出来 ;5、全连接则会回返回两个表中的所有记录简述0000000中无限分类的实现原理。1、数据库分类表的设计:id 字段、父 id 字段、类名称字段、path 字段2、Path 字段存当前分类的路径,格式:0,父类 id,本身 id3、查询分类:select * from 分类表 order by path asc;- LAMP 40 - 3 -4、这样就查出来每个分类及其对应的
18、子类。能够使 html 和 php 分离开使用的模板?Smarty、template、PHPlibTemplate、FastTemplate使用那些工具进行版本控制?Clear case、CVS、SVN、PVCS 、Perforce、CCC、StarTeam、RCS写出三种以上 MySQL 数据库存储引擎的名称(提示:不区分大小写)MyISAM、InnoDB、BDB(Berkeley DB) 、Merge、Memory(Heap) 、Example、Federated、Archive、CSV 、Blackhole、MaxDB 等等十几个引擎什么是模板技术、能够使 HTML 和 PHP 分离开使
19、用的模板?模板技术就是使程序的逻辑代码和界面分开的技术。能够使 HTML 和 PHP 分开的模板有:Smarty、Template、PHPlib Template、FastTemplate实现中文字串截取无乱码的方法Mb_substr();用 PHP 写出显示客户端 IP 与服务器 IP 的代码获取客户端 IP:get_env(“REMOTE_ADDR”);获取服务器端 IP:$_SERVER“SERVER_ADDR“;数据库索引有几类,分别是什么?什么时候该用索引?普通索引、主键索引、唯一索引并非所有的数据库都以相同的方式使用索引,作为通用规则,只有当经常查询列中的数据时才需要在表上创建索引
20、。写几个魔术方法并说明作用?_call()当调用不存在的方法时会自动调用的方法_autoload()在实例化一个尚未被定义的类是会自动调用次方法来加载类文件_set()当给未定义的变量赋值时会自动调用的方法_get()当获取未定义变量的值时会自动调用的方法_construct()构造方法,实例化类时自动调用的方法_destroy()销毁对象时自动调用的方法_unset()当对一个未定义变量调用 unset()时自动调用的方法_isset()当对一个未定义变量调用 isset()方法时自动调用的方法_clone()克隆一个对象_tostring()当输出一个对象时自动调用的方法$_REQUEST
21、、$_POST、$_GET、$_COOKIE、$_SESSION、$_FILE 的意思是什么?它们都是 PHP 预定义变量$_REQUEST 用来获取 post 或 get 方式提交的值$_POST 用来获取 post 方式提交的值$_GET 用来获取 get 方式提交的值$_COOKIE 用来获取 cookie 存储的值$_SESSION 用来获取 session 存储的值$_FILE 用来获取上传文件表单的值数组中下标最好是什么类型的,为什么?数组的下标最好是数字类型的,数字类型的处理速度快。+i 和 i+哪一个效率高,为什么?+i 效率比 i+的效率更高,因为+i 少了一个返回 i的过程
22、。magic_quotes_gpc()、magic_quotes_runtime()的意思是什么?Magic_quotes_gpc()是 php 配置文件中的,如果设置为 on 则会自动 POST,GET,COOKIE 中的字符串进行转义,在之前加Magic_quotes_runtime()是 php 中的函数,如果参数为 true 则会数据库中取出来的单引号、双引号、反斜线自动加上反斜杠进行转义。框架中什么是单一入口和多入口,单一入口的优缺点?1、多入口就是通过访问不同的文件来完成用户请求。单一入口只 web 程序所有的请求都指向一个脚本文件的。2、单一入口更容易控制权限,方便对 http
23、请求可以进行安全性检查。缺点:URL 看起来不那么美观,特别是对搜索引擎来说不友好。你对 Memcach 的理解,优点有哪些?Memcache 是一种缓存技术,在一定的时间内将动态网页经过解析之后保存到文件,下次访问时动态网页就直接调用这个文件,而不必在重新访问数据库。使用memcache 做缓存的好处是:提高网站的访问速度,减轻高并发时服务器的压力。Memcache 的优点:稳定、配置简单、多机分布式存储、速度快。对关系型数据库而言,索引是相当重要的概念,请回答有关索引几个问题:a) 索引的目的是什么?1、快速访问数据表中的特定信息,提高检索速度2、创建唯一性索引,保证数据库表中每一行数据的
24、唯一性3、加速表和表之间的连接4、使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间b) 索引对数据库系统的负面影响是什么?负面影响:创建索引和维护索引需要耗费时间,这个时间随着数据量的增加而增加;索引需要占用物理空间,不光是表需要占用数据空间,每个索引也需要占用物理空间;当对表进行增、删、改的时候索引也要动态维护,这样就降低了数据的维护速度。c) 为数据表建立索引的原则有哪些?1、在最频繁使用的、用以缩小查询范围的字段上建立索引2、在平频繁使用的、需要排序的字段上建立索引d) 什么情况下不宜建立索引?1、对于查询中很少涉及的列或者重复值比较多的列,不宜建立索引2、对于一些特
25、殊的数据类型,不宜建立索引,比如文本字段(text)等。web 应用中,数据库的读取频率远高于写入频率, 如何优化 MySQL 而应对此种情景?使用 memcache 缓存技术,将动态数据缓存到文件,访问动态页面时直接调用缓存文件,而不必重新访问数据库,这样就减少了查询数据库的次数。- LAMP 40 - 4 -如果网站的访问量很大,可以把数据库读写服务器分开,使用多态服务器去处理数据库查询,使用较少的服务器去处理数据库的写入和修改。如果是一个 Web 频繁访问的查询,上题的查询如何优化?使用 memcache 缓存技术,在一定时间内将动态内容缓存到文件中,访问动态页面时,世界调用缓存文件而不
26、必重新查询数据库。数据库设计时,常遇到的性能瓶颈有哪些,常有的解决方案?瓶颈主要有:1、磁盘搜索 优化方法是:将数据分布在多个磁盘上2、磁盘读/写 优化方法是:从多个磁盘并行读写。3、CPU 周期 优化方法:扩充内存4、内存带宽 请举例说明在你的开发过程中用什么方法来加快页面的加载速度要用到服务器资源时才打开,及时关闭服务器资源,数据库添加索引,页面可生成静态,图片等大文件单独服务器。使用代码优化工具。描述一下大流量高并发量网站的解决方案1、确认服务器硬件是否足够支持当前的流量。2、使用 memcache 缓存技术,将动态数据缓存到内存中,动态网页直接调用这些文件,而不必在访问数据库。3、禁止
27、外部的盗链。4、外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对自身图片或者文件盗链,目前可以简单的通过 refer 来控制盗链,apache 自己就可以通过配置来禁止盗链。5、控制大文件的下载。大文件的下载会占用很大的流量,对于非 SCSI 硬盘来说会消耗,使得网站响应能力下降。6、使用不同的主机分流主要流量7、使用流量统计软件。在网站上安装一个流量统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化。8、分库分表。9、Sphinx 全文索引引擎。对于大流量的网站,您采用什么样的方法来解决访问量问题?优化程序,优化数据库,如果程序和数据库已经最优化,
28、使用以下解决方法:1、确定当前服务器设备是否满足流量需求。2、使用 Memcache 缓存技术,把动态内容缓存到文件中,动态网页直接调用这些文件,而不必再访问数据库。3、禁止外部盗链,图片和文件外部盗链会给服务器带来大量的负载压力,可以通过 refer 来禁止外部盗链,或者使用 apache 来配置禁止盗链。4、控制大文件的下载,大文件的下载对于非 SCSI 硬盘来说会占用大量的资源,导致服务器的响应能力下降。5、使用不同的主机分流主要流量,使服务器均衡负载。6、使用流量统计软件统计分析网站流量,可以知道哪些地方耗费了大量的流量,哪些页面需要再进行优化。如何设计或配置 Mysql,才能达到高效
29、使用的目的。1、数据库设计方面,设计结构良好的数据库,允许部分数据冗余。选取最适用的字段属性,尽可能把字段设置为NOTNULL,这样在查询的时候,数据库不用去比较NULL 值。2、系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,集群,数据库查询和写入分开。写高效 sql 语句,以提高效率。使用连接(join)来代替子查询使用联合(union)来代替手动创建的临时表所得皆必须,只从数据库取必须的数据。必要的时候用不同的存储引擎,比如 Innodb 可以减少死锁,HEAP 可以提高一个数量级的查询速度。使用事务使用外键使用索引设定网站的用户数量在千万级,但是活跃用户的数量只有 1%,如
30、何通过优化数据库提高活跃用户的访问速度?我们可以根据用户的活跃程度,把活跃的用户提取出来放到另外一张表里面,每次活跃的用户登陆的时候就直接到活跃用户表中进行查询,这样就提高了数据库的查询速度。了解 XSS 攻击吗 ? 如何防止 ?XSS 是跨站脚本攻击,首先是利用跨站脚本漏洞以一个特权模式去执行攻击者构造的脚本,然后利用不安全的 Activex 控件执行恶意的行为。使用 htmlspecialchars()函数对提交的内容进行过滤,使字符串里面的特殊符号实体化。SQL 注入漏洞产生的原因 ? 如何防止?SQL 注入产生的原因:程序开发过程中不注意规范书写 sql 语句和对特殊字符进行过滤,导致
31、客户端可以通过全局变量 POST 和 GET 提交一些 sql 语句正常执行。防止 SQL 注入:1、开启配置文件中的 magic_quotes_gpc 和magic_quotes_runtime 设置2、执行 sql 语句 时 使用 addslashes 进行 sql 语句转换3、Sql 语句书写尽量不要省略小引号和单引号4、过滤掉 sql 语句中的一些关键字:update、insert、delete、select、*5、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的。6、Php 配置文件中设置 register_globals 为 off,关闭全局变量注册
32、7、控制错误信息,不要再浏览器上输出错误信息,将错误信息写到日志文件中。如何进行防 SQL 注入?1、过滤掉一些常见的数据库操作关键字:select,insert,update,delete,and,*等或者通过系统函数:addslashes(需要被过滤的内容) 来进行过滤。2、在 PHP 配置文件中Register_globals=off;设置为关闭状态 /作用将注册全局变量关闭。比如:接收 POST 表单的值使用$_POSTuser,如果将 register_globals=on;直接使用$user 可以接收表单的值。3、SQL 语句书写的时候尽量不要省略小引号(tab键上面那个)和单引号
33、4、提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的- LAMP 40 - 5 -5、对于常用的方法加以封装,避免直接暴漏 SQL语句6、开启 PHP 安全模式Safe_mode=on;7、打开 magic_quotes_gpc 来防止 SQL 注入Magic_quotes_gpc=off;默认是关闭的,它打开后将自动把用户提交的 sql 语句的查询进行转换,把转为 ,这对防止 sql 注入有重大作用。因此开启:magic_quotes_gpc=on;8、控制错误信息关闭错误提示信息,将错误信息写到系统日志。9、使用 mysqli 或 pdo 预处理。用 PHP 写出一
34、个安全的用户登录系统需要注意哪些方面。1、密码要使用 MD5(密码+字符串)进行加密。2、登录表单的名称不要跟数据库字段一样,以免暴漏表字段。3、用户表的表名、字段名、密码尽量用不容易被猜到的。4、要使用验证码验证登陆,以防止暴力破解。5、验证提交的数据是不是来自本网站。6、登录后台处理代码数据库部分使用预处理,做好过滤,防止 sql 注入。如何实现多个线程安全的写入一个文件数据。采用锁机制,当一个用户在对此文件进行读写入操作时,将此文件锁定,操作完毕后解除锁定,在该用户进行读写入操作过程中,其他用户不能操作此文件,需要排队等待。什么是满二叉树?什么事完全二叉树?满二叉树:除了叶子节点外的所有
35、节点都有两个子节点。完全二叉树:每个节点最多有两个子节点,缺右不缺左,而且最多只能缺少一个叶子节点。字符串转数组,数组转字符串,字符串截取,字符串替换,字符串查找的函数分别是什么?Implode()、explode()、substr()、str_replace()、strpos、strrpos、strstrGD 库是做什么用的? (1分)gd 库提供了一系列用来处理图片的 API,使用 GD 库可以处理图片,或者生成图片。 在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。在网站上 GD 库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。John写出
36、 Zend 框架的目录结构,简单说明目录作用?application/ 存放应用程序的目录,包括 MVC 系统、配置文件、服务以及引导程序(Bootstrap.php)configs/ 配置文件目录。application/modules 多模块目录结果例如admin(后台前程),default(前台),shop(商城)各个模块下都有自己的 controllers,modules,Viewscontrollers/models/views/ 控制器/模型/视图 目录。application/cache 存放缓存等数据application/helpers/ 这个是存放“行动助手”(action
37、 helper)的目录。这些助手类默认的命名空间是“Controller_Helper_” ,如果是多模块那么命令空间将是“_Controller_Helper” 。Bootstrap.php 这个是应用程序入口文件。这个类的主要工作是引导应用程序,注册并初始化组件(component) 。注意:不要在这个文件调用前置控制器(front controller)的 dispatch() 方法。library/ 存放类库的目录。第三方的类库和自己写的类库放在这里进行自动 加载 但要注意要用自己独立的命名空间(建子目录) 。public/ 存放公开文件的目录,也即网站的根目录,存放可以被用户访问的文
38、件,例如 js、css 和图片等等。index.php 是应用程序的单入口,其主要工作是建立php 环境,引用 Bootstrap.php 来初始化,并调用前置控制器的 dispatch()方法来分发请求。谈谈对 mvc 的认识?由模型(model),视图(view), 控制器(controller)完成的应用程序由模型发出要实现的功能到控制器,控制器接收组织功能传递给视图;MVC 是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用 MVC 应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接
39、受用户的输入并调用模型和视图去完成用户的需求。MVC 的优点:低耦合性、高重用性和可适用性、较低的生命周期成本、快速的部署、可维护性、可扩展性,有利于软件工程化管理MVC 的缺点:没有明确的定义,完全理解 MVC 并不容易。不适合小型规模的应用程序。PHP 如何抛出和接收错误?使用 try.catch,异常的代码放在 try 代码块内,如果没有触发异常,则代码继续执行,如果异常被触发,就会抛出一个异常。Catch 代码块捕获异常,并创建一个包含异常信息的对象。$e-getMessage(),输出异常的错误信息。PHP 的网站主要攻击方式有哪些? 1、命令注入(Command Injection
40、)2、eval 注入(Eval Injection)3、客户端脚本攻击(Script Insertion)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL 注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7、Session 会话劫持(Session Hijacking)8、Session 固定攻击(Session Fixation)9、HTTP 响应拆分攻击 (HTTP Response Splitting)10、文件上传漏洞(File Upload Attack)11、目录穿
41、越漏洞(Directory Traversal)12、远程文件包含攻击(Remote Inclusion)13、动态函数注入攻击(Dynamic Variable Evaluation)14、URL 攻击(URL attack)15、表单提交欺骗攻击(Spoofed Form Submissions)16、HTTP 请求欺骗攻击 (Spoofed HTTP Requests)几个重要的 php.ini 选项Register Globalsphp=4.2.0,php.ini 的 register_globals 选项的默认值预设为 Off,当 register_globals 的设定为 On 时
42、,程序可以接收来自服务器的各种环境变量,包括表单提交的变量,而且由于 PHP 不必事先初始化变量的值,- LAMP 40 - 6 -从而导致很大的安全隐患。safe_mode安全模式,PHP 用来限制文档的存取、限制环境变量的存取,控制外部程序的执行。启用安全模式必须设置php.ini 中的 safe_mode = On1、限制文件存取safe_mode_include_dir = “/path1:/path2:/path3不同的文件夹用冒号隔开2、限制环境变量的存取safe_mode_allowed_env_vars = string指定 PHP 程序可以改变的环境变量的前缀,如:safe_
43、mode_allowed_env_vars = PHP_ ,当这个选项的值为空时,那么 php 可以改变任何环境变量safe_mode_protected_env_vars = string用来指定 php 程序不可改变的环境变量的前缀3、限制外部程序的执行safe_mode_exec_dir = string此选项指定的文件夹路径影响system、exec、popen、passthru,不影响shell_exec 和“ ”。disable_functions = string不同的函数名称用逗号隔开,此选项不受安全模式影响magic quotes用来让 php 程序的输入信息自动转义,所有的
44、单引号(“”),双引号(“” ”),反斜杠(“”)和空字符(NULL),都自动被加上反斜杠进行转义magic_quotes_gpc = On 用来设置 magic quotes 为 On,它会影响 HTTP 请求的数据(GET、POST、Cookies)程序员也可以使用 addslashes 来转义提交的 HTTP 请求数据,或者用 stripslashes 来删除转义使用过哪些 PHP 框架。试描述其优劣点。1、BroPHP 框架:优点:轻量级学习型框架,配置简单,操作简单,容易上手,提供了比较全面的文档。缺点:2、ThinkPHP 框架:优点:功能比较全面,配置相对比较简单,操作相对比较简
45、单,有很多使用示例程序。缺点:提供的操作方法太多,新手不知如何选择,文档不够全面。php 中,模板引擎的目的是什么? 你用过哪些模板引擎?使用模板引擎的目的是使程序的逻辑代码和 html界面代码分离开,是程序的结构更清晰。使用过的模板引擎:Smarty、ThinkPHP 的ThinkTemplate7. 如何在页面之间传递变量( 至少两种方式 ) ? GET,POST,COOKIE,SESSION8. 你所知道的 php 数组相关的函数?array()-创建数组array_combine()-通过合并两个数组来创建一个新数组range()-创建并返回一个包含指定范围的元素的数组compact(
46、)-建立一个数组array_chunk()-将一个数组分割成多个array_merge()-把两个或多个数组合并成一个数组array_slice()-在数组中根据条件取出一段值array_diff()-返回两个数组的差集数组array_intersect()-计算数组的交集array_search()-在数组中搜索给定的值array_splice()-移除数组的一部分且替代它array_key_exists()-判断某个数组中是否存在指定的keyshuffle()-把数组中的元素按随机顺序重新排列array_flip()-交换数组中的键和值array_reverse()-将原数组中的元素顺序翻
47、转,创建新的数组并返回array_unique()-移除数组中重复的值你所知道的 PHP 的一些技术(smarty 等)?Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,svn,thinkphp,brophp,yii你所熟悉的 PHP 论坛系统 有哪些?Discuz你所熟悉的 PHP 商城系统 有哪些?Ecshop你所熟悉的 PHP 开发框架 有哪些?Brophp,thinkphp你所知道的设计模式有哪些?工厂模式、策略模式、单元素模式、观察者模式、命令链模式说说你对代码管理的了解? 常使用那些代码版本控制软件?通常一个项目是由一个团队去开发
48、,每个人将自己写好的代码提交到版本服务器,由项目负责人按照版本进行管理,方便版本的控制,提高开发效率,保证需要时可以回到旧版本。常用的版本控制器:SVN说说你对 SVN 的了解?优缺点?SVN 是一种版本控制器,程序员开发的代码递交到版本服务器进行集中管理。SVN 的优点:代码进行集中管理,版本控制容易,操作比较简单,权限控制方便。缺点:不能随意修改服务器项目文件夹。怎么找到 PHP.ini 的路径?一般都在 php 的安装目录下,或者 window 系统的windows 目录下。PHP 加速模式/扩展? PHP 调试模式/工具?Zend Optimizer 加速扩展调试工具:xdebug你常
49、用到的 mysql 命令?Show databasesShow tablesInsert into 表名() values()Update 表名 set 字段=值 where .Delete from 表名 where .Select * from 表名 where 条件 order by . Desc/asc limit . Group by . Having .进入 mysql 管理命令行的命令?Mysql -uroot -p 回车 密码show databases; 这个命令的作用?显示当前 mysql 服务器中有哪些数据库show create database mysql; 这个命令的作用?- LAMP 40 - 7 -显示创建数据库的 sql 语句show create table user; 这个命令的作用?显示创建表的 sql 语句desc user; 这个命令的作用?查询 user 表的结构explain select