自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java中如何对集合的元素排序

如果你想使用自定义的排序规则,可以传递一个Comparator//按照字符串长度排序Collections.sort(names,(a,b)->Integer.compare(a.length(),b.length()));System.out.println("排序后的列表:"+names);}}

2025-01-19 09:38:01 632

原创 数据库的三个范式

第一范式(1NF):确保每个字段的值都是原子的。第二范式(2NF):在1NF的基础上,消除部分依赖,确保每个非主属性完全依赖于主键。第三范式(3NF):在2NF的基础上,消除传递依赖,确保每个非主属性不依赖于其他非主属性。通过逐步应用这些范式,可以使数据库结构更加规范化,减少数据冗余,提升数据一致性。

2025-01-19 09:33:04 1165

原创 Java中如何从stream里获取输入的邮箱然后输出

在Java中,使用StreamScannerforEach。

2025-01-19 09:28:36 572

原创 Netty模型结构的优点与设计

Channel:代表一个网络连接,负责数据的读写操作。EventLoop:一个事件循环,用于执行所有的I/O操作。每个Channel与一个EventLoop绑定,EventLoop通过事件驱动的机制来处理网络事件。:处理I/O事件的处理器,负责定义具体的网络应用逻辑。:每个Channel都有一个ChannelPipeline,它是一个处理链,依次处理消息。Bootstrap:用于设置和启动客户端和服务器。:表示异步I/O操作的结果,可以用来监听I/O操作的完成状态。

2025-01-13 10:45:22 1016

原创 kafka消息积压怎么办,如果rebalance后发生消息丢失怎么办

消息积压:通过增加消费者、优化处理逻辑、增加分区数和存储等方式来缓解。Rebalance后消息丢失:通过手动提交位移、合理配置rebalance策略、减少消费者间的竞争以及确保消费者稳定性等方式来避免。

2025-01-13 09:49:50 1225

原创 深拷贝和浅拷贝

浅拷贝:拷贝对象时,仅复制基本类型字段和引用类型字段的地址,原对象和拷贝对象共享引用类型成员。常用的拷贝方法包括通过clone()方法和构造函数。深拷贝:拷贝对象时,递归地复制对象及其引用类型字段所引用的对象,确保原对象和拷贝对象完全独立。可以通过手动实现深拷贝方法,或者使用序列化与反序列化来实现。

2025-01-13 09:43:19 470

原创 ThreadLocal应用场景

ThreadLocal 是 Java 中的一个类,用于创建线程局部变量。它的主要作用是让每个线程拥有自己的独立变量副本,避免多个线程共享数据,从而避免线程之间的竞争和同步问题。

2025-01-12 12:52:19 696

原创 常见分布式锁实现方案

实现原理:通过在数据库中创建一张锁表,利用数据库的唯一性约束来实现分布式锁。核心步骤:当某个节点需要获取锁时,在锁表中插入一条记录(如 lock_key)。通过唯一约束(如 PRIMARY KEY 或 UNIQUE)保证同时只有一个节点可以插入成功。如果插入失败,则表示锁已经被占用。删除记录或设定 TTL(超时时间)释放锁。优点:简单易用,易于实现。依赖成熟的数据库,无需额外组件。缺点:性能瓶颈:数据库不是高性能组件,不适合高并发场景。

2025-01-12 12:10:06 1101

原创 对于微博的评论楼中楼功能,如何设计数据库

设计微博的评论楼中楼功能需要一个合理的数据库结构来存储评论以及楼中楼(即评论的回复)。这个设计涉及到如何组织评论和回复之间的关系,并且保证能够有效地查询和展示评论层级。

2025-01-12 11:42:30 693

原创 MySQL的存储引擎

特点:事务支持:InnoDB是MySQL的默认存储引擎,支持ACID(原子性、一致性、隔离性、持久性)事务。行级锁:提供高效的并发控制,通过行级锁(而非表级锁)减少锁竞争,提高并发性能。外键支持:支持外键约束,保证数据的完整性和关系性。数据持久性:InnoDB支持数据持久性,所有数据都会写入磁盘,并在崩溃恢复时能够恢复。MVCC(多版本并发控制):通过多版本并发控制来提高并发性能,支持高效的读操作。适用场景:高并发环境。需要事务支持的应用。

2025-01-10 20:08:47 511

原创 Redis集群的两种启动方式

