自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(522)
  • 资源 (9)
  • 论坛 (3)

原创 深入理解Go——context(2)

文章目录结构体emptyCtxcancleCtxtimerCtxvalueCtx结构体emptyCtx源码中定义了 Context 接口后,并且给出了一个实现:type emptyCtx intfunc (*emptyCtx) Deadline() (deadline time.Time, ok bool) { return}func (*emptyCtx) Done() <-chan struct{} { return nil}func (*emptyCtx)

2020-10-20 15:52:47 31

原创 深入理解Go——context(1)

文章目录引入:context有什么作用context 在 Go server里的作用context在实际项目中如何使用传递共享数据取消Goroutine防止goroutine泄漏context包Context引入:context有什么作用Go 1.7 标准库引入 context,中文译作“上下文”,准确说它是 goroutine 的上下文,包含goroutine 的运行状态、环境、现场等信息。context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k

2020-10-09 20:27:09 32

原创 深入理解Go——interface

文章目录Go接口iface和eface值接受者和指针接受者的区别interface实现多态Go接口非侵入式的接口在Java中,派生类需要明确的声明它实现了某一个接口,并且需要实现借口中所有的函数。而在Go中,采用的是非侵入式的接口,不需要显式声明,只需要实现接 口定义的函数,编译器自动会识别。动态语言的便利Java和Go都是静态语言,在编译期间能发现类型不匹配的错误,不像动态语言,需要运行到那一行代码的时候才会报错。但是,Go实际上作为现代静态语言,是有后发优势的,它引入了动态语言的便

2020-09-30 18:09:20 22

原创 深入理解Go——map

文章目录map内存模型map哈希寻址map扩容map内存模型在map.go下,是这样定义map的:// A header for a Go map.type hmap struct { // Note: the format of the hmap is also encoded in cmd/compile/internal/gc/reflect.go. // Make sure this stays in sync with the compiler's definition. count

2020-09-30 16:59:11 20

原创 Golang架构直通车——ServiceMesh的演化过程

文章目录引入产品演化微服务出现Service Mesh出现总结引入最近接触了以Thrift做序列化和通信的微服务框架,在之前的文章中RPC框架对比也将Thrift、gRPC与其他框架对比过,从中我们可以知道Thrift和gRPC实际上没有自己的服务治理等内容。而目前,业界跟微服务相关的开发平台和框架更是不胜枚举:Spring Cloud, Service Fabric,Linkerd,Envoy,Istio 。这些纷繁的产品和Sevice Mesh有什么样的关联?哪些属于Service Mesh的范畴

2020-09-24 20:53:18 32 1

原创 Golang架构直通车——理解Go GC

文章目录设计原理三色抽象三色不变性插入写屏障删除写屏障垃圾收集器的增量和并发增量式垃圾收集并发式垃圾收集器Go GC演进过程并发垃圾收集回收堆目标混合写屏障设计原理三色抽象标记清除(Mark-Sweep)算法是最常见的垃圾收集算法,为了解决原始标记清除算法带来的长时间 STW,多数现代的追踪式垃圾收集器都会实现三色标记算法的变种以缩短 STW 的时间。白色对象 — 潜在的垃圾,其内存可能会被垃圾收集器回收;黑色对象 — 活跃的对象,包括不存在任何引用外部指针的对象以及从根对象可达的对象;灰色对

2020-09-22 15:16:00 15

原创 Golang架构直通车——理解defer

文章目录defer应用defer触发时机defer执行顺序预计算参数defer实现原理defer应用Go 语言的 defer会在当前函数或者方法返回之前执行传入的函数。它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。比如解锁资源:mu.Lock()defer mu.Unlock()我们在 Go 语言中使用 defer 时会遇到两个比较常见的问题,这里会介绍具体的场景并分析这两个现象背后的设计原理:defer 关键字的调用时机以及多次调用 defer 时执行顺序是如何确定的;de

2020-09-21 16:59:45 16

原创 Golang架构直通车——理解协程和Go调度器

文章目录进程、线程与协程进程、线程与协程线程或者进程切换会带来大量的系统开销和上下文切换成本,导致严重的系统开销。在之前的文章中,我们提到过切换进程的开销:切换虚拟地址空间(切换页表、页目录以指向新的地址空间)切换内核栈切换硬件上下文虽然线程切换不需要执行第一步(因为线程共享堆内存),但是线程和进程切换仍然存在通病:丢失寄存器中的内容CPU Cache失效(现代cpu速度提升很大一部原因是因为Cache的引入)TLB快表失效...

