当前位置:文档之家› Java框架面试题总结_201104

Java框架面试题总结_201104

Java框架面试题总结_201104
Java框架面试题总结_201104

Struts 篇

1. Struts的工作流程

当客户端向浏览器发送HTTP请求时,所有浏览器请求都被提交给ActionServlet处理。

如果用户提交表单,则会将表单中的数据放入到ActionForm中。ActionServlet根据struts_config.xml文件中预先配置好的设置选择将请求转发到哪个action对象,action对象从actionForm对象中获取数据,但后调用业务逻辑组件,完成业务功能。

2. Struts的工作流程分解

Web应用如果采用struts框架,在web应用启动时就会加载并初始化ActionServlet, ActionServlet从struts_config.xml文件中读取配置信息,基本执行步骤如下:

(1)所有浏览器请求都被提交给ActionServlet处理

(2)ActionServlet根据struts_config.xml文件中预先配置好的设置,选择应该将请求转发到

哪个action对象.

(3)当用户提交表单时,一个配置好的ActionForm对象将被创建,并被填入表单中的相当

数据.

(4)Action对象从ActionForm对象中获取数据.

(5)Action对象调用业务逻辑组件完成业务功能.

3. Struts控制器组件的组成. 和控制器的主要功能

Struts控制器组件主要包括:

ActionServlet组件:充当Struts框架的中央控制器.

RequestRrocessor组件:充当每个子应用模块的请求处理器.

Action组件:负责处理一项具体的业务.

Struts控制器组件主要完成以下任务:

●接受用户请求.

●根据用户请求,调用合适的模型组件来执行相应的业务逻辑.

●获取业务逻辑执行结果.

●根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户.

4. Struts中的几个关键对象的作用(说说几个关键对象的作用)

ActionServlet类控制导航流.

ActionServlet根据URI来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层以便从数据库检索信息.

Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中并传入Action.

Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward 对象中的路径来调用页面完成响应.

Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用,哪个ActionForm类被用于传递页面数据以及哪

些ActionForward将被用于转向.

有关Action,ActionForm,ActionForward等信息,通过struts-config.xml配置文件来定义.

5. Struts工作流程图(用例图)

注: Servlet 容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类.

6. 说说MVC设计模式和它的优点

MVC是一种设计模式,.它强制性的把应用程序的输入,处理和输出分开.MVC把应用程序分成三个核心模块:模型(Model),视图(View)和控制器(Controller).他们分别处理不同的任务.

视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接受用户的输入数据,但是它不进行任何实际的业务处理.

模型是应用程序的主体部分.模型表示业务数据和业务逻辑.一个模型能为多个视图提供数据.由于同一个模型可以被多个视图重用,所以提高了应用的重用性.

控制器接受用户的输入并调用模型和视图去完成任务.

MVC的处理逻辑如下:

首先控制器接受用户请求,并决定应该调用哪个模型来进行处理,然后模型根据用户请求进行相应的业务逻辑处理,并返回数据. 最后控制器调用相应的视图来格式化模型返回的诗句,并通过视图呈现给用户.

MVC的优点:

(1)在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它

们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性.

(2)MVC的三个模块相互独立,改变其中的一个不会影响其他两个,所以根据这种设计思

想能构造良好的松耦合的构件.

(3)控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序

提供强有力的手段.给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将结果显示给用户.

7. 说说struts是如何实现MVC的 ?

Struts采用JSP作为MVC的视图, 控制器由ActionServlet和Action类来实现. 控制器负责视图和模型之间的交互. 模型由实现业务逻辑的JavaBean或EJB组件构成, 然后说说Struts的工作流程.

8. Struts优点与缺点

Struts是开源软件,使开发者能更深入的了解其内部实现机制。

Struts 优点:业界"标准"(很多成功案例),学习资源丰富。

Struts的优点主要集中体现在两个方面:Taglib和页面导航。

a、利用Struts提供的taglib可以大大节约开发时间。

b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。

c、表现与逻辑分离

d、表单验证解决了请求数据的验证问题,增强了系统健壮性。

e、便于团队开发

Struts缺点:a、大量的使用标签,对于初学者难度较大。

b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)

9 . strust的Action是不是线程安全的?如果不是有什么方式可以保证Action的线程安全?如果是,说明原因

不是. 为了确保action的线程安全, 最好的办法就是不要在action里定义实列变量.

10. Tiles框架是什么?

Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。

11. struts1.x 和struts 2 的区别

本文将从Struts1和Struts2的各个方面进行比较

12 . S truts 的常用标签库及用法

常见的struts 标签库有struts html 标签库,struts bean 标签库, struts Logic 标签库,Struts Template 标签库, Struts Nested 标签库.

HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单

Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用 Logic 标签 管理条件产生的输出和对象集产生的循环

Template 标签 随着Tiles 框架包的出现,此标记已开始减少使用 Nested 标签 增强对其他的Struts 标签的嵌套使用的能力

以下分别讲解struts 标签库的用法. Struts html 标签库

:生成html

标签

用法:

标签的action 属性用来指定当前用户提交表单后,处理用户请求的组件. 生成html 标签

该标签在表单上创建HTML 文本框字段. 用法:

property:指定字段的名字

生成html 标签

这个标签在表单上生成隐藏字段.隐藏字段用于在表单上存放不希望让用户看到或不允许修改的信息.

生成html 标签

标签生成表单的提交按钮

用法:submit

生成html 标签

标签生成表单复位按钮

用法:reset

在表单上生成取消按钮

标签用于生成表单取消按钮

用法:cancel

:生成html 元素

用于生成单选按钮

用法:

单选按钮需要确保property一样,只是value值不一样就可以了.

:生成复选框

用法: 篮球

足球

乒乓球

复选框按钮需要确保property一样,value的值不同就可以了.还需要注意的是复选框的值需要写在标签按钮的最后面的.

如果应用中有多个Checkbox,并且希望ActionFrom Bean 中用单个数组表示,都可以采用. 的使用方法如下:

(1)在Action Form 中定义一个数组,用来存放checkBox的值,

