当前位置: 首页 > Java培训 > JAVA面试题 > 2018java面试题文档-常见面试题汇总
2018java面试题文档-常见面试题汇总 时间:2018-01-17     来源:java面试经典

面试是公司招聘的一个非常重要的环节,能够初步的了解应聘者是不是符合公司岗位的技术需求,是对应聘者能力的一种初步的评估。

因此为了能够得到一份满意的工作,应聘者往往在面试环节上都是非常重视的,100%的人都会在面试之前或多或少的都会在面试题方面下一些功夫。

2018java面试题文档

今天就在这里为大家总结一些面试方面常见的面试题,供大家备战每一轮的面试。

1、运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

2、说出Servlet的生命周期,并说出Servlet和CGI的区别。

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

与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

3、说出ArrayList,Vector, LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

4. get和load区别;

1)get如果没有找到会返回null, load如果没有找到会抛出异常。

2)get会先查一级缓存, 再查二级缓存,然后查数据库;load会先查一级缓存,如果没有找到,就创建代理对象,等需要的时候去查询二级缓存和数据库。

5. N+1问题。

Hibernate中常会用到set,bag等集合表示1对多的关系, 在获取实体的时候就能根据关系将关联的对象或者对象集取出。

解决方法一个是延迟加载, 即lazy=true;

一个是预先抓取, 即fetch=join;

6. inverse的好处。

在关联关系中用inverse在控制由哪一端来控制关联关系。这样做有什么好处呢?举customer和order的例子来说。他们是一对多的关系,如果只单向关联,且由customer控制关联关系,则如果我想添加一个order,则先取customer, 然后getOrders得到所有的order集合,然后往集合里面多加入一个order,然后save(customer), 这样开销太大。 如果改双向关联且由order主控关系,则如果想为customer增加一个order, 则new一个order,然后给order设置customer,然后save(order)即可。

7 ,merge的含义:

//cp3.iteye.com/blog/786019 这里写的好;

如果session中存在相同持久化标识(identifier)的实例,用用户给出的对象的状态覆盖旧有的持久实例

如果session没有相应的持久实例,则尝试从数据库中加载,或创建新的持久化实例

最后返回该持久实例

用户给出的这个对象没有被关联到session上,它依旧是脱管的

8, persist和save的区别

persist不保证立即执行,可能要等到flush;persist不更新缓存;

9,.如何使用HibernateDaoSupport整合Spring和Hibernate?

答:①在Spring中配置Hibernate的会话工厂(LocalSessionFactoryBean或AnnotationSessionFactoryBean)。

②让DAO的实现类继承HibernateDaoSupport(继承getHibernateTemplate方法来调用模板方法)。

③让Spring来管理Hibernate的事务(推荐使用声明式事务)。,

10.你是如何理解“横切关注”这个概念的?

答:“横切关注”是会影响到整个应用的关注功能,它跟正常的业务逻辑是正交的,没有必然的联系,但是几乎所有的业务逻辑都会涉及到这些关注功能。通知、事务、日志、安全性等关注就是应用的横切关注功能。

11.如何理解Spring AOP中Advice这个概念的?

答:Advice在国内的很多书面资料中都被翻译为“通知”,但是很明显这个翻译无法表达其本质,有少量的读物上将这个词翻译为“增强”,这个翻译是对Advice较为准确的诠释,我们通过AOP将横切关注功能加到原有的业务逻辑上,这就是对原有业务逻辑的一种增强,这种增强可以是前置增强、后置增强、返回后增强、抛异常时增强和包围型增强。

12.什么是ORM?

答:①对象关系映射(Object-Relation Mapping,简称ORM)是一种为解决程序的面向对象模型与数据库的关系模型互不匹配问题的技术;

②ORM是通过使用描述对象和数据库之间映射的元数据(在Java中可以用XML或者注解),将程序中的对象自动持久化到关系数据库中,或者将关系数据库表中的行转换成Java对象,其本质就是将数据从一种形式转换到另一种形式。

13. Struts2 中的默认包 struts-default 有什么作用?

①. struts-default 包是 struts2 内置的,它定义了 struts2 内部的众多拦截器和 Result 类型,

而 Struts2 很多核心的功能都是通过这些内置的拦截器实现,

如:从请求中把请求参数封装到action、文件上传和数据验证等等都是通过拦截器实现的。

当包继承了struts-default包才能使用struts2为我们提供的这些功能。

②. struts-default 包是在 struts-default.xml 中定义,struts-default.xml 也是 Struts2 默认配置文件。

Struts2 每次都会自动加载 struts-default.xml文件。

③. 通常每个包都应该继承 struts-default 包。

