高并发下常见的限流算法都在这了!

​  限流简介 现在说到高可用系统,都会说到高可用的保护手段:缓存、降级和限流,本博文就主要说说限流。限流是流量限速(Rate Limit)的简称,是指只允许指定的事件进入系统,超过的部分将被拒绝服务、排队或等待、降级等处理。对于server服务而言,限流为了保证一部分的请求流量可以得到正常的响应,总好过全部的请求都不能得到响应,甚至导致系统雪崩。限流与熔断经常被人弄混,博主认为它们最大的区别在于

原创 点赞0 阅读30 收藏0 评论0 1 小时前

Mysql InnoDB 的内存结构

​  ​ 1、前言 我们都熟悉mysql数据库服务架构,也清楚 sql 的执行顺序,mysql的数据在磁盘和内存中的存储结构是采用B+树的数据结构,但是在InnoDB引擎中,数据在内存和磁盘中的展示形式以及怎么和mysql的服务架构建立联系,sql 查询和 InnoDB 引擎之前的联系,可能就不是不清楚了。 mysql 的逻辑架构图如下所示: ​ InnoDB 存储引擎结构 InnoDB存储引擎的

原创 点赞0 阅读40 收藏0 评论0 21 小时前

JVM:垃圾回收算法、垃圾回收器

垃圾回收算法 什么是垃圾?为什么要回收? 在java中,当一个对象没有被任何指针指向的时候,他就成为了一个垃圾,也就应该对其进行回收,如果不对其进行回收就会造成内存泄露,甚至是内存溢出。 垃圾回收分为两个阶段垃圾标记和垃圾回收。 垃圾标记 引用计算算法(java并未使用,不存在循环引用造成内存泄露) 对每一个对象保存一个整型的引用计数器属性,用于记录对象被引用的情况。当对象被任何一个对象引用就会对

原创 点赞0 阅读26 收藏0 评论0 1 天前

Mybatis封装JDBC入门——Mybatis执行代码及封装JDBC流程图

