`
student_lp
  • 浏览: 427018 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过面试题目学习php之问答题

阅读更多

1、http状态码,及其说明。

答:php通过设置header信息返回http状态码,例如返回404:header(“HTTP/1.1 404 Not Find”);

    HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。

1xx 消息,这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

100客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。

101服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。

102由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。

2xx 成功,这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

200请求已成功,请求所希望的响应头或数据体将随此响应返回。

201请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。

202服务器已接受请求,但尚未处理。

203服务器已成功处理了请求,但返回的实体头部元信息不是在原始服务器上有效的确定集合,而是来自本地或者第三方的拷贝。

204服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。

205服务器成功处理了请求,且没有返回任何内容。但是与204响应不同,返回此状态码的响应要求请求者重置文档视图。

206服务器已经成功处理了部分 GET 请求。类似于 FlashGet 或者迅雷这类的 HTTP 下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。

207由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。

3xx 重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

300被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。

301被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。

302请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-ControlExpires中进行了指定的情况下,这个响应才是可缓存的。

303对应当前请求的响应可以在另一个 URI 上被找到,而且客户端应当采用 GET 的方式访问那个资源。

304如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。

305被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应。

307请求的资源现在临时从不同的URI 响应请求。

4xx 请求错误,这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

400①语义有误,当前请求无法被服务器理解。②请求参数有误。

401当前请求需要用户验证。

402该状态码是为了将来可能的需求而预留的。

403服务器已经理解请求,但是拒绝执行它。

404请求失败,请求所希望得到的资源未被在服务器上发现。

405请求行中指定的请求方法不能被用于请求相应的资源。

406请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。

407401响应类似,只不过客户端必须在代理服务器上进行身份验证

408请求超时。

409由于和被请求的资源的当前状态之间存在冲突,请求无法完成。

410被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。

411服务器拒绝在没有定义 Content-Length 头的情况下接受请求。

5xx 服务器错误这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

500服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。

501服务器不支持当前请求所需要的某个功能。

502作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

503由于临时的服务器维护或者过载,服务器当前无法处理请求。

504作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTPFTPLDAP)或者辅助服务器(例如DNS)收到响应。

505服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。

506由《透明内容协商协议》(RFC 2295)扩展,代表服务器存在内部配置错误:被请求的协商变元资源被配置为在透明内容协商中使用自己,因此在一个协商处理中不是一个合适的重点。

507服务器无法存储完成请求所必须的内容。这个状况被认为是临时的。WebDAV (RFC 4918)

509服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。

510获取资源所需要的策略并没有没满足。

2、Cookiesession的区别,禁止了cookiesession能正常使用吗?session的缺点是什么?

答:COOKIE保存在客户端,用户通过手段可以进行修改,不安全,单个cookie允许的最大值是3k。

而SESSION保存在服务器端,相对比较安全,大小没有限制。禁用了cookie之后session不能正常使用,需要通过URLrewrite的方式实现。

Session的缺点:保存在服务器端,每次读取都从服务器进行读取,对服务器有资源消耗。

Session保存在服务器端的文件或数据库中,默认保存在文件中,文件路径由php配置文件的session.save_path指定。

Session文件是公有的。

3、怎么防止sql注入?

答:①、过滤用户提交的内容,比如update、insert、select、delete、*等数据库操作的关键字。

    ②、使用函数addslashes()转义提交的内容。

③、Php配置文件中开启magic_quotes_gpc=on;将自动转换用户查询的sql语句,对防sql注入有重大作用。

④、在php配置文件中将register_globals设置为off,关闭全局变量注册。

⑤、在php配置文件中开启安全模式safe_mode=on;

⑥、Sql语句的书写尽量不要省略小引号和单引号。

⑦、提高数据库表和字段的命名技巧,对一些重要的字段根据程序的特点命名,取不易被猜到的名称。

⑧、控制错误信息,关闭错误信息的输出,将错误信息写到日志文件中,不要在网站暴漏错误信息。

4、数据库索引有几类,分别是什么?什么时候该用索引?

答:①主键索引,它用于根据主键自身的唯一性来唯一标识每条记录。因此,该键必须是该记录所表示实体唯一拥有的值,或者是数据库生成的唯一值,例如自增加整数值。这样,无论以后是否删除以前存在的记录,每条记录都有唯一的主键索引。

②与主键索引一样,唯一索引可以防止重建重复的值。但是,不同之处在于,每个表只能有一个主键索引,但可以有多个唯一索引。

     ③常规索引。经常希望对非主键甚至并非唯一的字段上的搜索进行优化。(1)如果表中的某个列将成为大量选择查询的焦点,就应当使用单列常规索引。并且一般指定列的前N个字符对于确保唯一性已经足够,如:INDEX(lastname(5))。(2)如果指定列会经常在获取查询中一起使用,则推荐使用多列索引。Mysql的多列索引方法基于一种称为最左前缀的策略。

     ④全文索引。提供了一种高效的方法来搜索存储在CHAR、VARCHAR或者TEXT类型中的文本。Mysql默认会忽略少于4个字符的关键字。Boolean全文搜索对搜索查询提供了更细粒度的控制,允许显示的标识结果中应当或不应当出现哪些单词。

索引最佳实践

只对where和order by子句中需要的列添加索引。多余的索引会导致不必要的硬盘空间消耗,在修改表信息的时候会降低性能。有索引的表在性能会降低,这是由于每次修改记录都必须更新索引。

如果创建诸如INDEX(firstname,lastname)的索引,不要再创建INDEX(firstname),因为mysql能搜索索引前缀。不过,要记住只有前缀有索引,这个多列索引不能应用于对lastname的搜索。

对于准备索引的列要使用属性NOT NULL,这样就永远不会存在存储NULL值。

对不使用索引的查询,使用选项—log-long-format来记录日志。然后可以检查日志文件,对查询进行相应的调整。

EXPLAIN语句有助于确定mysql如何执行查询,展示表是如何连接的,以及按怎样的顺序连接。

5、引用传值和非引用传值的区别,什么时候该用引用传值,什么时候该用非引用传值

答:按值传递:函数内对值的任何改变在函数外都被忽略。

引用传值:函数内对值的任何改变在函数外也将反映出这些修改。

按值传递时php必须复制值,操作大型对象和字符串这将是代价很大的操作。按引用传值不需要复制值,对性能的提高有好处。

当需要在函数内改变原变量的值时用引用传值,如果不想改变原变量的值时用传值。

6、写几个魔术方法并说明作用?

答:__call()当调用一个未定义的方法是调用此方法。这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方​法,如果本类中不存在__call()方法就去找父类中的__call()方法。

     __set()当给未定义的成员变量赋值时会自动调用的方法

     __get()当获取未定义成员变量的值时会自动调用的方法

     __construct()构造方法,实例化类时自动调用的方法

     __destroy()析构方法,销毁对象时自动调用的方法

     __unset()当对一个未定义变量调用unset()时自动调用的方法

     __isset()当对一个未定义变量调用isset()方法时自动调用的方法

     __clone()PHP 5中的对象赋值是使用的引用赋值,如果想复制一个对象则需要使用clone方法,在调用此方法是对象会自动调用__clone魔术方法,如果在对象复制需要执行某些初始化操作,可以在__clone方法实现。

     __tostring()方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时。

     __autoload()在实例化一个尚未被加载的类是会自动调用次方法来加载类文件

     __sleep()serialize() 检查类中是否有魔术名称__sleep 的函数。如果这样,该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。使用__sleep 的目的是关闭对象可能具有的任何数据库连接,提交等待中的数据或进行类似的清除任务。此外,如果有非常大的对象而并不需要完全储存下来时此函数也很有用。

     __wakeup()unserialize() 检查具有魔术名称 __wakeup 的函数的存在。如果存在,此函数可以重建对象可能具有的任何资源。使用__wakeup 的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。

     __set_state()当调用var_export()时,这个静态方法会被调用。

     __invoke(PHP 5.3.0以上版本有效)当尝试以调用函数的方式调用一个对象时,__invoke 方法会被自动调用。

     __callStatic(PHP 5.3.0以上版本有效)它的工作方式类似于__call() 魔术方法,__callStatic() 是为了处理静态方法调用。

7、Mvc的认识?

答:MVC是一种设计模式,强制使输入、处理、输出分开,使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

     视图就是用户看到并与之交互的界面。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。

     模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。

     控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。

     使用MVC的优点:低耦合、高重用性、较低的生命周期成本、快速开发部署、可维护性、可扩展性,有利于软件工程化管理。

     MVC的缺点:没有明确的定义,完全理解并不容易。小型项目不适合用MVC。

8、框架中什么是单一入口和多入口,单一入口的优缺点

答:多入口就是通过访问不同的文件来完成用户请求。

     单一入口只web程序所有的请求都指向一个脚本文件的。

     单一入口更容易控制权限,方便对http请求可以进行安全性检查。

     缺点:URL看起来不那么美观,特别是对搜索引擎来说不友好。

9、必须背下来的函数

答:trim()去除两侧空格

     ltrim()去除左侧空格

     rtrim()去除右侧空格

     还可去除其他字符:如trim($str,"#")//去除两侧"#"字符

     str_pad 字符串填充函数

     strtolower--字符串小写转换

     strtoupper--字符串大写转换

     ucfirst-- 将首字母大写

     ucwords-- 将每个单词首字母大写

 

     nl2br--将字串中\n换成<br/>标签,实现换行输出。

     htmlspecialchars--格式换字串中的html标签

     htmlentities-- 却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了。

 

     strrev-- 将字串颠倒返回

     strlen-- 求字串长度

     number_format-- 格式化数字的

     md5-- 单向加密的(不可逆的(不能解密的))。

    

     strcmp-- 整个比较是否相同

     strncmp--指定长度的比较

     strcasecmp-- 不区分大小写比较

     strnatcmp-- 按自然顺序比较

     similar_text-- 模糊比较

 

     *explode-- 字符串拆分函数

     *implode-- 字符串组合函数

     *substr-- 截取字串

     *strstr-- 字串查找并截取

     strchr -- 是上面的strstr的别名找并截取

     strrchr-- 从后面做字串查找。找并截取

     *strpos--寻早一个字符出现位置(从前开始。第三个参数为查找起始位置)

     strrpos--寻早一个字符出现位置(从后面开始找。)

     换成字串str_replace(被换字串,换成的字串,原字串,[数量]);字符串替换

10、请陈述Session的实现机制。如果pHp没有提供Session的实现,请用pHp设计一个简单的Session实现。

答:会话session是http无状态问题的一种更好的解决办法。它的实现方式是为每位网站访问者分配一个称为会话ID的唯一标识属性,然后将此SID与任意数量的数量关联。在http无状态行为下,通过两种方法实现:①cookie。当用户访问网站时,服务器将用户的有关信息存储在cookie中,并发送给浏览器,浏览器保存这个cookie,当用户再次请求页面时,服务器会获取这些信息。利用该原理,将SID存储在cookie中,在必要时获取SID,并通过SID获取session中存储的关联数据。此外,即使会话结束,cookie也能在客户端保存,所以可以再后续的会话中读取,这意味即使长时间不活动,也能持久保存信息。但是,是否接受cookie最终要由客户端控制,而用户有可能禁用浏览器对cookie的支持,所以必须对这些可能性做好准备。②url重写。第二种用于SID传播的方法是在每个请求页面的本地URL上增加SID.无论用户何时单击这些本地连接,都会导致SID的自动传播。这样即使用户禁用cookie,也不会影响网站会话处理功能的正常使用。但是,这种方法也有缺陷,首先,URL重写会在会话之间不能保证持久性;其次,无法阻止用户将url发送给另一位用户,只要会话没有超时,会话就会在接受者的工作站上继续。

11、简述论坛中无限分类的实现原理。

答:在论坛分类的数据库设计中,有一个主键ID、parentID、subject等。当节点为根节点时,parentID就为0,其他对应的就是父节点的ID。程序获取的过程中,我们需要借助于一个tree类,在这个tree类中,成员变量有$data—键为ID,值为该节点所有的数据;$child—键位parentID,值为ID;$parent—键为ID,值为parentID;$layer—键是ID,值为该节点的深度。在从数据库中获取数据的时候,编写sql语句:select * from category order byid,parentId desc;然后在循环结果集的过程中,将他们放入到tree类中,这样不管分类有多少层,我们都可以通过这个tree类,读取出对应的树形结构。

12、Safe_mode 打开后哪些地方受限.

答:启用safe_mode指令将对在共享环境中使用php时有可能有危险的语言特性所限制。通过将safe_mode设置为on来启用,就会比较知性脚本的UID(用户ID)和脚本尝试访问的文件的UID,以此作为其限制机制的基础。如果UID相同,则执行脚本;否则,脚本失败。具体的,当启用安全模式时,限制如下:

     所有输入\输出函数(如:fopen、file、require等)的使用会受到限制,只能用于与调用这些函数的脚本有相同所有者的文件。

     如果用户试图创建新文件,将限制为只能在该用户拥有的目录中创建文件。

     如果试图通过函数popen()、system()或者exec()执行脚本,只有当脚本位于safe_mode_exec_dir配置指定的目录中才能执行。

     HTTP验证得到进一步加强,因为验证脚本拥有者的UID划入验证领域范围内。此外,当启用安全模式时,不会设置PHP_AUTH.

     如果使用MYSQL数据库服务器,连接mysql服务器所用的用户名必须与调用mysql_connect()的文件的拥有者用户名相同。

13、Mysql 的存储引擎和他们的区别。

答:MyISAM表无法处理事务,从而不会带来事务型存储引擎所需的额外开销,MyIASM引擎特别适合应用如下情况:①选择密集的表。MyISAM存储引擎在大量数据中筛选非常迅速,甚至在高流量环境中也是如此;②插入密集的表。MyISAM的并发插入特性允许同事选择和插入数据。MyISAM引擎支持三种存储格式:静态、动态、压缩,mysql会自动根据表结构的特定情况应用最佳的格式类型。如果所有表列的大小都是静态的(即不适用xblog、xTEXT或者varchar数据类型),mysql就会自动使用静态mysql格式。如果有表列(即使只有一列)定义为动态的(使用xBLOG、xTEXT或varchar),mysql就会自动使用动态格式。有时会创建在整个应用程序生命周期中都只读的表。如果是这种情况,就可以使用myisampack工具将其转换为myisam压缩表来减少空间。

     InnoDB表资源使用专用缓冲区管理,次缓冲区可以像其他任何mysql配置参数一样进行控制,InnoDB还引入了行级锁定和外键约束。它适合如下情况使用:更新密集的表,特别适合处理多重并发更新请求;事务,InnoDB存储引擎室唯一支持事务的标准mysql存储引擎,这是惯例敏感数据的必需特性;自动灾难恢复,与其他引擎不同,InnoDB表能够自动从灾难中恢复,虽然MyISAM表也能在灾难后修复,但是其过程要长的多。

     Memory存储引擎的触发点是速度,为得到最快的响应时间,采用的逻辑存储介质是系统内存,这样就提供很高的性能,但是,当mysql守护进因为程崩溃时,所有的memory数据都会丢失。Memory的缺陷:不支持varchar、blog或者text数据类型,因为这种表按固定长度的格式存储。并且在4.1之前的mysql,不支持自动增加列。Memory适合如下情况:可以忽略,目标数据相对较小,而且频繁的访问。暂时,目标数据只是临时需要,在其生命周期中必须立即可用;相对无关,存储在memory表中的数据如果突然丢失,不会对应用服务器产生实质负面影响,而且不会对数据完整性有长期影响。

     Merge、federated、archive、csv

14、介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。

答:Xdebug是一个开放源代码PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。

     eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍;

     XCache 是一个开源的 opcode 缓存器/优化器, 这意味着他能够提高您服务器上的 PHP 性能. 他通过把编译 PHP 后的数据缓冲到共享内存从而避免重复的编译过程, 能够直接使用缓冲区已编译的代码从而提高速度. 通常能够提高您的页面生成速率 2 到5 倍, 降低服务器负载.

     Zend Optimizer(以下简称ZO)用优化代码的方法来提高php应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(Run-TimeCompiler)产生的代码进行优化。

15、您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。

答:

16、大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?

答:

17、相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flvflash播放。叙述要涉及的各类开源软件和简单用途。

答:jquery uploadify、ffmpeg、mplayer

18、画几个你最熟悉的SERVER端模型出来(格式不重要,尽量将图画清楚,说明思路即可)

答:

19、PHP的垃圾收集机制是怎样的?

答:PHP作为脚本语言是页面结束即释放变量所占内存的。 当一个 PHP线程结束时,当前占用的所有内存空间都会被销毁,当前程序中所有对象同时被销毁。GC进程一般都跟着每起一个SESSION而开始运行的.gc目的是为了在session文件过期以后自动销毁删除这些文件. 在PHP中,没有任何变量指向这个对象时,这个对象就成为垃圾。PHP会将其在内存中销毁;这是PHP 的GC垃圾处理机制,防止内存溢出。 执行这些函数也可以起到回收作用 __destruct /unset/mysql_close /fclose php对session有明确的gc处理时间设定 session.gc_maxlifetime 如果说有垃圾,那就是整体的程序在框架使用中,会多次调用同一文件等等造成的非单件模式等。所以在出来的时候,必要的用_once 引用,在声明类的时候使用单件模式。还有简化逻辑等等。而如果妄想让PHP自己本身管理内存,进行垃圾管理。呵呵。好像PHP还办不到,对于析构函数,ANDI在他的书里写的很明白。可有可无,不可置否。而内存管理的东西一般都是桌面程序更多去考虑的。

20、你用什么方法检查 PHP 脚本的执行效率(通常是脚本执行时间)和数据库 SQL 的效率(通常是数据库 Query 时间),并定位和分析脚本执行和数据库查询的瓶颈所在?

答:1.PHP执行时间:

$begin=microtime(true);//获取程序开始执行的时间

// somecode here 待执行的代码

$stop=microtime(true);//获取程序执行结束的时间

list($m0,$s0)=explode("",$begin);

list($m1,$s1)=explode("",$stop);

$runtime=($s1+$m1-$s0-$m0)*1000;

echo'<br />当前脚本执行时间:'.$etime-$stime.'微秒';

 

2.SQL执行时间(其实和上面一样)

$begin=microtime();

mysql_query($sql);

$stop=microtime();

list($m0,$s0)=explode("",$begin);

list($m1,$s1)=explode("",$stop);

$runtime=round(($s1+$m1-$s0-$m0)*1000,4);

echo'<br />当前脚本执行时间:'.$runtime.'ms';

22sql语句应该考虑哪些安全性?

答:主要是防止注入,做好 ' " / \ 等特殊字符的转义基本成功一大半了,数据提交时注意html过滤,注意--,#这样的注释,注意子查询和一些mysql函数sleep,load_file等等

23、简单描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什影响(从读写两方面)。

答:主键是为了标识数据库记录唯一性,不允许记录重复,且键值不能为空,主键也是一个特殊索引。

数据表中只允许有一个主键,但是可以有多个索引。

使用主键会数据库会自动创建主索引,也可以在非主键上创建索引,方便查询效率。

索引可以提高查询速度,它就相当于字典的目录,可以通过它很快查询到想要的结果,而不需要进行全表扫描。

主键索引外索引的值可以为空。

主键也可以由多个字段组成,组成复合主键,同时主键肯定也是唯一索引。

唯一索引则表示该索引值唯一,可以由一个或几个字段组成,一个表可以有多个唯一索引。

24、假设有一个博客系统,数据库存储采用mysql,用户数量为1000万,预计文章总数为10亿,每天有至少10万的更新量,每天访问量为5000万,对数据库的读写操作的比例超过101,你如何设计该系统,以确保其系统高效,稳定的运行?

答:

 提示:可以从数据库设计,系统框架,及网络架构方面进行描述,可以自由发挥。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics