自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

这个BUG提示表格行过大。这是因为MySQL数据库中InnoDB表的最大行大小限制为65535字节,不包括BLOB类型的列。这个限制包括列数据的存储开销。当你的表定义的列太多或者某些列的数据过大时,可能会超过这个限制。在对实体类进行列扩充时,超出Mysql的限制原因是 在一百多列中 使用了大量的varchar(1000)来存储数据

2024-06-18 11:43:31 179

原创 基于Redis实现的一个编码生成器

【代码】基于Redis实现的一个编码生成器。

2024-05-17 11:53:38 261

原创 MetaObjectHandler -------------实现数据库字段的自动填充

是 MyBatis-Plus 框架提供的一个接口,用于在执行数据库操作时。方法是在执行数据库的插入或更新操作时被调用的。它提供了一些默认方法,可以在。

2024-05-15 13:44:44 275

原创 MYSQL之DUPLICATE KEY

如果插入的数据违反了唯一约束,MySQL 将执行更新操作而不是抛出错误。如果唯一键冲突,就会执行更新操作,否则会插入新行。:如果插入的数据违反了唯一约束,MySQL 将忽略该错误,不会执行任何操作。这意味着如果唯一键冲突,MySQL 将跳过该行,不会执行插入或更新操作。当向表中插入数据时,如果插入的数据违反了唯一约束(比如唯一索引或主键约束),就会触发。这些选项可以帮助开发者在插入数据时处理唯一键冲突的情况,使得数据操作更加灵活和可靠。为了处理这种情况,MySQL 提供了。在 MySQL 中,

2024-04-27 10:42:16 632 1

原创 基于享元模式实现连接池

【代码】基于享元模式实现连接池。

2024-04-23 21:48:33 314

原创 异步线程与RabbitMQ应该如何选择?

