自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 6种常见分布式唯一ID生成策略及它们的优缺点对比

全局唯一的 ID 几乎是所有系统都会遇到的刚需。这个 id 在搜索, 存储数据, 加快检索速度 等等很多方面都有着重要的意义。有多种策略来获取这个全局唯一的id,针对常见的几种场景,我在这里进行简单的总结和对比。简单分析一下需求所谓全局唯一的 id 其实往往对应是生成唯一记录标识的业务需求。这个 id 常常是数据库的主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求。所以往往要有一个time字段,并且在t

2021-05-14 09:46:33 169

转载 史上最详细的Hadoop环境搭建

转载:https://blog.csdn.net/GitChat/article/details/77849331?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channe

2020-11-10 16:18:15 596

转载 知道硬盘很慢,但没想到比 CPU Cache 慢 10000000 倍

转载:https://mp.weixin.qq.com/s/-E5jcp7tfkXjsSu2vzdeAw前言大家如果想自己组装电脑的话,肯定需要购买一个 CPU,但是存储器方面的设备,分类比较多,那我们肯定不能只买一种存储器,比如你除了要买内存,还要买硬盘,而针对硬盘我们还可以选择是固态硬盘还是机械硬盘。相信大家都知道内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,而硬盘则不会,因为硬盘是持久化存储设备,同时也是一个 I/O 设备。但其实 CPU 内部也有存储数据的组件,这个应

2020-11-10 13:35:43 221

转载 你不好奇 CPU 是如何执行任务的?

转载:https://mp.weixin.qq.com/s/djRd9g00vvIpSr6O07OOpA前言你清楚下面这几个问题吗? 有了内存,为什么还需要 CPU Cache? CPU 是怎么读写数据的? 如何让 CPU 能读取数据更快一些? CPU 伪共享是如何发生的?又该如何避免? CPU 是如何调度任务的?如果你的任务对响应要求很高,你希望它总是能被先调度,这该怎么办? … 这篇,我们就来回答这些问题。正文CPU 如何读

2020-11-10 13:32:50 126

转载 要搞懂 Redis 为什么这么快,看这 15 张图就够了

转载:https://mp.weixin.qq.com/s/z0wH-eCp0zoVnj4tAnZPrw作为一名后端工程师,工作中你肯定和 Redis 打过交道。Redis 为什么快,这点想必你也知道,至少为了面试也做过准备。很多人知道 Redis 快仅仅因为它是基于内存实现的,对于其它原因倒是模棱两可。那么今天就来一起看看:- 思维导图 -基于内存实现这点在一开始就提到过了,这里再简单说说。Redis 是基于内存的数据库,那不可避免的就...

2020-11-10 11:40:24 154

转载 10 张图打开 CPU 缓存一致性的大门

转载:https://mp.weixin.qq.com/s/PDUqwAIaUxNkbjvRfovaCg前言直接上,不多 BB 了。正文CPU Cache 的数据写入随着时间的推移,CPU 和内存的访问性能相差越来越大,于是就在 CPU 内部嵌入了 CPU Cache(高速缓存),CPU Cache 离 CPU 核心相当近,因此它的访问速度是很快的,于是它充当了 CPU 与内存之间的缓存角色。CPU Cache 通常分为三级缓存:L1 Cache、L2 Cache、L3 Cach

2020-11-10 11:38:55 145

转载 「调度算法」,20 张图一举拿下

转载:https://blog.csdn.net/qq_34827674/article/details/108464374?spm=1000.2115.3001.4128前言最近,我偷偷潜伏在各大技术群,因为秋招在即,看到不少小伙伴分享的大厂面经。然后发现,操作系统的知识点考察还是比较多的,大厂就是大厂就爱问基础知识。其中,关于操作系统的「调度算法」考察也算比较频繁。所以,我这边总结了操作系统的三大调度机制,分别是「进程调度/页面置换/磁盘调度算法」,供大家复习,希望大家在秋招能斩获自己心

2020-11-04 15:22:54 1108

原创 键盘敲入 A 字母时,操作系统期间发生了什么...

