腾讯PHP面试必备知识

1. php的垃圾回收机制

PHP能够自动进行内存管理,清除不须要的对象。

PHP使用了引用计数(reference counting) GC机制。

每一个对象都内含一个引用计数器refcount,每一个reference链接到对象,计数器加1。当reference离开生存空间或被设为NULL,计数器减1。当某个对象的引用计数器为零时,PHP知道你将再也不须要使用这个对象,释放其所占的内存空间。

参考 http://www.php.net/manual/zh/features.gc.refcounting-basics.php

2. session与cookie的区别和联系

区别:

1.存放位置:Session保存在服务器,Cookie保存在客户端。

2.存放的形式:Session是以对象的形式保存在服务器,Cookie以字符串的形式保存在客户端。

3.用途:Cookies适合作保存用户的我的设置,爱好等,Session适合作客户的身份验证

4.路径:Session不能区分路径,同一个用户在访问一个网站期间,全部的Session在任何一个地方均可以访问到。而Cookie中若是设置了路径参数,那么同一个网站中不一样路径下的Cookie互相是访问不到的。

5.安全性:Cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session

6.大小以及数量限制:每一个域名所煲含的cookie 数:IE7/8,FireFox:50个, Opera30个; Cookie总大小:Firefox和Safari容许cookie多达4097个字节,Opera容许cookie多达4096个字 节,InternetExplorer容许cookie多达4095个字节;通常认为Session没有大小和数量限制。

联系:

1. Session须要借助Cookie才能正常工做。若是客户端彻底禁止Cookie,Session将失效!由于Session是由应用服务器维持的一个 服务器端的存储空间,用户在链接服务器时,会由服务器生成一个惟一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID 提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。因此一旦客户端禁用Cookie,那么Session也会失效。

3. 如何修改SESSION的生存时间

1. 设置浏览器保存的sessionid失效时间 setcookie(session_name(), session_id(), time() + $lifeTime, "/");

2. 可使用SESSION 自带的 session_set_cookie_params(86400); 来设置 Session 的生存期

3. 经过修改php.ini中的session.gc_maxlifetime参数的值就能够改变session的生存时间

4. PHP页面重定向的方法有哪些

1. header('Location: http://www.baidu.com/') ;

2. echo '<meta http-equiv="Refresh" content="0;url=http://www.baidu.com/" >';

3 echo '<script>window.location.href= www.baidu.com</script>';

5. PDO、adoDB、PHPLib数据库抽象层比较

PHP数据库抽象层就是指,封装了数据库底层操做的介于PHP逻辑程序代码和数据库之间的中间件。

PDO以PHP 5.1为基础进行设计,它使用C语言作底层开发,设计沿承PHP的特色,以简洁易用为准,从严格意义上讲,PDO应该归为PHP 5的SPL库之一,而不该该归于数据抽象层,由于其自己和MySQL和MySQLi扩展库的功能相似。PDO是不适合用在打算或者有可能会变动数据库的系 统中的。

ADODB无论后端数据库如何,存取数据库的方式都是一致的;

转移数据库平台时,程序代码也没必要作太大的更动,事实上只须要改动数据库配置文 件。提供了大量的拼装方法,目的就是针对不一样的数据库在抽象层的底层对这些语句进行针对性的翻译,以适应不一样的数据库方言!可是这个抽象层彷佛体积过于庞 大了,所有文件大概有500K左右,若是你作一个很小的网站的话,用这个彷佛大材小用了

PHPLib多是伴随PHP一同成长最老的数据库抽象层(但和ADODB相比,它只算是一个MySQL抽象类库),这个抽象类使用方法至关简单,体积小,是小型网站开发不错的选择。

PDO提供预处理语句查询、错误异常处理、灵活取得查询结果(返回数组、字符串、对象、回调函数)、字符过滤防止SQL攻击、事务处理、存储过程。