2020-09-21 16:14:47 31

原创 Golang架构直通车——深入理解Gin骨架

文章目录Gin的初始化流程ENGINE初始化注册handler运行和接受请求Gin框架的核心结构ENGINEROUTERCONTEXTContext初始化Context获取请求参数Context 之模型绑定和验证Context 之响应Gin的初始化流程package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Con

2020-09-19 19:10:04 38

原创 Golang架构直通车——理解Gin

文章目录Gin是什么Gin代码解析路由(Router)中间件(Middleware)自定义一个全局中间件自定义一个局部中间件Gin是什么Gin 是使用 Go/golang 语言实现的 HTTP Web 框架。接口简洁,性能极高。Gin 特性快速:路由不使用反射,基于Radix树,内存占用少。中间件:HTTP请求,可先经过一系列中间件处理,例如:Logger,Authorization,GZIP等。这个特性和 NodeJs 的 Koa 框架很像。中间件机制也极大地提高了框架的可扩展性。异常处

2020-09-19 18:57:09 70

原创 Golang架构直通车——理解Thrift

文章目录什么是ThriftThrift工作原理Thrift IDL语法RPC框架对比什么是Thriftthrift是一个跨语言通信的工具,支持的语言多,而且还提供服务器端的众多网络模型,使服务端的开发可以只专于服务本身的逻辑。用户通过Thrift的IDL(接口定义语言)来描述接口函数及数据类型,然后通过Thrift的编译环境生成各种语言类型的接口文件。简单来说,Thrift是RPC下的序列化协议和传输协议。什么是IDL?IDL(全称:Interface Description Languag

2020-09-19 18:51:14 18

原创 Golang架构直通车——理解gRPC

文章目录gRPC概述关键技术——HTTP/2二进制分帧层数据流优先级流控制服务器推送标头压缩gRPC StreamgRPC GatewaygRPC概述gRPC具有以下特点:基于HTTP/2和Protobuf3的通用rpc框架, 继而提供了连接多路复用、Body 和 Header 压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU使用和延长电池寿命等。支持服务端-服务端,客户端-服务端通信,由于使用了http2所以并不局限于服务器集群之间的通信。IDL层使用了使用Protobuf3,多语言支

2020-09-19 18:41:32 26

原创 Golang架构直通车——理解Protobuf

文章目录什么是Protobuf关键技术varints编码zigzag编码message structrue编码其他编码略Protobuf实践Protobuf使用规则Protobuf例子什么是ProtobufProtocol Buffers是一种语言中立,平台无关,可扩展的序列化数据格式,可以用于通信协议、数组存储等等。传输协议存储格式IDLProtobuf的核心优势在于:向前向后的兼容性多语言自动代码生成性能快&压缩小Protobuf基本数据类型:Protobuf基本数

2020-09-19 18:29:39 20

原创 Leetcode1584. 连接所有点的最小费用——稠密图的最小生成树

文章目录引入构建方式一:Prim算法构建方式二:Kruskal算法本题题解引入最近开始学习Golang了,所以以后的Leetcode题解都用Golang来写。(ps:Golang没有基础的数据结构,如List、Queue、Stack、PriorityQueue等等,所以这个想法可以放弃掉了)上周周赛有这么一道题1584. 连接所有点的最小费用,以前没有遇到过最小生成树的题,并且本题还是稠密图(即一个节点到各个节点都是联通的,反之如果联通的节点树木比较少,称为稀疏图),本题具有代表意义。图的节点之间是

2020-09-17 11:47:52 42

原创 Leetcode332. 重新安排行程——欧拉回路解法

文章目录引入Hierholzer 算法其他题目解析引入前些天忙着面试,也不知道是哪一天遇到了解欧拉回路的题:332. 重新安排行程,一直存到了今天正式开始理解和解决,题目是这样的:给定一个机票的字符串二维数组 [from, to],子数组中的两个成员分别表示飞机出发和降落的机场地点,对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。这道题文字描述了很长,但是可以简单的理解:(仔细体会)给定一个 n 个点 m 条边的图,要求从

2020-09-10 08:47:55 25

原创 Java架构直通车——避不开的COW奶牛

文章目录引言Linux下的COWRedis下的COW文件系统下的COW引言在Java架构直通车——Redis持久化和宕机恢复机制一文中曾经提到过COW(写时复制机制),在执行BGSAVE命令或者BGREWRITEAOF命令(AOF重写)的过程中,Redis需要创建fork()当前服务器进程的子进程,而大多数操作系统都采用写时复制(copy-on-write)来优化子进程的使用效率。所以,在说明Linux下的copy-on-write机制前,我们首先要知道两个函数:fork()和exec(),需要注意的

2020-08-25 20:01:08 101

原创 Java架构直通车——使用RabbitMQ延时队列做回调

文章目录前言解决方案引入RabbitMQRabbitMQ延时队列概述后端代码实现前言最近做区块链项目时,由于区块链做存证的时候会有延迟(区块链默认会收集2秒内所有的transanction,然后做统一计算,打包上链),所以后端请求该接口的时候,不能立刻得到返回,只能返回状态为200的成功响应。考虑到在不增加复杂度的情况下,不能要求客户端做二次请求,因为客户端做二次请求的时候是不知道服务端是否已经处理完成该上链请求的。所以,这部分的处理只能服务端完成后做 延时回调。“延时回调”准确的说是实现 阶梯性异

2020-08-23 16:38:59 74

原创 解决哈希冲突的三种方式

文章目录开发地址法再散列法拉链法开发地址法开放地址法有个非常关键的特征,就是所有输入的元素全部存放在哈希表里,也就是说,位桶的实现是不需要任何的链表来实现的,换句话说,也就是这个哈希表的装载因子不会超过1。它的实现是在插入一个元素的时候,先通过哈希函数进行判断,若是发生哈希冲突,就以当前地址为基准,根据再寻址的方法(探查序列),去寻找下一个地址,若发生冲突再去寻找,直至找到一个为空的地址为止。有几种常用的探查序列的方法:线性探查di=1,2,3,…,m-1;这种方法的特点是:冲突发生时,顺序查看

2020-08-20 12:12:55 70

原创 面试准备:常用的基础排序算法

文章目录排序冒泡排序选择排序插入排序希尔排序归并排序快速排序堆排序排序冒泡排序冒泡排序很简单,如果遇到前面的元素比后面的元素大,那么就交换他们的位置;每次遍历完成后,会确定最后k个元素一定是升序的,k是遍历的次数。public class Solution { public void bubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { for (int j = 0; j

2020-08-20 11:58:05 73

原创 Java设计之道——通过UML理解23种设计模式

文章目录UML类图泛化(generalize)与实现(realize)聚合(aggregation)与组合(composition)关联(association)与依赖(dependency)23种设计模式创建型模式结构型模式行为型模式UML类图从一个示例开始,请看以下这个类图,类之间的关系是我们需要关注的:泛化(generalize)与实现(realize)泛化:SUV扩展和继承小汽车的功能;实现:小汽车实现车这个概念。聚合(aggregation)与组合(composition)聚合:班

2020-07-28 10:52:47 106

原创 Leetcode5438. 制作 m 束花所需的最少天数——另类的二分法

文章目录引入二分法题解引入今天周赛遇到这么一道题,5438. 制作 m 束花所需的最少天数:给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3,

2020-07-25 11:20:45 55

原创 Leetcode174. 地下城游戏——动态规划的无后效性

文章目录引入本题解法本题感悟引入今天的每日一题174. 地下城游戏一眼看上去就是使用dp,并且是非常标准的DP场景。我一开始是这样做的:public class Solution { public int calculateMinimumHP(int[][] dungeon) { int M=dungeon.length; int N=dungeon[0].length; int[][] dp=new int[M+1][N+1];

2020-07-12 11:26:11 67

原创 Java常量池详解:字符串常量池、Class常量池、运行时常量池 三者关系

文章目录引入:方法区常量池概述字符串常量池class常量池运行时常量池这里介绍 字符串常量池、class常量池 和 运行时常量池 这三个常量池的概念。引入:方法区常量池概述方法区包含运行时常量池、自动和方法数据、构造函数和普通方法的字节码内容、一些特殊方法。这里虽然没有具体说字符串常量池,但是它也是方法区的一部分。在JDK1.8中,使用元空间代替永久代来实现方法区,但是方法区并没有改变,变动的只是方法区中内容的物理存放位置。正如上面所说,类型信息(元数据信息)等其他信息被移动到了元空间中;但是运行时

2020-07-07 11:06:23 522

原创 看《一人之下:陈朵篇》——架空世界里的真实

《一人之下》这个漫画我在它刚出现的时候就开始追了,那时候还叫《异人》。后来也是追追停停,一口气攒好久又开始看,上一次看我记得是在罗天大醮刚结束,一口气追到了陈朵篇中部,然后又结束等待作者更新。后来在知乎上看到陈朵篇“封神”二字,我没有点进去详看,以为又是某人一战封神,毕竟这是战斗漫画,所谓封神可能就是粉丝的狂欢罢了。最多最多,可能真如《氰化欢乐秀》里将Benson从定格动画师误成上帝的无限创意。不过,我是真的曲解了《一人之下:陈朵篇》(以下简称《陈朵篇》)封神的含义了,也是真的贬低了漫画无限的可能性了。因

2020-07-02 00:32:03 341

原创 Java架构直通车——Dubbo总结

文章目录什么是 Dubbo?RPC的原理是什么?既有 HTTP ,为啥用 RPC 进行服务调用?为什么要用Dubbo?Dubbo 的架构使用Registry好处Dubbo 提供的负载均衡策略之前对于Dubbo只做了点初步的了解,具体参考:Dubbo。主要是关于用法的,没有怎么去深究。今天由于面试的需要,做一份总结吧。什么是 Dubbo?Apache Dubbo是一款高性能、轻量级的开源Java RPC 框架,它提供了三大核心能力: 面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

2020-07-01 17:16:10 201 1

原创 Java架构直通车——过滤器和拦截器使用

文章目录过滤器和拦截器的区别Filter过滤器Interceptor拦截器过滤器和拦截器的区别规范不同:Filter是Servlet规范中定义的,是Servlet容器支持的。而拦截器是Spring容器内的,是Spring框架支持的。作用深度不同:Filter在Servlet前后起作用,而拦截器可以深入到方法的前后、异常抛出前后起作用,具有更大的弹性。从设计模式的角度分析:过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(漏网)

2020-07-01 11:18:32 111

原创 Java架构直通车——彻底了解DIP、IOC与DI之间的关系

文章目录DIP、IOC与DI之间的关系DIP实例参考IOC实例参考DI本来这个文章是面试准备:Spring/Spring MVC常见面试题汇总的一个小问题,但是觉得需要扩充的内容太多,就单独写成一个文章了。DIP、IOC与DI之间的关系DIP原本的依赖是高层依赖于底层。假设我们设计一辆汽车:先设计轮子,然后根据轮子大小设计底盘,接着根据底盘设计车身,最后根据车身设计好整个汽车。这里就出现了一个“依赖”关系:汽车依赖车身,车身依赖底盘,底盘依赖轮子。这样做的坏处是什么呢? 可维护性很低 。假设设

2020-06-30 12:06:21 95

原创 Java架构直通车——Redis的PF实现原理:HyperLogLog

文章目录引入什么是基数统计基数统计的常用方法HyperLogLog原理再近一步:分桶平均更近一步:真实的HyperLogLog引入之前的文章Java架构直通车——点赞功能用Mysql还是Redis?一文中,我们介绍了分别从mysql和redis实现点赞功能统计的可行性。这里要介绍一个HyperLogLog算法,虽然应用场景不同,但是两者还是具有一定的相似之处的。HyperLogLog 是最早由 Flajolet 及其同事在 2007 年提出的一种 估算基数的近似最优算法。但跟原版论文不同的是,好像很

2020-06-29 17:12:29 3467

原创 Java架构直通车——RedLock是否可以做分布式锁

文章目录引入:Redis SetNX局限性RedLock原理解决宕机恢复后锁的问题单机锁和多机锁的比较为什么RedLock是不可靠的!引入:Redis SetNX局限性我在Java架构直通车——基于Redis的Set NX实现分布式锁一文中写了,采用SetNX会出现两个问题,一个是超时问题,可以采用随机值解决。另一个是主从切换或者宕机恢复后的锁的问题,这个问题是否能用RedLock解决呢?所以首先来看下RedLock的原理。RedLock原理Redis 官方站这篇文章提出了一种权威的基于 Redi

2020-06-29 15:56:47 137

原创 高性能Mysql——一条SQL语句在Mysql中是如何执行的?

文章目录MySQL 基本架构概览Server层介绍SQL执行过程查询语句更新语句本篇文章会分析下一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成已经这些组件的作用是什么,可以帮助我们理解和解决这些问题。MySQL 基本架构概览简单来说 MySQL 主要分为 Server 层和存储引擎层:Server 层:主要包括连接器、查询缓存

2020-06-28 16:41:34 233

原创 Leetcode5435. 并行课程 II

文章目录引入如何建模?引入本周的双周赛最后一题:5435. 并行课程 II,遇到了一个坑,原本以为是一道很简单的题,但是加上了某个条件后,解法完全不一样了。题目是这样的:给你一个整数 n 表示某所大学里课程的数目,编号为 1 到 n ,数组 dependencies 中, dependencies[i] = [xi, yi] 表示一个先修课的关系,也就是课程 xi 必须在课程 yi 之前上。同时你还有一个整数 k 。在一个学期中,你 最多 可以同时上 k 门课,前提是这些课的先修课在之前的学期

2020-06-28 10:15:26 69

原创 Linux文件系统概要

文章目录Linux文件系统简介文件分类Linux目录树Linux文件系统简介在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡、磁盘驱动器、打印机、输入输出设备、普通文件或是目录都被看作是一个文件。也就是说在LINUX系统中有一个重要的概念:一切都是文件(其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来)。文件存储方式:要弄清楚文件系统,首先必须得掌握inode是什么?文件存储在硬盘上,硬盘的最小存储单位是扇区(Sector),每个扇区存储512字节(0.5kb)。

2020-06-27 16:39:10 149

原创 面试准备:Java常见面试题汇总(三)

文章目录83. Java泛型了解么?什么是类型擦除?介绍一下常用的通配符?84. 包装类的常量池技术有了解过吗?85. 在 Java 中定义一个不做事且没有参数的构造方法的作用?86. 成员变量与局部变量的区别有哪些?87. 构造方法作用?有哪些特性?88. 在调用子类构造方法之前会先调用父类无参构造方法,其目的是?89. Object类提供了哪些方法?90. 获取用键盘输入常用的两种方法?91. 使用 try-with-resources?92. 既然有了字节流,为什么还要有字符流?93. 浮点数怎么比较

2020-06-24 15:40:02 94

原创 如何定位常见Java性能问题

文章目录Linux性能监测命令topvmstatpidstatJDK 监控和故障处理工具jps:查看所有 Java 进程jstat: 监视虚拟机各种运行状态信息jinfo: 实时地查看和调整虚拟机各项参数jmap:生成堆转储快照jhat: 分析 heapdump 文件jstack :生成虚拟机当前时刻的线程快照JDK 可视化分析工具JConsole:Java 监视与管理控制台Visual VM:多合一故障处理工具性能优化一向是后端服务优化的重点,但是线上性能故障问题不是经常出现,或者受限于业务产品,根本就

2020-06-24 15:16:17 164

原创 Java并发编程实战——并发队列

文章目录非阻塞队列:ConcurrentLinkedQueue阻塞队列:BlockingQueueArrayBlockingQueueLinkedBlockingQueuePriorityBlockingQueueJava 提供的线程安全的 Queue 可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是 BlockingQueue,非阻塞队列的典型例子是 ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。 阻塞队列可以通过加锁来实现,非阻塞队列可以通过

2020-06-23 18:34:21 168

原创 Java泛型类型擦除以及类型擦除带来的问题

文章目录Java泛型的实现方法:类型擦除类型擦除引起的问题及解决方法先检查,再编译自动类型转换类型擦除与多态的冲突和解决方法使用泛型程序员容易发生的错误泛型类型变量不能是基本数据类型编译时集合的instanceof泛型在静态方法和静态类中的问题Java泛型的实现方法:类型擦除Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉,正确理解泛型概念的首要前提是理解类型擦除。要理解类型擦除,首先需要去了解原始类型是什么。原始类型 就是擦除去了泛型信息,最后在字节码中的类型变量的真正

2020-06-22 22:11:59 151

原创 Java架构直通车——点赞功能用Mysql还是Redis?

文章目录引入使用Mysql实现点赞功能使用Redis实现点赞功能使用什么数据格式最合适?方案引入最近遇到一个需求,就是做联盟链做存证上,部分交易对外公开,或者是对指定人可见。之前一直在思考用Mysql怎么存合适,想来想去也没找出个合适的办法。点赞功能场景和上面的需求是一样的,我就借这个简单一些的点赞功能来理清下思路把。我们先看点赞功能的需求:显示点赞数量判断用户是否点过赞,用于去重,必须的判断显示个人点赞列表,一般在用户中心显示微博/文章的点赞列表微博这是头部的顶级流量,后端肯定是有

2020-06-18 18:38:47 180

原创 Java架构直通车——分布式唯一 ID生成方案

文章目录分布式ID的几种生成方案UUIDMySQL主键自增雪花算法(SnowFlake)最近要做区块链项目,要生成很多唯一ID做业务号之类的,所以趁此机会学习学习。分布式ID的几种生成方案UUID之前一直是用的UUID生成唯一ID,好处显而易见,方便快捷,坏处就是:数据库里不好做索引,每次生成的ID是无序的,无法保证趋势递增。UUID的字符串存储,存储空间大,查询效率慢。ID本事无业务含义,不可读。很明显,用来做业务号不是UUID的应用场景,使用UUID应该要保障不要求递增,无确实含义的

2020-06-18 15:31:54 161

原创 高性能Mysql——InnoDB事务是如何通过日志来实现的?

文章目录Redo logredo log buffer会不会丢失事务?双“1”设置为什么还是要经过磁盘?Undo log总结InnoDB的日志分为redo log和undo log。Redo logredo log叫做重做日志,是用来实现事务的持久性(用于数据库的崩溃恢复),当事务提交之后会把所有修改信息都会存到该日志中。该日志由两部分组成,一个是在内存里的redo log buffer,另一个是在磁盘里的redo log文件。mysql 为了提升性能不会把每次的修改都实时同步到磁盘,而是会先存到B

2020-06-12 16:47:32 336

原创 Java架构直通车——锁分段技术:微信如何扛住 10 亿用户同时修改微信号?

文章目录引入从HashMap到ConcurrentHashMap的转变:理解锁分段技术HashMap的死循环ConcurrentHashMap的实现方式---**锁桶**(或段)ConcurrentHashMap的真实结构分段锁优化超卖问题分布式锁并发优化方案的不足引入今天在知乎突然看到了这么一个问题:微信如何扛住 10 亿用户同时修改微信号?微信号逻辑上应该是每一个微信账号的 unique key,在以往的场景下写入负载不是很高所以问题不大,但是现在允许修改微信号之后应该怎么处理这么大的并发写入

2020-06-11 22:09:17 203

软件工程需求分析作业模版.doc

软件工程需求分析作业模版,北邮大作业。

2020-06-24

滑动窗口协议--SDL最终版

北邮滑动窗口协议实验设计。滑动窗口协议--SDL设计;北邮滑动窗口协议实验设计。

2018-06-03

北邮韩万江老师SPM课的pdf

spm,软件过程改进,韩万江

2018-05-17

北邮:编译原理实验1

北邮;编译原理第一次实验;lex.yy 生成代码 北邮;编译原理第一次实验;lex.yy 生成代码

2018-05-14

北邮:分布式实验一

北邮:分布式实验一 北邮;分布式; 北邮;分布式; 北邮;分布式;

2018-05-14

北邮:分布式实验二

北邮:分布式实验二;北邮:分布式实验二北邮:分布式实验二

2018-05-14

北邮:软件工程作业——体系结构设计文档

体系结构设计文档;北邮:软件工程作业——体系结构设计文档

2018-05-14

北邮作业——软件工程:需求文档

北京邮电大学,软院大二作业;北京邮电大学,软院大二作业

2018-05-14

滑动窗口协议--SDL设计

滑动窗口协议--SDL设计;北邮滑动窗口协议实验设计。滑动窗口协议--SDL设计;北邮滑动窗口协议实验设计。

2017-11-09

No_Game_No_Life_的留言板

发表于 2020-01-02 最后回复 2020-01-02

如何用java做到BB弹(类似于打砖块)游戏

发表于 2016-05-07 最后回复 2019-05-13

关于用idea导出jar包

发表于 2016-03-19 最后回复 2016-03-19

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