自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

洛豳枭薰

最好的年华为最初的梦想尽最大的努力

  • 博客(142)
  • 资源 (2)
  • 收藏
  • 关注

原创 线上 Full GC 故障模拟

该代码会持续填充堆内存至 80% 以上,并反复震荡,迫使 G1 收集器陷入“清理-失败-清理”的死循环。-Xloggc:gc.log: 怎么跑?现象:找到 java 进程(记下 PID,例如 8060),观察 %CPU 是否接近或超过 100%。FGC (Full GC Count): 数字在不断增加 (561 -> 562 -> 563)。FGCT (Full GC Time): 时间增长迅速,说明 CPU 都在做 GC。故障现象:CPU 飙高,应用响应卡顿,GC 日志疯狂刷屏,但进程未崩溃(假死)。

2026-02-12 16:50:30 152

原创 G1垃圾回收器执行流程

G1 会连续发起多次 Mixed GC(默认最多 8 次),每次回收一部分老年代,直到回收得差不多了,或者时间不够了,才会结束 Mixed GC 周期,回到纯 Young GC 模式。并发标记之所以难,是因为GC 线程在标记垃圾的时候,你的业务线程(应用线程)还在修改对象之间的引用关系。G1 使用SATB算法,在并发标记开始时“拍个快照”,在标记过程中,凡是引用关系发生变化导致原本存在的对象引用消失,G1 都会把这些对象记录下来强行保活,从而保证标记的正确性。此时:A 是黑,B 是黑。

2026-02-11 16:43:28 864

原创 如何设计一个高并发系统

高并发系统的核心目标是在保证高可用(High Availability)和数据一致性(Consistency)的前提下,最大化系统的吞吐量(Throughput)并降低响应时间(Latency)。一个优秀的架构师,需要在**性能(Performance)、可用性(Availability)和成本(Cost)**之间找到平衡点,并根据业务的发展阶段(初创期 vs 成熟期)选择最合适的技术方案。降级策略:在系统过载时,关闭非核心功能(如评论、推荐),保证核心业务(如下单、支付)可用2。

2026-02-08 17:24:41 447

原创 MySQL 并行复制

在早期的 MySQL 版本中,从库(Slave)只有一个 SQL 线程负责重放中继日志(Relay Log),当主库(Master)并发写入压力较大时,从库的单线程无法跟上主库的速度,从而产生严重的 主从延迟(Seconds_Behind_Master)。如果事务 A 修改了 ID=1 的行,事务 B 修改了 ID=2 的行,即使它们在主库是先后提交的(时间上不重叠),MySQL 也会判断它们没有依赖关系(last_committed 可能会被标记为相同)。设置 Worker 线程的数量。

2026-02-08 15:57:56 744

原创 MySQL 梳理

如果你的从库用的是 MyISAM 引擎,或者你想把数据同步到 Elasticsearch/Hadoop,它们根本看不懂 InnoDB 的物理 Redo Log(那是二进制的页结构),但它们能看懂 Binlog(标准的 SQL 或行数据)。如果你先用快照读(没幻读),然后自己手贱去 UPDATE 了一条别人刚插入的数据(因为 UPDATE 是当前读,不看版本),更新成功后,你的 Read View 里的 trx_id 变成了你自己的,下次再 SELECT 就能看到这条数据了——幻读产生。如果是新的,就跳过。

2026-02-07 21:02:13 479

原创 Innodb一次更新动作

当客户端发起 COMMIT 时,为了保证 Redo Log(引擎层) 和 Binlog(Server层) 的一致性,MySQL 使用了 两阶段提交 (Two-Phase Commit, 2PC)。如果先写 Redo Log 成功,Binlog 失败:主库重启后通过 Redo Log 恢复了数据,但 Binlog 里没这条数据,导致从库(备库)丢数据。重启时,InnoDB 会读取磁盘上的 Redo Log,把没刷盘的修改重新应用(Replay)到内存中,恢复出宕机前的数据状态。(原值为 ‘Wang’)

2026-02-07 20:00:13 740

原创 消息队列关键问题描述