14.Get请求和Post请求区别

答:a、Post是通过Http中的Post机制将表单中的数据提交到Action所制定的程序

Get方法是通过Url请求来提交表单数据的。

b.Get适用于传输数据量小于1K数据,执行效率高。Post传输数据量较大,但也有限量。

c.在传递过程当中get方式传递的信息,将显示在地址栏当中,而post是先将数据进行加密,然后发送,在地址栏当中没有显示。

15. servlet生命周期 (看ppt2)

答: (1)init 仅在servlet首次载入时执行一次。不是每次请求都要调用。

(2)service 在新线程中由服务器为每个请求而调用。发送到doGet,doPost等。不要覆盖这个方法!

(3)doGet, doPost, doXxx 处理GET, POST, 等请求。覆盖这些方法以提供期望的行为。

(4) destroy 在服务器删除servlet的实例时调用。不是每次请求后都调用。

16、Servlet和Jsp的区别?

答:Servlet是直接执行的文件。

Jsp是要被通过编译形成Servlet后才执行。

在MVC框架当中,jsp是用来显示和取得数据的,而servlet是作为控制器工作的。JSP在显示上有很大优势,但是在控制和业务处理上有缺陷。而servlet在程序控制上有很大优势,但是在显示和取得数据方面远远不如jsp。

17、 谈谈你对MVC的理解

答:MVC模式是"Model-View-Controller"的缩写,中文翻译为"模式-视图-控制器"。MVC应用程序总是由这三个部分组成。Event(事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了View,View会从潜在的Model中获取数据来刷新自己。MVC模式最早是smalltalk语言研究团提出的,应用于用户交互应用程序中。smalltalk语言和java语言有很多相似性,都是面向对象语言,很自然的SUN在petstore(宠物店)事例应用程序中就推荐MVC模式作为开发Web应用的架构模式。MVC模式是一种架构模式,其实需要其他模式协作完成。在J2EE模式目录中,通常采用service to worker模式实现,而service to worker模式可由集中控制器模式,派遣器模式和Page Helper模式组成。而Struts只实现了MVC的View和Controller两个部分,Model部分需要开发者自己来实现,Struts提供了抽象类Action使开发者能将Model应用于Struts框架中。

18、 能比较一下UNIX与LINUX的区别吗?

答: Linux与Unix的区别

[历史]Unix的历史久于linux. Linux的思想源于Unix

[产品]unix和linux都是操作系统的名称.但unix这四个字母除了是操作系统名称外,还作为商标归SCO所有.Unix主要有Sun 的Solaris、IBM 的AIX, HP的HP-UX,以及x86平台的的SCO Unix/Unixware

Linux商业化的有RedHat Linux 、SuSe Linux、slakeware Linux、国内的红旗等,还有Turbo Linux.

[其他区别]

linux的核心是免费的,自由使用的,核心源代码是开放的.

而unix的核心并不公开

在对硬件的要求上,linux比unix要低,没有unix那么苛刻.在安装上linux比unix容易掌握.

在使用上,linux相对没有unix那么复杂.

Unix多数是硬件厂商针对自己的硬件平台的操作系统,主要与CPU等有关,如Sun 的Solaris作为商用,定位在其使用SPARC/SPARCII的CPU的工作站及服务器上,当然Solaris也有x86的版本,而Linux也有其于RISC的版本。但确切的讲,拿RISC上的Unix与x86上的Linux进行比较不太合适。

至于价格,个人使用的Linux基本上算是免费的,不同的Linux发行厂商针对企业级应用在基本的系统上有些优化,如RedHat的Enterprise产品,这些产品包括支持服务是比较贵的。

像IBM/HP/SUN的Unix,因为主要是针对其硬件平台,所以操作系统通常在设备价格中。(没有人单独去买一个Unix操作系统的)

在性能上,linux没有unix那么全面,但基本上对个人

用户和小型应用来说是绰绰有余

19、 请你谈谈JDBC与Hibernate的关系?

答:Hibernate 是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架, Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。

另外Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。

20、EJB框架流程是什么?

答:1、创建ejb组件需要的接口和类型

2、在ejb-jar.xml这个标准的部署描述文件中描述ejb组件

2、提供一个跟容器相关的一个部署描述文件,在这个文件中指定ejb组件的jndi名(注:这个文件也可以不提供,到部署完ejb模块之后再去指定jndi)

3、将所有java文件编译成class,按照ejb应用的目录结构来存放类和配置文件

4、把ejb应用打成一个jar包,部署到j2ee服务器上,然后访问

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司

Android培训

版权所有 ,京ICP备16055225号-5,京公海网安备11010802025203号