阐述Servlet和CGI的区别。
CGI的不足之处:。
需要为每个请求启动一个操作CGI程序的系统进程,如果请求频繁,这将会带来很大的开销。
需要为每个请求加载和运行一个CGI程序,这将带来很大的开销。
需要重复编写处理网络协议的代码以及编码,这些工作都是非常耗时的。
Servlet的优点:。
只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销。
如果多个请求需要做同样处理的时候,这时候只需要加载一个类,这也大大降低了开销。
所有动态加载的类可以实现对网络协议以及请求解码的共享,大大降低了工作量。
Servlet能直接和Web服务器交互,而普通的CGI程序不能,Servlet还能在各个程序之间共享数据,使数据库连接池之类的功能很容易实现。
补充:SunMicrosystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程序,一个基于Java的Web应用通常包含一个或多个Servlet类,Servlet不能够自行创建并执行,它是在Servlet容器中运行的,容器将用户的请求传递给Servlet程序,并将Servlet的响应回传给用户,通常一个Servlet会关联一个或多个JSP页面,以前CGI经常因为性能开销上的问题被诟病,然而FastCGI早就已经解决了CGI效率上的问题,所以面试的时候大可不必信口开河的诟病CGI,事实上有很多你熟悉的网站都使用了CGI技术。
where查询语句中避免使用**,=或<>**操作符,搜索引擎会执行全表扫描而不执行创建的索引。
where查询语句中避免使用or来连接条件查询数据,也会导致搜索引擎执行全表扫描而不执行创建的索引,例如:selectid,namefromuserwhereage=18orage=25可以修改为selectid,namefromuserwhereage=18unionallselectid,namefromuserwhereage=25。
**in和notin也避免使用,也将导致全表扫描,例如:selectid,namefromuserwhereagein(18,19,20)**如果是连续的则可以考虑使用betweenand,例如:selectid,namefromuserwhereagebetween18and20。
like语句导致全表扫描,例如:selectid,namefromuserwherenamelike‘%微信%’。
wehre查询语句中避免使用参数,也会全表扫描,SQL在运行时才会进行局部变量的解析,优化程序不能将访问计划的选择推迟到运行时,它必须在编译时进行选择,如果编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项,如下面语句将进行全表扫描:selectid,namefromuserwhereage=@age当然也可以改为强制使用索引:selectid,namefromuserwith(index(索引名))whereage=@age。
where查询语句避免使用表达式,也会导致查询的时候放弃使用索引导致全表扫描,例selectid,namefromuserwhereage/2=10**可以更改为**selectid,namefromuserwhereage=102*。
where查询语句避免使用函数操作,也会导致查询的时候放弃使用索引导致全表扫描,例如:selectid,namefromuserwheresubstring(name,1,3)=’abc’可以改为selectid,namefromuserwherenamelike‘abc%’。
不要使用select*fromuser查询,要用具体的字段名,不要返回任何用不到的字段。
不要使用游标,大家都知道游标的效率非常差。
避免出现大实务业务,会降低系统的并发能力。
评论(0)