- 博客(352)
- 资源 (5)
- 收藏
- 关注

原创 四张图理解一致性哈希算法(Consistent Hashing)
1.简述1.1.哈希算法哈希算法:将任意长度的输入通过散列算法转换成固定长度的输出。哈希算法是一种映射算法,将任意个数的输入映射为固定个数的哈希值。1.2.应用场景举例分布式缓存现有用户数据3000万,为提高访问速度,将用户基本信息保存在缓存中,其中:key=user:{uid},其中uid为用户ID,由UUID生成。value为姓名、账号级别等构成的Json串。为了分担单台服务...
2019-08-26 13:50:28
2059
4

原创 负载均衡、DNS、F5、反向代理、LVS、四层与七层、CDN
1.负载均衡负载均衡:将负载(大量请求)均匀的、平衡的分摊到多个服务节点上进行处理。实现负载均衡有很多种手段,例如:DNS、硬件负载均衡设备、Nginx反向代理、LVS。1.1.DNSDNS:Domain Name System,域名系统,更加专业的名字为域名解析系统。域名解析系统部署在DNS服务器上,提供域名解析服务。简单来说,域名解析就是将一个域名解析成多个ip地址。如下图是通过...
2019-08-25 16:44:35
8843
24

原创 MQ: 一张图读懂kafka工作原理
1.关于kafkaKafka是由Apache软件基金会开发的一个开源消息队列,由Scala和Java编写。相关文章参考:MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比[MQ: kafka的Java接入与入门示例]待更新…2.工作原理首先,我们来kafka的整体数据流架构图:2.1.相关术语上图中,涉及以下术...
2019-08-23 14:30:38
4421
5

原创 MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比
1.关于消息队列消息队列,外文名Message Queue,简称MQ,是指在消息的传输中保存消息的容器或服务。消息队列,是分布式系统实现高性能、高可用、可伸缩等高级特效的重要组件,适用多种场景,如:消息通讯、异步处理、应用解耦、流量削峰等等。常见的主流消息队列:ActiveMQ、RabbitMQ、RocketMQ和Kafka。2.应用场景2.1.消息通讯作为消息队列,其本职场景就是实现...
2019-08-21 16:46:56
4797
5

原创 Redis: 缓存过期、缓存雪崩、缓存穿透、缓存击穿(热点)、缓存并发(热点)、多级缓存、布隆过滤器
1.缓存过期缓存过期:在使用缓存时,可以通过TTL(Time To Live)设置失效时间,当TTL为0时,缓存失效。为什么要设置缓存的过期时间呢?一、为了节省内存例如,在缓存中存放了近3年的10亿条博文数据,但是经常被访问的可能只有10万条,其他的可能几个月才访问一次。那么,就没有必要让所有的博文数据长期存在于缓存中。设置一个过期时间比方说7天,超过7天未被访问的博文数据将会自动失效...
2019-08-18 16:34:24
5942
25

原创 Java常用设计模式的实例学习系列-绪论
关于设计模式设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计原则(待更新…)待完善:面向对象的设计原则设计模式分类设计模式分为三种类型,共计23种:创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式...
2019-07-15 16:23:08
1582

原创 记一次服务内存不断飙升的JVM调试过程
1.问题简述今天同事让我帮忙解决一个异常的服务,其表现如下:通过Spring Boot Admin监测到服务间歇性由状态UP变成OFFLINE。通过Spring Boot Admin监测到服务的状态变更是由于YGC导致的,JVM并未崩溃。通过k8s的pod监控发现内存使用率从16:10的15%飙升至17:40的33%。服务V最大内存8GB。服务某接口的压测结果:最大QPS为200左右...
2019-06-20 20:56:05
4846
8

原创 SpringBoot项目中通过MDC和自定义Filter操作traceId实现日志链路追踪
1.背景简述依赖原始的log4j2配置,很难从某服务庞杂的日志中,单独找寻出某次API调用的全部日志。本文通过在日志中打印唯一的traceId来实现每次调用的追踪。2.关键思路2.1.MDC日志追踪目标是每次请求级别的,也就是说同一个接口的每次请求,都应该有不同的traceId。每次接口请求,都是一个单独的线程,所以自然我们很容易考虑到通过ThreadLocal实现上述需求。考...
2019-06-15 16:39:56
18763
8

原创 shell入门学习笔记-序章
概述近期,对shell进行了系统性的入门学习。为了方便日后复习,将学习笔记整理成博文。目录(持续更新中…)01-语言分类、脚本类型、脚本版本、三种提示符02-hello world、四种脚本运行方式03-变量与函数04-作用域05-参数06-字符串07-运算符08-数组09-分支语句与test命令10-输入/输出文件重定向11-命令详解: alias、exit12-...
2019-01-13 18:32:37
808
2

