JAVAEE综合(3)

42.从数据库中取出100,000条数据,每次插入数据库1000条,请写出java相关处理程序,其中insertAll(ArrayList或Vector)为公共方法,已封装好从数据库取出的100,000条数据;要求实现功能:批量插入数据

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.List

public class InsertBatch{
private Connection con;
static{
Class.forNmae("com.myql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
}
public static boolean insertAll(List<?> result){
Iterator<?> it = result.iterator();
int i = 0;
try{
PreparedStatement pstmt = con.preparedStatement("insert into table value(?)");
while(it.hasNext()){
++i;
ps.setString(0,it.next+"");
if(i%1000==0){
ps.execute();
ps.clearBatch();
}
ps.addBatch();
}
return true;
}catch(SQLException e){
e.printStackTrace();
}
return false;
}
}

44.Hibernate实现中,load和get方法的区别,find和iterate的区别?
答:load和get方法的区别:
hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,如果在使用过程中发现了问题,只能抛异常;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
find和iterate的区别:[color=red]find方法通过一条Select SQL实现了查询操作[/color],而iterate方法要执行多条Select SQL.iterate第一次查询获取所有符合条件的记录的id,然后再根据各个id从库表中读取对应的记录,[color=red]这是一个典型的N+1次的查询问题[/color],如果符合条件记录有10000条,就需要执行10001条Select SQL,[color=red]性能会非常差。[/color]


45.Tomcat缺省端口号是多少,如果需要修改哪个目录下的哪个文件?
答:8080------修改/conf/目录下的server.xml

46.介绍一下hibernate的工作原理、优点以及如何优化?
答:
工作原理:
a.启动Hibernate 构建[color=red]Configuration[/color]实例,初始化该实例中的所有变量 [color=red]Configuration cfg = new Configuration().configure();[/color]
b.加载hibernate.cfg.xml文件至该实例内存,通过hibernate.xfg.xml文件中的mapping节点配置,加载hbm.xml文件至该实例内存;
c.由上面得到的Configuration实例构建一个SessionFactory实例 SessionFactory sf = cfg.buildSessionFactory();
d.由上面得到的SessionFactory实例创建连接 Session s = sf.openSession();
e.由上面得到的Session实例创建事务操作接口Transaction的一个实例[color=red]tx [/color]Transaction tx = s.beginTransaction();
f.通过Session接口提供的各种方法操作数据库的访问
g.提交数据库的操作结果 tx.commit();
h.关闭Session链接 s.close();

优点:
a.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
b.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
c.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
d.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
优化:
a.使用双向一对多关联,不使用单向一对多
b.灵活使用单向一对多关联
c.不用一对一,用多对一取代
d.配置对象缓存,不使用集合缓存
e.一对多集合使用Bag,多对多集合使用Set
f.继承类使用显式多态
g.表字段要少,表关联不要怕多,可以利用二级缓存

47.hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)?
答:在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。
临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者saveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象;
持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete操作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。 持久化对象被修改变更后,不会马上同步到数据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
游离状态:当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。

48.对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的?
答:延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。那么Hibernate是怎么知识用户在什么时候使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用getter方法时就会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。这种情况就叫做未初始化的关系。

延迟加载与session关闭的矛盾一般可以这样处理:
1)、关闭延迟加载特性。
操作起来比较简单,因为hibernate的延迟加载特性是在hbm配置里面可控制的。默认lazy="true",具体配置可以查看一下相关文档,就不详细叙述了。 但使用这个解决办法带来的隐患是十分大的。 首先,出现no session or session was closed就证明了您已经在使用外键关联表,如果去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,如果关联表越多,后果也可以想象得到。所以不建议使用这个方法解决。
2)、在session关闭之前把我们想要查询的数据先获取了。 首先需要了解一下session什么时候关闭,也就是它的生命周期。通常情况下hibernate会在查询数据关闭session,而使用getHibernateTemplate().get方法查询后会延迟关闭的时间。会在事务结束后才关闭。 使用拦截器(Interceptor)或过滤器(Filter)控制session。 spring为解决hibernate这一特性提供的解决方案,可以有效的控制session生命周期。


