- 博客(11)
- 资源 (1)
- 收藏
- 关注
原创 引入消息中间件有什么优缺点
首先:引入消息中间件比较常见的场景如下:1.复杂系统之间的解耦2.复杂链路的异步调用3.瞬时高峰的削峰处理缺点:1.系统的可用性降低:首先,引入消息的异步化手段确实解决了一个核心链路执行性能差的问题,但随之而来的是另一个问题,万一你依赖的那个消息中间件宕机了怎么办?所以你就必须去考虑这个MQ是如何部署的,如何保证高可用性。甚至在复杂的高可用的场景下,你还要考虑如果MQ一旦挂了以后,你的系统有没有备用兜底的技术方案,可以保证系统继续运行下去。2.系统稳定性降低:消息重复、消息丢失:消息高可靠
2021-09-07 15:17:48 242
原创 谈谈AQS加锁、释放锁、等待队列
1.ReentrantLock和AQS的关系ReentrantLock lock = new ReentrantLock();lock.lock;lock.unlock;上面这段代码不难理解,无非就是搞一个Lock对象,然后进行加锁、释放锁的操作。疑问:那这个和AQS有什么关系呢?解释:关系大了去了,因为Java并发包下很多API都是基于AQS来实现加锁和释放锁的功能的,AQS是Java并发包的基础类。ReentrantLock、ReentrantReadWriteLock底层都是基于AQS
2021-09-07 10:59:30 427
原创 Java并发面试问题之Java 8如何优化CAS性能
java并发包下的CAS相关的原子操作,以及Java 8如何改进和优化CAS操作的性能。因为Atomic系列的原子类,无论在并发编程、JDK源码、还是各种开源项目中,都经常用到。而且在Java并发面试中,这一块也属于比较高频的考点,所以还是值得给大家聊一聊。问题:假设多个线程需要对一个变量不停的累加1,怎么办,有什么问题?《并发问题》1.初步解决方案:synchronized让他通过加锁的方式变成线程安全的:private int data = 0 ;public synchronized v
2021-09-07 10:37:28 187
原创 数据库设计
面试官:现在你的系统压力其实不大,每天20万新增数据量也不大,每年哪怕单表新增千万级数据其实也还算可以接受。第一个问题:如果假设你的系统承载的业务量翻了10倍,每天新增200万数据,你的系统架构要如何演进?如果你的系统承载的业务量翻了100倍,每天新增2000万数据,你的系统架构要如何演进?意识:大家可以思考一下,如果10倍增长,单表每年新增近亿数据,还能用单库单表的方式来承载吗?肯定不行了,所以必然针对10倍增长的场景,需要引入分库分表的技术,保证每个库每个表分散一定的数据量,避免单表单库数据
2021-09-06 17:00:34 120
原创 微服务与分布式单体
一、分布式单体为什么不好?先思考一个问题:从单体改造到微服务的时候,你们是不是按这样的步骤来的?确定业务领域,拆分存储,定义各微服务的边界改造代码逻辑,将原来的内部service调用改成dubbo或feign这样的远程调用通过这样的改造,我们得到了很多好处,比如:代码库分开了,减少了麻烦的解决代码冲突的困扰CI/CD分开了,每个拆分后的服务都可以独立开发、部署、运行数据库分开了,独立运行,不同业务模块不会互相影响这样一顿操作,我们把一个臃肿的单体应用变成了多个精炼的分布式应用,似乎完美的实现
2021-07-13 17:31:45 182
原创 kaptcha制作验证码的方法
com.github.axet.kaptcha制作验证码的方法导入jar包com.github.axet生成法①导包 <!-- 验证码 --> <dependency> <groupId>com.github.axet</groupId> <artifactId>kaptcha</artifactId> <version>0.0.9</version> </dependen
2021-01-28 14:41:07 1104 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人