`
y8820960
  • 浏览: 113102 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java面试题

 
阅读更多

1 Hashtable 和 HashMap 区别

    Hashtable是同步的,即线程安全的,就是多个线程也可以时对其进行访问,不会出现数据不一致的情况,且不允许空值;HashMap是非线程安全的,并且允许空值,在线程环境中就需要人为的对其进行同步处理,否则就会出现数据不一致的情况,因而其在单线程的情况下,因为其不同步性,所以就效率上来说HashMap肯定是优于Hashtable 了;二者的共同点都是键值对关,且都是一一对应,不可能出现两个键,因为其键为唯一关键字,但值肯定可以相同了。

2 Jsp 与 Servlet 区别


    (1)Jsp是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。Jsp编译后是“类Servlet”。
    (2)Servlet和Jsp最主要的不同点在于,Servlet的应用逻辑在Java文件中,并且完全从表达层中的HTML里分离出来。而Jsp的情况是Java和HTML可以组合成一个扩展名为Jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。


3 多态机制


    多态指一个程序中同名不同方法共存的情况,java中提供两种多态机制,重写和重载。重写:在子类中可定义与父类中已定义的方法而内容不同的方法,这种多态称为覆盖。  重载:在一个类中定义了多个同名而不同内容的成员方法时,称为重载。   由于重写的同名方法存在与子类对父类的关系中,在方法引用时指明引用的事弗雷方法还是子类的不同重写和重载。

4 Web容器


    Web容器实际是一个Java运行时(runtime),提供了Java Servlet API的一个实现,并且简化了jsp网页,web容器负责初始化、调用以及管理。
    Web容器可以提供:
    (1)通信支持:利用容器提供的方法,能轻松的让Servlet和web服务器对话。
    (2)生命周期管理:容器控制Servlet的生死。它负责加载类,实例化和初始化Servlet、调用Servlet方法,并使Servlet实例能够被垃圾回收。
    (3)多线程支持:容器会自动的为它接收的每个Servlet创建一个新的Java线程。针对客户机的请求,如果Servlet已经运行完相应的HTTP服务方法,这个线程就会结束(也就是死掉)。
    (4)声明实现方式安全:利用容器,可以使用XML部署描述文件配置和修改安全性,而不必将硬编码写到Servlet或其他类代码中。
    (5)JSP支持:负责把JSP代码翻译成真正的Java。


5 谈谈你对Struts的理解


  (1)struts是一个按MVC模式设计的Web层框架,其实他就是一个大大的servlet,这个servlet名为ActionServlet,或者是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再按照一个配置文件(通常为/WEB-INFO/struts-config.xml),将各个请求分别分配给不同的action去处理。(扩展:struts的配置文件可以有多个,可以按照模块配置各自的配置文件,这样可以防止配置文件的过度膨胀)

  (2)ActionServlet把穷球交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean呢?看配置文件。

  (3)要说明的是,ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性定义。

  (4)action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称解耦。

 

6 谈谈你对Hibernate的理解


  (1)面向对象设计的软件内部运行过程可以理解成就是在不断的创建各种新对象、建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管理程序的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就体现在内存中的对象状态发生了变化。

  (2)为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复出对象的状态,通常都是保存到关系数据库来保存大量对象信息。从Java程序的运行功能上来讲,保存对象状态的功能相比系统运行的其他功能来说,应该是一个很不起眼的附属功能,java采用jdbc来实现这个功能,这个不起眼的功能却要编写大量的代码,而做的事情仅仅是保存对象和恢复对象,并且这些大量的jdbc代码并没有什么技术含量,基本上是采用一套例行公事的标准的代码模板来编写,是一种苦活和重复性的工作。

  (3)通过数据库保存java程序运行时产生的对象和恢复对象,其实就是实现了java对象与关系数据库记录的映射关系,称为ORM(Object Relation Mapping),人们可以通过封装JDBC代码来实现了这种功能,封装出来的产品称之为ORM框架,Hibernate就是其中一种流行ORM框架。使用Hibernae框架,不用写jdbc代码,仅仅是调用一个save方法,就能将对象保存到关系数据库中,仅仅是一个get方法,就可以从数据库中加载出一个对象。

  (4)使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完成CRUD操作,提交事务,关闭session。

  (5)使用Hibernate时,先要配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文件,hibernate.cfg.xml文件中需要等级每个hbm.xml文件。

  (6)在应用Hibernate时,重点要了解Session的缓存原理,级联,延迟加载和hql语句。


7 谈谈你对spring的理解


  (1)Spring实现了工厂模式的工厂类,这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类 ApplicationContext。Spring相当于一个大的工厂类,在配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。

  (2)Spring提供了对IOC良好的支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好的实现模块之间的解耦。IOC也称为 DI(Depency Injection) , 什么叫依赖注入呢?

public Class Programmer {

computer computer = null;

public void code() {

//computer = new Computer()

//computer = beanFactory.getComputer();

....

}

public void set computer(Computer computer){

  this.computer = computer;

}

}

 另外两种方式都由依赖,第一个直接依赖于目标类,第二个把依赖转移到工厂上,第三个彻底与目标和工厂解耦了(配置文件...)。


  (3)Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中很多各个不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这些应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,一是实现相同的接口,二是作为目标的子类。在JDK中采用Proxy类产生动态代理的方式为某个借口生成实现类,如果要为某个类生成子类,则可以用CGLIB。在生成的代理类的方法中加入系统功能和调用目标类的相应方法,系统功能的代理以Advice对象进行提供,显然要创建出代理对象,至少要目标类和Advice类。

 

8 IOC容器概念

 

IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象以及建立这些对象之间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IOC容器进行组装。在Spring中BeanFactory是IOC容器的实际代表着。

===http://blog.csdn.net/chen3888015/article/details/7447812

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics