- 博客(60)
- 收藏
- 关注
原创 rabbitmq的路由策略
Header:这种类型的交换机不依赖于路由键匹配规则来路由信息,而是根据发送消息携带的headers属性进行匹配,在绑定队列和交换器是指定一组键值对.当发送的消息到交换机时,RabbitMQ会获取到消息中的headers信息,对比叫交换机中的键值对信息是否匹配,如果匹配,消息就会保存到该队列中,headers类型的交换机性能很差,不建议使用.例如:bindingKey = *order,可以接受的Routing Key:firstOrder,ExtenelOrder等。
2023-12-05 13:07:28
282
原创 jvm-垃圾收集器
serialserial oldParNew CMSparallel scavanbeparallel oldg1串行收集器是最基本、发展时间最长、久经考验的垃圾收集器,也是client模式下的默认收集器配置。串行收集器采用单线程stop-the-world的方式进行收集。当内存不足时,串行GC设置停顿标识,待所有线程都进入安全点(Safepoint)时,应用线程暂停,串行GC开始工作,采用单线程方式回收空间并整理内存。单线程也意味着复杂度更低、占用内存更少,但同时也意味着不能有效利用多核优势。
2023-12-01 15:14:04
43
原创 redisson分布式锁
java里面的锁机制针对的是同一个jvm进程进行共享资源的共享加锁,但在分布式系统中,一般一个服务都会部署多个节点,这种情况下就需要有单独的中间件来承担多节点间加锁的责任。
2023-12-01 15:09:12
342
原创 jvm 调优参数
XX:CMSInitiatingOccupancyFraction=92 指定CMS GC开始执行的内存占用比例(堆内存达到92%时执行fullgc)-XX:OnOutOfMemoryError=./dump.sh 指定应用程序堆内存溢出时特定处理脚本,一般用来发生溢出时优雅的重启服务。应用启动会变慢,但是运行时变快。-XX:InitialRAMPercentage=60.0 指定JVM初始堆内存使用比例为60%;-XX:MaxRAMPercentage=60.0 指定JVM最大堆内存使用比例为60%;
2023-11-29 18:24:47
1126
原创 mysql binlog
对于批量插入的数据,是以一条一条的insert语句保存,所以ROW模式的binlog文件会很大。如果在启用binlog之前数据库已经存在数据,那么需要用mysqldump命令先把已经存在的数据进行备份并迁移到从库,这样基于binlog的主从复制才能保证是全量的。binlog是server层共有的,是记录的数据更新历史,主要用来做主从同步和数据的实时备份。binlog的备份不是全量备份,binlog保存的只是从binlog开启之时的增量数据。binlog的常见操作。什么是 binlog。
2023-11-16 17:51:28
236
原创 mysql核心知识整理
聚簇索引与非聚簇索引覆盖索引索引下推最左原则索引结构 b树、b+树、跳表回表日志binlog、redolog、undologmvcc锁查询优化。
2023-11-14 22:10:00
1515
原创 SpringBoot源码透彻解析—自动装配
bean工厂后置处理器(ConfigurationClassPostProcessor) 扫描spring.factories和spring-autoconfigure-metadata.properties两个文件,将文件中的自动装配类信息抽象成ConfigurationClass对象,然后将这些对象注册到BeanDefinition以供后续的实例化。,包括自动装配的配置类和启动类配置类的相关注解。
2023-11-01 22:28:13
150
原创 SpringBoot源码透彻解析—bean生命周期
② @PostConstruct方法的调用是:CommonAnnotationBeanPostProcessor.postProcessBeforeInitialization)探测都是同一个方法,但是,@Resource属性的填充是CommonAnnotationBeanPostProcessor.postProcessProperties。InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(自定义一个对象或者代理对象)
2023-11-01 21:44:21
140
原创 springboot源码阅读需要提前了解的知识点
注意2:@ConditionOnClass(XXX.class)用在类上安全(判断时是加载的class原文件进行ASM技术解析文件)而用在方法上是不安全的,如果不存在类会报错 sun.reflect.annotation.TypeNotPresentExceptionProxy,所以这个注解只放在类上或者放在方法上用name属性@ConditionOnClass(name=“org.example.user”);例子:吃面时候,筷子、碗这样的东西都是必须的,不过这些一般是店家给顾客备好,不需要顾客自带。
2023-11-01 21:31:30
191
原创 spring的aop动态代理对象注入时机
它定义了一个匿名内部类,通过getEarlyBeanReference方法获取代理对象,其实底层是通过AbstractAutoProxyCreator类的getEarlyBeanReference()生成代理对象。不行,因为假如你想对添加到三级缓存中的实例对象进行增强,直接用实例对象是行不通的。为什么三级缓存不直接存Objecg(而是存的ObjectFactory):为了支持注入代理对象。为什么需要二级缓存:为了防止 A依赖B、C,B依赖A,C依赖A这种情况,重复获取。
2023-08-12 12:02:28
599
原创 markdown命令模板
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-900TBTXk-1691812257911)(C:\Users\37650\Desktop\Idea快捷键.png)]
2023-08-12 11:51:54
174
原创 前端跨域问题解决方法
跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。使用 nginx进行转发,要求前端与nginx部署在同一服务器。通过前后端定义一个共同标识返回,来进行允许资源访问。
2023-08-12 11:45:40
536
原创 sqlsessionfactory和sqlsession是否线程安全?
sqlsession单独来看是线程不安全的,但是我们用mybatis时,mapper接口的使用是基于动态代理,这里有两种情况:(事务@transaction)sqlsessionfactory是线程安全的,默认的实现类只有一个final属性。判断是否线程安全的规则:是否存在多线程间可共享的变量。
2023-08-12 11:39:07
508
原创 mysql深度分页
limit 100000,10: 分页的执行(只讨论二级索引命中的情况):先到二级索引查找符合条件的id 10000010行,然后对这所有数据一条一条进行一级索引回表操作过滤剩下的where条件(这样优化后,就不会产生回表,直接两部:1,二级索引找id;
2023-08-12 11:36:19
91
原创 <optional>true</optional> 依赖不传递
为什么不包含依赖的@ConditionOnClass 能成功导入?这里涉及到依赖传递的问题。
2023-08-11 11:17:32
50
原创 第九章 SpringBoot 自动配置原理 入门
自动配置包 , 指定了默认的包规则(扫描启动类包下的组件)@Configuration。代表当前是一个配置类。指定扫描哪些,Spring注解;
2023-08-11 11:16:45
558
原创 第七章 SpringBoot 原生配置文件导入 @ImportResource
【代码】第七章 SpringBoot 原生配置文件导入 @ImportResource。
2023-08-11 11:15:36
38
原创 Go Context包之cancelCtx实现
涉及的两个重要基础知识点: 1. 关闭的channel里面读取数据默认永远有个零值兜底 2. select里面加上default就不会阻塞cancelCtx实现:package realizeimport "sync"//必备知识://从开启的channel读数据会阻塞,但从关闭的channel里面读取数据,依然可以接受到之前已经成功发送的数据;如果channel中已经没有数据的话将产生一个零值的数据,这个零值在关闭的channel里面是无限的,可以一直读到//实现...
2020-08-16 13:57:39
957
原创 容量换算和地址总线
// 1G = 1024 MB// 1MB = 1024 KB// 1KB = 1024 B// 1Byte = 8bit// 1G = 2^30 B(2^10 M = 2^10 * 2 *10 KB = 2^10 * 2^10 * 2^10 B)// 4G = 2^32 B// 16 = 4个二进制位 = 0.5字节// 4个字节 = 1个16进制位// 16位地址总线 :4位(16进制),表示的地址范围就是16个二进制位也就是 4个16地址位,所以16位地址总线 = 4 位16地址.
2020-08-14 10:47:13
1300
原创 Go 接口引用兼容传值(接口指针兼容值)
////go接口传引用兼容传值(常见于框架实现)////////当一个结构实现接口时,只有值实现时,使用值和指针都可以//当一个结构实现接口时,既有指针实现,也有值实现时,使用值传递会报错//当一个结构实现接口时,既有指针实现,也有值实现时,使用指针传递实现package mainimport ( "fmt" "reflect")func main() { st := newStudent("zhangsan", 18) //testI(st) //报错 Cannot us.
2020-08-14 10:41:48
364
原创 redis
使用场景:1.缓存系统,减轻主数据库(MySQL)的压力。2.计数场景,比如微博、抖音中的关注数和粉丝数。3.热门排行榜,需要排序的场景特别适合使用ZSET。4.利用LIST可以实现队列的功能。
2020-08-11 15:58:45
112
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人