Exchange(交换机):他非常聪明,能根据信封上的各种规则(Routing Key),把信精准地分发给不同的少爷(队列)。如果没数据,Broker Hold 住请求(例如 5秒),一旦有新消息到达或超时,再返回结果。削峰填谷:面对双11的洪峰,它能抗住极高的并发(十万级 TPS),而且堆积了几亿条消息性能也不会下降(这是它比 RabbitMQ 强的地方)。业务功能丰富:它懂业务,支持事务消息(保证付钱和发货一致)、延时消息(下单30分钟不支付自动取消)、消息回溯(刚才发错了,重新发一遍)。

2026-02-07 18:51:50 721

原创 即时编译整体梳理

JIT 知道哪些分支被真正执行了,哪些类型被真正加载了,从而能进行激进的“预测性优化”,这是静态编译器做不到的。OSR 的优势在于它打破了“以方法为单位”的编译限制,让正在运行中的代码也能被优化,确保了那些包含长循环但调用次数少的方法(如 main 函数或批处理脚本)也能获得极致的本地代码性能。逆优化 (Deoptimization):如果后来加载了 LinkedList,之前的假设失效了,JIT 会立即通过“逆优化”退回到解释器模式,确保程序逻辑正确,然后再重新编译9。JIT 会分析对象的作用域。

2026-01-18 18:55:33 533

原创 jvm运行时数据区& Java 内存模型

JMM 是一种抽象规范(JSR-133),它屏蔽了底层硬件(寄存器、缓存、内存)和操作系统(编译器优化、处理器重排序)的差异,保证 Java 程序在各种平台下对内存的访问都能达到一致的效果。Happens-Before 原则:JMM 定义的一系列天然的先行发生关系(如:启动线程的操作先于线程内的任何操作)。与虚拟机栈类似,区别在于它是为 Native 方法(JNI,如 C++ 编写的底层库)服务的。问题:线程 A 修改了变量,线程 B 无法立即看到,因为线程 A 改的是自己缓存里的副本。

2026-01-18 17:49:28 680

原创 垃圾回收器

核心思想:G1 跟踪每个 Region 里面的垃圾堆积的“价值”(回收所获得的空间大小以及回收所需时间的经验值),在后台维护一个优先列表,每次根据允许的收集时间,优先回收价值最大的 Region 610。如果在 Survivor 空间中,相同年龄所有对象大小的总和大于 Survivor 空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到 MaxTenuringThreshold。染色指针 (Colored Pointers):将对象引用的元数据信息存储在指针的地址位上,而不是对象头中。

2026-01-18 17:33:48 606

原创 JVM内存模型-常量池

这是为了省钱(内存)。菜谱里好几道菜都要用“盐”。如果每做一道菜都去买一包新盐太浪费了。于是厨房里有一个巨大的公共配料盒(堆内存),里面放着“盐”。不管哪道菜需要“盐”,都直接从这个盒子里拿,大家共用一份。当你决定做这道菜时,你把菜谱里的内容读进脑子里(内存的方法区)。此时,菜谱里的“切块鸡肉”这几个字,在你脑中变成了具体的“案板上的那块肉”(符号引用变成了直接引用)。就像你买的一本《家常菜谱》,它躺在书架上(硬盘里),里面写满了菜名(符号引用)和配料表(字面量)。在没开始做菜前,它只是死板的文字。

2026-01-16 16:43:17 371 1

原创 Java相关记录文档

2026-01-16 11:44:36 352

原创 Java常用开发工具

JDK 8+ (推荐): 彻底放弃 Date 和 Calendar,全面拥抱 java.time 包 (LocalDateTime, ZonedDateTime, Duration)。注:如果需要 skipNulls 功能,Guava 的 Joiner 依然有优势,JDK 需要 filter(Objects::nonNull)。原则:以下功能 Guava 虽然提供,但 JDK 8+ 原生实现已经足够好,新代码请直接使用 JDK。第三部分:已被 JDK 8+ 替代的特性 (迁移指南)Guava: 不涉及。

2026-01-14 20:05:04 393 1

原创 List梳理

内存泄漏:如果你有一个巨大的 List,截取了一个小的 subList 并且长期持有,那么整个大 List 的数组都无法被 GC 回收(因为 subList 强引用了原数组)。而 LinkedList 内存分散,遍历时频繁发生 Cache Miss(缓存未命中),导致 CPU 必须频繁去主存取数,性能相差巨大。数据最终一致性:写入的数据,读线程可能不会立马读到(因为没切引用前读的还是旧数组),不适合实时性要求极高的场景。Vector:古老的线程安全数组(全同步,性能差,已淘汰)。