ADODB支持 缓存查询、移动记录集、(HTML、分页、选择菜单生成)、事务处理、输出到文件。 参考 http://apps.hi.baidu.com/share/detail/463678

6. 长链接、短链接的区别和使用

长链接:client方与server方先创建链接,链接创建后不断开,而后再进行报文发送和接收。这种方式下因为通信链接一直存在。此种方式经常使用于P2P通讯。

短链接:Client方与server每进行一次报文收发交易时才进行通信链接,交易完毕后当即断开链接。此方式经常使用于一点对多点通信。C/S通讯。

长链接与短链接的使用时机:

长链接:

短链接多用于操做频繁,点对点的通信,并且链接数不能太多的状况。每一个TCP连 接的创建都须要三次握手,每一个TCP链接的断开要四次握手。若是每次操做都要创建链接而后再操做的话处理速度会下降,因此每次操做下次操做时直接发送数据 就能够了,不用再创建TCP链接。例如:数据库的链接用长链接,若是用短链接频繁的通讯会形成socket错误,频繁的socket建立也是对资源的浪 费。

短链接:

web网站的http服务通常都用短链接。由于长链接对于服务器来讲要耗费必定 的资源。像web网站这么频繁的成千上万甚至上亿客户端的链接用短链接更省一些资源。试想若是都用长链接,并且同时用成千上万的用户,每一个用户都占有一个 链接的话,可想而知服务器的压力有多大。因此并发量大,可是每一个用户又不需频繁操做的状况下须要短链接。

参考http://www.cnblogs.com/Roberts/archive/2010/12/05/1986550.html

7. HTTP协议详解、应用

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、短链接、灵活、应用层的协议,常基于TCP 的链接方式。

参考 http://blog.csdn.net/gueter/article/details/1524447  (http协议详解)

(HTTP响应状态码)

HTTP响应状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操做

4xx:客户端错误--请求有语法错误或请求没法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200 OK      //客户端请求成功

400 Bad Request  //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经受权,这个状态代码必须和WWW-Authenticate报头域一块儿使用  403 Forbidden  //服务器收到请求,可是拒绝提供服务

404 Not Found  //请求资源不存在,eg:输入了错误的URL

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable  //服务器超时          //可能恢复正常

304 Not Modifed  //自从上次请求后,请求的网页未修改过。

//服务器返回此响应时,不会返回网页内容。

8. 异构系统通信中的通信加密方案

参考 http://blog.csdn.net/linvo/article/details/5741942

9. socket链接步骤

Socket(套接字)概念

套接字(socket)是通讯的基石,是支持TCP/IP协议的网络通讯的基本操做单元。它是网络通讯过程当中端点的抽象表示,煲含进行网络通讯必须的五种信息:链接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

Socket链接过程

创建Socket链接至少须要一对套接字,其中一个运行于客户端,称为ClientSocket ,另外一个运行于服务器端,称为ServerSocket

套接字之间的链接过程能够分为三个步骤:服务器监听,客户端请求,链接确认。

服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待链接的状态,实时监控网络状态。

客户端请求:是指由客户端的套接字提出链接请求,要链接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要链接的服务器的套接字,指出服务器端套接字的地址和端口号,而后就向服务器端套接字提出链接请求。

链接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的链接请求,它就响应客户端

套接字的请求,创建一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,链接就创建好了。而服务器端套接字继续处于监听状态,继续接收其余客户端套接字的链接请求。

10. TCP协议,三次握手、四次挥手

TCP协议(Transmission Control Protocol)是主机对主机层的传输控制协议,提供可靠的链接服务,采用三次握手确认创建一个链接,四次挥手断开链接。

位码即tcp标志位,有6种标示:

SYN(synchronous创建联机) 同步

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束)

RST(reset重置)

URG(urgent紧急)

11. php中经常使用做用类似,性能差别很大的函数区分及举例

参考 http://apps.hi.baidu.com/share/detail/43169774