(2)在表单中加入元素,通过设置property=”strArray” 来把它和ActionFrom

Bean 关联.

(3)对于每个元素,设置它的初始值.

value1

下拉列表用于生成html 元素,提供从html表单中上传文件的功能.

标签可以方便的实现文件上传的功能.样列代码如下:

使用标签要注意以下几点:

(1)标签必须嵌套在标签中

(2)标签的method属性必须设置为post

(3)标签的编码类型emctype属性必须设置为” multipart/form-d ata”

(4)标签必须设置property属性,这个属性和ActionFrom Bean中的FormFile类型

的属性对应.

在ActiomForm中设置FormFile属性:

在actionForm中设置一个名为file的属性,这个属性必须为org.apache.struts.upload.FormFile 类型.代码如下:

标签:用于输出错误消息.

标签可以放在网页的任何地方,既可以位于HTML标签内,也可以位于HTML 标签外,标签输出的错误消息和它在网页上的位置有关.标签具有以下重要的属性:

name:指定ActionMessage对象存放在request或sessios范围内的属性key.标签处理类将根据

这一属性的key来检索request或session范围的ActionMessage对象.默认值为Globals.ERROR_KEY.

Property:指定消息的属性.如果此项没有设置,将显示ActionMessages对象中的所有的ActionMessage.

Bundle:指定Resource Bundle(资源包) ,如果此项没有设置.将从应用默认的Resource Bundle 中获取消息文本. [关于标签的用法详见:精通struts p326_p328].

错误消息的来源

标签在request或session范围内寻找ActionMessages(或其子类ActionErrors)集合对象.在从ActionMessages集合对象读取ActionMessage对象,把ActionMessage包含的消息文本显示到网页上..

在ActionForm Bean和Action类中都可以生成ActionMessages对象.ActionForm Bean的validate() 方法执行表单验证,返回ActionErrors对象,Struts控制器组件RequestProcessor(请求处理器)然后把ActionErrors对象存放在request范围内,存放时的属性key为Globals.ERROR_KEY .

以下是HtmlErrorForm 的validate() 方法:

对象.以下是helloapp应用的LogonAction的execute()方法;

以上代码先创建了一个ActionMessages对象,它用来存放ActionMessage对象,最后调用

Action基类的saveErrors()方法,saveErrors()方法把ActionMessages 对象保存在request范围内.

标签:

用于显示正常消息的代码如下:

name:指定actionMessages对象存放在request或session范围内的key.,标签处理类将根据这一属性key来检索request或session范围的ActionMessages对象.

Message属性:指定消息的来源.

Id属性: 用来命名从消息集合中检索出的每个ActionMessage对象.它和标签的name属性匹配.

Struts bean标签库

标签用于输出Resource Bundle 种的一条消息.标签的

bundle属性指定Resource Bundle 它和struts配置文件的元素的key属性匹配.如果没有设置bundle 属性,就采用默认的Resource Bundle.

标签的key属性直接指定消息key. Bundle属性指明资源文件的struts-config.xml文件种的配置的key值.

例如:

(详细参照:精通struts p339)

标签

标签用于在网页上输出某个Bean 或它的属性的内容.

标签可以输出单个字符串,或责一个对象的某个属性,或责通过迭代器遍历集合的所有值

标签的name属性指定已经存在的变量.例如:

在action中得到一个字符串的值,然后在页面上显示出来

如果希望输出Bean的某个属性值,应该同时设置标签的name属性和property 属性. Property属性指定Bean的属性.例如:

Struts Logic标签库

:判断变量中是否包含指定的常量字符串

:判断变量中是否不包含指定变量的类

标签

标签判断指定变量是否为空字符串.

例子: 以下代码先定义一个字符串变量emptyString ,它是空字符串.接下来标签判断emptyString变量是否为空字符串.其判断结果为true..因此将执行标签主体的内容.

标签是Logic标签中最复杂的标签.也是用途最广的一个标签.它能够在一个循环中遍历数组,Collection,Enumeration,Iterator 或Map中的所有元素.

一:遍历集合

的name属性指定需要进行遍历的集合对象.它每次从集合中检索出一个元素,然后把它存放在page范围内.并以id属性指定的字符串来命名这个元素.例如:

历集合中的所有元素.offset属性指定开始遍历的起始位置,默认值为”0”,表示中集合的第一个元素开始遍历,indexId属性定义一个代表当前别遍历的元素序号的变量.整个变量存放在

1.Cat

2.Bird

设置被遍历的变量

设置name属性,name属性指定需要遍历的集合或map.例如:

设置name属性和property属性,name属性指定一个javaBean,property属性指定javaBean的一个属性.这个属性为需要遍历的集合或map. 例如:

设置collection 属性,collection属性指定一个运行时表达式,表达式的运算结果为需要遍历的集合或map.例如:

13、JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE 用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>

Ajax 篇

1.ajax是什么

Ajax 是Asynchronous J avaScript and XML(以及DHTML 等)的缩写。ajax不是一项新

技术,只是多种技术的综合,或者是设计方式.包括javascript,xhtml和css,dom,xml和XSTL,xmlHttpRequest等技术.

2.ajax实现的原理

ajax采用异步传输方式, 用户触发事件和向服务器发起请求是在一个线程上. Ajax主要是通过XMLHTTPRequest对象调用服务端方法,然后将服务端返回的数据显示在客户端.

3.ajax框架的基本流程

对象初始化→发送请求→服务器接受→服务器返回--.>客户端接受→修改客户端页面内容。

4.dwr的实现原理.

Dwr是ajax的开源框架。dwr包含两个主要部分:其一是运行在浏览器客户端的javascript, 这部分被用来与服务端通信,并更新页面内容; 其二是运行在服务器端的java servlet,这部分用来处理请求将响应结构发送给浏览器.

5.ajax 开发步骤.

(1)初始化xmlHttpRequest 对象.

(2)设置xmlHttpRequest对象的onreadystatechange属性,指定服务器返回响应数据时要

调用的回调函数. 即指定相应处理函数.

(3)调用xmlHttpRequest对象的open方法创建http请求.

