首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

小弟我们爱分享————J2EE常见面试题分享(夕水溪上版)

2012-12-14 
我们爱分享————J2EE常见面试题分享(夕水溪下版)本帖最后由 xishuixixia 于 2011-09-22 11:00:33 编辑首先

我们爱分享————J2EE常见面试题分享(夕水溪下版)
本帖最后由 xishuixixia 于 2011-09-22 11:00:33 编辑 首先说明一下,如果想要word版本的,请发邮件给我:greenyouyou@163.com或者上我的博客看:http://greenyouyou.blog.163.com/

下面开始分享:


(一)spring
1.什么是spring
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发。
2.什么是控制反转?
以一个例子来说明:
public class PersonServiceBean {
    private PersonDao personDao = new PersonDaoBean();
      public void save(Person person){    
        personDao.save(person);
     }
}
PersonDaoBean是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。
3.spring优点
1)降低组件之间的耦合度,实现软件各层之间的解耦。(通过控制反转)
2)可以使用容器提供的众多服务,如:事务管理服务,AOP
3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
5)Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
4.实例化spring容器
ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"bean.xml}");
5.bean的作用域
1)singleton(默认)
我们得默认配置就是singleton,当然也可以通过scope属性去指定相应的作用域,sigleton作用域会在容器启动时初始化bean(可以通过在构造函数中打印得出结论),当然我们也可以通过指定指定Bean节点的lazy-init="true" 来延迟初始化bean,这时候,只有第一次获取bean才会初始化bean(当然不建议这样做)。在默认为singleton的情况下,我们获得的多个bean都是同一个(打印p1==p2为true)。
2)prototype
每次从容器获取bean都是新的对象。只有在调用getBean方法的时候才会初始化bean,并且每次获得的bean都不一样。
6.DI
public class PersonServiceBean implements PersonService 
private PersonDao personDao;
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}
public void save(){
personDao.add(); }}
大致可以分为三种方式:1)构造器注入 2)set方法注入 3)注解方式注入
7.AOP
我觉得AOP技术主要会用于权限拦截,比方说我们要根据用户的权限判断用户能不能执行某一个方法,这里就会用到AOP
8.jdbctemplate与hibernatetemplate以及他们的事务管理
9.AOP实现原理——为目标对象创建代理对象。
(二)Hibernate
1.什么是hibernate
hibernate是一个开源的ORM框架,它对JDBC进行了非常轻量级的对象封装,通过它我们可以使用对象编程思维来操纵数据库。
2.hibernate与jdbc的区别
首先先从他们俩的来历说起,由于java是一门面向对象的语言,而数据库采用的是关系模型,要在他们之间建立起关系,就必须解决模式不匹配的问题。有两种方法:一是jdbc手工配置(setString(),getString());二是使用ORM框架,比方说hibernate。
1)jdbc使用效率高,但是在java代码中嵌入了过多的sql逻辑
2)hibernate使用效率没有jdbc高,但是使用它程序员可以用面向对象的思维来操作数据库
3)hibernate可以实现跨数据库平台,只需要改方言以及驱动等。
3.session接口
Save,get,load,update,delete,这些方法进行简单说明
4.query接口
List,uniqueResult,setString,setParameterList
5.POJO类
1)瞬时(与session没有关系,与数据库也没有关系)
2)持久(与session有关系,与数据库也有关系)
3)脱管(与session没有关系,与数据库有关系,一般主键都有值)
6.Hibernate的Generator属性
Identity,native,assigned,uuid
7.SessionFactory中两个方法的对比
1)open session每次都是新的,需要close。
2)getCurrentsession从上下文找,如果有,用旧的,如果没有,建新的。
8.mysql转义
select username from gg_user where username like '%xiao/_%' escape '/';
9.cascade and inverse
set中将inverse设置为true
10.缓存(一级缓存和二级缓存)
一级缓存是session级别的缓存,二级缓存了?我经常用的二级缓存是ehcache,首先我们需要在hibernate的配置文件中配置二级缓存,引入二级缓存对应的jar文件,接下来配置ehcache.xml,然后为需要缓存的pojo类添加缓存配置(在其配置文件中)
11.懒加载
1)先说什么是懒加载以及其作用
2)Get和load方法
3)一对多和多对一中的懒加载
12.数据关联
(三)Struts2
1.stuts2概述
struts2是在webwork2基础发展而来的,他也属于MVC框架。他有以下优点:
1)struts2并没有像struts1那样跟servletAPI有着紧密的耦合,比方说struts2中的session,他是一个map,而不是我们经常用的httpsession
2)struts2提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能。
3)struts2提供了类型转换其,我们可以把特殊的请求参数转换成需要的类型。
4)struts2中提供了多种表现层技术,如jsp,velocity
5)struts2的输入校验可以对指定方法进行校验
6)在struts1中进行多次访问的时候用到的是同一个Action对象。而struts2则是每一次访问都会创建一个Action对象,所以struts2不会有线程安全问题的发生
2.struts2工作原理
首先是加载web.xml配置文件,配置文件中设置过滤器,默认过滤所有的请求,如果用户的请求为以action结尾,他将会被转入struts2框架处理。进入struts2框架,首先会经过一系列的拦截器(interceptor),他是struts2的核心,然后到action中,action会返回一个结果,这个结果在result中已经配置,最好给用户响应。