49.说出Servlet的生命周期,并说出Servlet和CGI的区别?
答:Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

50.WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。
答:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作; JAXP(Java API for XML Parsing)定义了在Java中使用DOM, SAX, XSLT的通用的接口,这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码; JAXM(Java API for XML Messaging)是为SOAP通信提供访问方法和传输机制的API; WSDL是一种XML格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务); SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议; UDDI的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

51.Struts的控制器部分,视图部分包括哪些内容?
答:
控制器:
在struts中,基本的控制器组件是ActionServlet类中的实例servelt,实际使用的servlet在配置文件中由一组映射(由ActionMapping类进行描述)进行定义。对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成的,其中Action扮演了真正的业务逻辑的实现者,ActionMapping与ActionForward则指定了不同业务逻辑或流程的运行方向。struts-config.xml 文件配置控制器。
视图:
视图主要由JSP建立,struts包含扩展自定义标签库(TagLib),可以简化创建完全国际化用户界面的过程。目前的标签库包括:Bean Tags、HTML tags、Logic Tags、Nested Tags 以及Template Tags等。

52.实际应用中,servelet和JSP如何使用?
答:servlet一般用来做控制流转,调用业务层方法,响应请求。jsp用来做页面中数据的收集和表现。

53、jsp有哪些动作?作用分别是什么?
答:JSP共有以下6种基本动作:
jsp:include:在页面被请求的时候引入一个文件;
jsp:useBean:寻找或者实例化一个JavaBean。;
jsp:setProperty:设置JavaBean的属性。;
jsp:getProperty:输出某个JavaBean的属性;
jsp:forward:把请求转到一个新的页面;
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记

54.、MVC的各个部分都有哪些技术来实现?如何实现?
答:MVC是Model-View-Controller 的缩写,
Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),
View 是应用的表示面(由JSP页面产生)
Controller是通过应用的处理过程控制,(一般是一个servert 或是struts中的action)通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。

55.Session的基本原理是什么?
答:Session对象的原理在于,服务器可以为客户端创建并维护一个所谓的Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为[color=red]SessionID[/color],服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将SessionID作为Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问。需要注意的是,此时的Cookie中仅仅保存了一个SessionID,而相对较多的会话数据保存在服务器端对应的Session对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。存放在客户端的用于保存SessionID的Cookie会在浏览器关闭时清除。我们把用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。在一个“会话”过程中,可能会向同一个应用发出了多次请求,这些请求将共享一个Session对象,因为这些请求携带了相同的SessionID信息。Session对象的正常使用要依赖于Cookie。如果考虑到客户端浏览器可能出于安全的考虑禁用了Cookie,应该使用URL重写的方式使Session在客户端禁用Cookie的情况下继续生效。

56.JSP中动态INCLUDE与静态INCLUDE的区别?Servlet中forward与redirect的区别?
答:
动态INCLUDE:
用jsp:include动作实现 <jsp:include page="head.jsp"/> 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数;
静态INCLUDE:
用include伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@include file="head.htm" %>
forword:
forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect:
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

57.说出JSP的内置对象,并给出说明。
答:(1)request:
request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header和session数据的有用的方法。
(2)response:
response表示HttpServletResponse对象,并提供了几个用于设置送回 浏览器的响应的方法(如cookies,头信息等)
(3)out:
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
(4)pageContext:
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
(5)session
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息。
(6)application
application 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息。
(7)config
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
(8)page
page表示从该页面产生的一个servlet实例。
(9)exception
exception 针对错误网页,未捕捉的例外

