java中级面试题及答案_第1页
java中级面试题及答案_第2页
java中级面试题及答案_第3页
java中级面试题及答案_第4页
java中级面试题及答案_第5页
已阅读5页,还剩4页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java中级面试题及答案XX

Java舍弃了C++的指针对存储器地址的直接操作,程序运行

时,内存由操作系统分配,这样可以防止病毒通过指针侵入系统。

下面是关于java中级面试题及答案,希翼大家认真阅读!

1、谈谈对面向对象的理解;以及三大特征;

面向对象是基于万物皆对象这个观点.把一个对象抽象成类,详

细上就是把一个对象的静态特征和动态特征抽象成属性和方法,也就

是把一类事物的算法和数据构造封装在一个类之中,程序就是多个对

象和互相之间的通信组成的。

比方把一个人看成一个对象,这个人就会有他的属性和行为;他

有手、脚、嘴巴等就是他的属性,或者他会说话、会走路、会吃饭

就是行为,同理我们也可以把这些都看成对象,所以一个对象是可

以由多个对象组成的。

面向对象具有封装性、继承性、多态性。封装就是隐蔽了对象

内部不需要暴露的细节,使得内部细节的变动跟外界脱离,只依靠

接口发展通信;即不用管这个方法是怎么实现的,只要知道他可以实

现这个功能。封装性降低了编程的复杂性.通过继承使得新建一个

类变得容易,一个类继承了父类,那末父类所有的非私有的方法和

公用属性可以被这个类所调用。而继承和实现接口所产生的多态,

使得不同的类所产生的对象能够对相同的消息作出不同的反响,即

在实现接口的情况下,同一个方法里的行为不同,极大地提高了代

码的通用性.。

总之,面向对象的特性提高了大型程序的重用性和可维护性。

2、String、StringBuffer>StringBuiIder的区别;

1.String对象是不可改变的。

2.如果要修改字符串而不创立新的对象,那末可以使用

StringBuilder类。例如,当在一个循环中将许多字符串联接在一

起时,使用

StringBuilder类可以提升性能。

3.由于String的值一旦创立就不能再修改,所以称它是恒定

的。看似能修改String的方法实际上只是返回一个包含修改内容

的新String0

4.

StringBuffer可改变的Unicode字符序列,允许并发操作,是

线程安全的。

5.StringBuilder:可改变的Unicode字符序列操作同

StringBuffer,只是不支持并发操作,非线程安全的。

6.不考虑线程安全前提下,StringBuilder性能最高,

StringBuffer次之,String比较差。为什么StringBuffer的性能

比String高?主要原因在于String类是不可变类,任何对String

引用指向的字符串作出的修改都会导致生成新的字符串(对象),而

对StringBuffer的修改那末不会导致新对象的产生。

那末为什么StringBuilder的性能比StringBuffer的高呢?这

那末与线程安全有关。StringBuilder是线程非安全的。

3、HashMap、LinkedHashMap、TreeMap的区别;

HashMap,LinkedHashMap,TreeMap都属于Map

Map主要用于存储键(key)值(value)对,根据键得到值,因此

键不允许键重复,但允许值重复。

HashMap是一个最常用的Map,它根据键的HashCode值存储数

据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最

多只允许一条记录的键为Null;允许多条记录的值为NulljHashMap

不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可

能会导致数据的不一致。如果需要同步,可以用Collections的

synchronizedMap方法使HashMap具有同步的能力。

LinkedHashMap也是一个HashMap,但是内部维持了一个双向链

表,可以保持顺序;

TreeMap不仅可以保持顺序,而且可以用于排序;

详细操作看文章……

4、ArrayListsLinkedList、vector的区别;

一、同步性

ArrayList,LinkedList是不同步的,而Vestor是同步的。所

以如果不要求线程安全的话,可以使用ArrayList或者LinkedList,

可以节省为同步而消耗的开消。但在多线程的情况下,就得使用

Vectoro固然,也可以通过一些方法包装ArrayList,LinkedList,

使他们也到达同步,但效率可能会有所降低。

二、数据增长

从内部实现机制来讲ArrayList和Vector都是使用Object的

数组形式来存储的。

当你向这两种类型中增加元素的时候,如果元素的数目超出了

内部数组的长度它们都需要扩展内部数组的长度,Vector缺省情况

下自动增长原来一倍的数组长度;

ArrayList是原来的50%,所以最后你获得的这个集合所占的空

间总是比你实际需要的要大。所以要在集合中保存大量的数据那末

使用Vector有一些优势。

三、检索、插入、删除对象的效率

ArrayList和Vector中,是用下标来检索一个对象,或者在集

合的末尾插入、删除一个对象的时间是一样的。但是,如果在集

合的其他位置增加或者移除元素那末花费的时间会呈线形增长。

LinkedList中,在插入、删除集合中任何位置的元素所花费的

时间都是一样的,但它在查询一个元素的时候比较慢。

普通大家都知道ArrayList和LinkedList的大致区别:

1.ArrayList是实现了基于动态数组的数据构造,LinkedList

基于链表的数据构造。

2.对于随机访问get和set,ArrayList觉得优于

LinkedList,因为LinkedList要挪移指针。

3.对于新增和删除操作add和remove,LinedList比较占优

势,因为ArrayList要挪移数据。

5、抽象类与接口(interface)的区别;

1.abstractclass在Java语言中表示的是一种继承关系,一

个类只能使用一次继承关系。但是,一个类却可以实现多个

