- 博客(445)
- 资源 (1)
- 收藏
- 关注
原创 在 Java 中,“对象的创建”与“对象的加载”有什么不一样
对象的创建发生在运行时。创建具体的对象实例。涉及内存分配、初始化和返回引用。通常通过new关键字、反射、序列化等方式实现。类的加载发生在类的首次使用时。加载类的字节码文件到 JVM 内存中。涉及字节码的读取、验证、准备、解析和初始化。由类加载器(ClassLoader)负责。通过理解这两个概念的区别,可以更好地掌握 Java 类的生命周期和对象的管理。
2024-10-09 21:17:49
256
1
原创 volatile 不是防止JVM的指令重排序吗,为啥保证不了对变量的操作是原子性的。
volatile 不是防止JVM的指令重排序吗,为啥保证不了数据的原子性
2024-08-15 17:51:19
249
1
原创 mysql表的底层存储是以b+树的形式存储的吗
在聚簇索引中,数据行实际上存储在叶子节点上,这意味着表数据与主键索引紧密绑定,按照主键的顺序存储。当通过非主键索引进行查询时,InnoDB 首先在辅助索引的 B+树中查找,然后使用找到的主键值在聚簇索引的 B+树中检索完整的数据行。总结一下,InnoDB 使用 B+树作为聚簇索引和非聚簇索引的数据结构,这使得它在执行范围查询和顺序访问时非常高效,同时也支持快速的插入、删除和更新操作。对于非主键索引(也称为辅助索引或二级索引),InnoDB 同样使用 B+树结构,但是叶子节点不直接包含数据行的全部数据。
2024-04-15 16:11:12
444
原创 CGLIB动态代理生成什么样的代理类?
需要注意的是,CGLIB生成的类名、方法名和其他细节在实际使用中可能会有所不同,并且通常会包含一些CGLIB内部的特定标识符。与JDK动态代理不同,CGLIB不需要接口来创建代理,它可以直接对类进行代理。当你使用CGLIB创建代理时,CGLIB会在运行时动态生成一个新的类,这个类是被代理类的子类。对于被代理类中的每个非final的方法,CGLIB生成的代理类将会覆盖这些方法,并在其中插入特定的拦截逻辑。这个过程中,CGLIB会使用自己的类加载器来加载生成的代理类。是CGLIB提供的一个接口,它包含一个。
2024-04-08 19:49:17
410
原创 JDK动态代理到底生成什么样的类?
在上面的示例代码中,当你运行时,JDK 动态代理机制会在内存中生成一个新的代理类。这个类不会有一个可读的源代码文件,因为它是在运行时动态生成并直接加载到 JVM 中的。请注意,这个类是动态生成的,所以你不会在你的项目中找到它的源代码。JDK 动态代理的实现机制是在运行时生成一个新的类,这个类实现了指定的接口,并且在这个新生成的类中,所有接口方法的实现都是转发到一个。动态生成的代理类将实现你指定的所有接口,并且对这些接口中声明的所有方法的调用都将被转发到。方法,并传入当前的代理实例、对应的。
2024-04-08 19:39:41
604
原创 RPC和HTTP,它们之间到底啥关系
Spring Cloud 默认是微服务通过Restful API来进行互相调用各自微服务的方法,同时也支持集成第三方RPC框架(这里的说的RPC是特指在一个应用中调用另一个应用的接口而实现的远程调用,即红色框所指的范围。这种设计风格与RESTful架构形成对比,后者通常使用HTTP作为传输协议,并且利用URI来表示资源,通过HTTP方法(如GET、POST、PUT、DELETE等)来表示操作,并且通常将参数通过查询字符串或请求体传递。RPC的实现通常遵循一种设计风格,即将。
2024-01-22 12:00:44
711
原创 Logback的配置文件,你看懂了吗
总结:这个配置文件设置了一个日志系统,它将日志输出到控制台(两种格式:带颜色和不带颜色)和一个滚动文件中。它还定义了日志格式和滚动策略,以及一个特定的记录器,它只将日志输出到标准控制台。如配置日志级别为INFO,则INFO及以上级别的日志会输出,而比INFO级别低的日志(debug日志)不会被输出。:定义了一些属性,可以在配置文件中重复使用。:设置了根日志记录器(全局日志)的级别以及它使用的appender(表示使用的输出策略,常见的有控制台输出策略(:定义了日志上下文的名称,这里被设置为。
2024-01-18 15:10:03
1156
原创 后端怎样防止重复提交订单?
如果因网络问题、Nginx重试机制、微服务Feign重试机制或者用户故意绕过前端防抖和节流设置,直接频繁发起请求,都会导致系统防重请求失败,甚至导致后台产生多条重复记录,此时我们需要考虑在后台增加防重设置。通常我们可以在前端通过防抖和节流来解决短时间内请求重复提交的问题,考虑到微服务分布式的场景,可以通过使用。方式来实现后台防止重复请求的功能,
2024-01-16 11:35:28
696
原创 为什么TCP会粘包
只要在发送端每次发送消息的时候给消息带上识别消息边界的信息,接收端就可以根据这些信息识别出消息的边界,从而区分出每个消息。粘包出现的根本原因是不确定消息的边界。接收端在面对"无边无际"的二进制流的时候,根本不知道收了多少 01 才算一个消息。其实粘包根本不是 TCP 的问题,是使用者对于 TCP 的理解有误导致的一个问题。)导致合并成一个IP数据报,那接收方如何把这两个TCP数据包给分出来呢,这就有了TCP粘包问题。传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2023-12-28 16:23:24
1655
3
原创 Java中synchronized锁升级过程是什么样的
在Java中,对象锁的状态是为了减少同步操作的开销而设计的,主要包括无锁、偏向锁、轻量级锁和重量级锁几个级别。锁的状态会随着竞争情况的不同而升级,但是不会降级。锁的升级过程是单向的,意味着一旦锁被升级,它就不会降级。例如,一旦一个轻量级锁升级为重量级锁,即使后来竞争减少,它也不会降级回轻量级锁或偏向锁。这是因为锁降级会引入额外的复杂性,并且在大多数情况下,一旦出现了激烈的锁竞争,它通常会持续存在。在JVM中,锁的这些状态转换都是为了在不同的竞争情况下提供更好的性能。
2023-12-25 17:31:26
417
原创 MySQL中已经有了Binlog,为啥还要有Redo Log
MySQL中的Binlog和Redo Log虽然都与事务的持久性和可恢复性有关,但它们服务于不同的目的和场景,并且在MySQL的架构中扮演着互补的角色。总之,Redo Log 和 Binlog 在MySQL中共同工作,以确保数据的安全性、持久性和一致性,同时提供灵活的数据恢复和复制选项。如果数据库发生崩溃,InnoDB 在重启时会检查 Redo Log。通过 Redo Log,InnoDB 可以重做(redo)
2023-12-22 16:38:40
1697
1
原创 MsSQL中的索引到底长啥样,查找过程怎么进行
二级索引(Secondary Index)又称为辅助索引,是因为二级索引的叶子节点存储的数据是主键。也就是说,通过二级索引,可以定位主键的位置。即索引结构和数据一起存放的索引,并不是一种单独的索引类型。即索引结构和数据分开存放的索引,并不是一种单独的索引类型。第一次扫描通过普通索引定位到聚簇索引的值,然后第二次扫描通过聚簇索引的值定位到要查找的行记录数据(id 是主键,所以是聚簇索引,其叶子节点存储的是 id 主键对应的行记录的数据。唯一索引,普通索引,前缀索引等索引属于二级索引。
2023-12-22 16:04:58
625
原创 MySQL中MVCC的流程
当谈到数据库的并发控制时,多版本并发控制(MVCC)是一个重要的概念。MVCC 是一种用于实现数据库事务隔离性的技术,常见于像 PostgreSQL 和 Oracle 这样的数据库系统中。MVCC 的核心思想是为每个数据行维护多个版本,这样在事务并发执行时,每个事务可以看到一个特定时间点的数据快照,而不会受到其他事务的影响。这种机制使得读取操作和写入操作可以并发执行,同时保持数据的一致性和隔离性。在 MVCC 中,每个数据行都会有多个版本,每个版本都有一个时间戳或者序列号来标识。
2023-12-21 17:12:14
615
原创 MySQL的utf8mb4字符集,你知道全称是什么吗
utf8mb4(UTF-8 MultiByte 4)是一种字符编码,它支持Unicode字符集,包括emoji表情。其中,“utf8”代表“8-bit Unicode Transformation Format”,而“mb4”代表“multi-byte 4” (最多4字节(4-byte))。这种编码通常用于MySQL数据库中,以便存储和处理包含辅助平面字符(如emoji表情)的Unicode数据。
2023-12-21 15:07:12
854
原创 JVM中的虚拟机栈的动态链接部分存放到底是什么
在Java虚拟机(JVM)中,每个线程在执行一个方法时都会创建一个栈帧(Stack Frame),栈帧中包含了方法的运行时数据。栈帧通常包括局部变量表、操作数栈、动态链接、方法返回地址等部分。
2023-12-20 20:47:35
887
原创 zookeeper和nacos区别是什么,注册中心用zookeeper还是nacos
Zookeeper和Nacos都是用于服务发现、配置管理和分布式协调的开源软件。
2023-12-17 17:22:08
3311
原创 什么时候需要用RocketMQ 延时队列呢?
如果数据量比较少,确实可以这样做,比如:对于“如果账单一周内未支付则进行自动结算”这样的需求,如果对于时间不是严格限制,而是宽松意义上的一周,那么每天晚上跑个定时任务检查一下所有未支付的账单,确实也是一个可行的方案。,如:“订单十分钟内未支付则关闭“,短期内未支付的订单数据可能会有很多,活动期间甚至会达到百万甚至千万级别,对这么。,一直轮询数据,每秒查一次,取出需要被处理的数据,然后处理不就完事了吗?,很可能在一秒内无法完成所有订单的检查,以上场景,正是延时队列的用武之地。,无法满足业务要求而且性能低下。
2023-12-14 20:48:12
448
原创 YOLO的网络结构组成
YOLOv5的CSP结构是将原输入分成两个分支,分别进行卷积操作使得通道数减半,然后一个分支进行Bottleneck * N操作,然后concat两个分支,使得BottlenneckCSP的输入与输出是一样的大小,这样是为了让模型学习到更多的特征。
2023-11-27 15:10:45
653
原创 springboot中jar和war的区别
WAR文件:WAR文件是一种Web应用程序归档文件,它包含了Web应用程序的所有内容,包括Java类、JSP页面、HTML、CSS、JavaScript文件等。使用WAR文件打包的Spring Boot应用程序需要部署到一个支持Java Web应用程序的Web容器(如Tomcat、Jetty等)中运行。而使用WAR文件打包的Spring Boot应用程序适用于需要部署到Web容器中的Web应用程序,可以与其他Web应用程序共享同一个容器。这种打包方式适用于独立运行的应用程序,不依赖于外部的Web容器。
2023-11-23 15:51:21
366
原创 MySQL中json类型,你使用过吗
开发和维护成本:如果团队已经熟悉MySQL并且已经有相关的基础设施和运维经验,使用MySQL的json类型可以减少学习和维护成本。综上所述,选择使用MySQL的json类型还是NoSQL数据库,需要综合考虑数据结构灵活性、查询和分析需求、扩展性和性能、开发和维护成本等因素。其效率是5.7版本的5倍!MySQL的json类型允许存储和查询具有不同结构的文档数据,适用于半结构化数据的存储需求。查询和分析需求:如果对消息发送内容进行复杂的查询和分析,MySQL的json类型可以使用SQL查询语言进行灵活的操作。
2023-11-18 14:00:15
509
原创 将所有序列化类的serialVersionUID都设置为1L 会有什么问题吗?
版本控制问题:如果类的任何字段有改变,就应该改变 serialVersionUID,因为改变可能会影响序列化/反序列化的方式。数据不一致问题:如果两个本质上不同的类,它们的 serialVersionUID 都是1L,那么在反序列化时,Java会认为它们是相同的类,这可能导致数据不一致或者类型转换错误。因此,建议在实际应用中,为每个类显式地定义一个唯一的serialVersionUID,并根据类的结构变化进行更新,以确保序列化和反序列化的兼容性和安全性。
2023-11-17 14:31:52
1097
原创 为啥Java序列化要有 private static final long serialVersionUID = 1L
在Java中,如果一个类没有显式地定义serialVersionUID,Java会根据类的结构自动生成一个默认的serialVersionUID。如果我们没有显式定义这个变量,Java虚拟机会根据类的属性计算出一个唯一的值,并在序列化时将该值赋给serialVersionUID,随类一起进行序列化。这样,无论类的结构如何变化,serialVersionUID都会保持不变,从而确保反序列化的兼容性。)这句话的作用是定义一个固定的序列化版本号,以确保类的序列化和反序列化的兼容性。
2023-11-17 14:21:57
1154
原创 Authorization为啥必须要以Bearer开头
Bearer代表Authorization头定义的schema ,除了Bearer,还有其它的一些 schemas ,
2023-11-16 11:00:10
1122
3
原创 古典音乐的入门赏析
维瓦尔第:小提琴协奏曲《四季》(Vivvaldi: The Four Seasons)J. S. 巴赫:哥德堡变奏曲(J. S. Bach: Goldberg Variations, BWV 988)海顿:C大调第1号大提琴协奏曲(Haydn: Cello Concerto No. 1 in C, Ho. VIIb/1)贝多芬:降E大调第5号钢琴协奏曲“皇帝”(Beethoven: Piano Concerto No. 5 in E-Flat Major, Op. 73 “Emperor”)莫扎特
2023-10-31 14:31:14
147
原创 引入了mybatis-spring-boot-starter,还需要引入mysql-connector-java吗?
引入了mybatis-spring-boot-starter,还需要引入mysql-connector-java吗?
2023-10-31 10:38:08
801
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人