(4)调用xmlHttpRequest对象的setResourceHeader等方法,设置必要的http请求头信息.

(5)调用xmlHttpRequest对象的send方法,发送之前创建的http请求.

(6)根据xmlHttpRequest对象的open方法参数,决定等待或者不等到服务器返回响应数

据,如果服务器返回响应数据,则将控制权交给之前设置的回调函数.

Spring 篇

一. 基础知识

1.对IOC的理解.

IOC的全称是: Inversion of Control(即: 控制反转). 理解: 在传统的应用程序中,控制权在应用程序本身,程序的控制流程完全由开发者控制。在IOC容器中,控制权发生了反转:从应用程序转移到了IOC容器。组件不再由应用程序负责创建和配置,而是由IOC容器负责,应用程序只需要直接使用已经创建并配置好的组件。

为了让组件能在IOC容器中被“装配”出来,需要某种“注入”的机制,才能将一种组件“注入”到另一种组件中。简单来说,依赖注入解决了最主要的问题:将组件的配置与使用相分离,并且由IoC容器负责管理组件的生命周期。

简单来说: 控制反转就是由容器控制程序之间的(依赖)关系.

2.依赖注入的三种实现形式?

a.接口注入(Interface Injection)说明: 通过实现一个接口来实现对依赖对象的

注入.

b.设值方法注入(Setter注入). 说明: 对象创建之后,将被依赖对象通过set方法设

置进去.

c.构造方法注入(Constructor injection). 说明: 对象创建时,被依赖对象以构造

方法参数的方式注入.

说明: Spring两种依赖注入的类型分别是setter注入和构造方法注入。

setter注入:一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下:

Spring会调用setName方法来只是name熟悉为tom

我们会在创建bean实例的时候以new namebean(“tom”)的方式来设置name属性, Spring 配置文件如下:

3.Setter注入和构造方法注入比较

Setter注入的优点:

(1)与传统的JavaBean的写法更相似,程序员更容易理解、接受,通过setter方式设定依

赖关系显得更加直观、明显;

(2)对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring

在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致死你功能下降。而使用设置注入,则避免这下问题; 尤其在某些属性可选的情况下,多参数的构造器更加笨拙。

构造注入的优点:

(1)构造注入可以再构造器中决定依赖关系的注入顺序,优先依赖的优先注入。

(2)对于依赖关系无须变化的Bean,构造注入更有用处;因为没有setter方法,所有的依

赖关系全部在构造器内设定,因此,不用担心后续代码对依赖关系的破坏。

(3)依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组

件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则;

建议采用以设置注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设置注入。

4.对AOP的理解,以及AOP在项目中是如何使用的?

AOP(Aspect Oriented Programming), 也就是面向切面编程,也有译作面向方面编程。AOP是一种编程思想. 在传统的面向对象(Object-Oriented Programming,OOP)编程中,对垂直切面关注度很高,横切面关注却很少,也很难关注。也就是说,我们利用OOP思想可以很好的处理业务流程,却不能把系统中的某些特定的重复性行为封装在某个模块中。比如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程种嵌入大量的日志记录代码。无论是对业务代码还是对日志记录代码来说,今后的维护都是非常复杂的。由于系统种嵌入了这种大量的与业务无关的其它重复性代码,系统的复杂性、代码的重复性增加了,从而使bug的发生率也大大的增加。IOC使软件组件松散连接成为可能,AOP让你能够捕捉系统中经常使用的功能,把他转化为组件.

简单的说:面向切面编程通过提供另外一种思考程序结构的途径来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面。切面能对关注点进行模块化。

AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns。

AOP的应用:例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管

理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。

5.AOP的概念和术语

方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。

连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。

通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。通知类型将在下面讨论。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。

切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。

引入(Introduction):添加方法或字段到被通知的类。Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。

目标对象(Target Object):包含连接点的对象,也被称作被通知或被代理对象。

AOP代理(AOP Proxy):AOP框架创建的对象,包含通知。在Spring中,AOP代理可以是JDK动态代理或CGLIB代理。

编织(Weaving):组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

说明:Target和advice的概念:

1.target (目标): 如果一个对象的执行过程受到某个AOP的修改,那么它就叫一

个目标对象.目标对象也常称为被通知对象.

2.advice(通知): 在某一个特定的联接点处运行的代码称为”通知”.通知有很多

种,比如在联接点之前执行的前置通知(before advice)和在联接点之后执行的

后置通知(after advice).

6.Spring中有五中不同的通知:

前置通知(Before advise):在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程。(除非它抛出一个异常)

后置通知(After returning advise):在某连接点正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回。

异常通知(After throwing advise):在方法抛出异常退出时执行的通知。

最终通知(After(finally) advise):当某连接点退出的时候执行的通知(无论是正常返回还是异常退出)

环绕通知(Around Advise):包围一个连接点的通知,如方法调用。这是最强大的一种通知类型。环绕通知可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它自己的返回值或抛出异常来结束执行。

环绕通知是最常用的通知类型。

7.Spring bean的生命周期:

定义->初始化->使用->销毁

8.Bean的作用域

(1) singleton----在每个Spring IoC容器中一个bean定义对应一个对象实例。

(2) prototype----一个bean定义对应多个对象实例。

(3) request----在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将

会有各自的bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的Spring ApplicationContext情形下有效。

(4) session----在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基

于web的Spring ApplicationContext情形下有效。

(5) global session----在一个全局的HTTP Session中,一个bean定义对应一个实例。典

型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

9.Spring自动代理

Spring自动代理主要有三个选择:

1.使用BeanNameAutoProxyCreator(bean名称自动代理生成器)类: 该类允许我们指明一组

bean名称以及实施在他们上的一组通知和通知者. Spring会自动用指定的通知代理这些Bean.

2.使用DefaultAdvisorAutoProxyCreator(默认通知者自动代理生成器)类: 这个自动代理类

非常强大,他自动用所有可行的通知者代理ApplicaitonContext中的所有Bean.该类只接受通知者,不接受通知,因为它依赖通知者的切入点来决定该通知者能够通知给定的bean. 3.使用元数据驱动的自动代理