​   ​ 一、JDBC六个步骤 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { //1. 加载驱动 Class.forName("com.mysql.jdbc.Driver"); //2. 获取连接 conn = DriverManager.get

原创 点赞0 阅读79 收藏0 评论0 3 天前

还不懂JVM类加载?一篇文章让你10分钟搞定!

​  类加载的过程是较为复杂的,今天来梳理下 加载-双亲委派机制 ​ 什么是双亲委派机制? 如上图,如果一个类收到类加载请求,它并不会自己先去加载类,而是把这个请求委托给父类加载器执行,如果父类加载器还有父类加载器,则会进一步向上委托,依次递归,直到请求到达启动类加载器,如果父类加载器能够完成加载任务,则成功返回,如果父类加载器无法完成加载任务,子类加载器会自己尝试去加载,这就是双亲委派机制

原创 点赞0 阅读11 收藏0 评论0 5 天前

Dubbo基础知识——Dubbo的分层结构和执行流程,以及和Spring Cloud的区别。

​  RPC 简单实现一个RPC框架 我们这是 Demo,目的是突出 RPC框架重点功能 - 实现远程调用。所以啥七七八八的都没,并且我用伪代码来展示,其实也就是删除了一些保护性和约束性的代码,因为看起来太多了不太直观,需要一堆 try-catch 啥的,因此我删减了一些,直击重点。 首先我们定义一个接口和一个简单实现。 public interface AobingService {

原创 点赞0 阅读3 收藏0 评论0 6 天前

还认为Redis只能做缓存吗?太OUT了吧!

​  前言 大多数数据库,由于经常和磁盘打交道,在高并发场景下,响应会非常的慢。为了解决这种速度差异,大多数系统都习惯性的加入一个缓存层,来加速数据的读取。redis由于它优秀的处理能力和丰富的数据结构,已经成为了事实上的分布式缓存标准。 但是,如果你以为redis只能做缓存的话,那就太小看它了。 redis丰富的数据结构,使得它的业务使用场景非常广泛,加上rdb的持久化特性,它甚至能够被当作落地

原创 点赞0 阅读14 收藏0 评论0 7 天前

阿里、字节、腾讯等大厂Java岗MySQL面试高频面试题整理

​   ​ 索引相关 1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底

原创 点赞0 阅读69 收藏0 评论0 8 天前

原来这就是传说中的跳跃表,不过如此(附:跳跃表的Java实现)

​  1. 什么是跳跃表? 增加了向前指针的链表叫作跳表。跳表全称叫做跳跃表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。(摘自百度百科) ​   2. Redis中跳跃表的数据结构 ​   //zskiplistNode:跳跃表的一个节点 type

原创 点赞0 阅读36 收藏0 评论0 8 天前

聊一聊Redis是如何做到“持久化”的

​  什么是持久化? 对于持久化某度某科的解释是: 持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存) 所以对于持久化狭义的理解就是: “持久化”仅仅指把域对象永久保存到数据库中;可以广义的理解为:“持久化”包括和数据库相关的各种操作(持久化就是将有用的数据以某种技术保存起来,将

原创 点赞0 阅读44 收藏0 评论0 11 天前

【微服务理论】API + BFF 不再为兼容和适配烦恼

​  对于微服务,常见的架构模型就是API网关+服务。 API网关实现鉴权、负载均衡、中间件等公共入口逻辑。 服务实现具体的业务功能。 那么,API网关设计中又有什么坑呢? 1.0版本 直接将服务穿透到外网。 API层只是套了壳,加了鉴权、中间件而已。具体返回值由服务定。 客户端到微服务直接通信,强耦合。根本不敢重构,一改结构客户端就崩了。 需要多次请求,客户端聚合数据,工作量巨大,延迟高。 如果

原创 点赞0 阅读24 收藏0 评论0 12 天前

领导:谁再用定时任务实现关闭订单,立马滚蛋!

​   ​ 在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作,细心的你一定发现了像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内;那他们是怎么实现的呢? 一般的做法有如下几种 定时任务关闭订单 rocketmq延迟队列 rabbitmq死信队列 时间轮算法 redis过期监听 一、定时任务关闭订单(最low) 一

原创 推荐 点赞0 阅读323 收藏1 评论0 13 天前

Netty的ChannelPipline传播源码解析

​  一、基础铺垫 1. JAVA中的基本位运算符 运算符 描述 & 与 | 或 ~ 非 ^ 异或 << 左移 >> 右移 2. 位运算解释与实例 &(与) 十进制 二进制 3 0 0 1 1 5 0 1 0 1 & 后结果:1 0 0 0 1 即:对应位都为 1 时,才为 1,否则全为 0。 |(或) 十进制 二进制 3 0 0 1 1 5 0 1

原创 点赞0 阅读26 收藏0 评论0 13 天前

终于理解Spring Boot 为什么青睐HikariCP了,图解的太透彻了!

​  前言 现在已经有很多公司在使用HikariCP了,HikariCP还成为了SpringBoot默认的连接池,伴随着SpringBoot和微服务,HikariCP 必将迎来广泛的普及。 下面博主带大家从源码角度分析一下HikariCP为什么能够被Spring Boot 青睐,文章目录如下: ​ 零、类图和流程图 开始前先来了解下HikariCP获取一个连接时类间的交互流程,方便下面详细流程的阅

原创 点赞0 阅读20 收藏0 评论0 14 天前

Redis系列——哨兵挂了,redis 还能正常工作吗?

​  前言 redis 主挂掉了,怎么将请求转移到从上去,如果从是多个,从是怎么进行选举的呢? 那么就要看我们今天的主角了,redis哨兵,redis哨兵能够帮助我们自动的完成选主和故障转移操作,这次还是会多画图,来加深大家都这个过程的记忆和理解。 redis哨兵都干了什么 redis哨兵是一个运行的特殊的redis进程,他主要有三个使命: 监控 选主 通知 监控的是什么 哨兵主要是监听主库和从库

原创 点赞0 阅读70 收藏0 评论0 14 天前

Redis基于Proxy以及客户端的数据分片和Redis-Cluster分片

​  一、先谈单节点的 Redis 存在的问题 单点故障 数据容量问题 连接数、请求压力问题 主从+哨兵架构,解决了单点问题和请求压力问题,但是数据容量仍然是 1:1 的克隆数据,数据容量问题依旧存在,数据并没有分摊到各个节点。 二、如何解决单点数据容量问题 A:基于客户端的方案 1.业务拆分数据 从业务的角度不同的模块按约定好的逻辑落入不同的Redis 节点。 比如:评论业务用一个redis阶段

原创 点赞0 阅读19 收藏0 评论0 18 天前

B站崩了,如何防止类似事故的出现?

大家都知道虽然我是一个程序员,但是我非常热爱运动,比如跳舞,这不每天回家睡前我都会在B站舞蹈区学习相关的舞蹈。 昨天也不例外,我一洗漱完就飞奔坐在电脑前,打开B站舞蹈区准备学习咬人喵,欣小萌、小仙若他们新的舞蹈动作,不得不说老婆们跳的真好,连我这种内向的人也不自觉的跟着扭动了起来。   正当我准备学下一个动作的时候,我发现怎么404 NOT found了。   坏了,作为开发的我第一直觉是

原创 点赞0 阅读149 收藏0 评论0 20 天前

Java内存模型(JSR - 133)都解决了哪些问题?

​   ​ 究竟什么是内存模型? 在多处理系统中,每个 CPU 通常都包含一层或者多层内存缓存,这样设计的原因是为了加快数据访问速度(因为数据会更靠近处理器) 并且能够减少共享内存总线上的流量(因为可以满足许多内存操作)来提高性能。内存缓存能够极大的提高性能。 但是同时,这种设计方式也带来了许多挑战。 比如,当两个 CPU 同时对同一内存位置进行操作时会发生什么?在什么情况下这两个 CPU

原创 点赞0 阅读0 收藏0 评论0 21 天前

最早的90后Java开发已经31岁,最早的00后已进网易大厂,你在哪里?

​  前言 前段时间跟朋友一起聚会,谈到了现在的00后年轻人,我提起了我认识的一个大三就已经拿到网易Offer的小学弟。 这小学弟是00年的,专升本进入我们学校,和我一样搞Java开发。学习上非常刻苦,每天第一个到教室,每次都坐第一排,是班里少数的会做课堂笔记的学生之一。 在半个月前,我看见他发朋友圈晒了网易Offer,于是私下和他交流了一下。 他说,在他们公司不远的地方就是阿里,他的下个目标是入

原创 点赞0 阅读19 收藏0 评论0 21 天前

kafka生产者的缓存机制介绍

​  ​ 前言 今天我们来看下kafka生产者客户端缓存架构的设计是怎样的?我们先整体看下发送消息到java资料分服务端的完整过程和架构: ​ 消息累加器 其实,整个生产者客户端是由两个线程协调运行的,一个是主线程Producer线程,一个是Sender线程。由主线程生产消息,然后缓存到消息累加器(RecordAccumulator);而Sender线程则负责从消息累加器中不断获取消息,然后发送到

原创 点赞0 阅读27 收藏0 评论0 22 天前

深入理解JVM - 分代的基本概念

​  前言  ​ 本次讲述jvm分代模型的基础概念,这个专栏会由浅入深的不断构建起来,循序渐进,是非常基础的内容 概述: 讲述JVM的基础分代模型以及版本升级的处理。 对象分配的基础概念和知识。 长期存活的对象是如何躲过垃圾回收进入到老年代 jvm内存的核心参数解释以及基础配置 JVM的分代模型 ​ JVM的基础分代模型:年轻代,老年代,永久代。这里需要注意内存模型通常是和垃圾回收期相辅相成的,现

原创 点赞0 阅读33 收藏0 评论0 24 天前

面试拼多多 Java 岗被刷了三次,在家闭关刷题66天,卷土重来,终获offer

​  引言 这是群里一个朋友分享的博客,讲述了他进入大厂的故事。(为数不多的,让我真心佩服的人) 他之前就一直就想进拼多多工作,没别的,就冲着优渥的薪资待遇去的。 ​ 故事开始 我是2021届毕业生,大专学历,没啥背景,当初选择“计算机软件工程”这个专业就是冲着程序员的高薪去的,穷学IT富学商。 感觉这是见效最快的一个行业了吧。 找工作那点事 简单介绍一下自己的背景:农村家庭,我是长子,下面还有一

原创 点赞0 阅读36 收藏0 评论0 25 天前

统一认证授权平台keycloak太牛了,我要搞一搞

​  最近想要打通几个应用程序的用户关系,搞一个集中式的用户管理系统来统一管理应用的用户体系。经过一番调研选中了红帽开源的Keycloak,这是一款非常强大的统一认证授权管理平台。之所以选中了Keycloak是基于以下几个原因。 易用性 Keycloak为Web应用和Restful服务提供了一站式的单点登录解决方案。它的目标就是让应用的安全管理变得简单,让开发人员可以轻松地保护他们的应用程序和

原创 点赞0 阅读5 收藏0 评论0 26 天前

Redisson 分布式锁源码——公平锁加锁

​  前言 默认的加锁逻辑是非公平的。 在加锁失败时,线程会进入 while 循环,一直尝试获得锁,这时候是多线程进行竞争。就是说谁抢到就是谁的。 Redisson 提供了 公平锁 机制,使用方式如下: RLock fairLock = redisson.getFairLock("anyLock"); // 最常见的使用方法 fairLock.lock(); 下面一起看下公平锁是如何实现的?

原创 点赞0 阅读35 收藏0 评论0 27 天前

@Autowired报错原因分析和4种解决方案!

​  ​ 上图的报错信息相信大部分程序员都遇到过,奇怪的是虽然代码报错,但丝毫不影响程序的正常执行,也就是虽然编译器 IDEA 报错,但程序却能正常的执行,那这其中的原因又是为何? ​ 报错原因分析 报错的原因首先是因为 IDEA 强大的报警机制,@Autowired 为 Spring 的注解,含义是将某类动态的注入到当前类中,如下图所示: ​ @Autowired 默认是根据 type 进行注入

原创 点赞0 阅读2 收藏0 评论0 29 天前

在小厂做Java开发五年,离职后成功入职字节,给大家做个复盘和总结,还有几点建议

​  ​ 决定换工作 最近换了份工作,当时和群里的朋友也聊过换工作的话题,他们都觉得这是一次非常冒险的行为,说我这是一次豪赌——成了会有更好的职业发展,没成可能就会出现两三年的发展断层,甚至影响职业生涯路径。一步错,步步错。 我当时也仔细的考虑过了,的确有很大的风险,毕竟现在的环境下,要找到一份合心意的工作是非常不容易的,一个失误,说不好就什么都没有了。 但是我还是决定去试一下,因为,在小厂里,我

原创 点赞0 阅读30 收藏0 评论0 2021-07-02

『深入学习 Spring Boot』——Bean 实例化流程

​  ​ Bean 实例化 finishBeanFactoryInitialization(beanFactory) protected void finishBeanFactoryInitialization(ConfigurableListableBeanFactory beanFactory) { // Initialize conversion service for t

原创 点赞0 阅读44 收藏0 评论0 2021-07-01

[避坑] 太卷了!太卷了!一个技术总监出来求职,竟然找不到工作!

​  太卷了,太卷了,太卷了!前段时间,我一个朋友,身为一个技术总监离职后出来求职,竟然找不到工作!属实是震惊我一整年。 之后,我也就这个事件本身进行了一些思考,下面说说我的看法吧。 ​ 事件缘由 前段时间,一个在北京进行技术交流时认识的一个朋友问我有没有工作岗位介绍,他说他这段时间在找工作,但是一直找不到。 我就觉得很奇怪,上次见到这位朋友时他不是还在一个公司任技术总监吗?怎么就突然就失业了

原创 点赞0 阅读79 收藏0 评论0 2021-06-30

RabbitMQ进阶——RabbitMQ 重试机制,看这篇就够了

​  前言 消费者在处理消息的过程中可能会发生异常,那么此时此刻该如何处理这个异常的消息呢? RabbitMQ有两个方法channel.basicNack 或 channel.basicReject能够让消息重新回到原队列中,这样子可以实现重试。但是如果第二次消费又发生了异常,一直消费一直异常。由于没有明确重试次数,会造就无限重试,这是一个致命的问题。 本文就来使用spring-rabbit中自带

原创 点赞0 阅读67 收藏0 评论0 2021-06-30

怒了!!!专科怎么了?搞学历歧视?专科这样做,照样牛掰!

​  前段时间某招聘软件上的一张聊天记录截图火了,同样出名的还有一位名叫“吴先生”的HR。 ​ 在这张聊天记录截图中,我们可以看到这位HR的观点:“考不上本科的都是智商有问题的。” 随后这张聊天截图被曝光到网上,引起了一阵议论的热潮:考不上本科的都是智商有问题的?这是哪门子的道理? 对于这个HR的说法,很多网友纷纷表达了自己的想法 学历并不能起到一锤定音的作用。 网友甲:说出这样话的人,书也是

原创 点赞0 阅读99 收藏0 评论0 2021-06-28
  • 1
  • 2