异步线程是一种编程技术,它允许程序在执行长时间操作(如I/O操作、网络请求等)时,不阻塞主执行线程。这可以通过多线程或使用语言特性(如Python的。

2024-04-23 11:59:09 457 2

原创 Mysql主键优化之页分裂与页合并

当页中删除的记录达到MERGE_THRESHOLD(默认为页的50%),Innodb会开始寻找最靠近的页(前或后)看看是否可以将两个页合并以优化空间使用。页可以为空,也可以填充一半,可以填充100%。每个页包含最少两行数据(一行数据以链表形式存在),根据主键排序。MERGE_THRESHOLD:合并页的阈值,可以自己设置,在创建表或者创建索引时指定。插入数据时,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。满足业务需求的情况下,尽量降低主键的长度。业务操作时,避免对主键的修改。

2024-04-07 23:16:38 254

原创 如何选择G1收集器与CMS收集器

G1收集器和CMS收集器各有优势,选择哪个收集器应基于具体的应用需求和运行环境。G1收集器更适合大堆内存和要求低停顿时间以及高吞吐量的场景,而CMS收集器更适合对停顿时间敏感的应用。实际选择时,还需要考虑JVM的版本和具体配置,因为不同版本的JVM对这些收集器的优化也不同。最佳实践是,在真实的生产环境中对比测试这两种收集器,找到最适合你的应用的配置。

2024-03-31 21:45:56 396

原创 Mysql字段的各种时间类型

字段会在记录插入时自动设置为当前时间,并在记录更新时自动更新为当前时间。这些时间类数据类型可以根据实际需求选择使用。在需要自动记录时间戳的场景下很有用,而。适合存储仅日期或仅时间的情况,而。则适合仅需存储年份的情况。可以同时存储日期和时间。

2024-01-11 21:24:22 591

原创 类的生命周期

符号引用验证:Class文件在其常量池会通过字节码记录自己将要使用的其他类或者方法,通过类的完全限定名,查找此类的二进制字节码文件,利用字节码文件创建Class对象。格式检查如:文件格式是否错误、语法是否错误、字节码是否合规。初始化一个类的时候,其父类尚未初始化,则优先初始化其父类。如果同时包含多个静态变量,则按照自上而下的顺序依次执行。验证类是否符合JVM规范,安全行检查。将常量池中的间接引用转换为直接引用。为类的静态变量分配内存、设置初始值。初始化静态变量和静态代码块。程序代码退出、异常、结束等。

2023-12-08 20:36:34 78

原创 JVM常见垃圾回收器

Serial和Serial Old串行垃圾回收器,是指使用单线程进行垃圾回收,堆内存较小,适合个人电脑。垃圾回收时,只有一个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收完成。垃圾回收时,多个线程在工作,并且java应用中的所有线程都要暂停(STW),等待垃圾回收的完成。将伊甸园以及之前的幸存区中的存活对象,采用复制算法,复制到新的幸存区,其中较老对象晋升至老年代。为目标的收集器,停顿时间段,用户体验就好。当伊甸园需要垃圾回收时,跳出一个空闲区域作为幸存区,

2023-12-08 20:35:06 544

原创 为什么不建议使用Executors创建线程池?

根据Executors创建的这两个线程池newFixedThreadPool和newSingleThreadExecutor。2.而这个newCachedThreadPool则是让。

2023-12-05 17:50:17 77

原创 业务上最常用的设计模式——策略模式

那么哪些场景下适合使用策略模式呢?订单的支付策略(支付宝、微信、银行卡...)解析不同类型excel (xls格式、xlsx格式)打折促销(满300元9折、满500元8折、满1000元7折...)物流运费阶梯计算(5kg以下、5-10kg、10-2kg、20kg以上)一句话总结:只要代码中有冗长的 if-else 或 switch 分支判断都可以采用策略模式优化

2023-12-01 20:24:18 89

原创 Spring生命周期

处理Aware接口(BeanNameAware,BeanFactoryAware,ApplicationContextAware)初始化方法(initializingBean、init-method)Bean的后置处理器BeanPostProcessor-前置。Bean的后置处理器BeanPostProcessor-后置。通过BeanDefinition获取bean的定义信息。通过构造函数实例化bean。

2023-11-26 21:01:38 39

原创 SpringMVC执行流程

HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet。(将客户端的请求映射到相应的处理器Handler上)(将客户端的请求映射到相应的处理器Handler上)

2023-11-26 21:00:01 35

原创 Springboot自动配置原理

文件中所配置的类的全类名。但这些配置类并不会全部导入到Spring容器中,而是根据其内部的条件。@SpringbootApplication注解是一个复合注解。是实现自动化配置的核心注解。的classpath路径下的。注解导入对应的配置选择器。该选择器内部是读取了。

2023-11-26 20:58:57 110

原创 为什么MYSQL在可重复读隔离级别下会产生幻读?

在下面样例中,使用了update操作执行了当前读,而这个当前读使得UNDOLOG版本链最上面的当前事务ID修改为了A事务的ID。正确的理解应该是幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果所表征的数据状态无法支撑后续的业务操作。说幻读是事务A执行两次 select 操作得到不的数据集,即 select 1得到 10 条记录,select 2得到 15 条记录,这其实并不是幻读,既然第一次和第二次读取的不一致,那不还是不可重复读吗,所以这是不可重复读的一种。

2023-11-17 22:42:21 242

原创 Zookeeper分布式锁原理

如果发现比自己小的那个结点被删除,则客户端的Watcher会收到相应通知,此时再次。,如果是则获取到了锁,如果不是则重复以上步骤继续获取到比自己小的一个节点并注册监听。如果发现自己创建的结点并非lock所有子节点中最小的,说明自己还没有获取到锁,,那么就认为该客户端获取到了锁。使用完锁后,将该节点删除。

2023-10-26 21:37:39 46

原创 Mysql聚集索引与非聚集索引

数据存储和索引是放在一起的,索引结构的叶子结点保存了行数据,必须有且只有一个。将数据与索引分开存储,索引结构的叶子结点关联的是对应的主键,可以有多个。而除了聚集索引外的都是非聚集索引。

2023-10-09 16:15:39 68

原创 JAVA常见类型转换

【代码】JAVA常见类型转换。

2023-10-07 10:58:39 44

原创 双重检查机制

是一种用于多线程编程中实现延迟初始化(Lazy Initialization)的设计模式。它的主要目的是在多线程环境下,确保某个资源(通常是一个对象或单例)只会被初始化一次,以提高性能和减少资源消耗。该机制的核心思想是,在多线程环境中,首先检查资源是否已经被初始化,如果没有,则再次检查资源是否已经被初始化,如果还没有,则进行初始化。这两次检查之间通过同步机制来保证只有一个线程能够执行初始化操作。

2023-10-05 16:43:50 146

原创 Redis持久化之RDB、AOF

RDB全称Redis Database Backup file(Redis数据备份文件),也被叫做Redis数据快照。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。快照文件称为RDB文件,默认是保存在当前运行目录。

2023-09-19 17:43:07 84

原创 Mysql之记录锁,间隙锁,临键锁,意向锁

记录锁锁的是表中的某一条记录,记录锁的出现条件必须是精准命中索引并且索引是唯一索引,如主键id。

2023-09-16 15:31:25 170

原创 IO多路复用,select,poll,epoll的区别

IO多路复用是一种用于管理多个输入/输出(IO)操作的技术,它允许,而不需要为每个通道创建单独的线程。这种技术提供了一种高效的方法来处理并发IO操作,特别适用于服务器应用程序。

2023-09-15 15:33:29 43

原创 Mysql日志之binlog、redolog和undolog

二进制日志记录了对MySQL数据库所执行的所有修改操作,包括插入、更新和删除操作等。它是一种逻辑日志,记录了数据修改的语句。

2023-09-09 10:36:37 59

原创 Redis中的全量同步和增量同步

在Redis中,全量同步(Full Sync)和增量同步(Incremental Sync)是两种不同的数据同步机制,用于将主节点(Master)的数据复制到从节点(Slave)。

2023-09-07 21:38:40 574 1

原创 Mysql垂直分库和水平分库

分库(Sharding)的主要目的是解决数据库的扩展性和负载均衡问题。当单个数据库无法满足应用的需求,无法处理大量的数据和并发请求时,可以考虑进行数据库的分库。分库将数据划分到不同的数据库中,每个数据库负责处理一部分数据。这样可以分散负载,提高系统的吞吐量和响应速度。分库适用于数据量极大或需要支持高并发的场景。

2023-09-07 15:05:16 153 1

原创 使用Excutors创建不同类型的线程池

如果有空闲线程则会重用线程,如果没有可用线程则会创建新的线程。适合执行大量的短期异步任务。

2023-09-07 10:35:45 71 1

原创 Redis面试题记录——2023年

在Redis中,一个字符串类型最大可以到512MB,一个二级数据结构(比如hash、list、set、zset等)可以存储大约40亿个(2^32-1)个元素,但实际上不会达到这么大的值,一般情况下如果达到下面的情况,就可以认为它是Bigkey了。【字符串类型】: 单个string类型的value值超过1MB,就可以认为是Bigkey。【非字符串类型】:哈希、列表、集合、有序集合等, 它们的元素个数超过2000个,就可以认为是Bigkey。

2023-09-06 18:40:17 83 1

原创 @Transactional和@Transactional(rollbackFor = Exception.class)的区别

Transactional只能回滚RuntimeException和RuntimeException下面的子类抛出的异常 不能回滚Exception异常。如果需要回滚Exception异常,则建议使用@Transactional(rollbackFor = Exception.class)

2023-09-05 11:20:14 94 1

原创 Java 计算机网络面试题记录

TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,在发送数据 前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服 务端保存的一份关于对方的信息,如ip地址、端口号等。一个TCP连接由一个4元组构成,分别是两个IP地址和两个端口号。一个TCP连 接通常分为三个阶段:连接、数据传输、退出(关闭)。因为需要考虑丢包问题,如果是两次握手。在服务端发送ACK报文(第二次握手)时发生了丢包。

2023-09-04 16:32:45 39 1

原创 常见HTTP响应码

成功的含义取决于HTTP方法。

2023-09-04 14:11:14 31 1

原创 ConcurrentHashMap

ConcurrentHashMap相当于线程安全的HashMap。

2023-09-04 11:04:53 44 1

原创 JAVA——内存溢出、内存泄漏

内存溢出指的是在程序执行过程中,申请的内存超过了系统实际可用的内存资源。内存泄漏是指不再使用的对象仍然被引用,导致GC无法回收。

2023-08-29 19:51:47 61 1

原创 关于GC(Java垃圾回收)

在Java的垃圾回收(Garbage Collection)过程中,存在三种不同的垃圾回收类型:Minor GC(新生代垃圾回收)、Major GC(老年代垃圾回收)和Full GC(完全垃圾回收)。

2023-08-28 20:51:21 120 1

原创 外键的优缺点及使用场景

数据完整性:外键可以确保引用表中的数据一致性和完整性。它可以防止无效引用和数据孤立问题,保证表与表之间的数据关联性和一致性。数据一致性维护:通过外键,数据库可以自动处理相关表之间的更新、插入和删除操作。当主表中的记录发生变化时,外键可以自动更新或禁止引用该记录的相关数据行,确保数据一致性。数据关联性查询:外键使表与表之间的关联关系变得明确,可以方便地进行查询和连接操作,快速获取相关数据。数据约束:外键可以限制某些操作,如删除或更新相关数据,从而在数据库层面提供额外的安全性。有主键的数据库设计可以增加 ER图

2023-08-28 15:36:21 1022 1

原创 AQS详解

( Abstract Queued Synchronizer )是一个抽象的队列同步器,通过维护一个共享资源状态( Volatile Int State )和一个先进先出( FIFO )的线程等待队列来实现一个多线程访问共享资源的同步框架。AQS 主要有三大属性分别是 Node head ,Node tail,int state,其中state 表示同步状态0是未持有,锁重入则累加,head为等待队列的头结点,tail 指向队列的尾节点。

2023-08-25 17:24:54 33 1

原创 Redis五种数据类型的底层实现

String是Redis最基本的数据类型,它的底层数据结构是一个SDS简单的动态字符串(dynamic string),实际上是一个字节数组。

2023-08-25 15:37:54 28 1

原创 IO模型之BIO、NIO、AIO

当我们谈论IO模型时,我们指的是计算机在进行输入和输出操作时的工作方式。常见的IO模型包括传统的,和。这些模型描述了在进行IO操作时,程序如何与设备进行交互以便获取或传输数据。讲解之前先给大家说明一下和的意思阻塞(Blocking):在阻塞操作中,当一个线程执行一个调用时,它将一直等待,直到完成或返回结果。在这个等待过程中,线程处于非活动状态,程序流程无法继续执行其他操作。阻塞操作会占用线程资源,直到操作完成才能释放线程。

2023-08-23 17:12:04 68

原创 Mysql大表优化之垂直分割与水平分割

垂直分割和水平分割是MySQL常见的数据分割策略。垂直分割通过按列分割,将相关的列存放在不同的表中,用于提高查询性能。水平分割通过按行分割,将数据分散存储在多个表或数据库中,用于提高并发处理能力和负载均衡。根据业务需求和数据特征,可以选择适合的分割方式来优化数据库性能和可扩展性。

2023-08-22 21:00:34 274 1

空空如也

空空如也

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

TA关注的人

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