自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 学习笔记框架目录

学习笔记目录Java基础1)变量和字符串:变量和字符串2)类、对象、接口和继承:类、对象、接口和继承容器1)集合框架基础:集合框架2)ArrayList源码:ArrayList源码3)LinkedList源码:LinkedList源码4)HashMap源码:HashMap源码并发JVM设计模式:1)单例模式:单例模式2)观察者模式:观察者模式3)代理...

2020-03-17 20:49:27 867 1

原创 【Kafka】消息队列Kafka知识总结

我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。参与消息传递的双方称为 生产者 和 消费者 ,生产者负责发送消息,消费者负责处理消息。(1)AMQP 为消息定义了线路层(wire-level protocol)的协议,而 JMS 所定义的是 API 规范。

2025-06-10 19:23:51 748

原创 【分布式】分布式ID介绍和实现方案总结

日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应一个订单。我们现实生活中也有各种 ID,比如身份证 ID 对应且仅对应一个人、地址 ID 对应且仅对应一个地址。简单来说,ID 就是数据的唯一标识。分布式 ID 是分布式系统下的 ID。分布式 ID 不存在与现实生活中,属于计算机系统中的一个概念。我简单举一个分库分表的例子。例如一个项目,使用的是单机 MySQL。

2025-06-08 16:32:10 1020

原创 【Mysql】隐式转换造成索引失效

(1)当操作符左右两边的数据类型不一致时,会发生隐式转换。(2)当 where 查询操作符左边为数值类型时发生了隐式转换,那么对效率影响不大,但还是不推荐这么做。(3)当 where 查询操作符左边为字符类型时发生了隐式转换,那么会导致索引失效,造成全表扫描效率极低。(4)字符串转换为数值类型时,非数字开头的字符串会转化为0,以数字开头的字符串会截取从第一个字符到第一个非数字内容为止的值为转化结果。

2025-06-03 23:37:43 794

原创 【Mysql】三大日志(binlog、redo log和undo log)详解

MySQL 日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志 binlog(归档日志)和事务日志 redo log(重做日志)和 undo log(回滚日志)。

2025-06-01 18:35:19 609

原创 【大数据】宽表和窄表

(1)定义:宽表是将多个相关实体的字段(列)合并到一张表中,通过冗余字段减少表连接(JOIN)操作。(2)特点:列数多(通常包含数十到数百列),行数相对较少,数据冗余度高。本质:通过空间换时间,牺牲存储成本提升查询性能。

2025-05-23 14:34:38 1017

原创 【Mysql】字节大小相关知识汇总

MySQL 数据类型的字节大小直接影响存储空间和查询性能。

2025-05-23 13:41:27 898

原创 【线程池】线程池的使用汇总

通过注解简化异步任务开发,支持自定义线程池参数。(1)优点(2)缺点【2】方式二:使用 Java 原生 ExecutorService(简单直接)使用 JDK 原生线程池工具类,适合快速实现异步任务。(1)优点简单便捷(2)缺点1-FixedThreadPool 和 SingleThreadExecutor:使用的是阻塞队列 LinkedBlockingQueue,任务队列最大长度为 Integer.MAX_VALUE,可以看作是无界的,可能堆积大量的请求,从而导致 OOM。2-Cached

2025-05-23 10:40:04 995

原创 【Maven】手动安装依赖到本地仓库

(2)共享本地安装: 如果你团队中有多个开发者,建议将此依赖上传到公司内部的私有仓库(例如 Nexus 或 Artifactory)。(1)许可证限制: Oracle 提供的驱动程序通常受到许可证约束,因此它们不会托管在 Maven 中央仓库中。使用 mvn install:install-file 命令,将 JAR 文件安装到本地 Maven 仓库。例如,ojdbc6 是 Oracle 提供的用于 Java 的数据库驱动。(1)在本地 Maven 仓库中验证文件是否已正确安装,确认自己的本地仓库路径。

2025-04-17 12:29:27 901