12. posix及perl兼容正则比较,及函数性能分析

POSIX正则和 PCRE正则最显著的须要知道的不一样点:

1. PCRE函数须要模式以分隔符闭合.

2. POSIX兼容正则没有修正符。不像POSIX, PCRE扩展没有专门用于大小写不敏感匹配的函数. 取而

代之的是, 支持使用/i 模式修饰符完成一样的工做. 其余模式修饰符一样可用于改变匹配策略.

3. POSIX函数从最左面开始寻找最长的匹配, 可是PCRE在第一个合法匹配后中止. 若是字符串 不匹

配这没有什么区别, 可是若是匹配, 二者在结果和速度上都会有差异. 为了说明这个不一样, 考虑下面的例子(来自Jeffrey Friedl的《精通正则表达式》一书). 使用模式 one(self)?(selfsufficient)?在字符串oneselfsufficient 上匹配, PCRE会匹配到oneself, 可是使用POSIX, 结果将是整个字符串 oneselfsufficient. 两个子串都匹配原始字符串, 可是POSIX将 最长的最为结果.

PCRE可用的修饰符:  (i,s,m)

13. 实现PERL正则表达式,抓取html文件a标签的全部href超连接

正则:/<a\s+.*?href=[\'\"](.*?)[\'\" >]/is

$html = <<<HTML

<html><link type="text/css" href="../style/base.css" />

<a href="test.htm? Page=1" id="logo">aa</a>as

<a class="quit" href="www.hao123.com" on);">退出</a></div>

<a

class='aa' href='www.baidu.com' >百度</a></html>

HTML;

$matches = array();

preg_match_all ( "/<a\s+.*?href=[\'\"](.*?)[\'\" >]/is", $html, $matches ); print_r($matches[1]); //输出全部超连接

?>

14. 预约义变量、魔术变量、魔术方法比较,及做用举例

预约义变量(超级全局变量)

$GLOBALS

$_SERVER

$_GET

$_POST

$_COOKIE

$_SESSION

$_REQUEST

$_ENV

魔术方法http://apps.hi.baidu.com/share/detail/17851228

__construct 和__destruct

__autoload

__get 和__set

__isset 和__unset

__call 和__callStatic

__clone

__toString

__sleep 和__wakeup

__invoke

魔术变量http://apps.hi.baidu.com/share/detail/17851228

__LINE__

__FILE__

__DIR__

__CLASS__

__FUNCTION__

__METHOD__

__NAMESPACE__

15. spl经常使用数据结构类

16. PHP设计模式

工厂模式

创建一个工厂(一个函数或一个类方法)来制造新的对象

工厂模式 是一种类,它具备为您建立对象的某些方法。您可使用工厂类建立对象,而不直接使用 new。这样,若是您想要更改所建立的对象类型,只需更改该工厂便可。使用该工厂的全部代码会自动更改。

单例模式

某些应用程序资源是独占的,由于有且只有一个此类型的资源。例如,经过数据库句柄到数据库的链接是独占的。您但愿在应用程序中共享数据库句柄,由于在保持链接打开或关闭时,它是一种开销,在获取单个页面的过程当中更是如此。

单元素模式能够知足此要求。

PHP中的单例模式(singleton pattern):指的是在PHP的应用程序的范围内只对指定的类建立一个实例。

在PHP中使用单例模式的类一般拥有一个私有构造函数和一个私有克隆函数,以防 止用户经过建立对象或者克隆对其进行实例化。还有一个静态私有成员变量$instance 与静态方法getInstance。getInstance 负责对其自己实例化,而后将这个对象存储在$instance 静态成员变量中,以确保只有一个实例被建立。

观察者模式

命令链模式

策略模式

17. 负载均衡的web应用服务器设计,例如youku

用PHP作负载均衡指南

思考如何应对如下问题?  参考http://www.examw.com/linux/all/142494/

