自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 (策略模式+工厂模式)干掉if-else,让代码更优美

业务场景: 用户生成订单需要调用支付接口,传统做法是if-else判断用户支付方式,调用不同的支付方式,这种做法无疑会造成大量的判断代码冗余,如果增加业务逻辑或新增支付方式需要修改代码,不利于代码的扩展性。...

2021-04-21 15:44:33 567

原创 SpringCloud之OpenFegin微服务调用

什么是FeginFeign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。Feign是一种声明式、模

2020-08-19 17:49:18 934

原创 springcloud之Ribbon远程调用【手写轮询算法】

什么是RibbonSpringCloud Ribbon是基于Netfix Ribbon实现的一套客户端负载均衡算法和远程服务调用的工具,Ribbon是Netfix公司发布的开源项目,主要功能是提供客户端的负载均衡算法及远程服务调用。Ribbon客户端组件提供了一系列完善的配置项(超时连接,重试机制等…),只要在配置文件中列出LoadBalancer的机器,Ribbon会自动帮助你基于某种规则(轮询)去远程调用,那么使用Ribbon很容易实现自定义的负载均衡策略。客户端负载均衡和服务端负载均衡服务端负

2020-08-18 10:41:01 627

原创 SpringCloud之Eureka实现服务治理高可用

什么是服务治理在传统MVC架构的项目中,服务调用往往都是一对一的,这种服务调用关系比较简单同时也很好管理,但是随着业务规模越来越大,一个系统被拆分成多个模块,在不同的模块中进行RPC远程调用,管理每个服务于服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务之间的依赖关系,可以实现服务调用;负载均衡;集群容错等,实现服务发现和注册。Spring Cloud封装了Netflix公司开发的Eureka模块来实现服务治理。Eureka架构图Eureka包含两个组件:Eureka Client(客户

2020-08-13 16:55:36 1133

原创 史上最全Docker容器知识整理【精华内容】

为什么会有docker技术的出现?一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从...

2020-04-24 16:52:15 1729

原创 一文搞懂WebService基于CXF框架实现[JAX-RS]

前言上一篇文章我们了解JAX-WS基于SOAP(面向简单对象访问协议)可以转化为XML数据格式进行远程调用,WSDL文档可以帮助我们清楚的了解到数据解析格式和要求,有兴趣的同学可以点击一文搞懂WebService基于CXF框架实现[JAX-WS]什么是Restful架构风格REST 全称是 Representational State Transfer(表述性状态转移),是一种软件架构风格...

2020-04-05 17:40:01 955

原创 一文搞懂WebService基于CXF框架【jax-ws】

什么是服务中间件WebService中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。WebService作用是什么基于Web的服务:服务器端提供一些资源让客户端应用访问一个跨语言、跨平台的规范多个跨平台、跨语言的应用间通信整合的方案W...

2020-03-30 12:26:31 2244 2

原创 你不知道系列--Spring IOC的秘密

什么是IOC控制翻转?Spring作为常用框架,面试的时候经常会有面试官问,Spring IOC了解吗?作为面试者回答:这个我知道,Spring IOC控制翻转,就是把实例化的对象交给Spring容器来实始化。 面试官继续问:哪里说说IOC控制翻转有什么作用(优点),是怎么实现的?作为面试者:enmmmm…这个时候就很尴尬了。任何事情不能局限于表面,需要有求知意识,尽自己能力和理解去探求真相,...

2020-03-23 19:43:06 240

原创 你不知道系列--Spring是如何加载配置文件

Spring如何加载配置文件面试的时候经常会有面试官问Spring知识点,面试官问到Spring是如何加载配置文件的,流程清楚吗?求职者:在web.xml中会指定pring配置文件路径,就会实现加载了。面试官:那你能说说流程吗?求职者:emmmm…这个时候就会很尴尬了。任何事情不能局限于表面,需要有求知意识,尽自己能力和理解去探求真相,当然这个也不是一蹴而就,是一个循序渐进的过程,重要的是在这...

2020-03-21 18:22:10 615

原创 来玩二叉树【NO.2】--二叉查找树

前序昨天我们分析了树形结构和特点,特别是二叉树结构和特点,手动创建了一个二叉树,并实现了先序,中序,后序三种遍历方式,那么今天就先来一个动态创建二叉树,并且是一个二叉查找树。什么是二叉查找树?二叉查找树是一种特殊的二叉树特点:左侧树节点全部比根节点小,右侧树节点全部比根节点大。任意一个节点左儿子节点小,右儿子节点大。通过这个结构,查找一个数将会非常方便。来一个动态创建的二叉查...

2020-03-16 17:59:24 253 1

原创 来玩二叉树【NO.1】--之遍历算法

什么是树形结构?树是一种非线性的数据结构,相对于线性的数据结构(链表、数组)而言,树的平均运行时间更短(往往与树相关的排序时间复杂度都不会高)那什么又是线性结构?线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的(类似数组),链式存储的线性表称为链表,...

2020-03-15 16:33:57 270 2

原创 来玩二分查找[NO.2]--左侧(右侧)边界的二分搜索

什么是左侧(右侧)边界二分查找上一篇博客,细诉了二分查找的细节和实现逻辑,当时存在局限性,比如有一个数组int[] arr={1,2,2,2,3,5,7},目标num=2,返回索引是3,假如需要返回最左侧索引(1)或最右侧的索引(3),这样的话普通二分查找是无法实现的来一个左侧边界二分查找:public static int getTwoNum5(int[] arr, int num) {...

2020-03-13 18:57:04 304

原创 来玩二分查找[NO.1]

来玩二分查找二分查找是典型的看起来很普通,当时细节却很复杂的算法,可以理解为:思路很简单,细节是魔鬼,各种边界情况复杂,如果想不通不妨在纸上模拟计算。本篇博客就开始来探寻一下二分查找,常用的几个二分查找,寻找一个数,寻找左侧边界,寻找右侧边界等情况,循环结束条件是什么,索引到底是该加一还是减一等情况,分析细节及细节的差异。先来一个简单的二分查找代码public static void ge...

2020-03-12 12:21:02 145

原创 MyCAT实现分库分表,表水平切分【实例精华】

什么是水平切分?当业务数据库单表记录在千万级别以上,我们通过读写分离和垂直切分也无法解决数据库单裤读写与存储的性能瓶颈,这时随着业务数据不断快速增长,就必须对数据库中的表做水平切分,相对于垂直拆分,水平切分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某...

2020-03-09 16:14:05 1132

原创 MyCAT实现垂直切分数据库[实例精华]

为什么要做MyCAT垂直切分:当我们实现了MyCAT读写分离,主从切换的功能已经在很大程度上优化了数据库的负载能力,但是随着业务规模和用户的增长,读写分离的配置也缓解不了数据库压力,那么就需要我们针对不通模块的表进行分库处理,通过垂直切分把读写频繁访问量大的表根据模块整合单独出数据库,这样就能极大的缓解数据库访问压力。那么有人肯定会疑问,如果对数据库进行垂直切分后,业务需要join怎么办?适...

2020-03-02 12:42:42 423

原创 MyCAT实现读写分离,主从切换[实例精华]

mycat实现独写分离,首先需要mysql配置好主从复制MySQL主从复制搭建:搭建流程MyCAT读写分离和主从切换能做什么?在传统项目为了能快速实现业务系统,一般都采用三层架构(mvc),所有的模块功能集成在一起,所有的数据都放在一个数据库中,如图所示:当项目不断发展,用户量不断增加,单台应用服务器已经无法承载系统要求(一个tomcat承受访问能力有限),那么就需要引入nginx做反...

2020-02-27 14:25:57 2158

原创 MySQL 主从复制搭建【实例精华】

MySQL主从复制MySQL可以通过两种方式配置主从复制通过二进制日志(binary log)的方式;通过GTID(全局事务ID)方式,不过GTID方式仍然依赖MySQL的binary log。ps:在搭建MyCAT读写分离,主从切换,必须先搭建好MySQL主从复制搭建环境说明:主机信息ip地址说明itcast-01192.168.79.130装载mysq...

2020-02-27 11:46:10 252

原创 MyCAT安装及配置说明[精华一]

序言在之前搭建好mysql环境,正式开始mycat环境搭建以及配置说明,帮助大家更快了解mycat是什么,能做什么,后面会分别介绍实际运用的搭建:MyCAT搭建读写分离,主从切换MyCAT对数据库进行垂直切分MyCAT对数据库进行水平切分MySQL安装:Linux安装MySQL详细教程MyCat简单介绍MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,...

2020-02-26 16:08:16 797

原创 Linux下CentOS7安装MySQL

计划搭建MyCat服务,先搭建好数据库环境,共在VMwar上安装了三台Linux主机,系统为CentOS7,主机名分别为:itcast-01;itcast-02;itcast-nginx这里以itcast-02为例搭建数据库的全流程博客编写不易,看过请点赞安装配置Mysql大体步骤为三步下载数据库的压缩包或二进制包,可以在linux用wget或yum下载,也可以外网下载再传到Linux...

2020-02-23 13:10:30 309

原创 面试官问我--JVM 七种垃圾收集器解析

垃圾检测和收集算法只是内存回收的方法论,而垃圾收集器才是内存回收的具体实现(可理解为“接口”与“实现类”的关系)。ps:GC垃圾回收(垃圾检测-回收算法):https://editor.csdn.net/md/?articleId=103819619Serial 收集器Serial 收集器是最基础、历史最悠久的收集器。特点:单线程收集,且垃圾收集时,必须暂停其他所有的工作线程(Stop ...

2020-02-22 10:36:42 313

原创 mysql分页查询优化,大数据量优化

传统的mysql分页查询select * from table limit n , mMySQL 执行此类SQL时需要先分页(默认一页1000条数据)通过全表扫描到N行,然后再去取M行。对于此类操作,获取前面少数几行数据会很快,但是随着扫描的记录数越多,SQL的性能就会越差,因为N的值越大,MySQL需要扫描越多的数据来定位到具体的N行,这样耗费大量的 IO 成本和时间成本。特别是上线后数据...

2020-02-20 11:15:11 362

原创 分布式事务,基于MQ实现最终一致性分布式事务

什么是分布式事务传统的事务是基于项目耦合并且是单数据库的本地事务,简单的来说,分布式事务就是实现跨服务器和数据库的事务支持CAP 定理,又被叫作布鲁尔定理。对于设计分布式系统(不仅仅是分布式事务),CAP 就是你的入门理论。C (一致性):对某个指定的客户端来说,读操作能返回最新的写操作。对于数据分布在不同节点上的数据来说,如果在某个节点更新了数据,那么在其他节点如果都能读取到这个最新的数...

2020-02-15 11:46:16 3896

原创 SpringBoot整合Mybatis配置pagehelper分页插件

引入pagehelper依赖<!--pagehelper分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <v...

2020-02-13 11:33:39 595

原创 SpringBoot整合Redis模板

springboot对RedisTemplate的自动配置自动配置类RedisAutoConfiguration 源码:@Configuration@ConditionalOnClass(RedisOperations.class)@EnableConfigurationProperties(RedisProperties.class)@Import({ LettuceConnectio...

2020-02-08 11:00:03 239

原创 springboot自定义时间类型转换器

需求分析由于日期数据有很多种格式,所以springboot没办法把字符串转换成日期类型。所以需要自定义参数绑定。前端控制器接收到请求后,找到注解形式的处理器适配器,对RequestMapping标记的方法进行适配,并对方法中的形参进行参数绑定。在springmvc这可以在处理器适配器上自定义Converter进行参数绑定。自定义类StringToDateConverter 实现转换器Conve...

2020-02-08 10:35:42 1404

原创 一文了解Spring--Bean生命周期

Bean获取和实例化ApplicationContext与BeanFactory关系ApplicationContext它是扩展BeanFactory接口。BeanFactory它采取延迟加载的方案,只有真正在getBean时才会实例化Bean在开发中我们一般使用的是ApplicationContext,真正使用的是其实现类,FileSystemXmlAppliCationContex...

2020-02-06 10:42:47 265

原创 多线程volatile修饰符

什么是volatile?一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。  2)禁止进行指令重排序。volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略。vol...

2020-02-04 11:05:53 426

原创 分布式项目,分布式Session

分布式系统Session同步问题在搭建完集群环境后,不得不考虑的一个问题就是用户访问产生的session如何处理。如果不做任何处理的话,用户将出现频繁登录的现象,比如集群中存在A、B两台服务器,用户在第一次访问网站时,Nginx通过其负载均衡机制将用户请求转发到A服务器,这时A服务器就会给用户创建一个Session(session用于保存用户信息)。当用户第二次发送请求时,Nginx将其负载均衡...

2020-02-04 10:03:56 240

原创 一文搞懂面试必备问题-悲观锁和乐观锁

java常用锁synchronized和LockLock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定,但是使用Lock则不行,lock是通过代码实现的,要保证锁定一定会被释放,就必须将...

2020-01-25 17:43:05 210

原创 基于SOA架构的Dubbox服务中间件和Zookeeper注册中心

什么是SOA架构SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式(根据应用程序的不同功能单元进行拆分)。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。其实SOA架构更多应用于互联网项目开发。为什么互联网项目会采用SOA架构呢?随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流...

2020-01-13 15:41:47 637

原创 你应该知道的Dubbo

什么是dubboDubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看, Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服...

2020-01-13 14:07:24 245

原创 分布式Zookeeper集群环境搭建,API使用入门

Zookeeper 在Linux系统的安装单机系统安装前准备:安装 jdk把 zookeeper 的压缩包(zookeeper-3.4.10.tar.gz)上传到 linux 系统。 解压到指定目录 执行:tar-zxvf zookeeper-3.4.10.tar.gz -C /opt/module/修改配置:将/opt/module/zookeeper-3.4.10/conf这...

2020-01-13 11:06:56 228

原创 你应该知道的分布式Zookeeper

Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目。Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管框架,它负责存储和管理核心数据,接收观察者的注册,一旦核心数据发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的哪些观察者做出相应的反应,Zookeeper=文件系统+通知机制。Zookeeper特点一个领...

2020-01-13 09:28:14 272

原创 Java设计模式--单利模式

单例模式(Singleton)单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。省去了new操作符,降低了系统内存的使用频率,减轻GC压力。有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比...

2020-01-06 14:07:19 343

原创 表单提交防刷(重复提交,恶意提交)的方法

背景与介绍:平时开发的项目中可能会出现下面这些情况:由于用户误操作,多次点击表单提交按钮。由于网速等原因造成页面卡顿,用户重复刷新提交页面。黑客或恶意用户使用postman等工具重复恶意提交表单(攻击网站)。这些情况都会导致表单重复提交,造成数据重复,增加服务器负载,严重甚至会造成服务器宕机。因此有效防止表单重复提交有一定的必要性。解决方案通过JavaScript屏蔽提交按钮(不...

2020-01-06 11:43:19 1654 1

原创 实现分布式锁,分别基于(数据库锁表,redis缓存,zookeeper)

我们为什么需要分布式锁?在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。但是到了分布式...

2020-01-06 10:46:24 538

原创 分布式项目 cookie共享方案

cookie的路径问题:什么是cookie的路径问题?浏览器在向服务器发送请求时,会比较cookie的路径要与访问的服务器的路径是否匹配,只有匹配的cookie才会发送给服务器。cookie的默认路径默认路径等于创建该cookie的组件路径匹配规则浏览器要访问的路径必须是cookie的路径或者其子路径时,才会发送对应的cookied,设置cookie的路径cookie.setPath(St...

2020-01-06 09:18:27 818

原创 密码加盐,多重加密

用户密码两次MD5加密:原因:一次MD5加密,很容易被反编译破解出来,通过前台进行一次MD5加密和后台一次MD5加密,可以有效保证数据的安全性用户注册逻辑:前台获取用户输入的密码(inputPassword),通过固定的salt(盐)例如:String salt=1234abc,通过一定顺序进行组合例如:salt.charAt(1)+salt.charAt(3)+inputPassword...

2020-01-06 09:07:21 1033

原创 GC垃圾回收机制(垃圾检测-回收算法)

垃圾检测 回收算法垃圾收集器一般必须完成两件事:检测出垃圾;回收垃圾。怎么检测出垃圾?一般有以下几种方法:引用计数法:给一个对象添加引用计数器,每当有个地方引用它,计数器就加1;引用失效就减1。好了,问题来了,如果我有两个对象A和B,互相引用,除此之外,没有其他任何对象引用它们,实际上这两个对象已经无法访问,即是我们说的垃圾对象。但是互相引用,计数不为0,导致无法回收,所以还有另一种方法:...

2020-01-03 14:23:25 1029

原创 JVM内存模型

JVM结构从左图可知,JVM主要包括四个部分:1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件到JVM的整个过程,可配合理解。 关于类的加载机制,可以参考http://blog.csdn.net/tonytfjing/article/details/472122912.执行引擎:负责执行class文件中包含的...

2020-01-03 13:59:59 108

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除