原创 【Mysql】死锁问题详解

实例的日志记录表,实例在重跑的时候,会先根据instanceId去delete该实例关联的全部旧的记录信息,然后再陆续插入新的记录信息,instanceId有索引,出现锁超时的情况。,session1 已获取到IX锁,gap锁, 等待rec insert intention(插入意向锁), session1, session2 都在等待插入意向锁, 插入意向锁与gap锁冲突,双方都没有释放gap锁,又都在等待插入意向锁,死锁发生。在MySQL中,行级锁并不是直接锁记录,而是锁索引。

2025-04-13 22:47:59 1942

原创 【RocketMQ&&RocketMQ Dashbord】Springboot整合RocketMQ

一个队列所对应的新的消费者要获取之前消费的offset(偏移量,也就是消息消费的点位),此时之前的消费者可能已经消费了一条消息,但是并没有把offset提交给broker,那么新的消费者可能会重新消费一次。如果多个queue参与,则为分区有序,即相对每个queue,消息都是有序的。(4)消息量级是否相当:有些业务消息虽然量小但是实时性要求高,如果跟某些万亿量级的消息使用同一个 Topic,则有可能会因为过长的等待时间而“饿死”,此时需要将不同量级的消息进行拆分,使用不同的 Topic。

2025-03-26 12:04:45 781

原创 【Redis】redis实现消息的发布和订阅

虽然 Redis 性能高,但它主要基于内存存储,当消息量过大时,可能会导致内存资源紧张,甚至出现内存溢出的问题。Redis 的消息队列功能相对简单,缺乏像 RabbitMQ 那样的复杂消息处理机制,如消息确认、重试机制、死信队列等,在处理复杂业务逻辑时不够灵活。Redis 基于内存操作,读写速度极快,在处理高并发的消息场景时,能快速完成消息的发布和订阅操作,响应时间短,可满足低延迟的业务需求。由于 Redis 的高性能和低延迟特性,非常适合实时性要求较高的场景,如实时消息通知、实时数据更新等。

2025-03-24 10:19:39 1568

原创 【Jwt】详解认证登录的数字签名

Json Web Token是通过数字签名的方式,以json为载体,在不同的服务之间安全的传输信息的技术。

2025-03-23 23:35:26 1524

原创 【Synchronized】不同的使用场景和案例

锁类型 锁对象 作用范围 适用场景实例方法(对象锁) 当前实例(this) 同一实例的同步方法 保护实例变量(如账户余额)静态方法(类锁) 类的Class对象 所有实例的静态方法 保护静态变量(如全局计数器)显式对象锁 指定对象(如lock) 锁定指定对象的同步代码块 细粒度控制(如缓存更新)显式类锁 ClassName.class 跨实例同步(与静态方法锁等效) 需要全局同步的非静态方法逻辑。

2025-03-12 09:50:58 861

原创 【Java8】Function函数式接口详解及使用

函数式接口里是可以包含默认方法,因为默认方法不是抽象方法,其有一个默认实现,所以是符合函数式接口的定义的。函数式接口里是可以包含静态方法,因为静态方法不能是抽象方法,是一个已经实现了的方法,所以是符合函数式接口的定义的。函数式接口里是可以包含Object里的public方法,这些方法对于函数式接口来说,不被当成是抽象方法(虽然它们是抽象方法);因为任何一个函数式接口的实现,默认都继承了Object类,包含了来自java.lang.Object里对这些抽象方法的实现;@Override。

2025-03-10 14:36:46 1452

原创 【线程池】springboot线程池的底层设计原理

在 Spring Boot 中,线程池是一个重要的组件,用于管理和调度线程,提高应用程序的性能和资源利用率。下面将详细汇总 Spring Boot 线程池的底层原理。

2025-02-25 17:00:04 952

原创 【SpringSecurity】springboot整合SpringSecurity实现登录校验与权限认证