10.Spring 事务特点

事务是用户定义的一个数据库操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。事务具有四个特性:

1. 原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列。这些操作要么完整的被全部执行,要么一步也不做。是一个逻辑工作单位。

2.一致性:一个事务独立执行的结果将保持一致性,即数据不会因为事务的执行而遭受破坏。

3. 隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。

4.持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

11.谈谈Spring 事务的理解

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。

开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

spring提供了两中方式来实现事务管理:声明式事务和编程式事务。

编程式事务:比较灵活,但是代码量大,存在重复的代码比较多;

声明式的比编程式的更灵活。

11.1 编程式事务

Spring提供两种方式的编程式事务管理,分别是:使用TransactionTemplate和直接使

用PlatformTransactionManager。

a. TransactionT empale采用和其他Spring模板,如JdbcTempalte和HibernateTemplate一样的方法。它使用回调方法,把应用程序从处理取得和释放资源中解脱出来。如同其他模板,TransactionTemplate是线程安全的。

b. 也可以使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用给你的bean传递一个你使用的PlatformTransaction对象。然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。如下片段:

11.2 声明式事务

声明式事务是通过AOP实现的。大多数Spring用户选择声明式事务管理,这是最少影响应用代码的选择,因而这是和非侵入性的轻量级容器的观念是一致的。

声明式事务通常通过TransactionProxyFactoryBean设置Spring事务代理。

12.编程式事务和声明式事务如何选择?

当你只有很少的事务操作时,编程式事务管理通常比较合适。例如:如果你只有一个Web 应用,其中只有特定的更新操作有事务要求,你可能不愿意使用Spring或其他即使设置事务代理。这种情况下,使用TransactionTemplate可能是个好方法。只有编程式事务管理才能显示的设置事务名称。

如果你的应用中存在大量事务操作,那么声明式事务管理通常是值得的。它将事务管理与业务逻辑分离,而且在Spring中配置也不难。使用Spring,而不是EJB CMT,声明式事务管理在配置上的成本极大的降低了。

二. Spring应用

13.spring中的BeanFactory与ApplicationContext的作用和区别?

答: BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责bean的声明周期。

ApplicationContext是BeanFactory的扩展,除了提供上述BeanFactory所能提供的功能之外,功能得到了进一步的增强,比如容易与Spring AOP集成,资源处理(国际化处理),事件传递

及各种不同应用层的context实现0.

14.Spring里面applicationContext.xml文件能不能改成其他文件名?

答: ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。缺省情况下,它会在WEB-INF/applicationContext.xml文件找Spring的配置。你可以通过定义一个元素名字为”contextConfigLocation”来改变Spring配置文件的位置。示例如下:

15.spring中commons-logging.jar的作用

commons-logging.jar包是使用spring的必备包。(位置在spring-framework-2.5.6. SEC01\lib\jakarta-commons)用来记录程序运行时的活动的日志记录。

16.spring中读取xml配置文件、获取bean的几种方式

获取Spring框架管理的类实例的方法有多种,如下:

方法一:在初始化时保存ApplicationContext对象

代码:

这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。

方法二:通过Spring提供的工具类获取ApplicationContext对象

代码:

说明:

这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。

上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。

方法三:继承自抽象类ApplicationObjectSupport

说明:

抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。Spring初始化时,会通过该抽象类的setApplicationContext (ApplicationContext context)方法将ApplicationContext 对象注入。

方法四:继承自抽象类WebApplicationObjectSupport

说明:

类似上面方法,调用getWebApplicationContext()获取WebApplicationContext

方法五:实现接口ApplicationContextAware

说明:

实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。

以上方法适合不同的情况,请根据具体情况选用相应的方法。

这里值得提一点的是,系统中用到上述方法的类实际上就于Spring框架紧密耦合在一起了,因为这些类是知道它们是运行在Spring框架上的,因此,系统中,应该尽量的减少这类应用,使系统尽可能的独立于当前运行环境,尽量通过DI的方式获取需要的服务提供者。

本人认为,方法五比较可行,可以设计一个工具类,专门来获取Spring中的类。减少对业务代码的侵入性。

17.Spring 启动参数contextConfigLocation 和ContextLoaderListener 理解

当web服务器(tomcat)启动时,会加载所有工程中的web.xml文件. 在web.xml文件中会配置这2个属性. 配置文件如下:

说明:

context-param是application范围内的参数,存放在servletcontext中。此所设定的参数,在JSP内页中可以使用${initParam.param_name}来取得,若在Servlet可以使用String param_name = getServletContext().getInitParamter(“param_name”);来取得。在此程序中,参数contextConfigLocation用来定义要装入的Spring配置文件。如果想装入多个配置文件,可以在标记中用逗号作为分隔符。

默认情况Spring的配置文件为applicationContext.xml。如果spring的配置文件改变了,就一定要将context-param添加到web.xml中。如果是默认情况则不需要配置。

java经典面试题汇总

Java基础方面: 1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域当前类同一package 子孙类其他package public √√√√ protected √√√ × friendly √√ × × private √ × × × 不写时默认为friendly 2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现 3、Static Nested Class 和 Inner Class的不同 答:Nested Class (一般是C++的说法),Inner Class (一般是JA V A的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象 4、&和&&的区别 答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and) 5、Collection 和 Collections的区别 答:Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作 6、什么时候用assert 答:assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的 7、String s = new String("xyz");创建了几个String Object 答:两个,一个字符对象,一个字符对象引用对象 8、Math.round(11.5)等於多少? Math.round(-11.5)等於多少 答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错 答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(可以正确编译) 10、Java有没有goto 答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法 答:数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型

java基础笔试题(答案已整理)

