自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

韩超的博客 (hanchao5272)

路漫漫其修远兮,吾将上下而求索。

原创 四张图理解一致性哈希算法(Consistent Hashing)

1.简述 1.1.哈希算法 哈希算法:将任意长度的输入通过散列算法转换成固定长度的输出。 哈希算法是一种映射算法,将任意个数的输入映射为固定个数的哈希值。 1.2.应用场景举例 分布式缓存 现有用户数据3000万,为提高访问速度,将用户基本信息保存在缓存中,其中: key=user:{uid},...

2019-08-26 13:50:28 1054 4

原创 负载均衡、DNS、F5、反向代理、LVS、四层与七层、CDN

1.负载均衡 负载均衡:将负载(大量请求)均匀的、平衡的分摊到多个服务节点上进行处理。 实现负载均衡有很多种手段,例如:DNS、硬件负载均衡设备、Nginx反向代理、LVS。 1.1.DNS DNS:Domain Name System,域名系统,更加专业的名字为域名解析系统。 域名解析系统部署在...

2019-08-25 16:44:35 5434 24

原创 MQ: 一张图读懂kafka工作原理

1.关于kafka Kafka是由Apache软件基金会开发的一个开源消息队列,由Scala和Java编写。 相关文章参考: MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比 [MQ: kafka的Java接入与入门示例]待更新...

2019-08-23 14:30:38 2850 5

原创 MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比

1.关于消息队列 消息队列,外文名Message Queue,简称MQ,是指在消息的传输中保存消息的容器或服务。 消息队列,是分布式系统实现高性能、高可用、可伸缩等高级特效的重要组件,适用多种场景,如:消息通讯、异步处理、应用解耦、流量削峰等等。 常见的主流消息队列:ActiveMQ、Rabbit...

2019-08-21 16:46:56 2360 4

原创 Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器

1.缓存过期 缓存过期:在使用缓存时,可以通过TTL(Time To Live)设置失效时间,当TTL为0时,缓存失效。 为什么要设置缓存的过期时间呢? 一、为了节省内存 例如,在缓存中存放了近3年的10亿条博文数据,但是经常被访问的可能只有10万条,其他的可能几个月才访问一次。 那么,就没有必要...

2019-08-18 16:34:24 3791 23

原创 Java常用设计模式的实例学习系列-绪论

关于设计模式 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计原则(待更新…) 待完善:面向对象的设计原则 设计模式分类 设计模式分为三种类型,共计2...

2019-07-15 16:23:08 715 0

原创 记一次服务内存不断飙升的JVM调试过程

1.问题简述 今天同事让我帮忙解决一个异常的服务,其表现如下: 通过Spring Boot Admin监测到服务间歇性由状态UP变成OFFLINE。 通过Spring Boot Admin监测到服务的状态变更是由于YGC导致的,JVM并未崩溃。 通过k8s的pod监控发现内存使用率从16:10的...

2019-06-20 20:56:05 2193 7

原创 SpringBoot项目中通过MDC和自定义Filter操作traceId实现日志链路追踪

1.背景简述 依赖原始的log4j2配置,很难从某服务庞杂的日志中,单独找寻出某次API调用的全部日志。 本文通过在日志中打印唯一的traceId来实现每次调用的追踪。 2.关键思路 2.1.MDC 日志追踪目标是每次请求级别的,也就是说同一个接口的每次请求,都应该有不同的traceId。 ...

2019-06-15 16:39:56 4653 4

转载 99%的人都理解错了HTTP中GET与POST的区别

99%的人都理解错了HTTP中GET与POST的区别

2019-03-26 10:56:34 2551 17

原创 shell入门学习笔记-序章

概述 近期,对shell进行了系统性的入门学习。 为了方便日后复习,将学习笔记整理成博文。 目录(持续更新中…) 01-语言分类、脚本类型、脚本版本、三种提示符 02-hello world、四种脚本运行方式 03-变量与函数 04-作用域 05-参数 06-字符串 07-运算符 08-数组 0...