Redis集群可以通过两种主要方式启动:手动启动和使用redis-trib工具(或redis-cli工具集)启动。

2025-01-10 19:56:15 891

原创 Java中的限流算法

漏桶算法将请求视为水流,漏桶的水量控制了系统的处理速度。每当请求进入时,水会加到桶中,如果桶满了,新的请求将被丢弃或延迟。桶内的水以固定的速率流出。(1)应用场景: 适用于流量平滑,防止短时间内的流量突增。

2025-01-08 18:57:33 564

原创 synchronized和lock区别

(1)synchronized:是 Java 语言的一部分,提供一种简洁的方式来实现同步。它可以用于方法或代码块,以确保同一时刻只有一个线程可以访问被同步的代码。(2)Lock:是 Java 并发库 (java.util.concurrent.locks) 中的一个接口,提供比 synchronized 更灵活和强大的锁机制。最常用的实现是 ReentrantLock。

2025-01-08 09:39:57 1057

原创 MySQL性能调优

MySQL 性能调优是指通过对 MySQL 数据库进行一系列配置和优化操作,以提高查询效率、响应速度和系统稳定性。

2025-01-08 09:30:27 962

原创 Java中的堆内存和栈内存

(1)用途:存储通过 new 关键字创建的对象实例和数组。(2)特点:所有线程共享的内存区域。对象生命周期由垃圾回收器(GC)管理,程序员无需手动释放内存。(3)适用场景:存储全局可访问的对象或数据。在上述代码中,str 指向存储在堆中的字符串对象。

2025-01-07 20:14:06 226

原创 Java中的动态代理

动态代理是一种在运行时生成代理类并创建代理对象的机制。与 静态代理 不同,动态代理不需要提前定义代理类,而是通过反射动态生成代理对象。在 Java 中,动态代理的实现主要有两种方式:(1)基于 JDK 的动态代理(通过接口实现)(2)基于字节码操作的动态代理(如 CGLIB)

2025-01-07 20:02:33 398

原创 TCP与UDP

TCP:可靠、顺序、有连接,适合需要准确传输的应用。UDP:不可靠、无连接,适合实时性要求高且容忍数据丢失的应用。

2025-01-07 13:17:44 249

原创 Java中事务的二段提交机制

在Java中,事务的二段提交(2PC,Two-Phase Commit)是一种确保分布式系统中事务一致性的协议。它被广泛应用于分布式数据库、分布式缓存、消息队列等场景中,目的是在多个节点或系统之间进行事务提交时,确保所有参与者要么全部成功提交,要么全部回滚,以保持系统的强一致性。

2025-01-07 09:46:24 1098

原创 Redis分片原理

Redis 分片(Sharding)是指将 Redis 数据库中的数据分布到多个 Redis 实例(节点)上,通过分片实现水平扩展。Redis 本身并不提供自动分片的功能,但可以通过客户端分片、代理分片、集群模式等方式来实现数据的分布式存储。

2025-01-07 09:30:14 1181

原创 Java中的AOP、过滤器、拦截器、监听器

(1)AOP是一种编程范式,旨在通过“切面”(Aspect)来对系统的横切关注点进行模块化。横切关注点通常是那些跨越多个模块的功能,比如日志记录、事务管理、安全控制等。(2)特点:切面:定义了跨越多个类的行为,通常通过@Aspect注解来标识。通知(Advice):指定了切面应执行的行为,通常有不同的类型,如@Before(方法执行前)、@After(方法执行后)、@Around(方法执行前后)等。切点(Pointcut):定义了哪些方法应该被通知(拦截)。

2025-01-07 09:20:17 1264

原创 Redis主从同步

Redis 主从同步(Master-Slave Replication) 是一种数据复制机制,用于将 Redis 数据库的内容从主服务器(Master)同步到一个或多个从服务器(Slave)中。这种机制能够实现数据的冗余备份、负载均衡和提高系统的可靠性。主从同步是 Redis 中常见的分布式部署方式之一,广泛应用于高可用性和数据备份场景中。

2025-01-06 19:41:34 388

原创 final、finally和finalize区别

final 是一个用于声明常量、方法、类和局部变量的修饰符,它用于表示某个对象或元素在初始化后不能再改变。(1) 用法及含义常量:用于声明常量,表示变量的值不能改变。这里 MAX_VALUE 是一个常量,它的值是 100,且在程序中不能再被修改。方法:用于声明方法,表示该方法不能被子类重写(即方法不能被覆盖)。类:用于声明类,表示该类不能被继承。局部变量:声明局部变量,表示变量一旦初始化后,不能再赋值。(2) 总结。

