cgi 和 fastcgi 有什么不同
原理一样,都是利用标准输入输出流处理 HTTP 之类的文本协议,都是通过多进程模式处理多请求。
不同之处在于 FastCGI 的一个进程处理完一个请求之后重置状态并挂起,待下一个请求来时继续处理;
写出下列服务的用途和默认端口
ftp、ssh、http、telnet、https
ftp:File Transfer Protocol,文件传输协议,是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输,其默认端口是 21。
http:hypertext transport protocol,超文本传送协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议,其默认端口是 80。
telnet:Telnet协议是 TCP/IP 协议族中的一员,是 Internet 远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力,其默认端口是 23。
https:Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,用于安全的HTTP数据传输,它的主要作用可以分为两种:
一种是建立一个信息安全通道,来保证数据传输的安全;
zend optimizer是什么
Zend Optimizer 可以加速 PHP 脚本的执行,提高 PHP 应用程序的执行速度。实现的原理是对那些程序在被最终执行之前由运行编译器 (Run-Time Compiler) 产生的代码进行优化。
一般情况下,执行使用 Zend Optimizer 的 PHP 程序比不使用的要快 40% 到 100%。这意味着网站的访问者可以更快的浏览网页,从而完成更多的事务,创造更好的客户满意度。
Zend Optimizer 还可以给用 Zend 加密的文件解密。
列举web开发中的安全性问题
sql 注入攻击。
数据库操作安全,UPDATE、DELETE、INSERT的操作没有限制用户操作权限,这将是一件很危险的事情。
没有验证用户 http 请求的方式 POST 或者 GET,GET 请求被合法通过。
没有验证表单来源的唯一性,不能识别是合法的表单提交还是黑客伪造的表单提交。
XSS攻击, htmlspecialchars
如果某段与数据库交互的程序运行较慢你将如何处理?
- 首先提高数据库的查询速度,比如增加索引,优化表的结构。
- 优化程序代码,如果查询比较多,可以尽量用条件查询,减少查询语句,比如能用一条查询语句就不用两条。
- 提高服务器的速度,优化服务器,把不必要的进程关掉。
请简述操作系统的线程与进程的区别。
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。
线程是进程的一个实体是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的���同执行路径。
线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
简单的描述一下 Memcache 的工作原理
Memcahce 是把所有的数据保存在内存当中,采用 hash 表的方式,每条数据由 key 和 value 组成,每个 key 是独一无二的,当要访问某个值的时候先按照找到值,然后返回结果。
Memcahce 采用 LRU 算法来逐渐把过期数据清除掉。
关于死锁的策略
在解决死锁的方法中,死锁的预防是设法至少破坏产生死锁的必要条件之一,严格预防死锁出现。
银行家算法属于死锁的避免,不那么严格地限制产生死锁的必要条件的存在,而是在系统运行过程中小心地避免死锁的最终发生。
死锁检测算法,允许死锁发生,定期检测。
所以,只有资源有序分配法属于预防死锁的策略。银行家算法:避免死锁
资源有序分配法:预防死锁
资源分配图化简法:检测死锁
撤销进程法:解决死锁
Http会话的四个过程:
建立连接,发送请求,返回响应,关闭连接。
关于TIME_WAIT状态的描述
从 TIME_WAIT 状态到 CLOSED 状态,有一个超时设置,这个超时设置是 2 * MSL
TIME_WAIT 确保有足够的时间让对端收到了 ACK,如果被动关闭的那方没有收到 Ack,就会触发被动端重发 Fin,一来一去正好 2 个 MSL
有足够的时间让这个连接不会跟后面的连接混在一起
红黑树性质
红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:
性质1. 节点是红色或黑色。
性质2. 根节点是黑色。
性质3 每个叶节点(NIL节点,空节点)是黑色的。
性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
PDO 错误处理模式
PDO 中一共提供了三种不同的错误处理模式
① PDO::ERRMODE_SILENT:不报错误
② PDO::ERRMODE_WARNING:以警告的方式报错
③ PDO::ERRMODE_EXCEPTION:以异常的方式报错
PDO::ATTR_ERRMODE 设置
PDO::ATTR_ERRMODE: 错误提示 .
PDO::ERRMODE_SILENT: 不显示错误信息,只显示错误码 .
PDO::ERRMODE_WARNING: 显示警告错误 .
PDO::ERRMODE_EXCEPTION: 抛出异常 .
DML、DDL、DCL
DML(data manipulation language):
它们是 SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这 4 条命令是用来对数据库里的数据进行操作的语言 ;
DDL(data definition language):
DDL 比 DML要多,主要的命令有 CREATE、ALTER、DROP 等,DDL 主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke 等)语句。在默认状态下,只有 sysadmin,dbcreator,db_owner 或 db_securityadmin 等人员才有权力执行 DCL
strlen( )与 mb_strlen( )的作用分别是什么
strlen 和 mb_strlen 都是用于获取字符串长度;
strlen 只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码, 如 GBK 和 utf-8 得到的是该字符的总字节数;
可以使用 mb_strlen 获取其字符个数,使用 mb_strlen 要注意两点,一要开启 mbstring 扩展,二是要制定字符集;
总结:
strlen 函数不管是字符串是但字节编码还是多字节编码,函数返回的结果都是字符串的总字节数;
mb_strlen 函数当字符串是单字节编码时,函数返回的结果是字符串的总字节数。当字符串是多字节编码时,函数返回的结果是字符串的个数。
mb_strlen 函数在没有制定字符编码时,表示使用默认字符编码,即单字节编码,函数返回的是字符串的总字节数。
PHP 默认是单字节编码(内部字符编码),多字节编码方式有 gbk,utf-8 等
PHP 的垃圾收集机制
PHP 可以自动进行内存管理,清除不再需要的对象。
PHP 使用了引用计数 (reference counting) 这种单纯的垃圾回收 (garbage collection) 机制。
每个对象都内含一个引用计数器,每个 reference 连接到对象,计数器加1。
当 reference 离开生存空间或被设为 NULL,计数器减 1。
当某个对象的引用计数器为零时,PHP 知道你将不再需要使用这个对象,释放其所占的内存空间。