摘要: (一)分布式一致性 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的 CRUD 等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 为了解决这种分布式一致性问题,前人在性能和数据一致性的反反复复 阅读全文
posted @ 2020-11-26 09:12 乘风破浪的小子 阅读(101) 评论(0) 推荐(0) 编辑
摘要: 使用场景 首先,我们看这样一个场景:客户下单的时候,我们调用库存中心进行减库存,那我们一般的操作都是: update store set num = $num where id = $id 这种通过设置库存的修改方式,我们知道在并发量高的时候会存在数据库的丢失更新,比如 a, b 当前两个事务,查询 阅读全文
posted @ 2020-11-26 09:11 乘风破浪的小子 阅读(998) 评论(0) 推荐(0) 编辑
摘要: (一)谈谈业务中使用分布式的场景 首先,需要了解系统为什么使用分布式。 随着互联网的发展,传统单工程项目的很多性能瓶颈越发凸显,性能瓶颈可以有几个方面: 应用服务层:随着用户量的增加,并发量增加,单项目难以承受如此大的并发请求导致的性能瓶颈。 底层数据库层:随着业务的发展,数据库压力越来越大,导致的 阅读全文
posted @ 2020-11-26 09:09 乘风破浪的小子 阅读(1586) 评论(0) 推荐(0) 编辑
摘要: Spring MVC 运行流程 Spring MVC 将所有的请求都提交给 DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。 DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的 Controller. Disp 阅读全文
posted @ 2020-11-26 09:03 乘风破浪的小子 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 如何自定义注解实现功能 创建自定义注解和创建一个接口相似,但是注解的 interface 关键字需要以 @ 符号开头。 注解方法不能带有参数; 注解方法返回值类型限定为:基本类型、String、Enums、Annotation 或者是这些类型的数组; 注解方法可以有默认值; 注解本身能够包含元注解, 阅读全文
posted @ 2020-11-26 09:02 乘风破浪的小子 阅读(5585) 评论(0) 推荐(0) 编辑
摘要: (一)BeanFactory 和 ApplicationContext 有什么区别 BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。 BeanFactory 还能在实例化对象的时生 阅读全文
posted @ 2020-11-26 08:57 乘风破浪的小子 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 为什么要用线程池 使用线程池管理线程有如下优点: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以 阅读全文
posted @ 2020-11-26 08:51 乘风破浪的小子 阅读(428) 评论(0) 推荐(0) 编辑
摘要: 当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i的时候拿到的i都是1,这就是线程不安全的更新操作,通常我们会使用synchronized来解决这个问 阅读全文
posted @ 2020-11-26 08:48 乘风破浪的小子 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 在JDK的并发包里提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段。本章会配合一些应用场景来介绍如何使用这些工具类。 1、等待多线程完成的Coun 阅读全文
posted @ 2020-11-26 08:46 乘风破浪的小子 阅读(209) 评论(0) 推荐(0) 编辑
摘要: Java中的线程池 Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建 阅读全文
posted @ 2020-11-26 08:44 乘风破浪的小子 阅读(77) 评论(0) 推荐(0) 编辑