- 博客(64)
- 收藏
- 关注
原创 Spring cloud 网关 gateWay
GateWay简介基于spring5.0+springboot2.0+webFlux(基于高性能的Reactor模式响应式通信框架,异步非阻塞模型)为微服务架构提供一种简单有效的统一的API路由管理方式。Spring Cloud GateWay不仅提供**统⼀的路由⽅式(反向代理)**并且基于 Filter(定义过滤器对请求过滤,完成⼀些功能) 链的⽅式提供了⽹关基本的功能,例如:鉴权、流量控制、熔断、路径重写、⽇志监控等。架构位置核心概念基于Reactor,天然支持异步非阻塞。过程:一
2021-08-02 20:30:20
397
原创 Spring cloud 服务调用 feign
Feign简介(Feign = RestTemplate+Ribbon+Hystrix )Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的)类似dubbo,服务消费者拿到提供者的接口,像调用本地方法一样调用接口中的方法,实际发出的是远程的请求。本质:封装了http调用流程,更符合面向接口化的编程习惯/** * 1.name属性用于指定要调用微服务的名称,对应在注册中心的名称。 * 2.openFeign支持springmvc注解,接口
2021-08-02 20:27:46
249
1
原创 Springcloud 服务熔断 hystrix
Hystrix雪崩效应微服务架构中,少不了各个微服务之间的调用。服务调用之间会有依赖关系。微服务A调用微服务B,微服务B调用微服务C之后才能完成整个返回结果,完成整个请求链路。扇入:该服务被其他服务调用的次数。(该模块复用性好)扇出:该服务调用其他的服务的个数。(该模块业务复杂)所谓雪崩效应如果扇出的链路上某个微服务的调用时间过长或者不可用,对调用方微服务来说就会占用越来越多的系统资源,进而引起系统崩溃。解决方案服务熔断当扇出的链路上某个服务不可用或者响应时间过长,熔断该节点的服务调用,进行
2021-08-02 20:25:47
624
原创 Spring Cloud 服务调用 Ribbon
Ribbon负载均衡,旨在将请求分发。客户端负载均衡负载均衡算法在客户端执行eg:当a服务调用b服务时,在调用前已经从注册中心获取到了b服务的实例信息(服务地址列表)。使用ribbon采取指定的负载均衡算法选择一个进行请求。服务端负载均衡负载均衡算法在服务端执行eg: Nginx、 F5这些,请求到达服务器之后由这些负载均衡器根据⼀定的算法将请求路由到⽬标服务器处理。负载均衡策略Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接⼝为 com.netflix.loadbalanc
2021-08-02 20:23:40
116
原创 Spring Cloud 注册中心 Eureka
Eureka分为 Eureka Server、 Eureka Client。1.服务提供者作为客户端,在启动时,会将自己的信息(元数据:ip、port、服务名等等)传送给服务端。服务端会将此信息保存到map中。服务提供者会每隔30s向服务端发送心跳检测,如果90s内服务端没有收到客户端的心跳,就会将该实例剔除。2.服务消费者会从注册中心拉取对应服务的信息,并存入本地做缓存。如果对应服务的信息发生改变,注册中心会重新通知消费者重新拉取。3.服务端一般是集群化,来保证高可用。每当服务端收到注册信息后,会
2021-08-02 20:22:08
211
3
原创 架构演进以及rpq与http的区别
架构演进单体项目中所有的功能模块都放在一个工程中编码、编译、打包并且部署在一个应用服务器。优点:简单使用、便于维护、成本低缺点:代码复杂不宜维护、耦合度(核心业务和边缘业务混杂在一起,一崩全玩完)、新增业务困难垂直应用架构根据业务特性进行模块化拆分,减少系统之间的耦合度。(如一个招聘网站可分为 单点登录、主站、简历管理、职位管理等等)优点: 业务之间互不影响(分流)、分模块开发提高开发效率。缺点:服务之间调用协议、方式不稳定、不统一。没有规范化;集群化,负载均衡实现较复杂。服务监控不到位。
2021-08-02 20:20:49
288
原创 硬件同步原语(CAS、FAA)和锁 来实现异步并发转账
硬件同步原语硬件同步原语(Atomic Hardware Primitives)是由计算机硬件提供的一组原子操作,我们比较常用的原语主要是 CAS 和 FAA 这两种。原语:原子操作,只要当前线程执行完毕之后,才会切换下一个线程执行。CASCAS(CompareAndSwap),即先比较,再交换。<< atomic >>// p: 要修改的变量的指针。// old: 旧值// new: 新值function cas(p : pointer to int, old
2021-07-17 11:46:56
710
原创 消息队列的重新认识以及Kafka的入门
消息队列能做什么?异步、流量控制、服务解耦异步在秒杀系统中,我们处理一个秒杀请求通常包含风险控制、库存锁定、生成订单、短信通知、更新统计数据。其中最关键的两个步骤就是风险控制、库存锁定。只要用户的秒杀请求通过风险控制,并在服务端完成库存锁定,就可以给用户返回秒杀结果了,对于后续的生成订单、短信通知和更新统计数据等步骤,并不一定要在秒杀请求中处理完成。所以当服务端完成前面 2 个步骤,确定本次请求的秒杀结果后,就可以马上给用户返回响应,然后把请求的数据放入消息队列中,由消息队列异步地进行后续的操作。
2021-06-29 11:35:31
194
原创 Redis(一)简介以及五大数据结构
RedisRedis架构安装数据类型Stringhashlistsetzset单线程特性Redis非关系型数据库,key-value 。基于内存实现。由于是单线程,常用于高并发下的读和写。官方测试 每秒可以处理10w条数据。“两大维度”就是指系统维度和应用维度,“三大主线”也就是指高性能、高可靠和高可扩展(可以简称为“三高”)。高性能主线,包括线程模型、数据结构、持久化、网络框架;高可靠主线,包括主从复制、哨兵机制;高可扩展主线,包括数据分片、负载均衡。架构安装#拉
2021-06-26 11:51:14
329
1
原创 mybatis-plus 太香了
Mybatis-plusMyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。快速入门1.创建springboot 工程引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>
2021-06-25 11:35:55
144
原创 postgreSQL学习
postgreSQL世界上最先进的数据库。纯C语言开发。特点 稳定、可靠。是一个免费的对象-关系数据库服务器(ORDBMS)语法DDL#创建数据库create database daname#查看已存在数据库\l#选择数据库\c dbname#删除数据库drop database dbname表#创建表格CREATE TABLE student( Sno varchar(20) PRIMARY KEY NOT NULL , Sname varchar(20) NOT N
2021-06-25 11:34:57
261
1
原创 拦截器(inteceptor)与过滤器(filter)的新认识
拦截器(inteceptor)与过滤器(filter)区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调。拦截器不依赖与servlet容器,过滤器依赖与servlet容器。、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注
2021-06-23 17:11:17
233
1
原创 Jenkins 部署应用访问不到【已解决】
近期在写毕业设计,项目想搭一套自动化部署。Docker+gitee+Jenkins问题在Jenkins构建项目完成后,一直访问不到项目。进入容器中查看,项目确实已经启动起来了。问题就锁定在端口上。此时查看该docke容器与宿主机的端口映射 ,果然没有8888端口的映射关系。这外界是肯定是访问不到的。于是修改应用的端口号为8001 映射到宿主机的80端口 ,重新构建 ,问题解决。总结docker 创建的容器要与宿主机建立端口映射关系才能访问到。...
2021-05-05 10:12:24
1639
1
原创 排序【一】如何分析一个排序算法
分类冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序如何分析一个“排序算法”?排序算法的效率最好情况、最坏情况、平均情况时间复杂度之所以要区分这三种时间复杂度。第一是因为有些排序算法会区分,为了好对比,我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序不同的数据,对于排序的执行时间肯定是有影响的,我们要知道排序算法在不同数据下的性能表现。考虑时间复杂度的系数、常数 、低阶时间复杂度是在数据规模n很大的时候,忽略了系数、常数、低阶。但是实
2021-03-21 14:49:00
166
原创 【Leetcode】剑指 Offer 24. 反转链表
题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思想迭代法定义两个指针prev、curr,prev指向前一个节点,curr指向当前节点。遍历当前链表,首先在指向反转时取出下一个节点并保留到next,防止链表丢失。然后将当前节点指向上一个节点(curr.next=prev)。反转完成后将prev、curr后移。递归使用递归函数,一直递归到链表的最后一个结点,该结点就是反转后的头结点,记作 retret .此后,每次函数在返回的过程中,让当前结点的下一个结点的
2021-03-15 15:28:19
68
原创 【Leetcode】剑指 Offer 25. 合并两个排序的链表
题目描述输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。解题思路两个递增排序的链表,我们可以从两个头节点中选取一个最小的当成头节点,然后依次遍历两个链表,通过比较大小,依次拼接到该链表后。引入哨兵节点,方便后续取到排好序的链表class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { //引入哨兵节点 ListNode preHead = ne
2021-03-15 14:46:05
61
原创 【Leetcode】剑指 Offer 53 - I. 在排序数组中查找数字 I
题目描述统计一个数字在排序数组中出现的次数。思路排序数组查找目标数字出现的次数:可以用寻找左侧边界的二分查找,定位到左侧边界的索引,然后再往下遍历,得到出现的次数。寻找最左侧边界的二分搜索int left_bound(int[] nums, int target) { if (nums.length == 0) return -1; int left = 0; int right = nums.length; // 注意 while (left < ri
2021-03-12 16:07:18
77
原创 【Leetcode】剑指 Offer 53 - II. 0~n-1中缺失的数字
题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。思路1.看到排好序的数组的搜索问题,就要想到二分查找。2.代码实现class Solution { public int missingNumber(int[] nums) { int left=0; int right=nums.length-1; while(left
2021-03-12 15:00:24
69
原创 导出数据库表结构到excel
SELECT '字段名称','数据类型','主键','备注'UNIONSELECT COLUMN_NAME as 字段名称, COLUMN_TYPE as 数据类型, if(COLUMN_KEY='PRI','Y','N') as 主键, COLUMN_COMMENT as 备注FROM INFORMATION_SCHEMA. COLUMNSWHERE table_schema = '数据库名'AND table_name = '表名'INTO OUTFILE 'D:/XXX..
2021-01-01 11:16:10
899
原创 Kubernetes学习笔记(更新中。。。。)
Kubernetes每个微服务通过Docker进行发布,随着业务的发展,系统中遍布着各种各样的容器。于是容器的资源调度,部署运行,扩容缩容就是我们需要面临的问题。基于 Kubernetes 作为容器集群的管理平台被广泛应用Kubernetes架构Kubernetes是用来管理容器集群的平台。但它不是直接来管理容器,而是把容器放在pod中,通过管理pod来管间接管理容器。Master我们通过 Master 对每个节点 Node 发送命令。简单来说,Master 就是管理者,Node 就是被管理者
2020-11-24 21:40:33
182
1
原创 本地项目通过git push 提交到 github仓库出现权限不足
写在之前近期写的demo想同步到github仓库 ,做一个保存记录。同时学习一下git的相关命令及分支合并等等。但是在提交时的时候一直报权限不足。原因之前电脑关联过一个账户,但因为账号密码忘了 ,又重新建立一个账户。所以说出现了 Permission to xxx denied to Oracle-995。本地关联的是之前的用户。所以说提交一直被拒绝。解决在控制面包找到用户账户2.管理你的凭据3.Windows 凭据4.删除github 凭据5.重新登录填写当前帐号的账号密码
2020-11-10 11:57:53
802
1
原创 何为CI、CD? 什么又是DevOps
写在之前最近一直再用微软的Azure DevOps,CI和CD、DevOps的概念一直在浮现,但一直不能彻底理解是什么意思,于是就翻阅各大论坛资料进行查询 ,但繁杂的概念让我更加的迷茫。在偶尔间看到了b站狂神的一个视频,进行了一个实例讲解,让我恍然大悟。虽然还有许多细节没有讲到,但是让我对整个流程有了把控,对日后的学习有了方向。现将笔记记录下来、方便查阅。DevOps写在之前什么是DevOps?如何落地实现DevOps理念?DevOps流程DevOps优点什么是DevOps?DevOps是一种思
2020-11-03 22:00:12
485
原创 Flyway入门及springboot整合flyway
Flyway团队开发遇到的问题为什么要使用FlywayFlyway的概念flyway支持的数据库Flyway的工作原理springboot整合flyway团队开发遇到的问题现在开发一般都是团队开发,这样就会出现项目同步的问题,代码同步可以通过SVN工具管理起来,那数据库同步怎么办呢?理想的情况下,在开发新项目的时候会首先把业务理清楚,把数据库表设计好,然后将数据库交给专门的人员维护,也就不存在数据库同步的问题了。但实际情况呢?需求从项目开始到项目结束一直在变,很多公司就没有专门的数据库维护人员,数据库大
2020-11-03 15:24:49
1997
原创 flyway报错-Exception: Incomplete statement at line 1 col 1: BEGIN
用flyway进行数据库版本控制,在执行插入脚本时报错。插入脚本:报错信息:Exception: Incomplete statement at line 1 col 1: BEGIN。。。。分析原因是因为flyway并没有识别Begin语法。解决:最后排查出来flyway版本问题,原来用的flyway6.0.1版本,改成 <dependency> <groupId>org.flywaydb</groupId>
2020-11-02 14:21:13
753
1
转载 容器化技术Docker (一) 虚拟机和容器有什么不同
原文链接:https://www.backblaze.com/blog/vm-vs-containers/虚拟机和容器都可以充分利用计算机硬件和软件资源。容器是新兴的事物,但是虚拟机已经并且继续在各种规模的数据中心大受欢迎。如果您正在寻找在云中运行自己的服务的最佳解决方案,则需要了解这些虚拟化技术,了解它们之间的区别以及每种技术的最佳用途是什么。什么是虚拟机?虚拟机(VM)是计算机系统的仿真。简而言之,它可以在一台计算机的硬件上运行看似多台单独的计算机。操作系统(OS)及其应用程序共享单个主机.
2020-10-31 11:35:12
630
原创 navicat导出某个数据库全部的索引
步骤点击数据库右键新建查询填充数据名和表名即可。想要导出全部去掉表名选项。SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, '', 'ADD ',IF ( NON_UNIQUE = 1,CASE UPPER( INDEX_TYPE ) WHEN 'FULLTEXT' THEN 'FULLTEXT INDEX' WHEN 'SPATIAL' THEN 'SPATIAL INDEX' ELSE CONCAT( 'INDEX ', I
2020-10-30 09:51:48
3442
原创 Spring Cloud-Ribbon (服务调用、负载均衡)
摘要Spring Cloud Netflix Ribbon 是Spring Cloud Netflix 子项目的核心组件之一,主要给服务间调用及API网关转发提供负载均衡的功能,本文将对其用法进行详细介绍。Ribbon简介在微服务架构中,很多服务都会部署多个,其他服务去调用该服务的时候,如何保证负载均衡是个不得不去考虑的问题。负载均衡可以增加系统的可用性和扩展性,当我们使用RestTemplate来调用其他服务时,Ribbon可以很方便的实现负载均衡功能。LB负载均衡LoadBalance ,请用
2020-10-24 21:11:07
91
原创 Linux 常用命令 (更新)
后台启动后台启动并输出日志到指定文件夹nohup java -jar nvhl-pcis-gateway.jar >./logs/geteway.log 2>&1 &防火墙查看防火墙状态systemctl status firewalld启动防火墙systemctl start firewalld 更新防火墙规则firewall-cmd --reload查看所有打开的端口: firewall-cmd --zone=public --list-port
2020-10-23 11:29:13
94
原创 SpringCloud Alibaba Nacos 注册中心和配置中心(二、分类配置)
nacos配置中心-分类配置引入NameSpace+Group+DataID三级目录引入实际开发中,通常一个系统会有dev开发环境、test测试环境、prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件就是我们需要考虑的问题。一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境… 怎么对这些微服务配置进行管理呢?NameSpace+Group+DataID三级目录...
2020-10-18 11:09:28
234
原创 SpringCloud Alibaba Nacos 注册中心和配置中心(一、基础入门)
这里写目录标题Nacos简介为什么叫NacosNacos是什么Nacos能干嘛安装并运行NacosNacos作为服务注册中心1.导入依赖父POM子POM2.配置文件启动类业务类Nacos负载均衡各大注册中心对比Nacos作为配置中心创建nacos-config-client模块在Nacos中添加配置Nacos的动态刷新配置Nacos简介为什么叫NacosNaming和Configuration的前两个字母,最后的s为service。Nacos是什么Nacos 致力于帮助您发现、配置和管理微服务。N
2020-10-17 20:13:10
477
1
原创 Git常用命令
前言掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~文章目录Git是什么?Git的相关理论基础日常开发中,Git的基本常用命令Git进阶之分支处理Git进阶之处理冲突Git进阶之撤销与回退Git进阶之标签tagGit其他一些经典命令Git是什么在回忆Git是什么的话,我们先来复习这几个概念哈~什么是版本控制?百度百科定义是酱紫的~版本控制是指
2020-10-17 10:21:42
253
原创 JVM(二)垃圾回收
垃圾回收垃圾回收垃圾回收相关面试题1.如何判断对象可以回收1.1引用计数法1.2 可达性分析算法1.3四种引用2.垃圾回收算法2.1标记清除2.2标记整理2.3复制3.分代垃圾回收4.垃圾回收器4.1串行(Serial+Serial Old)4.2吞吐量优先(parallelGC)4.3响应时间优先(CWS)5.垃圾回收调优垃圾回收堆存在垃圾回收机制,垃圾回收相关面试题简述Java垃圾回收机制在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收
2020-08-16 21:16:53
212
原创 java并发编程之线程池
线程池线程池状态构造方法线程池的工作方式创建线程池的方法newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool线程提交任务的方法关闭线程池线程池是如何实现的线程池的好处处理线程池的异常线程池状态ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态,低 29 位表示线程数量RUNNING 正在运行SHUTDOWN 不会接受新任务,但会处理阻塞队列中的任务
2020-08-06 13:17:49
88
原创 java实现生产者消费者问题
777_yL何为生产者消费者模式java实现生产者消费者问题具体代码何为生产者消费者模式所谓生产者消费者模式,即N个线程进行生产,同时N个线程进行消费,两种角色通过内存缓冲区进行通信。优点: 极大的解决了代码之间的耦合程度解释:之前我们写的代码可能是这样的,有A和B两个功能代码处理数据,B代码的执行必须要依赖于A代码才能执行完B的功能,即A耦合于B。显然这严重影响B代码的生产,而且如果产生错误的话,也不容易及时的排查。采用生产者消费者模式,A代码将处理好的数据交给缓存区,B代码直接从缓存区拿取数
2020-08-01 10:32:27
441
原创 redis配置文件详解
# Redis configuration file example.## Note that in order to read the configuration file, Redis must be# started with the file path as first argument:## ./redis-server /path/to/redis.conf # Note on units: when memory size is needed, it is possible to
2020-07-31 20:38:18
382
原创 深入了解synchronized(二)锁优化策略
777_yLsynchronized原理进阶轻量锁锁膨胀自旋优化锁消除锁粗化偏向锁synchronized原理进阶JDK 6 对 synchronized 做了很多优化,引入了自适应自旋、锁消除、锁粗化、偏向锁和轻量级锁等提高锁的效率,锁一共有 4 个状态,级别从低到高依次是:无锁、偏向锁、轻量级锁和重量级锁,状态会随竞争情况升级。锁可以升级但不能降级,这种只能升级不能降级的锁策略是为了提高锁获得和释放的效率。轻量锁如果一个对象虽然有多线程要加锁,但因加锁的时间错开(也就是没有竞争)我们可以用轻量锁
2020-07-31 20:31:34
156
原创 深入了解synchronized(一)基本概念和原理
这里写目录标题synchronized共享变量带来的的问题临界区 Critical Sectionsynchronized 解决方案互斥与同步synchronized语法synchronized 原理synchronized的可重入性synchronized的不公平性synchronized共享变量带来的的问题@Slf4j(topic = "c.testShare")public class testShare { static int counter = 0; //共享变量 pub
2020-07-31 14:46:36
344
1
原创 从java角度看线程的状态及状态间的相互转换
线程线程的状态NEWRUNNABLEBLOCKEDWAITINGTIMEWAITINGTERMINATED源码线程状态之间的转换情况 1 NEW --> RUNNABLE情况 2 RUNNABLE <--> WAITING情况 3 RUNNABLE <--> WAITING情况 4 RUNNABLE <--> WAITING情况 5 RUNNABLE <--> TIMED_WAITING情况 6 RUNNABLE <--> TIMED_WAI
2020-07-28 19:06:19
214
原创 SpringBoot (一) @SpringBootApplication注解背后的三体结构探秘
SpringBootAppliaction@SpringBootApplication注解(基于SpringBoot 2.3.1)三体结构二级目录三级目录@SpringBootApplication注解(基于SpringBoot 2.3.1)// 标注一个主程序类,说明这是一个SpringBoot 应用@SpringBootApplication public class Springboot07DataMybatisApplication { public static void mai
2020-07-23 10:08:23
188
原创 java模拟客户端请求工具类HttpClientUtils
1.导入maven依赖 <!-- 模拟客户端 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </d
2020-07-18 14:47:16
435
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人