自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 问答 (3)
  • 收藏
  • 关注

原创 ElasticSearch数据实时性原理分析与持久化

现在有这么一种业务场景,需要将海量的数据通过Hive进行数据清洗并统计,最后落库到ES中,因为需要支持大数据量的分词,模糊搜索,所以考虑用ES而不直接放到Mysql中,前端需要直接对数据进行交互,当通过后端请求向ES中新增一条数据时,页面数据刷新不会立即查询出新增的数据,即ES中的数据会存在延迟刷新。请在决定前知晓这个特性。在新增一条文档数据,返回响应数据之前,让线程睡眠1秒钟,然后再返回响应数据,发现页面在新增文档跳转到文档列表页面后可以看到新增的文档数据了,但是休眠1S也可能会出现无法正常响应的结果;

2023-01-02 21:54:05 1167 2

原创 重构之职责链模式

正式入职京东快一个月了,加上过往的实习不知不觉已经进入职场半年了,幸运的是目前所在的团队很nice,生活也开始走向了正轨,一路走来满是艰辛,22岁的现在终于可以释怀18岁的自己了,人生没有白走的路,每一步都算数!There is more to come!...

2022-07-21 22:59:12 643

原创 Kafka3.0 命令行操作

在kafka2.8中就已经开始弃用外部的zookeeper依赖了,而在内部集成了高适配的zk

2022-06-23 17:02:30 563

原创 Kafka 3.x 基本概念

Kafka是一个分布式的基于发布/订阅模式的消息队列,主要用于大数据实时处理领域。消息的发布者不会将消息直接发送给订阅者,而是将消息分成不同的类别,订阅者只接受自己感兴趣的消息Kafka是一个开源的分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和关键人物应用。...

2022-06-16 21:20:49 390

原创 Nacos集群CP架构底层Raft分布式一致性协议实现

Nacos集群CP架构底层Raft协议实现一、CAP定理分区容错性CP模式AP模式二、Raft算法Leader Election 领导选举Log Replication 日志复制Replicated state machine 复制状态机复制过程一、CAP定理百度百科:CAP原则又称CAP定理,指的是在一个分布式系统中, 一致性(Consistency)、可用性(Availability)、 分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能

2021-11-10 17:12:41 3870

原创 Nacos领域模型与服务注册基本原理

数据模型NameSpace,Group,Service/DataId目的是为了将数据模型分类,从而形成一定的效果,比如服务隔离,不同的NameSpace中的服务不能够相互访问数据模型的最佳实践NameSpace:代表不同的运行环境,Dev/Test/ProdGroup:代表某一类配置,如中间件配置,数据库配置等Service/DataId:代表某服务的具体配领域模型Nacos的三层分级模型(服务、集群、实例)主要是为了解决大型互联网公司多集群,跨DC的解决方案NameSpace:实

2021-10-29 23:10:14 263

原创 Nacos Config动态刷新原理

微服务中的配置在我们的微服务的运行环境中,每一个微服务往往不会只有一套环境,在企业中往往存在至少三套运行环境:开发、测试、生产在这套微服务系统中,会存在三个问题:配置文件的数量会随着微服务的增多而增多单个配置文件无法区分多个运行环境配置文件无法动态更新,修改配置文件后需要重启对应的微服务当我们引入配置中心,它能解决什么问题?统一的配置文件的管理提供统一的服务标准接口,服务根据标准接口拉去对应的配置,也就是常见pull/push模型支持配置文件动态更新到对应的服务业界常见的配置

2021-10-28 22:42:22 2787

原创 系统怎样做到高可用?

系统怎样做到高可用?可用性的度量高可用系统设计的思路系统设计系统运维灰度发布故障演练总结高可用性(High Availability,HA)是你在系统设计时经常会听到的一个名词,它指的是系统具备较高的无故障运行的能力。通常来讲,一个高并发大流量的系统,系统出现故障比系统性能低更损伤用户的使用体验。想象一下,一个日活用户过百万的系统,一分钟的故障可能会影响到上千的用户。而且随着系统日活的增加,一分钟的故障时间影响到的用户数也随之增加,系统对于可用性的要求也会更高。所以今天,我们就研究一下在高并发下,我们如

