- 博客(29)
- 收藏
- 关注
原创 Redis知识
Redis 中的 Hash 是一个 String 类型的 field-value(键值对) 的映射表,特别适合用于存储对象,后续操作的时候,你可以直接修改这个对象中的某些字段的值。String 是一种二进制安全的数据类型,可以用来存储任何类型的数据比如字符串、整数、浮点数、图片(图片的 base64 编码或者解码或者图片的路径)、序列化后的对象。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,主节点处理写操作,从节点异步复制数据,支持读写分离。
2025-06-06 17:34:55
925
原创 MySQL常用知识总结
特定情况下的索引和数据都在同一个文件上,也就是我们常说的聚簇索引,通过聚簇索引可以保证高效快速的主键查询,因为二级索引包含主键列,所以但如果主键占用物理空间过大的话,二级索引占用的空间也会很大,所以如果存在多个索引的情况下,建议适当调小主键索引的大小。参数设置每个 binlog 文件的最大容量,当文件大小达到给定值之后,会生成新的 binlog 文件来保存日志,不会出现前面写的日志被覆盖的情况。当多个事务同时修改同一数据时,后提交的事务覆盖先提交事务的修改,导致前者的更新失效。
2025-06-05 13:55:33
963
原创 MVCC理解
MySQL的是一种高效的并发控制机制,通过维护数据的多个版本实现读写操作的并行执行,显著提升数据库的并发性能和数据一致性。MVCC。deleteundo logInnoDBReadView(读视图)是 InnoDB 为了实现一致性读(Consistent Read)而创建的数据结构,它用于确定在特定事务中哪些版本的行记录是可见的。创建该 ReadView 的事务 ID。所有活跃事务的 ID 列表,活跃事务是指那些已经开始但尚未提交的事务。所有活跃事务中最小的事务 ID。
2025-06-04 14:52:58
1560
原创 JVM知识
记录当前线程执行的字节码指令地址(行号),用于控制执行流程(如分支、循环等)和多线程切换后的恢复。存储方法调用的栈帧(Stack Frame),包含局部变量表、操作数栈、动态链接、方法出口等信息。主要存放了编译期可知的各种数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)主要作为方法调用的中转站使用,用于存放
2025-06-03 14:48:13
2110
原创 JAVA框架集合
位运算(&)比取余运算(%)更高效。当长度为 2 的幂次方时,等价于。可以更好地保证哈希值的均匀分布:扩容之后,在旧数组元素 hash 值比较均匀的情况下,新数组元素也会被分配的比较均匀,最好的情况是会有一半在新数组的前半部分,一半在新数组后半部分。扩容后只需检查哈希值高位的变化来决定元素的新位置,要么位置不变(高位为 0),要么就是移动到新位置(高位为 1,原索引位置+原容量)。
2025-05-27 14:20:06
953
原创 JAVA基础知识
特性String可变性不可变(Immutable)可变(Mutable)可变(Mutable)线程安全线程安全(天然不可变)线程安全(方法用 synchronized 修饰)非线程安全性能低(频繁修改时产生大量新对象)较高(同步锁带来一定开销)最高(无同步开销)适用场景常量字符串、少量操作多线程环境下的字符串操作单线程环境下的字符串操作String不可变的原因及实现原理。
2025-05-26 15:46:10
619
原创 DDD后端结构
为了保证核心业务逻辑的稳定,领域层应作为最纯粹、最少对外依赖的层次,只包含业务知识和业务规则,不该过多关心技术细节的实现(如存储、消息等)。分层以领域层为核心来分层建设。
2025-05-23 14:03:27
801
原创 领域驱动设计DDD知识学习
DDD领域驱动设计是一种模型驱动设计的方法,通过领域模型捕捉领域知识,通过模型直接反映软件实现的结构。以模型为基础形成团队的统一语言。把模型作为精粹的知识,用于传递在使用DDD之前,平时一般使用的是MVC模式,MVC在业务逻辑不复杂的软件开发是比较便捷的,但是项目比较大,业务逻辑复杂就会有一些问题,比如,
2025-05-23 11:04:12
794
转载 RocketMQ保证消息的顺序性
RocketMQ 通过分片路由队列锁定和串行消费的三层设计,实现了高效的消息顺序性保障。其分区顺序模式在高并发场景下表现出色,而全局顺序模式则适用于对一致性要求极高的业务。与 Kafka 相比,RocketMQ 在顺序消息的开箱即用性和运维成本上更具优势。RocketMQ:如何通过分层设计实现消息的严格顺序性?
2025-05-20 16:44:25
260
原创 RocketMQ保证消息不丢失
环节关键配置/代码目标生产端同步发送、事务消息、重试机制消息100%到达BrokerBroker同步刷盘、主从同步消息持久化 + 高可用消费端手动ACK、幂等性、死信队列消息最终被正确消费。
2025-05-20 12:08:56
434
转载 Spring Boot实现责任链模式
责任链可以将发送方和接收方的业务处理逻辑隔离开来,降低耦合,提高代码的可扩展性。比如在订单业务中,接收方处理订单时,需要先校验订单的合法性,然后计算订单的花费,接着校验库存和余额等信息,最后更新数据库。中途如果想要添加或者删除功能,都需要在接收方代码中进行修改。这时就需要责任链来处理中间过程,接收方只需要进行最后的数据库更新即可。使用责任链模式后,在任何一个步骤中添加操作只需要添加实现类即可,增加了代码的可扩展性。定义拦截器上下文类,由消费方直接调用。
2025-05-15 17:01:49
184
原创 快速排序Java实现
快速排序的平均时间复杂度为: O(nlogn) ,然⽽,最坏情况下快速排序的时间复杂度为。O(n^2) ,即当数组已经有序(或基本有序)时,快速排序的效率会退化到最差情况。序将数组划分为两个⼦数组,其中⼀个⼦数组的所有元素都⼩于基准元素,另⼀个⼦数组的。所有元素都⼤于基准元素。然后对这两个⼦数组分别递归地应⽤快速排序算法,直到整个数。它的基本思想是选择⼀个基准元素,通过⼀趟排。免最坏情况的发⽣,⼀种常⻅的优化⽅法是。,以减⼩最坏情况发⽣的概。
2025-05-15 10:50:59
194
原创 JAVA死锁问题
描述的是这样⼀种情况:多个线程同时被阻塞,它们中的⼀个或者全部都在等待某个资源被释放。由于线程被⽆限期地阻塞,因此程序不可能正常终⽌。
2025-05-14 14:50:39
268
原创 LRU 缓存实现
LRU(eastecentlysed)缓存是一种基于最近使用频率管理数据的缓存策略,其核心是,适用于需要高效管理有限内存的场景。通过维护双向链表和访问顺序(
2025-05-14 13:52:06
236
原创 约瑟夫环问题
第一轮是 [0, 1, 2, 3, 4] ,所以是 [0, 1, 2, 3, 4] 这个数组的多个复制。第二轮开始时,从 3 开始,所以是 [3, 4, 0, 1] 这个数组的多个复制。第四轮反推,补上 m 个位置,然后模上当时的数组大小 2,位置是(0 + 3) % 2 = 1。第三轮反推,补上 m 个位置,然后模上当时的数组大小 3,位置是(1 + 3) % 3 = 1。第二轮反推,补上 m 个位置,然后模上当时的数组大小 4,位置是(1 + 3) % 4 = 0。最后剩下的 3 的下标是 0。
2025-05-12 17:25:06
321
原创 单例实现的三种实现方式
单例模式的实现方式主要有枚举、静态内部类和双重校验锁(DCL)。枚举单例通过JVM类加载机制保障线程安全,防止反射攻击和序列化破坏,代码简洁且性能最优,适用于读取配置文件等场景。静态内部类利用JVM类加载机制实现延迟加载和线程安全,但存在反射攻击和序列化破坏的风险,代码复杂度中等,性能次优。双重校验锁通过同步块和volatile关键字确保线程安全,支持延迟加载,但代码复杂,存在反射攻击和序列化破坏的风险,适用于特殊需求场景。综合来看,枚举单例是首选,静态内部类次选,双重校验锁适用于特殊场景。
2025-05-09 11:16:02
397
原创 win10 安装mysql8.0.11
0.下载下载zip安装包: MySQL8.0 For Windows zip包下载地址:https://dev.mysql.com/downloads/file/?id=476233,进入页面后可以不登录。后点击底部“No thanks, just start my download.”即可开始下载。1.解压到目录,添加my.ini[mysqld]# 设置3306端口port=3306# 设置m...
2018-05-28 14:44:19
163
原创 intellij idea 配置tomcat权限不够
在tomcat的上一个目录,输入sudo chmod -R 777 tomcat9,就可以了
2018-05-13 20:47:48
3101
转载 Ubuntu 17.10 配置tomcat9,亲自实验
转载 https://blog.youkuaiyun.com/qq_24091555/article/details/75077781 ,按照步骤在Ubuntu17.10 配置的tomcat9,完全成功的,本文主要讲述如何在ubuntu16.04配置tomcat环境。准备:已经配置好Java环境的ubuntu16.04电脑。第一步,去官网下载tomcat。点击你要下载的tomcat版本。第二步,解压。 在终端...
2018-05-13 11:39:05
305
原创 ubuntu配置gitHub
1.sudo apt-get install git 安装git2.git config --global user.name "my Name" 3. git config --global user.email "myemail@xxx.com"4.git config --list 查看配置信息5.ssh-keygen -C 'myemail@xxx.com' -t rsa ...
2018-05-10 15:38:43
250
原创 ubuntu 配置 mysql
1. sudo apt-get install mysql-server2. apt-get isntall mysql-client3. sudo apt-get install libmysqlclient-dev4.systemctl status mysql.service查看安装状态,这样就是ok的5.直接 mysql -u root -p...
2018-05-10 13:39:31
200
转载 Ubuntu 配置java环境
下载jdk:Java SE Development Kit 8 选择下载我标出来的压缩包。 下载完成之后。使用su root切换最高权限。 在/usr/local/目录下创建一个java安装目录。安装目录自己定义。sudo mkdir /usr/local/java通过下面命令,把当前目录下的jdk-8u121-linux-x64.tar.gz复制到java安装目录下。cp jdk-8u12...
2018-05-08 22:24:52
397
原创 JAVA排序之冒泡排序
冒泡排序是以从小到大排序为例,每一轮排序就找出未排序序列中最大值放在最后。像金鱼吐泡泡,越到后面越大,所以叫冒泡排序。基本的冒泡排序算法:public class BobbleSort { public static void bubblySort_1(int []num){ for (int i=0;i<num.length;i++){//表示遍历次数减1 ...
2018-04-11 20:19:28
200
原创 java数值类型之间转换
1.java基本数据类型 Java基本类型共有八种,其中4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符型char和1种用于表示真值的boolean类型。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。byte:byte 数据类型是8位、有符号的,以二进制补码表示的整数;最小值是 -128(-2^7);最大值是 ...
2018-04-10 20:55:53
534
原创 mysql5.7压缩版安装
MySQL官网下载压缩版的,解压在D盘0、在path中添加为D:/mysql/bin的路径1、bin文件下创建txt,命名为 my.ini2、输入[mysql]basedir=D:mysqldatadir=D:mysqldatadefault-character-set=utf8[client]port = 3306character-set=utf8保存关闭。3、用管理员身份运行cmd4、进入到...
2018-03-30 15:21:36
137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