自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 资源 (3)
  • 收藏
  • 关注

原创 Java中常用的限流算法

在Java的系统中,在一些活动日或者是被黑客攻击,导致访问量突然暴增,系统承受不了巨大的流量冲击而崩溃。为了保护我们的系统,在实际开发中有四种常见的限流算法来保证系统的安全性。1 固定窗口算法固定窗口算法的原理很简单。就是在时间轴上,限制单位时间内的请求数量。实现步骤如下:1. 使用一个计数器记录单位时间内的访问数量2. 当访问数量没有达到阀值,就允许访问;当访问数量达到阀值,就拒绝访问3. 当时间窗口过去后,计数器重新计数。实现很简单,但也存在问题。假设时间窗口大小为1秒,窗口内限制的请

2021-11-24 11:51:05 2183

原创 Spring Cloud之服务注册和发现的原理解析

在Java微服务越来越火的今天。几乎什么公司都在搞微服务。而使用的比较多的就是Spring Cloud技术栈。今天就来研究一下Spring Cloud中服务注册与发现的基本原理。如下是Spring Cloud官方给的微服务架构图:今天就要研究service registry模块。大致流程如下:服务注册主要包含以下几个问题:服务注册服务续约服务下线服务失效删除对于服务注册与发现Spring Cloud官方也给出了标准的接口DiscoveryClient(服务发现) ,ServiceRe

2020-08-03 19:21:03 3196

原创 你还不懂设计模式?- 委派设计模式

委派设计模式(Delegate Pattern)是Java中使用的比较多的一种设计模式。意思就是将一组实现了相同接口的类委派给另一个子类(这个类是委派类,不需要实现具体的业务逻辑)来管理。常用与管理接口的多个实现类。控制调用的逻辑。常见结构如下:举个栗子,场景1:例如在一个科技公司,各个员工协同做项目开发。分析: 这个场景里面统一的接口是员工。 各个员工是不同的实现类。项目经理是委托类(也是员工)。项目委托给项目经理后, 他负责协调其他员工来进行项目开发。① 创建统一接口 Staffpublic

2020-08-03 19:19:59 273

原创 你还不懂设计模式?- 享元设计模式

享元模式(Flyweight Pattern),顾名思义。享是共享的意思。元是元数据。在Java程序设计中。主要用于减少创建对象的数量,以减少内存占用和提高性能。这种设计模式类似与缓存的设计。在Java中的String字符串缓存池。数据库连接池,线程池也都是是基于这种思想。...

2020-07-30 12:26:39 206

原创 你还不懂设计模式? - 桥接设计模式

桥接模式(Bridge Pattern),顾名思义。类似与桥的功能。联通两个不同领域。其实这个设计模式的作业也是如此。在Java世界中。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。常见结构如下:可以看到,桥接模式的核心在于抽象类依赖接口的具体实现。这样就能使得接口的实现类和抽象类可以自由变化。抽象类来维护与接口的关系。还是举个栗子。场景①:用Java语言来描述彩笔的关系。 分析: 彩笔是一个接口。不同颜色的彩笔是其子类。代码实现如下:彩笔接口public inte

2020-07-29 17:09:53 197

原创 你还不懂设计模式? - 组合设计模式

