自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 微服务架构与SpringCloud实战指南

本文介绍了微服务架构的基本概念、优势及实现方案。首先对比了单体架构和微服务架构的优缺点,指出微服务通过功能拆分提高系统可用性和扩展性。随后详细讲解了使用SpringCloud实现微服务的技术要点,包括服务拆分原则、Nacos服务注册与发现、OpenFeign远程调用优化、服务网关实现统一认证等核心内容。文章还涵盖了配置管理的最佳实践,如共享配置提取和热更新机制。最后通过黑马商城项目案例,演示了从单体架构向微服务架构转型的具体实施步骤,包括模块拆分、服务治理、接口调优等关键环节,为构建高可用、可扩展的分布式系

2025-10-16 14:46:43 814

原创 Juc高级篇:线程池,AQS,线程工具,线程安全分析

本文详细介绍了Java多线程编程中的线程池和并发集合类。主要内容包括:1)线程池的实现原理与使用方式,包括自定义线程池、ThreadPoolExecutor核心机制、Executors工厂方法等;2)AQS框架及其实现类ReentrantLock、ReentrantReadWriteLock、StampedLock的原理;3)并发工具类如Semaphore、CountDownLatch、CyclicBarrier的用法;4)线程安全集合类ConcurrentHashMap、LinkedBlockingQue

2025-10-11 17:34:52 435

原创 Juc高级篇:可见性,有序性,cas,不可变,设计模式

-例如:一个线上商城应用,QPS达到数千,如果每次都重新创建和关闭数据库连接,性能会受到极大影响。这时 预先创建好一批连接,放入连接池。// 1. 连接池大小// 2. 连接对象数组// 3. 连接状态数组 0 表示空闲, 1 表示繁忙// 4. 构造方法初始化i++) {connections[i] = new MockConnection("连接" + (i+1));// 5. 借连接i++) {// 获取空闲连接// 如果没有空闲连接,当前线程进入等待。

2025-08-05 20:30:47 1000 1

原创 Juc基础篇:线程,synchronized、ReetrantLock、设计模式

本文系统介绍了Java线程的核心概念与关键技术,主要包括以下内容:线程管理方面,详细讲解了线程的创建方式(Thread、Runnable、FutureTask)、状态监控命令(ps/jps/top/jstack)以及线程终止方法;线程控制技术,深入分析了sleep/yield/join/interrupt等方法的使用场景与实现原理;线程同步机制,重点阐述了synchronized的工作原理及其优化策略(偏向锁、轻量级锁、锁膨胀等);线程间通信,解析了wait-notify机制的正确使用方式,并介绍了保护性暂

2025-05-26 16:11:56 1352

原创 RabbitMq:基础交换机队列,生产者消费者可靠性,延迟消息

-解决非幂等方案1:给每一天消息都生成一个唯一ID,消费者接收到消息之后处理自己的业务,业务处理成功之后将消息ID保存到数据库,如果下次又收到相同的消息,去数据库查询判断是否存在,存在则为重复消息放弃处理。注:延迟消息需要在内部维护时钟,需要每隔多少毫秒跳一次,这种非常cpu密集型任务非常消耗消耗cup,如果延迟消息过多,cpu压力会很大,所以延迟消息的过期时间不宜设置过长,比较适合延迟消息比较短的任务。--RabbitMQ实现数据持久化包括三个方面:交换机持久化,队列持久化,消息持久化。

2025-05-13 21:04:36 940

原创 Redis原理篇:底层数据结构,网络模型,通信协议,内存回收

-举例:当客户端发送来2KB数据,调用epoll_ctl将对应FD添加到list_head中,服务端调用epoll_wait,将list_head中的FD添加到events中,然后将FD从list_head中移除,服务端从FD读取了1KB,这时会检查当前事件通知机制发现是LT就将FD再次添加回list_head中。Dict的rehash不是一次性完成的,因为当数据很多的情况下,要再一次rehash完成,极有可能导致主线程阻塞,因此Dict的rehash是分多次,渐进式的完成,因此成为渐进式rehash。

