ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:45.79KB ,
资源ID:9350371      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9350371.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Java面试题总结.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Java面试题总结.docx

1、Java面试题总结Java面试题总结 面向对象(OOP)1、面向对象的特征有哪些方面 答:主要有以下四方面: (1)抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 (2)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和

2、实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 (3)封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 (4)多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。2、在java中一个类被声明为final类型,表示了什么意思? 表示该类不能被继承,是顶级/终太类。3、谈谈final, finally, finaliz

3、e的区别。 final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重写。 finally异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 finalize方法名。Java 技术

4、允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。4、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现

5、,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。 Overloaded的方法是可以改变返回值的类型。 5、abstract class和interface有什么区别? 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该

6、类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行

7、为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。 6、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 都不能 7、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)? 接口6可以继承接口。抽象类可

8、以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数。 8、构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。 9. 是否可以继承String类? String类是final类故不可以继承。 Struts1、STRUTS的应用(如STRUTS架构) 答:Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-

9、Controller)设计模式的应用构架。 Struts有如下的主要功能: 一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。 二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。 三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。2.Struts2与Struts1的对比 Action 类: (1) Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 (

10、2)Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。 线程模式: (1) Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 (2)Struts2 Action对象为每一个请求产生一

11、个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) Servlet 依赖: (1)Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 (2)Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequ

12、est 和 HttpServletResponse的必要性。 可测性: (1) 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展Struts TestCase提供了一套Struts1的模拟对象(来进行测试)。 (2)Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入: (1)Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的

13、类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 (2) Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。 表达式语言: (1) St

14、ruts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 (2) Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言Object Graph Notation Language (OGNL). 绑定值到页面(view): (1) Struts 1使用标准JSP机制把对象绑定到页面中来访问。 (2) Struts 2 使用 ValueStack技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换: (1)

15、Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 (2) Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验: (1) Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 (2) Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验

16、,来支持chain校验子属性 Action执行的控制: (1)Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 (2)Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。3.一个牛人出给软件工程师的面试题2010-11-04 16:101. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架? struts是以请求回答方式为基础的.aj

17、ax,flash等富客户端越来越多了. spring是由于java的静态类型限制,等java可以支持动态方法添加之后. hibernate是由于数据库都是关系型的,等数据库面向了对象之后. 综上所述.ssh蹦达不了几天了. 4. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑) 性能: 1客户端:js的写法,数据排列,不同浏览器区别. 2服务器:逻辑,计算,缓存,减少I/O,提高命中 3传输:带宽,缓存,异步,进度条,并发,集群,数据压缩. 我认为最主要的性能是人的体验,其它都是可以放到第二位去的. 5. 如果要设计一个用

18、于小型路由器中的web系统,应该如何来设计? 使用不需要并发多线程的简单文件服务器提交后直接改文件. 不使用常规异常捕获方式 (由于选择性少所以根本不使用异常,只提供软硬的复位) 6. 请评价下你所熟悉的web框架的可测试性如何,struts,springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备的面向web系统的自动化测试框架所应当具有的特性. 由于容器的限制所以:web,spring,hibernate都不是很好测试. 由于大多数web是以人的体验为主的.主观概念变成代码代价过高 由于页面生成工具没有足够的测试支持.所以写出的代码非常难

19、以程序化自动化 现有的seleniumIDE还不是很稳定 如果把html,js,css分开,页面内容以json或xml来传输,页面的逻辑由js二次绚染成型那么测试成本会下降很多. (开发成本提高2到5倍) 7. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求? ,性能,扩展性,7*24小时, 性能问题在出现性能问题之前不考虑 扩展性问题在签定长期维护,二期开发合同之前不考虑 7*24工作系统一般不考虑.开发中本身就是 8. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里? .我设计的. 瓶颈很大一

20、部分是由于没有勇气 去尝试新的实践. -1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架? ssh框架的目的是节省开发成本,提高应用的可扩展性。但是由于框架的运行时速度相对缓慢,所以在需要提供高性能的、与体验无关的应用时建议直接使用Servlet/JSP作为基础架构。 2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑) 在WEB方面追求性能最大化就意味着用户从进入第一个页面到获得准确结果的时间最小化,所以: a.采用至简的WEB设计,以及明示的功

21、能引导。 b.一定要有诸如搜索下拉框提示等辅助工具 c.搜索结果格式鲜明、重点突出。 3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计? a.因需要强调高性能,故需要采取最原生态的WEB技术作为基础机构(观点类似于问题1)。 b.因需要强调实时性,故采用AJAX技术作为信息获取基础手段,以定时获取相应信息。 c.不要加入任何RIA特性。 d.页面中要以图表为主要展示手段。 e.其他一些常规注意事项在此略过。 4. 请评价下你所熟悉的web框架的可测试性如何,struts,springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备

