自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 资源 (1)
  • 收藏
  • 关注

原创 springcloud之Gateway服务网关

springcloud-gateway

2023-01-06 14:50:58 677

原创 springcloud之Feign远程调用

优雅的实现http请求的发送

2022-10-31 15:36:31 73

原创 springcloud之nacos配置中心

Nacos除了可以做注册中心,同样可以做配置管理来使用。

2022-10-28 09:59:20 64

原创 springcloud注册中心之nacos

nacos

2022-10-24 11:07:27 50

原创 springcloud注册中心之eureka

SpringCloud

2022-10-21 09:30:46 23

原创 微服务的概念和微服务技术的对比

微服务技术

2022-10-16 16:21:05 33

原创 js返回上一页并刷新的几种方法

js返回上一页并刷新的几种方法

2022-09-15 09:58:41 1382

原创 Tomcat请求处理流程源码

Tomcat中处理HTTP请求的模块为connector模块,Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后再交给Connector返回给客户端。一、Connector模块1.1 Connector的结构Connector的结构图如上所示,connector将在某个指定的端口上监听客户的请求,把从socket传过来的数据封装成request对象传递给container处理,并从container获得响应返

2022-05-02 12:25:42 228

原创 Tomcat启动过程源码

1.启动的入口 Tomcat服务启动的脚本是startup.batset "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"rem Check that target executable existsif exist "%EXECUTABLE%" goto okExececho Cannot find "%EXECUTABLE%"echo This file is needed to run this programgoto end:okEx

2022-05-01 17:44:00 331

原创 Tomcat的实现原理

Tomcat 是一个Web容器。作为 Web 应用的容器承载着 Web 请求处理和响应的工作最开始用户通过浏览器查看诸如新闻之类的静态资源,此时就需要通过 HTTP 服务器向浏览器返回静态 HTML 资源,浏览器将解析的 HTML 呈现给使用者。这里的 Web 容器就是用来存放 HTTP 服务器,能够处理网络请求并且进行响应。随着互联网的发展,用户需求从静态资源转向了动态资源的获取,同时浏览器在资源获取的同时还会与服务端进行一些交互。由此 Web 容器的功能开始有了扩展,除了能够处理 HTTP 请

2022-04-26 17:14:23 1162

原创 Spring架构及源码分析(七) AOP

一、准备工作  在这里我先简单记录下如何实现一个aop:AOP:【动态代理】 指在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式; 1、导入aop模块;Spring AOP:(spring-aspects) 2、定义一个业务逻辑类(MathCalculator);在业务逻辑运行的时候将日志进行打印(方法之前、方法运行结束、方法出现异常,xxx) 3、定义一个日志切面类(LogAspects):切面类里面的方法需要动态感知MathCalculator.d

2021-11-29 14:31:35 103

原创 Spring架构及源码分析(六) 循环依赖

假如有TestA、TestB、TestC三个对象,其中TestA依赖TestB,TestB依赖TestC,TestC依赖TestA。下面具体通过代码分析Spring是如何解决单例通过Setter注入的循环依赖。在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry类中有几个集合类型的成员变量,用来做缓存用的需要特别留意,源码如下:public class Def...

2021-11-29 09:09:00 1438

原创 Spring架构及源码分析(五) 钩子接口

Spring 提供了非常多的扩展接口,官方将这些接口称之为钩子,这些钩子会在特定的时间被回调,以此来增强 Spring 功能,众多优秀的框架也是通过扩展这些接口,来实现自身特定的功能,如 SpringBoot、mybatis 等。1、Aware 系列接口Aware 系列接口是用来获取 Spring 内部对象的接口。Aware 自身是一个顶级接口,它有一系列子接口,在一个 Bean 中实现这些子接口并重写里面的 set 方法后,Spring 容器启动时,就会回调该 se...

2021-11-27 10:28:09 190

原创 Spring架构及源码分析(四)bean的创建流程

