6 程序猿进阶

尚未进行身份认证

我要认证

梦想成为自由职业者

等级
TA的排名 6k+

Semaphore 信号量

Semaphore 是一个计数信号量,必须由获取它的线程释放。Semaphore 是 Synchronized 的加强版,常用于限制可以访问某些资源的线程数量,例如通过 Semaphore限流。Semaphore 只有3个操作:初始化、增加、减少。import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.con

2020-10-22 22:23:59

SpringBoot 通过Swagger2 生成接口规范

如今,REST和微服务已经有了很大的发展势头。但是,REST规范中并没有提供一种规范来编写我们的对外 REST接口 API文档。每个人都在用自己的方式记录 api文档,因此没有一种标准规范能够让我们很容易的理解和使用该接口。我们需要一个共同的规范和统一的工具来解决文档的难易理解文档的混乱格式。Swagger(在谷歌、IBM、微软等公司的支持下)做了一个公共的文档风格来填补上述问题。在本博客中,我们将会学习怎么使用 Swagger的 Swagger2注解去生成REST API文档。Swagger(现在是

2020-10-21 23:35:33

索引的代价

通过一个示例,来说明索引的代价。如下,给 person_info表中创建一个联合索引 idx_name_birthday_phone_number。CREATE TABLE person_info( id INT NOT NULL auto_increment, name VARCHAR(100) NOT NULL, birthday DATE NOT NULL, phone_number CHAR(11) NOT NULL, country varchar(1

2020-10-20 23:21:48

线程池的三大问题

【问题一】:JDK 实现的这个线程池优先把任务放入队列暂存起来,而不是创建更多的线程,它比较适用于执行 CPU 密集型的任务,也就是需要执行大量 CPU 运算的任务。所以当前线程数超过核心线程数时,线程池不会增加线程,而是放在队列里等待核心线程空闲下来。但是,我们平时开发的 Web 系统通常都有大量的 IO 操作,比方说查询数据库、查询缓存等等。任务在执行 IO 操作的时候 CPU就空闲了下来,这时如果增加执行任务的线程数而不是把任务暂存在队列中,就可以在单位时间内执行更多的任务,大大提高了任务执行的吞

2020-10-20 23:14:05

Mysql SQL优化

目录一、不要建立太多索引二、联合索引使用问题匹配左边的列匹配范围值排序三、匹配列前缀四、覆盖索引五、让索引列在比较表达式中单独出现六、页分裂带来的性能损耗七、减少对行锁的时间八、count 函数优化九、order by性能优化十、隐式类型转换十一、隐式字符编码转换十二、Join优化Mysql 查询执行的过程链接一、不要建立太多索引我们虽然可以根据我们的喜好在不同的列上建立索引,但是建立索引是有代价的:【1】空间上的代价:每建立一个索

2020-10-20 23:13:54

InnoDB 索引深入剖析

InnoDB页将数据划分为若干个页(page),以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。InnoDB行格式我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为行格式或者记录格式。记录的额外信息:分别是变长字段长度列表、NULL值列表和记录头信息【1】变长字段长度列表:MySQL中比如 VARCHAR(M)、VARBINARY(

2020-10-19 14:55:56

Kafka 实现延迟队列、死信队列、重试队列

Kafka中实现延迟队列在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些 Kafka 内部的主题(delay_topic)中,这些内部主题对用户不可见,然后通过一个自定义的服务拉取这些内部主题中的消息,并将满足条件的消息再投递到要发送的真实的主题中,消费者所订阅的还是真实的主题。如果采用这种方案,那么一般是按照不同的延时等级来划分的,比如设定5s、10s、30s、1min、2min、5min、10min、20min、30min、45min、1hour、2

2020-10-17 15:20:34

Kafka 事务

目录生产者事务相关配置消费者事务相关配置Kafka 事务原理在了解 Kafka的事务之前,先说一下 Kafka中幂等和事务(Kafka 0.11.0.0版本引入的两个特性)以此来实现 Exactly once(精确一次)了解更多链接。幂等:生产者在进行重试的时候有可能会重复写入消息,而使用 Kafka的幂等性功能之后就可以避免这种情况。生产者事务相关配置开启幂等性功能的方式很简单,只需显式地将生产者客户端参数 enable.idempotence=true(默认值为false

2020-10-16 23:39:24

leader epoch

leader epoch 代表 Leader 的纪元信息(epoch),初始值为0。每当 Leader 变更一次,leader epoch 的值就会加1,相当于为 Leader 增设了一个版本号。每个副本中还会增设一个矢量 <LeaderEpoch => StartOffset>,其中 StartOffset 表示当前 LeaderEpoch 下写入的第一条消息的偏移量。假设有两个节点A和B,B是leader节点,里面的数据如图:A发生重启,之后A不是先忙着截断日志而是先发送O

2020-10-16 23:38:14

Kafka 之 HW 与 LEO

HW(High Watermark):俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。分区 ISR 集合中的每个副本都会维护自身的 LEO,而 ISR 集合中最小的 LEO 即为分区的 HW,对消费者而言只能消费 HW 之前的消息。多副本下,各个副本中的HW和LEO的演变过程某个分区有3个副本分别位于 broker0、broker1 和 broker2 节点中,假设 broker0 上的副本1为当前分区的 leader 副本,那么副本2和副本

2020-10-16 23:37:42

Kafka 消息送达语义

目录生产者 ProducerProducer At least once配置Producer At most once配置Producer Exactly once配置Kafka如何实现消息发送幂等性消费者 ConsumerConsumer At least once配置Consumer At most once配置Consumer Exactly once配置消息送达语义是消息系统中一个常见的问题,主要包含三种语义:【1】At most once:消息发送或消费至多

2020-10-16 11:55:43

线程池在业务中的实践

在当今的互联网业界,为了最大程度利用 CPU的多核性能,并行运算的能力是不可或缺的。通过线程池管理线程获取并发性是一个非常基础的操作,让我们来看两个典型的使用线程池获取并发性的场景。快速响应用户请求描述:用户发起的实时请求,服务追求响应时间。比如说用户要查看一个商品的信息,那么我们需要将商品维度的一系列信息如商品的价格、优惠、库存、图片等等聚合起来,展示给用户。分析:从用户体验角度看,这个结果响应的越快越好,如果一个页面半天都刷不出,用户可能就放弃查看这个商品了。而面向用户的功能聚合通常非常复杂

2020-10-15 20:48:23

美团万亿级 KV 存储架构与实践

KV 存储作为美团一项重要的在线存储服务,承载了在线服务每天万亿级的请求量。在 2019 年 QCon 全球软件开发大会(上海站)上,美团高级技术专家齐泽斌分享了《美团点评万亿级 KV 存储架构与实践》,本文系演讲内容的整理,第一部分讲述了美团 KV 存储的发展历程;第二部分阐述了内存 KV Squirrel 架构和实践;第三部分介绍了持久化 KV Cellar 架构和实践;最后分享了未来的发展规划和业界新趋势。美团点评 KV 存储发展历程美团第一代的分布式 KV 存储如下图左侧的架构所示,.

2020-10-14 22:35:41

MySQL 索引原理分析

平衡多路查找树(B-Tree)B-Tree是为磁盘等外存储设备设计的一种平衡查找树。因此在讲 B-Tree之前先了解下磁盘的相关知识。系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位,大小为4K,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB,可通过参数innodb_page_size将页的大小设置为4K、8K、16K,在 MySQL中可通过如下命令

2020-10-13 20:09:16

接口限流常见的四种算法

目录固定窗口计数器滑动窗口计数器漏桶算法令牌桶算法固定窗口计数器将时间划分为多个窗口,窗口内出现一次请求就将计数器加一,如果计数器超过了限制数量,则本窗口内后续请求都被丢弃当,时间到达下一个窗口时,计数器重置。固定窗口计数器是最为简单的算法,但这个算法有时会出现通过请求量允许为限制的两倍。考虑如下情况:限制 1 秒内最多通过 5 个请求,在第一个窗口的最后半秒内通过了 5 个请求,第二个窗口的前半秒内又通过了 5 个请求。这样看来就是在 1 秒内通过了10 个请求。滑动窗口计

2020-10-12 23:04:47

Nacos 服务发现

目录一、Nacos 简介二、搭建 Nacos服务端三、服务生产者与消费者配置四、服务发现数据模型五、服务管理一、Nacos 简介Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos 使服务更容易注册,并通过 DNS或 HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求;官网为什么需要注册中心:微服务可能是部署在云环境的,服务实例的网络位置或许是动态分配的。另外,每一

2020-10-12 23:03:01

Skywalking 链路追踪

Skywalking 概述什么是 APM系统APM 系统概述APM(Application Performance Monitoring)即应用性能管理系统,是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进行检测、优化、提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT拥有的成本。APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。分布式链路追踪随着分布式系统和

2020-10-11 13:57:32

Zab(Zookeeper Atomic Broadcast)协议

目录一、什么是 Zab协议二、消息广播模式三、崩溃恢复模式四、数据同步五、ZAB协议原理一、什么是 Zab协议Zab( Zookeeper Atomic Broadcast:Zookeeper原子广播)Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。【1】Zab协议是为分布式协调服务 Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议 ,是 Zookeeper保证数据一致性的核心算法。Zab借鉴了 Paxos算法,但又不像 Paxos那样,是一

2020-10-10 21:05:58

分布式系统常见问题

目录一、网络二、延迟三、带宽四、网络是安全的五、拓扑不会改变六、有一位管理员七、运输成本八、网络是同质的总结一、网络问题:今天的大多数系统都会调用其他系统。您是否正在与第三方系统(支付网关,会计系统,CRM)集成?你在做网络服务电话吗?如果呼叫失败会发生什么?如果您要查询数据,则可以进行简单的重试。但是如果您发送命令会发生什么?我们举一个简单的例子:var creditCardProcessor = new CreditCardPaymentService(

2020-10-09 20:53:20

Sentinel 流量控制

Sentinel 介绍Sentinel 是阿里巴巴出品的面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流,流量整形、熔断降级、系统负载保护等多个维度来保障微服务的稳定性。主页地址 Sentinel Hystrix resilience4j 隔离策略 信号量隔离(并发线程隔离) 线程池隔离/信号量隔离 信号量隔离 熔断降级策略 基于响应时间、异常比率、异常数 基于异常比率 基于异常比率、响应时间 实时统计实现 .

2020-10-09 20:52:51

查看更多

勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到达人
    签到达人
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证
    技术圈认证
    用户完成年度认证,即可获得
  • 阅读者勋章Lv3
    阅读者勋章Lv3
    授予在CSDN APP累计阅读博文达到30天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 分享达人
    分享达人
    成功上传6个资源即可获取