22、的面向web系统的自动化测试框架所应当具有的特性. a.Struts2和SpringMVC的可测试性强于Strust1。Struts1非常难于测试。 b.自动化测试需要一套完备的解决方案支持,需要根据具体需要定制测试方案,系统代码需要预先做好单元测试和模块测试方面的准备,这样之后的集成测试以及自动化测试才有基础、有意义。 c.主要要从几个方面考虑:单元测试及集成测试的统一执行能力;系统用户输入模拟测试测试;并发访问测试能力;测试覆盖度检查能力;测试中断的问题跟踪能力;完备准确地报告生成能力等等。 5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求? 需要关注 a.业务优先,做好

23、系统分析,紧跟用户需求。 b.系统界面风格需要与企业文化相匹配。 c.系统各操作的示意和导向明确,要针对目标用户群进行必要调整。 d.要着眼于怎样能使系统真正帮助企业实现更多的价值。 e.根据需要做好外部交互和接口。 f.可移植的系统。(根据不同客户的已有资源进行环境搭建,如果整个系统只是针对个别用户定制则此条忽略) 可暂时忽略: a.超高性能系统构建 b.玄酷的用户界面 c.集群和并行扩展能力(如确无需要) 6. 你们从前的研发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里? 软件研发工作最重要的就是流程和规范的贯彻和执行

24、。 具体流程略,研发流程是否高效往往取决于团队管理的合理性。 从团队管理方面建议从几方面考虑: a.关注木桶原则,注重团队中每位成员,尤其是水平较低人员的培训和技能提高。 b.明确开发方式和流程,并严格贯彻执行。 c.制定开发中的各种规范,并根据规范严格要求每位成员,必要时进行培训。 d.建立良好的代码测试、审查和责任制度,严格绩效管理。 这方面的关键点和瓶颈均存在于贯彻执行上,如果执行不力则任何流程规范都会形同虚设。这就需要团队管理者拥有较强的执行力甚至是自我约束力。-1. struts,spring,hibernate这样的开源框架,他们的历史局限性在哪里?在何种情况下会不适合用这些框架?

25、 ssh针对EJB的改良,适用于企业级应用。 历史局限性:动态性不足,不能快速修改功能模块,OO和关系数据的阻抗不匹配,开发效率低 不适用场景:简单的web系统,逻辑处理少的应用。 2. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑) 服务器方面对请求频繁的页面进行缓存和预读;客户端尽量使用本地缓存;传输数据进行压缩。 3. 如果要设计一个用于小型路由器中的web系统,应该如何来设计? 使用cgi或者自己开发web服务器,尽可能的精炼简单,需要考虑并发冲突 4. 请评价下你所熟悉的web框架的可测试性如何,struts,

26、springMVC,webwork或其他均可.在什么样的条件下才能对web系统引入自动化测试?请描述一套完备的面向web系统的自动化测试框架所应当具有的特性. struts:应该是struts1的测试性最差;springMVC和webwork的测试性良好,主要是Mock测试。web自动化测试在系统正常运行,并功能完成后引入。自动化测试框架的特性:定时,测试数据的准备和回复,页面显示和逻辑诊断,截图。 5. 企业级应用有哪些特殊要求?在何种情况下我们不需要考虑这些要求? 系统运行的稳定性,业务要求多种多样,功能的扩展性,数据的备份和回复。 针对某一业务需求时,不需要考虑扩展性 6. 你们从前的研

27、发流程是怎样的?如果由你来设计研发流程,是否能大幅提高生产力和开发质量?如果能,那体现在哪些方面?如果不能,瓶颈在哪里? psp和tdd 研发人员的执行能力是瓶颈7. 谈谈你对Struts的理解。答: (1). struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将各个请求分别分配给不同的acti

28、on去处理。(2). ActionServlet把请求交给action去处理之前,会将请求参数封装成一个formbean对象(就是一个java类,这个类中的每个属性对应一个请求参数),封装成一个什么样的formbean对象呢?看配置文件。(3).要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input

29、属性,而不是error属性,我们后面结合实际的运行效果进行分析。(4).action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml配置文件为jsp页面设置的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。5. Struts优缺点 优点: 1. 实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现.2有丰富的tag可以用 ,Struts的标记库(Taglib),如能灵活动

30、用,则能大大提高开发效率3. 页面导航使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。4. 提供Exception处理机制 . 5. 数据库链接池管理 6. 支持I18N 缺点一、 转到展示层时,需要配置forward,如果有十个展示层的jsp,需要配置十次struts,而且还不包括有时候目录、文件变更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整个项目,而tomcate这样的服务器,还必须重新启动服务器二、 Struts 的Action必需是threadsafe方式,它仅仅允许一个实例去处理所有的请求。所以action用到的所有的资源都必需统一同步,这个就引起了线程安全的问题。三、 测试不方便. Struts的每个Action都同Web层耦合在一起,这样它的测试依赖于Web容器,单元测试也很难实现。不过有一个Junit的扩展工具Struts TestCase可以实现它的单元测试。 四、类型的转换. Struts的FormBean把所有的数据都作为String类型,它可以使用工具Commons-Beanutils进行类型转化。但它的转化都是在Class级别,而且转化的类型是不可配置的。类型转化时的错误信息返回给用户也是非常困难的。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1