组合模式(Composite Pattern),顾名思义。是关于类的结构的一种设计模式。是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。最常见的树形结构设计如系统菜单,组织机构等等。典型的结构图如下:实现如下:@Datapublic class SysMenu implements Serializable { private static final long serialVersionUID = 1L; /** *

2020-07-29 12:54:20 155

原创 Dubbo之HashedWheelTimer实现原理

11111111111111111111111111

2020-07-28 19:58:32 777

原创 你还不懂设计模式? - 策略设计模式

策略设计模式(Strategy Pattren)。当系统中有很多具有相同行为的类时。可以使用策略模式,使用一个类将它们封装起来统一调用,在不同的场景下调用不同的类来完成这个功能。结构图如下:...

2020-07-28 10:23:07 183

原创 你还不懂设计模式? - 门面设计模式

Facade设计模式,是一种窗口设计模式。它可以封装系统内部复杂的API以及接口调用规则。对外提供统一的简单的接口。它将系统内业务逻辑复杂的API整理出来,使调用者无需关注程序执行的具体逻辑。因此在大型的业务系统中。对一些复杂的业务逻辑接口使用Facade设计模式,构建一个Facade 。 可以让系统维护变得轻松很多。facade模式的结构图大致如下(实际类的依赖关系可以更复杂):...

2020-07-27 19:42:39 144

原创 Spring中对于循环依赖(Circular dependencies)的处理

Spring框架最核心的特点就是控制反转和依赖注入。控制反转的意思就是将创建对象的动作(new Class())交给Spring容器处理。接下来就是依赖注入。当spring容器创建一个对象时。如果对象中存在一些需要赋值属性。它会自动帮我们将对应的属性的值注入进去。遮掩就能得到一个完整的对象实例。今天主要讨论spring容器在依赖注入时。对循环依赖的处理。依赖注入的流程① 使用描述所有 bean 的配置元数据创建和初始化。配置元数据可以通过 XML、Java 代码或注释指定。ApplicationCo

2020-07-24 18:04:29 1974

原创 Dubbo使用nacos作为注册中心原理剖析

Nacos是阿里自研的,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 。作为微服务注册中心,它的目标是淘汰目前流行的eureka,zookeeper等组件。现在学习它真的很有必要。这里就还是从源码的角度出发,看一下Spring Boot是如何和它整合的。详细教程官网已经写的非常明确,这里就不多说了。Nacos中文官方文档下载nacos项目版本:(目前真对spring-cl...

2020-07-23 17:06:15 9350 1

原创 你还不懂设计模式? - 模版设计模式

模板模式(Template Pattern)顾名思义,就是定义一个操作流程的模版。然后不同子类去重写指定的模版方法。适用于能够确定操作流程。不能确定具体操作的场景。在父类中定义处理流程的框架,在子类中实现具体的操作细节。这种代码编写方式就是模版设计模式。模版设计模式的还可以抽象出公共的逻辑。而把一些不同的操作留给子类实现。在Java的各个技术框架中有着广泛的应用。还是举个简单栗子。比如我每天吃饭的过程。平时吃的简单点,过节的时候吃的好一点。我们可以这样来实现。① 创建吃饭流程的模版, 先吃早饭,再

2020-07-22 23:43:58 260 3

原创 你还不懂设计模式? - 适配器设计模式

适配器设计模式(Adapter Pattern),顾名思义。创建一个类的适配器使之能够满足原本不兼容的接口需求。适配器模式中两个重要角色:Adaptee(被适配者) , Adapter(适配者) ,Target(适配的接口或者类)实现适配器模式方式主要有以下两种:委托方式,结构图如下:继承模式结构图如下:这里推荐使用方式1经典问题,给手机充电。 我国民用标准电压为220V(交流电) , 手机充电只需要5V(直流电) .因此就需要一个充电器(适配器)来做电流和电压的转换。

2020-07-22 22:47:51 138

原创 Spring Cloud 2.2.0.RELEASE之Nacos配置中心原理解析

Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。在应用启动的时候,通过网络请求,从配置服务器上拉去项目的配置。这样可以集中管理项目的配置文件,并且可以保护项目中重要配置的安全。大致的流程如下:可以看到,配置中心的核心部分在与配置中心的实现。现在流行的配置中心有zookeeper,eureka,consul,apollo,nacos等等。其中zookeeper是没有管理界面。eureka配置界面功能太单一,且已经停止更新。也就是说实际项目中最好从剩下三个去选。这里

2020-07-22 10:31:32 1233

原创 你还不懂设计模式? - 装饰者模式

装饰者模式( Decorator Pattern),在不改变原有对象的基础上,将功能附加到原有对象上。比继承更有弹性。最典型的使用是Java源码中的IO操作相关类。如InputStream

2020-07-21 11:11:41 130

原创 你还不懂设计模式? - 代理模式

代理模式(Proxy Pattern),就是使用一个代理类来代理另外一个类的功能。在Java相关的技术框架中使用非常广泛。搞清楚代理模式,是读懂Java相关技术框架源码的基础。下面来看一下代理模式实现的几种方式:静态代理先创建一个代理接口:public interface IUserService { void say(String words);}再创建一个接口的实现类public class UserService implements IUserService {

2020-07-20 15:02:04 133

原创 你还不懂设计模式?- 原型模式

原型模式(Prototype Pattern)在实际的使用中无处不在。比如spring容器中的bean,就有两种存在方式,单例和原型。下面就来仔细看看。在spring容器中默认使用单例模式。如下: public static void main(String[] args) { BeanFactory factory = new AnnotationConfigApplicationContext(Config.class); Student student1 =

2020-07-16 18:00:19 194

原创 你还不懂设计模式? - 建造者模式

建造者模式,顾名思义,也是创建对象实例的一种方式。当一个Java对象中存在多个类型相同熟悉,或者Java对象的实例化的过程比较复杂时,推荐使用使用建造者模式来构建对象。当Java对象的属性在4个以上,且构建实例需要四个以上相同类型参数时。如果使用构造方法的方式去实例化一个对象。这样的代码很容易难读。如果在构造器中写错了参数的位置。编译器是不会报错的。这样很容易产生错误的结果!public class Student implements Serializable { private stat

2020-07-09 11:43:28 140

原创 你还不懂设计模式? - 单例模式

单例模式(Singleton Pattern),顾名思义,要确保Java类在任何情况都只有一个唯一的实例。看似简单,实际道道蛮多。下面来仔细分析下单例模式的几个实现方式。懒汉单例模式public class LazySingleton { private LazySingleton(){ System.out.println("LazySingleton is created !"); } /** * 对于静态成员变量确保初始值为null,保证系统

2020-07-08 10:07:11 196

原创 Dubbo2.7.6之服务暴露详细过程解析

请问

2020-07-08 09:46:51 1246

原创 你还不懂设计模式? - 抽象工厂模式

抽象工厂模式(Abstract Factory Pattern),顾名思义,是对工厂的抽象。是工厂方法模式的进一步抽象。也可以说是对工厂方法模式的包装。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。先来看一下UML图:可以看到,就是使用FactoryCreator来创建不同类型的工厂类。创建了工厂类了之后的逻辑与工厂方法中的一致。有疑问可以去看上一篇工厂方法模式。这一点还是在日志模块有很好的应用:如下是org.slf4j.Log

2020-07-07 10:40:14 1010

原创 你还不懂设计模式? - 工厂方法模式

工厂方法模式是创建对象的一种方式。使用场景:需要频繁创建对象。且创建对象需要大量的代码逻辑应用层不依赖与产品实例的创建和实现细节通过接口的子类来指定创建哪一个对象来看一下工厂方法模式在实际应用中的使用。如在常见的日志模块中。现在Java Web应用使用的日志都是基于slf4j 。看在这里面的实现: private final static Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);对应的实现如下: pu

2020-07-07 09:36:18 1086

原创 使用sonarqube进行代码review

在一个项目组或者整个公司的开发当中,由于开发人员的开发能力不同,写出的代码或多或少或有很大的差异。并且会不经意间留下很多bug。 如果每周都花时间去看所有人员的编码质量将会是一件非常吃力的事儿,项目经理基本会给累死。所以我们得借助工具。现在市面上代码质量监测工具有很多,今天就来看一下其中比较出名的SonarQube在检查Java项目代码中的使用。由于sonarqube企业版收费,且高版本的对mysql的兼容不好,今天就以sonarqube6.7.7社区版为例来进行一次代码质量检查。首先下载安装包,官方下

2020-06-10 11:12:11 781

原创 DispatcherServlet工作原理解析

近年来由于Spring Boot的流行。Spring MVC已经完全将Struts2框架淘汰。成为了Java Web应用主流的MVC框架。虽然一直在使用Spring MVC,也大致知道其工作原理,但是一直没有抽时间来全面的总结一下。今天就下个决心,结合最新版的Spring Boot2.3.0的源码来研究一下Spring MVC的核心原理之DispatcherServlet的工作流程。...

2020-06-09 15:50:43 2532 1

原创 一步一步带你理解Java8 JVM调优

做了五年Java开发,一直有了解jvm的调优知识点,但在实际项目中确很少去对jvm进行调优,今天就下个决心,好好研究一下jvm调优相关的知识点。现在最常用的还是Java8 , 那就以Java8为例来做调优实践。以下是Java虚拟器启动时内存条的大致结构图:在对jvm进行优化时,最主要的就是对堆内存和Java虚拟机栈的大小进行优化。首先还是看一下oracle官方给的调优说明文档:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gct

2020-06-05 17:29:48 2061 1

原创 Dubbo2.7.6之服务暴露流程

在上一篇文章Dubbo2.7.6启动原理之Provider中我已经探讨了dubbo服务启动的大致流程。可以看到,暴露服务逻辑在DubboBootstrap#exportServices()方法中。今天就来详细来探索一下暴露服务的实现细节。如下为服务暴露过程中的涉及到的主要组件:注意:一个服务可以同时以多种协议暴露一个服务可以同时注册在多个不同的注册中心每一个服务接口都会转换为对应的ServiceConfig实例如下是dubbo官方给出的服务暴露时序图:如下就是服务接口暴露过程中的转换逻

2020-05-09 16:42:43 1003 3

原创 Dubbo2.7.6启动原理之Consumer

今天来研究dubbo服务中的第二个重要角色,服务的消费者Consumer。 顾名思义。消费者就是消费服务提供者Provider提供的服务的角色。它通过订阅Provider的服务注册信息。来远程调用Provider的服务。如下图所示:在spring boot应用中是如何进行相关的工作的。下面就来详细研究一下。首先还是研究Consumer的初始化流程,在dubbo与Spring整合时,会首先向S...

2020-05-07 18:57:05 608

原创 Dubbo2.7.6启动原理之Provider

上文讲述了Config层的整理流程,这一篇继续讨论配置加载的细节,那就是今天要探讨的DubboBootstrap。Dubbo启动原理还是从源码出发,从DubboBootstrap#start()方法开始,顺藤摸瓜,查看dubbo初始化的细节原理/** * Start the bootstrap * 启动dubbo服务 */public DubboBootstrap start()...

2020-05-06 21:19:01 5859 3

原创 Mybatis3.5之拦截器Interceptor原理剖析

在Mybatis中可以使用拦截器在SQL执行之前进行一系列的自定义操作。比如数据的权限拦截,数据分页,数据执行时一些公共逻辑的植入等等。在讨论这个之前,需要了解Java的动态代理原理和责任链模式。下面继续从源码的角度来看Interceptor的实现原理,植入拦截器的核心逻辑在Configuration类中,这也是mybatis最为核心的配置类。public class Configuratio...

2020-04-22 11:27:09 1377

原创 Spring Boot 2.x整合Mybatis原理剖析

Mybatis是目前市面上使用的最多的ORM框架了,在Spring Boot项目中可以非常简单的集成。使用起来很简单,但是具体是怎么样集成的呢?这就来一探究竟!Mybatis官方文档mybatis-spring-boot-starter官方文档使用Mybatis的前提就是构建一个SqlSessionFactory实例。有两种方式:通过读取xml配置穿入一个Configuration对...

2020-04-18 13:33:40 441

原创 Spring Boot之事件原理剖析

在spring boot的启动的源码中,可以在很多个地方看到事件的应用。事件的使用在启动中占有非常核心的地位。下面我们就透过源码来分析一下Spring Boot中是如何实现事件机制的。看这个之前如果不了解事件设计模式的。可以先去看一下事件模式的原理!先看一下在spring boot启动时是如何使用事件的public ConfigurableApplicationContext run(S...

2020-04-15 19:43:34 499 1

原创 Spring Boot之SpringFactoriesLoader原理剖析

SpringFactoriesLoader是Spring框架中的加载类的核心加载器,专门用来读取classpath下各个jar包里META-INF/spring.factories目录里面的配置。学习Spring Boot实现原理,这个必须得搞清楚!官方说明: General purpose factory loading mechanism for internal use within t...

2020-04-02 20:16:57 459

原创 Spring Boot 2.2.6.RELEASE原理剖析

Spring Boot 2.2.6.RELEASE原理剖析1 Spring boot的启动原理1.1 Spring Boot的启动原理1.1.1 jar方式启动功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数...

2020-04-01 23:50:45 4555 1

原创 Mabatis基本原理 - SqlSession

的点点滴滴的点点滴滴点点滴滴

2020-01-15 13:59:28 388

原创 MyBatis基本原理概述

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。架构图以下是源码包的图:...

2020-01-14 14:28:16 480

原创 Spring Boot2.2.2版本中使用MongoDB查询计算两个点之间的距离

因现项目需求,需要计算一下给定一个坐标,到某一个地点的之间的距离,任务是存放在MongoDB的对象。由于目前百度文档中都是老版本的,没有可用的样例,老夫只好去官方网站搜寻了,最终实现了这个需求。就立刻记录一下,也帮助一些接触到MongoDB计算坐标的新人。具体需求是:给一个坐标,一个地点的ID,地点都存在MongoDB,需要查询这个坐标到给定ID的地点之间的距离。Spring Boot 官方...

2020-01-03 17:57:56 1214 2

原创 JWT在Java中的使用

这里简要总结一下JWT的使用流程,以及其实现的原理。1 JWT是什么?直接看官方解释:https://jwt.io/introduction/JWT全称是JSON Web Tokens ,也就是JSON格式数据使用加密算法加密后按照一定规则生成的一个字符串token 。既然是一个JSON,那么它就有一定的格式,它由Header,Payload,Signature三部分组成,然后使用“.”连...

2020-01-01 11:41:59 2591

原创 Java Virtual Machine知识点整理

Java JVM执行流程1 JVM的结构1.1class文件的格式1.2 数据类型1.2.1 基础数据类型和取值1.2.2 引用数据类型1.3 运行时数据区1.6 虚拟机栈帧1.7 对象的表示2 JVM调优JDK版本是1.8.0_231,以下是官方对JVM的介绍,我简单翻译了一下,将就着看吧。The Java Virtual Machine is the cornerstone of the ...

2019-12-31 09:16:11 401

原创 JMeter进行压力测试配置样例

JMeter是一款纯Java编写的,用于程序的功能和负载的!Java程序员必备神器!首先还是给下载地址下载之后解压。进入解压目录然后使用jmeter.bat 起动程序:成功起动后会出现以上两个界面,一个是命令行界面,一个图形界面 。一般情况,在图图形界面中配置相关的测试类容。下面直接举个栗子:假如我想要测试一下一个接口的抗并发能力,做如下配置1 .在TestPlan下右键新建...

2019-12-24 10:50:50 1146

原创 Arthas的使用

Arthas是阿里巴巴开源的目前比较流行,功能很前面的Java开发工具。最新版下载:下载解压后,进入目录:在windows中起动Arthas的命令是./as.bat pid1 使用 java -jar ./arthas-boot.jar 查看当前系统里面的Java进程2 使用 ./as.bat 1260 进入控制台成功则跳转到控制台:3 使用help命令查看所有支持的功能...

2019-12-23 19:21:40 1165

instantclient10.2.0.5

无需安装Oracle客户端,也能轻松连接公司远程的Oracle数据库

2018-05-28

stc单片机串口线制作

有了这份资料,你就可以自己动手制作自己的串口线了,呵呵,很有成就感吧?

2013-04-11

74系列引脚图

这是一份蛮有用的芯片资料哦 下载这份资料你将对74系列芯片的引脚有个大概的了解

2013-04-11

空空如也

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

TA关注的人

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