SAFEIS 是做什么的?

1. handout 1) 免费分发的印刷品(如广告,传单,讲义), 分发的救济品

2) 发给大家, 散发

2) 统计学, 不可数

n 农产品或自然产品的总称

农产品通过水路运往邻近的城市。

production n. 生产,制造(指生产的行为),产量

2) 可数, 公共服务,公共设施, 劳务

那老人为公司忠实工作了多年。

4) 及物动词, 检修, 维修, 向…提供服务

这家公司没有足够的资金支付债务利息。

用于否定句,后接wh-引导的从句, of可以省略

你不知道我多么担心你的安全。

老师的话让我明白了英语的重要性。

4.danger 1)可数名词,可能引起危险的人或事

2) 不可数名词, 一般的危险

2)作定语, 修饰名词

人们通常戴太阳镜以妨眼睛被太阳灼伤.

2) 可数名词, 治愈, 药剂, 疗法

Vt. 把……交托给,把……提交给,把……押交,判处

Vt. 使承担义务,使表态,连累,后常跟反身代词oneself 作宾语

这个国家每个公民都可以享受免费医疗.

5. discount 作名词,(可数或不可数),意为”折扣”,”减价”.

他们给我们按货价打九折.

discount:作动词,意为”打折扣”,”认为不重要””对------不全信”

夜间务必把所有的灯关掉.

我不能确定他会及时到那儿.

这些药可以保你睡一宿她觉.

父母应保护孩子免受危险.

学校应保护孩子免受冒险活动.

作不可数名词,意为”特性””品性””才能”

他是一位有许多优点的人.

语法:直接引语和间接引语

1. 引述一般疑问句或附加疑问句时,通常用whether或if引导,而引述选择疑问句时,一般只能用whether引导。

2. 引述特殊疑问句时,用原句中的wh-词引导。

3. 引述陈述句时,用连词that引导(that在口语中常被省略)。

3. 引述祈使句时,要将祈使句的动词原形变成带to 的不定式,并在不定式的前面根据句子的意思加上tell, ask, order 等动词,如果祈使句为否定句,在不定式 的前面加上not。

在将直接引语变成间接引语时要特别注意几个变化:

1) 人称的变化: 间接引语是转述别人的话,说话时由于角色的不同,人称代词要根据实际情况作相应的变化。

(即第一人称看主语;第二人称看宾语;第三人称不变化)

2) 时态的变化:如主句的谓语动词是一般过去时,直接引语变成间接引语时,从句的谓语动词在时态方面要作相应的变化。中主句的谓语动词是现在时,从句的时态则无需变化。

直接引语转换成间接引语时时态的变化 例 句

直 接 引 语 间 接 引 语

2) 指示代词、时间状语、地点状语和动词的变化

直接引语转换成间接引语时的变化 例 句

直 接 引 语 间 接 引 语

2)名词,可数,一阵强烈的情绪(快乐,激动,恐惧); 使人兴奋的事情.

5.remind 提醒,可接从句或不定式的复合结构.

1.increase 既可做名也可做动,意为“增加,提高,增强”

2.go up 在句中表示“上涨,涨价”

还可表示“上升,增长,升级”,“楼房等盖起来,修建起来”

rate 是“速度,速率”

4.remain / stay the same表示“保持不变”,在此都是系动词,表示“继续保持,仍然处于某种状态”

5. start off 表示“开始”,或“动身,出发”

短语 start out 也有“动身,出发”之意思

end up 还表示“最后(有某种结局),最后(成了),最后(到达某处)”

5.vary 表示“有差异,变化”做不及物动词

vary 做及物动词,表示“变换,是有变化”

6.peak 是动词,表示“达到高峰”

当名词表示“山峰,浪峰,高峰”

7.drop 句中做不及物动词,表示“降低,下降” 还有“掉下,落下”

drop还可表示“放下来,投下来”“放低,降低”

8. out of…在文中“…中间有”

out of… 还表示“从…出来;出于,由于;用完,卖完;失去,没有工作”

