自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 【mybatis】TypeAliasRegistry解读

类在MyBatis框架中起着至关重要的作用,它是MyBatis类型别名功能的核心实现。类型别名允许开发者在配置文件中使用更简短的名字代替长的类名。这个机制在提升配置文件的可读性和简化配置过程中发挥着重要作用。以下是对类的概述,旨在为读者提供一个清晰的理解框架。XML配置文件中使用标签。使用@Alias注解直接在类上声明。编程方式通过调用的方法动态注册。这提供了灵活的选择,以适应不同的项目结构和开发习惯。通过深入探讨MyBatis中的。

2024-03-22 23:02:02 949 6

原创 【mybatis】TypeHandler解读

在MyBatis中,的主要职责是将数据从Java类型转换为可以在数据库中存储的JDBC类型,以及将数据库中的数据转换回Java类型。这一过程在MyBatis执行SQL操作时自动进行,对于用户是透明的。要在MyBatis中使用自定义的,需要在MyBatis配置文件中进行注册。例如:</在注册后,MyBatis会在执行SQL操作时自动使用这个自定义的来处理CustomType类型的数据。在MyBatis中,TypeHandler是一个核心组件,负责Java类型和JDBC类型之间的转换。

2024-03-21 22:35:17 986 4

原创 【mybatis】MetaObject解读

MetaObject作为 MyBatis 中的一个核心组件,通过封装复杂的反射操作和提供统一的接口,极大地提高了开发效率和运行性能。通过深入理解和合理利用MetaObject,可以更加灵活和高效地在 MyBatis 中进行数据处理。

2024-03-21 22:34:22 430

原创 【SpringBoot】优雅实现超大文件上传

通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。

2024-03-20 23:03:51 813 2

原创 【mybatis】objectwrapper解读

在 MyBatis 中,是一个关键的接口,用于详细封装了对象的属性信息。主要用于内部操作,它抽象了对象的属性操作,使得 MyBatis 能够统一处理原生类型、Bean 对象以及 Map 集合等。作为一个高层次的抽象,定义了一套操作对象属性的通用方法。这种抽象使得 MyBatis 能够支持广泛的数据类型,而无需为每种数据类型编写特定的代码。通过抽象出一个统一的接口,MyBatis 可以轻松地扩展以支持新的对象类型,只需添加相应类型的实现即可。是一个抽象类,它实现了接口。它包含一个protected的。

2024-03-19 22:51:07 1159 5

原创 【mybatis】Reflector反射类

Reflector类是 MyBatis 框架中不可或缺的一环,它通过高效地处理反射操作,极大地增强了 MyBatis 的灵活性和易用性。深入理解Reflector的设计和实现,有助于更好地把握 MyBatis 的内部工作机制,以及如何在项目中有效利用 MyBatis 提供的强大功能。

2024-02-20 13:12:37 707 9

原创 【Mybatis】TypeHandler使用

在MyBatis中,用于处理Java类型和JDBC类型之间的映射和转换。每当MyBatis在执行SQL操作时,都会使用来确保数据类型的正确转换。尽管MyBatis提供了很多内置的,但在某些特殊情况下,我们可能需要自定义来处理特定的类型转换。自定义可以让我们控制复杂类型的持久化策略,例如枚举类型、复杂的对象类型等。创建一个自定义的首先需要实现MyBatis的接口或者继承类。以下是一个简单的自定义@Override@Override@Override@Override。

2024-02-19 21:48:26 1094 9

原创 redis基本数据结构介绍

Redis(Remote Dictionary Server)是一个开源的高性能键值对数据库,它支持多种数据结构,包括字符串、哈希、列表、集合、有序集合等。这些数据结构为开发者提供了丰富的数据操作方式,使得Redis在缓存、消息队列、排行榜等场景中有着广泛的应用。

2024-02-04 14:46:48 770 13

原创 M1 安装 homebrew

