自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

初认识缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。 缓存雪崩:当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也

2021-05-05 17:45:30 206

原创 MySQL事务的四大特性以及事务的隔离级别

一、事务的四大特性(ACID)如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性:1、原子性(Atomicity)  原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。2、一致性(Consistency)  一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。  拿转账来说,假设用户A和用户B两者的钱加起

2020-10-13 21:56:45 354

原创 java 设计模式 中介者模式 让互相调用的模块之间解耦合

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 中介者模式的角色和职责  1、Mediator:中介者类的抽象父类    抽象中介者角色定义统一的接口,用于各角色(男和女)之间的通信。  2、ConcreteMediator:具体中介者角色    具体中介者角色,通过协调各角色(男和女)实现协作行为,因此它必须依赖于各个角色。  3、Colleague:关联类的抽象父类    每一个角色都知道中介...

2020-10-11 18:53:26 495

原创 java 设计模式 原型模式 自己实现自己的拷贝逻辑

原型模式,在笔者理解看来就是克隆,当我们在创建第一个对象时,已经给对象赋值完毕,此时我们需要一个当前对象的副本,如果没有原型模式,我们会再次创建一个对象,然后后二次赋值,保证两个对象完全一致,这样我们的代码可读性就比较差,而且稍不留神copy错了麻烦就大了了,此时我们如果了解原型模式,就能够美化我们的代码,看起来够整洁,而且也不会出错。原型模式 说明 浅克隆 只是拷贝本对象,其对象内部的数组、引用对象等都不拷贝, 还是指向原生对象的内部元素地址 深度克隆 深复制把

2020-10-11 18:05:43 159

原创 java 设计模式 构造器模式 封装复杂对象的构造逻辑