2021-10-27 21:27:14 780

原创 现代微服务拆分与设计

现代微服务拆分与设计一、AKF扩展立方体Y轴X轴Z轴二、前后端分离早期未分离(JSP+Servlet)半分离完全分离三、无状态服务四、RestFul服务通信在设计一个微服务的时候,一般会遵守4个原则AKF微服务拆分前后端分离无状态服务RestFul服务通信一、AKF扩展立方体微服务的拆分原则主要参考立方体中的Y轴,根据不同的业务划分微服务拆分的要点:高内聚,低耦合,每个服务完成具体的功能根据团队划分,一个团队负责1-2个服务模块,进行快速的更新迭代Y轴Y轴扩展将一个庞大的

2021-10-08 00:43:04 342

原创 【Java并发编程系列】原子类:无锁的工具的典范

原子类不可分割一个操作不可中断,即使在多线程下也保证不可中断性有什么作用?原子类的作用和锁类似,目的都是为了保证在多线程并发条件下的安全问题,但是原子类类比锁来说有两个优势锁的粒度更细,原子类可以将锁的粒度细化到变量级别, 但是通常锁的粒度都是好几行代码效率更高,但是在线程高度竞争的情况下效率会降低...

2021-10-06 00:14:33 230

原创 【Java并发编程系列】高并发工具类之线程协作工具类

一、CountDownLatchCountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。现在有这样一个运动会场景,总共有5名运动员,1名裁判,比赛开始前,所有运动员需等待裁判打出发令枪,然后开始跑,等所有运动员跑完后,裁判需要号

2021-09-25 23:50:37 180

原创 【Java并发编程系列】高并发工具类之常见并发集合

一、常见并发集合工具CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMap二、ConcurrentHashMap分析三、CopyOnWriteArrayList分析诞生原因主要是为了替代Vector和Synchronized(ArrayList),Vector和Synchronized主要是在方法上加锁,并且锁的粒度太大,而且都是共用一把锁,从而并发效率很低。适用场景主要适用于读多写少的情况读写规则在加读写锁的情况下读是共享,写

2021-09-23 22:22:18 314

原创 负载均衡算法(一致性Hash算法,通俗易懂)

一点感想自从实习后很久没有写过文章了,不知不觉来阿里已经一周多了,还是感觉自己比较幸运能够拿到心仪的大厂实习,大厂的福利也对我们这样异地他乡的人提供了许多温暖(小声bb:大厂真不缺钱啊),刚开始每天心情极度焦虑低迷,还好有一群小伙伴每天都可以电话畅聊,抱团取暖,让每天平平淡淡的日子多了几分热闹,我们当初的努力可以让我们以后有更多选择的权利,进阿里是我进大学以来的梦想和目标,一个渣本大学生鬼知道经历了什么,但现在已是过去式了,离自己的人生目标还很远,我们每个人都不希望自己一生碌碌无为,铁子你也是吧;有的人想

2021-07-12 22:57:18 2249 1

原创 详解JVM内存模型

