PHP试题+答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四脚猫综合试题

解答题(每题10分)

1、用户在浏览器中输入一个网址按下回车后它的流程是怎么样的?

答:a、用户输入网址敲下回车键后首先是会有一个DNS解析的过程

b、然后会建立一个socket连接

c、连接成功建立后,开始向WEB服务器发送请求

d、应答WEB服务器收到的请求进行处理

e、最后浏览器与服务器响应完成后关闭连接

2、解释以下HTTP的状态码的意思是什么?200,302,403,500

答:200:成功

302:在其他地址发现了请求数据(临时重定向)

403:禁止访问

500:内部服务器错误

3、session与cookie的区别是什么?

答:session是由应用服务器维持的一个服务器端的存储空间,用户在链接服务器时,会由服务器生成一个唯一的sessionid,用该sessionid为标识符来存取服务器端的session存储空间。而sessionid这一数据则是保存到客户daunting,用cookie 保存的,用户提交页面时,会将这个sessionid提交到服务器端,来存取session 数据。这一过程是不用开发人员干预的。所以一旦客户端禁用cookie,那么session 也会失效。服务器也可以通过URL重写的方式来传递session的值。

cookie是客户端的存储空间,由浏览器来维持。

4、for与foreach那个执行的更快一些,为什么?

答:foreach更快

for在执行的时候是一次一次的进行,数据量大越慢

foreach没进行一次循环,当前数组元素的值就会被赋值给一个变量(数组的指针就会逐一的移动),其是由PHP低层封装好的

5、分析下“{} == false”的执行流程是怎么样的?

答:假设{}为值X,false为值Y,

a、当Y为布尔值时它会转换成整型,而转换成整型就是0

b、而X为一个对象,那么对象进行转换时就会转换成它的原始值

c、根据ToPrimitive的转换规则可以得到PreferredType没有参数,那么就会被当成number来处理,还有一种情况会被排除就是Date类型,之后就等于number类型的转换规则,如果X能转换成自己的原始值,那么就直接返回,否则会先通过valueOf()来转换,valueOf()之后拿到的数据是’object’,而这个字符串object再转换成number类型,转成之后是NAN

d、最后的结果就变成了NAN == 0,显然这个是不成立的,所以最后应该是false

6、MySQL查看SQL语句的效率?

答:explain命令可以用来查看SQL语句的执行效果,其主要的用法:explain select ... from ... [where ...]

例如:explain select * from news;

输出的字段主要有:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

其中主要参考type——显示了链接使用了那种类别,有无使用索引,Extra——包含MySQL解决查询的详细信息

7、MyISAM与InnoDB的区别是什么?

答:构成上的区别:MyISAM-每个MyISAM在磁盘上存储成三个文件,第一个文件的名字以表的名字开始,扩展名指出文件类型。InnoDB-基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB表的大小只受限于操作系统文件的大小,一般为2GB 事务处理上的区别:MyISAM-MyISAM类型的表强调的是性能,其执行速度比InnoDB 类型更快,但是不提供书屋支持。InnoDB-InnoDB提供事务支持事务,外部键等高级数据库功能

CURD上的区别:MyISAM-如果执行大量的SELECT,MyISAM是更好的选择。InnoDB-1.如果你的数据执行大量的insert或update,出于性能方面的考虑,应该使用InnoDB 表2.delete from table时,InnoDB不会重新建立表,而是一行一行的删除。3.load table from master操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用对AUTO_INCREMENT的操作:MyISAM-每表一个AUTO_INCREMENT列的内部处理。MyISAM为insert和update操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列项的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列项中删除的值的情况)AUTO_INCREMENT 值可用alter table 或myisamch来重置。对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有改字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。InnoDB-如果你为一个表指定AUTO_INCREMENT列,在数据疵点里的InnoDB表句柄包含一个名为自动增长计数器,它被用在为该列赋新值。自动增长计数器仅被存储在主内存中,而不是存在磁盘上

表的具体行数:MyISAM-select count(*) from table, MyISAM只要简单的独处保存好的行数,注意的是当count(*)语句包含where条件时两种表的操作是一样的。InnoDB-InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table 时,InnoDB要扫描一遍整个表来计算有多少行

锁:MyISAM-表锁InnoDB-提供行锁(locking on融为Level),提供与Oracle类型一直的不加锁读取(non-locking read in selects),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like ”%aaa%”

8、谈谈你是如何优化MySQL数据库的?(越多越好)

答:a、数据库设计方面,这是DBA和Architect的责任,设计结构良好的数据,必要的时候使用反三范式规则,允许部分数据冗余,避免JOIN操作,以提高查询效率

b、系统架构设计方面,表散列,把海量数据散列到几个不同的表里面。快慢表,块表

相关文档
最新文档