10.update 表示“更新”,有时表示“使不过时,使现代化”

seem 还可做系动词,后面跟形容词,分词,名词,介短

对于发生在regret 之前的动作,用v-ing 的完成式或不定式来表示

Determine 表示“决心 ,决意做某事”后面跟不定式,从句,on 或upon 引起的短语。

determined 表示“决心,下定决心”,它作表语时,后面跟不定式或从句。

2. appeal to… 在文中表示“投合兴趣和爱好”

和for 连用,可表示“呼吁请求得到什么”

3.approach 在句中是名词,意为“对待,处理的方式和方法”常与介词to连用

还可表示“接近,走近”

}

语法复习八:动词时态和语态

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

一、时态的呼应:在复合句,从句(主要是宾语从句)中的时态,常受主句谓语动词的影响,这就叫做时态的呼应,时态的呼应一般有如下的情况。

2、如果主句中的谓语动词为过去时态,从句中的谓语动词就要用过去时态,但要注意到下列情况:(1)如果从句中的谓语动词所表示的动作与主句中的谓语动词所表示的动作同时发生,从句中须用一般过去时或过去进行时,如:She said she was busy then. (2)如果从句中的谓语动词所表示的动作发生在主句谓语动词所表示的动作之前,从句中须用过去完成时,如:I didn’t know

二、被动语态:英语动词的语态有两种:主动语态和被动语态。主动语态表示主语是动作的执行者,被动语态表示主语是动作的承受者,在被动语态的句子中,动作的执行者,一般由介词by引起的短语来表示,如:We often help them. (主动)我们常帮助他们。They are often helped by us.(被动)他们常被我们帮助。

1、被动语态各时态的形式是由助动词be的各时态的形式加及物动词的过去分词构成。

2、被动语态八种时态的用法例句:被动语态常用的八种时态的基本用法和主动语态各时态的

基本用法相同,只是句中的主语不是动作的执行者,而是动作的承受者,如:

4、由主动语态转换为被动语态的几种句型:(1)将一个句子由主动语态转换为被动语态时,可按下列步骤进行:①先将主动结构的宾语改为被动结构的主语;②再将主动语态动词改为被动语态动词;③最后在被动语态之后加介词by,并将主动结构的主语放在by之后(经常被省略),构成介词短语;④由主动语态动词改为被动语态动词时,要注意被动语态动词中助动词be的各种形式变化,因为被动语态动词的不同人称和数是由助动词be不同的形式来表示的,如:Trees are planted every spring.(2)如果主动语态动词后又有直接宾语,又有间接宾语,一般是将间接宾语改为被动语态句中的主语,将直接宾语保留在原处。如将直接宾语改为被动语态句中的主语,将间接宾语保留在原处时,一般要在间接宾语前加介词to或 for,如:Grandma told me an interesting story last night.→Iwas told an

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

完成被动形式是什么呢,对, 就是完成+被动

其它时态的被动形式,以此类推.

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

一、时态的呼应:在复合句,从句(主要是宾语从句)中的时态,常受主句谓语动词的影响,这就叫做时态的呼应,时态的呼应一般有如下的情况。

2、如果主句中的谓语动词为过去时态,从句中的谓语动词就要用过去时态,但要注意到下列情况:(1)如果从句中的谓语动词所表示的动作与主句中的谓语动词所表示的动作同时发生,从句中须用一般过去时或过去进行时,如:She said she was busy then. (2)如果从句中的谓语动词所表示的动作发生在主句谓语动词所表示的动作之前,从句中须用过去完成时,如:I didn’t know

二、被动语态:英语动词的语态有两种:主动语态和被动语态。主动语态表示主语是动作的执行者,被动语态表示主语是动作的承受者,在被动语态的句子中,动作的执行者,一般由介词by引起的短语来表示,如:We often help them. (主动)我们常帮助他们。They are often helped by us.(被动)他们常被我们帮助。

1、被动语态各时态的形式是由助动词be的各时态的形式加及物动词的过去分词构成。

