10 2020 档案

摘要:CyclicBarrier 接着讲多线程下的其他组件,第一个要讲的就是CyclicBarrier。CyclicBarrier从字面理解是指循环屏障,它可以协同多个线程,让多个线程在这个屏障前等待,直到所有线程都达到了这个屏障时,再一起继续执行后面的动作。看一下CyclicBarrier的使用实例: 阅读全文
posted @ 2020-10-19 16:11 苏先生139 阅读(153) 评论(0) 推荐(0) 编辑
摘要:前言 物流行业中,通常会涉及到EDI报文(XML格式文件)传输和回执接收,每发送一份EDI报文,后续都会收到与之关联的回执(标识该数据在第三方系统中的流转状态)。 这里枚举几种回执类型:MT1101、MT2101、MT4101、MT8104、MT8105、MT9999,系统在收到不同的回执报文后,会 阅读全文
posted @ 2020-10-19 15:45 苏先生139 阅读(1802) 评论(0) 推荐(0) 编辑
摘要:ThreadPoolExecutor中常用参数有哪些? ThreadPoolExecutor中线程池状态和线程数量如何存储的? ThreadPoolExecutor有哪些状态,状态之间流转是什么样子的? ThreadPoolExecutor任务处理策略? ThreadPoolExecutor常用的拒 阅读全文
posted @ 2020-10-16 18:39 苏先生139 阅读(200) 评论(0) 推荐(0) 编辑
摘要:一、RocketMQ的安装 1、文档 官方网站 http://rocketmq.apache.org GitHub https://github.com/apache/rocketmq 2、下载 wget https://mirror.bit.edu.cn/apache/rocketmq/4.7.0 阅读全文
posted @ 2020-10-16 17:29 苏先生139 阅读(866) 评论(0) 推荐(0) 编辑
摘要:一、事务消息的由来 1、案例 引用官方的购物案例: 小明购买一个100元的东西,账户扣款100元的同时需要保证在下游的积分系统给小明这个账号增加100积分。账号系统和积分系统是两个独立是系统,一个要减少100元,一个要增加100积分。如下图: 2、问题 账号服务扣款成功了,通知积分系统也成功了,但是 阅读全文
posted @ 2020-10-16 16:36 苏先生139 阅读(710) 评论(0) 推荐(0) 编辑
摘要:一、消息发送过程 我们将消息流程分为如下三大部分,每一部分都有可能会丢失数据。 生产阶段:Producer通过网络将消息发送给Broker,这个发送可能会发生丢失,比如网络延迟不可达等。 存储阶段:Broker肯定是先把消息放到内存的,然后根据刷盘策略持久化到硬盘中,刚收到Producer的消息,再 阅读全文
posted @ 2020-10-16 16:28 苏先生139 阅读(1672) 评论(1) 推荐(1) 编辑
摘要:一、Demo import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.SendResult; import org.apache.rocketmq 阅读全文
posted @ 2020-10-16 16:23 苏先生139 阅读(342) 评论(0) 推荐(0) 编辑
摘要:一、原理 1、消息存在哪了? 消息持久化的地方其实是磁盘上,在如下目录里的commitlog文件夹里。 /root/store/commitlog 源码如下: // {@link org.apache.rocketmq.store.config.MessageStoreConfig} // 数据存储 阅读全文
posted @ 2020-10-16 16:16 苏先生139 阅读(580) 评论(0) 推荐(0) 编辑
摘要:一、说明 分为两种,一种是直接发消息,client内部有选择queue的算法,不允许外界改变。还有一种是可以自定义queue的选择算法(内置了三种算法,不喜欢的话可以自定义算法实现)。 public class org.apache.rocketmq.client.producer.DefaultM 阅读全文
posted @ 2020-10-16 16:04 苏先生139 阅读(2169) 评论(0) 推荐(0) 编辑
摘要:一、问题复现 1、描述 两个一样的Consumer Group的Consumer订阅同一个Topic,但是是不同的tag,Consumer1订阅Topic的tag1,Consumer2订阅Topic的tag2,然后分别启动。这时候往Topic的tag1里发送10条数据,Topic的tag2里发送10 阅读全文
posted @ 2020-10-16 15:51 苏先生139 阅读(2948) 评论(3) 推荐(1) 编辑
摘要:一、问题描述 RocketMQ的Consumer是如何做的负载均衡?比如:5个Consumer进程同时消费一个Topic,这个Topic只有4个queue会出现啥情况?反之Consumer数量小于queue的数据是啥情况? 二、源码剖析 1、RebalancePushImpl public clas 阅读全文
posted @ 2020-10-16 15:35 苏先生139 阅读(2101) 评论(0) 推荐(1) 编辑
摘要:一、环境准备 1、补充 如果单机都不会安装网站 https://blog.csdn.net/ctwctw/article/details/107143968 再次强调,如果单机都不会的话,先抽出2min看看上面文章,因为需要改jvm配置的,默认8G,没那么大的内存启动会报错的。 2、机器 机器用途 阅读全文
posted @ 2020-10-16 15:29 苏先生139 阅读(895) 评论(0) 推荐(0) 编辑
摘要:一、为什么要集群 单点存在单点故障问题 集群可以分担压力,提高QPS 主从可以保证消息可靠性,比如只有M没S。M磁盘坏了,那未被消费的消息都丢了。而S可以作为备份。 二、单M模式 1、特点 只有一个Master节点,所以单点故障是致命缺点。 优点:配置简单,方便部署。 缺点:单点故障,一旦Broke 阅读全文
posted @ 2020-10-16 15:14 苏先生139 阅读(373) 评论(0) 推荐(0) 编辑
摘要:一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失。 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息时开启事务支持,如果消息投递失败,则回滚事务。 自定义事务管理器 @Configuration public c 阅读全文
posted @ 2020-10-16 11:13 苏先生139 阅读(275) 评论(0) 推荐(0) 编辑
摘要:单例模式在程序设计中非常的常见,一般来说,某些类,我们希望在程序运行期间有且只有一个实例,原因可能是该类的创建需要消耗系统过多的资源、花费很多的时间,或者业务上客观就要求了只能有一个实例。 一个场景就是:我们的应用程序有一些配置文件,我们希望只在系统启动的时候读取这些配置文件,并将这些配置保存在内存 阅读全文
posted @ 2020-10-16 11:06 苏先生139 阅读(85) 评论(0) 推荐(0) 编辑
摘要:命令模式的定义与特点 命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。命令模式的主要优点如下。 通过引入中间件(抽象接口)降低系统的耦合度。 扩展性良好,增加 阅读全文
posted @ 2020-10-16 10:50 苏先生139 阅读(158) 评论(0) 推荐(0) 编辑
摘要:既然使用在项目中使用了MQ,那么就不可避免的需要考虑消息丢失问题。在一些涉及到了金钱交易的场景下,消息丢失还是很致命的。那么在RocketMQ中存在哪几种消息丢失的场景呢? 先来一张最简单的消费流程图: 上图中大致包含了这么几种场景: 生产者产生消息发送给RocketMQ RocketMQ接收到了消 阅读全文
posted @ 2020-10-16 10:34 苏先生139 阅读(1496) 评论(0) 推荐(0) 编辑
摘要:核心概念 在使用Sharding-JDBC之前,一定是先理解清楚下面几个核心概念。 逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order。 真实表 在分片的数据库中真实存在的物 阅读全文
posted @ 2020-10-16 09:42 苏先生139 阅读(212) 评论(0) 推荐(0) 编辑
摘要:现实生活中我们到商场买东西的时候,卖场往往根据不同的客户制定不同的报价策略,比如针对新客户不打折扣,针对老客户打9折,针对VIP客户打8折... 现在我们要做一个报价管理的模块,简要点就是要针对不同的客户,提供不同的折扣报价。 package strategy.examp02; import jav 阅读全文
posted @ 2020-10-15 17:42 苏先生139 阅读(284) 评论(0) 推荐(0) 编辑
摘要:秒杀业务分析 正常电子商务流程 查询商品; 创建订单; 扣减库存; 更新订单; 付款; 卖家发货; 秒杀业务的特性 低廉价格; 大幅推广; 瞬时售空; 一般是定时上架; 时间短、瞬时并发量高; 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000 阅读全文
posted @ 2020-10-14 09:51 苏先生139 阅读(99) 评论(0) 推荐(0) 编辑
摘要:Java运行时数据区 Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。 Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程 阅读全文
posted @ 2020-10-13 17:50 苏先生139 阅读(104) 评论(0) 推荐(0) 编辑
摘要:进程与线程 进程 当一个程序被运行,就开启了一个进程, 比如启动了qq,word 程序由指令和数据组成,指令要运行,数据要加载,指令被cpu加载运行,数据被加载到内存,指令运行时可由cpu调度硬盘、网络等设备 线程 一个进程内可分为多个线程 一个线程就是一个指令流,cpu调度的最小单位,由cpu一条 阅读全文
posted @ 2020-10-13 17:38 苏先生139 阅读(139) 评论(0) 推荐(0) 编辑
摘要:GitLab CI/CD介绍 GitLab CI的工作流程: GitLab CI是 GitLab 提供的持续集成服务,只要在你的仓库根目录 创建一个.gitlab-ci.yml 文件, 并为该项目指派一个Runner,当有合并请求或者 push的时候就会触发build。 这个.gitlab-ci.y 阅读全文
posted @ 2020-10-13 16:12 苏先生139 阅读(1073) 评论(0) 推荐(0) 编辑
摘要:概述 ArrayList不是线程安全的,所以如果需要保证ArrayList在多线程环境下的线程安全,即保证读的线程可见性和写的数据一致性,可以使用synchronized或者ReentrantLock对ArrayList的读写进行同步,或者使用Collections.syncrhonizedList 阅读全文
posted @ 2020-10-13 15:38 苏先生139 阅读(279) 评论(0) 推荐(0) 编辑
摘要:Lambda Lambda介绍 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式的结构 一个 Lamb 阅读全文
posted @ 2020-10-13 15:26 苏先生139 阅读(270) 评论(0) 推荐(0) 编辑
摘要:平时我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能;我们在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因我们都要到服务器去查询日志才能找到,而且也不能对发生的异常进行统计,从而改进我们的项目,要是能做个功能专门来记录操作日志和异常日志那就好了。 当然我们 阅读全文
posted @ 2020-10-13 12:15 苏先生139 阅读(673) 评论(0) 推荐(0) 编辑
摘要:软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。比较下面两张图,看看您现在编写的代码属于哪一种 阅读全文
posted @ 2020-10-13 12:00 苏先生139 阅读(1009) 评论(0) 推荐(0) 编辑
摘要:①同步阻塞IO(Blocking IO):即传统的IO模型。 ②同步非阻塞IO(Non-blocking IO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(New IO)库。 ③多路复用IO(IO Multiple 阅读全文
posted @ 2020-10-13 11:22 苏先生139 阅读(659) 评论(0) 推荐(0) 编辑
摘要:在java中的锁分为以下(其实就是按照锁的特性和设计来划分 1、公平锁/非公平锁 2、可重入锁 3、独享锁/共享锁 4、互斥锁/读写锁 5、乐观锁/悲观锁 6、分段锁 7、偏向锁/轻量级锁/重量级锁 8、自旋锁(java.util.concurrent包下的几乎都是利用锁) 从底层角度看常见的锁也就 阅读全文
posted @ 2020-10-13 11:16 苏先生139 阅读(157) 评论(0) 推荐(0) 编辑
摘要:缓存穿透 那什么是缓存穿透,它就是指当用户在查询一条数据的时候,而此时数据库和缓存却没有关于这条数据的任何记录,而这条数据在缓存中没找到就会向数据库请求获取数据。它拿不到数据时,是会一直查询数据库,这样会对数据库的访问造成很大的压力。 如:用户查询一个 id = -1 的商品信息,一般数据库 id 阅读全文
posted @ 2020-10-13 10:50 苏先生139 阅读(170) 评论(0) 推荐(0) 编辑
摘要:Mysql 锁类型 一、锁类型介绍: MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间; 阅读全文
posted @ 2020-10-12 17:25 苏先生139 阅读(6619) 评论(0) 推荐(0) 编辑
摘要:spring-session揭秘: 一.为什么要spring-session 在传统单机web应用中,一般使用tomcat/jetty等web容器时,用户的session都是由容器管理。浏览器使用cookie中记录sessionId,容器根据sessionId判断用户是否存在会话session。这里 阅读全文
posted @ 2020-10-12 16:54 苏先生139 阅读(1401) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示