2025-01-06 19:13:06 421

原创 Spring事务

Spring 事务是 Spring 框架对事务管理的封装,提供了一种更简便和灵活的方式来管理事务。Spring 通过 声明式事务管理 和 编程式事务管理 来实现事务控制。

2025-01-06 19:00:23 356

原创 MySQL事务

在开发中,事务 用来确保一系列操作的原子性、一致性、隔离性和持久性(即 ACID 属性)。MySQL 事务是基于数据库引擎(如 InnoDB)提供的功能,通过 SQL 语句来控制事务的开始、提交和回滚。

2025-01-06 18:50:08 347

原创 AQS相关

AQS是 Java 并发库中的一个核心同步框架,位于 java.util.concurrent 包中。它提供了一个基础设施,开发者可以用它来构建各种同步工具(如锁、信号量、倒计时闩锁等)。AQS 通过队列和同步状态的管理,使得 Java 在高并发环境下能够高效地控制线程同步。AQS 的设计目标是为了简化和优化线程同步机制,提供一个通用的同步框架,基于队列来管理线程的等待和唤醒。

2025-01-06 13:06:06 508

原创 HashMap的并发安全问题及解决方案

在并发环境下,HashMap 并不是线程安全的,会导致数据丢失、死循环和数据不一致等问题。解决这些问题的常见方案有:(1)使用 ConcurrentHashMap,它是一个线程安全的 Map,适合高并发读写的场景。(2)使用 Collections.synchronizedMap() 包装 HashMap,适用于低并发场景。(3)显式加锁或使用 ReadWriteLock 来控制并发访问。

2025-01-06 12:48:08 1485

原创 死锁条件及避免

死锁是指两个或多个线程在执行过程中,由于竞争资源或其他原因,造成一种僵持状态,导致它们永远等待对方释放资源,从而无法继续执行下去。在 Java 中,死锁通常发生在多个线程竞争多个资源的情况下。每个线程在持有一个资源的同时,要求获得其他线程持有的资源,如果每个线程都这样等待对方,就会形成死锁。

2024-12-24 20:51:31 392

原创 缓存击穿、缓存穿透和缓存雪崩

缓存穿透指的是请求的数据既不在缓存中,也不在数据库中,通常是因为请求的数据本身就不存在。每当用户请求不存在的数据时,缓存也没有,数据库也没有,从而每次都会直接访问数据库,造成不必要的数据库压力。缓存雪崩是指缓存中大量数据在同一时刻失效或被清除,导致大量请求直接访问数据库。因为多个缓存项失效,系统同时发起大量数据库请求,数据库瞬间承受巨大的压力,可能导致数据库崩溃。

2024-12-24 20:38:00 443

原创 设计模式——行为型

将请求封装成对象,从而让用户可使用不同的请求、队列和日志请求给定一个语言,定义它的文法,并定义一个解释器,通过解释器来解释该语言的句子提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示定义一个对象来封装一系列的对象交互,中介者使各个对象之间不需要显式地互相引用,从而达到松耦合在不暴露对象实现细节的情况下,捕获并外部化对象的内部状态,以便在以后恢复对象的状态定义对象之间的一对多依赖关系,使得当一个对象改变状态时,其所有依赖者都会收到通知并自动更新。

2024-12-04 13:45:19 567

原创 设计模式——结构型

将抽象部分与实现部分分离,使得二者可以独立地变化将对象组合成树形结构以表示“部分-整体”的层次结构,使得客户端可以统一处理单个对象和对象集合动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式比生成子类更为灵活为子系统中的一组接口提供一个统一的接口,外观模式定义了一个高层接口,使得子系统更易使用运用共享技术有效地支持大量细粒度的对象。为其他对象提供一种代理以控制对这个对象的访问。

2024-12-04 13:21:52 445

原创 设计模式——创建型

定义一个创建对象的接口,由子类决定实例化哪个类提供一个接口,用于创建一系列相关或依赖的对象,而不需要指定它们具体的类将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示通过复制现有的实例来创建新的对象,而不是通过构造函数。

2024-12-03 19:41:42 282

空空如也

空空如也

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

TA关注的人

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