Java面试题总结

本文详细总结了Java面试中的常见问题,涵盖了JDK、JRE、JVM的关系,深拷贝与浅拷贝的区别,进程与线程的定义,同步与异步的概念,线程的生命周期与状态,线程池的使用及其优势,Java并发控制,反射,递归等核心概念。还讨论了Java中的数据类型、重写与重载,接口与抽象类的区别,多态的含义,String、StringBuffer和StringBuilder的比较,以及Spring框架的相关知识。此外,还涉及到了HTTP请求方法的区别,异常处理,Spring Boot、Spring和Spring MVC的差异,ArrayList和HashMap的底层实现等。通过对这些知识点的深入理解,能帮助开发者更好地准备Java面试。
摘要由CSDN通过智能技术生成

JDK、JRE、JVM的关系:

JDK(Java Development Kit):即Java软件开发工具包,包括了JRE和JVM。
JRE(Java Runtime Environment):是Java的运行时环境,包含了JVM和Java的核心类库。
JVM(Java Vatual Machine):即java虚拟机,是java跨平台特性的关键,能够运行以Java语言开发的软件程序。(每个操作系统都有相应的Java虚拟机,例:windows版JVM,linux版JVM,mac版JVM等。)
在这里插入图片描述

深拷贝和浅拷贝的区别:

前提
基本数据类型存储在栈中;
引用数据类型真实数据存储在堆内存中,栈中存储的是对象的引用地址。
浅拷贝:基础数据类型直接复制,引用数据类型只复制对象的引用地址,新旧对象指向同一个内存地址。
深拷贝:基础数据类型直接复制,引用数据类型开辟新的内存空间。

什么是进程,什么是线程?

进程是进行的程序、业务(例:银行的取钱业务)。
线程是操作系统进行运算能够调度的最小单位(例:有个窗口的取钱业务员)。

同步和异步的区别:

同步指不发生抢占的现象,排队的效果。
异步指多人抢占共享资源的现象。
同步保证了安全,但牺牲了效率。异步效率高,但牺牲了安全。

线程的状态有哪些?线程的生命周期包括哪几个阶段?

包括5中状态:
1.新建状态:当线程对象创建后,即进入新建状态,Thread t=new MyThread(); 。
2.就绪状态/可运行状态:当线程对象调用start()方法,t.start(); 线程就进入可运行状态,随时等待CPU调度。
3.运行状态:当CPU开始调度该线程时,线程进入运行状态,start()方法自动调用run()方法。多线程的业务都是写在run()方法中。
4.阻塞状态:处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,即进入阻塞状态。
5.终止状态/死亡状态:当run()方法中的代码执行完毕,或因异常退出run()方法,线程生命周期结束。

线程的阻塞状态常见的有几种?分别是什么?

**1.等待阻塞:**运行状态中的线程执行wait()方法,线程处于阻塞状态,进入等待区。wait()方法只能在同步控制方法或同步控制块中使用,执行wait()方法,会释放同步锁,让其他线程进入同步代码块中执行。恢复线程需要其他线程调用该对象的notify()/notifyAll()才能恢复。
**2.同步阻塞:**当线程获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态。
**3.其他阻塞:**通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
调用sleep()方法,进入超时等待,时间到,进入可运行状态。
调用join()方法,例在线程A中执行threadB.join(),线程A等待线程B终止后返回继续执行自己的代码。
yeild()方法只给相同级别或更高级别的线程运行的机会。
在这里插入图片描述

为什么要使用线程池?

1.降低线程创建和销毁造成的资源消耗。
2.提高相应速度,因为使用线程池时,当任务到达,不需要等待创建线程就可直接执行。
3.使用线程池可以进行统一分配,调优和监控。

开发过程中用到过哪些线程池,线程池的核心属性有哪些?

用过的线程池:例ThreadPoolExecutor
线程池的属性:
1.核心线程数(办理业务的核心窗口)。
2.最大线程数(最多可以有多少个办理窗口)。
3.队列:保留任务的个数(排队的人数)。
4.最大空闲时间:当线程数超过核心线程数,多余

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值