2025-04-25 23:11:03 1115 3

原创 Redis高级篇:持久化,主从,哨兵,分片,多级缓存,最佳实践

-bgsave的执行流程如下图:主进程访问的内存是操作系统生成的页表与物理内存的映射,在执行bgsave时,会生成一个子进程,并把主进程的页表复制给子进程,然后子进程用该页表所映射的物理内存来一个新的RDB文件来替换旧的RDB文件,该过程中主进程执行的所有更新命令操作,都是操作的物理内存拷贝出来的数据副本,防止子进程更改RDB时出现脏读,知道子进程更新完RDB文件,再把副本数据同步到实际的物理内存中。--创建三台redis实例有很多方法,比如docker。--数据key不是与节点绑定,而是与插槽绑定。

2025-04-10 15:39:06 1231 2

原创 Redis基础入门教学:五个基本数据类型,Java客户端

-SortedSet类似是一个可排序的Set集合,与Java中的TreeSet有些类似,但底层数据结构差别很大。--不管是哪种格式,底层都是字节数组,只不过是编码方式不同。字符串类型的最大空间不超过512m。--Spring Date Redis可以兼容Jedis和lettuce。

2025-03-21 00:01:56 556

原创 MySQL日志,主从结构,分库分表,读写分离

-按照name分片,该分片规则有两个节点,每个节点的长度是512,分片时截取name字段0到2位置的子字符串,然后计算出hash值,用该hash值与1023进行&运算得出结果,然后放入对应的节点中,如world就截取wol,计算出hash值为26629,与1023&运算后得到结果5,发现5对应的第一个节点,所以该数据存入第一个节点中。--配置好后,所有的增删改操作都在Master1,所有的读操作分发到Master2,Slave1和Slave2中。需要自行编码配置实现,只支持java语言,性能较高。

2025-03-18 11:09:29 1356

原创 MySQL索引,SQL优化,锁,InnoDB,事务原理,MVCC(图文并茂,非常详细)

-用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用"@变量名"使用就可以,其作用域为当前连接。--赋值如下图:--使用:select @变量名;注:用户定义的变量无需对其进行声明或者初始化,只不过获取到的值为null。

2025-03-06 15:57:51 2686 11

原创 MySQL基础,SQL,约束,函数,多表联查,事务

-mysql数据类型主要分为三类:数值类型,字符串类型,日期类型。

2025-02-18 12:34:14 2393 2

原创 jvm原理篇

·总结年轻代回收过程:先进行root扫描,将所有静态变量和局部变量扫描出来,获取所有GCRoot对象,然后处理脏卡队列中没有处理完的消息,更新记忆集的数据,此阶段完成后,记忆集已经包含所有老年代对年轻代的引用关系,然后将记忆集中的对象加入到GCRoot集合中,并把在GCRoot引用链上的对象标记位存活,根据设置的最大停顿时间,选择本次要垃圾回收的region,然后将回收region中存活的对象复制到新的region,并把年轻加1,如果年龄到达15就晋升到老年代,最后处理软,弱,虚,终结器引用。

2025-02-11 20:42:23 980

原创 jvm入门实战教学

因为本篇文章是实战,所以没有对基础知识的讲解,基础知识放在这个链接中,

2025-01-25 13:57:58 1139

原创 jvm初学者入门

··jvm的本质是运行在计算机上的一个程序,他的功能是为了运行Java字节码文件(因为计算机是无法识别字节码文件的,它只可以识别机器指令,所以jvm负责将Java字节码文件转化成机器码供计算机执行)。··解释和运行:将字节码的指令解释成机器码让计算机来执行。··内存管理:自动为对象,方法分配内存,以及自动的垃圾回收机制。··即时编译:对热点代码进行优化(将一些需要多次执行的代码字节码指令对应的机器码保存在内存),提升执行效率。··类加载器:功能时将类的字节码文件加载进内存中。··运行时数据区域:存储类的基本

2025-01-15 22:40:23 2878 9

空空如也

空空如也

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

TA关注的人

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