![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 94
罗志宏
这个作者很懒,什么都没留下…
展开
-
Parallel Collector 频繁 Full GC 解决
Parallel Collector 频繁 Full GC 解决原创 2022-10-15 10:39:53 · 518 阅读 · 1 评论 -
组合索引该怎么玩?
组合索引该怎么玩?原创 2022-10-15 10:33:52 · 297 阅读 · 0 评论 -
索引为啥会错选?
索引为啥会错选?原创 2022-10-15 10:17:41 · 222 阅读 · 0 评论 -
CMS 垃圾回收器
CMS 垃圾回收器1. cms 回收过程分析1.1 初始标记(initial-mark)1.2 并发标记(concurrent-mark)1.3.1 Card Table1.3.2 mod-union table1.3 并发预清理 (concurrent-preclean)1.4 可中断预清理(concurrent-abortable-preclean)1.5 重新标记(remark)1.6 并发清除(concurrent-sweep)1.7 并发重置(concurrent reset)2. cms 日志解原创 2022-05-29 00:22:31 · 4792 阅读 · 3 评论 -
分布式事务
分布式事务1. 什么是分布式事务1.1 概念2. 为什么会有分布式事务?2.1 多 service 节点2.2 多数据源3. 分布式事务的理论基础3.1 CAP 定理3.2 BASE 定理4. 分布式事务解决方案4.1 XA 方案4.1.1 2pc4.2 TCC4.3 saga 方案4.4 本地消息表、RocketMQ事务消息方案、最大努力通知方案4.4.1 RocketMQ 事务消息方案4.4.2 常规 MQ 解决方案4.5 Seata4.5.1 第一阶段4.5.2 第二阶段1. 什么是分布式事务1.原创 2022-04-17 23:51:19 · 2338 阅读 · 0 评论 -
RocketMQ 详解
RocketMQ 详解1. 基础概念2.RocketMQ 消费模式2.1 广播模式2.2 集群模式3. 基础架构3.1 Broker 的存储结构3.2 存储文件简介3.3 Consumer 端的负载均衡机制3.4 消息刷盘机制3.5 Mmap + pageCache3.5.1 传统IO 和 Mmap3.5.2 pageCache3.5.3 预映射机制 + 文件预热机制3.6 push/pull/pop3.7 Topic 分片3.8 查漏补缺3.8.1 消息的全局顺序和局部顺序3.8.2 零拷贝(Zero-c原创 2022-04-13 02:33:16 · 33401 阅读 · 0 评论 -
缓存双写一致性
缓存双写一致性1. 缓存基本使用方式2. 先更新数据库,再更新缓存2.1 线程安全问题2.2 从业务场景角度考虑3. 先删除缓存,再更新数据库3.1 线程安全问题3.2 延时双删策略4. 先更新数据库,再删除缓存5. 最终方案前言:在开头有必要说明,如果对数据一致性要求比较高就不要存缓存,因为只要涉及到双写就一定存在一致性问题。1. 缓存基本使用方式 如果可以容忍数据不一致话,我们可以给缓存设置一个过期时间,所有写操作以数据库为基准,缓存过期后就会去数据库中取新值,保证了数据的最终一致性 过原创 2022-04-12 15:49:20 · 1439 阅读 · 1 评论 -
SpringBoot 启动流程
SpringBoot 启动流程1. 启动入口2. 创建 SpringApplication3. 运行 Spring 应用程序3.1 创建应用上下文3.2 刷新应用上下文3.2.1 解析配置文件、生成所有的 beanDefinitions3.2.1.1 什么是BeanDefinition?3.2.1.2 invokeBeanFactoryPostProcessors 解读a. BeanFactoryPostProcessor扩展3.2.1.2.1 ConfigurationClassPostProcessor原创 2022-04-08 20:04:37 · 2269 阅读 · 0 评论 -
前端编译与优化
前端编译与优化1. 概述2. Javac 编译器2.1 Javac的源码与调试2.1.1 下载导入 javac 源码2.1.2 找到 javac 主函数入口2.2 解析与填充符号表2.2.1 词法、语法分析2.2.2 填充符号表2.2.3 注解处理器2.2.4 语义分析与字节码生成1.标注检查2. 数据及控制流分析3. 解语法糖4. 字节码生成3. Java语法糖的味道3.1 泛型1. Java 与 C# 的泛型2. 泛型的历史背景3. 类型擦除4. 值类型与未来的泛型3.2 自动装箱、拆箱与遍历循环3.3原创 2021-05-30 19:53:25 · 357 阅读 · 0 评论 -
Redis 详解
Redis 详解1. 什么是 Redis2. Redis 基本使用3. Redis 数据结构2.1 String2.2 List2.3 Hash(字典)2.4 Set(集合)2.5 zset(有序集合)4. Redis 持久化5. Redis 集群6. Redis 经典运用6.1 分布式锁1. 什么是 Redis Redis 是一个基于内存的高性能 key-value 数据库。是完全开源免费的,用C语言编写的,遵守BSD协议。 Redis 特定:Redis 是基于内存操作的,吞吐量非常高,可以原创 2021-04-12 00:46:31 · 11228 阅读 · 1 评论 -
ElasticSearch 详解
ElasticSearch 详解1. ES 简介2. ES 集群2.1 节点 node2.2 分片和复制 shards&replicas3. 数据插入查询3.1 数据插入的过程3.2 数据查询流程1. ES 简介 Elasticsearch 是一个基于 Lucene 实现的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elast原创 2021-04-11 13:18:54 · 2453 阅读 · 0 评论 -
HashMap 底层原理探究
HashMap 底层原理探究1. Hash 表的实现2. HashMap 的实现2.1 数据结构2.2 存取机制2.2.1 初始化tableSizeFor 方法解析2.2.2 put 元素为什么要重写 hashCode()为什么要执行 h ^ (h >>> 16) ?为什么 length 长度要是 2的幂次方putVal 方法详解2.2.3 resize 方法详解(e.hash & oldCap) 算法2.2.4 get 元素前言: hashMap 是一个 key——valu原创 2021-04-08 22:51:48 · 242 阅读 · 1 评论 -
sentinel 简单使用
sentinel1. springboot 整合 Sentinel1.1 sentinel-dashboard 安装1.2 客户端配置1.3 编写测试用例1.4 @SentinelResource各项属性简介1.5 持久化限流配置2. sentinel 源码学习前言:在学习该框架之前,我们先来了解一些问题。问题一:百万级并发请求,服务器真的会宕机吗? 答:对于服务端来说,当请求量达到了 tomcat 设置的最大连接数,请求任务会加入任务队列中等待被执行,但如果任务队列也满了,则会直接拒绝其它请求。原创 2021-04-06 22:12:02 · 1816 阅读 · 0 评论 -
SpringBoot 自动装配
简介:对于经常使用SpringBoot的程序员来说,SpringBoot大大简化了开发的工作量,节省了大量的配置工作,在SpringBoot启动的时候就自动将相关的配置给封装好了,也就是自动装配功能自动装配做了什么? 通常搭建一个基于spring的web应用,我们需要做以下工作:1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-java 等等相关jar …2、配置web.xml,Listener配置、原创 2021-03-19 21:25:07 · 269 阅读 · 0 评论 -
快速创建一个SpringBoot项目
快速创建一个SpringBoot项目1、idea创建maven项目 整体架构如下图所示2、引入相关依赖3、编写类 编写controller、service、dao、entity、mapper的xml文件夹如下 编写启动类ApplicationContext、以及application.yml配置文件 它们的注解、配置具体如下: 接下来,编写controller、server、mapper、xml文件。如下:emsp; UserController类:@Rest原创 2021-03-17 19:26:57 · 141 阅读 · 0 评论 -
Java锁机制
Java锁1. 线程安全2. 线程安全的实现方法2.1 互斥同步 (synchronized、ReentrantLock)2.2 非阻塞同步 (CAS)3. 锁优化3.1 自旋锁与自适应自旋3.2 锁消除3.3 锁粗化3.4 轻量级锁3.4.1 锁膨胀3.5 偏向锁4. ReentrantLock锁工作原理流程图5. ReentrantLock和synchronized性能测试对比1. 线程安全 “线程安全”这个名称,相信稍有经验的程序员都听说过,甚至在代码编写和走查的时候可能还会经常挂在嘴边,但是如原创 2021-03-14 21:40:19 · 367 阅读 · 0 评论 -
Java与线程
Java与线程1. 线程的实现1.1 内核线程实现1.2 用户线程实现1.3 混合实现2. Java线程的实现3. java线程调度4. 线程状态转换5. Java与协程5.1 内核线程的局限5.2 协程的复苏5.3 golang 协程5.3.1 实际工作中的我们5.3.2 golang 协程1. 线程的实现 主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理,每个已经调用过start()方法且还未结束的java.lang.Thread类的实例就代原创 2021-03-11 22:49:11 · 231 阅读 · 3 评论 -
Java内存模型
Java内存模型1. CPU和缓存一致性2. Java内存模型2.1 主内存与工作内存2.2 内存间交互操作2.3 volatile型变量的特殊规则2.3.1 第一项是保证此变量对所有线程的**可见性**2.3.2 使用volatile变量的第二个语义是禁止指令重排序优化2.3.3 针对long和double型变量的特殊规则2.3.4 原子性、可见性与有序性1. 原子性(Atomicity)2. 可见性 (Visibility)3. 有序性(Ordering)2.3.5 先行发生原则1. CPU和缓存一致原创 2021-03-09 20:43:46 · 149 阅读 · 0 评论 -
第三章 垃圾收集器与内存分配策略
第三章 垃圾收集器与内存分配策略前言:3.1 概述3.2 对象已死?3.2.1 引用计数算法3.2.2 可达性分析算法3.2.3 再谈引用,四种引用类型3.2.4 生存还是死亡3.3 垃圾收集算法3.3.1 分代收集理论3.3.2 标记-清除算法3.3.3 标记-复制算法3.3.4 标记-整理算法3.4 HotSpot的算法细节实现3.4.1 Stop The World3.4.2 OopMap3.4.3 安全点3.4.4 安全区域3.4.5 记忆集3.4.6 写屏障3.4.7 并发的可达性分析3.5 经典原创 2021-03-07 22:27:34 · 136 阅读 · 0 评论 -
lucene查询原理
lucene查询原理1. lucene 数据模型2. lucene 查询过程3. SkipList哨兵数组skipDocdocDeltaBufferLucene中使用读取跳表SkipList的过程读取跳表SKipList文档号:23文档号:7004. 倒排合并lucene是一个基于java的全文信息检索工具包,目前主流的搜索系统Elasticsearch和solr都是基于lucene检索功能实现的。想要理解搜索系统的实现原理,就需要深入lucene这一层,看看lucene是如何存储需要检索的数据,以及如何原创 2021-03-06 12:52:20 · 1472 阅读 · 0 评论 -
原码、反码、补码
原码、反码、补码1. 原码、反码、补码2. 异或运算3. 位移运算1. 原码、反码、补码以int a = 128 和 int b = -128为例。int在jvm内存中占用四字节,总共32位,最高位是正、负号标识符正数:int a = 128原码:0000 0000 0000 0000 0000 0000 1000 0000反码:0000 0000 0000 0000 0000 0000 1000 0000补码:0000 0000 0000 0000 0000 0000 100原创 2021-03-06 10:08:19 · 902 阅读 · 0 评论 -
Java IO流
IO流中字符编码常用的编码ASCII: ASCII码是7位编码,ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。专门给英语国家设计的编码。GB2312:中文字符集,只收录了6763个常用汉字,字符集中除常用简体汉字字符外还包括希腊字母、日文等字符,未收录繁体中文汉字和一些生僻字。GBK:GBK编码是GB2312编码的超集,共收录了21003个汉字,向下完全兼容GB2312。Unicode:又称万国码,顾名思义,unicode中收录了世界各国语言,用以解决传统编码的局限性。它为每种语言中原创 2020-07-14 21:36:40 · 105 阅读 · 0 评论 -
拦截器获取请求参数
这里不管是post提交还是get提交,参数不管放在url还是form-data、还是以json的形式放在请求体,都能正常获取到且不影响controller使用。这里以获取参数name为例子过滤器public void JustTest(){Integer a = 12;User user = new User(12);}...原创 2020-04-03 23:53:40 · 7047 阅读 · 0 评论