Java基础试题 一:选择题(1*30=30)(题目写在答题纸上面) 1:Java 提供哪几种运算符多选( abcd )。 A)算术运算符B)位运算符 C)关系运算符D)逻辑运算符E)条件运算符 2:https://www.doczj.com/doc/88889216.html,ng包的()方法比较二个对象是否相等返回true.。(b) A:toString() B:equals() C:compare D:以上都不正确 3:下列对Java 的变量与函数说法正确的是多选(ace )。 A)变量是用来保存数据的B)变量是用来实现操作过程的C)函数是用来实现操作过程的D)函数是用来保存数据的E)函数的参数是数据的入口 4:已知:int[] a = new int[100];在下列给出的数组元素中,非法的是。(d) A:a[0] B:a[1] C:a[99] D:a[100] 5:在java中,一个类可同时定义许多同名的方法,在这些方法的形式参数个数,类型或顺序各不相同,传值也可以各不相同。这种面向对象程序的特性称为。(c) A:隐藏B:覆盖C:重载D:Java不支持此特性 6:()是一组常量和抽象方法的集合。(d) A:实例B:类C:包D:接口 7:下面关于数组说法正确的是多选(abcde)。 A)一维数组实质上是相同类型变量的列表 B)创建一个数组首先定义数组变量所需的类型 C)char c[]=new char[26];可声明一个含有26 个元素的char型数组 D)当为一个多维数组的时候分配内存时,仅需要为第一指定内存,然后再分配其他维的存E)int twain[][] = new int[4][5];可声明一个二维数组 8:Java源文件和编译后的文件扩展名分别为。(b) A:.class和.java B:.java各.class C:.class和.class D:.java和.java 9:设x=5;则y=x--和y=--x的结果,使y分别为。(c) A:5,5 B:5,6 C:5,4 D:4,4 10:若x是float类变量,x=10/4;则x 的值是。(b) A:2 B:2.0 C:2,5 D:编译错误 11:.下面方法中,用于调度线程使其运行的是?多选(bc ) A. init() B. start() C. run() D. resume() E. sleep() 12.下面哪种情况能实现自动转换多选(ace )。 A)byte 型转换成int 型B)int 型转换成byte 型 C)float 型转换成double型D)double 型转换成int 型E)char型转换成int 型 13:下列那些是正确的JAVA字符串?多选(abd )。 A. "\"\"" B. "Oxzabc" C. "\"\" D. "\t\t\r\n" E. "boolean"5 14:在使用super 和this关键字时,以下描述正确的是。(a) A::在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B:super()和this()不一定要放在构造方法内第一行

常见的Java上机面试题

常见的Java上机面试题 在程序员面试中,主要的考试形式分为笔试和上机编程考试两部分。笔试主要考查面试者的基础是否牢固;上机考试主要考查面试者的实际开发能力和技术技巧。 上机编程考试,要求面试者能够根据题目的要求,使用一种编程工具,编写全部代码并调试运行。这主要是考查面试者代码书写和编程的熟练程度。值得注意的是,这类面试题要求能够正确运行,往往要求面试者使用比较原始的JDK编译方式也就是使用DOS命令提示符,而不是提供Eclipse或者JBuilder等快速开发环境。本章将经常出现的上机编程题进行分类,希望能够给读者带来帮助和启示。 17.1 Java基础编程试题(1) 在上机编程类的面试题中,大部分涉及基础编程,例如算法、语法、常用的类等知识点。 面试题1 怎样截取字符串 考题题干 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出"我ABC",而不是"我ABC+汉的半个"。 试题分析 本面试题容易产生困惑的是中文字符和英文字符,在这里需要考虑汉字和英文字符的占用字节数问题,中文字符占两个字节,英文字符占一个字节,理解了这个,就很容易完成本题了。 参考答案 具体代码实现如下: 1.package core_java; 2.import java.util.Scanner; 3.public class InterceptionStr { 4.static String ss; //要进行截取操作的字符串 5.static int n; //截取的字符串的字节数 6.public static void main(String[] args) { 7. System.out.println("请输入字符串:"); 8. Scanner scStr = new Scanner(System.in); //从键盘获取字符串 9. ss = scStr.next(); // 将Scanner对象中的内容以字符串的形式取出来 10. System.out.println("请输入字节数:"); 11. Scanner scByte = new Scanner(System.in); //从键盘获取字符串 12. n = scByte.nextInt(); //将Scanner对象中的内容以数值的形式取出来

JAVA框架面试题汇总

1.SpringMVC Framework的理解: 1、它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件。并且和Spring提供的其他基础结构紧密集成 2、不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的) 3、可以任意使用各种视图技术,而不仅仅局限于JSP 4、支持各种请求资源的映射策略 5、它应是易于扩展的 2.简单的谈一下SpringMVC的工作流程? 流程? 1、用户发送请求至前端控制器DispatcherServlet? 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。? 3、处理器映射器找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。? 4、DispatcherServlet调用HandlerAdapter处理器适配器? 5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。? 6、Controller执行完成返回ModelAndView? 7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet? 8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器? 9、ViewReslover解析后返回具体View? 10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。? 11、DispatcherServlet响应用户 3.如何解决POST请求中文乱码问题,GET的又如何处理呢? 在web.xml中加入: . .CharacterEncodingFilter . .???? .????????encoding .?????? utf-8

2019最新Java面试题,常见面试题及答案汇总

ava最新常见面试题+ 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示: 可能对于初学者不需要后面的框架和JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。 适宜阅读人群 需要面试的初/中/高级java 程序员 想要查漏补缺的人 想要不断完善和扩充自己java 技术栈的人 java 面试官 具体面试题 下面一起来看208 道面试题,具体的内容。 一、Java 基础 1.JDK 和JRE 有什么区别? 2.== 和equals 的区别是什么? 3.两个对象的hashCode()相同,则equals()也一定为true,对吗? 4.final 在java 中有什么作用? 5.java 中的Math.round(-1.5) 等于多少? 6.String 属于基础的数据类型吗? 7.java 中操作字符串都有哪些类?它们之间有什么区别? 8.String str="i"与String str=new String(“i”)一样吗? 9.如何将字符串反转? 10.String 类的常用方法都有那些? 11.抽象类必须要有抽象方法吗? 12.普通类和抽象类有哪些区别? 13.抽象类能使用final 修饰吗?