2、被动语态八种时态的用法例句:被动语态常用的八种时态的基本用法和主动语态各时态的

基本用法相同,只是句中的主语不是动作的执行者,而是动作的承受者,如:

4、由主动语态转换为被动语态的几种句型:(1)将一个句子由主动语态转换为被动语态时,可按下列步骤进行:①先将主动结构的宾语改为被动结构的主语;②再将主动语态动词改为被动语态动词;③最后在被动语态之后加介词by,并将主动结构的主语放在by之后(经常被省略),构成介词短语;④由主动语态动词改为被动语态动词时,要注意被动语态动词中助动词be的各种形式变化,因为被动语态动词的不同人称和数是由助动词be不同的形式来表示的,如:Trees are planted every spring.(2)如果主动语态动词后又有直接宾语,又有间接宾语,一般是将间接宾语改为被动语态句中的主语,将直接宾语保留在原处。如将直接宾语改为被动语态句中的主语,将间接宾语保留在原处时,一般要在间接宾语前加介词to或 for,如:Grandma told me an interesting story last night.→Iwas told an

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

完成被动形式是什么呢,对, 就是完成+被动

其它时态的被动形式,以此类推.

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

一、时态的呼应:在复合句,从句(主要是宾语从句)中的时态,常受主句谓语动词的影响,这就叫做时态的呼应,时态的呼应一般有如下的情况。

2、如果主句中的谓语动词为过去时态,从句中的谓语动词就要用过去时态,但要注意到下列情况:(1)如果从句中的谓语动词所表示的动作与主句中的谓语动词所表示的动作同时发生,从句中须用一般过去时或过去进行时,如:She said she was busy then. (2)如果从句中的谓语动词所表示的动作发生在主句谓语动词所表示的动作之前,从句中须用过去完成时,如:I didn’t know

二、被动语态:英语动词的语态有两种:主动语态和被动语态。主动语态表示主语是动作的执行者,被动语态表示主语是动作的承受者,在被动语态的句子中,动作的执行者,一般由介词by引起的短语来表示,如:We often help them. (主动)我们常帮助他们。They are often helped by us.(被动)他们常被我们帮助。

1、被动语态各时态的形式是由助动词be的各时态的形式加及物动词的过去分词构成。

2、被动语态八种时态的用法例句:被动语态常用的八种时态的基本用法和主动语态各时态的

基本用法相同,只是句中的主语不是动作的执行者,而是动作的承受者,如:

4、由主动语态转换为被动语态的几种句型:(1)将一个句子由主动语态转换为被动语态时,可按下列步骤进行:①先将主动结构的宾语改为被动结构的主语;②再将主动语态动词改为被动语态动词;③最后在被动语态之后加介词by,并将主动结构的主语放在by之后(经常被省略),构成介词短语;④由主动语态动词改为被动语态动词时,要注意被动语态动词中助动词be的各种形式变化,因为被动语态动词的不同人称和数是由助动词be不同的形式来表示的,如:Trees are planted every spring.(2)如果主动语态动词后又有直接宾语,又有间接宾语,一般是将间接宾语改为被动语态句中的主语,将直接宾语保留在原处。如将直接宾语改为被动语态句中的主语,将间接宾语保留在原处时,一般要在间接宾语前加介词to或 for,如:Grandma told me an interesting story last night.→Iwas told an

一句话语法: 时态题关键是确定时间点,时间点是通过语境来确定.

完成被动形式是什么呢,对, 就是完成+被动

其它时态的被动形式,以此类推.

}