3.类型转换
日期,arraylist等等
4.result的各种转发类型
dispatcher(默认),redirect,redirectAction,plainText
(四)Jsp and  servlet
1.MVC
M是指javabean,负责数据的处理
V是指JSP,用于页面的呈现
C是指servlet,负责业务逻辑处理
能够画出示意图、
2.四个作用域对象
四个作用域对象分别有:pageContext,request,session,Application
request:表示请求信息,对用的类型是javax.servlet.http.HttpServletRequest
session:对应的类型是javax.servlet.http.HttpSession
application:表示整个应用的上下文,对应类型为javax..servlet.jsp.ServletContext
3.重定向和请求转发的区别
1)浏览器地址栏
重定向后浏览器地址栏发生改变,而请求转发不改变,所以使用请求转发时应该注意刷新带来的重复提交问题。
2)请求次数与请求响应对象
重定向中有两次请求,而请求转发中只有一次请求。重定向中生成两组不同的请求响应对象,而请求转发过程只有一组,所以可以利用他来传request对象。
3)传值
重定向传值只能依靠地址后加?,而请求转发可以使用request对象的attribute方法。
4)路径参数
重定向中的路径参数为绝对路径。请求转发中的路径为相对路径。
4.b/s与c/s
B/S即Browser/Server结构,在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。
C/S即Client/Server结构,客户端需要安装专用的客户端软件。
5.http
浏览器要从web服务器上读取数据,需要有一个一问一答的过程。就像两个国家元首会晤过程得遵守一定的外交礼节,浏览器与服务器之间也得遵守一定的规则,这个规则就是HTTP协议。HTTP请求由三部分组成,分别是:请求行,消息报头,请求正文。
6.servlet生命周期
加载类,实例化(运行构造函数),初始化(执行init方法),服务(service),销毁(destroy),可回收.注意:当我们配置文件中指定load-on-startup 属性时,若他的值是一个大于等于0的整数,容器会在启动的时候加载这个servlet类并调用他的init方法。
7.AJAX应用与传统WEB应用有什么不同?
在传统的web编程中,如果想得到服务器端数据或者想发送客户端数据到服务器,需要建立一个HTML form然后get或者post数据到服务器端。用户需要点击“submit” 按钮来发送数据或者接受数据,然后等待服务器响应请求,页面重新加载。因为服务器每次都会返回一个新的页面,所以传统的web应用很慢并且用户体验度不好。使用AJAX技术,就可以使javascript通过XMLHttpRequest对象直接与服务器进行交互。通过XmlHttpRequest对象,一个web页面可以发送请求到服务器并接受服务器端数据,用户感觉不到页面的刷新,已经得到了意想不到的效果。
8.Ajax的全称是什么?介绍下Ajax
Ajax的全称是Asynchronous javascript and xml,Ajax技术可以使javascript通过XMLHttpRequest对象直接与服务器进行交互,通过XMLHttpRequest对象,一个页面可将请求发送到服务器或者接受服务器端数据,用户感觉不到页面刷新,但是已经得到意想不到的效果,比如新浪微博
9.介绍一下XMLHttpRequest对象
1)创建XMLHttpRequest对象(需要考虑不同的浏览器)
2)设置连接信息xml.open("GET","servlet",true);
3)注册回调函数
4)发送数据,开始和服务器进行交互 
5)在回调函数中接受响应数据
10.说说Ajax的缺点
缺点是加重浏览器负担,当网速慢时,容易浏览器死掉.