在Apache负载均衡的状况下,作PHP开发如何考虑一下几方面:

PHP源文件在服务器、PHP文件上传处理、相关配置文件、Session会话放置、日志放置

Apache负载均衡的原则:

参考http://s456123123b.blog.163.com/blog/static/5632332220101080474642/

轮询均衡策略   (轮询转发请求)

按权重分配均衡策略  (按响应数量转发请求)

权重请求响应负载均衡策略  (按响应流量转发请求)

18. 如何优化前端性能

1) 页面内容的优化

a) 下降请求数

合并css、js文件,集成CSS图片

b) 减小交互通讯量

压缩技术:压缩css、js文件,优化图像,减小cookie体积;

合理利用缓存:使用外部js/css文件,缓存ajax;

减小没必要要的通讯量:剔除无用脚本和样式、推迟加载内容、使用GET请求

c) 合理利用“并行” 尽可能避免重定向

慎用Iframe 样式表置于顶部 脚本放到样式后面加载

d) 节约系统消耗

避免CSS表达式、滤镜

2) 服务器的优化

a) b)

c)

d)

19. yahoo的34条前端优化法则

减小HTTP请求、利用CDN技术、 设置头文件过时或者静态缓存、Gzip压缩、把CSS放顶部、 把JS放底部、避免CSS 表达式、将JS和CSS外链、减小DNS查找、减少JS和CSS的体积、 避免重定向、删除重复脚本、 配置ETags、缓存Ajax、尽早的释放缓冲、

用GET方式进行AJAX请求、延迟加载组件、 预加载组件、减小DOM元素数量、跨域分离组件、

减小iframe数量、不要出现404页面、减少Cookie、 对组件使用无Cookie的域名、减小DOM的访问次数、开发灵活的事件处理句柄、使用< link >而非@import、避免过滤器的使用、优化图片、优化CSS Sprites、 不要在HTML中缩放图片、缩小favicon. ico的大小并缓存它、保证组件在25K如下、将组件打煲进一个多部分的文档中

20. 数据库缓存的基本理论,参考memcached

什么是Memcached?

memcached是高性能的分布式内存缓存服务器。通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。

虽然memcached 使用了一样的“Key=>Value”方式组织数据,可是它和共享内存、APC等本地缓存有很是大的区别。Memcached是分布式的,也就是说 它不是本地的。它基于网络链接(固然它也可使用localhost)方式完成服务,自己它是一个独立于应用的程序或守护进程(Daemon方式)

PHP与Memcached

Memcached使用libevent库实现网络链接服务,理论上能够处理无限多的链接,可是它和

18. 如何优化前端性能

1) 页面内容的优化

a) 下降请求数

合并css、js文件,集成CSS图片

b) 减小交互通讯量

压缩技术:压缩css、js文件,优化图像,减小cookie体积;

合理利用缓存:使用外部js/css文件,缓存ajax;

减小没必要要的通讯量:剔除无用脚本和样式、推迟加载内容、使用GET请求

c) 合理利用“并行” 尽可能避免重定向

慎用Iframe 样式表置于顶部 脚本放到样式后面加载

d) 节约系统消耗

避免CSS表达式、滤镜

2) 服务器的优化

a) b)

c)

d)

19. yahoo的34条前端优化法则

减小HTTP请求、利用CDN技术、 设置头文件过时或者静态缓存、Gzip压缩、把CSS放顶部、 把JS放底部、避免CSS 表达式、将JS和CSS外链、减小DNS查找、减少JS和CSS的体积、 避免重定向、删除重复脚本、 配置ETags、缓存Ajax、尽早的释放缓冲、

用GET方式进行AJAX请求、延迟加载组件、 预加载组件、减小DOM元素数量、跨域分离组件、