转载:https://mp.weixin.qq.com/s/04BkLtnPBmmx6CtdQPXiRA前言键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「键盘敲入 A 字母时,操作系统期间发生了什么吗」?那要想知道这个发生的过程,我们得先了解了解「操作系统是如何管理多种多样的的输入输出设备」的,等了解完这个后,我们再来看看这个问题,你就会发现问题已经被迎刃而解了。正文设备控制器我们的电脑设备可以接非常多的输入输出设备,比如键盘、鼠标、显示器、网卡、硬盘、打印

2020-11-04 15:18:33 149

原创 30图带你彻底掌握 AQS!

转载:https://mp.weixin.qq.com/s/ZNURbYIdYqDNXLtRAvDxBQ前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 A.

2020-10-19 16:35:04 203

转载 一口气搞懂「文件系统」,就靠这 25 张图了

转载:https://blog.csdn.net/weixin_43839785/article/details/108808644?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242前言正文文件系统的基本组成文件系统是操作系统中负责管理持久数据的子系统,说简单点,就是负责把用户的文件存到磁盘硬件中,因为即使计算机断电了,磁盘里的数据并不会丢失,所以可以持久化的保存文件。

2020-10-19 14:59:28 107

原创 原来 8 张图,就可以搞懂「零拷贝」了

转载:https://mp.weixin.qq.com/s/buXabqGlakFqpHN-o09BbQ前言磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量,另外操作系统内核中的磁盘高速缓存区,可以有效的减少磁盘的访问次数。这次,我们就以「文件传输」作为切入点,来分析 I/O 工作方式,以及如何优化传输文件的性能。正文为什么要有 DMA 技术?

2020-10-19 14:54:50 161 1

原创 24张图带你彻底理解Java中的21种锁

转载:https://mp.weixin.qq.com/s/BkqlcroklsthJJTtI-Xtow本篇主要内容如下:本篇主要内容帮你总结好的锁:序号 锁名称 应用 1 乐观锁 CAS 2 悲观锁 synchronized、vector、hashtable 3 自旋锁 CAS 4 可重入锁 synchronized、Reentrantlock、Lock 5 读写锁 ReentrantReadW

2020-10-19 13:44:15 573 1

原创 分布式锁

转载:https://blog.csdn.net/w372426096/article/details/103761286前言在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性

2020-09-30 12:13:45 353

转载 常用 MySQL 分库分表方案

一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 ->分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 ->分库。2、CPU瓶颈第一种:SQL问题,如SQL中..

2020-08-26 15:04:29 182

原创 20个使用 Java CompletableFuture的例子

转载:https://mp.weixin.qq.com/s/QZnHePlNB2je8grkrb0xsw 在Java中异步编程,不一定非要使用rxJava, Java本身的库中的CompletableFuture可以很好的应对大部分的场景。 这篇文章介绍 Java 8 的 CompletionStage API和它的标准库的实现 CompletableFuture。API通过例子的方式演示了它的行为,每个例子演示一到两个行为。 既然CompletableFut...

2020-08-26 10:01:39 168

转载 接口如何设计?安全如何保证?签名如何实现?防重如何实现?

说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.一:token 简介Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请

2020-06-23 11:04:46 214

原创 当输入 xxxxHub 后,到网页显示,其间发生了什么?

转载自:https://mp.weixin.qq.com/s/clVnq9tXbSUC1U1kCnA8YA正文接下来以下图较简单的网络拓扑模型作为例子,探究探究其间发生了什么?01 孤单小弟 —— HTTP浏览器做的第一步工作是解析 URL首先浏览器做的第一步工作就是要对URL进行解析,从而生发送给Web服务器的请求信息。让我们看看一条长长的 URL 里的各个...

2020-03-27 12:15:05 5892

转载 MQ消息最终一致性解决方案

转载:https://www.jianshu.com/p/eb571e4065ec,用于自己学习记录随着分布式服务架构的流行与普及,原来在单体应用中执行的多个逻辑操作,现在被拆分成了多个服务之间的远程调用。虽然服务化为我们的系统带来了水平伸缩的能力,然而随之而来挑战就是分布式事务问题,多个服务之间使用自己单独维护的数据库,它们彼此之间不在同一个事务中,假如A执行成功了,B执行却失败了,而A的事...

2020-01-14 10:01:08 787

原创 一个秒杀系统的设计思考