[/size]
[最优解释]
好,下午面试的时候说给面试官。
[其他解释]
踩一脚
[其他解释]
感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener接收到?


[其他解释]
引用:
感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener接收到?


Listener的初始化最早,Filter次之。他俩的初始化都是在容器启动完成之前初始化的。

Servlet是不会自动初始化的,在请求进来的时候才会初始化。

如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup>参数,没有此标签,默认启动时servlet不进行初始化。


Filter生命周期

1、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
2、每一次请求时都只调用方法doFilter()进行处理;
3、停止服务器时调用destroy()方法,销毁实例。

关于listener 我想生命周期应该同Filter
[其他解释]
引用:
引用:

感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener接收到?


Listener的初始化最早,Filter次之。他俩的初始化都是在容器启动……


servlet应该是启动服务就初始化了吧!
servlet生命周期就是
当服务启动之后,初始化servlet,然后根据客户端请求,service方法 最后销毁。

[其他解释]
en 学习了
很不错
[其他解释]
围观 不太明白。
------其他解决方案--------------------


好好 帮顶了
[其他解释]

引用:
引用:
引用:

感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener接收到?


Listener的初始化最……

不。。Servlet只有当有请求过来的时候才会初始化。

  第一次请求的时候会初始化,以后就直接调用了,因为在整个生命周期中,只有一个实例。呵呵 

想一开始就实例化的话,可以配置load-on-startup  0
[其他解释]
引用:
引用:

引用:
引用:

感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener……


(1)Servlet默认是不会自动初始化的,在请求进来的时候才会初始化。
(2)如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup>参数,没有此标签,默认启动时servlet不进行初始化。
(3)<load-on-startup>的值越小,就越早进行初始化,也越早进行卸载。
(4)初始化的顺序是:Listener,Filter,Servlet
    卸载的顺序是:Servlet,Filter,Listener。
[其他解释]
引用:
(1)Servlet默认是不会自动初始化的,在请求进来的时候才会初始化。
(2)如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup>参数,没有此标签,默认启动时servlet不进行初始化。
(3)<load-on-startup>的值越小,就越早进行初始化,也越早进行卸载。
(4)初始化的顺序是:Listener,Filter,Servlet
  卸载的顺序是:Servlet,Filter,Listener。


上面的结论是在tomcat7里面得出的,不知道servlet规范是不是这样的?

有待考证!
[其他解释]
初始化顺序是没错的,至于destory就不太清楚了
[其他解释]
初始化的顺序是那样的,而且他的顺序跟在web.xml中的顺序还无关,但如果web.xml中配置了<context-param>,貌似初始化顺序是:context-param > Listener > Filter > Servlet 
,销毁就不了解了
[其他解释]
引用:
引用:
(1)Servlet默认是不会自动初始化的,在请求进来的时候才会初始化。
(2)如果想要servlet自动初始化,需要在指定的servlet中配置<load-on-startup>参数,没有此标签,默认启动时servlet不进行初始化。
(3)<load-on-startup>的值越小,就越早进行初始化,也越早进行卸载。
(4)初始……


是这样的
[其他解释]
恩,上面也解释了。我再次强调一下,如果再servlet中不做特殊配置,那么servlet不会在容器初始化的时候加载的。
[其他解释]
该回复于2011-09-22 13:21:36被版主删除
[其他解释]
路过学习一下。。。
[其他解释]
还有就是补充一个知识点:很多朋友都问过我如何在filter中调spring容器管理的对象,我这里给出方法:

WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(request.getSession().getServletContext()); 
dbinitDao=(DbinitDao)webApplicationContext.getBean("dbinitDao");


[其他解释]
路过学习!!!!!!!!!
[其他解释]
学习一下!~~~
[其他解释]
已经推荐,已经整理到分享贴中。 最常见的SSH面试〈三〉
[其他解释]
好东西,尤其是我不懂ssh,lz上传csdn资源,发链接吧。
------其他解决方案--------------------


推荐给好友了
[其他解释]
看看!!
[其他解释]
原来高手都是不懂ssh的

引用:
好东西,尤其是我不懂ssh,lz上传csdn资源,发链接吧。

[其他解释]
好东西  分享~
[其他解释]
引用:
引用:

引用:
引用:

感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listener……


 想起来了 ,确实servlet是在请求的时候实例化的,而且每个请求有且只有一个servlet实例!谢谢大胡子。。。
