- 博客(145)
- 收藏
- 关注
原创 JavaSE-多线程(5.3)- ReentrantLock (源码解析,非公平模式)
线程 t1 调用 lock.unlock();,但是线程 t2 不是立马进入running 状态,会从waitting 状态进入 ready 状态,待进入running状态后才继续执行循环体。由于此时 t1 线程已经是 running 状态,而 t2 是 ready 状态,所以 t1 优先获取到了锁,所以 t1 线程继续执行循环体,而 t2 线程进入 running 状态后 由于获取锁失败又会阻塞。程序运行结果与公平模式下对比,各个线程将各自任务执行完成后,才执行下一个线程的任务。
2025-09-22 10:41:22
201
原创 JavaSE-多线程(5.2)- ReentrantLock (源码解析,公平模式)
ReentrantLock 是 java JUC 包(java.util.concurrent)下的可重入锁工具类,具体功能实现依赖AbstractQueuedSynchronizer(AQS,抽象队列同步器),AQS 内部维护了一个变量 private volatile int state;默认为 0,当线程上锁以后值变成 1 (state 值改变通过实现),没有获取到锁的线程会加入等待对列。
2025-09-22 00:04:39
960
原创 8.2-spring 事务-声明式事务(@Transactional原理)
在一文中我们了解到 spring 通过 @Transactional 注解实现事务的操作,开发者只需要关注具体业务,而事务操作是通过 spring aop 实现的,即给使用了 @Transactional 注解的类生成代理类,然后执行具体的事务操作。生成代理类后执行事务的方式和 jdbc 提供的编程式事务方式类似,可以通过这篇文章查看详情。
2025-09-19 18:03:08
614
1
原创 8.1-spring 事务-声明式事务(使用)
事务可以保证数据操作原子性,即将对数据的操作看成一个整体,如果部分失败那么部分成功的也要回滚。spring 提供了声明式事务和编程式事务,以下对声明式事务做一些介绍。
2025-09-18 17:40:32
801
原创 JVM-(11)JVM-定位OOM问题
OOM 即 OutOfMemoryError(内存溢出),是由于 JVM 的垃圾回收器 (Garbage Collector) 无法回收出足够的空间来满足对象分配的请求,并且堆内存已经无法再扩大容量导致的异常。
2025-08-26 16:21:11
1064
原创 JVM-(9)JVM诊断的常用命令以及参数
在上文中我们了解了如何启动 JVM ,以及在启动时如何添加参数,不同于 Java 命令,JVM 诊断命令是用来诊断运行中的 JVM 的。
2025-08-26 10:06:25
757
原创 JVM-(7)堆内存逻辑分区
在这篇文章中我们了解了JVM 内存的逻辑分区情况,如下:在这篇文章中我们了解到,如果某个对象不再被使用就会被当成垃圾,而新建对象一般分配堆空间内存(大部分情况如此,Java对象在特定条件下可以在栈上分配内存)哪些情况Java对象可以在栈上分配内存?对象若满足以下条件,JVM会将其分配到栈上:1. 作用域受限:对象仅在方法内部使用,未被外部引用(如未作为返回值或被其他线程访问)。2. 小对象:通常指几十字节以内的小对象。3. 线程私有:仅被当前线程使用,不会跨线程共享。。
2025-08-21 15:25:52
1125
原创 JVM-(5)JVM内存模型
JVM由 运行时数据区、类加载器、执行引擎 等部分组成,在这篇文章中我们可以了解到,JVM是通过类加载器将 java 文件编译后的 .class 二进制文件加载到内存的,那么java程序在执行的过程中内存是如何分配的呢,本文将介绍这部分,通常说的 JVM内存模型指的就是分为 线程共享区 和 线程私有区线程共享区。
2025-08-18 10:39:46
980
原创 2-越权-纵向越权
纵向越权(Vertical Privilege Escalation)是指低权限用户通过漏洞非法获取高权限身份或能力,突破系统设计的权限层级,执行本不该被允许的操作。其本质是权限边界被打破,攻击者从低层级(如普通用户)跃迁至高层级(如管理员)。
2025-08-18 10:36:52
286
原创 使用spring-boot-starter-validation实现入参校验
由于新增、更新、查询、删除都可以使用一个实体接受入参,而不同情况需要校验的情况也不同,比如,新增时不需要校验id必填,删除时需要校验id必填,分组可以理解成不同策略,不同分组下可以使用不同的校验规则@Data@NotNull(groups = {Insert.class, Update.class, Query.class},message = "name 不能为空")
2025-08-11 16:03:40
343
原创 4)SpringBoot-自定义注解控制权限
Target({ElementType.TYPE, ElementType.METHOD}) 表示允许在类和方法上使用该注解/*** 权限点*//*** 权限点描述*/关于aop可从这篇文章了解@Aspect@Component@Autowired// 定义切点,匹配所有带有@Permission注解的类和方法//环绕通知// 1. 获取类上的权限注解Class<?// 如果类上没有定义权限直接放行。
2025-07-31 11:05:34
226
原创 2-Vue3应用介绍
应用实例必须在调用了 .mount() 方法后才会渲染出来。我们传入 createApp 的对象实际上是一个组件,每个应用都需要一个“根组件”,其他组件将作为其子组件。如果你使用的是单文件组件,我们可以直接从另一个文件中导入根组件。
2025-07-17 20:38:00
273
原创 1-创建Vue3项目
这一指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具。命令执行完后将在指定目录创建一个名为 vue-project 的项目。VSCode 可安装 Vue-Official 插件协助开发。② 执行 create vue 指令创建 vue 应用。已安装 18.3 或更高版本的 Node.js。① 新建项目目录,使用 VSCode 打开。执行如下指令,下载项目依赖。使用如下指令运行项目。
2025-07-17 20:00:27
296
原创 5-Nodejs-npm与第三方模块
npm:全称Node Package Manager,是Node.js生态中的包管理工具,用于安装、更新、发布和管理JavaScript模块依赖。npm随Node.js自动安装,无需单独配置。
2025-07-16 11:38:43
667
原创 4-Nodejs模块化
自定义模块是一种封装和组织代码的方式,使得应用可以更加模块化,易于维护和复用。自定义模块可以是一系列函数、变量、对象或者其他模块的集合,它们可以被其他文件导入和使用。下面是如何创建和使用自定义模块的基本步骤:① 创建自定义模块。
2025-07-15 22:47:18
299
原创 3-Nodejs-使用fs文件系统模块
fs 模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
2025-07-15 21:47:28
205
原创 1-Nodejs介绍与安装
在以往的认知中,JavaScript 通常嵌入在HTML中,由浏览器解析引擎解析执行,主要用于网页开发等web应用。Nodejs 是一个允许JavaScript运行在服务器端的平台,这意味着你可以在Node.js环境中脱离浏览器,直接运行JavaScript代码,无需通过浏览器。Node.js提供了许多内置模块,如fs(文件系统)、http(HTTP模块)等,允许开发者进行文件操作、网络编程等。
2025-07-15 17:47:00
351
原创 1-Git安装配置与远程仓库使用
在 Git 中添加 SSH Key 的主要作用是安全、方便地进行身份验证,让你无需每次都输入用户名和密码就能与远程 Git 仓库(如 GitHub, GitLab, Gitee, 自建 Git 服务器等)进行安全的通信。上述步骤执行完后会在提示的文件夹下生成公钥(id_rsa.pub)和私钥(id_rsa),这里涉及到非对称加密的知识,简而言之 明文+公钥 经过加密算法变成密文,密文+私钥经过解密算法变成明文,不做过多解释。在任意文件夹空白处右键,选择 Open Git Bash here,
2025-07-11 14:36:53
417
原创 5-Kafka-replication(副本机制)概念
生产环境推荐:分区数 = 消费者数量 × 1.5,副本数 ≥ 3,min.insync.replicas=2。如下:kafka集群有三台服务器,某个主题有2个分区和3个副本(一个Leader,两个Follower):Follower 可处理只读请求(需特殊配置)分区数决定并行度上限,副本数决定容灾能力。:Leader 故障秒级切换。:多副本冗余防数据丢失。参考:deepseek。
2025-07-08 13:57:24
347
原创 4-Kafka-partition(分区)概念
如下:有三台kafka集群,cnbook 主题有三个分区,这三个分区分别位于不同的 broker。
2025-07-08 10:33:15
576
原创 1-Kafka介绍及常见应用场景
Apache Kafka 是一个开源的 分布式流处理平台,最初由 LinkedIn 开发,后捐赠给 Apache 软件基金会。它被设计用于高吞吐量、低延迟、可水平扩展地处理实时数据流。
2025-07-07 15:37:15
910
原创 2-jdk8环境下安装Kafka
第一步,进入目录 /usr/local/kafka/kafka_2.13-3.7.0/config。1)新建 kafka 目录,此处文件夹为 /usr/local。2)将压缩包上传到 /usr/local/kafka目录下。2)修改配置文件,配置server.properties。第二步,修改 server.properties 文件。备份 server.properties 文件。进入 kafka bin 目录。出现如下日志,说明启动成功。使用消费者来查看这些消息。执行如下命令使配置生效。
2025-07-04 11:59:59
372
原创 win10开启热点失败原因
5、右键WIN10的"以太网"网线连接,点击属性,进入共享设置,任意选择一个家庭网络连接,再点击“确定”退出;然后,再次进入共享设置,去掉勾选的“连接共享”选项,并“确定”退出。3、打开手机WIFI设置,搜索并连接在WIN10中所设置的移动热点名称;在Win10系统,设置并共享WIFI移动热点后,但是用手机(或其它网络设备)却无法链接,或者搜索不到网络,遇到这种问题该如何解决呢?6、在WIN10系统中,再次点击打开“移动热点”;豹5首创新能源车世界纪录。豹5首创新能源车世界纪录。
2024-05-09 00:02:45
1215
1
原创 对外接口签名生成方式
当某个系统对外部系统提供接口访问时,为提高接口请求安全性,往往会在接口访问时添加签名,当外部系统访问本系统签名验证成功时才能正常返回数据,一般接口提供方会与外部系统提前约定好,不同外部系统用 appKey 加以区分,并且不同 appKey 对应不同秘钥(secretKey)
2023-07-31 09:59:26
1219
原创 JDK8-2-流(2.1)- 流操作-distinct
注意:对象去重需要重写 equals 和 hashCode 方法(默认对象 equals 方法比较的是对象内存地址是否一致),由 distinct 内部具体实现类 java.util.stream.DistinctOps 可以看出这点。IDEA 如何自动生成 equals 和 hashCode 方法空白处右键选择 Generate 或者Alt + Ins 快捷键使用 filter 方法去重。
2023-06-15 12:08:08
290
原创 JDK8-2-流(1)-简介
流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现),可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,你无需写任何多线程代码!
2023-06-14 11:49:54
567
原创 JDK8-1-Lambda表达式(5)-复合 Lambda 表达式
Function<?super T,?@Override@Override相当于 Comparator.comparing 帮我们实例化一个 Comparator ,这个方法入参为 Functionreversed。
2023-06-10 17:19:58
810
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