关于安全方面的两个主要区域是“认证”和“授权”(或者说是访问控制),一般来说,Web应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分,这两点也是SpringSecurity重要核心功能。(1)用户认证指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。通俗点说就是系统认为用户是否能登录。(2)用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,

2025-02-25 14:06:16 3685 1

原创 【实体类】分层设计

对父类和子类分别new一个对象,然后使用equals判断,得到的结果是true,原因是它没有调用父类的中属性,而是直接使用的子类中的属性来生成hashcode,所以当子类中的属性参数一样时,使用equals比较结果的为true。解耦数据层和业务层:使业务层与数据层之间的耦合度降低,业务层只需要调用 DAO 提供的接口方法,而不需要关心数据是如何存储和获取的,提高了代码的可维护性和可扩展性。在并发环境下,乐观锁可以防止数据的“脏写”,通过版本号(version)字段来保证数据的一致性。

2025-02-24 15:25:27 963

原创 【工作流】Spring Boot 项目与 Camunda 的整合

官网:https://camunda.com/中文网站:http://camunda-cn.shaochenfeng.com/(1)流程(PROCESS): 通过工具建模最终生成的BPMN文件,里面有整个流程的定义(2)流程实例(Instance):流程启动后的实例(3)流程变量(Variables):流程任务之间传递的参数(4)任务(TASK):流程中定义的每一个节点(5)流程部署:将之前流程定义的.bpmn文件部署到工作流平台提前安装Java1.8以上的JRE或JDKCamundaModele

2025-02-23 22:22:01 2339

原创 【Flyway】数据库版本管理

Flyway 是一款开源的数据库版本管理工具,它可以帮助开发者以一种可靠且可重复的方式管理数据库变更。Flyway 遵循迁移脚本的版本化原则,允许开发者将数据库的变更以脚本的形式记录下来,然后按照版本顺序依次执行这些脚本,确保数据库结构在不同环境(开发、测试、生产)中保持一致。Flyway 的主要特点包括:(1)简单易用:通过简单的命令和配置即可管理数据库迁移。(2)支持多种数据库:如 MySQL、PostgreSQL、Oracle、SQL Server 等。

2025-02-20 11:12:50 2302

原创 【Maven】多module项目优雅的实现pom依赖管理

(1)分层管理依赖父POM:管理全局依赖版本、插件和公共配置。子模块:仅声明自身需要的依赖,不重复定义版本。(2)活用BOM通过导入Spring Boot、Spring Cloud或其他第三方BOM,简化版本协调。(3)模块化设计每个模块职责单一,通过依赖传递共享通用组件。(4)版本变量提取对频繁变更的版本号,可在父POM中定义集中管理。(5)持续梳理依赖定期使用mvn dependency:tree分析依赖树,避免冗余和冲突。

2025-02-14 15:41:08 1573

原创 【Java】实现后端请求接口

HttpURLConnection 是 Java 标准库中较早提供的 HTTP 请求工具【2】POST请求【3】PUT请求【4】DELETE 请求【5】汇总工具类,通过传参实现4种请求【二】HttpClient 实现四种请求方式的示例HttpClient 是 Java 11 及以上版本引入的新的 HTTP 客户端,使用起来更加简洁和方便。【2】POST 请求【3】PUT 请求【4】DELETE 请求【5】汇总的工具类HttpClientUtils 类中的 sendRequ

2025-02-14 14:40:20 562

原创 加密算法分类

加密时,使用公钥对明文进行加密;MD5 将任意长度的输入消息通过填充、分组等操作,经过四轮循环的压缩函数处理,最终生成 128 位的哈希值。优点:安全性高,生成的哈希值长度为 256 位,比 MD5 更安全,被广泛应用于密码存储、数字签名等场景。优点:密钥长度可选(128 位、192 位、256 位),安全性高,加密效率高,被广泛应用。对数据安全性要求较高,且对加密性能有一定要求的场景,如网络通信中的数据加密、文件加密等。对安全性要求不是特别高,且对加密速度有较高要求的场景,如早期的一些简单数据传输加密。

