自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Deronn的博客

珍惜时间

  • 博客(176)
  • 收藏
  • 关注

原创 Java对象逃逸分析

Java对象逃逸分析

2022-10-24 11:52:39 1853 1

原创 数据密码学

密码学

2022-09-08 20:10:35 1028

原创 G1垃圾收集器

G1垃圾收集器

2022-09-05 17:00:40 303

原创 Netty零拷贝

Netty零拷贝

2022-09-05 16:57:47 1179 1

原创 MySQL主从复制

MySQL主从复制

2022-09-05 16:54:06 1287

原创 Redis持久化

Redis持久化

2022-09-05 16:50:47 170

原创 Redis过期删除、内存淘汰策略

Redis过期删除、内存淘汰策略

2022-09-05 16:49:37 182

原创 Spring中事务失效的原因

事务失效的原因

2022-09-05 16:47:42 253

原创 Spring事务传播性

Spring事务传播性

2022-09-05 16:46:28 540

原创 JVM进阶之卡表

卡表

2022-09-05 16:40:15 1401

原创 CMS垃圾回收器介绍

CMS

2022-09-05 16:38:24 7330

原创 ElasticSearch入门

ElasticSearch

2022-06-02 09:59:23 322

原创 Java中Optional类使用

1. 简述在Java8中引入了一个新的类,java.util.Optional<T>,如果一个接口返回Optional,可以表示一个人可能有车也可能没有车,这个比简单的返回Car要更明确。2. of()方法使用你可以使用 of() 和 ofNullable() 方法创建包含值的 Optional。两个方法的不同之处在于如果你把 null 值作为参数传递进去,of() 方法会抛出 NullPointerException:Optional<User> opt =

2022-05-30 11:15:30 754

原创 分布式链路追踪

1. 概述在项目中随着项目的业务越来越复杂,以及项目的微服务化等,导致平常的项目中出现如:同一次操作日志散乱等现象,对通过查询日志的方式排查问题造成极大困扰.因此迫切需要一种可以追溯当前链路操作日志的手段。当有效的日志信息不是很明显,我们需要追溯本次操作整个链路的关键信息时,由于日志的散乱,可能在此事上面耗费较大的精力并且结果还可能有误,分布式链路追踪就是为了解决这种情况下出现的。2. 追踪实现在分布式链路跟踪中有两个重要的概念:跟踪(trace)和 跨度( span)。trace 是请求在分布式系

2022-05-10 17:02:35 1020 1

原创 Spring Cloud Config使用方式

1.1 分布式配置中心作用在网络世界中配置文件是非常重要的,因为通过配置文件可以对程序进行修改或者管理,而网络世界主要是程序所构成的,所以配置文件对于我们的重要性不言而喻。分布式配置中心可以做到统一管理,例如微服务中相同的配置不用冗余配置。分布式配置中心可以做到对配置进行实时更新,当更新了配置后不用重启应用。1.2 Spring Cloud分布式配置应用方式两种方式使用分布式配置:1. 直接使用远程仓库在配置仓库中的文件中配置配置文件,然后在SpringBoot应用中bootstrap.yam

2022-04-30 10:20:09 603

原创 G1垃圾回收器

简介G1 收集器是一款主要面向服务端应用的垃圾收集器,特点是以极高概率满足GC停顿时间的要求(可预测的停顿),同时具备高吞吐性能。堆内存划分虽然 G1 收集器也遵循分代收集理论,但其堆内存的布局与其他收集器有非常明显的差异:G1 不再坚持固定大小和固定数量的分代区域划分,而是把连续的 Java 堆划分为约2048个个大小相等的分区(Region),每个 Region 都可以根据需要,扮演新生代的 Eden 空间、Survivor 空间,或者老年代空间。Region 中还有一类特殊的 Humong

2022-04-13 22:58:57 1860

原创 三阶段提交

三阶段提交协议,是二阶段提交协议的改进版本,三阶段提交有两个改动点。与两阶段提交不同的是,三阶段提交有两个改动点:1). 引入超时机制。同时在协调者和参与者中都引入超时机制。2). 在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。这样三阶段提交就有CanCommit、PreCommit、DoCommit三个阶段。CanCommit阶段3PC的CanCommit阶段其实和2PC的准备阶段很像。协调者向参与者发送commit请求,参与者如果可以提交就返回Y

