java面试问题及答案

时间:2022-11-24 07:09:33 面试技巧 我要投稿
  • 相关推荐

java面试问题及答案

  Java面试问题对于Java程序员来说很重要,想要取得面试成功,提前了解面试题目很重要,以下是阳光网小编帮你们整理的java面试问题及答案,一起来学习啦。

java面试问题及答案

  java面试问题及答案(一)

  1.Java语言中public、private、protected三个关键字的用法,重载和重写的区别。

  作用域 当前类 同包 子类 其他

  Public √ √ √ √

  Protected √ √ √ ×

  Private √ × × ×

  Friendlly √ √ × ×

  重写:发生在父子类之间,方法名相同,参数的类型、个数、顺序相同,返回值相同,访问权限不能更封闭,抛出异常不能宽泛;

  重写:发生在同一个类中,方法名相同,单参数不同(类型不同或个数不同或参数的顺序不同),返回值可以不相同。

  2.JSP页面之间传递参数的方法有哪些?

  1)Request

  2)Session

  3)Application

  4)提交表单

  5)超链接

  3.Forward和redirect的区别?

  Forword是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL。把那个URL的响应内容读取过来,然后吧这些内容在转发给浏览器,浏览器根本不知道服务器发送的内容是从哪里来的,所以它的地址栏中还是原来的地址。

  Redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,并且从浏览器的地址栏中可以看到跳转后的'链接地址。前者更加高效,在前者可以满足需要时,尽量使用forword()方法,并且这样也有助于隐藏实际的连接;在有些情况下,比如,需要跳转到一个其他服务器上的资源,则必须使用sendRedirect()方法。

  4.Java反射机制的作用?

  1)在运行时判断任意一个对象所属的类

  2)在运行时构造任意一个类的对象

  3)在运行时判断任意一个类所具有的成员变量的方法

  4)在运行时调用任意一个对象的方法

  5.你是怎样理解java的泛型的?

  在JavaSE1.5之前,没有反省的情况下,通过对类型Object的应用来实现参数的“任意化”,“任意化”带来的缺点是要做现实的强制类型的转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现的异常,这是一个安全隐患。

  泛型是JaveSE1.5的特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称之为泛型类、泛型接口、泛型方法。

  反省的好处是编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

  6.Java源文件中是否可以包含多个类,有什么限制?

  一个java源文件可以包含多个类,每个源文件之多有一个public类。如果有的话,那么源文件的名字必须与之相同。如果源文件中没有public类,则源文件用什么名字都可以,但是最好还是具有特定的意义,免得自己都不记得里面写的是什么了。

  java面试问题及答案(二)

  1.在Java中,List是一个借口,那实现List接口的'类有哪些,有什么区别?

  ArrayList是使用数组方式存储数据,此数组元素大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。

  LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或者后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

  2.Char类型能否存储一个中文字符?为什么?

  可以。一个char是两个字节,而一个中文也是两个字节。

  3.Switch选择语句能否作用在String[字符串]上,也就是能否这么写:switch(一个字符串变量)?

  不可以,只能处理 int、byte、short、char(其实是只能处理int,其他三种是可以promotion到int类型),不能处理String.

  4.关键字final分别修饰一个类,一个方法,一个变量,各起什么作用?

  Final修饰类是不能被继承,final修饰方法不能在子类中被覆盖,final修饰变量,称之为常量,初始化以后不能改变值。

  5.启动一个县城是用run()还是start();

  Start();

  6.是否可以继承String类?

  不可以。因为String类有final修饰

  7.Java异常处理中,try{}里有一个return语句那么紧跟在这个try后的finally{}里面的code会不会被执行,什么时候被执行,在return前还是后?

  会执行,在return之前

  8.EJB包含哪3中bean?

  Session bean(会话bean),entity bean(实体bean),message bean(消息bean)

  java面试问题及答案(三)

  1.Class.forName(String className)这个方法的作用?

  通过类的全名获得该类的类对象

  2.你认为在表上建立索引可以提高数据库系统的效率吗?为什么?

  不一定。建立太多的索引将会影响更新和插入的速度,因为他需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个甚少使用的where字句单独建立索引,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。

  3.Hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)。

  在hibernate中,对象有三种状态:临时状态、持久状态和游离状态。

  临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,,如果没有变量引用这个对象,则会被jre垃圾回收机制回收掉。这个对象所保存的数据与数据库没有任何关系,除非通过session的sava或是savaorupdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象。 持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化现象进行delete操作,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。持久化对象被修改变更后,不会马上同步到数据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。

  游离状态:当session进行了close,clear或者evict后,持久化对象虽然用于持久化标识符和数据库对应记录一致的值,但是因为会话已经失效,对象不再持久化管理之内,所有处于游离状态。(也叫托管状态)。游离状态的对象与临时状态对象是十分相似的,只是他还含有持久化标识。

  4.对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的生命周期。

  5.什么是AOP和OOP,IOC和DI由有什么不同?

  1)面向对象编程(Object Oriented Programming,OOP,面向对象设计程序)是一种计算机编程架构。AOP是OOP的`延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一单行为发生变化,不必修改很多类,止血药修改这个行为就可以了。AOP就是这种实现分散关注的编程方法,他将“关注”封装在“方面”中

  2)控制反转IOC(Inversion of Control)控制指的就是程序相关类之间的依赖关系,传统观念设置中,通常由调用者来创建被调用者的实例,在Spring里,创建被调用者的工作不在由调用者来完成,而是由Spring容器完成,依赖关系被反转了,称之为控制反转,目的是为了获得更好的扩展性和良好的可维护性。依赖注入(Dependency injection)创建被调用者的工作由Spring容器完成,然后注入调用者,因此也被称之为依赖注入。控制反转和依赖注入是同一个概念。

【java面试问题及答案】相关文章:

java面试基础问题04-03

java面试基本问题04-05

Java面试问题201704-05

java面试问题及回答11-26

java面试基础题及答案04-02

java面试题目及答案04-05

java基础面试题及答案04-05

高级java面试题及答案04-04

java高级面试题及答案04-06