自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Go系列(四):Go的依赖管理

依赖依赖就是别人写的库依赖管理的三个阶段- GOPATH- GOVENDOR- go mod GOPATH就是给一个目录,然后我的所有的依赖就来这个目录下面找默认在~/go默认会去GOPATH的src目录下找问题:所有项目都在GOPATH目录下,这样会导致目录越来越大,几乎所有的github都镜像到GOPATH下GOVENDOR每一个项目都有一个vendor目录,用来存放第三方的库,这样的话,默认先去vendor目录下面找,然后如果找不到再去go的安装目录找,再找不到去GOP

2020-06-01 09:10:40 780

原创 Go系列(二):方法

方法方法声明在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附 加到这种类型上,即相当于为这种类型定义了一个独占的方法。package geometry import ( "math")type Point struct { X,Y float64}type Path []Point// 函数func Distance(p,q Point) float64{ return math.Hypot(q.X-p.X,q.Y-p.Y)}//

2020-05-22 14:46:17 198

原创 MYSQL专题(十二):锁机制

多个事务更新同一行数据时,通过加锁避免脏写依靠锁机制让多个事务更新一行数据的时候串行化,避免同时更新一行数据。在MySQL里,假设有一行数据,此时有一个事务来更新这行数据,它会先判断有没有人加锁,如果没有人加锁,这个事务就会创建一个锁,里面包含了自己的trx_id和等待状态,然后把锁跟这行数据关联在一起。这行数据和关联的锁数据结构都是在内存里的。此时这行数据已经被加锁了,此时B过来想要修改这行数据,就会检查一下,当前这行数据有没有别人加锁,如果有,就等的排队,此时事务B也会生成一个锁数据结构,里面

2020-05-11 09:05:54 222

原创 MYSQL专题(十一):MVCC

MVCC前奏:undo log版本链我们每条数据都有2个隐藏字段,一个是trx_id,一个是roll_pointetrx_id:最近一次更新这条数据的事务idroll_pointer:指向你更新这个事务之前生成的undo log如果先新增一条数据,roll_pointer指向一个空的undo log,因为之前这条数据是没有的接着其他事务对这条数据进行操作,会形成一条...

2020-05-08 11:21:41 512

原创 MYSQL专题(十):多事务并发访问

多事务访问数据库对于我们的业务去访问数据库,往往都是多个线程并发执行多个事务的,对于数据库而言,他会有多个事务同时执行,可能这多个事务同时更新和查询同一条数据,所以这里会有一些问题需要数据库来解决多事务要是对缓存页里的同一条数据同时进行更新或者查询,此时会产生:脏读,脏写,不可重复读,幻读的问题脏写两个事务,事务A和事务B同时更新一条数据,事务A先把它更新为A值,事务B紧接着就把他...

2020-05-08 10:10:43 1195

原创 MYSQL专题(九):undo log

undo log:回滚日志在执行事务的时候,必须引入另一种日志,用于回滚,undo log回滚日志这个回滚日志记录的东西很简单,你要是在缓存页里执行了一个insert语句,那么在undo log日志里,这个操作记录的回滚日志就必须是有一个主键和一个对应的delete操作,要能让你把这次insert操作给回退了;如果执行的是delete语句,那么回滚的话,就应该执行一个insert操作;如果是...

2020-05-07 17:52:02 320

原创 MYSQL专题(八):redo log

mysql更新数据的过程图(如果没有redo log)这个机制最大的缺点在于万一一个事务里有增删改更新了缓存页,事务提交了,万一还没来得及让IO线程把缓存页刷新到磁盘文件里,此时MYSQL宕机了,然后内存数据丢失,你事务更新的数据就丢失了。但是也不能每一次事务提交,就把你的事务更新的缓存页刷新回磁盘文件中去,因为是随机读写,性能很差。因此引入redo log机制,提交事务的时候,绝对是保证...

2020-05-07 17:16:28 284

原创 MYSQL专题(七):Too Many Connections的原因和解决方案

ERROR 1040(HY000):Too many connections数据库的整体架构,数据库自己也有一个连接池,你的每个系统部署在一台机器上的时候,你那台机器上部署的系统实例/服务自己也是一个连接池的,你的系统每个连接Socket 都会对应着数据库连接池里的一个连接socket。当数据库报错Too many connections的时候,就是说他的连接池的连接已经满了,你的业务不能跟...

2020-05-06 16:27:24 6037

原创 MYSQL专题(六):MYSQL的日志顺序读写,数据文件随机读写以及linux底层原理

对于redo log,binlog这种日志进行的磁盘顺序读写在写redo log日志的时候,其实是不停的在一个日志文件末尾追加日志的,这就是磁盘顺序写。磁盘顺序写的性能其实是很高的,某种程度上来说,几乎可以跟内存随机读写的性能差不多,尤其是在数据库里其实也用了os cache机制,就是redo log顺序写磁盘之前,先进入os cache,就是操作系统管理的内存缓存里。对于表空间磁盘文...

2020-05-06 16:01:37 3233