2022-04-13 17:04:47 423

原创 二阶段提交

二阶段提交(2 Phase Commitment Protocol):为了使分布式系统架构下的各个节点在进行事务提交时保持一致性的一种协议。二阶段提交通过协调者和各个参与者的配合,实现分布式一致性。角色协调者:调度事务参与者:参与事务的执行和投票第一阶段:投票阶段。协调者向所有的参与者节点询问是否可以执行提交操作,并开始等待各参与节点的响应;参与者执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入事务日志(但是不提交事务)。如果参与者节点的事务操作实际执行成功,则它返回一个

2022-04-13 17:01:54 4020

原创 深入理解java虚拟机中类加载机制

1.1 概述虚拟机把描述一个类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成被java虚拟机使用的Java类型。这就是虚拟机的类加载机制。Calss文件由类加载器加载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息可以获知Class的结构信息:如构造函数,属性和方法等,Java允许用户借由这个Class相关的元信息间接调用Calss对象的功能。编译器会把.java文件编译成.class文件,也就是字节码文件。1.2 类加载的生命周期类加载的整个

2022-04-09 21:37:31 1103

原创 MySQL神器之一索引

1.1 索引的基础知识MySQL的基础存储结构——页。索引(index)是帮助MySQL高效获取数据的数据结构。索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。(索引类似于字典中的目录,其实简单来说,索引就是一个排好序的数据结构)各个数据页可以组成一个双向链表而每个数据页中的记录又可以组成一个单向链表每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定

2022-03-24 20:43:53 3717

原创 Redis集群模式

1.为了达到redis数据库的高可用,所以需要在单机的基础上建立集群,有以下几种集群模式:1、主从复制2、哨兵模式3、Redis官方提供的Cluster集群模式(服务端)4、Jedis sharding集群(客户端sharding)5、利用中间件代理,比如豌豆荚的codis等主从复制1.主从环境搭建:如要把ip地址为192.168.17.102的redis机器加入到ip地址为192.168.17.101的机器作为从服务器,可以通过下面方式:1.ip地址为192.168.17.

2020-11-24 23:07:22 212 1

原创 一致性哈希算法

1.基本概念一致性哈希算法在很多领域有应用,例如分布式缓存领域的 MemCache,Redis,负载均衡领域的 Nginx,各类 RPC 框架。在移除或者添加一个服务器时,一致性哈希算法能够尽可能小地改变已存在的服务请求与处理请求服务器之间的映射关系。一致性哈希解决了简单哈希算法在分布式哈希表中存在的动态伸缩等问题。2.特点一致性哈希算法有以下的特点:1.均衡性。均衡性是指哈希的结果能够尽可能分布到所有的缓冲节点中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。2.单调

2020-11-19 17:04:47 628

原创 哈希表、散列表

1.基本介绍可能你听过散列表,散列函数,它们跟哈希表,哈希函数是一个概念。接下来以"哈希"来作梳理。在介绍哈希表的时候,先来比较一下数组和链表的优缺点:数组:寻址容易,但插入和删除元素比较麻烦; 链表:插入和删除元素容易,但寻址比较麻烦。那么有没有一种数据结构是既能结合这两种的优点同时也能避免这两种数据结构所带来的缺点呢?哈希表就是这样的数据结构:哈希表的底层实际上是基于数组来存储的,当插入键值对时,并不是直接插入该数组中,而是通过对键进行Hash运算得到Hash值,然后和数组容量取模,得到

2020-11-18 23:53:24 5481

原创 微服务架构的优缺点

微服务架构的优点:1.服务的独立部署,耦合性低。 每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。2.各个服务可以快速启动。 拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。3.服务可以动态按需扩容。 当某个服务的访问量较大时,我们只需要将这个服务扩容即可。微服务架构的缺点:1.分布式部署,调用的复杂性高。 单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问

2020-11-18 11:35:50 2390

原创 Java线程池

