自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TLS/SSL协议

1、TLS协议的工作原理TSL设计目的:身份验证保密性完整性Record记录协议对称加密Handshake握手协议验证通讯双方的身份交换加解密的安全套件协商加密参数2、对称加密的工作原理1)、XOR与填充明文P和密钥K基于AES加密函数生成密文C,密文C通过网络传输给接收方,接收方拿到密文C基于相同的密钥K和AES解密函数就可以得到明文P对称加密之所以能实现同一把密钥既能加密也能解密,就是基于对称加密与XOR异或运算密钥序列1010和明文0110进行异或运

2021-02-28 14:38:53 19

原创 HTTP的缓存控制

HTTP缓存主要分为Last-Modified/Etag和Cache-Control/Expires其中Cache-Control/Expires属于强缓存,Last-Modified/Etag属于协商(比较)缓存1、Cache-Control1)、服务器的缓存控制浏览器发现缓存无数据,于是发送请求,向服务器获取资源服务器响应请求,返回资源,同时标记资源的有效期浏览器缓存资源,等待下次重用服务器标记资源有效期使用的头字段是Cache-Control,里面的值max-age=30就是资源的

2021-02-27 16:32:34 28

原创 Soul网关中的Http长轮询实现数据同步

前言Soul是一款异步的、高性能的、跨语言的、响应式的API网关,本文主要来解析Soul中基于Http长轮询同步数据的设计,下图展示了Soul数据同步的流程:Soul主要由soul-admin和soul-web两个核心模块组成,soul-admin是路由和其他信息配置的管理后台;soul-web是网关主体,用于实现路由转发等功能。soul-web实现了动态配置功能,会同步soul-admin中的路由和其他配置信息,为了提供更高的响应速度,soul-web所有的缓存配置都存在JVM的Concurrent

2021-02-22 07:39:55 31

原创 React学习笔记(二):React脚手架、React路由

3、React应用(基于React脚手架)1)、使用create-react-app创建react应用1)react脚手架react提供了一个用于创建react项目的脚手架库:create-react-app项目的整体技术架构为:react+webpack+es6+eslint2)创建项目并启动第一步,全局安装:npm i -g create-react-app第二步,切换到想创项目的目录,使用命令:create-react-app hello-react第三步,进入项目文件夹:cd hel

2021-02-15 09:36:41 106 4

原创 React学习笔记(一):组件三大核心属性、组件的生命周期

1、React入门1)、hello react<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>hello_react</title></head><body> <!-- 准备好一个容器 --> <div id="test"></div> <!-- 引入rea

2021-02-13 09:39:33 71

原创 后端的前端笔记:Vuex

1、Vuex概述Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享使用Vuex管理数据的好处:能够在Vuex中集中管理共享的数据,便于开发和后期进行维护能够高效的实现组件之间的数据共享,提高开发效率存储在Vuex中的数据是响应式的,当数据发生改变时,页面中的数据也会同步更新什么样的数据适合存储到Vuex中:一般情况下,只有组件之间共享的数据,才有必要存储到Vuex中;对于组件中的私有数据,依旧存储在组件自身的data中即可2、Vuex的基本使用1)、安装

2021-02-06 20:23:42 27

原创 Zuul路由转发源码解析及动态路由实现

本文介绍Zuul路由的源码以及实现动态路由的几种方式,可以先阅读Zuul1.x核心源码解析了解路由源码流程本文基于spring-cloud-starter-zuul(SpringCloud版本为Edgware.SR3)1、源码解析1)、路由转发route类型的SimpleHostRoutingFilter、RibbonRoutingFilter负责实际的请求,核心代码如下:public class SimpleHostRoutingFilter extends ZuulFilter { @Ov

2021-01-31 18:05:20 92

原创 Sentinel FlowSlot限流源码解析

本文主要来解析Sentinel限流核心源码,基于当前最新的release版本1.8.01、常见限流算法1)、计数器算法在指定周期内累加访问次数,当访问次数达到设定的阈值时,触发限流策略,当进入下一个时间周期清零访问次数如上图所示,限定了每一分钟能够处理的总请求数为100,在第一个一分钟内,一共请求了60次。接着到第二个一分钟,counter又从0开始计数,在一分半钟时,已经达到了最大限流的阈值,这个时候后续的所有请求都会被拒绝2)、滑动窗口算法滑动窗口算法的原理是在固定窗口中分割出多个小时间窗

2021-01-26 08:26:02 76 3

原创 Sentinel DegradeSlot熔断源码解析