原创 Java并发学习系列-绪论
最近在系统的学习Java并发(concurrent),遂将学习所得整理成博文,作为今后参考的依据。内容简述基本概念与发展历史Thread的线程方法与状态转换JMM、指令重排、happens-before原则、原子性、可见性与有序性易变类型关键字volatile同步关键字synchronized显式锁Lock原子变量Atomic线程本地变量ThreadLocal倒计时门...
2018-03-04 16:07:48
8085
10

原创 SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+MySQL
1.前言本文主要对SSM框架整合的过程进行记录,作为之后参考的依据。1.1.参考文章Spring代码实例系列-绪论 Spring MVC代码实例系列-绪论 MyBatis代码实例系列-绪论1.2.技术简介在整合的SSM框架中,主要涉及的框架、插件或技术有:Spring:一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Spring MVC:一个用...
2018-02-10 23:41:36
7479
5

原创 MyBatis代码实例系列-绪论
SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA最近抽空将Mybatis涉及到的一些技术进行了复习,并写了一些代码实例,将源代码整理到这里,作为以后翻阅的记录。说明: 因为时间有限,文章内容可能存在错别字等现象,敬请谅解。 为了展示各知识点,有些命名方式很不规范(尤其是包名、类名),敬请谅解。 因为水平有限,...
2018-01-27 23:29:54
1536

原创 Spring MVC代码实例系列-绪论
SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA最近抽空将Spring MVC涉及到的一些技术进行了复习,并写了一些入门实例,将源代码整理到这里,作为以后翻阅的记录。说明: - 因为时间有限,文章内容可能存在错别字等现象,敬请谅解。 - 为了展示各知识点,有些命名方式很不规范,敬请谅解。 1. 不...
2018-01-13 16:15:25
1714