2019-01-13 18:32:37 262 2

原创 Java并发学习系列-绪论

最近在系统的学习Java并发(concurrent),遂将学习所得整理成博文,作为今后参考的依据。 内容简述 基本概念与发展历史 Thread的线程方法与状态转换 JMM、指令重排、happens-before原则、原子性、可见性与有序性 易变类型关键字volatile 同步关键字syn...

2018-03-04 16:07:48 4816 8

原创 SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+MySQL

1.前言 本文主要对SSM框架整合的过程进行记录,作为之后参考的依据。 1.1.参考文章 Spring代码实例系列-绪论 Spring MVC代码实例系列-绪论 MyBatis代码实例系列-绪论 1.2.技术简介 在整合的SSM框架中,主要涉及的框架、插件或技术有: Sp...

2018-02-10 23:41:36 6008 6

原创 MyBatis代码实例系列-绪论

SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA 最近抽空将Mybatis涉及到的一些技术进行了复习,并写了一些代码实例,将源代码整理到这里,作为以后翻阅的记录。 说明: 因为时间有限,文章内容可能存在错别字等现象,...

2018-01-27 23:29:54 1190 0

原创 Spring MVC代码实例系列-绪论

SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA 最近抽空将Spring MVC涉及到的一些技术进行了复习,并写了一些入门实例,将源代码整理到这里,作为以后翻阅的记录。 说明: - 因为时间有限,文章内容可能存在错别字等...

2018-01-13 16:15:25 1292 0

原创 Spring代码实例系列-绪论

SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA 最近抽空将Spring框架涉及到的一些技术进行了复习,并写了一些入门实例,将源代码整理到这里,作为以后翻阅的记录。 说明: - 因为时间有限,文章内容可能存在错别字等现象...

2018-01-07 12:41:39 1312 2

原创 ElasticSearch: master,data,client三类节点区别及节点分配简单例举

目录简述三类节点说明其他说明简单举例 简述 默认情况下,ES集群节点都是混合节点,即在elasticsearch.yml中默认node.master: true和node.data: true。 当ES集群规模达到一定程度以后,就需要注意对集群节点进行角色划分。 ES集群节点可以划分为三种:主节...

2019-10-28 23:26:21 1569 1

原创 MySql:分页查询limit的正确用法

MySql:分页查询limit的正确用法 -- 原始分页查询 -- 4500 ms -- 慢的原因:1.* 2.limit太大 select * from post_history limit 2000000,10; -- 用明确字段代替* -- 1600ms selec...

2019-10-28 23:01:19 1359 0

原创 一句话描述volatile关键字如何保证可见性

被volatile关键字修饰的变量,在每个写操作之后,都会加入一条store内存屏障命令,此命令强制工作内存将此变量的最新值保存至主内存;在每个读操作之前,都会加入一条load内存屏障命令,此命令强制工作内存从主内存中加载此变量的最新值至工作内存。 ...

2019-09-15 16:40:44 695 2

原创 Maven: pom.xml文件中dependency标签的scope属性的几种取值及对应的项目阶段

简述 pom.xml文件中,dependency标签的scope属性定义了依赖包在项目的使用阶段。 项目阶段包括: 编译compile、测试test、运行run和发布deploy。 本文对几种scope进行简单的对比总结。 总结 scope 编译阶段 测试阶段 运行阶段 发布阶段 备注 ...

2019-09-15 16:22:50 320 0

原创 随笔-在linux通过top命令查找问题线程的nid

最近比较忙,就简单写个随笔吧。 简述 对于cpu爆满问题,常常会分析是否存在问题线程,本文记录一种通过top快速找到问题线程nid的方式。 找到问题进程PID 通过top找到问题进程,例如下面有个进程CPU占用率高达99%,他的PID=270973。 PID USER PR N...

2019-09-10 16:22:08 345 0

原创 记一次Mysql连接未满但程序却报错连接已满获取连接超时GetConnectionTimeoutException的问题

