自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ReentrantLock源码分析

for (;;) { Node h = head; if (h != null && h != tail) { int ws = h.waitStatus; if (ws == Node.SIGNAL) { if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0))

2021-03-05 15:23:51 442 1

原创 RabbitMQ(二)可靠性

RabbitMQRabbitMQ集群RabbitMQ有两种集群模式:普通集群模式和镜像队列模式普通集群模式不同节点之间只同步元数据,队列数据不同步元数据(包括队列名字属性、交换机的类型名字属性、绑定、vhost)节点之间通过转发获取数据,无数据的节点起到路由作用缺点:队列内的内容不复制,节点失效将导致队列不可用节点类型:分为内存节点(用于读写)和磁盘节点(用于备份)镜像集群该模式小,消息内容会在镜像之间同步,系统性能下降,同步代价比较高镜像同步后,每个节点数据一

2021-03-13 16:55:35 169

原创 RabbitMQ(一)工作模型

RabbitMQErlang语言编写的mq对比java里面队列的实现:不能在分布式环境下使用没有持久化机制mq作用异步解耦:业务不受下游服务影响削峰带来的问题:可用性降低:增加一个运行服务,调用mq有失败的风险复杂度变高:代码复杂度,以及需要考虑消息丢失、重复等数据一致性问题基本特性可靠性:持久化、应答、发布确认、高可用灵活的路由:通过交换机实现路由支持多客户端:多语言支持集群和扩展高可用队列:镜像队列实现复制权限管理:用户管理页面权限控制插件系统:插

2021-03-11 15:28:38 190

原创 并发编程(三)线程安全性

目录Volatile什么是可见性?硬件层面JMM的内存模型层面Happens-Before规则常见问题:MESI协议实现可见性和有序性:共享资源是否有多个线程同时访问希望结果跟预期的一致Volatile作用:保证共享资源的可见性如何保证可见性(hsdis工具)?通过反编译可以看到多了一个汇编Lock指令,相当于下面说的内存屏障的功能什么是可见性?硬件层面cpu的高速缓存:分为L1(指令缓存)、L2(数据缓存)、L3 -->性能逐步下降为了最大化利用cpu资源:优化了

2021-03-09 17:59:44 135

原创 并发编程(二)Synchronized锁

文章目录基本使用存储方式锁升级的过程偏向锁轻量级锁重量级锁(Mutex)锁重入锁消除锁粗化wait、notify、notifyall基本使用修饰实例方法:锁的对象为当前实例 syn void修饰静态方法:锁的对象为这个类 syn static void修饰代码块:看锁对象还是实例 syn(a.class)、syn(this)注:不能用String常量、Integer、Long类型:因为Java自动封箱和解箱操作的原因存储方式对象头加锁前后面后:参考工具:Java Object L

2021-02-27 10:17:56 402 1

原创 springboot集成actuator安全问题

springboot集成actuator安全问题记录一次springboot使用actuator作为监控的安全问题:服务器突然出现大量报错,如mybatis报错,sql检查没问题。观察同一时间的请求日志,发现多个如下请求:/actuator/env请求可以修改环境变量参数,包括linux操作系统命令存在问题springboot actuator提供了很多暴露接口用于开发人员获取对应的监控信息,如info、mappings等,当然也有一些接口可能导致环境变量被修改如果

2021-02-26 10:54:46 798

原创 并发编程(一)多线程使用

文章目录线程的使用线程的生命周期线程的启动线程的终止线程的使用Runnable接口Thread类Callable/Future线程池:JUC下的Executors合理利用cpu资源,提高吞吐量:并行运行线程的数量=cpu的内核数线程的生命周期BLOCKED和WAITING状态的区别:BLOCKED是锁阻塞线程的启动Thread的start方法,实际上是调用native的start0方法。start0执行JVM_StartThread(jvm.cpp)方法,底层到os::

2021-02-25 18:01:46 84

原创 mybatis篇(三):mybatis整合扩展

文章目录mybatis涉及到的设计模式PageHelper插件原理如何实现自定义插件整合springSqlSessionFactoryBean源码分析SqlSessionTemplate源码分析basedao的基本原理mybatis涉及到的设计模式装饰器模式Cache->PerpetualCache->LruCacheExecutor->SimpleExecutor->CacheExecutor工厂方法模式SqlSessionFactoryMapper

2020-06-30 10:40:50 839

原创 mybatis篇(二):mybatis主流程源码解析

文章目录mybatismybatis的基本使用SqlSessionFactory创建源码分析SqlSession构建源码分析getMapper源码分析mapper执行方法过程源码分析mybatis源码分析大部分说明直接注释在代码当中mybatis的基本使用SqlSessionFactory创建源码分析时序图:首先几个关键注册点:存储sql语句和statementId的对象org.apache.ibatis.session.Configuration#addMappedStateme

2020-06-28 22:21:48 374

原创 mybatis篇(一):mybatis体系机制

文章目录mybatis原生mybatismybatis体系结构mybatis缓存参考地址:mybatis原生mybatis先简单介绍下原生jdbc执行逻辑:注册驱动,获取connection连接创建statement(用于操作数据库)statement.execute执行sql转换结果集(resultSet),关闭资源缺点:只能顺序传参缺少统一查询的封装(平时用的basedao)缓存sql硬编码ORM框架对比:hibernate:自定义sql灵活性低无法支持动态sq

2020-06-28 18:56:14 421

原创 redis篇(四):redis实践问题

文章目录redisredis性能redis三大问题缓存穿透缓存雪崩缓存击穿redis应用发布订阅模式redis事务Lua脚本分布式锁redis数据加速数据一致性问题热点key监控redis客户端redis优化策略redisredis性能redis的速度有多快每秒钟处理5万次左右的set请求QPS可达到10万左右redis性能高的原因:内存操作单线程:减少创建销毁线程的消耗,避免上下文切换的损耗,避免锁竞争多路复用:处理多个网络请求用一个redis处理线程redis基于Reactor模

2020-06-21 10:51:35 271

原创 redis篇(三):redis高可用机制

文章目录redis高可用方案主从复制(replication)哨兵机制(sentinel)分布式架构方案redis分片思路redis cluster:服务端分片策略redis高可用方案主从复制(replication)从节点无法写入数据,只能读取数据配置主从方式:从节点配置文件中添加slave of ip:port实现原理:从节点设置了主节点后,通过replication.c#replicationCron方法与master节点建立socket连接,每隔1秒执行一次。连接成功后从节点会创建一

2020-06-20 14:41:30 439

原创 redis篇(二):redis内部原理机制

redis篇(二):redis内部原理机制redis内存回收过期策略淘汰策略持久化机制RDBAOFredis内存回收过期策略定时过期通过redis的expire设置过期时间,每个key都需要创建一个定时器,到期删除,对内存友好。但是会占用大量cpu处理过期数据,影响缓存的响应时间和吞吐量惰性删除访问key时判断是否过期需要清除,节省cpu资源,对内存不友好。大量过期key未被访问导致不释放获取数据时候的expireIfNeed方法以及写入key发现内存不足调用activeExpire

2020-06-19 17:04:17 308

原创 redis篇(一):redis基本数据结构

redis篇(一):redis基本数据结构redis基本数据结构StringHashListSetZsetBitmapsHyperloglogsStreamsredis后续源码文件名称统一通过()表示,redis底层是C语言,因此.h、.c文件可认为是源码文件源码版本 redis-6.0.5redis全称:REmote DIctionary Service 译为远程字典服务每个KV键值对都存储在dictEntry(dict.h)里面,redis底层是哈希表(hashTable),结构体现在

2020-06-18 19:34:05 344

原创 总结回顾JVM

目录引言JVM的作用类加载机制类加载器层级关系类加载顺序:自上而下运行时数据区JVM内存模型垃圾回收机制判断对象是否GC垃圾回收机制垃圾回收算法垃圾回收器GC日志GC对象JDK自带的监控工具JVM参数:引言该文章为自我复习,之后会出详细的模块化文章JVM的作用翻译:把java代码翻译成机器可识别的010101串内存管理:相比C++需要申请内存和释放内存操作,java封装好了,只需要ne...

2020-02-09 23:29:18 197

原创 一文回顾mysql

目录mysql存储引擎(本文主要介绍innodb)主要5种类型磁盘存储索引mysql存储引擎(本文主要介绍innodb)主要5种类型csv存储引擎:1.无索引,无自增列2.在csv文件中编排,数据安全性低3.应用场景:数据的快速导出和导入Archive存储引擎:1.压缩数据为arz文件格式2.只支持insert和select,只能在自增id建索引,不支持事务,占用磁盘少3.应...

2019-10-29 14:23:36 183

原创 一文读懂kafka

目录应用场景主要组件配置分析各流程分析生产者->broker消费者->broker(通知已消费)broker->消费者(消费者消费消息)确定CoordinatorJoinGroup过程(新消费者加入或宕机)分区副本(replica)机制副本同步原理副本选举过程消息的存储kafka如何保证消息可靠性应用场景kafka具有高吞吐量(分区机制),高容错率(解决并发消费问题)、高可靠...

2019-10-23 20:49:55 685

原创 jdk动态代理和cglib动态代理的区别及分析

代理的作用:提供代理加强对一个对象的访问jdk动态代理的实现原理:拿到被代理类的引用,并获取所有接口信息(反射获取) jdk proxy.newInstance生成新的类,实现接口方法 动态生成java代码,增强逻辑代码也写入 编译java代码生成class文件 加载并运行新的classjdk动态代理调用过程:生成代理对象的编译文件$proxy0.class 加载到内存当中...

2019-07-04 19:27:36 1741

原创 java线程池源码分析

java线程池原理分析线程池运行流程线程池的创建通过ThreadPoolExecutor构造函数创建通过Executors工具类创建线程源码分析线程池该文章主要介绍线程池相关内容运行流程往线程池中提交任务的流程如上图所示:线程池的主要作用便是线程的复用:那么线程池是如何实现线程的复用呢线程池将每个任务的runable方法放到worker对象当中。然后启动worker线程的start方...

2019-05-15 18:49:02 318

原创 java多线程通信细节 看一次就够了

java多线程之间通信的几种方式: Thread提供的suspend()和resume()方法(已弃用-了解一下): 提供挂起线程的功能,但是由于挂起不释放锁。在对象锁的执行代码块内容易造成死锁。suspend必须先于resume执行,否则也会造成死锁。 Object类提供的wait()/notify()/notifyAll()方法: 只能在对象锁持有者线程内调用(同步控制...

2019-05-09 15:07:37 324

原创 java多线程的一个小坑(重排序问题)

今日在测试volatile与synchronized特性的时候遇到的一个坑: 先上示例代码:图1和图2代码本质上的区别是 新线程的i=i+1操作下多了println操作。本质上的流程来说。讲status设置为false后应该打印i++多次后的结果。但是由于新线程status一开始是保存在工作内存中。没有同步主内存中的status。因此while循环会一直执行。因此图1...

2019-04-26 13:31:35 508

原创 java读取mysql数据库表及栏目信息

用途:用于获取指定数据库中表以及栏目的各项信息(包括字段名、注释、类型、是否为空等)该类用于存储数据库信息(用户名、密码等)该类用于存储栏目的各项信息,按需拓展。获取数据库连接public static Connection getConnection(CfsDatabase cfsDatabase) { Connection conn = null; tr...

2019-04-02 14:40:54 3679

原创 数据结构可视化工具usfca

工具地址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html使用方法:点击链接进入可视化工具导航页面:该页面提供的大部分平时所用到的数据结构:点击B+树即可模拟B+树的动态插入过程,非常有利于理解...

2019-03-07 16:40:03 11594 6

空空如也

空空如也

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

TA关注的人

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