上篇文章中说道spring创建容器过程中refresh方法中调用obtainFreshBeanFactory()方法,obtainFreshBeanFactory执行完 之后,Bean 的名称就被放入了beanDefinitionNames中,Bean 对应的 BeanDefinition被放入了beanDefinitionMap中。然后refresh方法中的后续方法会从这两个容器中获取beandefination信息来实例化bean对象。 下面看一下bean的实例化流程...

2021-11-26 10:50:48 151

原创 Spring架构及源码分析(三)Beandefination

在上篇文章中,我们讨论了 refresh 的前四个方法,主要是对 ApplicationContext 上下文启动做一些准备工作。接下来对invokeBeanFactoryPostProcessors 方法进行讨论,但该方法涉及 Spring 中一个非常重要的概念: BeanDefinition,所以,这里先对 BeanDefinition 进行讨论,这样也有利于完善 Spring 的知识体系。 首先看一下Spring一个大概的流程处理过程。 读取XM...

2021-11-22 09:57:03 783

原创 Spring架构及源码分析(二)核心容器 - ApplicationContext上下文启动准备

前面介绍了 Spring 容器,其核心可归纳为两个类: BeanFactory 和 ApplicationContext,ApplicationContext 继承自 BeanFactory ,其不仅包含 BeanFactory 所有功能,还扩展了容器功能。ApplicationContext 核心其实是 refresh 方法,容器一系列功能都在该方法中实现,如:注册 Bean、注入 Bean 等。整体流程refresh 方法定义在 ConfigurableAppli...

2021-11-11 15:25:06 2555

原创 Spring架构及源码分析(一)Spring整体架构和容器基本实现

Spring整体架构Spring框架是一个分层架构,包含一系列的功能要素,包括大约20个模块,被总结为以下几个部分:(1)Core Container:包括Core、Beans、Context、Expression language   Core:主要包含Spring框架基本的核心工具类。  Beans:包含访问配置文件、创建和管理bean以及进行IOC/DI操作相关的所有类 Context:提供一种类似于JNDI注册器的框架式的对象访问方法。ApplicationCon...

2021-11-03 20:08:44 979

原创 Dubbo架构及源码分析(五)服务发现

4.消费者是如何调用的 我们先看下消费者的配置 然后我们回到最开始xml解析的过程 看到消费者的reference标签对应的是ReferenceBean,我们打开ReferenceBean ReferenceBean跟serviceBean是差不多的,只不过只实现了ApplicationContextAware,Initializin...

2021-10-04 15:57:30 56

原创 Dubbo架构及源码分析(四)服务暴露

本篇文章主要是阅读了dubbo官方文档:http://dubbo.apache.org/zh-cn/docs/user/quick-start.html关于服务的暴露和引用,感觉很多细节还不是十分清楚,所以决定从自己手上的项目看起,然后一步步探究其中的实现,顺便记录下这个过程中学到的其他知识,由于dubbo是一个很成熟的框架了,用到的技术也很多,里面定义了很多类和接口十分复杂,所以我一步步去分析篇...

2021-10-04 15:55:24 75

原创 Dubbo架构及源码分析(三)启动解析、加载配置信息

Container详解Dubbo的Container是一个独立的容器,因为Dubbo服务通常不需要部署在Web容器(如Tomcat、JBoss等)中,没有必要用Web容器去加载服务,服务容器只是一个简单的Main方法,并且在一个简单的Spring容器用于暴露服务。org.apache.dubbo.container.Container是服务启动的主类源码:package org.apache.dubbo.container;import org.apache.dubbo.common.ex

2021-09-30 20:07:22 275

原创 Dubbo架构及源码分析(二)框架设计

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述。总体架构Dubbo的总体架构,如图所示:Dubbo框架设计一共划分了10个层,而最上面的Serv

2021-09-30 19:12:14 71

原创 Dubbo架构及源码分析(一)RPC原理

rpc原理:首先了解什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。比如说,一个方法可能是这样定义的:Employee getEmployeeByName(String fullName)那么:首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里...

2021-09-26 11:06:17 105

原创 JAVA动态代理

