java中级面试题及答案一般有哪些?

TheDisguiser 2020-07-05 22:29:26 java常见问答 3691

Java从诞生到现在一直是经久不衰的技术,面试也一直是java程序员的一大心病,小编这次整理了一些java中级面试题及答案,希望对你们有所帮助。

一、 Java中的异常有哪几类?分别怎么使用?

检出异常,非检出异常。检出异常需要try...catch才能编译通过。非检出异常不用try...catch也能编译通过。

RuntimeException是非检出异常,不需要try...catch也能编译通过。

IoException,SQLException等等其他所有异常都是检出异常,必须要try...catach才能编译通过。

二、常用的集合类有哪些?比如List如何排序?

分两种,一种实现Set接口,一种是实现List接口的。

Set:TreeSet,HashSet.

List:ArrayList,LinkedList,Vector(线程安全)。

JDK7以前用collections.sort(list,Comparator).

JDK8直接用List.sort(Comparator).

三、 ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?

ArrayList,是数组结构:少用与中间的增删。多用于查询,修改。每次增删元素顺序都会操作每个元素。

LinkedList,是链表结构:多用于中间,开头增删。少用查询,修改。查询时会遍历大量元素。

四、 内存溢出是怎么回事?

对象有被指向的引用,但是再也用不到它就是内存溢出了。

GC机制:复制回收,标记清除,引用计数(如果有循环引用后,会影响垃圾回收,所以JVM虚拟机没有采用此方法进行垃圾回收)。

五、 ClassLoader有什么用?

类加载器:所有类都需要Classloader来加载。

BoostrapClassLoader,加载系统(java包下)的类,SystemClassLoader,加载系统扩展类(少用),AppClassloader应用类加载器,还有针对每个项目的类加载器。

六、==和equals的区别?

==判断对象物理地址。

equals判断对象Value是否相等。

七、 hashCode方法的作用?

在hashMap中使用,把一个对象变成一个整型。hashCode规范,如果两个对象的equals返回true,那他们的hashCode必须相等,但是hashCode相等,不一定equals不一定相等。

八、webservice是什么?

webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。

九、springCloud是什么?

springcloud是一个微服务框架,并提供全套分布式系统解决方案。支持配置管理,熔断机制,leader选举,服务治理,分布式session,微代理,控制总线,智能路由,一次性token。

十、Java中堆和栈有什么不同?

每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。而堆是所有线程共享的一片公用内存区域。对象都在堆里创建,为了提升效率线程会从堆中弄一个缓存到自己的栈,如果多个线程使用该变量就可能引发问题,这时volatile 变量就可以发挥作用了,它要求线程从主存中读取变量的值。

堆:(对象)

引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。

堆内存主要作用是存放运行时创建(new)的对象。

(主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)

栈:(基本数据类型变量、对象的引用变量)

基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。

十一、Spring的Scope有以下几种,通过@Scope注解来实现:

(1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。

(2)Prototype:每次调用新建一个Bean实例。

(3)Request:Web项目中,给每一个 http request 新建一个Bean实例。

(4)Session:Web项目中,给每一个 http session 新建一个Bean实例。

(5)GlobalSession:这个只在portal应用中有用,给每一个 global http session 新建一个Bean实例。

十二、、Spring事务传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:

-TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。

-TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。

-TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

-TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

-TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

-TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

-TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

十三、线程安全是什么?线程不安全是什么?

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。(Vector,HashTable)

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。(ArrayList,LinkedList,HashMap等)

十四、线程和进程的区别?

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同;

(1)进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元

(2)同一个进程中可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进行至少包括一个线程。

(3)进程的创建调用fork或者vfork,而线程的创建调用pthread_create,进程结束后它拥有的所有线程都将销毁,而线程的结束不会影响同个进程中的其他线程的结束

(4)线程是轻两级的进程,它的创建和销毁所需要的时间比进程小很多,所有操作系统中的执行功能都是创建线程去完成的

(5)线程中执行时一般都要进行同步和互斥,因为他们共享同一进程的所有资源

(6)线程有自己的私有属性TCB,线程id,寄存器、硬件上下文,而进程也有自己的私有属性进程控制块PCB,这些私有属性是不被共享的,用来标示一个进程或一个线程的标志

以上就是关于java中级面试题及打答案的所有内容,你了解了吗?更多java面试题相关内容请持续关注本站了解详情。

推荐阅读:

腾讯一面面试题整理,java面试题目2020

2020华为java面试题分享,一面

百度java面试题分享,2020java面试题(一面)