进入下载最新的 tag根据系统选择下载:mac、windows 可以下载 zip 文件, linux 可以下载 tar.gz 的文件。下载后解压。在/opt文件夹下创建homebrew文件夹,然后将解压后的内容全部复制到homebrew文件夹下建立软连接 . sudo ln -s /opt/homebrew/bin/brew /usr/local/bin/brew进入本地homebrew的存放路径,如果找不到的话,可以直接在terminal下输入以下命令进入/opt目录10.查看/opt。

2024-02-01 22:31:52 777 9

原创 Kerberos安装

安装kdc的节点需要获取krb5-server、krb5-libs、krb5-workstation这三个安装包,通过yum源获取。

2024-01-31 23:02:04 886 28

原创 Java Socket编程

Socket(套接字)是计算机网络编程中的一个核心概念,它提供了一种端到端的通信服务。具体来说,Socket是应用层与传输层之间的一个抽象层,它隐藏了复杂的网络协议细节,使得开发者可以方便地进行网络通信。在Socket编程中,开发者通常不需要关心底层的网络协议是如何工作的,只需要通过Socket API进行数据的发送和接收即可。Socket可以看作是一个通信的端点,它包含了进行网络通信所需的五种信息:通信协议、本地地址、本地端口、远程地址和远程端口。

2024-01-28 18:03:56 36576 26

原创 Spring与Redis集成

据以前的情况,我们在Java中使用Redis时一般是使用Jedis来操作的,大致的一段代码如下所示上边的这样的一段代码其实是有些臃肿的,但是如果我们引入RedisTemplate,其实会简化不少。看了以上的内容,可以看到引入了RedisTemplate其实已经很简洁了,但是明显还不够,下面我们将考虑引入。

2024-01-27 16:16:34 1022 15

原创 springboot自动配置的条件注解使用

这是一种根据上下文中是否存在特定 bean 有条件地配置应用程序的方法。指定当配置属性不存在时是否匹配,默认值为。指定期望的属性值,还可以通过。指定配置属性的名称,

2024-01-25 22:25:30 809 10

原创 build.gradle标签详解

通过对标签的详细解析,我们可以看到Gradle构建脚本的强大和灵活。

2024-01-24 22:31:13 540 6

原创 maven详细介绍

pom.xml是Maven项目的核心配置文件,全称为Project Object Model(项目对象模型),它使用XML格式来描述项目的基本信息、依赖关系、构建配置等。这个文件是Maven项目构建、依赖管理和版本控制等功能的基础。以下是pom.xml项目基本信息:包括项目的名称、描述、组织信息、开发者信息等。这些信息对于项目的识别和交流非常重要。依赖管理:在pom.xml中,可以定义项目所需的第三方库和模块,Maven会自动下载并管理这些依赖。

2024-01-23 23:17:48 1853 21

原创 linux性能优化-磁盘I_O优化

文件系统是在磁盘的基础上,提供了一个用来管理文件的树状结构。接下来我们就看看Linux 文件系统的工作原理。

2024-01-22 22:36:10 1880 25

原创 倒排索引介绍

倒排索引是一种高效、可扩展的查询数据结构,在搜索引擎和信息检索等领域具有广泛的应用前景。

2024-01-17 22:12:09 487 14

原创 Java 9新特性

总结起来,Java 9的新特性为开发者带来了更好的代码组织方式、更高效的集合处理、更安全的空值处理以及更好的版本兼容性。通过模块化系统,我们可以更好地组织和管理代码,减少代码的耦合度;接口私有方法的引入,使得我们可以更好地封装接口中的辅助逻辑;Stream API的改进,为我们提供了更灵活和高效的集合处理方式。

2024-01-16 20:54:09 622 7

原创 java-RateLimiter详解

RateLimiter作为Guava库提供的一个强大工具,为Java开发者提供了一种简单有效的限流方案。通过深入了解其工作原理和使用方法,我们可以更好地将其应用于实际项目中,保护系统的稳定性和可用性。

2024-01-15 22:41:35 1322 4

原创 Java-基准测试

