自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (2)
  • 收藏
  • 关注

原创 序列化与反序列化

内容来源:https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html以下内容为适用于博主自己的笔记,想要更详细的阅读请跳转以上链接。一、定义以及相关概念序列化与反序列化是通信协议的一部分。比较容易理解的例子就是加密和持久化。在OSI七层模型中表现层的作用是加密或解密,即把应用层的对象转换成一段连续的二进...

2020-03-09 09:26:43 376

原创 从字节码看try catch finally的return如何执行

文章是对两位博主的总结,提炼,原文如下链接:从字节码看try catch finally的return如何执行Java中try catch finally语句中含有return语句的执行情况(总结版)测试代码很简单,如下:Test.javapublic class Test { public int get() { try{ return ...

2020-01-16 17:50:48 171

原创 亿级流量多级缓存架构:粗粒度高并发架构以及秒杀系统架构设计

什么是高并发由于分布式系统的问世,高并发(High Concurrency)通常是指通过设计保证系统能够同时并行处理很多请求。通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一 API 接口或者 Url 地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。高并发的等级一线:阿里、腾讯、京东 …二线:美团、58同城 …三线:瓜子 …在谈高并发下的系统架构之前,首先要...

2019-12-16 13:45:34 1384

原创 redis(六):AKF架构解决Redis单机单节点下的弊端

为什么要用集群?redis在单机、单节点、单实例下的弊端:单点故障缓存容量有限压力问题使用集群主要是为了解决上述问题,再谈如何解决之前,先了解一下AKF架构。AKF扩展立方体详细内容:https://blog.csdn.net/qq_43186095/article/details/102985483上述弊端可以通过AKF架构来解决,在上图中,x轴实现多个redis的全量镜...

2019-11-11 20:58:15 1746

原创 Nacos服务注册

默认Nacos使用嵌入式数据库derby实现数据存储,所以,如果启动多个默认配置下的Nacos节点,数据存储存在一致性问题,为了解决该问题,Nacos采用集中存储方式来支持集群化部署,目前仅支持Mysql。Nacos Discovery与Netflix Ribbon集成,RestTemplate或OpenFeign可用于服务到服务的调用。服务注册/发现:Nacos Discovery。Nacos命名空间、分组、DataId关系。Nacos: 注册中心 + 配置中心。Nacos 配置规则。

2023-11-09 17:42:43 84

转载 什么是RPC

RPC(Remote Procedure Call)远程过程调用:简单来说就是,一个节点请求另一个节点的服务在这个过程中,由于两个服务器不在一个内存空间,不能直接调用服务,所以需要通过网络来表达调用的语义和传达调用的数据。这里要解决以下问题:通讯:主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。寻址:也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务

2021-02-01 14:48:23 229

转载 Kafka简介

简介概述Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。主要应用场景是:日志收集系统和消息系统。Kafka主要设计目标如下:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。高吞吐率。即使在非常廉价的商用机器上也能

2021-01-28 11:39:57 946

转载 Rocketmq原理&最佳实践

MQ背景&选型消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)蓄流压测(线上有些链路不好压测,可以通过堆积一定量消息再放开来压测)目前主流的MQ主要是Rocketmq、kafka、Rabbitmq,Rocketmq

2021-01-28 11:16:48 265

转载 RabbitMQ概念

RabbitMQ介绍RabbitMQ简介RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ 发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。RabbitMQ 的具体特点可以概括为以下几点:可靠性: RabbitMQ使用一些机制来保证消息的可靠性,如持久化、传输确认及发布

2021-01-28 09:49:30 105

转载 API网关

背景什么是API网关API网关可以看做系统与外界联通的入口,我们可以在网关进行处理一些非业务逻辑的逻辑,比如权限验证,监控,缓存,请求路由等等。为什么需要API网关RPC协议转成HTTP:由于在内部开发中我们都是以RPC协议(thrift or dubbo)去做开发,暴露给内部服务,当外部服务需要使用这个接口的时候往往需要将RPC协议转换成HTTP协议。请求路由:在我们的系统中由于同一个接口新老两套系统都在使用,我们需要根据请求上下文将请求路由到对应的接口。统一鉴权:对于鉴权操作不涉及到业务逻

2021-01-27 10:14:16 144

转载 zookeeper:分布式锁、集群管理和注册中心

分布式锁分布式锁的实现方式有很多种,比如 Redis 、数据库 、zookeeper 等。个人认为 zookeeper 在实现分布式锁这方面是非常非常简单的。上面我们已经提到过了 zk在高并发的情况下保证节点创建的全局唯一性,这玩意一看就知道能干啥了。实现互斥锁呗,又因为能在分布式的情况下,所以能实现分布式锁呗。如何实现呢?这玩意其实跟选主基本一样,我们也可以利用临时节点的创建来实现。首先肯定是如何获取锁,因为创建节点的唯一性,我们可以让多个客户端同时创建一个临时节点,创建成功的就说明获取到了锁 。

2021-01-26 10:02:42 180

转载 微服务网关——Zuul

微服务网关——ZuulZUUL 是从设备和 web 站点到 Netflix 流应用后端的所有请求的前门。作为边界服务应用,ZUUL 是为了实现动态路由、监视、弹性和安全性而构建的。它还具有根据情况将请求路由到多个 Amazon Auto Scaling Groups(亚马逊自动缩放组,亚马逊的一种云计算方式) 的能力在上面我们学习了 Eureka 之后我们知道了 服务提供者 是 消费者 通过 Eureka Server 进行访问的,即 Eureka Server 是 服务提供者 的统一入口。那么整个应

2021-01-20 11:03:05 171

转载 必不可少的 Hystrix

什么是 Hystrix之熔断和降级在分布式环境中,不可避免地会有许多服务依赖项中的某些失败。Hystrix是一个库,可通过添加等待时间容限和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止服务之间的级联故障并提供后备选项来实现此目的,所有这些都可以提高系统的整体弹性。总体来说 Hystrix 就是一个能进行 熔断 和 降级 的库,通过使用它能提高整个系统的弹性。那么什么是 熔断和降级 呢?再举个????,此时我们整个微服务系统是这样的。服务A调用了服务B,服

2021-01-20 10:58:22 115

转载 2PC && 3PC && Paxos算法

为了解决数据一致性问题,在科学家和程序员的不断探索中,出现了很多的一致性协议和算法。比如 2PC(两阶段提交),3PC(三阶段提交),Paxos算法等等。这时候请你思考一个问题,同学之间如果采用传纸条的方式去传播消息,那么就会出现一个问题——我咋知道我的小纸条有没有传到我想要传递的那个人手中呢?万一被哪个小家伙给劫持篡改了呢,对吧?这个时候就引申出一个概念—— 拜占庭将军问题 。它意指 在不可靠信道上试图通过消息传递的方式达到一致性是不可能的, 所以所有的一致性算法的 必要前提 就是安全可靠的消息通道

2021-01-15 18:02:42 169

转载 SSO单点登录

一、前言1、SSO说明SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。https://baike.baidu.com/item/SSO/3451380例如访问在网易账号中心(http://reg.163.com/ )登录之后 访问以下站点都是登录状态网易直播 http://v.163.com网易博客 http://blog.163.com网易花田 http://love.163.com网易考拉 https:/

2021-01-15 17:44:36 123

转载 zookeeper:分布式协调服务

转载自:https://github.com/Snailclimb/JavaGuide/blob/master/docs/system-design/distributed-system/zookeeper/zookeeper-intro.md简述ZooKeeper 是一个开源的分布式协调服务,它的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。ZooKeeper 为我们提供了高可用、高性能、稳定的分布式数据一致性解决方案,通

2021-01-15 17:30:35 147

原创 熔断降级

目的为了应对突发流量,高负载,网络异常等状况,保证服务的高可用,可靠性的两种策略熔断当某些服务不可用,或者响应超时时,直接停掉该服务,防止系统崩溃降级当服务器负荷过高时,为了避免某些核心服务出现崩溃或者响应慢等情况,对一些不是很重要的服务进行降级,停止这些服务的调用区别相同点:都是为了提高系统的可用性以及可靠性,保证服务的正常运行不同点:熔断是系统某些服务出现故障时,自动停掉该服务,而降级是服务器负荷过载时,调用方主动采取策略舍弃非核心服务...

2021-01-06 14:22:11 99

原创 Spring常用注解

以下四个注解作用功能相同,区别在于标识位置@Component:以下三个注解都可以由该注解代替,因为他们都是@Component标识的@Service:标识业务层@Repository:标识DAO@Controller:标识控制层@Autowired 和 @Resource 两者作用相同,可用于为类的属性、构造器、方法进行注值@Autowired:只按照Type 注入@Resource:默认按Name自动注入,也提供按照Type 注入@Component 、 @Confi..

2020-12-31 10:29:56 100

原创 算法题目分析方法

优化1、先看数据状况是否可以优化2、分析问题本身以及范围,看是否能够建立单调性,如果能够建立单调性,那么再选择滑动窗口,首尾指针等方式解决

2020-11-19 14:06:05 204

原创 Servlet与JSP学习笔记

简述

2020-10-22 15:25:02 113

原创 工作爬坑记 - 软件开发流程

数据库设计不要搞大表,要把流程/字段不断细化,目的是提高系统扩展性,保证满足客户不同的需求例如:选课系统1、业务需求:张三选了一门英语课,一个人只会选择一门课数据库设计:t_user表nameclass张三英语2、现在业务需求发生变化,一个人可以选择两门课数据库设计:t_user表nameclassclass2张三英语语文如果向上面这样设计可以看出,一张表解决业务问题扩展性是及其低下的,当用户需求越来越多,越来越复杂

2020-09-27 17:26:56 79

原创 工作爬坑记:项目打包注意打包文件大小

问题工作中,出现代码在本地环境运行没有问题,但是将代码上传到平台,出bug的情况。解决经排查,发现是项目打包并没有将jar包等文件一起打包,只打包了静态代码,打包文件只有2K

2020-08-15 09:25:19 225

原创 爬坑记:IDEA中templates中HTML引入css出现一部分引入成功,一部分引入失败的问题

在网上百度了半天也没有个能解决问题的,都说是引入路径不正确,然而路径并没有问题,因为有一个css引入成功了,并且这个css和新加入的css路径是一样的。。最后还自力更生。。废话不多说,直接上引入失败的原因:原因:引入新的css,js后,IDEA没有清除缓存,导致新加入的css,js没有被编译,因此加载不出来解决:把target下缓存干掉,重新编译即可IDEA设置自动编译:https://...

2020-03-31 20:29:35 1007

原创 B树相关操作以及B+树

假设对 1 7 6 5 3 2 4 8 9 构建3阶B树B树的构建和删除节点的一个原则:坚决不能浪费指针域构建过程n阶B树分裂节点的索引 = n/2 (向上取整)每个节点存储元素个数 = n-1删除节点1、删除子节点情况1节点内元素数量 > n/2 (向下取整) ----> 直接删除情况2节点内元素数量 = n/2 (向下取整) 且兄弟节点 &...

2020-03-09 14:30:42 282

原创 AQS以及并发锁,并发队列

AQS 抽象同步队列双向队列维护一个state:ReentrantLock —> 可重入次数 可指定公平或非公平 默认非公平ReentrantReadWriteLock —> 高16位读状态,低16位写状态 CAS实现读写分离 适合读多写少的场景Semaphore —> 信号个数CountDownlatch —> 计数器当前值获取资源:tryAcqu...

2020-02-27 10:58:53 136

原创 redis(七):击穿、穿透、雪崩、分布式锁

击穿产生场景:如果一个key很长时间没有被访问,变为冷数据,则该key会从缓存中删除,如果刚好在这个时点下,发生了高并发请求该key,却发现缓存中没有该key,那么请求就会压到数据库上,这就是缓存击穿解决方案:由于redis是单进程单实例的,那么redis中请求必然是串行的,所以可以采取如下方案:当第一个请求发现redis中没有需要获取的key时,会通过setnx创建一把锁,并拿到该锁去数...

2020-02-15 17:03:56 252

原创 工具类:扫描包下所有类

package whitecat;import java.io.File;import java.io.FileInputStream;import java.net.URL;import java.util.*;import java.util.jar.JarEntry;import java.util.jar.JarInputStream;/** * 名称空间实用工具 *...

2020-01-20 19:57:07 199

原创 Spring源码概述

前置反射:程序运行状态时,能动态创建对象,操作对象(方法、属性)Spring 架构设计思想Spring创建对象过程:首先通过 BeanDefinationReader 接口将我们在profiles、annotation或者其他文件中的内容注入到Spring容器的bean信息中,在创建对象之前,先配置Spring的运行环境,然后通过BeanFactory创建实例对象。为了提高扩展性,我们希望...

2020-01-12 17:05:30 186

原创 springboot 2.2.2 源码详解(四):监听器

​ 在看springboot的源码过程中,发现内部使用了大量的监听器,下面来看下监听器的作用。在springboot的监听器有如下两类:# Run Listeners#事件发布运行监听器,是springboot中配置的唯一一个应用运行监听器,作用是通过一个多路广播器,将springboot运行状态的变化,构建成事件,并广播给各个监听器org.springframework.boot.Sp...

2020-01-10 07:41:26 248

原创 SpringBoot 2.2.2 源码详解(三):SpringBoot内嵌tomcat

在使用springboot搭建一个web应用程序的时候,我们发现不需要自己搭建一个tomcat服务器,只需要引入spring-boot-starter-web,在应用启动时会自动启动嵌入式的tomcat作为服务器,下面来分析下源码的分析流程:之前已经讲过了自动装配的原理,其实tomcat的实现机制也是从自动装配开始的。1、ServletWebServerFactoryAutoConfigura...

2020-01-10 07:31:01 1448

原创 springboot运行原理

1、启动器<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>​ springboot-boot-starter:就是...

2020-01-09 07:35:57 158

原创 Springboot自动装配原理

springboot配置文件的装配过程1、springboot在启动的时候会加载主配置类,开启了@EnableAutoConfiguration。2、@EnableAutoConfiguration的作用:利用AutoConfigurationImportSelector给容器导入一些组件。查看selectImports方法的内容,返回一个AutoConfigurationEntry...

2020-01-09 07:25:42 613

原创 SpringBoot 2.2.2 源码详解(二):自动装配原理

1、在springboot的启动过程中,有一个步骤是创建上下文,如果不记得可以看下面的代码:public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContex...

2020-01-08 18:57:42 425

原创 SpringBoot 2.2.2 源码(二):启动流程二

上篇文章源码进行到如下位置命令行参数解析跟进DefaultApplicationArguments,不断追踪,会发现它是用来解析命令行参数的最终parse方法会返回命令行参数commandLineArgs环境配置prepareEnvironment进入prepareEnvironment方法继续追溯到getOrCreateEnvironment方法可以看到这里根据webA...

2020-01-06 20:11:45 207

原创 SpringBoot 2.2.2 源码(二):启动流程一

SpringBoot源码(一)在上一篇文章里,介绍了SpringBoot的初始化,在这一章节里将介绍run方法里面的内容跟踪进入run方法StopWatch该函数主要用来计算SpringBoot的启动时间ConfigurableApplicationContext接下来创建了一个ConfigurableApplicationContext对象,这个对象存储的是SpringBoot的...

2020-01-05 16:56:09 225

原创 SpringBoot 2.2.2 源码(一):构造方法初始化

前言源码主要按照SpringBoot启动流程顺序跟踪,翻译部分重要注释,并解释重要源码SpringApplication 启动类注释启动步骤在初始化之前,会对启动类里的成员变量进行赋值,然后进行初始化primarySources:传入的primarySources里是在main方法里边传入的主类名称SpringDataApplication,将其转换为集合对象放入集合中。Web...

2020-01-05 09:53:25 328

原创 SpringBoot 2.2.2 源码详解(一):启动过程

1、springboot的入口程序@SpringBootApplicationpublic class StartupApplication { public static void main(String[] args) { SpringApplication.run(StartupApplication.class, args); }}当程序开始执行...

2020-01-05 09:52:39 1220

转载 详解设计模式在Spring中的应用

设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆。今天,在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了其设计的思想理念,才能在工作学习中运用到“无形”。Spring作为业界的经典框架,无论是在架构设计方面,还是在代码编写方面,都堪称行内典范。好了,话不多说,开始今天的内容。spring中常用的设计模式...

2020-01-04 18:46:54 90

原创 常用设计模式及其在jdk中案例总结

观察者模式多个观察者监听同一个主题对象,是一种一对多的依赖关系,当主题对象发生变化时,会通知所有观察者对象。java.util.EventListenerjavax.servlet.http.HttpSessionBindingListenerjavax.servlet.http.HttpSessionAttributeListener装饰者模式Component 是一个接口或者是...

2020-01-04 18:41:22 388

转载 解决哈希冲突的四种方法

上篇博客我们说到了,什么是哈希冲突,其实就是再采用哈希函数对输入域进行映射到哈希表的时候,因为哈希表的位桶的数目远小于输入域的关键字的个数,所以,对于输入域的关键字来说,很可能会产生这样一种情况,也就是,一个关键字会映射到同一个位桶中的情况,这种情况就就叫做哈希冲突,解决哈希冲突的有三种方案,一种叫做拉链法(也叫作链接法、链地址法,一个意思),另外三种分别为开发地址法和再散列法。一、拉链法上篇...

2019-12-21 09:41:19 1267 3

spring源码中英文注释

spring源码 中英文注释

2020-01-12

netty源码+Spring源码视频教程.txt

netty源码+Spring源码视频教程.txt

2020-01-08

空空如也

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

TA关注的人

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