首页 > 大数据 > Hadoop > 2013常用面试题(不断整理中..)(II)
50.分页语句
取出sql表中第31到40的记录(以自动增长ID为主键)
sql server方案1:
sql server方案2:
mysql方案:select * from t order by id limit 30,10
oracle方案:select * from (select rownum r,* from t where r<=40) where r>30
--------------------待整理进去的内容-------------------------------------
pageSize=20;
pageNo = 5;
1.分页技术1(直接利用sql语句进行分页,效率最高和最推荐的)
mysql:sql = "select * from articles limit " + (pageNo-1)*pageSize + "," + pageSize;
oracle: sql = "select * from " +"(select rownum r,* from " +"(select * from articles order by postime desc)" +"where rownum<= " + pageNo*pageSize +") tmp " +"where r>" + (pageNo-1)*pageSize;
注释:第7行保证rownum的顺序是确定的,因为oracle的索引会造成rownum返回不同的值
提示:没有order by时,rownum按顺序输出,一旦有了order by,rownum不按顺序输出了,这说明rownum是排序前的编号。如果对order by从句中的字段建立了索引,那么,rownum也是按顺序输出的,因为这时候生成原始的查询结果集时会参照索引表的顺序来构建。
sqlserver:sql = "select top 10 * from id not id(select top " + (pageNo-1)*pageSize + "id from articles)"
DataSource ds = new InitialContext().lookup(jndiurl);
Connection cn = ds.getConnection();
//"select
* from user where
id=?"
PreparedStatement pstmt = cn.prepareSatement(sql);
ResultSet rs = pstmt.executeQuery()
while(rs.next())
{
}
2.不可滚动的游标
pageSize=20;
pageNo = 5;
cn = null
stmt = null;
rs = null;
try
{
sqlserver:sql =
"select
DataSource ds = new InitialContext().lookup(jndiurl);
Connection cn = ds.getConnection();
//"select
* from user where
id=?"
PreparedStatement pstmt = cn.prepareSatement(sql);
ResultSet rs = pstmt.executeQuery()
for(int j=0;j<(pageNo-1)*pageSize;j++)
{
}
int i=0;
while(rs.next() && i<10)
{
}
}
cacth(){}
finnaly
{
}
3.可滚动的游标
pageSize=20;
pageNo = 5;
cn = null
stmt = null;
rs = null;
try
{
sqlserver:sql =
"select
DataSource ds = new InitialContext().lookup(jndiurl);
Connection cn = ds.getConnection();
//"select
* from user where
id=?"
PreparedStatement pstmt = cn.prepareSatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,...);
//根据上面这行代码的异常SQLFeatureNotSupportedEx
ResultSet rs = pstmt.executeQuery()
rs.absolute((pageNo-1)*pageSize)
int i=0;
while(rs.next() && i<10)
{
}
}
cacth(){}
finnaly
{
}
--
51.说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
实现方式,返回的Connection是原始Connection的代理,代理Connection的close方法不是真正关连接,而是把它代理的Connection对象还回到连接池中。
--
52.为什么要用
orm是一种思想,就是object和数据库相互转换,我们可以用jdbc来实现这种思想,其实,如果我们的项目是严格按照oop方式编写的话,我们的jdbc程序就已经在实现orm的工作了。
现在有许多orm工具,它们底层调用jdbc来实现了orm工作,我们直接使用这些工具,就省去了直接使用jdbc的繁琐细节,提高了开发效率,现在用的较多的orm工具是hibernate。也听说一些其他orm工具,如toplink,ojb等。
--
53.谈谈你对Struts的理解。
1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的action去处理。
一个扩展知识点:struts的配置文件可以有多个,可以按模块配置各自的配置文件,这样可以防止配置文件的过度膨胀;
2. ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。
3.要说明的是,
4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。
--
54.谈谈你对Hibernate的理解。
java对象与关系数据库记录的映射关系,称为ORM(即Object Relation Mapping),人们可以通过封装JDBC代码来实现了这种功能,封装出来的产品称之为ORM框架,Hibernate就是其中的一种流行ORM框架。使用Hibernate框架,不用写JDBC代码,调用save方法,就可以将对象保存到关系数据库中,调用get方法,就可以从数据库中加载出一个对象。
使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。
使用Hibernate时,先要配置hibernate.cfg.xml文件,其中配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文件,hibernate.cfg.xml文件中需要登记每个hbm.xml文件。
--
55.AOP的作用。
面向方面编程(AOP)提供从另一个角度来考虑程序结构以完善面向对象编程(OOP),
AOP将程序分解成各个方面或者说关注点,
AOP提供声明式企业服务,允许用户实现自定义的方面,用AOP完善OOP的使用.,
AOP用纯Java实现,支持拦截方法的调用,
AOP提供代表切入点或各种通知类型的类.
--
56.你对Spring的理解。
Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。Spring提供了对IOC良好支持,可以很好地实现模块之间的解耦。IOC也称为DI(Depency Injection),依赖注入。
Spring提供了对AOP技术的良好封装,
--
57.Struts优缺点
优点:
2.有丰富的tag可以用
3.
4.
5.
6.
缺点
一
二
三
四
五
六
七
八
九
--
58.说说struts1与struts2的区别。
1.都是MVC的WEB框架,
2 struts1的老牌框架,使用它开发风险很小,成本更低!struts2虽然基于这个框架,相对不成熟,未知的风险和变化很多,使用它开发项目的风险系数更大!
3.struts2是在前辈的基础设计出来,它会改善和完善struts1中的一些缺陷,struts1中一些悬而未决问题在struts2得到了解决。
4.struts1的前端控制器是一个Servlet,名称为ActionServlet,struts2的前端控制器是一个filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteF
5.struts1的action需要继承Action类,struts2的action可以不继承任何类;struts1对同一个路径的所有请求共享一个Action实例,struts2对同一个路径的每个请求分别使用一个独立Action实例对象,所有对于struts2的Action不用考虑线程安全问题。
6.在struts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数。
7.struts1中的多个业务方法放在一个Action中时(即继承DispatchAction时),要么都校验,要么都不校验;对于struts2,可以指定只对某个方法进行校验,当一个Action继承了ActionSupport且在这个类中只编写了validateXxx()方法,那么则只对Xxx()方法进行校验。
与Struts1不同,Struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。
给我印象最深刻的是:struts配置文件中的redirect视图的url不能接受参数,而struts2配置文件中的redirect视图可以接受参数。
--
59.在DAO中如何体现DAO设计模式?
解决方案一,按照Object[]数据取出数据,然后自己组bean
解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2
field2)
--
60.介绍一下Hibernate的二级缓存
按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate的Session就是一级缓存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说如何配置Hibernate的二级缓存。
(1)缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中。
(2)Hibernate的Session就是一级缓存,当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。Hibernate的二级缓存就是要为Hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session没有这种效果。
(3)二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。
--
61.Jdo是什么?
JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。
--
62.j2ee常用的设计模式?说明工厂模式。
Java中的23种设计模式:
Factory(工厂模式),
Prototype(原始模型模式),Singleton(单例模式),
Adapter(适配器模式),
Decorator(装饰模式),
Command(命令模式),
Iterator(迭代子模式),
Observer(观察者模式),
Template
Method(模板方法模式),
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
--
63.开发中都用到了那些设计模式?用在什么场合?
主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。
--
64.BS与CS的联系与区别。
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或
B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、InFORMix或
C/S
1.硬件环境不同:
C/S
B/S
2.对安全要求不同
C/S
B/S
3.对程序架构不同
C/S
B/S
4.软件重用不同
C/S
B/S
5.系统维护不同
C/S
B/S
6.处理问题不同
C/S
B/S
7.用户接口不同
C/S
B/S
8.信息流不同
C/S
B/S
--
65.应用服务器与WEB SERVER的区别?
应用服务器:Weblogic、Tomcat、Jboss
WEB
SERVER:IIS、
--
66.J2EE是什么?
答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。也是增删改查。
--
67.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。
对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。
对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。
Session
Bean
--
68.WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。
JAXP(Java
API for XML Parsing)
JAXM(Java
API for XML Messaging)
WSDL是一种
SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。
UDDI
--
69.、给我一个你最常见到的runtime exception
ArithmeticException, ArrayStoreException,
BufferOverflowException, BufferUnderflowException
一般异常:
--
70.描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader
--
71.sleep()
Sleep是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。
Wait是等待状态,多长时间不清楚,由另一个线程将其唤醒。
--
72.在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法
create or replace package myPack
is
end;
create or
replace
is
end;
--
73.简单说说tomcat的配置?
JAVA_HOME=JDK的根目录
CATALINA_HOME=tomcat的根目录
CATALINA-HOMEconfserver.xml:可以配置tomcat的端口,可以配置tomcat中下连接池。
CATALINA-HOMEcommonlib:存放公用的类包
在My eclipse中如何配置tomcat
在eclipse中,选择windows->preference->MyEclipse->ApplicationServer->Tomcat
选择Tomcat
--
74.JSP中动态INCLUDE与静态INCLUDE的区别?
jsp:include:在运行时调用另一个页面,变量是可以重复的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24224569/viewspace-1120448/ ,如需转载,请注明出处,否则将追究法律责任。