转载自方志朋的博客,仅用于自己学习,转载链接:https://mp.weixin.qq.com/s/2aBDiUzS96I33SjpE1YLpA目录1.前言2.整体思考3.高性能3.1 动静分离3.1.1 数据拆分3.1.2静态缓存3.1.3数据整合3.1.4小结3.2热点优化3.2.1热点操作3.2.2热点数据3.3 系统优化...

2019-12-02 15:41:59 214

原创 手写线程池

1.定义线程池接口/** * 线程池接口,用于对线程进行管理 * 1.执行一个任务 * 2.关闭线程池 * 3.增加线程池中线程的数量 * 4.减少线程池中线程的数量 **/public interface ThreadPool<Job extends Callable> { /** * 将任务放入到线程池中进行执行 * @param ...

2019-11-26 13:50:52 127

原创 服务器架构演进

此博客复制方志朋的博客,用于记录服务器架构演进1.概述本文以淘宝作为例子,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。2.基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍。1)什么是分布式?系统中...

2019-11-25 17:07:27 544

原创 负载均衡策略(二.随机策略)

随机策略从服务器列表中随机选择一个服务,然后该将请求转发到随机选择的服务上。随机策略思路如下:1.获取注册到注册中心的总服务列表,服务状态为UP的服务列表2.判断总服务列表和服务状态为UP的服务列表是否为null或者数量为0,若是,则返回null3.根据服务的总数量,或者随机服务4.若服务为null,则重复1,2,3步骤5.若服务不为null,判断服务是否是存活状...

2019-06-19 15:07:22 765

原创 负载均衡策略(一)

在微服务架构中,我们不可避免的需要用到各种负载均衡算法,目前在SpringCloud体系中,Ribbon提供各种负载均衡算法。使用负载均衡的原因:1.高可用,当集群中一台或者多台机器down掉时,剩余的没有down掉的机器能够保证服务的可用性2.高性能,当服务请求过多的时候,能够起到分流的作用,避免一台机器上积累过多的请求,短时间内对CPU,内存,磁盘IO消耗过多,影响服务的性能...

2019-06-19 14:30:59 160

原创 Springboot简单的自动配置模块

在开发过程中,我们需要根据不同的应用场景添加不同的模块,比如jdbc操作,我们除了添加基础的接口模块外,还需要根据不同的数据库添加针对该数据库的模块,在这样的场景下,就需要用到自动配置模块。实现一个简单的自动配置模块的步骤:1.构建一个配置类,用于读取配置文件本例子直接读取application.properties,若有自定义的配置文件,可以单独进行配置@Configur...

2019-06-12 15:55:40 490

原创 Zookeeper分布式共享锁

在同一个服务内,如果我们要对同一个资源进行操作,可以通过synchronized关键字,Lock接口对多线程进行加锁。但是在分布式的环境下,这样的方式就不可控了,需要使用分布式的方式进行加锁。本文主要讲解了利用zookeeper来实现分布式共享锁。程序流程如下:程序逻辑1.程序节点启动时到zookeeper上注册一个“短暂+序号”的znode,并且监听父节点2.获取父节点...

2019-06-04 17:01:41 182

原创 Java8时间类型

具体思路都是通过Instant当中介,然后通过Instant来创建LocalDateTime新的日期类转旧的也是如此,将新的先转成LocalDateTime,然后获取Instant,接着转成Date/** * Date类型转LocalDateTime类型 * java.util.Date --&gt; java.time.LocalDateTime * @p...

2019-01-23 17:39:24 296

转载 java集合类(四)(java8 ConcurrentHashMap)

Java8 ConcurrentHashMapJava7 中实现的 ConcurrentHashMap 说实话还是比较复杂的,Java8 对 ConcurrentHashMap 进行了比较大的改动。建议读者可以参考 Java8 中 HashMap 相对于 Java7 HashMap 的改动,对于 ConcurrentHashMap,Java8 也引入了红黑树。说实话,Java8 Concu...

2018-08-23 15:21:00 260

转载 java集合类(三)(java8 HashMap)

Java8 HashMapJava8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决于链表的长度,为 O(n)。为了降低这部分的开销,在 Jav...

2018-08-23 15:16:57 276

转载 java集合类(二)(java7 ConcurrentHashMap)

Java7 ConcurrentHashMapConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解就是,...

2018-08-23 15:12:18 127

转载 java集合类(一)(java7 HashMap)

Java7 HashMapHashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。首先,我们用下面这张图来介绍 HashMap 的结构。这个仅仅是示意图,因为没有考虑到数组要扩容的情况,具体的后面再说。大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Ent...

2018-08-23 15:07:28 137

转载 java多线程(一)(LongAdder)

转载:https://blog.csdn.net/u011392897/article/details/60480108LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInt,成为一个用于高并发情况下的高效的通用计数器。高并发下计数,一般最先想到的应该是AtomicLong/AtomicInt,AtmoicXXX使用硬...

2018-08-23 11:04:25 3001

转载 java中的锁(一)(锁的介绍)

转载:https://blog.csdn.net/zqz_zqz/article/details/70233767/测试结果:1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短时间低并发下,效率比synchronized高,有时甚至比LongAdder还高出一点,但是高并发下,性能...

2018-08-23 10:08:50 23942 1

原创 分布式情况下生成唯一Id

在分布式的情况下要生成唯一Id,需要考虑高并发,多机器的情况一个思路就是 机器码-时间戳-索引,代码如下:public class Test { private static String macAddress; // 本机机器码 private ReentrantLock lock = new ReentrantLock(); // 可重入锁 priva...

2018-07-20 17:14:42 184

原创 JVM调优(jstack找出最耗CPU的线程及代码)

jstack找出最耗CPU的线程及代码1.通过top命令找出我们程序的进程2.通过top -Hp &lt;pid&gt; 查看耗CPU的线程发现133603线程一直在耗CPU3.使用printf "%x\n" &lt;pid(线程的pid)&gt; 将线程号转化成16进制4.使用jstack查看最耗CPU的代码jstack &lt;进程的pid&gt; | grep -A 13 &lt;线程的16...

2018-07-16 09:48:51 756

转载 redis常用功能分析

转载:https://blog.csdn.net/u010963948/article/details/795897101.什么是redis?   Redis 是一个基于内存的高性能key-value数据库。   2.Reids的特点     Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flus...

2018-06-05 11:25:40 526

转载 redis锁处理并发问题

转载:https://blog.csdn.net/u010963948/article/details/79381191redis锁处理并发问题redis锁处理高并发问题十分常见,使用的时候常见有几种错误,和对应的解决办法,在此进行自己的总结和整理。set方式setnx方式setnx+getset方式set方式 作为redis小白,一开始能想到的使用redis加锁的方式就是set。 加锁:redi...

2018-06-05 11:24:53 656

转载 Redis实现分布式锁全局锁—Redis客户端Redisson中分布式锁RLock实现

转载:https://blog.csdn.net/u010963948/article/details/792403561. 前因    以前实现过一个Redis实现的全局锁, 虽然能用, 但是感觉很不完善, 不可重入, 参数太多等等.    最近看到了一个新的Redis客户端Redisson, 看了下源码, 发现了一个比较好的锁实现RLock, 于是记录下.2. Maven依赖[html] vi...

2018-06-05 11:24:04 7682

转载 Redis分布式客户端之Redisson的基本使用

转载:https://blog.csdn.net/u010963948/article/details/79240050这里先简单介绍下我的项目里面的基本使用,redis服务采用的是三主三从模式。1、配置文件代码如下:[java] view plain copypackage com.whb.redisson.demoOne.properties;    import org.redisson.c...

2018-06-05 11:22:54 4202 2

转载 Redis详解之-集群方案:高性能(使用原生Redis Cluster)(四)

转载:https://blog.csdn.net/u010963948/article/details/78963572对以前的内容进行一下总结和复习。了解Redis的基本参数配置和使用。 了解事件订阅和持久化存储方式(RDB和AOF)。 Redis集群方案:高可用(使用Redis Sentinel),官网Rdeis3.x推荐三主三从的方式,参考(https://www.c...

2018-05-31 14:43:00 188

转载 Redis详解之-集群方案:高可用(使用Redis Sentinel)(三)

转载:https://blog.csdn.net/u010963948/article/details/78961685对以前的内容进行一下总结和复习。了解Redis的基本参数配置和使用。了解事件订阅和持久化存储方式(RDB和AOF)。Redis集群方案:高可用(使用Redis Sentinel),官网Rdeis3.x推荐三主三从的方式,后面再介绍,参考(https://www.cnblogs.c...

2018-05-31 14:41:58 847

空空如也

空空如也

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

TA关注的人

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