本文主要来解析Sentinel熔断核心源码,基于当前最新的release版本1.8.01、Sentinel熔断机制的处理流程 达到熔断触发条件(假设触发条件为当接口每秒钟超过20%的处理产生异常,具体熔断规则由用户配置),便会开启熔断,在熔断状态下,X秒内所有该接口访问都会被Blocked快速失败(服务降级)X秒后,下一次请求接口,此时为半开状态如果请求接口成功,恢复到正常状态如果请求接口失败,回到熔断状态继续Blocked X秒2、源码解析Sentinel的熔断是由责任链中的最后一个D

2021-01-24 14:29:18 61

原创 Sentinel核心源码解析

本文主要来解析Sentinel的核心源码,当前最新的release版本1.8.0,如果你尚未了解Sentinel的核心功能,可以查看Sentinel的官方文档或者这篇文章Sentinel核心功能实战1、Sentinel案例解析 public UserOrder getUserOrderByUserId(Long userId) { ContextUtil.enter("UserService"); Entry entry = null; try {

2021-01-23 21:00:43 68

原创 设计模式:职责链模式

1、什么是职责链模式在职责链模式中,多个处理器依次处理同一个请求。一个请求先经过A处理器处理,然后再把请求传递给B处理器,B处理器处理完后再传递给C处理器,以此类推,形成一个链条。链条上的每个处理器各自承担各自的处理职责,所以叫作职责链模式在GoF给出的定义中,如果处理器链上的某个处理器能够处理这个请求,那就不会继续往下传递请求。实际上,职责链模式还有一种变体,那就是请求会被所有的处理器都处理一遍,不存在中途终止的情况2、代码实现1)、使用链表来存储处理器public abstract clas

2021-01-17 11:09:49 28

原创 后端的前端笔记:vue父子组件之间双向数据绑定问题

最近在使用element-ui的Dialog组件二次封装成独立组件使用时,子组件需要将关闭dialog状态返回给父组件,也就是实现父子组件之间双向数据绑定问题,实例代码如下:父组件:<template> <div> <el-button type="primary" @click="openDialog">点击打开Dialog</el-button> <childCompenent title="Dialog对话框" :openS

2021-01-06 08:48:15 50

原创 云原生技术公开课学习笔记:K8s网络概念及策略控制、Kubernetes Service

十、Kubernetes网络概念及策略控制1、Kubernetes基本网络模型因为容器的网络发展复杂性就在于它其实是寄生在Host网络之上的。从这个角度讲,可以把容器网络方案大体分为Underlay/Overlay两大派别:Underlay的标准是它与Host网络是同层的,从外在可见的一个特征就是它是不是使用了Host网络同样的网段、输入输出基础设备、容器的IP地址是不是需要与Host网络取得协同(来自同一个中心分配或统一划分)。这就是UnderlayOverlay不一样的地方就在于它并不需要

2021-01-05 08:58:36 77

原创 云原生技术公开课学习笔记:共享存储原理、健康检查、监控与日志

七、共享存储原理1、Volumes介绍1)、Pod Volumes首先来看一下Pod Volumes的使用场景:场景一:如果pod中的某一个容器在运行时异常退出,被kubelet重新拉起之后,如何保证之前容器产生的重要数据没有丢失?场景二:如果同一个pod中的多个容器想要共享数据,应该如何去做?以上两个场景,其实都可以借助Volumes来很好地解决,接下来首先看一下Pod Volumes的常见类型:本地存储,常用的有emptydir/hostpath网络存储:网络存储当前的实现方式有

2021-01-03 08:54:45 946 3

原创 云原生技术公开课学习笔记:应用编排与管理:Job和DaemonSet、应用配置管理

五、应用编排与管理:Job和DaemonSet1、Job1)、需求来源2)、用例解读1)Job语法上图是Job最简单的一个yaml格式,这里主要新引入了一个kind叫Job,这个Job其实就是job-controller里面的一种类型。 然后metadata里面的name来指定这个Job的名称,下面spec.template里面其实就是pod的spec这里面的内容都是一样的,唯一多了两个点:第一个是restartPolicy,在Job里面可以设置Never、OnFailure、Alwa

2021-01-01 16:31:55 38

原创 云原生技术公开课学习笔记:应用编排与管理:核心原理、Deployment