JMH是一个用于编写可靠Java微基准测试的工具。它可以帮助开发者量化代码片段的执行时间,这对于理解代码性能至关重要。通过JMH,开发者可以比较不同算法或代码实现的性能,从而做出基于数据的优化决策。JMH的设计考虑了基准测试中的各种陷阱,如JVM的热点优化、死码消除和垃圾收集暂停。它提供了一组注解和工具类,使得编写、配置和运行基准测试变得简单而直观。

2024-01-15 22:32:52 890

原创 java-ArrayBlockingQueue详解

是一个基于数组实现的阻塞队列,它继承自并实现了接口。这个队列在创建时需要指定一个固定的大小,之后这个大小就不能再改变了。当队列满时,如果再有新的元素试图加入队列,那么这个操作会被阻塞;同样地,如果队列为空,那么从队列中取元素的操作也会被阻塞。这种特性使得非常适合作为生产者-消费者模式中的缓冲区。是Java并发编程中一个非常实用的工具类。它提供了线程安全的阻塞队列实现,支持生产者-消费者模式,并允许通过队列的大小来控制系统的流量。在使用。

2024-01-13 22:36:33 1259 10

原创 Java并发Condition 详解

Condition接口在Java并发编程中的重要性和优势。它提供了更为灵活和强大的等待/通知机制,支持多条件同步、可中断等待和定时等待等高级特性。在使用Condition时,我们需要注意一些常见问题,以确保程序的正确性和性能。

2024-01-12 23:08:46 1165 4

原创 StampedLock详解

是一个强大的同步工具,它在特定的使用场景下可以提供比传统锁更高的性能。

2024-01-12 12:35:40 743 2

原创 Phaser详解

Phaser是Java并发工具包中一个强大而灵活的组件,它提供了协调并行任务执行的高级机制。在处理复杂的多线程问题时,考虑使用Phaser可以使代码更加简洁且易于管理。

2024-01-11 22:29:49 860 6

原创 Semaphore信号量详解

Semaphore是一个强大而灵活的同步工具,它允许我们细粒度地控制对资源的并发访问。通过合理地使用Semaphore,我们可以确保系统在高并发环境下的稳定性和性能。

2024-01-11 21:45:47 1379 10

原创 java-Exchanger详解