减小iframe数量、不要出现404页面、减少Cookie、 对组件使用无Cookie的域名、减小DOM的访问次数、开发灵活的事件处理句柄、使用< link >而非@import、避免过滤器的使用、优化图片、优化CSS Sprites、 不要在HTML中缩放图片、缩小favicon. ico的大小并缓存它、保证组件在25K如下、将组件打煲进一个多部分的文档中

20. 数据库缓存的基本理论,参考memcached

什么是Memcached?

memcached是高性能的分布式内存缓存服务器。通常的使用目的是,经过缓存数据库查询结果,减小数据库访问次数,以提升动态Web应用的速度、提升可扩展性。

虽然memcached 使用了一样的“Key=>Value”方式组织数据,可是它和共享内存、APC等本地缓存有很是大的区别。Memcached是分布式的,也就是说 它不是本地的。它基于网络链接(固然它也可使用localhost)方式完成服务,自己它是一个独立于应用的程序或守护进程(Daemon方式)

PHP与Memcached

Memcached使用libevent库实现网络链接服务,理论上能够处理无限多的链接,可是它和

基于反向代理的Web缓存;

基于反向代理的Web缓存

23. PHP安全模式

php安全模式:safe_mode=on|off

启用safe_mode指令将对在共享环境中使用PHP时可能有危险的语言特性有所限制。能够将safe_mode是指为布尔值on来启用,或者设置为off和脚本尝试访问的文件的UID,以此做为限制机制的基础。若是UID相同,则知性脚本;不然,脚本失败。

当启用安全模式时,一些限制将生效

一、 全部输入输出函数(例如fopen()、file()和require())的适用会受到限制,只能用于与调用这些函数的

脚本有相同拥有者的文件

二、 若是试图经过函数popen()、system()或exec()等执行脚本,只有当脚本位于safe_mode_exec_dir

配置指令指定的目录才可能

三、 三、HTTP验证获得进一步增强,由于验证脚本用于者的UID划入验证领域范围内。此外,当启用安

全模式时,不会设置PHP_AUTH。

四、 四、若是适用MySQL数据库服务器,连接MySQL服务器所用的用户名必须与调用mysql_connect()

的文件拥有者用户名相同。

如下是一些和安全模式相关的配置选项

safe_mode_gid=on|off

safe_mode_include_dir=string

safe_mode_env_vars=string

safe_mode_exec_dir=string

safe_mode_protected_env_vars=string

24. 常见的web攻击方式

常见攻击

XSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入的恶意html代码会被执行,从而达到恶意用户的特殊 目的。XSS属于被动式的攻击,由于其被动且很差利用,因此许多人常呼略其危害性。可是随着前端技术的不断进步富客户端的应用愈来愈多,这方面的问题越来 越受关注。举个简单例子 : 假如你如今是sns站点上一个用户,发布信息的功能存在漏洞能够执行js 你在 此刻输入一个 恶意脚本,那么当前全部看到你新信息的人的浏览器都会执行这个脚本弹出提示框 (很爽吧 弹出广告 :)),若是你作一些更为激进行为呢 后果不可思议。

CSRF(Cross Site Request Forgery),跨站点伪造请求。顾名思义就是 经过伪造链接请求在用户不知情的状况下,让用户以本身的身份来完成攻击者须要达到的一些目的。csrf 的攻击不一样于xss csrf 须要被攻击者的主动行为触发。这样听来彷佛是有“被钓鱼”的嫌疑。

多窗口浏览器这这方面彷佛是有助纣为虐的嫌疑,由于打开的新窗口是具备当前全部 会话的,若是是单浏览器窗口相似ie6 就不会存在这样的问题,由于每一个窗口都是一个独立的进程。举个简单例子 : 你正在玩白社会, 看到有人发了一个链接,你点击过去,而后这个链接里面伪造了一个送礼物的表单,这仅仅是一个简单的例子,问题可见通常。