原创 MYSQL专题(五):MYSQL物理数据模型

初涉mysql物理数据格式:一行数据在磁盘上是如何存储的行格式:对一个表指定他的行存储的格式是什么样的,在建表的时候,就可以指定行存储的格式,后面也可以修改行存储格式create table table_name(columns) row_format = compactalter table table_name row_format = compact# 大概格式类似边长字段的...

2020-05-06 08:19:52 1798

原创 MYSQL专题(四):buffer pool

Buffer Pool我们对数据库执行增删改操作的时候,不可能直接更新磁盘上的数据,如果直接对磁盘进行随机读写操作,那速度是相当慢,随便一个大磁盘文件的随机读写操作,都有可能要几百毫秒。我们在对数据库执行增删改操作的时候,实际上主要都是针对内存里的Buffer Pool的数据进行的,也就是你实际上主要是对数据库的内存里的数据结构进行增删改操作。Buffer Pool的大小Buffe...

2020-04-28 20:15:53 573

原创 MYSQL专题(三):压测、一些性能指标

论上,通过增加线程数,内存读写,抗几千并发,甚至上万并发都是可以的。 但是,线程数越来越多之后,切换上下文很费CPU,QPS会下降,CPU负载也会变高,当请求源源不断进来的时候会导致挤压,进一步拖垮系统。接下来 测压本机是 双核8Gsysbench --db-driver=mysql --time=15 --threads=10 --report-interval=1 --...

2020-04-28 18:16:30 2601

原创 MYSQL专题(二):初步了解一下InnoDB存储引擎,binlog日志