Exchanger类可用于在两个类型为T的线程之间共享对象。该类仅提供了一个重载的方法exchange(T t)。当调用exchanger时,它会等待成对的另一个线程也调用它。在这一点上,第二个线程发现第一个线程正在等待其对象。线程交换它们持有的对象并发出交换信号,然后它们可以返回。让我们看一个例子,以理解两个线程之间使用Exchanger@Testtry {try {在这里,我们有两个线程使用共同的Exchanger交换彼此之间的消息。@Testtry {

2024-01-10 22:39:38 580 7

原创 AtomicBoolean详解

AtomicBoolean的使用方法,通常情况下,我们可以使 用AtomicBoolean来进行某个flag的开关控制。

2024-01-09 22:00:27 1146 4

原创 java并发-AtomicInteger详解

本文介绍了相关的方法,通过源码很明显看出底层是通过cas+自旋实现。

2023-12-27 23:12:02 1210 2

原创 linux 性能优化-内存优化

CPU 管理一样,内存管理也是操作系统最核心的功能之一。内存主要用来存储系统和应 用程序的指令、数据、缓存等。

2023-12-21 21:36:39 2339 7

原创 java并发-ConcurrentHashMap 在Java7 和 8 的区别

正是由于这些规则和要求的限制,红黑树保证了较高的查找效率,好处就是避免在极端的情况下冲突链表变得很长,在查询的时 候,效率会非常慢。,是一种平衡二叉查找树,查找效率高,会自动平衡,防止极端不平衡从而影响查找效率的情况发生。反观链表,它的时间复杂度就不一样了,如果发生了最坏的情况,可能需要遍历整个链表才能找到目标元素,时间复杂度为。put 方法的核心是 putVal 方法,为了方便阅读,我把重要步骤的解读用注释的形式补充在下面的源码中。,远远大于红黑树的 O(log(n)),尤其是在节点越来越多的情况下,

2023-12-20 21:36:47 993 2

原创 java并发-HashMap 为什么是线程不安全的

很明显,很快这个程序就抛出了我们所希望看到的 RuntimeException,并且我们把它描述为:HashMap is not thread safe,一旦它能进入到这个 if 语句,就已经证明它所取出来的值是 null,而不是我们期望的字符串 “v”。可见性也是线程安全的一部分,如果某一个数据结构声称自己是线程安全的,那么它同样需要保证可见性,也就是说,当一个线程操作这个容器的时候,该操作需要对另外的线程都可见,也就是其他线程都能感知到本次操作。的值的时候,它的可见性是无法保证的,也就是说。

2023-12-19 22:45:20 1060

原创 C++学习笔记01

c++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。

2023-12-17 23:03:24 452 1

原创 linux性能优化-cpu使用率

当然,也可以用每一个场景的CPU 时间,除以总的 CPU 时间,计算出每个场景的CPU使用率。不是平均负载,也不是CPU上下文切换,而是另一个更直观的指标CPU使用率,CPU使用率是单位时间内CPU使用情况的统计,以百分比的方式展示。性能分析工具给出的都是间隔一段时间的平均CPU使用率,所以要注意间隔时间的设置,特别是用多个工具对比分析时,你一定要保证他们用的是相同的间隔时间。,是动态共享对象的类型。虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。

2023-12-17 22:59:18 1105 1

原创 C++之io学习

它可以将一个指针转换成一个整数,也可以将一个整数转换成一个指针.l 在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全;1在抛出异常的函数中,如果抛出异常之后,但函数没有结束,这时,栈上申请的对象都会被释放这就叫栈解旋。l 在类层次间进行上行转换时,dynamic_cast和static_cast的效果是一样的;1.用户不知道返回值是什么意思,异常可以抛出对象,对象中可以包含很多成员函数,可以有很信息。l 常量引用被转换成非常量引用,并且仍然指向原来的对象;

2023-12-16 23:08:20 903

原创 linux性能优化-上下文切换

Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行,这是通过频繁的上下文切换、将CPU轮流分配给不同任务从而实现的。CPU 上下文切换,就是先把前一个任务的 CPU 上下文(CPU 寄存器和程序计数器)保存起来,然后加载 新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务,而保存下来的上下文, 会存储在系统内核中,并在任务重新调度执行时再次加载进来。我们之前讲过的任务到底是什么呢?所以,根据任务的不同,CPU 的上下文切换可以分为不同的场景。

2023-12-16 23:06:14 1049

原创 java并发-CyclicBarrier使用

它是 Java 中用于多线程同步的一个工具类,它允许一组线程互相等待,直到所有线程都达到某个屏障点(barrier),然后再同时执行。

2023-12-15 23:48:18 1722

原创 java并发-CountDownLatch使用

它是 JDK 提供的并发流程控制的工具类,它是在 java.util.concurrent 包下,在 JDK1.5 以后加入的。CountDownLatch在构造函数中传入倒数次数,在await 方法开始等待,countDown 方法之后,计数便会减 1,直到减为 0时,之前等待的线程便会继续运行。

2023-12-14 20:57:18 966

原创 java并发-ReentrantReadWriteLock读写锁

读写锁就是将一个锁拆分为读锁和写锁两个锁。此文章主要介绍了ReentrantReadWriteLock使用以及相关源码部分;更深刻的去理解读写锁的使用和使用场景。

2023-12-13 22:52:52 1423 2

原创 ReentrantLock详解

通过源码流程分析让我们更加深入了解了ReentrantLock锁的实现流程。

2023-12-12 21:58:28 1001

原创 c语言指针详解下

hello” 字符串常量是不可以改变的,存在文字常量区。在使用时.双引号""代表取这个字符串首元素的地址。5 字符指针数组。

2023-12-07 22:08:56 416

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除