14.接口和抽象类有什么区别? 15.java 中IO 流分为几种? 16.BIO、NIO、AIO 有什么区别? 17.Files的常用方法都有哪些? 二、容器 18.java 容器都有哪些? 19.Collection 和Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和Hashtable 有什么区别? 22.如何决定使用HashMap 还是TreeMap? 23.说一下HashMap 的实现原理? 24.说一下HashSet 的实现原理? 25.ArrayList 和LinkedList 的区别是什么? 26.如何实现数组和List 之间的转换? 27.ArrayList 和Vector 的区别是什么? 28.Array 和ArrayList 有何区别? 29.在Queue 中poll()和remove()有什么区别? 30.哪些集合类是线程安全的? 31.迭代器Iterator 是什么? 32.Iterator 怎么使用?有什么特点? 33.Iterator 和ListIterator 有什么区别? 34.怎么确保一个集合不能被修改?

百一测评——Java经典面试题 带答案

职业技能题库&在线云笔试平台https://www.doczj.com/doc/88889216.html, 试卷名称:Java经典面试题带答案 试卷描述:java笔试题目、招聘笔试、微信考试、在线考试 试卷链接:https://www.doczj.com/doc/88889216.html,/store/open/paperInfo/41651 试卷限时:50分 一.单项选择题 每题分值:2.5分 是否题目乱序:是 是否选项乱序:是 是否可回溯:是 难度:中 1.[单选]Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.[单选]下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code C.Java程序经编译后会产生DLL D.以上都不正确

职业技能题库&在线云笔试平台https://www.doczj.com/doc/88889216.html, 答案:B 3.[单选]下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名 C.constructor在一个对象被new时执行 D.一个class只能定义一个constructor 答案:C 4.[单选]提供Java存取数据库能力的包是() A.java.sql B.java.awt C.https://www.doczj.com/doc/88889216.html,ng D.java.swing 答案:A 5.[单选]下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.[单选]执行如下程序代码 a=0;c=0;

职业技能题库&在线云笔试平台https://www.doczj.com/doc/88889216.html, do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环 答案:C 7.[单选]下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.[单选]下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象

JAVA基础面试题经典

JAVA基础面试题经典

第一阶段题库 基础知识部分: 1.JDK是什么?JRE是什么? a)答:JDK:java开发工具包。JRE:java运行时 环境。 2.什么是java的平台无关性? a)答:Java源文件被编译成字节码的形式,无论 在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处运行。这就是java的跨平台性。 3.在一台电脑上配置java环境,path起什么作 用?如何配置? a)答:path的作用是在DOS环境下,能在任意 位置使用JDK目录中bin文件夹中的可执行程序,来编译执行java程序。 b)在环境变量中找到path变量,把bin文件夹 的绝对路径加上即可。 4.什么样的标识符是合法的? a)由字母、数字、_和$组成,长度不限。其中字 母能够是大写或小写的英文字母,数字为0到9。

b)标识符的第一个字符不能是数字。 c)标识符区分大小写。 d)标识符不能包含空格。 5.Java有几种基本数据类型? a)byte,short,int,long,char,boolean,float,double 6.什么是隐式类型转换?什么是显示类型转换? a)当将占位数少的类型赋值给占位数多的类型 时,Java自动使用隐式类型转换。 b)当把在级别高的变量的值赋给级别底变量时, 必须使用显示类型转换运算。 7.&&和&区别,||和|区别? a)&&和||是短路与,短路或,当左边的表示式能 判断当前结果,则不判断右边的表示式。 b)而& 和|则将两边的表示式都运算完毕后,再 算结果。 8.break,continue区别? a)break结束最近的一个循环,continue结束当 次循环,进入下次循环。 9.类的命名规则是什么? a)如果类名使用拉丁字母,那么名字的首写字母 使用大写字母。

Java经典面试题大全_带答案

Java经典面试题带答案一、单项选择题 1.Java是从()语言改进重新设计。 A.Ada B.C++ C.Pasacal D.BASIC 答案:B 2.下列语句哪一个正确() A.Java程序经编译后会产生machine code B.Java程序经编译后会产生byte code(字节码) C.Java程序经编译后会产生DLL D.以上都不正确 答案:B 3.下列说法正确的有() A.class中的constructor不可省略 B.constructor必须与class同名,但方法不能与class同名C.constructor在一个对象被new时执行(构造器) D.一个class只能定义一个constructor 答案:C 4.提供Java存取数据库能力的包是() A.Java.sql /sql/数据库还有Oracle 也是一种数据库 B.java.awt C.https://www.doczj.com/doc/88889216.html,ng D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>0); 后,C的值是() A.0 B.1 C.-1 D.死循环

答案:C 7.下列哪一种叙述是正确的() A.abstract修饰符可修饰字段、方法和类 B.抽象方法的body部分必须用一对大括号{}包住 C.声明抽象方法,大括号可有可无 D.声明抽象方法不可写出大括号 答案:D 8.下列语句正确的是() A.形式参数可被视为localvariable B.形式参数可被字段修饰符修饰 C.形式参数为方法被调用时,真正被传递的参数 D.形式参数不可以是对象 答案:A 9.下列哪种说法是正确的() A.实例方法可直接调用超类的实例方法 B.实例方法可直接调用超类的类方法 C.实例方法可直接调用其他类的实例方法 D.实例方法可直接调用本类的类方法 答案:D 二、多项选择题 1.Java程序的种类有() A.类(Class) B.Applet C.Application D.Servlet 2.下列说法正确的有() A.环境变量可在编译sourcecode时指定 B.在编译程序时,所能指定的环境变量不包括class path C.javac一次可同时编译数个Java源文件 D.javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD 3.下列标识符不合法的有() A.new B.$Usdollars C.1234 D.car.taxi 答案:ACD 4.下列说法错误的有() A.数组是一种对象 B.数组属于一种原生类 C.intnumber=[]={31,23,33,43,35,63} D.数组的大小可以任意改变 答案:BCD 5.不能用来修饰interface的有()

java面试题-经典选择题部分