2025-02-11 14:40:48 966

原创 【Druid】学习笔记

Java 程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。Druid的功能(1)替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。(2)可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。(3)数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支

2025-02-11 11:31:27 1034

原创 【ruoyi-vue】前后端分离项目分析

RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源,支持分布式事务。(1)说明使用原生的@Validated进行参数校验时,都是特定的注解去校验(例如字段长度、大小、不为空等),我们也可以用自定义的注解去进行校验,例如项目中的@Xss注解。

2025-02-07 15:09:11 1122

原创 【springboot】拦截器和过滤器的区别

在 Spring Boot 中,拦截器(Interceptor)和过滤器(Filter)都是用于对请求进行预处理和后处理的机制,但它们存在一些区别,适用于不同的场景。下面将详细介绍它们的区别、适用场景,并给出使用案例。

2025-02-05 17:13:24 1200 1

原创 【spring容器管理】bean的生命周期有哪些拓展点?

除了 Spring 提供的扩展点,还可以通过实现 Lifecycle 接口或使用 @EventListener 注解来监听生命周期事件。Java Bean 的生命周期扩展点包括:(1)实例化(构造函数、工厂方法)。(2)属性注入(Setter、构造器、字段注入)。(3)初始化(InitializingBean、@PostConstruct、init-method)。(4)使用(AOP)。(5)销毁(DisposableBean、@PreDestroy、destroy-method)。

2025-02-05 14:41:38 920

原创 Java 变量参数传入方法,修改后是否影响外面的值

(1)基本数据类型:方法内修改不影响外部。(2)引用数据类型:修改对象内容会影响外部。修改引用本身(指向新对象)不会影响外部。(3)字符串:不可变,修改引用本身不会影响外部。

2025-02-05 12:01:38 600

原创 【Linux】curl命令详解

curl 是一个功能强大的网络传输工具,可以在命令行中使用。它支持发送和接收数据,并提供了多种协议和功能,如 HTTP、HTTPS、FTP、文件上传、代理等。curl 是一个灵活且广泛应用的工具,常用于测试 API、下载文件、发送请求等场景。curl 命令的基本语法如下:其中,URL 是要发送请求或下载的地址。下面是一些常用的 curl 命令选项的说明:-o 文件名:将下载的文件保存为指定的文件名。-O:将下载的文件保存为原始文件名。-d 数据:发送 POST 请求时附带的数据。-H “头部信息”:

2025-02-05 11:31:17 3271

原创 【Mybatis Plus】JSqlParser解析sql语句

JSqlParser 是一个用于解析 SQL 语句的 Java 库。它可以将 SQL 语句解析为一个 Java 对象树,允许你以编程的方式对 SQL 语句进行分析、修改和操作。它支持多种 SQL 语句类型,包括但不限于 SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER 等。例如,对于 SQL 语句 “SELECT column1, column2 FROM table1 WHERE column1 = ‘value’”,JSqlParser 可以将其解析为一个 Java 对象

2025-02-05 11:08:27 2657

原创 【Mybatis Plus】所有内置拦截器和实现原理

在多项目的业务场景下,所有查询语句的where必须限制租户,比如where tenant_id = ‘xxx’,但是如果每个sql都手动拼接会很麻烦,因为MybatisPlus提供了租户拦截器TenantLineInnerInterceptor用于实现上述需求。上述多租户配置会使得所有sql都会拼接上tenant_id = ‘xxx’,但还是会有特殊情况不需要拼接tenant_id,或者说部分表就没有tenant_id字段,一旦拼接上就会报错,因此需要手动忽视点某些表。

2025-01-26 20:04:11 388

原创 【Hive】新增字段(column)后,旧分区无法更新数据问题

新增字段语句最后的[CASCADE|RESTRICT]关键字是可以选的,不指定时默认值是RESTRICT,表示新增字段只作用在表上;但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。CASCADE的作用是级联的意思,修改表字段的同时级联修改历史分区的字段信息。从查询结果可以看出,新增字段后,新的分区插入数据,以及重新刷新数据的历史分区,数据都可以正常查询。增加col1时加上cascade关键字。

