1. php 的垃圾回收机制
PHP 可以自动进行内存管理,清除不需要的对象。
PHP 使用了引用计数 (reference counting) GC 机制。
每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,计数器加 1。当 reference 离开生存空间或被设为 NULL,计数器减 1。当某个对象的引用计数器为零时,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 没有大小和数量限制。
关系:
- Session 需要借助 Cookie 才能正常工作。如果客户端完全禁止 Cookie,Session 将失效!因为 Session 是由应用服务器维持的一个 服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的 SessionID, 用该 SessionID 为标识符来存取服务器端的 Session 存储空间。而 SessionID 这一数据则是保存到客户端,用 Cookie 保存的,用户提交页面时,会将这一 SessionID 提交到服务器端,来存取 Session 数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用 Cookie,那么 Session 也会失效.
3. 如何修改 SESSION 的生存时间
- 设置浏览器保存的 sessionid 失效时间 setcookie (session_name (), session_id (), time () + $lifeTime, "/");
- 可以使用 SESSION 自带的 session_set_cookie_params (86400); 来设置 Session 的生存期
- 通过修改 php.ini 中的 session.gc_maxlifetime 参数的值就可以改变 session 的生存时间
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、分页、选择菜单生成)、事务处理、输出到文件。
6. 长连接、短连接的区别和使用
长连接:client 方与 server 方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于 P2P 通信。
短连接:Client 方与 server 每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。C/S 通信。
长连接与短连接的使用时机:
长连接:
短连接多用于操作频繁,点对点的通讯,而且连接数不能太多的情况。每个 TCP 连 接的建立都需要三次握手,每个 TCP 连接的断开要四次握手。如果每次操作都要建立连接然后再操作的话处理速度会降低,所以每次操作下次操作时直接发送数据 就可以了,不用再建立 TCP 连接。例如:数据库的连接用长连接,如果用短连接频繁的通信会造成 socket 错误,频繁的 socket 创建也是对资源的浪 费。
短连接:
web 网站的 http 服务一般都用短连接。因为长连接对于服务器来说要耗费一定 的资源。像 web 网站这么频繁的成千上万甚至上亿客户端的连接用短连接更省一些资源。试想如果都用长连接,而且同时用成千上万的用户,每个用户都占有一个 连接的话,可想而知服务器的压力有多大。所以并发量大,但是每个用户又不需频繁操作的情况下需要短连接。
- HTTP 协议详解、应用
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、短连接、灵活、应用层的协议,常基于 TCP 的连接方式。
参考 http://blog.csdn.net/gueter/a... (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 // 自从上次请求后,请求的网页未修改过。
// 服务器返回此响应时,不会返回网页内容。
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 紧急)
12. posix 及 perl 兼容正则比较,及函数性能分析
POSIX 正则和 PCRE 正则最显著的需要知道的不同点:
- PCRE 函数需要模式以分隔符闭合.
- POSIX 兼容正则没有修正符。不像 POSIX, PCRE 扩展没有专门用于大小写不敏感匹配的函数。取而
代之的是,支持使用 /i 模式修饰符完成同样的工作。其他模式修饰符同样可用于改变匹配策略.
- POSIX 函数从最左面开始寻找最长的匹配,但是 PCRE 在第一个合法匹配后停止。如果字符串 不匹
配这没有什么区别,但是如果匹配,两者在结果和速度上都会有差别。为了说明这个不同,考虑下面的例子 (来自 Jeffrey Friedl 的《精通正则表达式》一书). 使用模式 one (self)?(selfsufficient)? 在字符串 oneselfsufficient 上匹配,PCRE 会匹配到 oneself, 但是使用 POSIX, 结果将是整个字符串 oneselfsufficient. 两个子串都匹配原始字符串,但是 POSIX 将 最长的最为结果.
PCRE 可用的修饰符: (i,s,m)
13. 实现 PERL 正则表达式,抓取 html 文件 a 标签的所有 href 超链接
正则:/