三、应用编排与管理:核心原理1、资源元信息Kubernetes的资源对象组成:主要包括了Spec、Status两部分。其中Spec部分用来描述期望的状态,Status部分用来描述观测到的状态Kubernetes的元数据部分。该部分主要包括了用来识别资源的标签:Labels;用来描述资源的注解:Annotations;用来描述多个资源之间相互关系的OwnerReference1)、labelsLabels是一种具有标识型的Key:Value元数据。标签主要用来筛选资源和组合资源,可以使用类似于S

2020-12-27 15:30:07 3157 4

原创 云原生技术公开课学习笔记:Kubernetes核心概念、理解Pod和容器设计模式

一、Kubernetes核心概念1、Kubernetes的核心功能服务的发现与负载的均衡容器的自动装箱,我们也会把它叫做scheduling,就是调度,把一个容器放到一个集群的某一个机器上,Kubernetes会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接Kubernetes会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是OS的问题,导致容器本身的不可用,Kubernetes会自动地对这些不可用的容器进行恢复Kubernetes

2020-12-21 22:28:36 126 1

原创 Sentinel核心功能实战

一、Sentinel简介1、流量控制简介流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。在网络传输中,任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制2、熔断降级简介在调用系统的时候,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积,进而导致级联错误而熔断降级就可以解决这个问题,所谓的熔断降级就是当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让

2020-12-20 08:01:35 322 2

原创 InfluxDB基础操作

一、InfluxDB简介时序数据库 InfluxDB® 版是一款专门处理高写入和查询负载的时序数据库,用于存储大规模的时序数据并进行实时分析,包括来自DevOps监控、应用指标和IoT传感器上的数据主要特点:专为时间序列数据量身订造高性能数据存储。TSM引擎提供数据高速读写和压缩等功能简单高效的HTTP API写入和查询接口针对时序数据,量身订造类似SQL的查询语言,轻松查询聚合数据允许对tag建索引,实现快速有效的查询数据保留策略(Retention policies)能够有效地使旧数据自

2020-12-13 14:24:12 1904 4

原创 后端的前端笔记:flex布局

1、flex布局原理2、flex布局父项常见属性常见父项属性:1)flex-direction设置主轴的方向主轴与侧轴:2)justify-content设置主轴上的子元素排列方式3)flex-wrap子元素是否换行4)align-items设置侧轴上的子元素排列方式(单行)5)align-content设置侧轴上的子元素的排列方式(多行)align-content和align-items的区别:6)flex-flow7)小结3、flex布局子项常见属性1)

2020-12-05 23:14:21 109 2

原创 Linux中top命令参数详解

1、top前5行统计信息第1行是任务队列信息,分别表示:当前时间、系统运行时间、正在登录的用户数以及过去1分钟、5分钟、15分钟的平均负载平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数所谓可运行状态的进程,是指正在使用CPU或者正在等待CPU的进程不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的I/O响应假设我们在一个单CPU系统上看到平均负载为1.73,0.60,7.98,那么说明在过去 .

2020-12-05 17:27:03 92 2

原创 JVM实战:CMS和G1的物理内存归还机制

前言公司有一个系统使用的是CMS垃圾回收器,JVM初始堆内存不等于最大堆内存,但通过监控信息发现:在经过一次FullGC之后,服务器物理内存剩余空间并未提升,按照我之前的理解FullGC之后JVM进程会释放的内存一部分还给物理内存,下面通过几个实验来对比验证一下CMS和G1的物理内存归还机制测试代码public class MemoryRecycleTest { static volatile List<OOMobject> list = new ArrayList<&gt

2020-12-05 09:56:36 228 2

原创 Hystrix工作原理及核心配置

1、熔断器模式服务的健康状况=请求失败数/请求总数​熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定的阈值比较决定的1)当熔断器开关关闭时,请求被允许通过熔断器。如果当前健康状况高于设定阈值,开关继续保持关闭。如果当前健康状况低于设定阈值,开关则切换为打开状态2)当熔断器开关打开时,请求被禁止通过3)当熔断器开关处于打开状态,经过一段时间后,熔断器会自动进入半开状态,这时熔断器只允许一个请求通过。当该请求调用成功时,熔断器恢复到关闭状态。若该请求失败,熔断器继续保持打开状态,接下来的

2020-11-22 21:16:27 97

原创 Feign核心源码解析