2025-01-14 14:31:01 1258

原创 【Impala】数据类型转换cast使用

有一些函数、或者运算时,对数据类型有严格要求,所以在做运算前,都需要将数据先进行数据类型的转换,此处就需要用到cast,转为string、timestamp、decimal等等cast函数的一些用法-- 时间转字符串-- 日期转时间。

2025-01-14 12:05:50 735

原创 【EasyExcel】实现百万级数据的导入导出

(1)少量数据可以用单线程逐条读取,单线程写入或者批量写入的方式导入, 大量数据建议使用多线程读取,分多个sheet页存储的方式进行导入(2)少量数据的导出可以直接使查询所有数据,并写入一个sheet页中,数据量大的情况下还是要用多线程分页读取,写入到多个sheet页中。

2024-12-28 22:27:00 3056

原创 【mysql】聚簇索引

综上所述,聚簇索引在范围查询、存储效率上有明显优势。非聚簇索引在访问速度、索引灵活性以及读多写少的应用场景下更有优势。在实际应用中,需根据具体需求选择合适的存储引擎和索引策略(1)一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。(2)聚簇索引和非聚簇索引的区别:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。原始数据:MyISAM引擎的数据存储方式如图:MYISAM是按列值与行号来组织索引的。

2024-12-26 22:04:51 2519

原创 【mysql】MVCC及实现原理

MVCC,全称 Multi-Version Concurrency Control ,即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC 在 MySQL InnoDB 中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读(1)当前读像 select lock in share mode (共享锁), select for update;update;

2024-12-26 14:11:15 1665

原创 【线程池】线程池使用的注意事项

在第三方接口异常的情况下,线程池任务调用第三方接口一直超时,导致核心线程数、最大线程数堆积被占满、阻塞队列也被占满的情况下,也就会执行拒绝策略,但是由于使用的是 CallerRunsPolicy 策略,导致线程任务直接由我们的业务线程来执行。1-ThreadLocal 的变量是绑定在线程上的,而线程池的线程是可以复用的,如果一个线程执行完一个任务后,没有清理 ThreadLocal 的变量,那么这个变量就会被下一个执行的任务继承,导致数据错乱的问题。对于线程池的 submit 方法是无法处理的。

2024-12-24 15:28:19 868

原创 【Mysql】truncate 和 delete的区别

(1)truncate会删除表中的所有数据、释放空间,但是保留表结构(2)只能操作表,不能与where一起使用(3)truncate删除操作立即生效,原数据不放到rollback segment中,不能rollback,操作不触发trigger(4)truncate删除数据后会释放表空间、重置Identity(标识列、自增字段),相当于自增列会被置为初始值,又重新从1开始记录、而非接着原来的id数(5)truncate删除数据后不写服务器log,整体删除速度快。

2024-12-24 14:56:48 1124

原创 【数据结构】元组Tuple

(1)PairPair 用于存储两个元素的键值对,通常包含一个键和一个值。这种结构在需要将两个相关联的数据项作为一个单元进行操作时非常有用。键值结构:提供键(left)和值(right)两种数据的存储。不可变性:一旦创建,Pair 中的值不能被修改,保证了数据的不可变性和线程安全。使用场景:存储用户ID和名称、记录商品价格和库存数量等。(2)TripleTriple 类似于 Pair并继承于Pair,但它可以存储三个元素。它同样提供了不可变性,确保数据的稳定性。

2024-12-19 17:34:38 1249

原创 【Linux】常用命令大全

接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。-size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。正数表示在指定的时间内修改或访问过的文件,负数表示在指定的时间之前修改或访问过的文件,零表示在当前时间点上修改或访问过的文件。(1)-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上 -R 的参数,那么该目录下的所有文件的属组都会更改。

2024-12-18 00:47:57 1004

空空如也

空空如也

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

TA关注的人

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