
《Java基础》专栏
文章平均质量分 81
Java基础
Run,boy
别犹豫,就现在
展开
-
常见的哈希函数的构造方法简介
其次,对于特定的关键字集合,可能会出现哈希冲突,即不同的关键字映射到了同一个索引位置。但需要注意的是,选择合适的除数对于哈希表的性能影响较大,不同的除数可能导致不同的哈希冲突情况。实际上,直接定址法可以看作是一种特殊的哈希函数,其哈希函数的计算过程非常简单,直接将关键字作为索引值。折叠法(Folding Method)是一种哈希函数的构造方法,用于将给定的关键字(Key)映射到哈希表的索引位置。在直接定址法中,关键字的取值范围通常需要与数组的大小相匹配,以便每个关键字都能被映射到数组中的一个位置。原创 2023-08-16 23:01:52 · 1782 阅读 · 0 评论 -
Integer中缓存池讲解
Integer缓存池是一种优化技术,用于提高整数对象的重用和性能。在Java中,对于整数值在-128 到 127之间的整数对象,会被放入缓存池中,以便重复使用。这是因为在这个范围内的整数值被频繁使用,因此重用这些对象可以节省内存和提高性能。当使用自动装箱机制创建整数对象时,如果对象的值在缓存池范围内,会直接返回缓存池中的对象,而不是创建新的对象。这个特性可以通过调用Integer.valueOf(int)方法来实现。原创 2023-08-15 23:28:19 · 1549 阅读 · 0 评论 -
Java8之Optional类的基本使用
Optional是一个容器对象,它可能包含某个值,也可能不包含。它的设计目的是为了解决空指针异常问题。使用Optional可以避免在代码中显式地检查null值,从而使代码更加简洁和可读。原创 2023-08-15 22:46:32 · 1241 阅读 · 0 评论 -
Java反射相关类以及底层原理
在上面的示例中,我们创建了一个MyClass类的实例,并且使用getField()方法获取了name字段的Field对象,使用getDeclaredField()方法获取了age字段的Field对象。可以使用Class类的getField()方法或getDeclaredField()方法获取Field对象,然后使用get()方法获取字段的值,或者使用set()方法设置字段的值。通过Class对象的方法,可以获取类的构造器、字段、方法等成员信息,并可以动态地创建对象、调用方法、访问字段等。原创 2023-08-15 22:08:42 · 364 阅读 · 0 评论 -
Object 类的常见方法
【代码】Object 类的常见方法。原创 2023-08-15 20:55:35 · 550 阅读 · 0 评论 -
抽象类(abstract class)和接口(interface)的区别总结
当JDK 8引入了默认方法和静态方法功能后,接口不再是纯粹的抽象方法的集合,而是可以包含具体实现的方法。// 抽象方法// 默认方法// 静态方法@Override// 调用抽象方法// 调用默认方法// 调用静态方法可以看到,接口MyInterface包含了一个抽象方法abstractMethod、一个默认方法defaultMethod和一个静态方法staticMethod。在MyClass类中,实现了抽象方法abstractMethod,并继承了默认方法和静态方法。原创 2023-08-14 22:25:04 · 932 阅读 · 0 评论 -
MapStruct 中 Java Bean 映射代码生成器的基本使用
MapStruct是一个Java注解处理器,用于自动生成Java bean之间的映射代码。它可以大大简化数据转换的过程,减少手动编写转换代码的工作量。原创 2023-08-14 21:19:09 · 713 阅读 · 0 评论 -
Spring事务传播机制详细讲解
事务传播机制允许开发者根据实际需求来控制事务的行为。通过合理选择事务传播机制,可以保证事务的一致性和可靠性,提高系统的稳定性和性能。需要注意的是,事务传播机制只对方法级别的事务起作用,对注解方式的事务不适用。在使用注解方式时,可以通过@Transactional注解的propagation属性来指定事务的传播行为。原创 2023-08-01 07:03:23 · 2416 阅读 · 0 评论 -
Java中static关键字的作用
static {} }分析总结:在这个示例中,我们使用静态代码块来输出"Static block"。静态代码块在类加载时执行,且只会执行一次。在main方法中,我们输出"Main method"。} }分析总结:在这个示例中,我们定义了一个静态内部类InnerClass。静态内部类可以直接通过外部类名来访问,无需创建外部类的对象。在main方法中,我们创建了InnerClass的对象inner,并通过inner.printX来调用InnerClass的printX方法,它会打印x的值。原创 2023-07-30 18:48:03 · 669 阅读 · 0 评论 -
什么是死锁,如何解决
死锁是指在执行过程中,两个或两个以上的进程(或线程)由于竞争资源或彼此通信而阻塞,导致无法继续执行的情况。如果没有外部干预,这些进程将无法向前推进。这种状态被称为系统死锁或死锁产生。这些相互等待的进程被称为死锁进程。🕵️♀️面试官:🕵️♀️你给我将清楚死锁,我就录用你🐱🚀面试者:🐱🚀你录用我,我就给你将清楚。原创 2023-07-26 07:00:17 · 15870 阅读 · 2 评论 -
实现线程同步的几种方法
线程同步是指在多线程环境下,通过协调和控制线程的执行顺序和访问共享资源的方式,确保线程之间能够按照一定的顺序合作和共享资源,以避免竞争条件和数据不一致的问题。在多线程环境中,由于多个线程同时访问共享资源,可能会导致数据不一致或者竞争条件的问题。线程同步的目的就是保证共享资源的一致性和正确性,避免出现数据错误或者程序异常的情况。线程同步的实现可以通过使用同步关键字、锁对象、条件变量等手段来实现。通过合理地使用线程同步机制,可以保证多线程程序的正确性和稳定性,避免出现数据错误和程序崩溃的情况。原创 2023-07-24 11:57:58 · 3051 阅读 · 0 评论 -
Java当中的深拷贝和浅拷贝
从输出结果可以看出,尽管我们使用BeanUtils进行了拷贝,但person1和person2的属性值仍然是相同的,修改其中一个对象的属性值会同时影响另一个对象的属性值。它会创建一个全新的对象,并将原始对象中的所有属性或元素都复制到新的对象中。因此,若我们修改复制对象中的属性或元素,原始对象中对应的属性或元素不会受到任何影响。浅拷贝是一种复制对象到另一个变量的操作,它仅复制对象的地址而非对象本身。因此,若我们修改复制对象中的属性或元素,原始对象中对应的属性或元素也会随之改变。原创 2023-07-23 09:41:40 · 1474 阅读 · 0 评论 -
UUID的一点理解
UUID的唯一性主要依赖于生成UUID的算法和输入的数据。与UUID v3类似,它使用命名空间的UUID和一个唯一的名称作为输入,通过应用SHA-1散列算法生成UUID。根据UUID的标准规范,每个UUID都应该是唯一的,并且在全球范围内具有极低的碰撞概率。由于UUID的生成算法是基于时间戳和随机数的,所以UUID并不是按照顺序生成的,也不保证时间上的连续性,不适合用于排序操作。UUID是128位的二进制数,通常以字符串形式表示,占用的存储空间较大,不适合在空间受限的环境中使用。原创 2023-07-23 09:41:52 · 1016 阅读 · 0 评论 -
Java中finally中代码一定会执行吗
对应的try语句块被执行;程序正常运行。这意味着在正常情况下,无论try块是否发生异常,finally块中的代码都会被执行。finally块是用于保证在try块中可能发生异常的情况下,能够执行一些清理工作或者释放资源的重要机制。原创 2023-07-23 09:46:37 · 1687 阅读 · 0 评论 -
Java中动态代理的实现方式
动态代理(Dynamic Proxy)是一种在运行时创建代理对象的机制,它允许我们在不事先知道具体类型的情况下,通过代理对象来调用目标对象的方法。动态代理通常使用在面向对象编程中的AOP(面向切面编程)中,用于在目标对象的方法执行前后,添加一些额外的逻辑(如日志记录、性能监控、事务管理等),而不需要修改目标对象的源代码。原创 2023-07-29 08:26:22 · 1486 阅读 · 0 评论 -
面向对象五大基本原则
简而言之,接口隔离原则要求将庞大的接口拆分成更小的、更具体的接口,以避免接口过于臃肿和不必要的依赖关系。它通过将不同的职责分离到不同的类中,提高了代码的可读性、可维护性和可扩展性,并降低了系统的耦合性。遵循开放封闭原则可以提高代码的可维护性和可扩展性,降低系统的耦合性,是构建高质量、可维护的软件系统的重要原则之一。同时,通过扩展现有的代码,可以实现新功能,而不会对已有的代码进行破坏性的修改。里氏替换原则的核心思想是,任何基类的实例都可以在程序中被其子类的实例替换,而不会影响程序的正确性。原创 2023-08-04 07:33:08 · 6225 阅读 · 0 评论 -
Java8 新特性LocalDateTime API 的详细使用
Java 8 引入了一个新的日期和时间API,其中包括了LocalDateTime类。LocalDateTime类表示了日期和时间,但不包含时区信息。原创 2023-07-22 10:18:54 · 647 阅读 · 0 评论 -
Java中创建对象的方式
然后,重写了clone()方法,调用父类的clone()方法,并将返回的对象进行强制转换。在上面的示例中,我们首先使用 MyClass.class 获取了类的 Class 对象,然后通过 getConstructor() 方法获取了默认构造函数的 Constructor 对象。Class 类的 newInstance() 方法是一个方便的方法,它会调用类的默认构造函数来创建一个对象。在要克隆的类中,重写clone()方法,调用父类的clone()方法,并将返回的对象进行强制转换。原创 2023-08-11 07:04:01 · 360 阅读 · 0 评论 -
Java反射机制相关概念
当一个类或接口被装入JVM时,就会产生一个与之关联的Java.lang.Class对象,我们可以通过这个Class对象来访问被装入类的详细信息。通过反射,这些框架可以在运行时动态地获取和操作类的信息,从而实现更灵活和可扩展的功能。反射可以用于实现动态代理模式,通过在运行时动态生成代理类,并在代理类中调用被代理对象的方法。反射可以将类的成员(属性、方法等)以及类的结构转换为可以操作的对象,从而可以对类进行动态修改和调用。反射允许在运行时动态地获取类的信息和操作类的成员,使得程序具有更大的灵活性和可扩展性。原创 2023-07-21 07:27:00 · 774 阅读 · 0 评论 -
常见的字符编码详细解释
人类的文字字符编码是通过一套法则将自然语言的字符与计算机认识的0和1字符进行配对的过程。这个过程需要使用字符编码规则来转换人类的文字字符为计算机能够识别的01字符。字符编码规则是一套法则,它将自然语言的字符集(如字母表或音节表)与其他东西的集合(如号码或电脉冲)进行对应。类似于摩尔斯电码,上个世纪60年代,美国制定了一套字符编码规则,称为ASCII码,用于表示英语字符与二进制位之间的关系,并且至今仍在使用。然而,由于ASCII码只包含128个字符,无法表示世界上其他许多文字,因此需要更全面的字符编码。原创 2023-07-22 10:17:13 · 2488 阅读 · 0 评论 -
为什么String要设计成不可变的
为什么要将String设计为不可变的呢?这个问题一直困扰着许多人,甚至有人直接向Java的创始人James Gosling提问过。🎃“只要有可能,我都会使用不可变变量”🎃。那么,他为什么会给出这样的回答呢?这背后的原因是什么?他是基于哪些思考做出的呢?实际上,将String设计为不可变的主要基于以下几个方面的考虑:缓存、安全性、线程安全和性能。首先,不可变性使得String对象可以被缓存。由于String是不可变的,它们的值在创建后就不能被修改。原创 2023-08-13 07:35:04 · 573 阅读 · 0 评论 -
Java包装类的自动装箱拆箱使用以及详解
Java包装类是一组用于将基本数据类型转换为对象的类,它们位于java.lang包中。Java基本数据类型是非对象类型,例如int、float、boolean等,而包装类提供了一种将这些基本数据类型转换为对象的方式。Java包装类的主要目的是在需要使用对象而不是基本数据类型的情况下提供支持。例如,在集合类中,只能存储对象而不是基本数据类型。此时,可以使用包装类将基本数据类型转换为对应的对象,并将其存储在集合中。Java包装类的常用包装类如下包装类作用Integer用于封装int类型的值。原创 2023-07-18 00:01:35 · 1254 阅读 · 0 评论 -
自定义注解实现表单重复提交
自定义注解实现表单重复提交原创 2023-07-23 09:46:19 · 656 阅读 · 0 评论 -
Java中注解的简单使用
注解(Annotation)是Java中的一种特殊形式的标记,它可以在代码中添加元数据信息。注解提供了一种在源代码中添加、修改、删除元数据的方式,这些元数据可以用来在编译时进行验证、在运行时进行解析或者在部署时进行配置。注解本身并不影响代码的执行逻辑,它只是对代码的补充说明。注解可以用于修饰类、方法、字段等程序元素,它们以 @ 符号开头,紧随其后的是注解的名称和属性(如果有的话)。元注解是指用来修饰其他注解的注解。原创 2023-07-17 06:31:35 · 282 阅读 · 0 评论 -
细说转发和重定向的过程与区别
转发的特点是可以共享请求的上下文信息,比如请求参数、Session对象等,因为在转发过程中,请求和响应对象在服务器内部传递,不会重新创建。需要注意的是,在重定向的过程中,客户端的URL会发生变化,变成了重定向目标页面的URL。在重定向过程中,客户端发出第一次请求后,服务器会返回一个特殊的响应码(例如302),告诉客户端要跳转到指定的URL,客户端会根据重定向响应重新发起请求。需要注意的是,在转发过程中,客户端并不知道页面发生了跳转,客户端的URL保持不变,仍然是最初的请求URL。原创 2023-07-16 16:59:21 · 320 阅读 · 0 评论 -
多个文件打成压缩包进行下载
多文件压缩下载原创 2021-03-01 17:24:38 · 657 阅读 · 2 评论 -
自定义缓存注解
自定义缓存注解原创 2022-11-03 23:28:39 · 355 阅读 · 1 评论 -
AOP实现防重复提交
Aop实现防重复提交原创 2022-11-14 23:31:56 · 788 阅读 · 0 评论 -
集成分布式ID之雪花算法
分布式ID简介之雪花算法原创 2022-11-15 21:01:46 · 669 阅读 · 0 评论 -
String类常用方法介绍
String类中高频使用的方法原创 2022-11-19 11:04:26 · 1190 阅读 · 0 评论 -
Java8中list集合二次分组
Java8 list集合 二次分组原创 2023-03-11 22:43:21 · 1517 阅读 · 0 评论 -
守护线程和线程优先级的理解
守护线程是一种特殊类型的线程,它的目的是为其他线程提供服务,当所有的非守护线程结束时,守护线程也会随之结束,无论它是否执行完毕。守护线程是通过设置线程的daemon属性为True来创建的。守护线程会随着程序的结束而结束,即使它还没有执行完毕。守护线程不能用于执行一些需要完整执行的操作,比如文件写入等,因为它可能会在程序结束之前就被终止。守护线程通常用于执行一些后台任务,比如定时任务、垃圾回收等。原创 2023-07-17 06:33:02 · 484 阅读 · 0 评论 -
Java之集合的排序方式(Comparable和Comparator的基本使用以及区别)
而Comparator接口是通过外部实现的,可以为同一个类实现多个Comparator接口,每个Comparator实现定义一种不同的排序规则。在主函数中,我们创建了一个学生对象的列表,然后使用Collections的sort方法,传入了我们定义的比较器,实现了对学生对象的年龄进行排序。而使用Comparator接口进行排序时,可以根据需要定义不同的排序规则,程序运行时可以根据不同的比较器进行不同的排序。而Comparator接口可以用于对任意类的对象进行比较和排序,无需修改被比较的类的源代码。原创 2023-07-22 22:06:24 · 808 阅读 · 0 评论 -
Java线程Thread类常用方法
run()方法是Thread类中定义的线程执行逻辑的方法。当一个线程通过start()方法启动后,会自动调用run()方法来执行线程的代码逻辑。} }在上面的示例中,我们定义了一个实现了Runnable接口的MyThread类,重写了run()方法,在run()方法中输出一句话。在main()方法中,我们创建了一个Thread对象,并将MyThread对象作为参数传递给Thread的构造函数。然后,我们通过start()方法启动了该线程。原创 2023-07-09 07:11:07 · 1489 阅读 · 0 评论 -
Java异常的处理机制
finally块必定会被执行,通常用于释放资源或进行清理工作。除了Java提供的异常类之外,我们还可以自定义异常类来表示特定的异常情况。在Java中,可以通过创建自定义的类来定义自己的异常。自定义异常类通常需要继承自Java提供的异常类(如Exception或RuntimeException)或它们的子类。// 自定义异常类 public class MyException extends Exception {原创 2023-07-07 06:42:14 · 2407 阅读 · 0 评论 -
找出一个List中每个元素出现的次数
最后,我们遍历结果的Map,并输出每个元素和其出现的次数。然后,我们遍历列表中的每个元素,对于每个元素,我们使用Collections类的frequency()方法来计算该元素在列表中出现的次数,并将结果存储在一个新的集合中。对于每个元素,我们使用Collections类的frequency()方法来计算该元素在列表中出现的次数,并将结果存储在frequency变量中。接下来,我们遍历列表中的每个元素,对于每个元素,我们使用getOrDefault()方法获取其当前的计数值,并将其加1。原创 2023-07-05 07:07:57 · 3763 阅读 · 0 评论 -
Java创建线程的几种方式
Callable是一个带有返回值的线程,通过实现Callable接口并实现call()方法来创建线程。可以使用ExecutorService来提交Callable任务,并返回一个Future对象,通过调用Future对象的get()方法来获取线程的返回值。通过实现Runnable接口来创建线程。然后,可以创建Thread对象,将实现了Runnable接口的对象作为参数传递给Thread对象,并调用start()方法来启动线程。然后,可以通过创建Thread对象并调用start()方法来启动线程。原创 2023-07-05 07:03:29 · 363 阅读 · 0 评论 -
Java之面向对象的思想
这种方式强调了操作的步骤和流程,需要程序员手动编写每个步骤的代码,并且需要考虑各种异常情况和错误处理。这种方式强调了对象的属性和方法,需要程序员定义好洗衣机对象的属性和方法,并且可以通过调用方法来完成洗衣的操作。同时,面向对象的方式也可以实现封装、继承和多态等特性,更加方便代码的复用和维护。总的来说,面向过程强调操作步骤和流程,而面向对象则强调对象的属性和方法。两种方式各有优缺点,并且可以根据具体的情况选择合适的方式进行编程。类是一种模板或蓝图,它定义了一组属性和方法,用于描述一类对象的特征和行为。原创 2023-06-27 17:05:33 · 582 阅读 · 0 评论 -
Java当中多态的理解
Java当中多态的理解原创 2022-12-21 22:37:39 · 396 阅读 · 0 评论 -
如何在Oracle官网下载jdk
如何在Oracle官网下载jdk原创 2022-11-27 17:12:43 · 7048 阅读 · 0 评论