[其他解释]
打酱油的。。 
[其他解释]
引用:
好,下午面试的时候说给面试官。


你还不如让面试官去百度。反问他不懂还问我?
[其他解释]
该回复于2011-09-22 15:41:23被版主删除
[其他解释]
学习。。。。。。 

[其他解释]
学习。。。。。。
[其他解释]
哎吆,不错哟
[其他解释]
该回复于2011-09-23 09:17:43被版主删除
[其他解释]
123123
[其他解释]
学习了~
[其他解释]
hiberante 二级缓存好像是在 Sessionfactory中!
[其他解释]
引用:
引用:

引用:
引用:

感觉挺有用的一个知识点:

(1)Filter和Listener的生命周期,何时初始化,何时销毁,收到请求如何处理?

(2)如果同时配置了RequestListener和Filter,那么请求是先被过滤器接收到,还是先被Listene……


正解!
[其他解释]
采纳了,哈哈
[其他解释]
不错啊,路过,顶一下………………………………………………………………………………
[其他解释]
虽然都知道,但不一定一时都能答出。感谢帮忙理清思路。收藏!
[其他解释]
学习。
[其他解释]





-----------------------------

老虎插件↓
快速添加:http://malaohu-project.googlecode.com/files/Plugin_v1.5.1.js
[其他解释]
该回复于2011-09-23 09:54:12被版主删除
[其他解释]
虽然都知道,但不一定一时都能答出。感谢帮忙理清思路。收藏!
[其他解释]
虽然都知道,但不一定一时都能答出。感谢帮忙理清思路。收藏!
[其他解释]
学习了。
[其他解释]
很全哦,,,。
------其他解决方案--------------------


虽然都知道,但不一定一时都能答出。感谢帮忙理清思路。收藏
[其他解释]
学习啦- - 虽然不是很懂
[其他解释]
占楼学习
[其他解释]
mark
[其他解释]
分享了!!
[其他解释]
顶一下
[其他解释]
给你发邮件了,发一份给我吧!!!!
[其他解释]
该回复于2011-11-08 09:11:50被版主删除
[其他解释]
Filter生命周期

1、启动服务器时加载过滤器的实例,并调用init()方法来初始化实例;
2、每一次请求时都只调用方法doFilter()进行处理;
3、停止服务器时调用destroy()方法,销毁实例。

关于listener 我想生命周期应该同Filter
[其他解释]
好久没摸了,挺不错的.
[其他解释]
的确很不错
[其他解释]
挺不错的 
加深对ssh的理解
[其他解释]
基础是很重要滴
[其他解释]
的确是当下常遇到的。最近面试经常遇到。
[其他解释]
表示飘过
[其他解释]
路过ing
[其他解释]
看看,学习中...
[其他解释]
以后好好学习
[其他解释]
该回复于2011-11-08 09:11:49被版主删除
[其他解释]
整天了半天 积分还是0

[其他解释]
很好,收下了。。。。。
[其他解释]
Java 中只剩下 Spring, Struts 2, Hibernate 了!
[其他解释]
谢谢分享,真的很有用啊
[其他解释]
看看,学习中...
[其他解释]
study................

[其他解释]
好4111111111111111111
[其他解释]
为什么楼主的字写到框外边了呢,却是不容易读啊,用户体验不是很好,不过内容还不错
[其他解释]
非常好  我顶了
[其他解释]
如何积分?难理发

[其他解释]
学习了,留着以后用
[其他解释]
学习学习
[其他解释]
路过学习下...
[其他解释]
嗯,也留个记号。
------其他解决方案--------------------


顶一个  果断收藏了
[其他解释]
学习学习
[其他解释]
该回复于2011-09-27 09:32:29被版主删除
[其他解释]
该回复于2011-11-08 09:11:49被版主删除
[其他解释]
好东东,感谢楼主无私
[其他解释]
面接試験に重要です
[其他解释]
很好,谢谢分享!
[其他解释]
好的,谢谢
[其他解释]
很好,谢谢分享!
[其他解释]
路过学习了
[其他解释]
谢谢楼主··
[其他解释]
拿到面试题的朋友注意回帖!
[其他解释]
xuexi le ...
[其他解释]
好的,谢谢
[其他解释]
好东西,谢谢分享~~
[其他解释]
null
[其他解释]
null
[其他解释]
学习一下!
[其他解释]
null

热点排行