一、代理模式介绍代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。简言之,代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。代理类和被代理类通常会存在关联关系,代理类本身不实现服务,而是通过调用被代理类中的方法来提供服务。举个例子,我们生活中经常到火车站去买车票,但是人一多的话,就会非常拥挤,于是就有了代售点,我们...

2021-09-26 09:12:18 44

原创 Java中的反射机制

一、什么是反射?(1)Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。(2)Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。二、为什么要用反射首先,我们拥有一个

2021-09-24 17:56:36 551 4

原创 netty框架原理及源码分析(九)粘包拆包处理方案

1. 定长协议指定一个报文具有固定长度。比如约定一个报文的长度是 5 字节,那么:报文:1234,只有4字节,但是还差一个怎么办呢,不足部分用空格补齐。就变为:1234 。如果不补齐空格,那么就会读到下一个报文的字节来填充上一个报文直到补齐为止,这样粘包了。定长协议的优点是使用简单,缺点很明显:浪费带宽。Netty 中提供了FixedLengthFrameDecoder,支持把固定的长度的字节数当做一个完整的消息进行解码。2. 特殊字符分割协议很好理解,在每一个你认为是一个完..

2021-09-10 09:57:50 52

原创 netty框架原理及源码分析(八)心跳检测机制

心跳检测一般存在于建立长连接 或者 需要保活的场景。心跳的使用场景长连接的应用场景非常的广泛,比如监控系统,IM系统,即时报价系统,推送服务等等。像这些场景都是比较注重实时性,如果每次发送数据都要进行一次DNS解析,建立连接的过程肯定是极其影响体验。而长连接的维护必然需要一套机制来控制。比如 HTTP/1.0 通过在 header 头中添加Connection:Keep-Alive参数,如果当前请求需要保活则添加该参数作为标识,否则服务端就不会保持该连接的状态,发送完数据之后就关闭连接。H...

2021-09-10 08:51:33 180

原创 netty框架原理及源码分析(七)Netty启动流程及源码分析

Netty有一个标准的模板工具类ServerBootstrap只需要按照要求配置group即可。server端使用eventloopgroup(事件驱动器)来分发处理事件,handler就是指定谁来处理请求的,childHandler就是处理客户端连接过来的请求的处理器。channel是用来创建具体通道的实例。optoin是一些配置。下面是一个非常简单的服务端启动代码public final class EchoServer { static final int PORT = I

2021-09-08 09:22:35 67

原创 netty框架原理及源码分析(六)Netty模型

Netty 的设计主要基于主从 Reactor 多线程模式,并做了一定的改进。简单版本的 Netty 的模样如下:关于这张图,作以下几点说明:1)BossGroup 线程维护 Selector,ServerSocketChannel 注册到这个 Selector 上,只关注连接建立请求事件(相当于主 Reactor)。2)当接收到来自客户端的连接建立请求事件的时候,通过 ServerSocketChannel.accept 方法获得对应的 SocketChannel,并封装成 NioSo.

2021-08-31 14:15:49 64

原创 netty框架原理及源码分析(五)Reactor模型

传统IO模型: 流程: 1.read:从socket读取数据。 2.decode:解码,因为网络上的数据都是以byte的形式进行传输的,要想获取真正的请求,必定需要解码。 3.compute:计算,也就是业务处理。 4.encode:编码,同理,因为网络上的数据都是以byte的形式进行传输的,也就是socket只接收byte,所以必定需要编码。 5.send: 输出数据到socket. 传统...

2021-08-17 14:08:37 70

原创 netty框架原理及源码分析(四)零拷贝

由于存在用户空间和内核空间, 一般情况下读取文件需要将文件从硬盘读取到内核空间, 再将数据复制到用户空间, 写文件时, 需要将文件从用户空间复制到内核空间,再将数据从内核空间写入硬盘. 在某些情况下, 用户空间只是临时的中介内存, 复制多了两次, 造成了不必要的性能浪费. 其中,用户空间和内核空间的上下文切换也是需要消耗性能的.传统IO 模型上图中,上半部分表示用户态和内核态的上下文切换。下半部分表示数据复制操作。下面说说他们的步骤: read 调用导致用户态到内核态的一次...