interfaceo

2.在abstractclass中可以有自己的数据成员,也可以有非

abstarct的成员方法,而在interface中,只能够有静态的不能被

修改的数据成员(也就是必须是staticfinal的,无非在

interface中普通不定义数据成员),所有的成员方法都是abstract

的。

3.abstractclass和interface所反映出的设计理念不同。其

实abstractclass表示的是“is-a〃关系,interface表示的是

“like-a”关系。

4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中

可以有非抽象方法。接口中那末不能有实现方法。

5.接口中定义的变量默认是publicstaticfinal型,且必须

给其初值,所以实现类中不能重新定义,也不能改变其值。

6.抽象类中的变量默认是friendly型,其值可以在子类中重

新定义,也可以重新赋值。

7.接口中的方法默认都是public,abstract类型的。

7、多线程是什么?用什么实现?

多线程是为了同步完成多项任务,不是为了提高运行效率,而

是为了提高资源使用效率来提高系统的效率。线程是在同一时间需

要完成多项任务的时候实现的。如:火车是一个进程,而车箱就是

线程,车箱脱离了火车是不能开动的,同理可以由多个车箱,那末

一个进程是有多个线程来提高效率的。

在JAVA中,要开始一个线程,有两种方式。一是直接调用

Thread实例的start。方法,继承Thread类;二是实现Runnable接

口,将Runable实例传给一个Thread实例然后调用它的start。方

法。

实现同步也有两种,一种是用同步方法,一种是用同步块,

同步方法就是在方法返回类型后面加之synchronized,比

方:publicvoidsynchronizedadd(){...}同步块就是直接

写:synchronized(这里写需要同步的对象){...}

8、概述一下SpringMVC的工作原理。

1、客户端发出一个请求给web效劳器,web效劳器对请求发展

解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中

指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息

(包括URL、Http方法、请求报文头和请求参数Cookie等)以及

HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的

Handler,将处理权交给Handler(Handler将详细的处理发展封装),

再由详细的HandlerAdapter对Handler发展详细的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对

象给DispatcherServleto

6、Handler返回的ModelAndView()只是一个逻辑视图并非一

个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图

转化为真正的视图Viewo

7、Dispatcher通过model解析出ModelAndView()中的参数进

展解析最终展现出完整的view并返回给客户端。

9、关于Spring,IOC和A0P的概念;

spring的优点?

1.降低了组件之间的耦合性,实现了软件各层之间的解耦

2.可以使用容易提供的众多效劳,如事务管理,消息效劳等

3.容器提供单例模式支持

4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行

期监控等功能

5.容器提供了众多的辅助类,能加快应用的开辟

6.spring对于主流的应用框架提供了集成支持,如

hibernate,JPA,Struts等

7.spring属于低侵入式设计,代码的污染极低

8.独立于各种应用效劳器

9.spring的DI机制降低了业务对象替换的复杂性

10.Spring的高度开放性,并不强制应用彻底依赖于Spring,

开辟者可以自由选择spring的部份或者全部

什么是DI机制?

依赖注入(DependecyInjection)和控制反转(Inversionof

Control)是同一个概念,详细的讲:当某个角色

需要此外一个角色协助的时候,在传统的程序设计过程中,通

常由调用者来创立被调用者的实例。但在spring中

创立被调用者的工作再也不由调用者来完成,因此称为控制

反转。创立被调用者的工作由spring来完成,然后注入调用者

因此也称为依赖注入。

spring以动态灵便的方式来管理对象,注入的两种方式,设

置注入和构造注入。

设置注入的优点:直观,自然

构造注入的优点:可以在构造器中决定依赖关系的顺序。

什么是A0P?

面向切面编程(A0P)完善spring的依赖注入(DI),面向切面编

程在spring中主要表现为两个方面

1.面向切面编程提供声明式事务管理

2.spring支持用户自定义的切面

面向切面编程(aop)是对面向对象编程(oop)的补充,

面向对象编程将程序分解成各个层次的对象,面向切面编程将

程序运行过程分解成各个切面。

A0P从程序运行角度考虑程序的构造,提取业务处理过程的切

面,oop是静态的抽象,aop是动态的抽象,

是对应用执行过程中的步骤发展抽象,,从而获得步骤之间的

逻辑划分。

aop框架具有的两个特征:

1.各个步骤之间的良好隔离性

2.源代码无关性

10、spring事务怎么配置的。

第一种方式:每一个Bean都有一个代理;

第二种方式:所有Bean共享一个代理基类;

第三种方式:使用拦截器;

第四种方式:使用tx标签配置的拦截器;

第五种方式:全注解;

详细见文章……

11、Mybatis与hibernate的区别。

1.hibernate是全自动,而mybatis是半自动。

hibernate彻底可以通过对象关系模型实现对数据库的操作,

拥有完整的JavaBean对象与数据库的映射构造动生成sqlo而

mybatis仅有根本的字段映射,对象数据以及对象实际关系仍然需

要通过手写sql来实现和管理。

2.hibernate数据库移植性远大于mybatis。

hibernate通过它强大的映射构造和hql语言,大大降低了对

象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手

写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,

如果sql不具通用性而用了不少某数据库特性的sql语句的话,移

植性也会随之降低不少,本钱很高。

3.hibernate拥有完整的日志系统,mybatis那末欠缺一些。

hibernate日志系统非常健全,涉及广泛,包括:sql记录、关

系异常、优化警告、缓存提

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论