- 博客(89)
- 收藏
- 关注
原创 CMS垃圾回收过程中重新标记阶段为什么不能清理浮动垃圾
至于 “浮动垃圾”,因为 CMS 在 并发标记 时是并发的,GC 线程和用户线程并发执行,这个过程当然可能会因为线程的交替执行而导致新产生的垃圾(即浮动垃圾)没有被标记到;而 重新标记 的作用只是修改之前 并发标记 所获得的。因为在并发标记时,因为是 GC 和用户线程是并发执行的,可能导致一部分已经标记为 从 GC Roots 不可达 的对象,若该对象在用户线程的修改下又可达了,Remark 的作用就是将这部分对象又标记为 可达对象(漏标)。,所以是没有办法处理 “浮动垃圾” 的。不可达对象为可达的对象。
2024-06-28 20:05:56
206
原创 Spring控制反转和依赖注入的理解
首先想说说IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。
2024-06-23 20:27:21
627
原创 124. 二叉树中的最大路径和
二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次。该路径 至少包含一个 节点,且不一定经过根节点。当前节点的最大路径: max(自己,自己+左边,自己+右边,自己 + 左边 + 右边)当前节点作为子节点时的贡献:max(自己,自己+左边,自己+右边)给你一个二叉树的根节点 root ,返回其 最大路径和。路径和 是路径中各节点值的总和。当前节点作为子节点时的贡献。
2024-06-16 21:04:41
434
原创 happens-before 关系
程序顺序规则: 在同一个线程中,代码 x = 1;中的 x = 1 操作 happens-before y = 2 操作。监视器锁规则: 一个线程获取了锁,执行了一些操作,然后释放了锁,另一个线程获取了同一个锁,那么释放锁的操作 happens-before。volatile 变量规则: 一个线程将一个 volatile 变量的值修改为 1,另一个线程读取该变量的值,那么写操作。它定义了哪些操作必须在哪些操作之前执行,从而避免了数据竞争和不一致性问题。happens-before 读操作。
2024-06-14 09:42:03
580
原创 雪花算法和UUID
雪花算法是一个分布式id生成算法,它生成的id一般情况下具有唯一性。由64位01数字组成,第一位是符号位,始终为0。接下来的41位是时间戳字段,根据当前时间生成。然后中间的10位表示机房id+机器id,也可以是单独的机器id。最后12位是序列号。
2024-06-13 20:43:17
754
原创 linux查看端口是否被占用 / 包含某个字符的文件/当前正在运行的进程/根据端口号查找进程
命令用于实时显示当前运行的进程及其资源使用情况。
2024-06-12 12:04:38
264
1
原创 内连接和外连接
内连接:只返回两个表中满足连接条件的行。左外连接:返回左表中的所有行以及右表中满足连接条件的行,右表无匹配行时字段显示为NULL。右外连接:返回右表中的所有行以及左表中满足连接条件的行,左表无匹配行时字段显示为NULL。全外连接:返回两个表中的所有行,无论是否满足连接条件,未匹配行字段显示为NULL。
2024-06-11 21:36:56
225
原创 GET和POST的区别
GET 和 POST 最本质的区别是“约定和规范”上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作。按照约定来说,GET 和 POST 的参数传递也是不同的,GET 请求是将参数拼加到 URL 上进行参数传递的,而 POST 是将请参数写入到请求正文中传递的。
2024-06-10 21:04:51
246
原创 QueryWrapper 和 LambdaQueryWrapper 的区别
QueryWrapper是一种通用的查询构造器,允许通过字符串形式直接指定数据库的字段名来构建查询条件。例如,queryWrapper.eq(“name”,“Alice”) 用于构建等于条件。优点是使用简单直接,适用于所有情况。缺点是它依赖于字符串字面量,这可能导致在数据库字段名更改时出现运行时错误,因为这些错误不会在编译时被捕捉到。
2024-06-06 16:00:11
326
原创 Mybatis-Plus的一些理解
MybatisPlus在Mybatis的基础上进行了增强,进一步简化了SQL的编写。对于普通的单表的CRUD,MyBatisPlus提过了相关接口进行快速操作。此外MybatisPlus还支持使用查询构造器。来进行一些复杂的查询。
2024-06-06 15:51:35
148
原创 对简单工厂模式、工厂方法模式、抽象工厂模式的简单理解
三部分组成把创建对象的任务交给一个工厂类来实现,对业务进行封装。优点:实现了任务分离,客户端不用关心业务的具体实现,交由工厂来“生产”。缺点:违背开闭原则,拓展时要修改工厂类。
2024-05-29 11:07:41
428
原创 mysql的inner join 和left join区别
INNER JOIN 只返回两个表中满足连接条件的匹配行。换句话说,它只返回那些在连接的两个表中都有匹配值的行。如果某一行在其中一个表中没有匹配项,那么这行不会出现在结果集中。
2024-05-28 20:36:25
580
原创 类图的六大关系
继承是一种类与类之间的关系,表示一种泛化和特化的关系。子类继承父类的特性和行为。关联关系是指两个类之间的链接,它使一个类知道另一个类的属性和方法。组合关系也是整体与部分的关系,但是部分不能脱离整体存在,依赖关系是一种使用关系,一个类的实现需要另一个类的帮助。实现关系是一个类实现接口的方法,体现了类与接口的关系。聚合关系是一种特殊的关联关映射,表示整体和部分的关系,但整体与部分不是强依赖的。
2024-05-25 11:45:03
478
原创 Java异常的捕获和抛出底层
当代码执行到一个会抛出异常的状态时,JVM会实例化一个相应的异常对象。这个对象包含了异常发生时的信息,如异常类型、错误消息、和堆栈跟踪。这些信息有助于开发者了解异常发生的环境和原因。
2024-05-24 14:24:52
227
原创 慢SQL分析
为什么会出现慢SQL?未用索引,就会造成全表扫描;又或者索引失效了单表数据量太大,导致加了索引也无济于事子查询过多(大量join会导致笛卡尔积后再筛选,所以大量join会导致大量运算使得sql变慢)怎么进行慢SQL分析启用慢查询日志,设置阈值,找到慢SQL执行explain sql, 分析sql执行计划,重点关注: type(ALL(全表扫描)、index(索引全扫描)),key(实际使用的索引)、key_len(索引长度)、rows(估计为了找到所需的行而必须检查的行数。)如何优化
2024-05-23 21:12:59
165
原创 Redis基本数据结构
embstr和raw类型的区别在于,RedisObject和embstr是连续存储的,只需要访存一次,而raw是分开存储的,需要访存两次。
2024-05-22 10:14:59
494
原创 Java反射
● 在运行时获取类的完整信息,从而操作类或对象的属性或方法。本质是JVM在得到class对象之后,通过class对象进行反编译,从而获取类的各种信息。● Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。
2024-05-20 21:29:20
378
原创 ArrayList和Ventor的区别
它是专门为并发应用设计的,特别适合于在多线程环境中频繁读取但很少修改的情况。Collections.synchronizedList 是一个静态方法,它接受任何 List 实现(如 ArrayList、LinkedList 等),并返回一个新的 List 对象,该对象的所有方法都是通过一个单一的对象锁同步的。写时复制策略的核心思想是,每当列表发生修改操作(如添加、删除、设置等)时,不直接在当前的数组上修改,而是先复制出一个新的数组,然后在这个新的数组上进行修改,修改完成后再将原数组引用指向新数组。
2024-05-20 10:33:09
882
原创 接口和抽象类的区别
如果需要定义一个基类并希望它的子类继承它的特征,则应该使用抽象类。如果您希望多个类共享相同的特征和行为,则应该使用接口。● 接口不能定义普通方法,而抽象类可以定义普通方法以及方法的代码。● 接口一般只包含抽象方法,Java8之后允许可以定义默认方法。● 接口可以实现多个而抽象类只能单继承。
2024-05-19 21:25:35
295
原创 元空间和方法区有什么不同
元空间并不在虚拟机内存中,而是使用本地内存(即操作系统的内存)。元空间不再有字符串常量池和类静态变量池,这些内容被移到了堆中。● 类的结构信息、方法信息。
2024-05-19 21:23:34
138
原创 RabbitMQ消息的可靠性、顺序性和幂等性
如何保证消息队列消费的幂等性,这一块应该还是要结合业务来选择合适的方法,有以下几个方案:● 消费数据为了单纯的写入数据库,可以先根据主键查询数据是否已经存在,如果已经存在了就没必要插入了。或者直接插入也没问题,因为可以利用主键的唯一性来保证数据不会重复插入,重复插入只会报错,但不会出现脏数据。● 消费数据只是为了缓存到redis当中,这种情况就是直接往redis中set value了,天然的幂等性。
2024-05-19 21:17:42
904
原创 Java类加载过程
加载是一个读取class文件,通过【类加载器】将class文件装载到jvm中的方法区内,并在JVM堆中生成一个便于用户调用的java.lang.Class类型的对象的过程。对class的成员变量、静态变量、静态代码块的赋值,如果有【实例化对象】,则会调用方法对实例变量进行初始化,并执行对应的构造方法内的代码。类加载主要分为以下五个阶段。
2024-05-19 21:12:31
199
原创 Github 操作指南
1、远程仓库拉取到本地2、定位到要上传的文件夹下面启动Git Bash3、添加要上传的文件git add4、提交合并更改5、推送确保本地仓库和远程仓库结构一致。
2024-05-18 21:40:13
443
原创 Java泛型
泛型是一种为了提高代码通用性和复用性的代码格式,它允许我们在编写类或方法、接口时不需要指定详细的数据类型,先用一个占位符代替。在平时开发中接触的泛型一般就是需要封装某个工具类时,如在统一前后端返回格式的时候,定义一个泛型类,允许传递不同的数据类型返回给前端。/*** 状态码*//*** 提示信息*//*** 返回的数据*/return msg;
2024-05-18 19:41:39
428
原创 什么是ThreadLocal
ThreadLocal 为每一个线程提供独立的局部变量,每个线程都拥有该变量的一个独立副本。每个Thread里面都有一个ThrealLocal.ThreadLocalMap结构,里面由Entry数组组成。key是ThrealLocal,value是我们存的Object,当我们调用set的时候,就会去当前线程所持有的ThrealLocalMap放入一个k-v对,当我们调用get的时候,会去ThrealLocalMap中,找到当前ThrealLocal对象对应的value返回。
2024-05-14 20:16:25
262
原创 HTTP和HTTPS的区别和联系
HTTPS在HTTP的基础上引入了一个TLS层,采用密文进行传输,结合对称加密技术和非对称加密技术来实现数据的安全性和完整性。客户端会生成随机密钥,并使用服务端的公钥加密后再传给服务端。根据非对称加密算法,公钥加密的消息仅能通过私钥解密,这样服务端解密后,双方就得到了相同的密钥,再用它加密应用消息。(公钥如何获取:CA证书里)CA证书:保证密钥发售者身份的真实性非对称加密技术:保证消息不被冒充对称密钥传送:保证消息不被泄露为什么要采用非对称加密技术:保证密钥分发给通信双方的安全性。
2024-05-13 21:17:50
845
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人