原创 Spring代码实例系列-绪论
SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+Git+MySQL+IDEA最近抽空将Spring框架涉及到的一些技术进行了复习,并写了一些入门实例,将源代码整理到这里,作为以后翻阅的记录。说明: - 因为时间有限,文章内容可能存在错别字等现象,敬请谅解。 - 为了展示各知识点,有些命名方式很不规范,敬请谅解。 1. 不规范...
2018-01-07 12:41:39
1782
2
原创 ElasticSearch: master,data,client三类节点区别及节点分配简单例举
目录简述三类节点说明其他说明简单举例简述默认情况下,ES集群节点都是混合节点,即在elasticsearch.yml中默认node.master: true和node.data: true。当ES集群规模达到一定程度以后,就需要注意对集群节点进行角色划分。ES集群节点可以划分为三种:主节点、数据节点和客户端节点。这是一种分而治之的思想,也是一种术业专攻的体现。三类节点说明mas...
2019-10-28 23:26:21
16522
3
原创 MySql:分页查询limit的正确用法
MySql:分页查询limit的正确用法-- 原始分页查询-- 4500 ms-- 慢的原因:1.* 2.limit太大select * from post_history limit 2000000,10;-- 用明确字段代替*-- 1600msselect id,uid,media_id,media_name,news_id,comment from post_histo...
2019-10-28 23:01:19
5621
原创 一句话描述volatile关键字如何保证可见性
被volatile关键字修饰的变量,在每个写操作之后,都会加入一条store内存屏障命令,此命令强制工作内存将此变量的最新值保存至主内存;在每个读操作之前,都会加入一条load内存屏障命令,此命令强制工作内存从主内存中加载此变量的最新值至工作内存。...
2019-09-15 16:40:44
1860
2
原创 Maven: pom.xml文件中dependency标签的scope属性的几种取值及对应的项目阶段
简述pom.xml文件中,dependency标签的scope属性定义了依赖包在项目的使用阶段。项目阶段包括: 编译compile、测试test、运行run和发布deploy。本文对几种scope进行简单的对比总结。总结scope编译阶段测试阶段运行阶段发布阶段备注compileyesyesyesyes默认scopeprovidedyesy...
2019-09-15 16:22:50
2246
1
原创 随笔-在linux通过top命令查找问题线程的nid
最近比较忙,就简单写个随笔吧。简述对于cpu爆满问题,常常会分析是否存在问题线程,本文记录一种通过top快速找到问题线程nid的方式。找到问题进程PID通过top找到问题进程,例如下面有个进程CPU占用率高达99%,他的PID=270973。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMM...
2019-09-10 16:22:08
2722
1
原创 记一次Mysql连接未满但程序却报错连接已满获取连接超时GetConnectionTimeoutException的问题
1.问题描述今天同事找到我,让我帮忙查一个问题,据说已经持续一个月:之前服务正常,问题在上个月开始出现。服务运行大概1天左右,后台开始报错:获取数据库连接失败GetConnectionTimeoutException。服务配置的最大连接数maxActive=600。但是,此时通过show processlist却显示此服务实际只占用了300~400左右的连接。服务重启,问题暂时消失。...
2019-08-27 15:20:00
16689
8
转载 dependencies与dependencyManagement的区别
dependencies即使在子项目中不写该依赖项,那么子项目仍然会从父项目中继承该依赖项(全部继承)。dependencyManagement声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的。只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom。...
2019-08-26 15:23:12
599
原创 ElasticSearch: 数据刷新相关的刷新间隔refresh_interval、刷新接口_refresh和刷新策略RefreshPolicy
1.简述默认情况下ElasticSearch索引的refresh_interval为1秒,这意味着数据写1秒才就可以被搜索到。因为上述表现,所以称ElasticSearch是近实时搜索引擎。如果需要调整数据刷新方案,则有三种途径:设置数据刷新间隔:refresh_interval。调用数据刷新接口:_refresh。设置数据刷新策略:RefreshPolicy。本文只描述前两种途...
2019-08-26 15:17:07
21378
1
原创 分布式概念简单了解:数据一致性、CAP、BASE、分布式事务、分布式锁
今天对分布式相关的一些概念与理论进行学习。1.集群与分布式**集群:**相同的应用部署在多台服务器。**分布式:**不同的应用部署在多台服务器。1.数据一致性在分布式环境中,为了提高系统整体性能,数据以多副本冗余机制存储,副本之间通过数据复制进行同步。数据副本与数据复制必然引入新的问题:如何处理副本数据的一致性?总的来说,无法找到一种能够满足所有分布式环境的一致性解决方案,很多时候要...
2019-08-24 16:44:05
1607
2
原创 MQ: kafka的Java接入与入门示例(topic增删改查,Producer多参发送,Consumer多分区接受)
本文主要通过实际编码来对《MQ: 一张图读懂kafka工作原理》提到的部分原理进行验证与实现。相关文章参考:MQ: 消息队列常见应用场景及主流消息队列ActiveMQ、RabbitMQ、RocketMQ和Kafka的简单对比MQ: 一张图读懂kafka工作原理1.版本说明后续代码依赖于以下版本,其他版本不保证代码可用:kafka 服务版本:2.11-1.0.1kafka-cli...
2019-08-23 17:33:23
3397
原创 Redis: lua脚本支持以及抢红包案例的简单实现
1.关于luaLua脚本可以调用大部分的Redis命令,Redis运行开发者通过编写脚本传入Redis,一次性执行多条命令。使用Lua脚本的好处可以参考pipeline:Redis: pipeline基本原理以及Jedis和Redisson的实现示例提升性能:减少多个命令在I/O上的耗时。原子操作:一个lua脚本内的多个命令的执行时原子操作。脚本复用:lua脚本会加载到redis内存中...
2019-08-20 18:08:44
1374
原创 swagger: 数组/集合参数的正确配置方式allowMultiple、dataType
接口参数的注解配置// GET参数@ApiImplicitParam(name = "list", value = "用户ID列表", paramType = "query", allowMultiple = true, dataType = "int")// POST参数@ApiImplicitParam(name = "list", value = "用户名称列表", paramTy...
2019-08-19 15:13:58
17587
2
原创 Redis: pipeline基本原理以及Jedis和Redisson的实现示例
1.关于pipelinepipeline即管道的意思,在Redis中,它表示的是一次性执行多条命令。在原生模式下,每执行一次redis命令,都需要经过发送命令(I/O)、执行命令(内存)和返回结果(I/O))三个阶段。其中,主要耗时在发送命令与返回结果。在pipeline模式下,一次性执行多条命令,也只需要一次发送命令和一次返回结果。节省了大量花费在I/O上的耗时。...
2019-08-19 13:13:17
5053
原创 Redis: 分布式锁的官方算法RedLock以及Java版本实现库Redisson
1.简介在单机应用中,当多个线程访问共享资源时,我们通常通过synchronized关键字、Lock锁、线程安全对象等措施保证资源的安全使用。在分布式环境下,上述措施不再能满足需求,这事,我们需要一种应用于分布式换件的加锁机制,即:分布式锁。分布式锁的实现方式有多重,如:数据库、Redis、ZooKeeper等等。本文主要讲解Redis的分布式锁实现方式,主要依据官方文档:Distribu...
2019-08-17 17:08:45
5730
3
原创 Redis: 单线程模型、I/O多路复用、影响性能的因素(为什么这么快)、性能与QPS(到底有多快)
1.单线程架构Redis基于Reator模式开发了自己的网络事件处理器:文件事件处理器。其架构图如下:文件事件处理器的四部分:套接字、I/O多路复用程序、文件事件分派器和事件处理器。1.1.套接字Socket文件事件就是对套接字的抽象,每当一个套接字准备好执行连接、写入、读取、关闭等操作时,都会产生一个文件事件。因为一个Redis服务器会连接多个套接字,所以多个文件事件可能会并发出现...
2019-08-17 11:18:28
1994
1
原创 Redis:简介、数据结构、回收策略、持久化方式
简介Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置...
2019-08-16 13:01:04
1209
转载 SpringBoot2使用Jetty容器(替换默认Tomcat)
Jetty和tomcat的比较Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的Servlet规范和JavaEE规范。架构比较Jetty的架构比Tomcat的更为简单。Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。性能比较...
2019-08-15 18:31:57
2965
转载 HBase入门: 简介、特点、优缺点、数据结构、系统架构、入门操作、适用场景、注意事项与遇到的坑
简介HBase ——Hadoop Database,是一个高可靠、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Google Bigtable的开源实现:类似Google Bigtable利用GFS作为其文件存储系统,HBase 利用Hadoop HDFS作为其文件存储系统,HDFS为HBase提供了高可靠性的...
2019-08-06 18:46:35
1005
原创 MySql: 表级锁、行级锁、共享锁、排他锁、乐观锁、悲观锁
1.表级锁与行级锁表级锁:table-level locking,锁住整个表。开销小,加锁快。不会死锁(一次性加载所需的所有表)。锁粒度大,发生锁冲突概率大,并发效率低。适合查询。行级锁:row-level loking,锁住一行记录。开销大,加锁慢。会死锁。锁粒度小,发生所冲突概率小,并发效率高。适合并发写,事务控制。并不是直接丢记录行加锁,而是对行对应的索引加锁...
2019-08-06 13:04:53
4510
1
原创 MySql: 事务特性ACID、三大并发读、四种事务隔离级别
1.事务特性ACID1.1.原子性Atomicity原子性:事务的所有操作,要么全部执行,要么全部不执行,不存在部分执行成功的情况。如果执行过程中出错,则应该回滚rollback到事务开始前的状态。事务是一个不可分割的整体。1.2.一致性Consistency一致性:事务执行完成之后,数据应该满足完整性约束。举例:事务执行前A、B的存款都是100,事务内容是A转账B,则事务执行...
2019-08-05 20:59:36
2604
11
转载 MySql: 浅谈主从复制简介、原理、方式
1.简介随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题。采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制和主主复制。MySQL数据库自身提供的主从...
2019-08-05 16:51:47
406
转载 MySqL: 并发量大、数据量大的互联网业务数据库设计军规
一、基础规范1.1.必须使用InnoDB引擎解读:支持事务、行级锁,并发性能好、CPU及内存缓存页优化使得资源利用率更高。1.2.必须使用utf8mb4编码解读:万国码,无需转码,无乱码风险,节省空间。1.3.必须为表、字段添加注释解读:不要给后来者挖坑。1.4.禁止使用存储过程、触发器、视图、Event解读:高并发大数据的互联网业务,架构设计思路是解放数据库CPU,将计算转移...
2019-08-05 11:40:10
573
原创 一篇文章掌握MySql索引的语法、分类、实现原理、失效场景及优化策略
1.简介1.1.什么是索引索引是对记录集的多个字段进行排序的方法。在一张表中为一个字段创建一个索引,将创建另外一个数据结构,包含字段数值以及指向相关记录的指针。数据库的索引,可以理解为字典的目录,能够帮助我们快速找到需要查询的字。1.2.为什么需要索引使用索引的目的就是为了提高查询效率。假定表中存在5,000,000条记录,共需要1,000,000个磁盘块,当前查找字段为身份证号...
2019-08-03 17:47:07
2396
原创 SPU与SKU的简单理解
1.1.SPUStandard Product Unit,即:标准化产品单元。用途:描述一种产品。举例: 一个土豪金色IPhone X和一个银色IPhone X都是同一个SPU,不进行颜色、商家的区分。场景:数据统计,例如:通过SPU查看本月IPhone X的销售量。1.2.SKUStock Keeping Unit,即:库存量单元。用途:描述一种产品的最小存货单元,即:单品。...
2019-07-31 20:29:54
2209
原创 设计模式-代理模式-以购房中介为例
超级链接: Java常用设计模式的实例学习系列-绪论参考:《HeadFirst设计模式》1.关于代理模式代理模式是一种结构型模式。代理模式:为其他对象提供一个代理以控制对这个对象的访问。本文以购房中介为场景来学习代理模式:购房者可以直接找房主买房。如此做较累,因为买房之前要多次房屋筛选,买房之后要签订合同等等。购房者可以找房屋中介买房,购房者只需进行少量看房即可,中介将代劳筛选房...
2019-07-29 14:44:00
1871
1
apache-solr-dataimportscheduler-1.0-with-source.jar(修正版)
2018-05-03
plantuml.jar
2018-02-02
mysqlworkbench633.zip
2018-02-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人