1.问题描述 今天同事找到我,让我帮忙查一个问题,据说已经持续一个月: 之前服务正常,问题在上个月开始出现。 服务运行大概1天左右,后台开始报错:获取数据库连接失败GetConnectionTimeoutException。 服务配置的最大连接数maxActive=600。 但是,此时通过sho...

2019-08-27 15:20:00 2801 7

转载 dependencies与dependencyManagement的区别

dependencies 即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)。 dependencyManagement 声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。 如果不在子项目中声明依赖,是不会从父项目中继承下来的。 只有在子项目中写了该依...

2019-08-26 15:23:12 307 0

原创 ElasticSearch: 数据刷新相关的刷新间隔refresh_interval、刷新接口_refresh和刷新策略RefreshPolicy

1.简述 默认情况下ElasticSearch索引的refresh_interval为1秒,这意味着数据写1秒才就可以被搜索到。 因为上述表现,所以称ElasticSearch是近实时搜索引擎。 如果需要调整数据刷新方案,则有三种途径: 设置数据刷新间隔:refresh_interval。 调用...

2019-08-26 15:17:07 4088 0

原创 分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁

今天对分布式相关的一些概念与理论进行学习。 1.集群与分布式 **集群:**相同的应用部署在多台服务器。 **分布式:**不同的应用部署在多台服务器。 1.数据一致性 在分布式环境中,为了提高系统整体性能,数据以多副本冗余机制存储,副本之间通过数据复制进行同步。 数据副本与数据复制必然引入新的问题...

2019-08-24 16:44:05 733 0

原创 MQ: kafka的Java接入与入门示例(topic增删改查,Producer多参发送,Consumer多分区接受)

本文主要通过实际编码来对《MQ: 一张图读懂kafka工作原理》提到的部分原理进行验证与实现。 相关文章参考: MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比 MQ: 一张图读懂kafka工作原理 1.版本说明 后续代码依赖...

2019-08-23 17:33:23 1132 0

原创 Redis: lua脚本支持以及抢红包案例的简单实现

1.关于lua Lua脚本可以调用大部分的Redis命令,Redis运行开发者通过编写脚本传入Redis,一次性执行多条命令。 使用Lua脚本的好处可以参考pipeline:Redis: pipeline基本原理以及Jedis和Redisson的实现示例 提升性能:减少多个命令在I/O上的耗时。...

2019-08-20 18:08:44 424 0

原创 swagger: 数组/集合参数的正确配置方式allowMultiple、dataType

接口参数的注解配置 // GET参数 @ApiImplicitParam(name = "list", value = "用户ID列表", paramType = "query", allowMultiple = true, dataTy...

2019-08-19 15:13:58 3119 2

原创 Redis: pipeline基本原理以及Jedis和Redisson的实现示例

1.关于pipeline pipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令。 在原生模式下, 每执行一次redis命令,都需要经过发送命令(I/O)、执行命令(内存)和返回结果(I/O))三个阶段。 其中,主要耗时在发送命令与返回结果。 在pipeline模式...

2019-08-19 13:13:17 568 0

原创 Redis: 分布式锁的官方算法RedLock以及Java版本实现库Redisson

1.简介 在单机应用中,当多个线程访问共享资源时,我们通常通过synchronized关键字、Lock锁、线程安全对象等措施保证资源的安全使用。 在分布式环境下,上述措施不再能满足需求,这事,我们需要一种应用于分布式换件的加锁机制,即:分布式锁。 分布式锁的实现方式有多重,如:数据库、Redis、...

2019-08-17 17:08:45 1286 0

原创 Redis: 单线程模型、I/O多路复用、影响性能的因素(为什么这么快)、性能与QPS(到底有多快)

1.单线程架构 Redis基于Reator模式开发了自己的网络事件处理器:文件事件处理器。其架构图如下: 文件事件处理器的四部分:套接字、I/O多路复用程序、文件事件分派器和事件处理器。 1.1.套接字Socket 文件事件就是对套接字的抽象,每当一个套接字准备好执行连接、写入、读取、关闭等操...

