JAVA面试题
文章平均质量分 67
shumeigang
这个作者很懒,什么都没留下…
展开
-
面试Spring框架
在IOC容器中,对象的创建、组装和管理都由容器来负责,开发者只需通过配置文件或注解指定对象之间的依赖关系,而无需手动创建对象。Spring Boot通过约定优于配置的原则,使开发者能够更快速地搭建和部署Spring应用程序,同时提供了丰富的开箱即用的功能,如内嵌的Servlet容器、自动化配置等。开发者可以通过在方法或类上添加@Transactional注解来声明事务的边界,Spring框架会自动为被注解的方法添加事务管理功能,从而简化了事务管理的配置和使用。原创 2024-04-19 11:04:36 · 642 阅读 · 0 评论 -
jvm 面试
是Java类加载机制中的一种策略,用于保护核心库的安全性和稳定性。复制算法(Copying):将内存分为两个相等的区域,每次只使用其中一个区域,当该区域用尽时,将存活的对象复制到另一个区域,然后清除当前区域中的所有对象。分代垃圾回收器的工作原理是基于对象的生命周期 将堆内存划分为不同的代(一般是新生代和老年代),并使用不同的垃圾回收算法对不同代进行回收。强引用(Strong Reference):最常见的引用类型,通过关键字new创建的对象默认是强引用,只要强引用存在,垃圾收集器就不会回收该对象。原创 2023-12-23 09:20:32 · 391 阅读 · 0 评论 -
java反射 面试
无论哪种方式,都需要提供一个InvocationHandler或MethodInterceptor来处理被代理对象的方法调用,并在必要的时候添加额外的逻辑。反射是指在运行时动态地获取类的信息(包括类的成员变量、方法、构造函数等),并且可以通过反射调用类的方法、访问和修改类的属性,以及创建对象实例。这种方式可以对没有实现接口的类进行代理。Java的反射机制提供了一种强大的能力,使得程序可以在运行时通过名称来访问、检测和操作类的成员。动态代理是指在运行时动态生成代理类,并在代理类中处理被代理对象的方法调用。原创 2023-12-23 09:18:31 · 142 阅读 · 0 评论 -
java 异常 面试
如果省略 catch 块,则必须在方法签名中声明方法可能会抛出的异常类型,或者使用 throws 关键字抛出异常;finally 块中的代码总是在 try-catch 块结束后执行,无论是否发生异常,因此即使在 catch 块中执行了 return 语句,finally 块中的代码也会被执行。finally 是一个关键字,用于定义在try-catch语句块中,无论是否发生异常,finally块中的代码都会被执行。它通常在方法内部使用,表示方法执行时发生了异常情况,需要将异常信息传递给调用者处理。原创 2023-12-23 09:16:38 · 70 阅读 · 0 评论 -
java网络面试
301 Moved Permanently(永久重定向):表示请求的资源被永久移动到了新的URL,未来所有对该资源的请求都应该使用新的URL。需要注意的是,JSONP只支持GET请求,并且存在安全性问题,因为它依赖于服务器返回的代码的可信任性。URL地址栏会改变为重定向的URL,原始请求的参数不会传递给新的URL。302 Found(临时重定向):表示请求的资源暂时移动到了新的URL,未来可能还会发生变化,所以搜索引擎会保留原有的链接。对于重定向后的请求,客户端应该继续使用原有的URL。原创 2023-12-23 09:14:56 · 79 阅读 · 0 评论 -
hibernate 面试
当应用程序需要访问数据库时,Hibernate会根据配置信息生成SQL语句并执行,最后将查询结果转化为Java对象返回给应用程序。瞬时态表示对象没有关联到数据库,持久态表示对象已经被保存到数据库中并与Session关联,游离态表示对象曾经与Session关联过,但已经脱离了Session的管理。另外,load()方法在实际使用时是延迟加载的,只有在访问对象属性时才会触发真正的数据库查询。如果将实体类定义为final,Hibernate在运行时无法生成代理对象,可能会影响性能和某些功能,如延迟加载。原创 2023-12-22 14:34:32 · 81 阅读 · 0 评论 -
Java Web 面试
Servlet是一种运行在服务器上的Java程序,用于接收和处理来自客户端的HTTP请求,并生成响应。如果客户端禁止Cookie,仍然可以使用Session,但需要通过URL重写的方式将Session ID添加到URL参数中,在每个请求中都携带Session ID。使用ORM框架(如Hibernate、MyBatis):ORM框架会自动处理SQL语句和参数的拼接,减少手动拼接SQL的机会,从而降低SQL注入的风险。输入验证和过滤:对用户输入进行验证和过滤,确保输入的数据符合预期的格式和类型。原创 2023-12-22 14:21:09 · 78 阅读 · 0 评论 -
java反射面试
无论哪种方式,都需要提供一个InvocationHandler或MethodInterceptor来处理被代理对象的方法调用,并在必要的时候添加额外的逻辑。反射是指在运行时动态地获取类的信息(包括类的成员变量、方法、构造函数等),并且可以通过反射调用类的方法、访问和修改类的属性,以及创建对象实例。这种方式可以对没有实现接口的类进行代理。Java的反射机制提供了一种强大的能力,使得程序可以在运行时通过名称来访问、检测和操作类的成员。动态代理是指在运行时动态生成代理类,并在代理类中处理被代理对象的方法调用。原创 2023-12-22 14:05:51 · 89 阅读 · 0 评论 -
java 多线程面试
Callable是Java 5中引入的接口,与Runnable类似,但可以返回执行结果,并且可以抛出异常。notify()用于唤醒在此对象监视器上等待的单个线程,如果有多个线程在等待,则只会唤醒其中一个线程;submit()方法用于执行实现了Callable接口的任务,并且可以获取任务执行的结果或抛出的异常。run()方法是Thread类的普通方法,用于定义线程要执行的任务,直接调用时相当于普通方法的调用;execute()方法用于执行实现了Runnable接口的任务,无法获取任务执行的结果或抛出的异常;原创 2023-12-22 13:57:38 · 66 阅读 · 0 评论 -
java 容器 面试
在HashMap中,通过hashCode计算出元素的哈希值,然后将元素放入数组中对应的位置(通过哈希值取模数组长度),如果发生哈希碰撞(即不同的元素具有相同的哈希值),则以链表或红黑树的形式存储在数组的同一个位置上。List转换为数组:可以使用List的toArray方法将List转换为数组,例如:String[] array = list.toArray(new String[list.size()]);性能:由于Hashtable是线程安全的,其在竞争资源时需要进行同步,可能会影响性能;原创 2023-12-22 13:24:44 · 67 阅读 · 0 评论 -
Java 基础面试
但是,抽象类的方法可以继续被子类实现和重写,即final关键字只对类有效,不影响方法的继承和重写。String str = "i"" 是使用字符串字面量创建一个String对象,会在字符串常量池中查找是否存在相同内容的字符串,如果存在则直接引用,如果不存在则创建新的String对象。String str = new String("i")" 是使用new关键字创建一个新的String对象,不会在字符串常量池中查找,而是在堆内存中创建一个新的String对象。对于引用类型,比较的是它们在内存中的地址。原创 2023-12-22 11:07:04 · 69 阅读 · 0 评论 -
JAVA#volatile
volatile是JAVA虚拟机提供的轻量级的同步机制volatile字面意思是易变的、不稳定的。原创 2023-08-12 17:13:51 · 181 阅读 · 0 评论 -
Vector、ArrayList和LinkedList有什么区别
1.基本区别:三个类都实现了List接口,都是有序集合,数据是允许重复的;ArrayList 和Vector都是基于数组实现存储的,集合中的元素的位置都是有顺序即连续的;LinkedList是基于双向链表实现存储的,集合中的元素的位置是不连续的2.性能区别:Vector和ArrayList底层实现原理一致,但是Vector是线程安全的,因此性能比ArrayList差很多;LinkedList相比于集合Vector和ArrayList在插入,修改,删除等操作上速度较快,但是随机访问的性能较差3.安全区原创 2021-01-22 11:11:29 · 1922 阅读 · 0 评论 -
java 基础面试题
共包含 208 道面试题,主要用于学习Java 基础1. JDK 和 JRE 有什么区别?JRE是Java Runtime Environment的缩写,顾名思义是java运行时环境,包含了java虚拟机,java基础类库。Jdk是Java Development Kit的缩写,顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的2. == 和 equals 的区别是什么?== :它的作用是判断两个对象的地址...原创 2021-01-18 15:25:16 · 326 阅读 · 1 评论 -
Java缓存
什么是缓存1数据交换的缓冲区(Cache)当当某一硬件要读取数据时,会首先从缓存中查询数据,有则直接执行,不存在时从磁盘中获取2缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。3高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。4缓存就是把一些外存上的数据保存在内存上而已为什么用缓存?高性能:减少查询同一个数据时的响应速度高并发:减少数据库的承载压力(2000/s),缓存走内存,天然支撑高并发缓存的不良后果:缓存.原创 2020-11-05 10:05:41 · 166 阅读 · 0 评论 -
等待/通知机制
场景:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行响应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。前者是生产者,后者是消费者,这种模式隔离了“做什么”和“怎么做”,在功能层面上实现了解耦,体系结构上具备了良好的伸缩性,但是在java语言中如何实现类似的功能呢?实现:简单的办法是让消费者不断地循环检查是否符合预期,如下代码:while(value!=desire){Thread.sleep(1000);}上面的伪代码在条件不满足的时候就睡眠一段时间,这样做的目的是原创 2020-08-12 10:41:59 · 297 阅读 · 0 评论 -
JAVASE经典面试问题
JAVASE经典面试问题(必须熟背)编译java程序使用什么命令?运行java使用什么命令?javac *.javajava 类名什么是JDK,什么是JRE,JDK与JRE有什么区别?JDK:Java Development Toolkit Java开发工具包JRE:Java Runtime Enviorment Java运行时环境区别:开发JAVA程序必须安装JDK,运行JAVA程序必须安装JRE。为什么说JAVA语言的跨平台的?JAVA虚拟机JVM是跨平台的吗?因为JA原创 2020-07-28 09:49:43 · 98 阅读 · 0 评论 -
外观模式
外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。外观模式又称之为门面模式介绍意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接原创 2020-07-20 16:56:01 · 73 阅读 · 0 评论 -
适配器模式
适配器模式(Adapter Pattern)定义:Convert the interface of a class into another interface clients expect.Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.(将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。)类适配器:原创 2020-07-09 10:48:12 · 69 阅读 · 0 评论 -
java面试高频知识点
集合类组合拳(尤其是HashMap)我觉得这个已经问烂了,应该熟到条件反射的回答,提醒一下一些冷门知识:Arrays.asList有什么特点、fail-fast与fail-safe、以及hashmap的一些参数(以及为什么)、hashmap是否可以存null值,concurrenthashmap是否可以存null值等等。并发编程组合拳例如:synchronized 的锁升级、对象头、字节码层面、openJDK层面的实现(3个队列),硬件层面的实现,volatile的底层原理,DCL(Doub原创 2020-08-17 09:23:01 · 401 阅读 · 0 评论