摘要: 分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 两阶段提交方案/XA方案 所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据 阅读全文
posted @ 2023-03-19 21:46 残城碎梦 阅读(23) 评论(0) 推荐(0) 编辑
摘要: Spring Boot目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 在过去,我们要让一个Spring项目启动,往往需要配置很多的xml配置文件,但是在使用SpringBoot之后,我们甚至无需写一行xml,就可以直接 阅读全文
posted @ 2023-03-19 21:25 残城碎梦 阅读(26) 评论(0) 推荐(0) 编辑
摘要: controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。 如何保证并发的安全? 不要在controller中定义成员变量。 万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式。 在Con 阅读全文
posted @ 2023-03-19 21:04 残城碎梦 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 引用拷贝 创建一个指向对象的引用变量的拷贝。 对象拷贝 创建对象本身的一个副本。 注:深拷贝和浅拷贝都是对象拷贝 浅拷贝 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。即对象的浅拷贝会对“主”对象进行拷贝,但不会复制主对象里面的对象。”里面的对象“会在原 阅读全文
posted @ 2023-03-19 21:02 残城碎梦 阅读(18) 评论(0) 推荐(0) 编辑
摘要: MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。 重做日志(redo log) 阅读全文
posted @ 2023-03-19 18:25 残城碎梦 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 事务的四大特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离型(Isolation)以及持久性(Durability)。 事务想要做到什么效果?无非是要做到可靠性以及并发处理: 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候 阅读全文
posted @ 2023-03-19 18:22 残城碎梦 阅读(51) 评论(0) 推荐(0) 编辑
摘要: ZooKeeper是一个开放源码的分布式应用程序协调服务,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ZooKeeper设计目的 最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。 可靠性:具有简单、健壮、良好的性能,如 阅读全文
posted @ 2023-03-19 17:47 残城碎梦 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 阻塞队列的处理方法 阻塞队列实现了 BlockingQueue 接口,并且有多组处理方法。 抛出异常 add方式是往队列里面添加元素,如果队列满了,会抛出异常 remove方法是删除元素,如果队列里面的不够删除了则抛出异常 element 方法是返回队列的头部节点,但是并不删除。如果用这个方法去操作 阅读全文
posted @ 2023-03-19 15:29 残城碎梦 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 减少上下文切换的方法有无锁并发编程、CAS算法、使用最少线程和使用协程。 无锁并发编程。多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以使用一些方法来避免使用锁。如将数据的ID按照Hash算法取模分段,不同的线程处理不同段的数据。 CAS算法。Java的Atomic包使用CAS算法来更新 阅读全文
posted @ 2023-03-19 15:12 残城碎梦 阅读(28) 评论(0) 推荐(0) 编辑
摘要: java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。 同步方法 有synchronized关键字修饰的方法。 同步代码块 有s 阅读全文
posted @ 2023-03-19 15:11 残城碎梦 阅读(35) 评论(0) 推荐(0) 编辑
摘要: Lock 是一个接口,而 synchronized 是 Java 中的关键字,synchronized 是内置的语言实现; synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而 Lock 在发生异常时,如果没有主动通过 unLock() 去释放锁,则很可能造成 阅读全文
posted @ 2023-03-19 15:04 残城碎梦 阅读(12) 评论(0) 推荐(0) 编辑
摘要: CyclicBarrier允许一组线程互相等待,直到到达某个公共屏障点 (Common Barrier Point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 Barrier 在释放等待线程后可以重用,所以称它为循环 ( Cycl 阅读全文
posted @ 2023-03-19 15:03 残城碎梦 阅读(37) 评论(0) 推荐(0) 编辑
摘要: ConcurrentHashMap 的实现方式和 Hashtable 不同,不采用独占锁的形式,更高效,其中在JDK1.7 和 JDK1.8 中实现的方式也略有不同。 JDK1.7 中采用分段锁和 HashEntry 使锁更加细化。ConcurrentHashMap 采用了分段锁技术,其中 Segm 阅读全文
posted @ 2023-03-19 15:01 残城碎梦 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 什么是CAS CAS 是compareand swap 的缩写, 即我们所说的比较交换。 CAS 是一种基于锁的操作, 而且是乐观锁。在java 中锁分为乐观锁和悲观锁。悲观锁是将资源锁住,等一个之前获得锁的线程释放锁之后, 下一个线程才可以访问。而乐观锁采取了一种宽泛的态度,通过某种方式不加锁来处 阅读全文
posted @ 2023-03-19 14:58 残城碎梦 阅读(32) 评论(0) 推荐(0) 编辑
摘要: AQS 是构建锁或者其他同步组件的基础框架(如 ReentrantLock、ReentrantReadWriteLock、Semaphore 等), 包含了实现同步器的细节(获取同步状态、FIFO 同步队列)。AQS 的主要使用方式是继承,子类通过继承同步器,并实现它的抽象方法来管理同步状态。 维护 阅读全文
posted @ 2023-03-19 14:55 残城碎梦 阅读(16) 评论(0) 推荐(0) 编辑
摘要: 服务熔断 当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。 服务降级 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个 阅读全文
posted @ 2023-03-19 14:52 残城碎梦 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。 单体架构存在的不足 在小型应用的初期,访问量小的时候这种架构的性价比还是比较高的,开发速度快,成本低,但是随着业务的发展,逻辑越来越复杂,代码量越来越大,代码得可读性和可维护性越 阅读全文
posted @ 2023-03-19 14:40 残城碎梦 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 应对大流量的一些思路 缓存:数据尽早进入缓存,离程序近一点,不要大量频繁的访问DB 降级:如果不是核心链路,那么就把这个服务降级掉。 限流:在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统的吞吐量。 有些时候,缓存和降级是解决不了问题的,比如,电商的双十一,用户的购买,下单等 阅读全文
posted @ 2023-03-19 13:53 残城碎梦 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 在JVM的新生代内存中,为什么除了Eden区,还要设置两个Survivor区? 为什么要有Survivor区 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做 阅读全文
posted @ 2023-03-19 13:52 残城碎梦 阅读(57) 评论(0) 推荐(0) 编辑
摘要: TCP协议特点 当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得 阅读全文
posted @ 2023-03-19 13:29 残城碎梦 阅读(33) 评论(0) 推荐(0) 编辑