- 博客(42)
- 资源 (1)
- 收藏
- 关注
原创 java 监听事件
建立抽象对象 TransactionalEventimport org.hibernate.Session;public abstract class TransactionalEvent { private final Session session; protected TransactionalEvent(Session session) { this.session = session; } public Session getSession
2021-05-22 17:33:23
214
原创 六大设计原则与23种设计模式总结(超详细)
六大设计原则一、单一职责原则1、概念描述对类来说的,即一个类应该只负责一项职责。如果一个类负责两个职责,可能存在职责1变化,引起职责2变化的情况。可以基于抽象逻辑,或者业务逻辑对类进行细化。2、案例演示这里基于方法和类的细化都可以,可以根据实际业务选择。class Animal { public void dogVoice (){ System.out.println("狗叫声:旺旺"); } public void cowVoice (){
2021-05-18 17:03:06
956
原创 JVM系列(1):双亲委派机制和沙箱安全机制
JVM 是 Java Virtual Machine(Java 虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM所处位置:从下图可以看出JVM 是运行在操作系统之上的,与硬件没有直接的交互。 JVM结构图体系堆(Heap)Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象
2021-05-17 22:16:49
246
1
原创 微服务中服务限流、服务降级、服务熔断
一般在微服架构中,有一个组件角色叫熔断器。顾名思义,熔断器起的作用就是在特定的场景下关掉当前的通路,从而起到保护整个系统的效果。在微服务架构中,一般我们的独立服务是比较多的,每个独立服务之间划分责任边界,并通过约定协议接口来进行通信。当我们的调用链路复杂依赖多时,很可能会发生雪崩效应。假设有这么一个场景,有A, B, C, D四个独立服务,A会依赖B,C,D;当D发生负载过高或网络异常等导致响应过慢或超时时,很可能A会因此堆积过多的等待链接,从而导致A的状态也转为异常,后面依赖到A的其他服务跟着发生链式
2021-05-17 14:43:22
608
原创 SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
一、Nacos基础简介1、概念简介Nacos 是构建以“服务”为中心的现代应用架构,如微服务范式、云原生范式等服务基础设施。聚焦于发现、配置和管理微服务。Nacos提供一组简单易用的特性集,帮助开发者快速实现动态服务发现、服务配置、服务元数据及流量管理。敏捷构建、交付和管理微服务平台。2、关键特性动态配置服务服务发现和服务健康监测动态 DNS 服务服务及其元数据管理3、专业术语解释命名空间:用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID
2021-05-16 23:46:33
377
原创 SpringCloud微服务:阿里开源组件Nacos,服务和配置管理
一、阿里微服务简介1、基础描述Alibaba-Cloud致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。2、核心功能服务限流降级默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、SpringCloudGatewa
2021-05-16 23:27:38
674
原创 SpringCloud微服务:Zipkin组件,实现请求链路追踪
一、链路追踪简介1、Sleuth组件简介Sleuth是SpringCloud微服务系统中的一个组件,实现了链路追踪解决方案。可以定位一个请求到底请求了哪些具体的服务。在复杂的微服务系统中,如果请求发生了异常,可以快速捕获问题所在的服务。2、项目结构启动顺序如下* 注册中心node07-eureka-7001* 链路数据收集服务node07-zipkin-7003* 服务提供node07-provider-6001node07-provider-6002* 网关路由node07-
2021-05-16 18:17:26
544
原创 SpringCloud微服务:Config组件,实现配置统一管理
一、Config简介在微服务系统中,服务较多,相同的配置:如数据库信息、缓存、参数等,会出现在不同的服务上,如果一个配置发生变化,需要修改很多的服务配置。spring cloud提供配置中心,来解决这个场景问题。系统中的通用配置存储在相同的地址:GitHub,Gitee,本地配置服务等,然后配置中心读取配置以restful发布出来,其它服务可以调用接口获取配置信息。二、配置服务端1、项目结构核心注解:@EnableConfigServer2、核心依赖<dependency>
2021-05-16 17:20:03
369
原创 SpringCloud微服务:Zuul组件,实现路由网关控制
一、Zuul组件简介1、基础概念Zuul 网关主要提供动态路由,监控,弹性,安全管控等功能。在分布式的微服务系统中,系统被拆为了多个微服务模块,通过zuul网关对用户的请求进行路由,转发到具体的后微服务模块中。2、Zuul的作用1)按照不同策略,将请求转发到不同的服务上去;2)聚合API接口,统一对外暴露,提高系统的安全性;3)实现请求统一的过滤,以及服务的熔断降级;3、案例结构启动顺序如下:# 注册中心node05-eureka-7001# 两个服务提供者node05-provi
2021-05-15 15:19:54
1384
5
原创 SpringCloud微服务:Turbine组件,实现微服务集群监控
一、聚合监控简介1、Dashboard组件微服务架构中为了保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型。断路器的状况反应程序的可用性和健壮性,它是一个重要指标。HystrixDashboard是作为断路器状态的一个组件,提供了数据监控和直观的图形化界面。2、Turbine组件Hystrix Dashboard组件监控服务的熔断情况时,每个服务都有图形界面,当微服务数量很多时,监控非常繁杂.为了同时监控多个服务的熔断状况,Netflix开源了Hystrix的另一个组件Turbine.T
2021-05-14 15:57:01
865
1
原创 SpringCloud微服务:Hystrix组件,实现服务熔断
一、熔断器简介微服务架构特点就是多服务,多数据源,支撑系统应用。这样导致微服务之间存在依赖关系。如果其中一个服务故障,可能导致系统宕机,这就是所谓的雪崩效应。1、服务熔断微服务架构中某个微服务发生故障时,要快速切断服务,提示用户,后续请求,不调用该服务,直接返回,释放资源,这就是服务熔断。熔断生效后,会在指定的时间后调用请求来测试依赖是否恢复,依赖的应用恢复后关闭熔断。2、服务降级服务器高并发下,压力剧增的时候,根据当业务情况以及流量,对一些服务和页面有策略的降级(可以理解为关闭不必要的服务),
2021-05-14 14:38:53
305
原创 SpringCloud微服务:Ribbon和Feign组件,实现客户端请求负载均衡
一、Ribbon简介1、基本概念Ribbon是一个客户端的负载均衡(Load Balancer,简称LB)器,它提供对大量的HTTP和TCP客户端的访问控制。2、负载均衡简介目前主流的负载均衡方案可分成两类:1)集中式即在服务的消费方和提供方之间使用独立的LB设施,可以是硬件,如F5,也可以是软件,如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方;2)进程内将LB逻辑集成到消费方,消费方从服务注册中心获取可用服务列表,然后根据指定负载均衡策略选择合适的服务器。Ribbon就
2021-05-14 14:17:30
302
原创 SpringCloud微服务:Eureka组件之服务注册与发现
一、Eureka基本架构1、Eureka角色结构图角色职责如下:1)、Register:服务注册中心,它是一个Eureka Server ,提供服务注册和发现功能。2)、Provider:服务提供者,它是一个Eureka Client ,提供服务。3)、Consumer:服务消费者,它是一个Eureka Cient ,消费服务。2、Eureka中几个核心概念1)、Registe服务注册当Client向Server 注册时,Client 提供自身的元数据,比如IP 地址、端口、运行状况指标的
2021-05-14 09:11:14
324
1
原创 SpringCloud微服务
什么是微服务架构?微服务是系统架构上的一种设计风格;主旨是将一个原本独立的系统拆分成多个小型服务;这些小型服务都在各自独立的进程中运行;服务之间通过基于HTTP的RESTful API进行通信协作。开发框架SpringBoot一、基础组件微服务基础:Eureka组件,管理服务注册发现...
2021-05-14 09:07:00
299
2
原创 CAP理论的理解
CAP理论:作为分布式系统的基础理论,描述的是一个分布式系统三个特性:一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance)最多满足其中的两个特性。分布式系统要么满足CA,要么CP,要么AP。无法同时满足CAP。I. 什么是 一致性、可用性和分区容错性分区容错性:指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。事实上我们在设计分布式系统
2021-05-13 15:27:05
380
3
原创 SpringBoot - 多Profile使用与切换
Spring中Profile对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。文件名格式:application-{profile}.properties可以建立多个properties(yaml)文件来不断的切换application-dev.propertiesserver.port=8082application-prod.propertiesserver.port=8083application.propertiesserver.port=8
2021-04-07 16:11:49
426
2
原创 排序经典算法总结
在编程的许多环境下,都需要算法的存在,算法虽然比较复杂,但是万变不离其宗,特此对所学过的算法进行总结。对于算法有一些术语:稳定性:如果c原本在d前面,而c=d,排序之后c仍然在d的前面;不稳定性:如果c原本在d的前面,而c=d,排序之后c可能会出现在d的后面;内排序:待排序列操作完全存放在内存中所进行的排序过程;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。以下为常见算
2021-03-20 16:22:50
1139
10
原创 空间复杂度深度解析
既然时间复杂度不是用来计算程序具体耗时的,那么空间复杂度也不是用来计算程序实际占用的空间的。空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,用 S(n) 来定义。1. 空间复杂度 O(1)int i = 1;int j = 2;++i;j++;int m = i + j;算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)
2021-03-19 21:23:31
611
原创 时间复杂度深度解析
对于学习算法的同志们,少不了对于时间复杂度的学习,在此对时间复杂度的学习进行记录,如有纰漏,尽请评论。从字面解析,就是一个算法运行的时间,很多小伙伴都想到了把算法程序运行一遍,那么消耗的时间就自然而然的知道了,这种方式是可以的,但是有很多的弊端,很容易受到运行环境的影响,性能的高低相差很大,对使用的数据规模也有关系。所以还是不能完整的去运行它。这样一种通用的方式就诞生了,「 大O符号表示法 」,在 大O符号表示法中,时间复杂度的公式是: T(n) = O( f(n) ),其中f(n) 表示每行代码执行次
2021-03-19 21:16:19
1069
2
原创 高并发总汇
一、重要的概念面对高并发问题,是软件开发不得不面对的问题,首先了解一下面对大量的访问时,出现的问题,下面是我总结的一些概念。同步和异步同步:理论上在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到返回的值或消息后才往下执行其它的命令。简单来说就是一件事情一件事的做,列如:吃饭和说话,只能一件事一件事的来,因为只有一张嘴。异步:执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过
2021-01-11 09:42:00
296
1
原创 Windows环境:MySQL 全量、增量备份还原数据库数据
一、数据库备份1、在进行MySQL数据库备份和还原操作时,必须先提前安装好MySQL环境,且MySQL服务已成功开启。(1)如果没有安装MySQL环境,可以参考:总汇。(2)如果已成功安装MySQL环境,打开运行窗口,输入:services.msc打开Windows服务窗口,查看MySQL是否处于开启状态。如果没有开启,参考第(1)步的文档,将MySQL服务开启2、添加log-bin日志配置(1)找到自己MySQL安装目录下的my.ini配置文件(2)打开my.ini配置文件,并在my.i
2021-01-10 10:50:03
1982
7
原创 windows问题汇总
下面包含了一些常见的一些问题。1.在服务器中如果出现以下问题,单独下载一个“msvcp140.dll”是没用的,所有msvcp类文件都是微软VC++运行库的文件,140版本号代表是VC++2015的文件,缺少这个就安装VC++2015一般即可解决。下载路径:Visual C++ Redistributable for Visual Studio 2015...
2021-01-09 10:57:18
1663
3
原创 java多线程及线程池
import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.ThreadFactory;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic
2020-12-03 10:20:33
142
原创 CMD常用命令
Windows 命令提示符(cmd.exe) 是 Windows NT 下的一个用于运行 Windows 控制面板程序或某些 DOS 程序的shell程序;或在 Windows CE 下只用于运行控制面板程序的外壳程序。cmd指令有很多,使用用途也很广。直接键盘 Win+R 调用:(这个运行界面命令还可以在环境变量中自定义)在窗口里调用的命令大致分为两类,一类是原生的命令,还有一类是各种支持命令行的程序,两者使用差不多。第一类:原生的DOS。首先在cmd命令输入help,看到如下图的结果,这里展示
2020-10-31 22:41:34
715
1
原创 jenkins学习(windows批处理)
前言: 如果Jenkins搭建在windows环境中,那么就需要写一些批处理了,对windows中的一些操作。说起windows批处理,我以为就是cmd命令,然而并不是,批处理是bat文件。cmd文件和bat文件的区别:在本质上两者没有区别,都是简单的文本编码方式,都可以用记事本创建、编辑和查看。两者所用的命令行代码也是共用的,只是cmd文件中允许使用的命令要比bat文件多。cmd文件只有在windows2000以上的系统中才能运行,而bat文件则没有这个限制。从它们的文件描述中也可以看出以上的区别:c
2020-10-31 22:20:33
3378
4
原创 优化If else(简化代码)
if else 是我们写代码时,使用频率最高的关键词之一,然而有时过多的 if else 会让我们感到头晕。当我们回过头看代码或者欣赏他人代码时,感到烦人。我总结了几种方式,可以参考呀。1.使用 return我们使用 return 去掉多余的 else,实现代码如下。优化前代码:if ("java".equals(str)) { // 业务代码......} else { return;}优化后代码:if (!"java".equals(str)) { retu
2020-10-24 21:59:10
2400
1
原创 GIT私服搭建(超详细)
一、GIT服务器搭建方式GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信的呢?git支持的四种通信协议:1、Local(本地协议)2、ssh3、http(Dumb、Smart)4、git1、 Local(本地协议)基于本地文件系统或共享(NFS)文件系统进行访问好处:简单,直接使用了现有的文件权限和网络访问权限,小团队小项目建立一个这样的版本管理是非常轻松的一件事。缺点:这种协议就是本身共享文件系统的局限,只能在局域网,速度慢适应
2020-10-24 21:23:02
4650
2
原创 Git学习(超详细)
GIT就是咱们常用的分布式版本控制系统(强力推荐),还有其他的比如:SVN、CVS等。GIT与SVN主要的区别:储存方式不一样使用方式不一样管理模式不一样
2020-10-23 21:53:36
4101
原创 Jenkins学习(windows环境)
Jenkins是用来做可持续集成的,Continuous integration(CI)是一种软件开发实践,即团队开发成员经常集成他们的工作,每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,让团队能够更高效的开发软件。持续集成要点:统一的代码库(git)统一的依赖包管理(nexus)测试自动化构建全自动化(maven)部署自动化可追踪的集成记录Jenkins概述jenkins就是为了满足上述持续集成的要点而设计的一款工具,其主体框架采用 jav
2020-10-17 22:18:19
1204
5
原创 redis学习(超详细)
redis 全称 Remote Dictionary Server优质的性能保证定时异步刷盘单K-V容量1GB(相比memcache 1MB)丰富的数据类型(String、list、Hash、Set、SortSet(一共支持有8种,常用5种))…Redis 应用场景:服务端购物车、热点数据缓存、分布式全局锁、点赞/打卡/签到、消息队列、用户和关注/商品推荐、分布式全局序列、抽奖、数据存储源、电商产品筛选、计数器、排行榜…Redis数据类型-String其中String 不是java 中
2020-10-08 20:48:14
1116
1
原创 Cookie跨域setDomain
正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。1.可在同一应用服务器内共享方法:设置cookie.setPath("/");本机tomcat/webapp下面有两个应用:cas和webapp_b,1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可
2020-10-04 22:20:53
2941
1
原创 redis缓存
redis缓存redis的性能非常高,基本上同机器配置下完全吊打传统sql,甚至nosql的mongodb等。即使这样redis也只是一个分布式缓存,或者说是分布式缓存数据库,那么redis肯定不能像传统数据一样,动不动放个几T的数据,一般都是用来放热数据或者体量小的数据,其他的数据还是使用队列通过后台服务放到sql db里面;另外根据redis的特性,建议服务器cpu核心数要留个1/4,每个实例的内存最得多出1/2;假如24核的120G的服务器,建议部署18个reids实例,每个实例5G的内存,实际使用
2020-10-03 22:13:52
107
原创 Redis过期键的删除策略
Redis中有个设置时间过期的功能,即对存储在 redis 数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的 token 或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。我们 set key 的时候,都可以给一个 expire time,就是过期时间,通过过期时间我们可以指定这个 key 可以存活的时间。注:对于散列表这种容器,只能为整个键设置过期时间(整个散列表),而不能为键里面的
2020-10-02 20:32:33
143
1
原创 MYSQL数据库总汇
数据库中间件数据库中间件一般提供了读写分离、数据库水平扩展的能力。下面主要介绍两个中间件。一是 Sharding-Sphere,它是一个开源的分布式数据库中间件解决方案,由 Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar 这几个独立产品组成,适用不同使用场景。这几个产品都提供标准化的数据分片、读写分离、柔性事务和数据治理功能,可适用于如 Java 同构、异构语言、容器、云原生等各种多样化的应用场景。 目前 Sharding-Sphere 已经进入 Apache
2020-10-02 17:39:41
312
原创 Spring全家桶
必会框架 - Spring全家桶Java 中常用的应用框架Spring 框架中的主要知识点;NIO 框架 Netty 以及基于 Netty 实现的主流 RPC 框架 Motan、Dubbo 和 gRPC;ORM 框架 MyBatis。常用框架汇总先来看常用框架的知识点汇总,如下图所示。如上图所示,左上方是 Spring 系列。很多研发人员把 Spring 看作心目中最好的 Java 项目,没有之一。Spring 系列包含非常多的项目,可以满足 Java 开发中的方方面面。那么来看几个常用
2020-10-01 09:21:11
269
原创 Flutter实现线上安全与稳定
通用的 Flutter 异常上报模块,为线上运营提供上报与监控安全保障,其次借助 Sentry 平台实现异常告警和管理功能。线上安全运营在上线每个客户端版本时,我们都要有一个 crash 标准,由于客户端发布后是无法回滚的,因此在发布时需要使用数据来辅助判断,这里就需要使用 crash 率来辅助判断是否需要进一步灰度更多用户。要做到这点,就需要将客户端异常的报错问题,上报到平台。Android 和 iOS 都有类似的功能模块,在 Flutter 官网也介绍了相应的理论方法,大家可以前往官网进行了解。写这
2020-09-30 19:44:30
2064
原创 flutter上拉刷新、下拉加载
RefreshIndicator该组件主要的作用是在下拉时实现刷新,具体看下组件参数的一些作用。RefreshIndicator({ Key key, @required this.child, // 子组件,需要更新的组件列表 this.displacement = 40.0, // 刷新指示器离顶部的位置 @required this.onRefresh, // 下拉触发函数,该函数必须是 Future<void> this.color, // 设置指示器的颜色
2020-09-30 19:29:30
1085
原创 flutter的代码运行流程
Dart 单线程单线程在流畅性方面有一定安全保障,这点在 JavaScript 中存在类似的机制原理,其核心是分为主线程、微任务和宏任务。主线程执行主业务逻辑,网络 I/O 、本地文件 I/O 、异步事件等相关任务事件,应用事件驱动方式来执行。在 Dart 中同样是单线程执行,其次也包含了两个事件队列,一个是微任务事件队列,一个是事件队列。微任务队列微任务队列包含有 Dart 内部的微任务,主要是通过 scheduleMicrotask 来调度。事件队列事件队列包含外部事件,例如 I/O 、 Ti
2020-09-30 19:15:12
860
原创 Dart语言学习
基础数据类型与 JavaScript 相比较,比如 Number 和 String,其使用方式基本一致。下面主要基于两者的差异点逐一讲解,避免混淆或错误使用。Symbol 的区别在 JavaScript 中,Symbol 是将基础数据类型转换为唯一标识符,核心应用是可以将复杂引用数据类型转换为对象数据类型的键名。在 Dart 中,Symbol 是不透明的动态字符串名称,用于反映库中的元数据。用 Symbol 可以获得或引用类的一个镜像,概念比较复杂,但其实和 JavaScript 的用法基本上是一
2020-09-30 17:56:23
392
Redis实现SSO
2020-10-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人