注册BeanDefinition首先看一下Feign的开启注解@EnableFeignClients:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import(FeignClientsRegistrar.class)public @interface EnableFeignClients {@Import导入了FeignClientsRegistrar,该类实现了ImportBeanDefin

2020-11-21 22:04:20 79

原创 调用链监控Cat实战

1、Docker快速部署Cat下载Cat源码:git clone https://github.com/dianping/cat.git容器构建:cd dockerdocker-compose up使用官方的脚本启动报错:Creating cat-mysql ... doneCreating cat ... errorERROR: for cat Cannot create container for service cat: conflicting options:

2020-11-21 07:44:35 185

原创 Servlet3异步原理

一、什么是异步Servlet当一个新的请求到达时,Tomcat会从线程池里拿出一个线程来处理请求,这个线程会调用你的Web应用,Web应用在处理请求的过程中,Tomcat线程会一直阻塞,直到Web应用处理完毕才能再输出响应,最后Tomcat才回收这个线程假如你的Web应用需要较长的时间来处理请求(比如数据库查询或者等待下游的服务调用返回),那么Tomcat线程一直不回收,会占用系统资源,在极端情况下会导致线程饥饿,也就是说Tomcat没有更多的线程来处理新的请求那该如何解决这个问题呢?Servlet

2020-11-08 15:40:35 174

原创 Zuul实现Groovy加载动态Filter

一、什么是动态FilterZuul提供了一个能够对过滤器进行动态的加载、编译、运行的框架。这些过滤器是由Groovy写成,被放在Zuul Server上的特定目录下面。Zuul会按期轮询这些目录,修改过的过滤器会动态的加载到Zuul Server中。这样如果要对过滤器有改动,就不用进行网关的重新发布了,只需要把过滤器上传到指定目录即可下面我们就基于spring-cloud-starter-zuul(SpringCloud版本为Edgware.SR3)进行扩展,实现动态加载Filter的功能二、Zuul

2020-11-08 14:04:17 266 6

原创 Netflix开源类库Archaius

1、Archaius是什么?Archaius实际上是对Apache Common Configuration Library的一个封装和扩展,提供了一组基于Java的配置API,主要的特性包括:配置可动态调整配置支持类型(Int、Long、Boolean等)高性能和线程安全提供一个拉(pulling)配置的框架,可以从配置源动态拉取变更的配置支持回调(callback)机制,在配置变更时自动调用支持JMX MBean,可以通过JConsole查看配置和修改配置Achaius的核心是一个

2020-11-07 21:51:39 95

原创 Zuul1.x核心源码解析

1、Zuul架构图如上图,Zuul网关分为三个部分:过滤器管理模块(绿色模块)、过滤器加载模块(粉红色模块)、过滤器运行时模块(蓝色模块)1)过滤器管理模块:让开发人员管理过滤器,过滤器管理主要是上传的动作和激活的动作。过滤器上传完是保存到数据库中的,开发人员可以通过界面管理过滤器的状态2)过滤器加载模块:是过滤器加载模块。定期的扫描过滤器,看看过滤器有没有变更。过滤器管理器会先将变更的过滤器拉到本地的过滤器目录当中。如果变更了,就会执行Filter Loader进行加载,加载到网关运行时的Filt

2020-11-07 14:15:33 85

原创 重新解读JMM与volatile

最近面试面的有些自闭,问得越来越深入了,所以决定重新读一下《Java并发编程的艺术》,同时结合一些其他的文章,来深入地解读一下JMM与volatile一、现代计算机的内存模型其实早期计算机中CPU和内存的速度是差不多的,但在现代计算机中,CPU的指令速度远超内存的存取速度,由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲将运算需要使用到的数据复制到缓存中,让运算能快速进.

2020-09-13 09:17:21 223

原创 2020年社招面经与问题总结(二)

说下本人现在的基本情况,毕业一年,双非本科,之前是项目外包,坐标上海,目标中大型互联网公司知乎一面:Eureka底层原理、单点登录授权码模式、如何实现HTTP长连接、现在项目的CI/CD流程、NIO和BIO的区别、JVM运行时数据区、JVM垃圾回收器、内存泄露和内存溢出的区别、synchronized和Lock对比、synchronized底层实现、synchronized锁升级过程、ReentrantLock公平锁实现、创建线程的几种方式、线程状态转换、多线程执行任务同步获取结果有哪几种方式、.

2020-09-12 19:15:13 523 4

原创 2020年社招面经与问题总结(一)