cookie劫持。经过获取页面的权限,在页面中写一个简单的到恶意站点的请 求,并携带用户的cookie 获取cookie后经过cookie 就能够直以被盗用户的身份登陆站点。这就是cookie 劫持。举个简单例子: 某人写了一篇颇有意思的日志,而后分享给你们,不少人都点击查看而且分享了该日志,一切彷佛都很正常,然而写日志的人却另有用心,在日志中偷偷隐藏了一个 对站外的请求,那么全部看过这片日志的人都会在不知情的状况下把本身的cookie 发送给了 某人,那么他能够经过任意一我的的cookie 来登陆这我的的帐户。

SQL注入攻击

在 SQL 注入攻击 中,用户经过操纵表单或 GET 查询字符串,将信息添加到数据库查询中。

DNS攻击

拒绝服务攻击

拒绝服务攻击即攻击者想办法让目标机器中止提供服务,是黑客经常使用的攻击手段之。

攻击者进行拒绝服务攻击,实际上让服务器实现两种效果:一是迫使服务器的缓冲区满,不接收新的请求;二是使用IP欺骗,迫使服务器把合法用户的链接复位,影响合法用户的链接

25. PHP作好防盗链的基本思想 防盗链

什么是盗链?

盗链是指服务提供商本身不提供服务的内容,经过技术手段绕过其它有利益的最终用户界面(如广告),直接在本身的网站上向最终用户提供其它服务提供商的服务内容,骗取最终用户的浏览和点击率。受益者不提供资源或提供不多的资源,而真正的服务提供商却得不到任何的收益。

网站盗链会大量消耗被盗链网站的带宽,而真正的点击率也许会很小,严重损害了被盗链网站的利益。 如何作防盗链?

不按期改名文件或者目录

限制引用页

原理是,服务器获取用户提交信息的网站地址,而后和真正的服务端的地址相比较, 若是一致则代表是站内提交,或者为本身信任的站点提交,不然视为盗链。实现时可使用HTTP_REFERER1 和htaccess 文件(须要启用mod_Rewrite),结合正则表达式去匹配用户的每个访问请求。

文件假装

文件假装是目前用得最多的一种反盗链技术,通常会结合服务器端动态脚本 (PHP/JSP/ASP)。实际上用户请求的文件地址,只是一个通过假装的脚本文件,这个脚本文件会对用户的请求做认证,通常会检查 Session,Cookie 或HTTP_REFERER 做为判断是否为盗链的依据。而真实的文件实际隐藏在用户不可以访问的地方,只有用户经过验证之后才会返回给用户

加密认证

这种反盗链方式,先从客户端获取用户信息,而后根据这个信息和用户请求的文件名 字一块儿加密成字符串(Session ID)做为身份验证。只有当认证成功之后,服务端才会把用户须要的文件传送给客户。通常咱们会把加密的Session ID 做为URL 参数的一部分传递给服务器,因为这个Session ID 和用户的信息挂钩,因此别人就算是盗取了连接,该Session ID 也没法经过身份认证,从而达到反盗链的目的。这种方式对于分布式盗链很是有效。

随机附加码

每次,在页面里生成一个附加码,并存在数据库里,和对应的图片相关,访问图片时和此附加码对比,相同则输出图片,不然输出404图片

加入水印

第14 / 18页

26. HTTP请求头信息和响应头信息

请求头信息

POST /scp1.1.0/prs/new_rnaseqtask/run_go HTTP/1.1

Host: 172.30.4.102

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/6.0