58.简述struts是怎样实现的MVC模型。
答:
(1)在Struts框架中Controller功能由ActionServlet和ActionMapping对象构成,核心是一个Servlet类型的对象ActionServlet,它用来接收客户端的请求。
(2)ActionServlet包括一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到一个具体的Model部分的Action处理器对象之间的映射。
(3)Model部分由Action和ActionForm对象构成。所有的Action处理器对象都是开发者从Struts的Action类派生的子类。
(4)Action处理器对象封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。
(5)Struts提供的ActionForm组件对象可以通过定义属性描述客户端表单数据,开发者可以从它派生子类对象,并利用它和Struts提供的自定义标记库相结合,可以实现对客户端的表单数据的良好封装和支持,Action处理器对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持(View部分是通过JSP技术实现的)
(6)Struts提供了自定义的标记库,通过这些自定义标记库可以非常容易地和系统的Model部分交互,通过使用这些自定义标记库创建的JSP表单,可以实现对Model部分中的ActionForm的映射,完成对用户数据的封装。

59.struts中actionform和action属于MVC哪一层,为什么?actionform的功能有哪些?
答:
actionform属于MVC当中的V层,因为M层应该是封装了业务逻辑的对象,而ActionForm仅仅是一个form-bean,封装了用户提交的表单数据(物理View),
可以在其中进行一些非业务逻辑的验证,并没有真正的映射到模型数据,因为与层的关系比较密切,所以实际上它应该算是View层(逻辑View);
action应该属于C层,仅仅描述"做什么",与"如何做"(Model)关系不大,把它归于 Controller 层比较合适。
ActionForm的功能主要是:
(1):表单中的信息--->对象的封装
(2):表单信息的缓存
(3):表单信息验证(服务器端验证)建议用validator框架

60.一个Web页面包含哪三大要素,都有些什么标准。要解决跨浏览器访问的问题应注意哪些方面。
答:HTML/XHTML/CSS 都是基于W3C标准
跨浏览器访问问题主要是因为浏览器对于脚本语言的解析和支持程度不同。要编写跨浏览器的页面,就要注意页面中的标签和脚本语言是否被支持。

61.Servlet是线程安全吗?以下代码中使用synchronized关键字的意义是什么?
Synchronized (aList){
aList.remove(1);
}
答:默认不是线程安全的,但是servlet实现了[color=red]SingthreadModel[/color]接口 就能单线程执行。此题中代码的意思是给aList对象加同步锁,保证aList对象在多线程任务环境中,每次只能够有一个线程调用remove方法。从而提高对aList对象操作的安全性和正确性。

62.就WEB2.0 相关信息做一下描述,谈谈你对这些技术概念的认识。
答:一些WEB2.0产品,就可以理解以上观点。
Blog:
用户织网,发表新知识,和其他用户内容链接,进而非常自然的组织这些内容。
RSS:
用户产生内容自动分发,定阅。
Podcasting:
个人视频/声频的发布/定阅。
SNS:
blog+人和人之间的链接。
WIKI:
用户共同建设一个大百科全书。

从知识生产的角度看,WEB1.0的任务,是将以前没有放在网上的人类知识,通过商业的力量,放到网上去。

WEB2.0的任务是,将这些知识,通过每个用户的浏览求知的力量,协作工作,把知识有机的组织起来,在这个过程中继续将知识深化,并产生新的思想火花; 从内容产生者角度看,WEB1.0是商业公司为主体把内容往网上搬,而WEB2.0则是以用户为主,以简便随意方式,通过blog/podcasting 方式把新内容往网上搬;

从交互性看,WEB1.0是网站对用户为主;WEB2.0是以P2P为主。
从技术上看,WEB客户端化,工作效率越来越高。 我们看到,用户在互联网上的作用越来越大;他们贡献内容,传播内容,而且提供了这些内容之间的链接关系和浏览路径。在SNS里面,内容是以用户为核心来组织的。WEB2.0是以用户为核心的互联网
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值