自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

动动发财的小手点点赞

为编程事业添砖加瓦

  • 博客(28)
  • 收藏
  • 关注

原创 多线程进阶知识篇(二)

ReentrantLock 是 JDK 1.5 引入的可重入锁,属于轻量级锁,相比 synchronized 增加了超时、中断、公平锁等高级功能。synchronized 是 Java关键字,用于修饰方法或代码块,属于重量级锁,主要是在多线程环境下实现对共享资源的互斥访问。synchronized 可以保证数据的可见性和原子性,支持可重入和自动释放锁,但是不支持超时锁和中断等操作。ReentrantLock 支持可重入、可中断、超时机制和条件变量,但是加锁需要手动释放,否则可能造成死锁。

2025-04-17 22:37:32 280

原创 多线程进阶知识篇(一)

调用 start() 方法会启动一个新的线程,每次调用 start(),线程才会真正由操作系统分配资源并进入可运行状态。代码如下:输出结果:这里是因为start() 启动了新线程,主线程和新线程并发执行。直接调用 run() 方法只是普通方法调用,不会开启新线程,也不会实现并发行为。代码如下:输出结果:这里是引文直接调用了 run(),没有启动新线程,run() 仍然是在主线程中执行的。单核处理器同一时间刻能处理一个线程的执行,通过时间片轮转机制来快速切换多个线程的执行顺序,造成并发的假象。多核 C

2025-04-14 18:18:16 525

原创 项目上线成功!!!

记录一下第一次从购买服务器,到前后端项目打包部署到服务器上,最后成功上线的过程。此时此刻,还是小有成就的,但我明白还有很长一段路要走,加油!SpringBoot3 + Vue3大事件项目。

2025-04-12 23:53:07 103

原创 Redis 在 Java 中的使用

、支持多种数据结构(String、Hash、List、Set、ZSet),适合高并发场景,是微服务架构下常用的缓存中间件。Redis 是一个高性能的 Key-Value 内存数据库,常用于: 数据缓存、分布式锁和排行榜等。RedisTemplate<K, V>:支持各种类型的对象,需要配置序列化器。StringRedisTemplate:专门用于操作字符串,由默认的序列化器。Spring Boot 默认使用的 Redis 客户端是。,性能好、支持异步和响应式编程。

2025-04-04 12:00:55 418

原创 JDK 动态代理 和 CGLIB 代理的区别

JDK动态代理使用Proxy类和接口来创建代理对象,通过实现。在使用时,需要提供一个实现了接口的处理器,JDK代理会通过这个处理器来调用原始对象的方法。

2025-03-27 17:03:57 278

原创 Mybatis中 ${} 和 #{} 的区别

${} 方式不安全直接拼接 SQL,容易被 SQL 注入攻击利用,#{} 方式安全通过预编译的方式传递参数,防止 SQL 注入。

2025-03-26 20:15:33 321

原创 Maven的常用命令及版本冲突

包。

2025-03-23 22:07:49 361

原创 File:遍历输出一个文件夹中的所有文件(如:图片类型)

【代码】File:遍历输出一个文件夹中的所有文件(如:图片类型)

2025-03-22 14:18:18 259

原创 undo log和redo log的区别

(回滚日志)是InnoDB存储引擎中的事务日志之一,用来保证事务的原子性和一致性。

2025-03-20 18:30:56 265

原创 lock()应该写在 try 代码块里面还是外面?

推荐的原因:

2025-03-18 18:39:26 175

原创 线程基础知识总结

线程是进程中的一个执行单元,也是CPU 调度的最小单位。同一进程中的多个线程共享进程的内存空间、数据资源等,多个线程可以在单个 CPU 上快速切换执行。进程是程序在操作系统中的一次运行实例,是操作系统资源分配的基本单位。每个进程都有独立的内存空间和数据资源。

2025-03-17 13:53:16 348

原创 HashMap 和 ConcurrentHashMap(基础版)

在 Java 里,HashMap 是最常用的集合之一,但它是线程不安全的。而 ConcurrentHashMap 是它的线程安全版本,能在并发环境下高效使用。HashMap 主要特点基于数组 + 链表 + 红黑树结构实现。允许 null 键和 null 值。线程不安全,多个线程操作时可能导致数据不一致。默认初始容量 16,负载因子 0.75,当超过阈值(容量 × 负载因子) 时扩容。ConcurrentHashMap 主要特点线程安全,支持高并发,基于分段锁(JDK 1.7)和。

2025-03-15 11:41:03 304

原创 为什么HashMap的长度始终是2的n次幂?

HashMap 采用 2^n 长度的核心目的提升哈希分布均匀性,减少冲突。优化取模运算,使用 & 代替 %,提高计算速度。扩容时索引计算高效,避免哈希值重新计算,提高性能。构造方法确保 capacity 是 2^n,自动调整大小。

2025-03-12 08:56:23 395

原创 Java 关键字 final, static, transient 的用法详解

在 Java 开发中,final、static 和 transient 是三个重要的关键字,它们用于修饰变量、方法和类,并在内存管理、序列化等方面扮演着重要角色。final关键字总结修饰对象作用变量变量值不能修改(引用类型的地址不可变,但对象内容可变)方法防止子类重写类防止继承static关键字总结修饰对象作用变量类变量,所有对象共享,随类加载方法静态方法,属于类,不能访问非静态变量代码块静态代码块,类加载时执行一次内部类静态内部类,可以直接访问外部类的静态成员。

2025-03-11 18:28:33 346

原创 Redis缓存一致性问题