Accept: */*

Accept-Language: zh-cn,zh;q=0.5

Accept-Encoding: gzip, deflate

Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

Connection: keep-alive

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

X-Requested-With: XMLHttpRequest

Referer: http://172.30.4.102/scp1.1.0/index.php/prs/new_rnaseqtask/index_continue/13/364 Content-Length: 1819

Cookie:

ci_session=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e31556053ff9407a454f6a1e146d43eb%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%22172.16.23.42%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows+NT+6.1%3B+rv%3A6.0%29+Gecko%2F2010010%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1314955607%3B%7D664b51a01ef99bac95f3e2206e79cb00;PHPSESSID=v33mlm1437lmop1fquta675vv4;username=linjinming; tk=1314955601855 Pragma: no-cache

Cache-Control: no-cache

响应头信息

HTTP/1.1 200 OK

Date: Fri, 02 Sep 2011 09:27:07 GMT

Server: Apache/2.2.3 (Red Hat)

X-Powered-By: PHP/5.1.6

Expires: Thu, 19 Nov 1981 08:52:00 GMT

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: no-cache

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 31

Connection: close

Content-Type: text/html; charset=UTF-8

27. MySQL

MySQL数据库性能优化

使用mysqlreport;

正确使用索引:explain分析查询语句,组合索引,索引反作用(占空间、update)

开启慢查询日志、使用慢查询分析工具mysqlsla;

索引缓存、索引代价(插入更新索引);

第15 / 18页

表锁,行锁,行锁反作用(update多时候变慢),在select和update混合的状况下,行锁巧妙解决了读写互斥的问题;

开启使用查询缓存;

修改临时表内存空间;

开启线程池;

MySQL Query语句优化的基本思路和原则

1. 优化须要优化的Query;

2. 定位优化对象的性能瓶颈;

3. 明确优化目标;

4. 从Explaing入手;

5. 多使用Profile;

6. 永远用小结果集推进大的结果集;

7. 尽量在索引中完成排序;

8. 只取本身须要的Columns;

9. 仅仅使用最有效的过滤条件;

10. 尽量避免复杂的Join和子查询。

MySQL 中MyISAM引擎和InnoDB引擎的区别以及它们的性能

1:Innodb支持事物,Myisam不支持

2:锁定机制不同,Myisam支持表锁定,而Innodb支持行锁

3:Myisam不支持外键,Innodb能支持

4:Myisam能在特定环境下支持全文索引,而Innodb不支持

5:Myisam支持数据压缩,Innodb不支持

6:在数据存储上,Myisam占用的空间少,Innodb相对多些

7:Myisam在批量插入和查询方面速度上有优点,而Innodb因为支持行锁,因此在数据修改方面更胜一筹

MySQL存储引擎

MyISAM:不支持事务、表锁和全文索引, 操做速度快

InnoDB:行锁设计、支持外键、支持安全事务

HEAP:数据存放在内存中,临时表

NDB Cluster:MySQL的簇式数据库引擎

CSV: 存储引擎把数据以逗号分隔的格式存储在文本文件中。

FEDERATED:存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表 Archive: 只支持INSERT和SELECT操做, 压缩后存储, 很是适合存储归档数据

Merge:容许将一系列等同的MyISAM表以逻辑方式组合在一块儿,并做为1个对象引用它们 表类型,区分表类型

优化表设计的经常使用思路

第16 / 18页

负载均衡的数据库设计

数据类型及详细定义,区分

28. Apache

性能优化,配置,fastCGI等几种工做模式

29. Ajax

用JS实现Ajax功能 var createXHR = function(){

}

var addURLParam = function(url, name, value){

}

var xhr = createXHR();

xhr.onreadystatechange = function(){

}

var url = 'testAjax.php';

addURLParam(url, 'name', 'linjm');

xhr.open('get',url,true);

xhr.send(NULL);

if(xhr.readyState == 4){    } if(xhr.status > 200 && xhr.status < 300 || xhr.status == 304){  } alert(xhr.responseText); url += (url.indexOf('?') == -1 ? '?' : '&'); url += encodeURIComponent(name) + '=' + encodeURIComponent(value); return url; if(window.XMLHttpRequest){    } return new XMLHttpRequest(); return new ActiveXObject('Microsoft.XMLHTTP'); throw new Error('No XMLHttpRequest available'); }else{ }else{

30. Javascript

变量、做用域、做用域链





php

相关文章
相关标签/搜索