3:php运算符优先级,一般是写出运算符的运算结果。 4:PHP中函数传参,闭包,判断输出的echo,print是不是函数等。 5:PHP数组,数组函数,数组遍历,预定义数组(面试必出)。 6:PHP面向对象,魔术方法,封装、继承、多态。设计模式,包括(单利、工厂、迭代器、装饰、命令、策略)。 7:正则表达式,每个标号含义,邮箱、网址、标签匹配,正则函数(面试必出)。 8:PHP异常处理(级别,错误日志,控制错误输出)。 9:PHP时间函数,日期计算函数。 10:文件系统,记录日志、目录、文件的遍历、上传、多方法得到文件扩展名、文件引用方式、引用函数区别。(面试必出)。 11:会话控制,主要说原理。session与cookie在分布式应用中出现问题的解决方案。 12:PHP模板引擎,常用模板引擎特点,MVC好与不好的地方。 13:PHP安全处理,过滤函数。 14:XML的使用。 15:PHP字符串的处理,包括转义(安全)、编码、截取、定位、与数组间的转换、处理函数等。(面试必出)。 16:Socket编程,各种协议,head头,curl参数含义。 17:网络状态码含义,常用(204,304, 404, 504,502)。 18:Apache配置文件,PHP配置文件,各个含义字段的含义。 19:网络各种攻击的名词含义(SQL攻击、XSS、CSRF、DDos),防止措施。 20:url的处理函数,得到url指定的部分。 ~~~ **Mysql基础** ~~~ 1:基础sql语句书写(一般让写关联和子查询语句) 2:索引的创建,优缺点,最左原则 3:存储引擎,常用的几个,优缺点,差别,原理(面试必出) 4:sql注入的处理方法 5:mysql处理函数(PHP中封装的) 6:PDO的使用方法,为什么使用 7:mysql的优化,表拆分等 8:事务处理,sql语句的处理效率等 9:数据表字段的类型,同类型间的区别,改如何选取,int(10)与int(11)的区别等。 10:数据库索引使用的那种数据结构,画出数据结构 ~~~ **Linux** ~~~ 1:常用命令的使用,vim编辑器的使用。 2:进程,cpu等信息的查看命令。 3:文件内查看命令(主要涉及统计信息)。 4:Shell的使用,命令操作。 ~~~ **NoSql** ~~~ 1:Redis的应用场景,结合微博业务说出他的具体应用。 2:Redis与MC支持数据的不同点,两者都支持哪些数据结构的存储,写越多越好。 3:Redis持久化存储的原理,与Mysql的应用区别。怎样保持持久化数据与内存数据同步的关系(Redis同步机制) 4:Redis与MC在并发状态下的性能比较。 5:MC的内存管理机制,当一个数据需要存储的时候怎样分配内存空间 6:Redis的内存管理机制,与MC有哪些不同点。 ~~~ **开发环境** ~~~ 1:PHP7中的新特性与废弃的特性 2:为什么要使用PHP7,PHP7快在哪里 ~~~ **版本控制** ~~~ 1:git的使用命令,例如:写出版本回退命令。 2:git与svn的区别。 3:如何进行多分支开发,包括多人开发协同,分段测试,上线。 ~~~ php部分我是按照面试常问的问题总结的,下面的问题在面试中出场率很高。问题比较基础 1、HTTP Keep-Alive的作用 作用:Keep-Alive:使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。Web服务器,基本上都支持HTTP Keep-Alive。 缺点:对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,虽然为客户保留打开的连 接有一定的好处,但它同样影响了性能,因为在处理暂停期间,本来可以释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep- Alive功能对资源利用的影响尤其突出。 解决:Keep-Alive: timeout=5, max=100 max_execution_time mail() **一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停 的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。** ~~~ 1 <?php 2 function 、empty()与is_null的区别** 1、当变量未定义时,is_null() 和“参数本身”是不允许作为参数判断的,会报Notice警告错误; 2、empty , isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null 和 “参数本身”只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误! 3、isset():仅当null和未定义,返回false; 可以为一个模型在运行时同时建立和使用多个视图。变化-传播机制可以确保所有相关的视图及时得到模型数据变化,从而使所有关联的视图和控制器做到行为同步。   (2) 视图与控制器的可接插性,允许更换视图和控制器对象,而且可以根据需求动态的打开或关闭、甚至在运行期间进行对象替换。   (3) 模型的可移植性。因为模型是独立于视图的,所以可以把一个模型独立地移植到新的平台工作。需要做的只是在新平台上对视图和控制器进行新的修改。   (4) 潜在的框架结构。可以基于此模型建立应用程序框架,不仅仅是用在设计界面的设计中。 2、 MVC的不足之处   (1) 增加了系统结构和实现的复杂性。对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。   (2) 视图与控制器间的过于紧密的连接。视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。   (3) 视图对模型数据的低效率访问。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。   (4) 目前,一般高级的界面工具或构造器不支持MVC模式。改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成使用MVC的困难。 问题:程序需要定制;每次请求都进行数据库读写开销不小,另外数据库是一个单点,可以做数据库的hash来解 决这个问题。 2:使用 memcached来保存session, 这种方式跟数据库类似,内存存取性能比数据库好很多。 问题:程序需要定制,增加 了工作量;存入memcached中的数据都需要序列化,效率较低,断电或者重启电脑容易丢失数据; 3: 通过加密的cookie,在A服务器上登录,在用户的浏览器上添加加密的cookie,当用户访问B服务器时,检查有无Session,如果没有,就检验 Cookie是否有效,Cookie有效的话就在B服务器上重建session。简单,高效, 服务器的压力减小了,因为session数据不存在服务器磁盘上。根本就不会出现session读取不到的问题。 问题:网络请求占用很多。每次请求时,客户端都要通过cookie发送session数据给服务器,session中数据不能太多,浏览器对cookie 的大 小存在限制。不适合高访问量的情况,因为高访问量的情况下。 **正则表达式** 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 匹配空行的正则表达式:\n[\s| **core文件是什么,有什么用?** core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析。程序员可以通过core文件来找出问题所在。它记录了程序挂掉时详细的状态描述。 什么是core dump Core的意思是内存, Dump的意思是扔出来, 堆出来。开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的,它可以做为调试程序的参考. core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。如何使用core文件 gdb -c core文件路径 [应用程序的路径],进去后输入where回车, 就可以显示程序在哪一行当掉的, 在哪个函数中. 为什么没有core文件生成呢? core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件. ulimit -c unlimited core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号 不用core文件,程序出了问题产生信号是否知道?答:内核向进程发信号嘛。 **共享内存除了文件映射还有什么方式?** 共享内存对象映射。 二者有什么区别: 答:内存映射文件是由一个文件到一块内存的映射,使应用程序可以通过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,因此内存文件映射非常适合于用来管理大文件。 **请解释下列10个shell命令的用途** top、ps、mv、find、df、cat、chmod、chgrp、grep、wc top:命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。 ps:查看进程 mv:移动或者更改文件 find:在子目录中搜索匹配的文件 df:linux中df命令参数功能:检查文件系统的磁盘空间占用情况。 cat:把一个或多个文件内容显示到标准输出 chmod:改变文件属性 chgrp:改变用户分组 grep:在文件内进行搜索 wc:命令的功能为统计指定文件中的字节数、字数、行数, 并将统计结果显示输出。 **Linux文件属性有哪些?(共十位)** -rw-r--r--那个是权限符号,总共是- --- --- ---这几个位。 第一个短横处是文件类型识别符:-表示普通文件;c表示字符设备(character);b表示块设备(block);d表示目录 (directory);l表示链接文件(link);后面第一个三个连续的短横是用户权限位(User),第二个三个连续短横是组权限位 (Group),第三个三个连续短横是其他权限位(Other)。每个权限位有三个权限,r(读权限),w(写权限),x(执行权限)。如果每个权限位都 有权限存在,那么满权限的情况就是:-rwxrwxrwx;权限为空的情况就是- --- --- ---。 1:find / -name "文件名" 在目录结构中搜索文件,并执行指定的操作。 2:grep 3:local 文件名 ---他是 'find -name' 的另一种写法,但要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含 有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以改命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。 4. whereis ---是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。 5:which 1、nginx相对于apache的优点: 轻量级,比apache 占用更少的内存及资源。高度模块化的设计,编写模块相对简单 抗并发,nginx 处理请求是异步非阻塞,多个连接(万级别)可以对应一个进程,而apache 则是阻塞型的,是同步多进程模型,一个连接对应一个进程,在高并发下nginx 能保持低资源低消耗高性能 nginx处理静态文件好,Nginx 静态处理性能比 Apache 高 以前web服务器一般只处理静态的请求,web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序 (或perl脚本...), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。 后来出现了一种更高级的方式是, web服务器可以内置perl解释器或php解释器。 也就是说这些解释器做成模块的方式,web服务器会在启动的时候就启动这些解释器。 当有新的动态请求进来时,web服务器就是自己解析这些perl或php脚本,省得重新fork一个进程,效率提高了。 fastcgi的方式是,web服务器收到一个请求时,他不会重新fork一个进程(因为这个进程在web服务器启动时就开启了,而且不会退 出),web服务器直接把内容传递给这个进程(进程间通信,但fastcgi使用了别的方式,tcp方式通信),这个进程收到请求后进行处理,把结果返回 给web服务器,最后自己接着等待下一个请求的到来,而不是退出。 fastcgi跟cgi的区别是: 在web服务器方面 在对数据进行处理的进程方面 cgi fork一个新的进程进行处理 读取参数,处理数据,然后就结束生命期 fastcgi 用tcp方式跟远程机子上的进程或本地进程建立连接 要开启tcp端口,进入循环,等待数据的到来,处理数据 举个例子: 服务端现在有个10万个字单词, 客户每次会发来一个字符串,问以这个字符串为前缀的单词有多少个。 那么可以写一个程序,这个程序会建一棵trie树,然后每次用户请求过来时可以直接到这个trie去查找。 但是如果以cgi的方式的话,这次请求结束后这课trie也就没了,等下次再启动该进程时,又要新建一棵trie树,这样的效率就太低下了。 而用fastcgi的方式的话,这课trie树在进程启动时建立,以后就可以直接在trie树上查询指定的前缀了。 **select, poll和epoll的区别** **select** select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。 select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。 select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制。 另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟 使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一次线性扫描,所以这也浪费了一定的开销。 **poll** poll在1986年诞生于System V Release 3,它和select在本质上没有多大差别,但是poll没有最大文件描述符数量的限制。 poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。 另外,select()和poll()将就绪的文件描述符告诉进程后,如果进程没有对其进行IO操作,那么下次调用select()和poll() 的时候将再次报告这些文件描述符,所以它们一般不会丢失就绪的消息,这种方式称为水平触发(Level Triggered)。 **epoll** 直到Linux2.6才出现了由内核直接支持的实现方法,那就是epoll,它几乎具备了之前所说的一切优点,被公认为Linux2.6下性能最好的多路I/O就绪通知方法。 epoll可以同时支持水平触发和边缘触发(Edge Triggered,只告诉进程哪些文件描述符刚刚变为就绪状态,它只说一遍,如果我们没有采取行动,那么它将不会再次告知,这种方式称为边缘触发),理论上边缘触发的性能要更高一些,但是代码实现相当复杂。 epoll同样只告知那些就绪的文件描述符,而且当我们调用epoll_wait()获得就绪文件描述符时,返回的不是实际的描述符,而是一个代表 就绪描述符数量的值,你只需要去epoll指定的一个数组中依次取得相应数量的文件描述符即可,这里也使用了内存映射(mmap)技术,这样便彻底省掉了 这些文件描述符在系统调用时复制的开销。 另一个本质的改进在于epoll采用基于事件的就绪通知方式。在select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描 述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调 机制,迅速激活这个文件描述符,当进程调用epoll_wait()时便得到通知。 **Memcache和Redis区别** 1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。 2. Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存。 3. 他们的扩展都需要做集群;实现方式:master-slave、Hash。 4. 在100k以上的数据中,Memcached性能要高于Redis。 5. 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。 6. 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。 7. Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强

}

我要回帖

更多关于 IS是什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信