常见Java面试题

1.      抽象

      抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分的注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

 

2.      继承

      继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

 

3.      封装

      封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

 

4.      多态性

      多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

 

5.      String StringBuffer 的区别

      Java 平台提供了两个类:String StringBuffer ,它们可以存储和操作字符串,即包含多个字符的字符数据。这个String 类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer

      典型地,你可以使用StringBuffer 来动态构造字符数据。

 

6.      说出Servlet 的生命周期

      Servlet 被服务器实例化后,容器运行其init 方法,请求到达时运行其service 方法,service 方法自动派遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy 方法。

 

7.      说出 ArrayList Vector 的区别

      ArrayList Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据块而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差。

 

8.      Collection Collections 的区别

      Collection 是集合类的上级接口,继承与他的接口主要有Set List

Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

9.      HashMap Hashtable 的区别

      HashMap Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许(null)键值(Key,由于非线程安全,效率上可能高于Hashtable

      HashMap 允许将null 作为一个entry key 或者 value ,而Hashtable 不允许。

      最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为他的方法实现同步,而HashMap 就必须为之提供外同步。

      Hashtable HashMap 采用的hash /rehash 算法都大概一样,所以性能不会有很大的差异。

 

10Final ,finally, finalize 的区别

      Final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

      Finally 是异常处理语句结构的一部分,表示总是执行。

      Finalize Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集器时的其他资源回收,例如关闭文件等。

 

11.Overload Override 的区别。OverLoad 的方法是否可以改变返回值的类型。

      方法的重写Overriding 重载 Overloading Java 多态性的不同表现。重写Overriding 是父类与子类之间多态性的一种表现,重载Overloading 是一个类中多态性的一种表现。如果在子类定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。OverLoad 方法是可以改变返回值的类型。

 

12. error exception 有什么区别

      Error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。

      Exception 表示一种设计或实现问题。也就是说,他表示如果程序运行正常,从不会发生的情况。

 

13. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

      多线程有两种实现方法,分别是继承Thread 类与实现Runnable 接口。

   同步的实现方法有两种,分别是synchronizedwaitnotify

 

14. JSP 的内置对象及方法

      Request 表示HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookieheader, session 数据的有用的方法。

       Response 表示HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法(如 cookies,头信息等)。

       Out 对象是javax.jsp.jspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

       pageContext 表示一个javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、servlet 相关的对象的API,并且包装了通用的servlet 相关功能的方法。

      Session 表示一个请求的javax.servlet.http.HttpSession 对象。Session 可以存储用户的状态信息。

      Application 表示一个javax.servlet.ServletContext 对象。这有助于查找有关servlet 引擎和servlet 环境的信息。

      Config 表示一个javax.servlet.ServletConfig 对象。该对象用于存取servlet 实例的初始化参数。

       Page 表示从该页面产生的一个servlet 实例。

 

15. J2EE 是技术还是平台还是框架?

       J2EE 本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

       J2EE 也是一个框架,包括JDBC,JNDI,RMI,EJB,JTA等技术。

 

16. Web Service 原理,SOAP , UDDI , WSDL 解释。

       Web Service 是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service 能与其他兼容的组件进行互操作。

       WSDL是一种XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这些格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。

      SOAP 简单对象访问协议(Simple Object Access Protocol),它是用于交换XML 编码信息的轻量级协议。

     UDDI 的目的是为电子商务建立标准;UDDI 是一套基于Web 的、分布式的、为Web Service 提供的信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

 

17. Hibernate 的核心接口和类

 核心接口:QueryTransactionSessionSessionFactoryConfiguration

   

 Criteria Hibernate.propertieshibernate.cfg.xml*.hbm.xml

 

1Configuration接口

Configuration用于配置并启动HibernateHibernate应用通过Configuration的实例来指定对象-关系映射文件,或通过Configuration动态配置Hibernate的属性,然后通过Configuration来创建相应的SessionFactory实例。

 

2SessionFactory接口

一个SessionFactory对应一个数据源,它是个重量级对象,不可随意生成多个实例。对于一般的单数据库应用来说,只需要一个SessionFactory就足够了。当然如果有多个数据库的话,还是需要为每个数据库生成对应的SessionFactory。它是线程安全的,同一个实例可以被应用中的多个线程共享。

也许你会很好奇,SessionFactory为什么是重量级对象呢?我也同样好奇,通过查看Hibernate的源码,发现SessionFactory存放了大量预定义的SQL语句以及映射元数据,所以自然需要很大的缓存了,同时需要一定的CPU时间来计算生成。想想Hibernate的这个设计是很有意义的,因为有了Mapping文件,很多SQL语句就已经确定了,只需要动态生成一次就可以了,这个设计也是为了提高持久化的效率。

 

3Session接口

SessionFactory中可以获得Session实例。

Session接口是Hibernate应用中使用最广泛的接口了,它是持久化管理器,提供添加、更新、删除、加载、查询对象。Session不是线程安全的,所以应避免多个线程共享同一个Session实例。Session是轻量级对象,它的创建和销毁不需要太多资源,这意味着在应用中可以经常创建和销毁Session对象。

Session有一个缓存,称之为Hibernate的一级缓存,它存放当前工作单元加载的持久化对象,每个Session都有自己的缓存,缓存中的对象只能被当前工作单元访问。

 

4Transaction接口

TransactionHibernate的数据库事务接口,它对底层道德事务接口进行了封装,底层事务接口包括:

    JDBC API

    JTA(Java Transaction API)

    CORBA(Common Object Requet Broker Architecture) API

Hibernate应用可以通过一致Transaction接口来声明事务边界,这有助于应用可以在不同的环境或容器中移植。具体的事务实现使用在Hibernate.properties中进行指定。

 

5QueryCriteria接口

这两个是Hibernate的查询接口,用于向数据库查询对象,以及控制执行查询的过程。Query实例包装了一个HQL(Hibernate Query Language)来查询。Criteria接口完全封装了基于字符串形式的查询语句,比Query更面向对象,Criteria更擅长执行动态查询

 

 

18. OOA, OOD, OOP

         Object-Oriented Analysis:面向对象分析方法

 

  是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题。OOA与结构化分析有较大的区别。OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析。

 

  OOA(面向对象的分析)模型由5个层次(主题层、对象类层、结构层、属性层和服务层)和5个活动(标识对象类、标识结构、定义主题、定义属性和定义服务)组成。在这种方法中定义了两种对象类之间的结构,一种称为分类结构,一种称为组装结构。分类结构就是所谓的一般与特殊的关系。组装结构则反映了对象之间的整体与部分的关系。

 

         面向对象设计(Object-Oriented DesignOOD)方法是OO方法中一个中间过渡环节。其主要作用是对OOA分析的结果作进一步的规范化整理,以便能够被OOP直接接受。

 

         面向对象编程(Object Oriented ProgrammingOOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。

 

 

19.Spring 的核心模块

    核心容器(Spring Core

Spring核心容器为Spring框架提供了基础功能。BeanFactory为核心类,采用工厂模式实现了IoC,将系统的配置和依赖关系从代码中独立出来。

 

Application Context模块

这个模块扩展了BeanFactory,添加了对国际化、系统生命周期事件以及验证的支持。此外这个模块还提供了企业级服务,如Email服务、JNDI访问、EJB集成、远程调用、定时服务,还支持与模板框架的集成,如VelocityFreeMaker

 

SpringAOP模块

SpringAOP提供了丰富的支持,基于AOP AllianceAPI开发的,这样可以确保Spring与其它AOP框架之间的互通。同时这个模块也应用了metadata编程,可以通过代码中的注释来告诉Spring在那里以及如何应用切面。

 

JDBC抽象以及DAO模块

该模块把JDBC代码中的一些样板式代码(如:获得连接,创建语句,处理结果,关闭连接)抽象出来,让应用中的数据库代码变得简单明了,同时可以避免因释放数据库资源失败而引起的问题。此外还建立了一个容易理解的数据库异常层,从而使开发者不必再去理解专有的SQL错误信息了。

 

O/R映射集成模块

Spring没有实现自己的O/R Mapping解决方案,而是提供了与主流O/R框架集成的模块,包括HibernateJDOiBATIS SQLSpring的事务管理支持所有这些ORM框架及JDBC

 

SpringWeb模块

Web Context文模块建立在Application Context的基础上,提供了适合Web系统的上下文。还支持多项其他面向Web的任务,如透明处理多文件上传,自动将请求参数邦定到业务对象中等。这个模块中还包括对Struts的集成支持。

 

Spring MVC框架

虽然Spring可以轻松的与其它MVC框架(如Struts)集成,但是SpringMVC框架式利用IoC将控制逻辑和业务逻辑清晰的分量开来。

 

20. 一级,二级缓存

   ramROM相对的,RAM是掉电以后,其中才信息就消失那一种,ROM在掉
  

猜你喜欢

转载自maizi2011.iteye.com/blog/828793