- 博客(136)
- 收藏
- 关注
原创 强大的GraalVM的虚拟机
一、前言随着的Java的更新迭代,目前java的最新版本在Java16并且Java17马上发布,而且有望使用Java17这个长期支持的版本替换目前的Java8.不过最近浏览Oracle官网的时候发现了一个的Java虚拟机也是Oracle实验室觉得自己作为一个Java的开发工程师么为啥才知道。二、GraalVM虚拟机先看下官方网站的介绍:GraalVM is a high-performance runtime that provides significant improvements in app
2021-01-26 11:49:38
683
原创 一篇文章让你了解redis数据同步的整个流程
redis数据同步在本篇文章中,只描述数据同步的过程,不解释相关指令、参数配置、及场景解释如其他场景问题、如复制积压缓冲区满了怎么做?如何避免全量复制等自行百度(后期有时间也会进行说明)。redis的数据同步是指在redis主从复制(或集群模式下)下进行数据同步的过程(异步)。redis的数据同步阶段主要分为三个阶段连接阶段数据同步阶段全局复制部分复制命令传播阶段下面根据这个三个阶段详细解读redis数据同步的流程。第一个阶段连接阶段在配置redis主从复制的时候,需要在配置文件中配
2020-05-31 11:49:52
1748
1
原创 写给所有程序员的心声~千里马常有,但伯乐不常有
最近一帮做技术的在微博上吵谁比谁 NB。其实做技术不像练武,非得打遍天下。能很好解决自己遇到的问题搞定公司的需求就很好。进一步,精益求精下,提升下性能重构下接口,做到优雅可读;再进一步,整理成可重用的方式发布出来,让更多人受益。真正 NB 是多少人因为你而活得更好,而非其他; 越是好的公司,越是好的项目组在招开发人员时他们面对的东西越是底层,而Java的开发者无疑都是大神,动不动就是各种底层原理,Java源码分析,这对于我们无疑是站在巨人的肩膀上。所谓站得高尿的远。技术永远都在不停的变革但是变革的方向无疑是
2020-05-15 18:09:28
295
原创 一、SpringBoot自动装配的原理
一、SpringBoot自动装配的原理前言:SpringBoot自动装配是一种思想,它将约定大于配置的思想实现的淋漓尽致,SpringBoot通过@Configuration,@Import注解实现配置文件的编写和导入在利用spring.factores规定将每个集成进SpringBoot的内的组件都将自己的配置类的全路径写在此文件中,再由SpringBoot程序去读取并将其加入到SpringBoot的IOC容器内。一、SpringBoot自动装配源码解析1、Spring应用自动装配从@Sprin
2020-05-09 18:54:23
960
原创 分布式ID生成-雪花算法
雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景。GUID:采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。算法描述:雪花算法是一款开源的ID算法。主要的组成:最高位是符号位,始终为0,不可用。41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可...
2019-11-22 09:37:01
474
原创 阿里云-OSS简单的demo
一)阿里OSS的使用使用的阿里云实现图片等数据的存储。使用阿里云进行数据的存储如何使用OSS实现数据的存储1.创建一个容器2.使用OSS进行数据的存储导入坐标<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</a...
2019-11-21 20:24:14
990
原创 12.JUC-ForkJoin框架分支合并框架
一)分支合并框架Fork/join框架概念:就是在必要的情况下将一个大任务拆分成若干小任务,在将一个个小任务运算的结果进行join汇总。常常用于计算。工作窃取模式:主要的相关的类:1.RecursiveTask:有返回值的分支合并2.RecursiveAcitve:无返回值分支合并3.ForkJoinPool:用于作为分支合并的线程池4.ForkJoinTask<?>...
2019-10-13 10:01:13
121
原创 11-JUC-线程池的使用
一)线程的体系结构跟接口Executor:负责线程使用域调度的根接口Executor:子接口ThreadPoolExecutor:实现类ScheduledExecutorService:子接口负责线程的调度ScheduleThreadPoolExecutor:继承ThreadPoolExecutor和ScheduledExecutorService 实现了线程的调用和线程实现类。线程...
2019-10-13 09:58:19
103
原创 10.JUC-线程八锁
一)线程八锁1)线程八锁1)线程八锁指的是类中线程之间调用的方法。/** * @project_name:juc * @date:2019/10/10:16:13 * @author:shinelon * @Describe:演示线程八锁 * * 1. 两个普通同步方法,两个线程,标准打印, 打印? //one two * 2. 新增 Thread.sleep()...
2019-10-12 11:57:40
87
原创 9.JUC-ReadWriteLock读写锁
一)线程读写锁线程读写锁概念:写写/读写 :需要互斥读读:不需要互斥A ReadWriteLock维护一对关联的locks ,一个用于只读操作,一个用于写入。 read lock可以由多个阅读器线程同时进行,只要没有作者。 write lock是独家的。所有ReadWriteLock实现必须保证的存储器同步效应writeLock操作(如在指定Lock接口)也保持相对于所述相关联的read...
2019-10-12 11:56:31
208
原创 8.JUC-线程交替的打印
一)线程之间的交替打印使用线程Conditon进行线程之间通信package com.itguigu.demo1;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/**...
2019-10-12 11:55:32
131
原创 7.JUC-线程之间的通信
一)线程的通信1)使用Conditon接口描述可能会和锁相关的条件变量,这些变量在用法的上是一致的。单个的lock可以多个的Conditon类对象关联,为了避免兼容问题,Conditon方法的名字和Object的名字不一致。Conditon类的线程API使用Conditon进行线程通信package com.itguigu.demo1;import java.util.concu...
2019-10-12 11:53:54
143
原创 6.JUC-线程的虚假唤醒-生产者和消费者
一)经典案例生产者和消费者存在问题:在经典的案例生产者和消费者中存在了一个很大的问题,当生产者生产的消息过快或者是消费者消费的消息过快容易出现数据丢失的问题。解决方法:等待唤醒机制演示生产者消费者案例/** * @project_name:juc * @date:2019/9/27:21:06 * @author:shinelon * @Describe:生产者和消费者案例 *...
2019-10-12 11:53:08
133
原创 5.JUC-lock同步锁
一)Lock同步锁1.Lock是jdk1.5之后提供的显示同步锁优点:更加的灵活使用Lock加锁需要使用lock上锁,unlock解锁,而且解锁的必须要执行所以一般将解锁放在的finally中实例演示卖票1.未加锁状态/** * @project_name:juc * @date:2019/9/27:19:50 * @author:shinelon * @Describe:测试...
2019-10-12 11:46:26
81
原创 4.JUC-创建线程的第三种方式-Callable
一)Callable接口Runnable和Callable接口的区别1)Callable接口1.Callable的线程方法名字为call2.Callable的线程方法有返回值,并且返回值类型为Callable的泛型3.Callable的方法有异常class CallableDemo implements Callable<Integer>{ @Override...
2019-10-12 11:45:20
136
原创 3.JUC-锁分段机制
一)ConcurrentHashMap1)ConcurrentHashMapjava提供了高效的高并发容器,其中比较优秀的是ConcurrentHashMap容器,它采用了锁分段机制维护表的结构保证并发下的表的数据安全。ConcurrentHashMap采用了锁分段机制,那么锁分段机制是什么样子的呢?在ConcurrentHashMap中有个的分段级别concurrentLevel属性默认...
2019-10-12 11:40:35
121
原创 2.JUC-CountDownLatch 闭锁
一)CountDownLatch(闭锁)Java5.0之后在java.util.concurrent包中提供了对多种并发容器类来改进并发容器的性能。CountDownLatch是一个同步锁的辅助类,在完成一组正在其他的线程中执行的操作之前,允许一个或者多个线程一直等待。闭锁可以延迟线程的进度直致其到达终止状态,闭锁可以用来确保某些活动直到其他活动都完成才能继续操作。1)确保某个计算在其他所...
2019-10-12 11:37:49
136
原创 1.JUC-Volatile 关键字
一)内存可见性:Volatile 关键字多个线程操作共享数据时数据不可见的现象,多个线程在读取共享数据时是将数据读入自己的缓存中去,所以线程之间存在数据不可见现象,也就是说在多个线程读取数据的同时无法保证数据在1-1:Volatile 关键字是此共享数据变为在主存中刷新,在实现线程更改共享数据时会及时的刷新主存中的数据,保证操作共享数据的可见性。但是被volatile关键字修饰的变量不能被...
2019-10-12 11:36:45
130
原创 java获取请求的IP
代码获取:取X-Forwarded-For中第一个非unknown的有效IP字符串。 @GetMapping(value = "/getHost") @ResponseBody public String getIpAddr(HttpServletRequest request){ String ipAddress = request.getHeader("x-...
2019-10-08 15:57:43
179
原创 微服务下的登录验证JWT的使用
一)微服务下的登录验证JWT的使用1)JWT(JSON WEN TOKEN)微服务下登录检验解决方案 JWT讲解简介:微服务下登录检验解决方案 JWT讲解 json wen token 1、JWT 是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以 JSON 对象的形式安全传递信息的方法。 JWT 可以使用 HMAC 算法或者是 RSA 的公钥密钥对进行...
2019-09-24 12:00:54
307
原创 elasticsearch-安装和ELK介绍
一)ELK介绍为什么用到ELK:一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。一般大型系统是一个分布式部署的架构,...
2019-09-11 21:16:29
168
原创 SpringCloud-Sleuth-Sleuth介绍及入门案例
一)Sleuth简介微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出...
2019-09-11 21:01:41
357
1
原创 SpringCloud-stream-消息分区
一)分区的特点1.Stream的分区是当消息的提供者发送了相同的消息的时候,如果被集群的中的某个节点消费了那么如果提供者在此发送相同的消息的时候 ,一致会被同一个的消费者消费掉分区的配置提供者端需要配置的信息spring.application.name=12-springcloud-stream-group-sendserver.port=7070eureka.client.serv...
2019-09-11 20:49:24
318
原创 SpringCloud-stream-消息分组
一)实现消息的分组根据入门案例发现和消息中间件实现了耦合,可以自由切换消息中间件的类型,但是这还存在一个的问题,那就是对集群的支持,假如现在有个订单业务,当用户下完订单后要给用户的手机发送短信告知,由于短信服务压力过于大我们对其进行了集群的处理,但是此时如果使用Stream进行消息的推送,是将的对集群汇总所有的节点都进行通知,此时用户将要收到和集群数量想同的信息,这样肯定是不符合逻辑的。那么如何...
2019-09-11 20:48:12
188
原创 SpringCloud-stream-入门案例
一)创建Stream使用的入门案例编写提供者1.创建项目2.pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...
2019-09-11 20:43:46
164
原创 SpringCloud-bus- Bus-Server动态刷新配置文件
一)刷新Server端实现配置文件的动态读取1)服务端和客户端的要求1.都要连接上的RabbitMQ2.配置bus-amqp坐标Server端刷新的流程图如下2.Server端配置1.创建项目2.pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org...
2019-09-10 20:40:30
375
原创 SpringCloud-bus-什么是Spring Cloud Bus-Client动态刷新配置文件
一)什么是SpringCloudBusSpring云总线使用轻量级消息代理链接分布式系统的节点。然后可以用它广播状态更改(例如配置更改)或其他管理指令。目前唯一的实现是使用AMQP代理作为传输,但是相同的基本功能集(以及更多依赖于传输的功能)取决于其他传输的路线图。SpringCloudBus集成了市面上大部分的消息代理主要解决的问题就是数据同步、数据的变更二)使用Bus配置文件的更新...
2019-09-10 20:33:41
270
原创 SpringCloud-config-在配置中心服务端开启对称加密
一)对称加密1.在GIT仓库进行配置的时候,很多的数据是比较敏感的,不能以明文的方式进行存储,所以需要使用加密进行保护一些比较敏感的信息2.所有的加密是在ConfigServer端进行的。3.对称加密介绍 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的 是同样的密钥(secret key)。二)使用对称加密1.创建项目2.在全局...
2019-09-09 20:04:23
163
原创 SpringCloud-config-在Git端修改配置后,在不重启服务中如何让客户端生效
一)客户端刷新1.在客户端内添加坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>2.使用HttpCl...
2019-09-09 19:58:40
2018
原创 SpringCloud-config-配置文件的现状
一)为什么要使用配置中心简介:Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。使用Config Server,您可以为所有环境中的应用程序管理其外部属性。它非常适合spring应用,也可以使用在其他语言的应用上。随着应用程序通过从开发到测试和生产的部署流程,您可以管理这些环境之间的配置,并确定应用程序具有迁移时需要运行的一切。服务器存储后端的默认实现使用g...
2019-09-09 19:56:20
134
原创 Zuul-Zuul性能调优-网关的2层超时调优
一)Zuul超时调优为什么要对Zuul的超时时间进行优化根据上图进行解释Zuul底层使用的Hystrix调用Ribbon和服务进行通信的,默认情况下的使用的是Hystrix线程池隔离的方式将,网关内的服务开启一个线程访问远程的服务,这时,通过网管服务的请求需要经过Hystrix和Ribbon进行数据的请求线程池隔离默认的超时时间是一秒,ribbon是5秒,假如现在有个请求正常返回的数据的...
2019-09-07 20:15:31
700
原创 Zuul-在高并发情况下,网关实现限流达到自我保护
一)如何在高并发访问下对网关进行保护微服务开发中有时需要对API做限流保护,防止网络攻击,比如做一个短信验证码API,限制客户端的请求速率能在一定程度上抵御短信轰炸攻击,降低损失。1.创建项目2.pom文件在pom文件内添加对Zuul限流的坐标ratelimit的坐标<?xml version="1.0" encoding="UTF-8"?><project xml...
2019-09-07 20:12:44
1651
原创 Zuul-在网关中实现对服务的降级
一)Zuul网关服务降级处理1.项目创建2.pom文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch...
2019-09-07 20:10:58
436
1
原创 Zuul-error过滤器做统一异常处理
一)网关过滤器异常统一处理1.注意此异常处理和全局异常异常处理是不同的,Error过滤器只是针对Zuul在过滤请求的过程中如果出现异常,所有的过滤器都会去找有没有过滤类型为error的过滤器,并做异常的统一处理。2.在此强调,ERROR类型的过滤器是处理用户请求到达网关的时候,在过滤器中出现了异常二)测试Error类型过滤器1.创建异常类型的过滤器package com.sxt.filt...
2019-09-07 20:08:36
933
原创 Zuul-使用过滤器模拟用户登录
一)模拟用户登录需求:在分布式项目中,用户登录是个问题,在以前的用户信息都是存在Session中,但是如果是集群的的话,集群较小的话还可以使用session复制进行解决的,如果集群的较大的话,那么大大的降低性能。所以我们再进行用户登录的时候是先将用户登录的信息以JSON的格式存储在,redis内,并返回一个的Token的Cookie到用户,用户在访问的项目中其他的服务的时候,携带当前的toke...
2019-09-07 20:04:49
241
1
原创 Zuul-自定义网关过滤器
一)自定义网关过滤器我们已经能够实现请求的路由功能,所以我们的微服务应用提供的接口就可以通过统一的 API 网关入口被客户端访问到了。但是,每个客户端用户请求微服务应用提供的接口时,它们的访问权限往往都需要有一定的限制,系统并不会将所有的微服务接口都对它们开放。然而,目前的服务路由并没有限制权限这样的功能,所有请求都会被毫无保留地转发到具体的应用并返回结果。为了实现对客户端请求的安全校验和权...
2019-09-07 20:02:05
240
原创 zuul-路由方式
一)zuul的路由规则Zuul的路由规则就是以什么样的方式去访问网关下的服务。zuul提供了4种访问网关下服务的规则1.采用URL2.采用服务名字3.路由排除法4.添加指定的前缀二)URL的路由方式1.创建项目pom文件需要基本的坐标1)web启动器2)EurekaClient3)Zuul<?xml version="1.0" encoding="UTF-8"?&...
2019-09-07 19:58:23
289
原创 zuul-什么是微服务中的网关
一)什么是微服务中的网关1.微服务中的zuulzuul是SpringCloud中的一个路由组件,我们可以使用的zuul对外提供一个统一的入口访问我们提供的Provider,看上去zuul很像Customer,但是不然,其实我们可以将zuul理解成一个的门户,它为是web应用所有服务请求的前门,用户的请求经过网关,在进行对服务的消费2.为什么需要网关第一:我们知道我们要进入一个服务本身,很明...
2019-09-07 19:53:43
183
原创 采用RabbitMQ收集数据监控-服务搭建
一)在使用Turbine出现的问题1.前面提到使用的Turbine进行数据监控的虽然能够解决的集群服务的监控的问题,但是的也存在问题,比如频繁的配置,我们需要在Turbine内配置需要监控的服务,这是非常不好的,假如有1000个服务呢?那配置起来就很繁琐了,而且配置的服务不易管理,增加了管理的难度。2.在实际的应用中我们并不采用turbine进行集群服务的监控,而是采用在服务和Turbine之...
2019-09-05 20:11:49
324
原创 Hystrix-Turbine-集群监控
一)集群监控Turbine 是聚合服务器发送事件流数据的一个工具,hystrix 的 监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 t urbine 来监控集群服务。使用集群监控服务的时候被监控的服务需要有Dashboard的坐标1.修改Customer添加Dashboard<!-- 使用可视化界面需要添加的坐标--> <de...
2019-09-04 21:54:15
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人