JVM内存模型内存结构1、程序计数器(寄存器)2、虚拟机栈2.1 定义2.2 栈溢出(StackOverflow)2.3 线程运行诊断3、本地方法栈4、堆4.1 堆内存溢出4.2 查看堆内存数据5、方法区5.1、内存溢出5.2、运行时常量池5.3、StringTableStringTable特性StringTable调优内存结构1、程序计数器(寄存器)作用:用于记住下一条JVM指令的内存地址,物理上是一个寄存器,因为指令需要频繁地读取,所以JVM设计时将CPU(运算器 、 控制器 、 寄存器组 和 内

2021-06-16 18:01:46 205

原创 SpringCloud与微服务架构

SpringCloud微服务与微服务架构微服务的优缺点为什么选择SpringCloud作为微服务架构各类微服务框架对比SpringCloud是什么SpringBoot与SpringCloud关系SpringCloud VS DubboSpringCloud有哪些用处?1、微服务架构4个核心问题:服务模块很多,客户端怎么访问?这么多服务,服务间如何通信?这么多服务,如何治理?服务挂了怎么办?2、业界较成熟的解决方案:SpringCloud NetFlixSpringCloud Aliba

2021-05-31 17:42:26 200

原创 经典面试题之HashMap核心源码分析

逐行分析HashMap核心源码一、HashMap继承体系二、Node节点以及底层存储结构三、HashMap重要参数四、HashMap构造函数为什么cap要减一?五、HashMap中put源码执行流程六、HashMap中resize扩容七、HashMap中get源码执行流程一、HashMap继承体系public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable,

2021-05-28 10:47:47 102

原创 Mysql索引失效的几种情况

写在前面explain命令中type中的属性,效率从上往下递减system:系统表,少量数据,往往不需要进行磁盘 IOconst:常量连接eq_ref:主键索引 (primary key) 或者非空唯一索引 (unique not null) 等值扫描ref:非主键非唯一索引等值扫描range:范围扫描index:索引树扫描ALL:全表扫描 (full table scan)表结构:FieldTypeNullKeyDefaultidint(11)NOP

2021-05-25 14:57:18 370 2

原创 面试官:小伙子,谈谈单例模式

单例?一个类只有一个对象实例,并对外提供一个获取实例的方法。一句话就能概括单例这个设计模式,真的只有这么简单吗?单例模式分为两种方案,饿汉式和懒汉式一、饿汉式见名知意,不管需不需要使用,只要当类加载的时候就初始化单例对象public class Hungry { private static Hungry hungry = new Hungry(); private Hungry(){ } public static Hungry newInstance(){

2021-05-13 18:52:19 234 2

原创 Mysql索引数据结构B+树的演变

索引?MySQL官方对索引的定义为:索引(Index)是帮助MySQL`高效获取数据的数据结构。我们可以简单理解为:快速查找排好序的一种数据结构。下面是一张未做任何操作的表,Col1为自增主键,Col2为Value此时我想查找值为22的那一行记录,因为表中值未被排序,所以只能从头遍历5次才能查找到主键为5,值为22的那一行记录。如果表中不止这7条数据,而是百万条、千万条记录呢?查询速度可想而知的慢。索引数据结构:排序二叉树红黑树B树(B Tree)B+树(B+ Tree)二叉排序树

2021-05-06 17:39:44 315 1

原创 GIT基本操作

GIT初始化git init签名1、项目级别/仓库级别:仅在当前本地库范围内有效git config user.name kexinggit config user.email [email protected]、系统级别用户:登录当前操作系统的用户范围git config --global user.name kexinggit config --global user.email guofu_b [email protected]信息保存在:./git/config级别优先级:

2021-04-30 08:41:49 90

原创 【ElasticSearch】基于文档的基本操作并整合SpringBoot

Rest风格是一种软件架构风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。methodurl地址描述PUTlocalhost:9200/索引名称/类型名称/文档id创建文档(指定文档id)POSTlocalhost:9200/索引名称/类型名称创建文档(随机文档id)POSTlocalhost:9200/索引名称/类型名称/文档id/_update修.

2021-04-22 14:29:51 96

原创 【ElasticSearch】IK分词器

IK分词器什么是IK分词器?分词:即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱可星"会被分为"我",“爱”,“可”,“星”,这显然不符合我们的要求,所以我们需要安装中文分词器IK来解决这个问题。IK提供了两个分词算法:ik_smart和ik_max_word其中ik_smart为最少切分,ik_max_word为最细粒度划分下载安装IK 安装时

2021-04-11 22:38:06 117

原创 【ElasticSearch】ElasticSearch,kibana安装,索引,文档,类型,倒排索引

ElasticSearch一、ElasticSearch安装二、kibana安装三、ES核心概念1、索引2、文档3、类型4、倒排索引1、什么是ElasticSearch?Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web 接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,

2021-04-09 09:27:32 169

原创 【限流保护】Springboot接口限流

高并发保护常用方案缓存:缓存的目的是提升系统访问速度和增大系统处理容量降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理为什么需要限流在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应

2021-03-24 14:43:37 842

原创 【链接暴露】链接地址隐藏

为什么要链接隐藏,如何隐藏为了避免F12或着抓包获取到秒杀链接然后通过不正当手段自动化秒杀,下面我们将接口路径进行隐藏,只有当点击秒杀按钮时才能成功验证。用户在下单前,先发出一个生成Md5 hash值的请求,根据抢购商品id和用户Id用Md5加密算法和随机盐生成一个hash值存到redis中,在redis中设置过期时间,等用户真正下单时发起的下单请求(秒杀请求)携带着Md5的hash值和redis中已经存在的hash值作比较是否相等,就能判断此请求是根据脚本发起的请求(没有点击抢购秒杀按钮)还是用户在ap

2021-03-22 17:41:13 526

原创 【消息削峰】订单异步处理

为何需要异步下单在秒杀系统用户进行抢购的过程中,由于在同一时间会有大量请求涌入服务器,如果每个请求都立即访问数据库进行扣减库存+写入订单的操作,对数据库的压力是巨大的。如何减轻数据库的压力呢,我们将每一条秒杀的请求存入消息队列(例如RabbitMQ)中,放入消息队列后,给用户返回类似“抢购请求发送成功”的结果。而在消息队列中,我们将收到的下订单请求一个个的写入数据库中,比起多线程同步修改数据库的操作,大大缓解了数据库的连接压力,最主要的好处就表现在数据库连接的减少:同步方式:大量请求快速占满数据库框

2021-03-22 13:11:11 650

原创 基于Redis+Cookie实现Session共享

分布式项目中要实现单点登录(SSO - Single Sign On):对于同一个客户端(例如 Chrome 浏览器),只要登录了一个子站(例如 a.com),则所有子站(b.com、c.com)都认为已经登录。比如用户在登录淘宝后,跳转到天猫时就已经登录了。通过redis缓存和cookie实现单点登录:登录接口逻辑处理: @ResponseBody @RequestMapping("/dologin") public Result<String> doLogin

2021-03-15 12:51:45 352

原创 【优化】Redis缓存优化,双MD5加密,页面静态化

这里写目录标题一、Redis缓存整合二、封装MD5三、两次MD5进行登录加密四、共享Session一、Redis缓存整合在高并发的环境下数据库成为系统的短板,所以引入缓存,作为数据库前的一道防线,避免所有的请求直接走数据库,降低数据库的压力,数据库层只承担“能力范围内”的访问请求。由于一个项目项目中有不同模块的功能,所以在Redis封装时需要创建一个业务前缀拼接在Key前面前缀接口:/** * Key的前缀接口 * 用来区分各个模块 */public interface KeyPrefix

2021-03-14 22:39:38 359

原创 【RabbitMq】Direct(Routing路由选择)模型、Topic(动态路由)模型

Direct(路由选择)订阅消息模型在fanout消息模型中,一条消息会被所有已订阅的消费者消费。而在某些情况下,我们希望这个消息被特定的消费者消费。此时就可以用exchange中的Direct类型来实现,在fanout中,消息的转发会直接忽略Routing Key,而在Derict中,则会将消息自带的Routing Key与exchange的Routing Key相比较,相等则发送到该交换机绑定的队列。在direct模型下消息发送方发送到exchange时需要给消息携带一个Routing key

2021-02-05 21:47:55 276

原创 【RabbitMq】fanout消息模型(广播)

Fanout消息模型fanout扇出 也称广播在广播模式下,消息发送流程是这样的:可以有多个消费者每个消费者都有自己的queue队列(临时,消费完断开连接后自动删除)每个队列都要绑定到exchange交换机生产者发送的消息,只能发送到交换机,交换机决定来发送给哪个队列,生产者无法决定交换机把收到的消息发送给每一个队列,实现一条消息被多个消费者消费生产者public class Provider { @Test public void test() throws IOE

2021-02-05 15:23:13 181

原创 【RabbitMq】Work Queue消息模型,消息机制

一、Work Queue消息模型该消息模型有一个生产者和多个消费者,多个消费者可以同时消费消息这个消息模型的特点是RabbitMq会将生产者生产的消息一次性平均分配给消费者,也就是轮询生产者public class Provider { @Test public void test() throws IOException, InterruptedException { Connection connection = RabbitMqUtil.getConnecti

2021-02-04 20:07:44 149

原创 【RabbitMq】Hello World消息模型

HelloWorld消息模型HelloWorld模型是RabbitMq七大消息模型中最简单也是最容易理解的消息模型,在RabbitMq中,生产者生产消息,消费者消费消息主要结构如下:在RabbitMq中,所有程序都运行在RabbitMq Server中,这里的Virtaul Host是虚拟主机,类似于关系型数据库中的库概念,每个VirtualHost之间是相互隔离的,生产者生产消息和消费者消费消息首先是通过TCP虚拟信道传输,一个信道就是一个线程,一个TCP被多个线程共享,RabbitMq中TCP端口

2021-02-03 17:04:57 130

原创 浅谈Redis缓存穿透、击穿、雪崩

服务器高可用!Redis缓存使用流程客户端向服务器发送读请求,此时后台会先去缓存中查数据,如果数据命中,那么返回结果,反之去数据库中查询,如果数据库中查到数据,那么返回数据,并且写入缓存,如果没有查到该数据即返回空结果缓存穿透(数据未命中)概念缓存穿透的概念很简单,用户想要查询一个数据,发现Redis缓存中没有,也就是缓存没有命中,于是就向数据库查询,然后发现也没有,于是本次查询失败。当用户很多的时候(秒杀场景),如果在缓存都没有命中,于是都去请求了数据库DB,一瞬间就给数据库造成巨大的.

2021-01-21 15:44:39 100

原创 Redis哨兵模式(sentinel)

Redis哨兵模式(sentinel)概述主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。手动调节不是一种推荐的方式,更多的时候我们有限考虑哨兵(Sentinel)模式。Redis从2.8开始正式提供了Sentinel(哨兵)架构来解决这个问题。哨兵模式相当于谋朝篡位的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。单哨兵模式哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令

2021-01-20 22:30:19 168

原创 Redis事务(Jedis实现)、实现乐观锁

Redis事务Redis事务简介Redis事务的本质是一组命令的执行,一个事务中的所有命令都会被序列化,所有命令按照入队的顺序执行,先入队的先执行;Redis事务没有隔离级别;单个 Redis 命令的执行是原子性的,但 Redis 没有在事务上增加任何维持原子性的机制,所以 Redis 事务的执行并不是原子性的。一次性;顺序性;排他性Redis事务执行顺序开启事务(multi)命令入队(多条命令)执行事务(exec)Redis事务相关命令watch key1 key2 … : 监

2021-01-15 21:53:03 92 1

原创 Redis三种特殊数据类型(geospatial、hyperloglog、bitmap)

Redis三种特殊数据类型Geospatial(地理位置)127.0.0.1:6379> GEOADD china:city 116.46 39.92 beijing #将指定的地理空间位置(经度,纬度,名称)添加到key中(integer) 1127.0.0.1:6379> GEOADD china:city 121.48 31.22 shanghai(integer) 1127.0.0.1:6379> GEOADD china:city 113.23 23.16 guang

2021-01-15 16:31:35 183

原创 Redis五大基本数据类型

Redis简介Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU

2021-01-14 20:02:11 59

原创 Springboot:使用swagger便于协同开发

Springboot:使用swagger便于协同开发一、swagger简介二、springboot整合swagger1、导入pom2、编写配置类,将Docket注入容器中三、设置sawgger的运行环境、多人协作四、生成接口文档、接口测试一、swagger简介这里我在网上查了发现的大部分介绍swagger都是长篇大论,太过官方,这里简单概括:swagger是一款能够快速生成接口文档,接口注释的优秀工具二、springboot整合swagger1、导入pom <!-- springf

2021-01-01 22:41:54 409

原创 SpringBoot:整合Shiro(集成了mybatis)

Shiro三大核心:1、Subject:代表当前用户2、SecurityManager:shiro核心管理器3、realm:类似data层,用于认证授权一、pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sc

2020-12-29 15:12:56 87

原创 SpringBoot:整合SpringSecurity实现登录认证、授权、记住我、以及权限控制

SpringBoot:整合SpringSecurity一、项目结构二、pom三、编写SecurityConfig继承WebSecurityConfigurerAdapter四、首页一、项目结构二、pom<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance

2020-12-27 15:44:18 872

空空如也

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

TA关注的人

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