2021-08-12 14:44:41 1564

原创 我和我的技术公众号

如感兴趣,烦请关注

2021-08-12 08:59:01 38

原创 netty框架原理及源码分析(三)用户态和内核态

内核态与用户态:代表了cpu的两种工作状态1.内核态:操作系统运行程序,所以可以操作计算机硬件工作。2.用户态:应用程序运行程序,所以无法操作计算机硬件工作。C P U 指令集权限在说用户态与内核态之前,有必要说一下C P U 指令集,指令集是C P U实现软件指挥硬件执行的媒介,具体来说每一条汇编语句都对应了一条C P U 指令,而非常非常多的C P U 指令在一起,可以组成一个、甚至多个集合,指令的集合叫C P U 指令集。同时C P U 指令集有权限分级...

2021-08-11 14:20:17 117

原创 netty框架原理及源码分析(二)nio实现群聊

NIO群聊系统 简单的编写一个群聊系统、实现服务器端和客户端的群聊系统,实现非阻塞方式的数据简单通讯服务端功能最基本的当然是注册功能,也就是将serverSocketChannel注册进Selector,Selector负责调度事件、监听、读取客户端发来的消息、收到客户端的信息后将其转发到其它客户端,完成群聊功能客户端功能连接服务端,注册进Selector、读写消息工作流程如下:服务端源码package com.hecl.des...

2021-08-11 14:07:17 51

原创 netty框架原理及源码分析(一)nio

nio: 同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理. 同步非阻塞 IO 的核心在于使用一个 Selector 来管理多个通道SocketChannel,将各个通道注册到 Selector 上,指定监听的事件。之后可以只用一个线程来轮询这个 Selector,看看上面是否有通道是准备好的,当通道准备好可读或可写,然后才去开始真正的读写,这样速度就很快了。我们就完全没有必要给每个通道都起一...

2021-08-11 10:18:33 66

原创 element-ui tree 过滤加载所有子节点

element-ui tree 节点过滤加载对应子节点方法,官网例子,不会返回过滤节点的子节点。而我们一般实际业务中,需要搜索到其下所有的子节点实现方法如下(修改filterNode方法即可,注意注意:filterNode方法有三个参数) filterNode(value, data, node) { return value && this.getHasKeyword(value, node); }, getHasKeyword(value,.

2021-07-01 16:13:13 336 1

原创 Apollo 架构

一、介绍 Apollo(阿波罗)[参考附录] 是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。 Apollo 目前在国内开发者社区比较热,在 Github 上有超过 5k 颗星,在国内众多互联网公司有落地案例,可以说 Apollo 是目前配置中心产品领域 Number1 的产品,其成熟度和企业...

2021-06-25 09:33:34 1449

原创 element-ui el-table表格实现吸顶效果

element-ui el-table表格实现吸顶效果,及 position: sticky; 的使用代码例子<template> <div> <div> sadf </div> <div> dddd </div> <div class="sticky-head"> <el-table v-generate-uu

2021-06-24 10:51:05 2336 2

原创 elementui el-table 横向滚动条固定在屏幕底部

elementui el-table 横向滚动条固定在屏幕底部 问题场景 因为表格的列数多,所以table必然会出现横向滚动条。当行数过多时,出现纵向滚动条,操作时,就需要先滚动到表格底部,然后进行左右的拉动,这样是用户操作很不方便。 应对方案 当数据过多,table的X轴滚动条不在可...

2021-06-24 10:26:28 5604 2

原创 vscode连不上扩展商店

文件 =》首选项 =》设置 =》应用程序 =》代理服务器            如下图,一开始选的是override ,选了 on 就好了。

2021-06-16 20:17:07 2106 6

原创 CSDN的bug

@CSDN的bug工作认证所属行业没有回显

2021-03-25 08:43:22 85

dubbo示例代码dubbo-sample

dubbo示例代码dubbo-sample

2022-08-05

空空如也

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

TA关注的人

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