当前许多项目中引入缓存的背景是减少对数据库的访问,防止性能降低或数据库崩溃。关于Redis的详细介绍,可以参考官方文档缓存一致性:数据库中的数据和缓存中的数据是同步的,即当数据库中的数据发生变化后,缓存中的数据也要随之变化,确保一致。缓存一致性是分布式系统中的重要问题,本文介绍了缓存和缓存一致性的基础概念、可能出现的不一致情况以及常见的解决方案。当然,缓存一致性问题远比本文描述的更复杂,还有诸如 双写并发问题、分布式事务、MQ+缓存更新 等进阶方案值得深入探讨。

2025-03-05 19:23:31 556

原创 首选 try-with-resources 而不是 try-finally

在Java编码过程中,我们在使用完一种资源后,如Connection、Statement、ResultSet等对象,要通过close()方法手动关闭资源,防止资源堆积造成性能下降。首选 try-with-resources,代码更简短、更清晰,并且可以自动关闭资源、不易出错,避免了 try-finally 的冗余代码和异常覆盖问题。

2025-03-02 16:26:16 349

原创 进制转换-除基取余法

【代码】进制转换-除基取余法。

2025-02-13 18:40:57 233

原创 ArrayList核心代码阅读

/ 将元素e添加至数组末尾,ensureCapacityInternal确保数组容量能够容纳要添加的元素数量。// 将数组容量按照原来的1.5倍扩容,如果新容量小于最小要求容量,则使用最小要求容量。// 如果元素不为 null,遍历 ArrayList 中的所有元素。// 如果元素为 null,遍历 ArrayList 中的所有元素。// 如果当前数组为空,则返回默认容量10作为数组的容量,否则返回给定的最小容量。// 查找数组元素第一次出现的索引,如果没有找到返回 -1。// 删除指定下标位的元素。

2025-02-12 16:09:00 1115

原创 计算机小数计算的精度丢失问题

代码中计算0.09和0.01之和,并且将其结果在控制台进行输出。那么我们想当然的会以为在控制台输出的结果应该为0.1。那么实际的运行结果是什么呢?控制台的输出如下:这样的结果其实就是一个丢失精度的结果。为什么会产生精度丢失呢?

2025-02-11 21:42:57 264

原创 Integer缓存池

在 Integer 类的源代码中,Integer 的缓存池被定义为一个 Integer 类型的数组,缓存的整数范围是 -128 到 127。这个缓存池的实现方式是通过一个静态数组来实现的。k++)在Integer类中存在一个静态内部类供Integer独享,定义了一个静态数组Integer cache[],通过cache = new Integer[(high - low) + 1];

2025-02-11 17:04:04 494

原创 微服务中传递用户信息的实现方案

网关过滤器:通过 mutate() 方法修改请求头,直接在请求中添加用户信息。SpringMVC 拦截器:将请求头中的用户信息存储到 ThreadLocal 中,确保用户信息的隔离。微服务之间调用:使用 RequestInterceptor 在每次远程调用时,从 ThreadLocal 获取用户信息并将其设置到请求头中,确保下游微服务能够获取用户信息。

2025-02-01 20:00:21 459

原创 StringBuilder类的数据结构和扩容方式解读

通过以上分析,我们可以看到StringBuilder的扩容过程以及其底层实现机制,为我们提供了高效的字符串拼接方法。通过理解其扩容原理,可以更好地优化代码中的字符串操作。

2025-01-21 21:38:24 657

原创 equals()方法比较和String类中equals()方法的源代码解读

equals()方法最开始是继承自Object类中的equals()方法,它和 == 的区别是:通常来说equals()方法比较的是两个对象的内容,,而 == 比较的是两个对象的内存地址。

2025-01-20 18:30:47 855

原创 String为什么是不可变的?

String的内容是不可变的,是通过final关键字作用在类上和常量字符数组来实现的。

2025-01-19 19:11:48 484

原创 Redis从基础到深入

Redis 是一个开源的高性能键值存储、内存操作的数据库,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,广泛应用于缓存、消息队列、实时分析等场景。

2024-12-17 18:25:27 878

原创 (SSH)使用FinalShell远程连接Centos7

远程连接工具有MobaXterm、FinalShell、Xshell等,这里介绍FinalShell的配置。点击“连接”按钮,FinalShell将尝试连接到Centos7服务器。在“端口号”字段中输入SSH服务的端口号(默认为22)。在“用户名”字段中输入您在Centos7上的用户名。在“密码”字段中输入您在Centos7上的密码。在“主机”字段中输入Centos7的IP地址。在新会话界面中,选择“SSH”作为连接类型。连接成功即可在会话窗口看到新建的SSH连接。

2024-11-20 20:42:07 1315

原创 数据库中事务的概念、特性和并发操作

阐述了事务的概念和特性、隔离级别以及并发操作带来的数据不一致性

2024-11-16 16:47:12 1007

原创 Git的基本使用

Git是一个开源的分布式版本控制系统,它能够高效地处理从小到大的项目。与其他版本控制工具如CVS和Subversion不同,Git采用了分布式版本库的方式,它主要用于记录项目的历史变更、管理不同版本的代码和协作开发。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。从远程仓库中克隆代码,后面要附上gitee或github的SSH链接地址。从远程仓库中拉取最新代码,合并远程仓库的更改与本地的更改。将暂存区中的文件提交到本地仓库。将文件推送到远程仓库。

2024-11-13 20:18:28 336 1

Plain Craft Launcher 2.exe

Plain Craft Launcher 2.exe

2022-10-14

空空如也

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

TA关注的人

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