2026-01-13 21:34:35 676

原创 Map梳理

JDK 1.8:尾插法。利用高低位指针(loHead/hiHead),不需要重新计算 Hash,直接判断 (e.hash & oldCap) 是 0 还是 1,0 留在原位,1 移到 原索引 + oldCap 位置。原理:当 n 是 2 的幂时,(n - 1) & hash 等价于 hash % n,但位运算效率更高。逻辑:如果 accessOrder 为 true,将当前节点 p 剪切下来,移动到双向链表的尾部。扰动函数:hash = (h = key.hashCode()) ^ (h >>> 16)。

2026-01-13 20:45:30 565

原创 AQS原理概述

AQS(AbstractQueuedSynchronizer)是Java并发包的核心框架,用于构建锁和同步器。其核心思想是"状态(State)+队列(Queue)+CAS",通过volatile state管理同步状态,CLH队列处理线程排队,利用CAS实现线程安全操作。资源获取流程包括尝试获取、入队、自旋/阻塞三个阶段;释放时会唤醒后继节点。AQS支持独占和共享两种模式,并提供了ConditionObject实现条件变量。LockSupport作为底层工具,通过"许可&quo

2026-01-11 17:15:37 898

原创 Mybaits无法加载Xml文件

可以将接口与xml组合的方式<!-- Using classpath relative resources --><mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper...

2019-12-22 16:43:25 390

原创 Eclipse+Maven+mybaits简单实例

