10 2021 档案
摘要:ConcurrentHashMap 是Java并发包中提供的一个线程安全且高效的HashMap实现 HashMap的缺点: 多线程环境下HashMap会有线程安全问题,扩容可能会造成环形链表,使cpu空转达到100%,但是HashTable可以保证线程安全 HashTable缺点: 底层使用sync
阅读全文
摘要:Vector源码分析 Vector于ArrayList类似同样是数组类型,但是是线程安全的,为什么线程安全?在增删改方法中都加上了synchronized关键字 成员变量 protected Object[] elementData;//存储ArrayList元素的临时数组 protected in
阅读全文
摘要:LinkedList集合特点及源码分析 LinkedList是List接口的实现类 public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.i
阅读全文
摘要:ArrayList集合特点及源码分析 ArrayList是List接口的实现类 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Seriali
阅读全文
摘要:前置知识 ==和equals的区别 对于基本类型变量来说,只能使用 == ,因为基本类型的变量没有方法。使用==比较是值比较 对于引用类型的变量来说,==比较的两个引用对象的地址是否相等。所有类都是继承objcet类,而object类是equals方法比较的也是对象的地址是否相等,如果类没有重写eq
阅读全文
摘要:消息丢失 1、只要订单完成我们就会发送一条消息给MQ,这个途中突然MQ服务器网络中断,导致消息无法抵达 做好容错方法需要在消息发送前加上异常处理 try { rabbitTemplate.convertAndSend("order-event-exchange", "order.release.ot
阅读全文
摘要:创建支付宝应用 进入“蚂蚁金服开放平台” https://open.alipay.com/platform/home.htm 创建支付应用 拿到APPID 支付加密 支付宝商户之间传输一些付款的金融数据,非常重要对数据的加密程度要求比较高,所有必须使用加密才能在网络间传输 对称加密 加密和解密用同一
阅读全文
摘要:订单支付成功后,需要更改订单状态 支付宝有两种回调方式 同步回调:可以直接用request获取订单传回的数据,利用签名验证是否正确再去修改订单状态,但这种方式不推荐也不好,如果浏览器不小心关闭或者用户关闭,导致页面跳转不了也就无法修改订单数据 异步通知:只要支付成功以后就会给我们指定的地址发送一个请
阅读全文
摘要:应用场景 我们系统未付款的订单,超过一定时间后,需要系统自动取消订单并释放占有物品 常用的方案 就是利用Spring schedule定时任务,轮询检查数据库 但是会消耗系统内存,增加了数据库的压力、还存在较大的时间误差 解决:rabbitmq的消息TTL和死信Exchange结合 介绍 1.何为消
阅读全文
摘要:一、定时任务 1、cron表达式 语法:秒 分 时 日 月 周 年(Spring 不支持) cron表达式是由6或7个由空格分隔的字段组成的字符串。字段可以包含任何允许的值,以及该字段允许的特殊字符的各种组合。字段如下所示 Cron Trigger Tutorial (quartz-schedule
阅读全文
摘要:接口中默认方法修饰为普通方法 在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的,由于这些修饰符都是默认的。 接口定义方法:public 抽象方法 需要子类实现 接口定义变量:public、stat
阅读全文
摘要:RabbitMQ简介 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现 核心概念 Message 消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成, 这些属性包括routin
阅读全文
摘要:OAuth2.0 OAuth: : OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。 OAuth2.0 :对于用户相关的 OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等
阅读全文
摘要:ReentrantLock是lock接口的一个实现类,里面实现了可重入锁和公平锁非公平锁 ReentrantLock公平锁和不公平锁实现原理 公平锁会获取锁时会判断阻塞队列里是否有线程再等待,若有获取锁就会失败,并且会加入阻塞队列 非公平锁获取锁时不会判断阻塞队列是否有线程再等待,所以对于已经在等待
阅读全文
摘要:阿里云试过个人用户不通过 申请腾讯云短信验证码 利用公众号,申请签名再申请签名模板 找到腾讯云账户密钥对secretId,secretKey 应用ID 代码 引入腾讯云SDK <dependency> <groupId>com.tencentcloudapi</groupId> <artifactI
阅读全文
摘要:什么是幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变
阅读全文
摘要:缓存的使用 为了系统性能的提升,我们一般都会将部分数据放入缓存中,加速访问。而 db 承担数据落盘工作。 哪些数据适合放入缓存? 即时性、数据一致性要求不高的 访问量大且更新频率不高的数据(读多,写少) 举例:电商类应用,商品分类,商品列表等适合缓存并加一个失效时间(根据数据更新频率来定),后台如果
阅读全文
摘要:微服务压力测试 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都 是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。 使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是: 内存泄漏,并发与同步。 有效的压力测试系统将应
阅读全文
摘要:jconsole 与 jvisualvm Jdk 的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。远程应用需要配置,推荐使用jvisualvm 启动JConsole 点击JDK/bin 目录下面的jconsole.exe 即可
阅读全文
摘要:初始化线程的四种方式 继承 Thread public static void main(String[] args) { Thread01 thread01=new Thread01(); thread01.start(); } public static class Thread01 exten
阅读全文
摘要:分布式锁基本原理 redis 中有一个 SETNX 命令,该命令会向 redis 中保存一条数据,如果不存在则保存成功,存在则返回失败。 我们约定保存成功即为加锁成功,之后加锁成功的线程才能执行真正的业务操作 分布式锁演进一 核心代码: public Map<String, List<Catalog
阅读全文
摘要:Elasticsearch简介 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 *特点:* 分布式的实时文件存储,每个字段都被索引并可被搜索 分布式的实时分析搜索
阅读全文
摘要:Elasticsearch-Rest-Client 1. 通过 9300: TCP spring-data-elasticsearch:transport-api.jar; springboot版本不同,ransport-api.jar不同,不能适配es版本 7.x已经不建议使用,8以后就要废弃 2
阅读全文
摘要:正向代理与反向代理 Nginx配置文件 Windows修改host文件 192.168.195.100为虚拟机ip 192.168.195.100 gulimall.com 然后修改Nginx配置文件 server { listen 80; server_name gulimall.com; #ch
阅读全文
摘要:在业务中要使用缓存就要考虑缓存的两种用法模式,一种是读模式:遵循先从缓存中读取数据,缓存中没有再读取数据库,一种是写模式:双写方式、失效方式。这样每一套代码都需要这样一套代码,比较麻烦,有一个简单的方式来整合使用缓存。 简介 Spring 从 3.1 开始定义了 org.springframewor
阅读全文
摘要:Redisson 作为分布式锁 官方文档:https://github.com/redisson/redisson/wiki 引入依赖 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <ve
阅读全文
摘要:业务场景 在业务代码中构造了一个类,里面有7个字段,需要给构造方法传7个值 public class Home { //门 private String Door; //椅子 private String Chair; //厨房 private String Kitchen; //马桶 privat
阅读全文
摘要:介绍 在编程开发中经常会遇到这样一种场景,那就是需要保证一个类只有一个实例哪怕多线程同时访问,并需要提供一个全局访问此实例的点。单例模式主要解决的是,一个全局使用的类频繁的创建和消费,从而提升提升整体的代码的性能。 例如:日志系统的对象被反复创建打印 public class Logger { pr
阅读全文
摘要:Redis配置文件几大构成 Untis单位 # Redis configuration file example. # Note on units: when memory size is needed, it is possible to specify # it in the usual for
阅读全文
摘要:Servlet简介 Servlet是sun公司开发的一款动态Web技术 把实现了Servlet接口的java程序叫Servlet 构建Servlet 新建一个Maven项目,删掉里面的src文件夹,这个空的工程就是Maven的主工程 去导入相关的包 放入pom.xml中,有红色报错就刷新 由于是Se
阅读全文
摘要:官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。 Spring MV
阅读全文
摘要:业务场景 我们经常有这样子的代码 我们根据配置文件的后缀(json、xml、yaml、properties),选择不同的解析器(JsonRuleConfigParser、XmlRuleConfigParser……),将存储在文件中的配置解析成内存对象 RuleConfig public RuleCo
阅读全文
摘要:OpenFeign是什么 官方文档 Github地址 Feign是一个声明式WebService客户端。使用Feign能让编写Web Service客户端更加简单。它的使用方法是定义一个服务接口然后在上面添加注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封
阅读全文
摘要:SpringCloud Bus消息总线 Bus消息总线是什么 一言以蔽之,分布式自动刷新配置功能。 Spring Cloud Bus配合Spring Cloud Config使用可以实现配置的动态刷新。 Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了
阅读全文
摘要:Stream为什么被引入 常见MQ(消息中间件): ActiveMQ RabbitMQ RocketMQ Kafka 有没有一种新的技术诞生,让我们不再关注具体MQ的细节,我们只需要用一种适配绑定的方式,自动的给我们在各种MQ内切换。(类似于Hibernate) Cloud Stream是什么?屏蔽
阅读全文
摘要:Sentinel是什么 官方Github 官方文档 Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景:Sentinel
阅读全文
摘要:EureKa基础知识 什么是服务治理 Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理 在传统的RPC远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现
阅读全文
摘要:支付服务注册进zookeeper zookeeper是一个分布式协调工具,可以实现注册中心功能 环境搭建 先确认两台机器是否能够ping通,关闭Linux服务器防火墙 1.本地ping云服务器公网ip C:\Users\Lenovo>ping 81.68.160.85 正在 Ping 81.68.1
阅读全文
摘要:Sleuth是什么 为什么会出现这个技术?要解决哪些问题? 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。 是什么 https:
阅读全文
摘要:分布式配置中心介绍 分布式系统面临的配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的。 SpringCloud提供了ConfigServer来解
阅读全文
摘要:消费者订单Module模块 1.建Module 名字为cloud-consumer-order80的maven工程 2.改POM <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.
阅读全文
摘要:GateWay是什么 上一代zuul 1.x官网 Gateway官网 概述 Cloud全家桶中有个很重要的组件就是网关,在1.x版本中都是采用的Zuul网关; 但在2.x版本中,zuul的升级一直跳票,SpringCloud最后自己研发了一个网关替代Zuul,那就是SpringCloud Gatew
阅读全文
摘要:Ribbon入门介绍 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。 简
阅读全文
摘要:支付模块构建 创建微服务模块套路 建Module 此时父工程POM多了一个 改POM 在子工程pom中 <dependencies> <!--包含了sleuth+zipkin--> <dependency> <groupId>org.springframework.cloud</groupId> <
阅读全文
摘要:分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,
阅读全文
摘要:SpringCloud Alibaba简介 为什么会出现SpringCloud alibaba Spring Cloud Netflix项目进入维护模式 https://spring.io/blog/2018/12/12/spring-cloud-greenwich-rc1-available-no
阅读全文
摘要:新建一个Maven工程 配置编码、注解、java版本、文件过滤 中文编码: File->Settings->Editor->File Encodings 注解生效 java编译版本 过滤Maven文件 *.iml;*.idea;*.gitignore;*.sh;*.classpath;*.proje
阅读全文
摘要:Eureka自我保护理论知识 概述 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。 如果在Eureka Server的首页看到以下
阅读全文
摘要:EureKa集群说明 服务注册:将服务信息注册进注册中心 服务发现:从注册中心上获取服务信息 实质:存key服务命取value闭用地址 1先启动eureka注主册中心 2启动服务提供者payment支付服务 3支付服务启动后会把自身信息(比服务地址L以别名方式注朋进eureka 4消费者order服
阅读全文
摘要:分布式事务问题由来 分布式前 单机单库没这个问题 从1:1 → 1:N → N:N 单体应用被拆分成微服务应用,原来的三个模块被拆分成三个独立的应用,分别使用三个独立的数据源,业务操作需要调用三三 个服务来完成。此时每个服务内部的数据一致性由本地事务来保证, 但是全局的数据一致性问题没法保证 一句话
阅读全文
摘要:微服务架构概述 微服务是一种架构风格 一个应用拆分为一组小型服务 每个服务运行在自己的进程内,也就是可独立部署和升级 服务之间使用轻量级HTTP交互 服务围绕业务功能拆分 可以由全自动部署机制独立部署 去中心化,服务自治。服务可以使用不同的语言、不同的存储技术 Spring Cloud概念 Spri
阅读全文
摘要:Consul简介 Consul官网 Consul下载地址 Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp 公司用Go语言开发。 提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Co
阅读全文

浙公网安备 33010602011771号