2018年JAVA面试题整理(2)

这段时间个人也在准备着面试,整理了一下面试题,希望对大家有所帮助!也希望参与过面试的前辈给予我一点帮忙;大家积极分享面试题

1、SpringMVC的原理以及返回数据如何渲染
Spring MVC的核心就是DispatcherServlet ,一个请求经过DispatcherServlet ,转发给HandlerMapping ,然后经反射,对应 Controller及其里面方法的@RequestMapping地址,最后经ModelAndView和ViewResoler返回给对应视图 。


2、Spring的原理
Spring的核心是IOC和AOP ,IOC是依赖注入和控制反转, 其注入方式可分为set注入、构造器注入、接口注入等等。IOC就是一个容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。简单理解就是:JAVA每个业务逻辑处理至少需要两个或者以上的对象协作进行工作,但是每个对象在使用它的合作对象的时候,都需要频繁的new 对象来实现,你就会发现,对象间的耦合度高了。而IOC的思想是:Spring容器来管理这些,对象只需要处理本身业务关系就好了。至于什么是控制反转,就是获得依赖对象的方式反转了。
Spring提供了对AOP技术的良好封装,AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码,例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。

3 String、StringBuffer与StringBuilder的区别
a. String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象
b. StringBuffer和StringBuilder底层是 char[]数组实现的
c. StringBuffer是线程安全的,而StringBuilder是线程不安全的


4.抽象类和接口的区别
a. 一个类只能继承单个类,但是可以实现多个接口
b. 接口强调特定功能的实现,而抽象类强调所属关系
c. 抽象类中的所有方法并不一定要是抽象的,你可以选择在抽象类中实现一些基本的方法。
    而接口要求所有的方法都必须是抽象的

5.解析XML的几种方式的原理与特点:DOM、SAX、PULL
a. DOM:消耗内存:先把xml文档都读到内存中,然后再用DOM API来访问树形结构,并获取数据。这个写起来很简单,但是很消耗内存。要是数据过大,手机不够牛逼,可能手机直接死机
b. SAX:解析效率高,占用内存少,基于事件驱动的:更加简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
c. PULL:与 SAX 类似,也是基于事件驱动,我们可以调用它的next()方法,来获取下一个解析事件(就是开始文档,结束文档,开始标签,结束标签),当处于某个元素时可以调用XmlPullParser的getAttributte()方法来获取属性的值,也可调用它的nextText()获取本节点的值。

6.JAVA 中堆和栈的区别,说下java 的内存机制
a. 基本数据类型比变量和对象的引用都是在栈分配的
b. 堆内存用来存放由new创建的对象和数组
c. 类变量(static修饰的变量),程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
d. 实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的”物理位置”,实例变量的生命周期–当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存
e. 局部变量: 由声明在某方法,或某代码段里(比如for循环),执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域,内存立即释放

7.JAVA 垃圾回收机制
释放那些不再持有引用的对象的内存

8.讲讲 Java 中的HashTable、HashMap,区别是什么?

a. HashTable比较老,是基于Dictionary 类实现的,HashTable 则是基于 Map接口实现的

b. HashTable 是线程安全的, HashMap 则是线程不安全的

c. HashMap可以让你将空值作为一个表的条目的key或value

9.Switch能否用string做参数?
在 Java 7 之前, switch 只能支持byte,short,char,int 或者其对应的封装类以及 Enum 类型。在JAVA 7中,String 支持被加上了。

10.Object有哪些公用方法?

a. 方法equals测试的是两个对象是否相等

b. 方法clone进行对象拷贝

c. 方法getClass返回和当前对象相关的Class对象

d. 方法notify,notifyall,wait都是用来对给定对象进行线程同步的

11.在 JAVA 中,如何跳出当前的多重嵌套循环?
用 break; return 方法

12.序列化的原理和作用
erialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程,主要用于HTTP或者WebService接口传输过程中对象参数的传播。


13.ArrayList和LinkedList、Vector的区别?

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
Vector和ArrayList类似,但属于强同步类,即线程安全的。



暂时给大家这些面试题吧,自己要开始背了哈。大家一起加油哈!








你可能感兴趣的:(Java,面试)