1 、给出如下代码: class Test{ private int m; public static void fun() { // some code... } } 如何使成员变量m 被函数fun() 直接访问? C A 、将private int m 改为protected int m B 、将private int m 改为public int m C 、将private int m 改为static int m D 、将private int m 改为int m 2 、下面哪个函数是public void example(){...} 的重载函数?D A 、private void example( int m){...} B 、public int example(){...} C 、public void example2(){...} D 、public int example ( int m, float f){...} 3 、给出下面的代码段: public class Base{ int w, x, y ,z; public Base(int a,int b) { x=a; y=b; } public Base(int a, int b, int c, int d) { // assignment x=a, y=b w=d; z=c; } } 在代码说明// assignment x=a, y=b 处写入如下哪个代码是正确的?D A 、Base(a,b); B 、x=a, y=b; C 、this(a),this(b); D 、this(a,b); 4 、已知如下定义:String s = "story"; 下面哪个表达式是合法的?A A 、s += "books"; B 、char c = s[1]; C 、int len = s.length;

Java经典面试编程设计题(含答案)

1、程序实现目标:输入一个字符串,将其各个字符对应的ASCII值加5后,输出结果。程序要求:该字符串只包含小写字母,若其值加5后的字符值大于'z',将其转换成从a开始的字符。 1. package com.iotex; 2. public class StringParseASCII { 3. 4. public static void main(String[] args) { 5. System.out.print(stringParseASCII("abx")); 6. } 7. 8. public static String stringParseASCII(String str){ 9. StringBuffer result = new StringBuffer(); 10. char tmp; 11. for(int i = 0;i 'z') { 14. result.append('a'); 15. }else { 16. result.append(tmp); 17. } 18. } 19. 20. return result.toString(); 21. } 22. 23. } 1. package com.iotex; 2. 3. public class StringParseASCII { 4. 5. public static void main(String[] args) { 6. System.out.print(stringParseASCII("abx")); 7. } 8. 9. public static String stringParseASCII(String str){ 10. StringBuffer result = new StringBuffer(); 11. char tmp; 12. for(int i = 0;i 'z') { 15. result.append('a'); 16. }else { 17. result.append(tmp);

java面试题大全(整理版)

2018年(整理版) 1、面向对象的特征有哪些方面? - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承的类叫父类(超类、基类)、得到继承的类叫子类(派生类)。 - 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(可以想想普通洗衣机和全自动洗衣机的差别,明显全自动洗衣机封装更好因此操作起来更简单;我们现在使用的智能手机也是封装得足够好的,因为几个按键就搞定了所有的事情)。 - 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情。实现多态需要做两件事:1). 方法重写(子类继承父类并重写父类中的方法);2). 对象造型(用父类型引用引用子类型对象,

这样同样的引用调用同样的方法就会根据子类对象的不同而表现出不同的行为) 2、访问修饰符public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引用类型(reference type)。 4、float f=3.4;是否正确? 答:不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F;。

java编程常见面试题目

第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和Inner Class的不同, 第四,&和&&的区别。 第五,HashMap和Hashtable的区别。 第六,Collection 和Collections的区别。 第七,什么时候用assert。 第八,GC是什么? 为什么要有GC? (基础)。 第九,String s = new String("xyz");创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 第十二,sleep() 和wait() 有什么区别? 搞线程的最爱 第十三,Java有没有goto? 第十四,数组有没有length()这个方法? String有没有length()这个方法?

第十五,Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 第十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 第十七,给我一个你最常见到的runtime exception。 第十八,error和exception有什么区别? 第十九,List, Set, Map是否继承自Collection接口? 第二十,abstract class和interface有什么区别? 第二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 第二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 第二十三,启动一个线程是用run()还是start()? 第二十四,构造器Constructor是否可被override? 第二十五,是否可以继承String类? 第二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法? 第二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

这76道Java面试题及答案

这76道Java面试题及答案,祝你能成功通过面试 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2、Java有没有goto? java中的保留字,现在没有在java中使用。 3、说说&和&&的区别。 &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。 &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。 &还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作。 4、在JAVA中如何跳出当前的多重嵌套循环? 在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号的break语句,即可跳出外层循环。

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String 上? 在switch(expr1)中,expr1只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char 都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。显然,long和String类型都不符合switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于swtich语句中。 6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 对于short s1 = 1; s1 = s1 + 1;由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。 对于short s1 = 1; s1 += 1;由于 +=是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。 7、char型变量中能不能存贮一个中文汉字?为什么? char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。 8、用最有效率的方法算出2乘以8等於几? 2 << 3,

Java经典面试笔试题及答案

1.什么是对象序列化,为什么要使用? 所谓对象序列化就是把一个对象以二进制流的方式保存到硬盘上。好处:方便远程调用。 2.值传递与引用传递的区别? 所谓值传递就是把一个对象的值传给一个新的变量,但是系统会给这个新的变量开辟一个新的内存空间。不会改变原有的值所谓引用传递就是把一个对象在堆中保存的数据传递给一个变量,此时新的变量与原有的变量对应同一个内存存储空间,当新的变量修改对象的属性时,内存中的数据也会修改。 3.接口与抽象类的区别? 1:接口里面不可以实现方法体,抽象类可以实现方法体。 2:接口可以多继承接口,抽象类不可以。 3:接口需要被子类实现,抽象类是要被子类继承(单一继承)。 4:接口中只能有公有的方法和属性而且必须赋初始值,抽象类中可以有私有方法和属性. 5: 接口中不能存在静态方法,但属性可以和final,抽象类中方法中可以有静态方法,属性也可以。 4.谈谈继承,为什么要使用继承? 所谓继承就是找出几个类中共同的部分,提取出来作为父类。而子类只需要继承父类,就可以共享父类的方法。 使用继承能够减少重复的代码。 5.方法重载的好处?

所谓重载就是在一个类中可以定义多个相同的方法,但是方法的参数类型和参数的个数以及顺序要不同。 重载的好处就是能够让我们很快的掌握该方法的功能,我们只要要记住该方法就能很快的理解该方法的参数以及参数的作用 6.项目中印象最深的部分? 我觉得在该项目中我体现到了反射技术的强大之处,原来我一直不清楚反射是一种什么样的技术,只知道一些概念上的知识,经过这个项目之后,终于知道该怎样灵活运用反射,以及在什么时候运用。 谈谈你对面向对象的理解与认识? 我觉得使用面向对象这种思维的方式比较符合我们人类的思想,不需要去学习一些什么新的思考方式,就按照现实生活做的一些故事就能让人理解该内容的知识以及他们的作用。 我的看法就是: 1:当加入新的功能的时候不会修改原有的代码。(面向接口编程) 2: 当我们写的一个类可以重复的运用在其他项目中。(代码的复用性) 3:当写一个新类的时候要考虑到他的可扩展性。(灵活性) 7.谈谈集合框架? 集合框架分为三部分,第一部分是collection接口,第二部分是Map接口、第三部分是collections帮助类 首先说一下collection接口,collection接口下面的接口分为set 接口、list接口,在往下面就是他们一些实现类。

JAVA基础面试题(经典)

基础知识部分: 1. JDK是什么?JRE是什么? a) 答:JDK:java开发工具包。JRE:java运行时环境。 2. 什么是java的平台无关性? a) 答:Java源文件被编译成字节码的形式,无论在什么系统环境下,只要有java虚拟机就能运行这个字节码文件。也就是一处编写,处处运行。这就是java的跨平台性。 3. 在一台电脑上配置java环境,path起什么作用?如何配置? a) 答:path的作用是在DOS环境下,能在任意位置使用JD K目录中bin文件夹中的可执行程序,来编译执行java程序。 b) 在环境变量中找到path变量,把bin文件夹的绝对路径加上即可。