2019-08-17 11:18:28 744 1

原创 Redis:简介、数据结构、回收策略、持久化方式

简介 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmap...

2019-08-16 13:01:04 812 0

转载 SpringBoot2使用Jetty容器(替换默认Tomcat)

Jetty和tomcat的比较 Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的Servlet规范和JavaEE规范。 架构比较 Jetty的架构比Tomcat的更为简单。 Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。 T...

2019-08-15 18:31:57 587 0

转载 HBase入门: 简介、特点、优缺点、数据结构、系统架构、入门操作、适用场景、注意事项与遇到的坑

简介 HBase ——Hadoop Database,是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。 HBase是Google Bigtable的开源实现: 类似Google Bigtable利用GFS作为其文件存...

2019-08-06 18:46:35 353 0

原创 MySql: 表级锁、行级锁、共享锁、排他锁、乐观锁、悲观锁

1.表级锁与行级锁 表级锁: table-level locking,锁住整个表。 开销小,加锁快。 不会死锁(一次性加载所需的所有表)。 锁粒度大,发生锁冲突概率大,并发效率低。 适合查询。 行级锁: row-level loking,锁住一行记录。 开销大,加锁慢。 会死锁。 锁粒度小,...

2019-08-06 13:04:53 2191 0

原创 MySql: 事务特性ACID、三大并发读、四种事务隔离级别

1.事务特性ACID 1.1.原子性Atomicity 原子性: 事务的所有操作,要么全部执行,要么全部不执行,不存在部分执行成功的情况。 如果执行过程中出错,则应该回滚rollback到事务开始前的状态。 事务是一个不可分割的整体。 1.2.一致性Consistency 一致性:事务执行完成...

2019-08-05 20:59:36 1885 11

转载 MySql: 浅谈主从复制简介、原理、方式

1.简介 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。 此时数据库集群就很好的解决了这个问题。 采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。 在此之前我们必须要保证每台MySQL服务器里的数据同步。 数据同步我们可...

2019-08-05 16:51:47 102 0

转载 MySqL: 并发量大、数据量大的互联网业务数据库设计军规

一、基础规范 1.1.必须使用InnoDB引擎 解读:支持事务、行级锁,并发性能好、CPU及内存缓存页优化使得资源利用率更高。 1.2.必须使用utf8mb4编码 解读:万国码,无需转码,无乱码风险,节省空间。 1.3.必须为表、字段添加注释 解读:不要给后来者挖坑。 1.4.禁止使用存储过程、触...

2019-08-05 11:40:10 127 0

原创 一篇文章掌握MySql索引的语法、分类、实现原理、失效场景及优化策略

1.简介 1.1.什么是索引 索引是对记录集的多个字段进行排序的方法。 在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针。 数据库的索引,可以理解为字典的目录,能够帮助我们快速找到需要查询的字。 1.2.为什么需要索引 使用索引的目的就是为了提高查询...

2019-08-03 17:47:07 1961 0

原创 SPU与SKU的简单理解

1.1.SPU Standard Product Unit,即:标准化产品单元。 用途:描述一种产品。 举例: 一个土豪金色IPhone X和一个银色IPhone X都是同一个SPU,不进行颜色、商家的区分。 场景:数据统计,例如:通过SPU查看本月IPhone X的销售量。 1.2.SKU ...

2019-07-31 20:29:54 476 0

原创 设计模式-代理模式-以购房中介为例

超级链接: Java常用设计模式的实例学习系列-绪论 参考:《HeadFirst设计模式》 1.关于代理模式 代理模式是一种结构型模式。 代理模式:为其他对象提供一个代理以控制对这个对象的访问。 本文以购房中介为场景来学习代理模式: 购房者可以直接找房主买房。如此做较累,因为买房之前要多次房屋...

2019-07-29 14:44:00 643 0

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