执行一条语句的大概流程InnoDB的重要内存结构:缓冲池InnoDB存储引擎中有一个非常重要的放在内存里的组件,就是缓冲池,这里会缓存很多的数据,以便以后查询的时候,不用去查磁盘。引擎要执行更新语句的时候,eg更新"id=10"这一行数据,其实会先看"id=10"这一行数据看看是否在缓冲池中,如果不在的话,那么会直接从磁盘里加载到缓冲池,而且接着会对这条数据加一个独占锁。(不允许同时更新...

2020-04-28 16:07:32 586

原创 MYSQL专题(一):先了解一下mysql有哪些组件,并且大概流程

MySql驱动如果我们要在一个系统中访问数据库,必须在系统的依赖中加入一个MYSQL驱动,有了这个驱动,才能跟MYSQL数据库建立连接,然后执行各种各样的SQL语句。MYSQL驱动跟底层数据库建立网络连接,接着才能去发送请求给数据库服务器。系统的数据库连接池我们先来看第一种情况,如果只有一个网络连接,每个用户要对数据库进行操作,必须获得这个数据库连接,那么效率肯定底下还有,就...

2020-04-28 15:05:41 1669

原创 很杂很杂的知识--后台开发

前言之前在准备面试的时候有一些小的很杂的知识点,现在面试告一段落,记录下来,方便以后面试的时候看一看。Mysqlinnodb行锁是通过给索引项加锁**来实现的,即只有通过索引条件检索数据,innodb才能使用行几锁,不然使用表锁适合建立索引:经常作查询选择经常做表连接经常放在order by,group by ,distinct后面建立索引要注意:非空字段 NOT NU...

2020-04-09 08:29:53 235

原创 jedis 的 setnx 命令

SETNX :SET if Not Exists (如果不存在,则 SET)隐藏的意思是:key存在的情况下,不操作redis内存;也就是返回值是0具体java代码要依赖于:jedis的jar包Long result = jedis.setnx(key, value);返回值result :设置成功,返回 1 。设置失败,返回 0...

2020-04-08 08:17:38 11951

原创 Spring Boot 整合 Redis注入特殊的bean

注入一个 RedisTemplate<String,Object> 的bean,在此记录一下,方便后续查阅。Maven依赖加入Redis相关依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr...

2020-04-08 08:14:37 1095

原创 秋招复习:Java后台开发 - 0304

秋招复习:Java后台开发粘包现象怎么处理如何处理粘包LInux常用命令,如何查看磁盘容量,cpu用量,各端口号快速判断一个数是不是2的n次求一个数n的二进制中1的个数。扩展问题二:A和B的二进制中有多少位不相同。n!(阶乘)末尾有多少个0HashMap碰撞的概率ReentrantLock和synchronized的区别jvm 里 new 对象时,堆会不会发生抢占?那怎么设计jvm的堆的线程安全?...

2020-03-04 17:52:08 728

原创 函数式接口

函数式接口BiConsumer其他的函数式接口BiConsumer/** * 1.输入参数2个. * 2.无输出结果 * 3.本函数接口功能方法:accept(t,u) * @param <T> 第一个操作参数类型 * @param <U> 第二个操作参数类型 */@FunctionalInterfacepublic interface BiConsum...

2020-02-20 10:40:01 146

原创 [复习]select, poll, epoll

推荐阅读Linux IO模式及 select、poll、epoll详解补充:epoll的回调机制epoll是对select系统调用的改善,适用于同时关注文件比较多的时候的一个中优化方法,例如一个具有大量连接的系统。那么select的缺点在哪里呢?当select被唤醒的时候,它并不知道是被哪个或者哪些文件唤醒的,所以它要对位图中所有的文件进行遍历查询(调用该文件的poll接口)。 可以想象,...

2020-02-20 10:38:38 113

原创 Java集合中的Array/List之间的转换

Java集合中的Array/List之间的转换Arrays.asList()自己动手实现 Array-> List自己实现最简便的方法(推荐)使用 Java8 的Stream(推荐)使用 Guava(推荐)使用 Apache Commons CollectionsCollection.toArray()不要在 foreach 循环里进行元素的 remove/add 操作Arrays.asL...

2020-02-19 18:46:38 442

原创 Java中的null

不能调用非静态方法来使用一个值为null的引用类型变量,它将会抛出空指针异常;可以使用静态方法来使用一个值为null的引用类型变量,因为静态方法使用静态绑定,不会抛出空指针异常public class LearnNull{ public static void main(String[] args) { LearnNull learnNull = null; ...

2020-02-19 17:25:24 197

原创 CompletableFuture

CompletableFuture 前言创建一个异步操作:runAsync(无返回值)创建一个异步操作:supplyAsync(无返回值)计算结果完成时的回调方法:whenComplete多个任务串行化:thenApply执行任务完成时对结果的处理(有返回值):handlehandle和whenComplete的区别接收任务的处理结果,进行消费处理(无返回值):thenAccept上一个任务完成就...

2020-02-17 19:19:16 619

原创 ForkJoinPool

ForkJoinPool补充为什么不适合执行有block比如有io的任务ForkJoinPool的优势在于,可以充分利用多cpu,多核cpu的优势,把一个任务拆分成多个“小任务”,把多个“小任务”放到多个处理器核心上并行执行;当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。ForkJoinPool初略分析多线程 ForkJoinPool补充为什么不适合执行有block比如有i...

2020-02-17 12:28:00 472

原创 Executor笔记

ThreadPoolExecutor笔记前言ExecutorThreadPoolExecutorFinalizableDelegatedExecutorServiceScheduledExecutorServiceExecutorServiceshutdownawaitTerminationshutdownNow前言最近在使用ExecutorService的时候,发现自己对于Executor的...

2020-02-14 19:15:11 358

原创 Raft

Raft最近在学习raft,觉得写的不错的文章给保存下来,方便以后学习一文搞懂Raft算法Raft共识算法图解Raft:最简单易懂的分布式一致性算法Raft 为什么是更易理解的分布式一致性算法...

2020-01-28 16:13:20 135

原创 使用JedisPool的几个小知识点

使用JedisPool的几个小知识点前言setnxset前言今天在使用JedisPool的时候,学习到的一些小知识,特地记下来,就当学习了。setnxjedis的setnx是如果不存在,就设置,并返回1,如果要设置的key存在,则不作处理,直接返回0setnx有一个缺点就是不能设置过期时间,如果在下面用expire设置过期时间的话,就不能保证其原子性//这两步不能保证原子性Lon...

2020-01-20 19:02:53 919

原创 用令牌桶的思路自定义一个CurrentLimiter

用令牌桶的思路自定义一个CurrentLimiter前言思路Redis:作为Lock和令牌桶实现CurrentLimiter的核心代码创建CurrentLimiter注解创建拦截器注册拦截器验证前言最近在实习过程中,导师让我给一个在分布式环境下的接口做限流,自己上网查了资料接的使用令牌桶的思想应该可以实现,如果大家对令牌桶不懂,可以查看我之前写过的文章。对接口进行限流的四个基本算法思路...

2020-01-20 16:01:46 584

原创 2020.1.19学习笔记

学习笔记前言applicationContext上下文Integer型转Long型获得java当前的类名和方法SpringBoot RedisTemplate注入失败前言今天在上班的时候,踩了一些坑,先把他一个个记下来,也当作学习了。applicationContext上下文平时如果我们要获取上下文就必须实现ApplicationContextAware接口package com.x...

2020-01-20 08:48:44 237

原创 Guava RateLimter 基础学习

Guava RateLimter 基础学习平滑突发限流平滑预热限流原理分析--以平滑突发限流为例平滑突发限流 public static void main(String[] args) { RateLimiter rateLimiter = RateLimiter.create(5); while (true) { double a...

2020-01-18 17:52:29 341

原创 对接口进行限流的四个基本算法

对接口进行限流的四个基本算法前言限流的算法计数法缺点滑动窗口算法漏桶算法令牌法Guava插件的令牌法前言最近想对自己的秒杀系统添加一个QPS限流的功能,自己百度了一下,发现大家的大体思路是一样的,所以边学习边自己写了下来。因为刚开始写博客,是个小白,欢迎大家指出错误。感恩!限流的算法先来讲一下常见的限流的算法。计数法计数法就是通过定义一个count,在规定的时间内(eg,每分钟之内只能...

2020-01-18 15:12:31 1042

空空如也

空空如也

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

TA关注的人

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