借由《Java并发编程的艺术》,使用线程池能够帮助 :降低资源消耗。通过重复利用已经创建的线程,能够降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等待线程的创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。当核心线程数为 5 时,即使总共要运行的线程有 15 个,每次也只会同时执行 5 个任务,剩下的任务则会被放入等待队列,等待核心线程空闲后执行。执行步骤如下:

2020-11-12 01:20:52 103

原创 redis持久化

redis持久化redis是一个内存数据库,如果宕机会导致数据丢失,对于业务来说自然是不允许的,redis通过持久化机制写到磁盘中保证数据不丢失。RDB快照RDB会单独创建一个子进程(fork)来进行持久化,整个过程中,主进程不需要进行任何IO操作,保证了主进程的性能。rdb快照的原理是对redis中的数据进行周期性的持久化,也可以理解为redis每隔一段时间就把当前内存数据的状态持久化到磁盘中。如何触发RDB:1.自动触发:通过配置文件中的save自动触发# save "" save

2020-11-11 20:53:27 120

原创 redis过期删除、redis内存淘汰策略

redis过期删除redis的过期删除策略是:惰性删除和定期删除配合使用。1.定期删除由redis.c/activeExpireCycle 函数实现,函数每秒运行10次,每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。可以通过修改配置文件redis.conf 的 hz 选项来调整这个次数,但是不建议将这个值设置超过 100,否则会对CPU造成比较大的压力。因为key太多,如果全盘扫描所有的key会非常耗性能,所以是随机抽取一些key来删除。这样就有可能删除不完,需

2020-11-11 11:58:09 274 1

转载 Git分支回滚到某一次提交

工作中遇到git远程仓库需要回退到历史版本的问题,根据网上的搜索结果结合自己的实践,整理了如下步骤:1. 在“Show History”中找到当前版本(取名:newVersion)和想要回退到的版本(oldVersion)2. 选择newVersion和oldVersion点击“Copy Revision Number”复制两个版本的版本号:newVersion:2746f428a3d3d000bd1b0e886ef8167e1f73ec9coldVersion :6bc5691cbe7304c

2020-09-16 14:19:04 2262

原创 Golang依赖管理

在没有Module之前,需要在GOPATH中创建项目。golang从1.11版本之后引入了Module作为依赖管理工具,从1.13或者之后的版本,Module作为官方默认的依赖管理工具,对应的命令是go mod [Command]。Module功能的启用与否由环境变量中的GO111MODULE决定,而GO111MODULE有三个可选值:GO111MODULE=off,禁用Module功能,则编译的时候会从GOPATH和vendor文件夹中查找依赖包。GO111MODULE=on,启用Module功能

2020-09-02 16:50:49 499

原创 Golang环境变量

1.首先安装Golang,并设置系统的环境变量2.在cmd下执行: go version,出现版本信息证明安装成功:go version go1.15 windows/amd643.安装完Golang之后,可以通过go env命令查看环境变量配置,下面是我的环境变量:set GO111MODULE=onset GOARCH=amd64set GOBIN=set GOCACHE=C:\Users\Administrator\AppData\Local\go-buildset GOENV=C:

2020-09-02 16:19:00 1894

原创 GOLand设置报错warning: go env -w GOPROXY=... does not override conflicting OS environm

一般来说国内不能直接访问golang官方包:所以需要做个代理就是设置GOPROX环境变量设置了Go语言的环境变量:go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.cn,direct设置完后,在GoLand控制台执行go mod download在执行下载mod报错:报错信息是连接不上官方网址,可是我明明走了代理不访问官方网址,走https://goproxy.cn的啊。开始查找原因。打开cmd,用go env .

2020-09-02 15:39:44 39206 6

原创 Docker

1.什么是Docker?Docker是基于Go语言进行开发,基于Linux内核的cgroup,namespace,对进程进行隔离封装,属于操作系统层面的虚拟化技术。由于隔离的进程独立于其他宿主和其他的隔离的进程,所以也被称为容器。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。2.Docker的优点更高效的利用系统资源相比传统的虚拟

2020-08-21 17:20:52 227

原创 中台的概念