构造器模式,也被称为建造者、生成器模式,是设计模式中比较容易理解的模式之一。定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。package com.designpattern;public class BuilderPatternDemo { public static void main(String[] args) { User user = new User(); System.out.println("在设置

2020-10-11 17:39:54 377

原创 java 设计模式 外观模式 将多个内部模块调用封装在一个类中

概念介绍外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口。客户在使用系统时不必和子系统打交道了,降低了客户和子系统间的耦合。在外观模式中主要包含如下几个角色。1、门面角色(facade):这是外观模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几种功能组合。2、子系统角色(SystemA、SystemB、SystemC):实现了子系统的功能。对子系统角色来说,facade角色与客户角色一样,是未知的,它没有任何facade角色的

2020-10-11 11:08:26 415

原创 java 设计模式 桥接模式 两个代码组件之间面向接口桥接调用

简介桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式。个人解释:将变化的维度进行抽离,在他们之间搭建一座桥梁来通信,两个代码组件之间面向接口桥接调用,那么接口就是他们之间的桥梁 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。 修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。 实现化(Implementor)角色:这个角色给出...

2020-10-10 23:49:02 213

原创 java 设计模式 享元模式

享元模式享元(Flyweight)的核心思想很简单:如果一个对象实例一经创建就不可变,那么反复创建相同的实例就没有必要,直接向调用方返回一个共享的实例就行,这样即节省内存,又可以减少创建对象的过程,提高运行速度。package com.designpattern;import java.util.HashMap;import java.util.Map;/** * 享元模式 */public class FlyweightPatternDemo { public stat

2020-10-10 16:14:10 70

原创 maven

maven 依赖声明的三要素 坐标 groupId、artifactId、version 声明了三要素,一个坐标唯一定位了一个依赖的某个版本的jar包,maven会自动到远程的中央仓库里面去,下载到本地来,在打包的时候,就会自动使用,编译依赖范围<scope></scope>maven 有三套classpath,classpath就是项目中用到的各种依赖的类,jvm在运行的时候需要去classpath下面加载对应的类maven 在编译源...

2020-09-22 10:44:06 574

原创 Maven坐标

Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标是通过一些元素定义的,他们是groupId、artifactId、version、packaging、classifier。先看一组坐标定义,如下: <groupId>org.sonatype.nexus</groupId> <artifactId>nexus-indexer</artifactId> <version>2.

2020-09-19 22:24:10 171

原创 数据结构与算法 平衡二叉搜索树

平衡二叉搜索树如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为,其查找效率为,近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。一般的,二叉排序树的查找性能在到O(n)之间。因此,为了获得较好的查找性能,就要构造一棵平衡的二叉排序树。平衡当节点数量固定时,左右子树的高度越接近,这颗二叉树就越平衡(高度越低)最理想的平衡,就是像完全二叉树、满二叉树那样,高度是最小的如何改进二叉树搜索树首先,节点的添加、删除是...

2020-08-17 23:14:39 308

原创 数据结构与算法 B树

B树特点B树(B-tree、B-树)B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现 1个节点可以存储超过2个元素、可以拥有超过2个节子节点 拥有二叉搜索树的一些性质(左子树都比根节点小 右子树都比根节点大) 平衡,每个节点的所有子树高度一致 比较矮 M阶B树的性质(M>=2)假设一个节点存储的元素个数为x,根节点:1<= x <=m-1 ,非根节点: 「m/2」- 1 <= x <=m-1 如果有子节点,因为节点有两个...

2020-08-15 23:43:36 188

原创 数据结构与算法 二叉树与二叉搜索树

节点、根节点、父节点、子节点、兄弟节点 一棵树可以没有任何节点,成为空树 一棵树可以只有一个节点,也就是只有根节点 子树、左子树、右子树 节点的度 :子树的个数 树的度:所有节点度中的最大值 叶子节点:节点度为0 的 层数:根节点在第一层,根节点的子节点在第二层 节点的深度:从根节点到当前节点的唯一路径上的节点总和 节点的高度:从当前节点到最远的叶子节点的路径上的节点总数 树的深度:所有节点深度中的最大值 树的高度:所有节点高度中的最大值 树的高度 等于树的深度有序...

2020-08-10 23:30:13 257

原创 数据结构与算法 - 栈 队列

目录栈stack栈的接口设计动态数组实现栈练习题有效的括号队列队列的接口设计简单实现一个queue练习 - 用栈实现队列双端队列双端队列接口设计双端队列源码循环队列入队列出队列栈stack栈是一种特殊的线性表,只能在一端进行操作 往栈中添加元素的操作,一般叫做push,入栈 从栈中移除元素的操作,一般叫做pop,出栈 后进先出的原则 栈...

2020-07-29 23:46:55 309

原创 JVM 整体结构

JVM 整体结构​​​​Java不只是一种编程语言,还是一个完整的操作平台。Java之所以可以跨平台,这离不开JVM虚拟机。JVM是一个软件,在不同的平台上,JVM有不同的版本。Java在编译之后会生成一种.class文件,这种文件成为字节码文件。JVM虚拟机就是将Java编译后的.class文件翻译成特定平台下的机器码,然后运行。也就是说,在不同平台上装上平台对应的JVM虚拟机后,就可以将Java字节码文件转换,然后运行我们的Java程序。值得注意的是,Java编译后的结果是生成字节码,而不是

2020-07-12 19:12:32 175

原创 JVM即时编译(JIT)

JIT即时编译1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。2、JIT编译(just-in-timecompilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。3、自.

2020-07-12 18:51:42 250

原创 RocketMQ 源码分析

目录NameServer架构设计启动流程Step1Step2Step3NameServer路由管理路由元信息路由注册路由删除路由发现NameServer小结Producer方法和属性​启动流程 ​消息发送NameServer架构设计Broker消息服务器在启动时向所有NameServer注册,消息生产者(Producer)在发送消息之前先从NameServer获取Broker服务器地址列表,然...

2020-06-30 00:19:33 325

原创 RocketMQ 初识

RocketMQ优点解耦、削峰、数据分发RocketMQ缺点系统可用性降低:系统引入外部依赖越多,系统稳定性越差,一旦mq宕机,就会对业务造成影响。如何保证MQ高可用? 系统复杂度提高:mq的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过mq进行异步调用。如何保证 消息没有被重复消息?怎么处理消息丢失情况?如何保证消息传递的顺序性? 一致性问题:A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。如何保证消息数据处理的一致

2020-06-21 12:57:32 225

原创 JAVA基础之运算符

运算符算术运算符比较运算符逻辑运算符位运算符

2020-06-06 18:03:20 120

原创 JAVA基础之进制转换

关于进制所有数字在计算机底层都以二进制形式存在 对于整数,有四种表示方式: 二进制:0-1 满2进1 。以0b或0B开头 十进制:0-9 满10进1。 八进制:0-7 满8进1.以数字0开头表示。 十六进制:0-9及A-F,满16进1,以0X或0x开头表示。如 0x21AF+1 = 0x21B0二进制java整数常量默认是int类型,当用二进制定义整数时,其第32位是符号位;当是long类型时,二进制默认是占6...

2020-06-06 16:47:19 269

原创 java8 Collector(收集器)

Collector什么是CollectorJavaDoc中对Collector的描述如下:A mutable reduction operation that accumulates input elements into a mutable result container, optionally transforming the accumulated result into a...

2020-05-06 22:55:47 382

原创 java8 Comparator 比较器

在java8之后,comparator 是一个函数式接口,对接口进行了增强(增加了相当多的默认方法)。reversed 倒叙comparing 比较器(comparingInt 、 comparingLong、comparingDouble)thenComparing 之后比较(串联比较),如果第一个比较器确定不了顺序,thenComparing 才会起效果package com...

2020-05-06 16:48:07 956

原创 java8 Stream详解

Stream是什么在探讨探究stream的实现原理和动手实现之前,我们先要体会stream流计算的独特之处。  举个例子: 有一个List<Person>列表,我们需要获得年龄为70岁的前10个Person的姓名。过程式的解决方案:  稍加思考,我们很快就写出了一个过程式的解决方案(伪代码):List<Person> personList = from...

2020-05-05 22:25:14 905

原创 java8接口新特性:default、static

java8之前接口中的方法默认类型都是public abstract,也就是抽象方法,具体实现都交给实现类。而java8对接口功能做了增强,增加了default方法和static方法,也就是说从java8开始接口中的方法不再只能是抽象的,也可以有实现。其应用也非常简单,如下面的例子所示,在接口中定义default和static方法:public interface DefaultInter...

2020-05-04 22:42:59 191

原创 Java8 方法引用

1、方法引用的使用场景  我们用Lambda表达式来实现匿名方法。但有些情况下,我们用Lambda表达式仅仅是调用一些已经存在的方法,除了调用动作外,没有其他任何多余的动作,在这种情况下,我们倾向于通过方法名来调用它,而Lambda表达式可以帮助我们实现这一要求,它使得Lambda在调用那些已经拥有方法名的方法的代码更简洁、更容易理解。方法引用可以理解为Lambda表达式的另外一种表现形式。...

2020-05-04 22:27:52 125

原创 java8 Optional

Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用null表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。1、of为非null的值创建一个Optional,如果值为null,则会抛出NullPointerExceptionOptional<Integer> opti...

2020-05-03 17:18:15 109

原创 Lambda表达式 分析详解

什么是Lambda表达式我们可以把它看成是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,一定程度上可以使代码看起来更加简洁。为何需要Lambda表达式在Java中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法。 在JavaScript中,函数参数是一个函数,返回值是另一个函数的情况非常常见的;JavaScript是一们非常典型的函数式语言在ja...

2020-05-03 13:56:15 698

原创 JAVA8 Optional

前言身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数。这正是一些类似Guava的外部API试图解决的问题。一些JVM编程语言比如Scala、Ceylon等已经将对在核心API中解决了这个问题。Optional概述新版本的Java,比如Ja...

2020-04-22 22:40:37 140

原创 不要再被MYSQL的INT(M)给迷惑了

MYSQL里有些比较隐晦的知识点,经常被稀里糊涂的用错而不自知。以前评审过程发生的次数较多,索性随手写一些出来。前人栽个树,后人一定要乘凉啊!表设计使用整型时,经常发现定义int括号里的M是五花八门的。误区是,不少人把M当成了数据库中存储的最大长度,而实际上这个代表的是显示宽度。只要是int类型,在数据库里的存储就一定是4个字节。有符号整型:从-2^31(-2147483648) 到 2^...

2020-04-14 21:20:20 549

原创 JAVA 字节码文件分析

​​​​package com.jvm.bytecode;public class MyTest1 { private int a = 1; public int getA() { return a; } public void setA(int a) { this.a = a; }}使用javap -...

2020-03-26 00:02:04 260

原创 Elasticsearch 6.X 新类型Join深入详解

0、ES6.X 一对多、多对多的数据该如何存储和实现呢?引出问题:“某头条新闻APP”新闻内容和新闻评论是1对多的关系?在ES6.X该如何存储、如何进行高效检索、聚合操作呢?相信阅读本文,你就能得到答案!1、ES6.X 新类型Join 产生背景 Mysql中多表关联,我们可以通过left join 或者Join等实现; ES5.X版本,借助父子文档实现多表关...

2020-03-25 11:00:33 374

原创 Elasticsearch性能调优之磁盘读写性能优化

优化磁盘空间的占用,减少磁盘空间的占用,更多的数据可以进入filesystem cache比如说你原来,磁盘空间占用一共是1T,内存只有512G,现在优化了磁盘空间占用之后,减少了数据量,可能数据量就只有512G了,那么就可以全部进入内存1、禁用不需要的功能聚合,搜索,评分,近似匹配聚合:doc values搜索:倒排索引,index评分:norms近似匹配:index_op...

2020-03-22 15:56:18 2073

原创 Elasticsearch性能调优之搜索性能优化

magic,如果真的要优化搜索性能的话,就是以下几种办法1/5,配合起来,就是搜索性能优化的杀手锏3/4,配合起来,解决各种复杂的搜索需求的性能1、给filesysgtem cache更多的内存es的搜索引擎严重依赖于底层的filesystem cache,你如果给filesystem cache更多的内存,尽量让内存可以容纳所有的indx segment file索引数据文件,那么...

2020-03-22 15:36:22 782

原创 Elasticsearch性能调优之索引写入性能优化

1和2,适合的是,你的es java client程序,可以采取批量写的场景3,比较通用的,比较合适的是,你对于写入数据到可以读到能够接受比较大的延迟4,一次性批量导入数据的场景5/6/7/8/9,通用型,尽量都去做到1/2/3/4,都是有各自适用的场景,如果场景合适,就尽量用,因为对性能的提升都是很明显的5/6/7/8/9,其中通用,尽量去优化你的集群,但是其中最重要的,就是3块,...

2020-03-22 15:25:32 1267

原创 Elasticsearch性能调优之基本优化

1、搜索结果不要返回过大的结果集es是一个搜索引擎,所以如果用这个搜索引擎对大量的数据进行搜索,并且返回搜索结果中排在最前面的少数结果,是非常合适的。然而,如果要做成类似数据库的东西,每次都进行大批量的查询,是很不合适的。如果真的要做大批量结果的查询,记得考虑用scroll api。2、避免超大的documenthttp.max_context_length的默认值是100mb,意味着...

2020-03-22 14:02:19 344

原创 Elasticsearch性能调优之慢查询日志

es里面的操作,主要分为两种,一种写入(增删改),另一种是查询(搜索)我们分别要识别出来,哪些写入操作性能比较慢,哪些查询操作性能比较慢,先要识别出来有性能问题的这些慢查询,慢写入,然后才能去考虑如何优化写入的性能,如何优化搜索的性能搜索慢查询日志无论是慢查询日志,还是慢写入日志,都是针对shard级别的,因为大家应该知道,无论你是执行增删改,还是执行搜索,都是对某个数据执行写入或者是...

2020-03-22 13:52:11 2454 1

原创 Elasticsearch的底层模块深入解析之node

node module,主要是用来处理各种不同类型的节点的,es有哪些类型的node,另外就是对这些类型的node有些什么特殊的参数,对于一个较大的集群来说,如何去规划和配置各种各样的node1、node类型如果我们启动es的一个实例,那么就是启动了一个es node,一些es node就可以组成一个es集群。如果仅仅运行了一个es node,那么也有一个es集群,只是节点数量就是1。...

2020-03-22 13:28:58 2267

原创 JAVA 四种引用类型

Strong Reference我们日常绝大多数引用均是强引用 如果对象拥有强引用,就表示它是可达的,那么垃圾收集器就不会将其回收 如果将某个强引用显式置为null,就表示该引用不再指向对象,若该对象没有其他引用指向他,那么会在适当时机就会被垃圾回收器回收。举例:我创建了一个对象listA,并向listA中添加了100个元素,大家知道ArrayList的底层是数组,在创建listA之...

2020-03-21 22:46:58 205 1

原创 JVM G1收集器日志分析

package com.jvm.g1;/** * -verbose:gc * -Xms10M * -Xmx10M * -XX:+UseG1GC * -XX:+PrintGCDetails * -XX:+PrintGCDateStamps * -XX:MaxGCPauseMillis=200m * */public class MyTest { public s...

2020-03-21 11:41:42 482

原创 JVM G1垃圾收集器

Hotspot关键组件Java虚拟机的主要组件,包括类加载器、运行时数据区和执行引擎。 Java虚拟机有关性能的关键组件已经在下面的图片上高亮显示了。Java虚拟机有三个组件关注着什么时候进行性能优化,堆空间是你的对象所存储的地方,这个区域被启动时选择的垃圾回收器管理,大部分调优选项与调整堆大小和根据你的情况选择最适当的垃圾收集器相关。即时编译器对性能也有很大的影响,但是使用新版本的J...

2020-03-19 18:06:42 333

空空如也

空空如也

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

TA关注的人

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