![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java面试
文章平均质量分 79
面试题
yujkss
这个作者很懒,什么都没留下…
展开
-
【面试题-015】Redis的线程模型是什么 为什么速度快
Redis是一个开源的、高性能的键值对(key-value)数据库。原创 2024-06-03 18:01:02 · 875 阅读 · 0 评论 -
【面试题-015】DockerFile中CMD和ENTRYPOINT指令有什么区别
指令都是用来指定容器启动时运行的命令。它们之间的主要区别在于它们的使用方式和覆盖行为。定义了容器的启动入口点。在实际使用中,可以根据需要选择单独使用。提供了容器启动时的默认命令和参数,而。在这个例子中,容器启动时默认会执行。或者将它们组合使用。原创 2024-06-03 17:35:20 · 236 阅读 · 0 评论 -
【面试题-014】Mysql数据库有哪些索引类型?
聚簇索引可以提高根据主键查询的速度,但会降低非主键列的查询速度。非聚簇索引可以提高非主键列的查询速度,但会降低根据主键查询的速度。在设计索引时,需要根据具体的查询模式和数据分布来选择最合适的索引类型,以提高查询性能。原创 2024-06-03 17:05:31 · 1020 阅读 · 0 评论 -
【面试题-013】MyBatis 中,`#` 和 `$` 符号区别
一级缓存适用于单次会话内的查询结果缓存,可以提高会话内的查询效率。二级缓存适用于跨多个会话的查询结果缓存,可以提高不同会话之间的查询效率。在使用 MyBatis 时,可以根据实际需求来选择使用一级缓存、二级缓存,或者两者结合使用。同时,需要注意缓存策略的设置,以避免缓存带来的问题,如脏数据、数据不一致等。原创 2024-06-02 16:35:55 · 461 阅读 · 0 评论 -
【面试题-012】什么是Spring 它有哪些优势
Spring 是一个开源的 Java 平台,由 Rod Johnson 创建,用于简化企业级 Java 应用程序的开发。它于 2003 年首次发布,并迅速成为 Java 社区中使用最广泛的框架之一。Spring 框架的核心是 IoC(Inversion of Control,控制反转)容器,它允许开发者将依赖关系注入到对象中,而不是由开发者手动创建对象。原创 2024-06-02 16:09:01 · 998 阅读 · 1 评论 -
【面试题-011】如何设计一个三高系统
设计一个“三高”系统(即高可用、高性能、高并发)需要综合考虑系统架构、技术选型、运维管理等多个方面。原创 2024-06-02 16:03:46 · 456 阅读 · 0 评论 -
【面试题-010】并发的三大特性
volatile。原创 2024-06-02 16:01:23 · 780 阅读 · 0 评论 -
【面试题-009】线程的生命周期和状态
在 Java 中,线程的生命周期包括几个不同的状态,这些状态可以由线程的状态机(State Machine)来表示。线程状态的转换遵循一定的规则,并且可以通过 Java 线程 API 来监控和控制。原创 2024-06-02 15:44:56 · 875 阅读 · 0 评论 -
【面试题-008】GC如何判断对象可以被回收
在Java中,垃圾收集器(Garbage Collector,简称GC)负责自动管理内存,回收不再使用的对象所占用的空间。GC判断对象是否可以被回收的依据主要是可达性分析(Reachability Analysis)。原创 2024-06-02 15:27:52 · 462 阅读 · 0 评论 -
【面试题-007】说一下JVM原理
JVM(Java Virtual Machine,Java虚拟机)是Java语言的一个核心概念,它允许Java代码在不同的操作系统上运行,而不需要为每个平台编写不同的代码。JVM是一种抽象的计算机,它实现了Java语言规范中的所有功能,包括指令集、寄存器、栈和堆等。原创 2024-06-02 15:19:44 · 290 阅读 · 0 评论 -
【面试题-006】java中的垃圾回算法有哪些?
Java中的垃圾回收(Garbage Collection,简称GC)是指自动内存管理的一种机制,用于回收不再使用的对象占用的内存。原创 2024-06-02 15:18:44 · 408 阅读 · 0 评论 -
【面试题-005】Java中的类加载机制有哪些
双亲委派模型(Parents Delegation Model)是 Java 类加载器体系的一个重要特性,它规定了当一个类加载器收到类加载的请求时,它首先不会自己去尝试加载这个类,而是将这个请求委派给父加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最终都应该传送到最顶层的引导类加载器中,只有当父加载器无法加载某一个类时,子加载器才会尝试自己去加载。原创 2024-06-02 15:15:36 · 303 阅读 · 0 评论 -
【面试题-004】ArrayList 和 LinkList区别
都是 Java 中常用的动态数组实现,都实现了。原创 2024-06-02 14:43:18 · 316 阅读 · 0 评论 -
【面试题-003】接口和抽象类的区别
接口(Interface)和抽象类(Abstract Class)都是 Java 中用来定义抽象层次和实现多态的机制。原创 2024-06-02 14:37:00 · 147 阅读 · 0 评论 -
【面试题-001】什么是面向对象?
面向对象(Object-oriented)是一种程序设计范例,它通过将数据与对数据操作的函数(方法)封装在一起,以对象的形式来组织代码,从而更好地模拟现实世界的事物。面向对象编程的主要概念包括类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。:类是面向对象编程的基本概念,它定义了一种数据结构,包括数据成员(属性)和方法(函数)。类可以看作是创建对象的模板或蓝图。:对象是类的一个实例,通过实例化类来创建对象。原创 2024-06-02 14:04:17 · 908 阅读 · 0 评论 -
【面试题-002】Java 中,`==` 和 `equals()`区别
【代码】【面试题-002】Java 中,`==` 和 `equals()`区别。原创 2024-06-02 14:23:27 · 187 阅读 · 0 评论 -
【面试题-003】重载和重写的区别
在面向对象编程中,重载(Overloading)和重写(Overriding)是两个不同的概念,它们用于实现多态性:原创 2024-06-02 14:27:04 · 151 阅读 · 0 评论 -
java面试基础(一)
当线程A持有独占锁a,并尝试去获取独占锁b的同时,线程B持有独占锁b,并尝试获取独占锁a的情况下,就会发生AB两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。原创 2022-09-08 22:47:01 · 242 阅读 · 0 评论 -
0-面试官:== 和 equals 的区别是什么
= 对于基本类型来说是值比较,对于引用类型来说是比较的是引用;而 equals 默认情况下是引用比较,只是很多类重写了 equals 方法,比如 String、Integer 等把它变成了值比较,所以一般情况下 equals 比较的是值是否相等。原创 2022-09-08 22:36:33 · 127 阅读 · 0 评论 -
14-面试官:单例模式有几种写法?
单例模式适用于经常被访问的对象,或是创建和销毁需要调用大量资源和时间的对象,使用单例模式可以避免频繁创建和销毁对象。单例模式的常用实现方法有 4 种:饿汉模式、懒汉模式、静态内部类和枚举。从写法的简洁性、线程安全性和代码的易懂性等方面综合来看,博主比较推荐使用枚举或懒汉模式来实现单例模式。原创 2022-09-04 22:03:52 · 150 阅读 · 0 评论 -
13-面试官:synchronized有几种用法?
使用synchronized 无需手动执行加锁和释放锁的操作,我们只需要声明 synchronized 关键字就可以了,JVM 层面会帮我们自动的进行加锁和释放锁的操作。synchronized 可用于修饰普通方法、静态方法和代码块,接下来我们分别来看。synchronized 用 3 种用法,用它可以来修饰普通方法、静态方法和代码块,其中。原创 2022-09-04 21:49:35 · 306 阅读 · 0 评论 -
17-面试官:如何解决线程安全问题?
在 Java 中,解决线程安全问题的手段有 3 种:1.使用线程安全的类,如 AtomicInteger 类;2.使用锁 synchronized 或 ReentrantLock 加锁排队执行;3.使用线程本地变量 ThreadLocal 来处理。参考&鸣谢。原创 2022-09-04 21:38:19 · 192 阅读 · 0 评论 -
12-面试官:如何使用线程池执行定时任务?
线程池执行定时任务的实现方法有 3 个:使用 schedule 方法执行定时任务,只执行一次定时任务。使用 scheduleAtFixedRate 方法执行定时任务,执行多次定时任务,它的执行时间间隔是固定的,不受定时任务执行时长影响(定时任务时间间隔 > 任务执行时间)。使用 scheduleWithFixedDelay 方法执行定时任务,执行多次定时任务,它是在定时任务执行完之后,再隔 N 秒开始执行下一次定时任务,它的执行时间受定时任务执行时长影响。原创 2022-09-04 21:20:51 · 1706 阅读 · 0 评论 -
15-面试官:线程池的拒绝策略有哪些
/ 任务的具体方法 Runnable runnable = new Runnable() {System . out . println("当前任务被执行,执行时间:" + new Date() + " 执行线程:" + Thread . currentThread() . getName());try {// 等待 1s TimeUnit . SECONDS . sleep(1);} } };原创 2022-09-04 21:04:57 · 197 阅读 · 0 评论 -
11-面试管:为什么创建线程池一定要用ThreadPoolExecutor?
线程池的创建方式总共分为两大类:手动使用 ThreadPoolExecutor 创建线程池和自动使用 Executors 执行器创建线程池的方式。其中使用 Executors 自动创建线程的方式,因为线程个数或者任务个数不可控,可能会导致内存溢出的风险,所以在创建线程池时,建议使用 ThreadPoolExecutor 的方式来创建。参考&鸣谢 https://gitee.com/mydb/interview。原创 2022-09-04 20:53:10 · 181 阅读 · 0 评论 -
10-面试官:如何正确停止线程?
/ 自定义中断标识符 public volatile boolean isInterrupt = false;// 如果为 true -> 中断执行 while(!// 业务逻辑处理 } } }但自定义中断标识符的问题在于:线程中断的不够及时。因为线程在执行过程中,无法调用 while(!// 自定义的中断标识符 private static volatile boolean isInterrupt = false;原创 2022-09-04 20:42:09 · 179 阅读 · 0 评论 -
16-面试官:${} 和 #{} 有什么区别?
{}和#{}1 、功能不同:$ {} 是直接替换,而 # {} 是预处理;2 、使用场景不同:普通参数使用 # {} ,如果传递的是 SQL 命令或 SQL 关键字,需要使用 $ {} ,但在使用前一定要做好安全验证;3 、安全性不同:使用 $ {} 存在安全问题,而 # {} 则不存在安全问题。原文。原创 2022-09-04 16:56:23 · 300 阅读 · 0 评论 -
9-面试官:SpringBoot 有几种读取配置文件的方法
使用 @Value 读取配置文件。使用 @ConfigurationProperties 读取配置文件。使用 @PropertySource 读取配置文件。使用 Environment 读取配置文件。使用原生方式读取配置文件。其中最常用的是前 3 种,如果读取某一个配置项可使用 @Value,如果读取一组配置项可使用 @ConfigurationProperties,如果要指定读取某一个具体的配置文件可使用 @PropertySource 来指定。原创 2022-09-04 16:38:17 · 112 阅读 · 0 评论 -
8-面试官:如何实现 List 集合去重?
/ 创建并给 List 赋值 List < Person > list = new ArrayList < >();list . add(new Person("李四" , "123456" , 20));list . add(new Person("张三" , "123456" , 18));list . add(new Person("王五" , "123456" , 22));list . add(new Person("张三" , "123456" , 18));原创 2022-09-04 15:58:59 · 209 阅读 · 0 评论 -
18-面试官:说一下线程生命周期,以及转换过程?
Java 中线程的生命周期有 6 种:NEW(初始化状态)、RUNNABLE(可运行/运行状态)、BLOCKED(阻塞状态)、WAITING(无时限等待状态)、TIMED_WAITING(有时限等待状态)、TERMINATED(终止状态)。原创 2022-09-03 18:19:14 · 118 阅读 · 0 评论 -
7-面试官:为什么需要线程池?什么是池化技术?
线程池是线程使用的一种模式,它将线程和任务的概念分离开,使用线程来执行任务,并提供统一的线程管理和任务管理的实现方法,避免了频繁创建和销毁线程所带来的性能开销。池化技术指的是提前准备一些资源,在需要时可以重复使用这些预先准备的资源。池化技术的优点主要有两个:提前准备和重复利用。线程池是池化技术的典型场景,线程池的优点主要有 4 点:1.复用线程,降低了资源消耗;2.提高响应速度;3.提供了管理线程数和任务数的能力;4.更多增强功能。转载 2022-09-03 14:41:25 · 130 阅读 · 0 评论 -
6-面试官:说说线程池的 7 大参数
核心线程数,线程池正常情况下保持的线程数,大户人家“长工”的数量。:最大线程数,当线程池繁忙时最多可以拥有的线程数,大户人家“长工”+“短工”的总数量。:空闲线程存活时间,没有活之后“短工”可以生存的最大时间。TimeUnit:时间单位,配合参数 3一起使用,用于描述参数 3 的时间单位。:线程池的任务队列,用于保存线程池待执行任务的容器。:线程工厂,用于创建线程池中线程的工厂方法,通过它可以设置线程的命名规则、优先级和线程类型。:拒绝策略,当任务量超过线程池可以保存的最大任务数时,执行的策略。原创 2022-09-03 14:20:27 · 1158 阅读 · 0 评论 -
5-面试官:线程池有几种创建方式?推荐使用哪种?
线程池的创建方式总共有以下 7 种:Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待。Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程。Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序。原创 2022-09-03 12:26:09 · 484 阅读 · 0 评论 -
4-面试官:有哪些创建线程的方法?推荐使用哪种?
在 Java 语言中,创建线程有 3 大类实现方式、7 种实现方法,如果是 JDK 1.8 以上版本,在不需要获得线程执行结果的情况下,推荐使用 Lambda 方式来创建线程,因为它的写法足够简洁。如果想要获取线程执行结果,可使用 FutureTask + Callable 的方式来实现。原创 2022-09-03 11:56:47 · 284 阅读 · 0 评论 -
3-面试官:HashMap有几种遍历方法?推荐使用哪种?
本文介绍了7 种 HashMap 的遍历方式,其中 JDK 8 之前主要使用 EntrySet 和 KeySet 的遍历方式,而 KeySet 的遍历方式性能比较低,一般不推荐使用。然而在 JDK 8 之后遍历方式就有了新的选择,可以使用比较简洁的 Lambda 遍历,也可以使用性能比较高的 Stream 多线程遍历。原创 2022-09-03 11:40:11 · 130 阅读 · 0 评论 -
2-面试官:重写 equals 时为什么一定要重写 hashCode?
hashCode 和 equals 两个方法是用来协同判断两个对象是否相等的,采用这种方式的原因是可以提高程序插入和查询的速度,如果在重写 equals 时,不重写 hashCode,就会导致在某些场景下,例如将两个相等的自定义对象存储在 Set 集合时,就会出现程序执行的异常,为了保证程序的正常执行,所以我们就需要在重写 equals 时,也一并重写 hashCode 方法才行。原创 2022-09-03 11:18:36 · 138 阅读 · 0 评论 -
1-面试官:int和Integer有什么区别?为什么要有包装类?
int和Integer有什么区别?为什么要有包装类?Java 是一种强数据类型的语言,因此所有的属性必须有一个数据类型。原创 2022-09-03 10:49:43 · 162 阅读 · 0 评论