中台起源中台是由阿里在2015年提出的"大前台,小中台"战略中延申出来的概念,灵感源于芬兰的一家游戏公司-一家只有300名员工却接连推出爆款游戏,是全球最会赚钱的游戏明星公司。这家看似很小的公司,设置了一个强大的技术平台,来支撑小的游戏团队进行游戏开发,这样一来,他们就可以专心创造,不用担心基础又至关重要的技术支撑问题。中台的功能用一个强大的平台来对这些部门进行总协调和支持并为新业务新部门提供生长的空间,从而大幅降低组织变革的成本。中台提炼各业务线的共线需求,最大限度地减少"重复造轮子"。中台其实是

2020-08-03 23:47:50 2503

原创 Java反射机制

Java反射机制Java反射机制是在程序运行时,对于任意一个类,都能知道这个类的所有属性和方法,都能够调用它的任意一个方法和属性。这种动态的获取信息和动态调用对象的方法的功能称为Java的反射机制。反射机制很重要的一点就是“运行时”,其使得我们可以在程序运行时加载、探索以及使用编译期间完全未知的 .class 文件。换句话说,Java 程序可以加载一个运行时才得知名称的 .class 文件,然后获悉其完整构造,并生成其对象实体、或对其 fields(变量)设值、或调用其 methods(方法)。在

2020-07-07 15:13:33 311

原创 Java中Lambda表达式使用

Lambda表达式,(布兰达)λ表达式,也可称为闭包。java8发布的最重要的新特性。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。Lambda表达式使用:// 不需要参数() -> 5// 当有两个参数时需要有小括号,返回两个传参直接的差值(x, y) -> x – y // 一个参数时可以不需要小括号,返回传参的5倍x -> 5 * x应用(使用jdk1.8以上版本):public class Java8Tester{ publ

2020-06-17 18:56:53 476

原创 IDEA Smart Checkout和Force Checkout区别

IDEA当在一个分支上修改了内容没有提交,然后切换到其他分支时,可能会发生冲突。这时IDEA会弹出提示,问你要选择Smart Checkout还是Force Checkout:如果想保留你在原分支上的修改内容,那么选择Smart Checkout,Force Checkout不会保留你的修改,切到另一个分支内容就消失了,且切回来原来分支也找不回,白写了。原理:选择Smart Checkout,IDEA会先执行stash命令,贮存这些未提交的修改,然后chec...

2020-06-05 17:09:34 24629 3

原创 MyBatis在xml文件中处理小于号和单引号

天天忘记,做个记录。XML转义字符:&lt; < 小于号 &apos; ' 单引号 &amp; & 和

2020-06-05 11:27:01 1532

原创 jps命令查看Java进程

jps是jdk提供的一个查看当前java进程的小工具,简单实用,通过这个命令可以查看当前系统所有运行中的java进程、java包名、jar包名及JVM参数等。命令格式:jps [options ] [ hostid ][options]选项:-q 只显示所有java进程的pid-m 输出所有的java进程pid和main method-l 输出所有的java进程pid和应用主类名,jar的完全路径名-v 输出所有的java进程pid和应用主类名,jar的完全路径名和启动的jvm参数...

2020-05-27 19:09:41 825 1

原创 MySql中IGNORE、ON DUPLICATE KEY UPDATE、DELAYED

mysql插入语句中,如果指定了IGNORE,则对于有重复关键字的行,只使用第一行,其它有冲突的行被删除。示例:insert ignore into tb(...) value(...)这样不用校验是否存在了,有则忽略,无则添加。如果不指定ignore时,有唯一冲突时会报错。mysql插入语句中如果指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。例如,如果列a被定义..

2020-05-27 18:10:21 509

原创 缓存雪崩、缓存击穿、缓存穿透

缓存击穿缓存击穿是对热点数据大批量请求时,这个热点数据的key过期了,导致大量请求涌入到数据库中,导致数据库压力骤增。解决方案:在缓存失效后更新缓存时先获取分布式锁,拿到锁的线程可以查询数据库并更新缓存数据,如果获取分布式锁失败,证明有线程正在查询数据库并更新,每隔一秒重试拿锁重试三次,三次后可以返回状态:数据正在更新,请稍后重试。缓存穿透缓存穿透是访问一个数据库和缓存中都不存在的数据,而用户不断发起请求,比如访问id为-1或者一个非常大的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。

2020-05-27 16:29:03 250

空空如也

空空如也

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

TA关注的人

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