文章目录一、数据库二、eclipse maven建立Java Web项目三、Web Demo1、实体类2、DAO接口和DAOImp实现类3、逻辑层4、控制器四、mybaits Demo1、pom.xml2、mybaits.xml3、flowerDaoImp.xml4、测试showAll 方法一、数据库CREATE TABLE `flower` ( `id` int(20) NOT NUL...

2019-12-18 21:18:20 751

原创 编写servlet的404历程

文章目录1、首先是项目结构2、代码(1)HelloWorld(2)web.xml3、404解决(1)查看当前servlet包名类名引用是否正确(2)路径因是否正确(3)查看tomcat是否部署在eclipse中4、最后感谢党1、首先是项目结构2、代码(1)HelloWorldpackage com.robin;import java.io.IOException;import ja...

2019-11-20 16:22:22 400

原创 Spring Aop Demo

文章目录一、aop二、xml方式1、定义接口类2、具体实现类3、切入类4、xml配置方式5、test二、Config配置方式1、配置类2、testeclipse 如何自动新建bean.xmlnew–>others–>spring Bean Configuration File–>命名一、aop1、 aop面向切面有两种方式:1 接口代理 2 cglib代理2、由于...

2019-11-11 10:43:59 749

原创 redis-实现商品交易

文章目录一、结构设计二、用户挂卖商品三、购买商品四、test一、结构设计1、需要设计用户存储结构hash,来存放当前用户具有的金钱数2、设计用户包裹set,里边存储了用户的所有商品3、设计交易区market:zset集合来存储,存储格式为item.user price用户流程:1、将自己拥有的商品放置到贸易区,并设定一定的价格,在放置过程中需要去查看当前商品是否有变动,因为redis...

2019-10-22 10:28:10 463

原创 reids 模仿消息队列

文章目录一、消息队列二、Jedis资源池生成实例三、生产者四、消费者参考一、消息队列消息队列简单来说就是一个消费者生产者模型,消费消费资源,生产者生产资源,如何通过redis来实现消息队列,会发觉redis中list结构很适合处理这类问题,list类型可以用来在商城系统中表明某一个流程,将一个个流程以lpush的方式放入到list中,将结束的流程以rpop的方式结束当前路程。二、Jedi...

2019-10-21 15:51:44 290

原创 redis实战--文章投票

确定投票系统结构1、hash来存储文章key:article:110titile:文章标题link:链接votes:投票数user:文章作者2、zset存储文章发布时间3、zset存储文章得分4、set集合存储每一篇文章的投票的用户vote:110user:1user:2考虑生成文章需要将文章属性以Map集合的形式传入到hash结构中,之后在对应score与time添...

2019-10-18 21:27:59 375

原创 代理模式

文章目录一、静态代理二、jdk的动态代理1、实现jdk动态代理2、使用要点(1)为什么jdk动态代理只能针对于接口?(2)为什么调用InvocationHandler会自动执行invoke()函数?(3)为什么匿名内部类使用局部变量需要定义为final?三、cglib的动态代理1、实现cglib动态代理四、参照博客一、静态代理1、比如买房子,首先实现通用接口,buyhouse()2、目标类实...

2019-08-13 09:35:29 366

原创 01背包问题

文章目录一、递归解决背包问题二、动态规划一、递归解决背包问题暴力递归,穷举出所有的可能性,在检索完所有物品,即index=nums.length时候决定是否更新最大值1、当物品体积小于等于当前背包容量,选择放或者不放2、当物品体积大于,只能选择不放该物品//递归解决背包问题 public int getMaxValue(int[] weight, int[] value, int ...

2019-07-23 15:59:20 201

原创 HTTP协议

文章目录一、Http协议过程1、Url输入地址2、DNS解析3、request请求1、请求行2、请求头部3、空行+请求正文(Get无请求正文)4、response请求1、状态行:协议版本、状态码、状态描述2、响应头3、空行+响应正文(HTML网页)5、获取HTML对应的资源(JS、css、图片)6、浏览器对网页进行渲染并显示二、长连接与短连接1、短连接2、长连接三、带流水与不带流水1、不带流水2、...

2019-07-07 21:09:13 718

原创 工厂模式

文章目录一、简单工厂模式Demo二、工厂方法模式1、工厂方法模式简介2、工厂方法模式结构2、Demo三、抽象工厂模式1、抽象工厂方法简介2、抽象工厂方法结构3、Demo一、简单工厂模式简单工厂模式就是为了避免直接new对象,不需要去关注怎么生成该对象,用户只需要传入对应的参数就可以1、Iproduct:定义抽象产品类的公共方法2、Product:定义具体的产品类,实现抽象类中的方法...

2019-07-02 10:27:46 216

原创 观察者模式

文章目录一、观察者模式二、订阅/发布模式(push模式)三、pop模式拉取模式四、标准模式(继承现有接口和抽象类)五、引用一、观察者模式观察者的通俗理解可以参考订阅发布的方式,每一个订阅内容,一旦被观察对象内容改变就会向观察者发送消息,告诉观察者修改了内容或者是观察者获取最新内容Subject:抽象主题(抽象被观察者),抽象主题角色把所有观察者对象保存在一个集合里,每个主题都可以有任意数...

2019-07-01 16:15:24 413

原创 享元模式

文章目录一、享元模式的意义?二、享元模式结构1、单纯享元模式2、复杂享元模式三、单纯享元模式实现四、复合享元模式实现一、享元模式的意义?享元模式重点在于享,可以理解为分享,String的设计使用到了祥元模式,这个模式存在的意义在于减少创建许多冗余的实例对象,造成OOM错误,比如在电商中,如果客户请求一个商品就需要实例化一个商品对象,之后调用该对象的方方,一定会导致内存爆表的情况,享元模式会判断...

2019-07-01 13:51:51 371

原创 Mysql索引详解

文章目录一、为什么需要索引?(索引的优缺点)1、索引产生的意义2、索引的优缺点二、索引的分类三、B树-数据库索引原理1、B树(平衡多路查找树)2、B+树3、B+树的优势四、聚合索引(InNoDB存储引擎)与非聚合索引(MyISAM存储引擎)1、聚合索引2、非聚合索引3、InNoDB与MyISAM异同五、组合索引(覆盖索引)1、index Key:索引数据范围2、Index Filter :用于过滤...

2019-06-29 21:58:33 9702 3

原创 MySQL锁机制

文章目录一、锁的分类(一)、按粒度划分的锁1、表级锁(偏向于读)2、行级锁3、页级锁(二)、按锁的级别划分1、共享锁(读锁)2、排他锁(写锁)三、MyISAM存储引擎的锁1、支持表锁(偏向于读)2、并发锁2、锁调度四、InNoDB存储引擎的锁(一)支持事务(二)行锁1、共享锁与排他锁2、意向共享锁与意向排他锁3、行级锁(Record lock)导致的死锁4、行级锁的间隙锁(Next-Key loc...

2019-06-26 17:53:29 4169 3

原创 Map集合系列

文章目录一、Map结构1、架构2、接口3、抽象类4、子类二、HashMap三、HashTable四、TreeMap五、WeakHashMap六、Map总结一、Map结构1、架构2、接口1、Map接口是所有实现类和其他接口的父接口(键值对的存储方式),提供了最基本的接口方法:容量、判断是否为空、增加(单个或者集合)、删除、获取键集合、获取值集合、entrySet迭代键值对、jdk1.8中添...

2019-06-24 17:34:02 1103

原创 TreeMap全面解析(包含红黑树插入删除)

红黑树1、规则1、每个节点都只能是红色或者黑色2、根节点是黑色3、每个叶节点(NIL节点,空节点)是黑色的。4、如果一个结点是红的,则它两个子节点都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。5、从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。2、插入原则1、插入节点总是红色2、插入节点父节点为黑色,则不影响3、插入节点父节点为红色,需要左右旋转调整...

2019-06-24 17:32:12 1080

原创 List集合系列

文章目录一、 List集合全貌二、接口三、抽象类四、ArrayList(一)实现接口(二)属性(三)构造函数(四)核心源码(五)迭代方式五、Linkedlist(一)实现接口(二)属性(三)构造函数(四)核心源码(五)迭代方式六、Vector(一)实现接口(二)属性(三)构造函数(四)核心源码(五)迭代方式(六)Stack(封装了Vector的方法)八、对比性能1、ArrayLIst与Linked...

2019-06-21 21:14:02 890

原创 JVM编译过程与后期的优化

文章目录一、JVM编译过程二、即时编译器优化(后期优化)1、编译器与解释器一、JVM编译过程引用自博客:https://blog.csdn.net/fuzhongmin05/article/details/548802571、词法分析:读取源码,找出词法中关键词那些不合法(分辨出这句话哪些是动词、哪些是标点)2、语法分析:检查这些关键词组合在一起是不是符合Java语言规范。如if的后面是...

2019-06-21 10:01:22 376

原创 Java类加载器(双亲委派模型)(综述)

文章目录类加载器一、预定义类型类加载器二、类加载器结构双亲委派模型一、双亲委派模型流程二、双亲委派模型源码自定义类加载器一、类加载器继承关系二、ClassLoader1、构造函数2、核心方法三、自定义类加载器实例四、双亲委托模型的破坏1、第一次破坏2、第二次破坏3、第三次破坏引用类加载器一、预定义类型类加载器1、启动(Bootstrap)类加载器,负责将 <Java_Runtime_H...

2019-06-19 21:52:46 7372

原创 (面试)阐述类加载机制

类加载主要分为7各阶段:加载–验证–准备–解析–初始化–使用–卸载加载1、通过类的全限定名获取此类的二进制字节流2、将二进制字节流代表的静态存储结构转化为运行时数据结构3、内存中生成代表该类的对象,作为方法区中该类的数据访问入口验证既然已经加载到运行时数据结构,需要去验证二进制字节流1、文件格式验证:字节流是否符合Class文件格式的规范2、元数据验证:对字节码描述的信息进行语义分...

2019-06-18 19:54:18 544

原创 内存泄漏与内存溢出汇总

文章目录区别内存泄漏导致原因内存泄漏解决方案内存溢出导致原因内存溢出解决方案内存溢出类型(OOM异常)区别1、内存泄漏:程序在申请内存空间之后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。2、内存溢出( out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个...

2019-06-17 15:15:12 427

原创 深入理解JVM--Java垃圾回收机制(4WH原则)

文章目录为什么需要垃圾回收?why垃圾回收那些东西?(where JVM内存模型)什么时候垃圾回收?(when)如果进行垃圾回收?(how)用什么回收垃圾?(what)引用提到这个问题的时候首先需要去考虑三点问题:1、为什么需要垃圾回收?(why)2、垃圾回收那些东西?(where)3、什么时候垃圾回收?(when)4、如果进行垃圾回收?(how)5、用什么回收垃圾?(what)为什...

2019-06-16 17:48:18 797

原创 记第一次部署springMVC

新建javaweb编写applicationContext.xml与web.xmlapplicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.o...

2019-06-13 16:22:34 270

Yii2.0-权威指南.chm

yii2详细中文文档

2017-04-25

后台模板代码

后台模板代码

2017-04-30

空空如也

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

TA关注的人

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