摘要: 1、CopyOnWrite (1)、在写操作的线程,会将数组复制出来一份进行操作。而原本的数组不会做改变。 (2)读线程则不会受到影响,但是可能读到的是一个过期的数据。 在juc(java.util.concurrent)包下有着这么两个类,CopyOnWriteArrayList 和 CopyOn 阅读全文
posted @ 2019-06-19 16:01 马崮蚂蚁哥 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 方法一:基于数据库生成 A库、B库、C库支持同时写入 A库初始值为1,自增为3,获取的值一次是1、4、7 B库初始值为2,自增为3,获取的值一次是2、5、8 C库初始值为3,自增为3,获取的值一次是6、6、9 获取ID时可从三库轮询获取 优点 此方法使用数据库原有的功能,所以相对简单 能够保证唯一性 阅读全文
posted @ 2019-06-19 14:22 马崮蚂蚁哥 阅读(946) 评论(0) 推荐(0) 编辑
摘要: rabbitmq如何保证消息的可靠性 1、保证消息不丢失 1.1、开启事务(不推荐) 1.2、开启confirm(推荐) 1.3、开启RabbitMQ的持久化(交换机、队列、消息) 1.4、关闭RabbitMQ的自动ack(改成手动) 2、保证消息不重复消费 2.1、幂等性(每个消息用一个唯一标识来 阅读全文
posted @ 2019-06-19 11:13 马崮蚂蚁哥 阅读(3534) 评论(0) 推荐(0) 编辑
摘要: 容易混淆的内容 1、JVM内存模型 2、Java内存模型 3、Java对象模型 JVM内存模型 1、堆 2、虚拟机栈 3、本地方法栈 4、程序计数器 5、方法区 Java内存模型 Java堆和方法区的区域是多个线程共享的数据区域。也就是说,多个线程可能可以操作保存在堆或者方法区中的同一个数据。这也就 阅读全文
posted @ 2019-06-18 17:38 马崮蚂蚁哥 阅读(266) 评论(0) 推荐(0) 编辑
摘要: JVM的五大内存区域 1、程序计数器 2、方法区(也称为永久代,后续被Metaspace取代) 3、虚拟机栈 4、本地方法栈 5、堆 1、程序计数器 记录线程的执行位置,线程私有内存 在多线程的情况下,线程被切换回来的时候能够知道该线程上次运行到哪儿了 2、方法区 方法区是所有线程共享的内存区域,用 阅读全文
posted @ 2019-06-18 14:59 马崮蚂蚁哥 阅读(902) 评论(1) 推荐(2) 编辑
摘要: 什么是一致性hash算法 一致性哈希算法在1997年由麻省理工学院提出,是一种特殊的哈希算法,目的是解决分布式缓存的问题。 在移除或者添加一个服务器时,把影响降到最低。一致性哈希解决了简单哈希算法中存在的动态伸缩等问题。 一致性哈希算法的应用 一致性哈希算法在分布式缓存领域的 MemCached,负 阅读全文
posted @ 2019-06-18 10:08 马崮蚂蚁哥 阅读(201) 评论(0) 推荐(1) 编辑
摘要: 注册中心规则 每一个微服务启动的时候,都需要去注册中心注册(eureka或zookeeper或其他) 同类服务注册的服务名必须相同,不同类服务注册的服务名一定不能相同 (订单服务部署5台服务器,那么这5台微服务在注册中心中注册的服务名必须一致,例如ORDER) (商品服务部署4台服务器,那么这4台微 阅读全文
posted @ 2019-06-13 20:20 马崮蚂蚁哥 阅读(18270) 评论(1) 推荐(2) 编辑
摘要: 什么是ribbon? Ribbo是一个基于HTTP和TCP的客户端负载均衡器 什么是客户端负载均衡? 客户端负载均衡和服务端负载均衡最大的区别在于服务清单所存储的位置。 在客户端负载均衡中,所有的客户端节点都有一份自己要访问的服务端清单,客户端在发起请求的时候会先自行选择一个服务端,向该服务端发起请 阅读全文
posted @ 2019-06-13 17:30 马崮蚂蚁哥 阅读(451) 评论(0) 推荐(0) 编辑
摘要: 分布式锁 为什么需要分布式锁 应用中需要避免多个线程在同一时间对同一个共享变量做修改 在单机部署的项目中,为了避免上述现象,需要对变量或代码块做同步 在分布式部署的项目中,为了避免上述现象,用同步是解决不了的(因为相同的项目部署在了多台服务器,同步只能解决单台服务器的问题),所以就需要分布式锁,保证 阅读全文
posted @ 2019-05-21 13:49 马崮蚂蚁哥 阅读(504) 评论(0) 推荐(1) 编辑