4. 什么样的标识符是合法的? a) 由字母、数字、_和$组成,长度不限。其中字母可以是大写或小写的英文字母,数字为0到9。 b) 标识符的第一个字符不能是数字。 c) 标识符区分大小写。 d) 标识符不能包含空格。 5. Java有几种基本数据类型? a) byte,short,int,long,float,double,char,bool ean 6. 什么是隐式类型转换?什么是显示类型转换? a) 当将占位数少的类型赋值给占位数多的类型时,Java自动使用隐式类型转换。

b) 当把在级别高的变量的值赋给级别底变量时,必须使用显示类型转换运算。 7. &&和&区别,||和|区别? a) &&和||是短路与,短路或,当左边的表达式能判断当前结果,则不判断右边的表达式。 b) 而& 和|则将两边的表达式都运算完毕后,再算结果。 8. break,continue区别? a) break结束所有循环,continue结束当次循环,进入下次循环。 9. 类的命名规则是什么? a) 如果类名使用拉丁字母,那么名字的首写字母使用大写字母。

java高级软件工程师面试题

java高级软件工程师面试题 招聘java高级工程师,职位描述如下,有兴趣的加394504340交流,打扰了,谢谢! 职位名称:java高级开发工程师(急) 职位描述:互联网产品的开发和维护。 职位要求:1. 熟悉JAVA、J2EE体系结构,熟练掌握Spring、Struts、Hibernate、ibatis 的开发技术。 2. 熟悉MySql等数据库开发,熟练掌握SQL语句,有较好的数据库设计能力。 3. 熟练掌握HTML、javascript、ajax等web开发技术,熟悉http协议。 4. 熟悉SVN、Maven、Junit等工具。 5. 具有良好的学习能力、沟通能力,乐于承担工作压力。 6. 有大型门户或社区网站开发经验者优先。 职位所在城市:杭州 职位所在行业:高科技 -------------------------========================================================= 1.说一下struts中常用的对象 2.怎样整合apatche和tomcat 3.说一下在linx系统中搭建服务器 4.简述一下sql server 建模 5.请写一个程序,把一个10进制转换成16进制 6.表student 列id name age WA(本科以上,大专,高中,初中以下) 毕业学校ID,学校信息表 问:统计出文化学历本科以上,大专,高中,初中以下,每个年龄各有多少人(一条SQL语句) 7.有两位少年从隧道的一端向另一端行走.当他们走过隧道的五分之二时,发现隧道外面迎来一辆火车.火车很快就要进入隧道.两位少年向来时隧道跑去.两位少年都是每小时10公里.两位在千钧一发跑出了隧道.假设火车速度恒定,并且两位少年都在瞬间达到最大速度,请问火车的速度 8.请写出常用的oracle语句及说明,存储过程的语句及说明 ---------------------------------------------------------------------------------------------------------------------------------

Java经典笔试题01

1. Given: 1. public class test ( 2. public static void main (String args[]) { 3. int i = 0xFFFFFFF1; //0001 4. int j = ~i;//1110,取反 5. 6. } 7. ) What is the decimal value of j at line 5? A. 0 B. 1 C. 14 D. -15 E. An error at line 3 causes compilation to fail. F. An error at line 4 causes compilation to fail. 2. Given: Integer i = new Integer (42); Long 1 = new Long (42); Double d = new Double (42.0); Which two expressions evaluate to True? (Choose Two) A. (i ==1) B. (i == d) C. (d == 1) D. (i.equals (d)) E. (d.equals (i)) F. (i.equals (42))

3. Click the exhibit button: 1. public class test ( 2. private static int j = 0; 3. 4. private static boolean methodB(int k) ( 5. j += k; 6. return true; 7. ) 8. 9. public static void methodA(int i) { 10. boolean b; 11. b = i < 10 | methodB (4);//非短路 12. b = i < 10 || methodB (8);//短路,后面不执行 13. ) 14. 15. public static void main (String args[] } ( 16. methodA (0); 17. system.out.printIn(j); 18. ) 19. ) What is the result? A. The program prints “0” B. The program prints “4” C. The program prints “8” D. The program prints “12” E. The code does not complete 4. Given: 1.Public class test ( 2. Public static void main (String args[]) ( 3. System.out.printIn (6 ^ 3); //0110 ^ 0011 = 0101 4. ) 5.) What is the output? 5 1.Which statement is correctly declare a variable a which is suitable for refering to an array of 50 string empty object? (长度为50的空数组引用) A. String [] a B. String a[]

相关主题
文本预览
相关文档 最新文档