阐述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查询,要用具体的字段名,不要返回任何用不到的字段。

不要使用游标,大家都知道游标的效率非常差。

 

 

避免出现大实务业务,会降低系统的并发能力。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。