说下本人现在的基本情况,毕业一年,双非本科,之前是项目外包,坐标上海,目标中大型互联网公司蚂蚁金服电话面:主要问做过的项目的一些解决方案(是否有分库分表、是否使用缓存、服务拆分的原则、遇到的有挑战性的技术问题,如何解决)Docker是如何实现虚拟化的、JVM运行时数据区、JVM垃圾回收算法、用过Dubbo吗、SpringCloud相关原理蚂蚁金服电话面卒,我们公司目前做的主要是企业内部的报销相关的系统,数据量、并发量都比较小,用的技术栈也没那么多,所以项目解决方案的话相对来说比较吃亏,而且.

2020-09-02 06:34:04 2075 7

原创 JVM与多线程知识点补充

一、垃圾收集器相关1、HotSpot的算法细节实现其实下面讲到的技术本质上是为了解决垃圾回收过程中的具体问题而采用的解决方案,所以我会先说明遇到的问题再讲解HotSpot给出相对应的解决方案1)、OopMap在判断对象是否存活的时候,采用的是可达性分析算法,也就是从GC Roots集合找引用链这样的一个过程。虽然固定可以作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中,但如果要逐个检查以这里为起源的引用要消耗不少的时间。而且为了保证分析结

2020-08-23 19:02:34 382 1

转载 Java实现大写金额转小写金额

转自:https://blog.csdn.net/rmnjava/article/details/24693733public class MoneyUtil { /** * 中文中简写的汉字金额 经常使用 */ private static String[] rmbNumbers = new String[]{ "一", "二", "三", "四", "五", "六", "七", "八", "九", "两", "廿", "卅", "○"};

2020-08-01 15:14:56 309

原创 Java实现图片压缩且不改变原图尺寸

最近工作中涉及图片压缩相关的操作,需求如下:大于2MB的图片需要压缩到2MB以下,且不改变原图的尺寸引入依赖: <dependency> <groupId>net.coobird</groupId> <artifactId>thumbnailator</artifactId> <version>0.4.8</version>

2020-08-01 14:03:47 1249 7

原创 Java分析线上OOM问题的工具

一、相关工具介绍1、jpsjps可以列出正在运行的虚拟机进程,并显示虚拟机执行主类名以及这些进程的本地虚拟机唯一ID(LVMID),LVMID与操作系统的进程ID(PID)是一致的/ # jps1 ExpenseApplication6370 Jps选项作用-v输出虚拟机进程启动时的JVM参数后面介绍的命令都监控的是LVMID为1的这个JVM进程2、jstatjstat是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类加载、

2020-08-01 13:23:28 184

原创 K8S相关问题解决

本文主要记录了工作中解决的一些K8S相关的问题,本人是K8S小白,后面会专门抽出时间来学习K8S的1、imagePullPolicy拉取策略Always:总是去镜像仓库拉取IfNotPresent:本地有则使用本地镜像,否则去镜像仓库拉取Never:只使用本地镜像,从不拉取2、K8S向Pod里的/etc/hosts添加条目apiVersion: v1kind: Podmetadata: name: hostaliases-podspec: restartPolicy: Ne.

2020-07-27 19:50:52 284

原创 并发工具类:Fork、Join和CompletionService

一、Fork/JoinFork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果工作窃取算法:假如我们需要做一个比较大的任务,可以把这个任务分割为若干互不依赖的子任务,为了减少线程间的竞争,把这些子任务分别放到不同的队列里,并为每个队列创建一个单独的线程来执行队列里的任务,线程和队列一一对应。比如A线程负责处理A队列里的任务。但是,有的线程会先把自己队列里的任务干完,而其他线程对应的队列里还有任务等待处理。干完活的线程与其等着,不如去帮其他线程

2020-07-24 08:25:09 190

转载 Java泛型详解:泛型类、泛型方法使用

转自:https://www.cnblogs.com/jpfss/p/9928747.html一、泛型类定义及使用public class Point<T> { private T x; private T y; public T getX() { return x; } public void setX(T x) { this.x = x; } public T getY() {

2020-07-22 20:42:00 122

原创 《计算机网络-第7版-谢希仁》学习笔记:应用层

四、应用层1、域名系统DNS1)、域名系统概述域名系统DNS是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址DNS使大多数名字都在本地进行解析,仅少量解析需要互联网上通信,因此DNS系统的效率很高2)、互联网的域名结构互联网采用了层次树状结构的命名方法3)、域名服务器DNS的核心系统是一个三层的树状、分布式服务,基本对应域名的结构:1)根域名服务器:是层次最高的域名服务器,也是最重要的。所有根域名服务器都知道所有顶级域名服务器的域名和IP地址。任何本地域名服务器只要自己

2020-07-19 09:39:47 272

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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