自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Nacos的Raft算法原理分析

什么是raft算法?引用百度百科的简介:Raft是一种共识算法,旨在替代Paxos。 它通过逻辑分离比Paxos更容易理解,但它也被正式证明是安全的,并提供了一些额外的功能。[1]Raft提供了一种在计算系统集群中分布状态机的通用方法,确保集群中的每个节点都同意一系列相同的状态转换。raft算法解决了什么问题?单节点的数据的操作问题,很简单,并不会出现数据不一致的问题,但是一旦涉及到多个节点,就无法确定究竟以哪一个节点为准,也无法判断应该去访问哪个节点。而Raft算法就是用来保证分布式事务的一

2021-01-19 15:32:54 791

原创 常见垃圾回收器

零、前言为什么笔者会去学习垃圾回收器呢?只是因为阿里的面试喜欢问这些问题,所以就去了解了下。一、总体概览话不多说,先上图:(图是在网站找的资料,还是自己画一下,加深印象)如上图所示。因为java堆被分为新生代和老年代两块区域,所以在G1和ZGC没有出现之前,新生代和老年代都分别有三款垃圾回收器,并且上图展示了它们之间的搭配关系。下面就分别来介绍一下这些垃圾收集器吧。二、Serial收集器/Serial Old收集器Serial收集器是一款作用于新生代的垃圾收集器,与之对应的老年代收集器是Ser

2021-01-18 17:12:55 637

原创 对MySQL的锁了解吗

当数据库有并发事务的时候,可能会产生数据的不一致,这时候需要一些机制来保证访问的次序,锁机制就是这样的一个机制。就像酒店的房间,如果大家随意进出,就会出现多人抢夺同一个房间的情况,而在房间上装上锁,申请到钥匙的人才可以入住并且将房间锁起来,其他人只有等他使用完毕才可以再次使用。隔离级别与锁的关系在Read Uncommitted级别下,读取数据不需要加共享锁,这样就不会跟被修改的数据上的排他锁冲突在Read Committed级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁;在Repea

2021-01-13 17:23:44 139

原创 JVM 堆内存溢出后,其他线程是否可继续工作?

最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。由于题目中给出的OOM,java中OOM又分很多类型。比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、不能创建线程(“java.lang.OutOfM

2021-01-13 16:36:11 681

原创 数据结构-并查集

简介并查集(Disjoint-Set)是一种可以动态维护若干个不重叠的集合,并支持合并与查询两种操作的一种数据结构。就是维护多个集合之间的关系,集合的合并和查询定位(哪个元素属于哪些集合等查询操作),所以并查集主要包括两种操作:合并(Union):合并两个集合;查询(Find):查询元素属于哪些集合。由上面的概念,我们可以知道并查集主要解决以下几个个问题:合并两个或多个集合;判断某一个元素或者多个元素是否属于某个集合分析慢union,快find我们可以用数组来表示数据结构(并查集表示的是

2021-01-12 14:56:42 520

原创 基数排序

定义基数排序是将一个元素拆分成多个关键字,每个元素之间同等位置上的关键字进行计数排序或者桶排序。时间复杂度假设在待排序的元素中,最长的元素的长度是k,那么我们就需要进行k次计数排序或者桶排序,计数排序和桶排序的时间复杂度都是O(n),k次排序时间复杂度就是O(k*n),当k较小时,基数排序的时间复杂度就是O(n)。到此为止,我们可以发现桶排序、计数排序、基数排序的时间复杂度都是O(n),也叫线性排序。优缺点基数排序对待排序的数据是有一定的要求的:1、待排序数据的每个元素都可以分割出多个关键字来

2021-01-07 15:24:19 478

原创 二叉树

树的基本概念如上图所示:根节点:没有父节点的节点,如E父节点:A是B的父节点子节点:B是A的子节点兄弟节点:拥有同一父节点的节点,如BCD是兄弟节点叶节点:没有子节点的节点,如G、H、I、J、K、L高度:节点到叶子节点的最长路径,如E节点的高度是3,A节点的高度是2,B节点是1,G节点是0深度:根节点到此节点所经历的边的个数,如E的深度是0,A的深度是1层:节点的深度+1树的高度:根节点的高度二叉树每个节点最多有两个叉,分别是左子节点和右子节点。满二叉树:除了叶子结点之外,每个节

2021-01-06 17:06:08 513

原创 二叉查找树

二叉查找树又叫二叉搜索树,要求在树中的任何一个节点,其左子树中每个节点的值都要小于这个节点的值,右子树节点的值都要大于这个节点的值。1、查找思路:先取根节点,若等于要查找的数据,返回若小于要查找的数据,递归查找右子树若大于要查找的数据,递归查找左子树class Node{ public int data; public Node left; public Node right; public Node(int data, Node left, Node ri

2021-01-06 15:38:44 498

原创 散列表

散列思想散列表采用的是数组支持按照下标随机访问,时间复杂度是O(1)的特性。通过散列函数将元素的键值映射到数组下标,然后将数据存储到对应下标的位置。当查找数据时,通过同样的散列函数计算键值,按照键值查找数据下标对应的值即可。散列函数散列函数基本要求:散列函数计算得到的散列值是一个非负整数如key1=key2,则hash(key1)==hash(key2)如key1≠key2,则hash(key1)≠hash(key2)注意:第三点不是绝对的,可能存在key不同,散列函数相同的情况,这个就是散列

2021-01-06 14:16:02 1000

原创 桶排序

定义桶排序采用的是分治的思想,核心思想是将待排序的数据分配到几个桶中,每个桶里的数据再单独排序,桶内排序之后,把每个桶的数据依次取出,组成有序的序列。时间复杂度假设待排序数据个数为n,要分配到m个桶中,加入待排序数据时均匀的,要么每个桶分配的数据个数为k=n/m,桶内排序采用快速排序,时间复杂度为O(klogk)。m个桶的时间复杂度就是O(mklogk),前面提到k=n/m,O(mk*logk)=O(nlog(n/m)),当m无限接近n时,log(n/m)是一个常数,所以最后的时间复杂度为O(n)。

2021-01-05 16:02:35 609

原创 递归树

递归树和时间复杂度递归算法的思想是将大问题分解为小问题,小问题再分解为小小问题,一直分解到足够小,不能分解为止。我们把这一层一层的分解过程画成一棵树,这个树就叫递归树。以递归排序为例,分析一下递归排序的时间复杂度。从归并排序递归树我们发现,每一层的归并操作消耗的时间总和是一样的,都是n,那么只需要知道树的高度h,就可以算法时间复杂度O(n*h)。这个递归树是一个满二叉树,而满二叉树的高度是logn,所以归并排序的时间复杂度是O(nlogn)。快速排序的时间复杂度快读排序最好情况下,每次分区都一

2021-01-05 15:04:48 717

原创 跳表

什么是跳表?对于单链表来说,即便数据是有序的,查找某一数据的时间复杂度也是O(n)。如何提高查找的效率呢?我们可以对链表建立索引。比如在上图的链表中查找16,可以先遍历索引层,当遍历到13时,发现13小于16并且后面的17大于16,所以可以判定要查找的16一定在[13,17]这个区间内,下降到原始链表从13开始遍历,知道找到16,这样我们减少了查找的次数,提升了查找效率。如果链表的数据量很大,我们也可以建立多级索引,来提升查询效率。这种链表+多级索引的数据结构就是跳表。查询到底有多快?我们来分

2021-01-04 17:13:45 535

原创 垃圾回收的算法和思想

看了JAVA程序性能优化这本书的垃圾回收内容章节后整理归纳。第一种:引用计数法实现:对于一个对象A,只要任何一个对象引用了A,那么A的引用计数器就加1,当引用失效时,引用计数器就减1。只要引用计数器的值为0,那么就表示对象A不可能再被引用。好处:使用古老,容易实现;坏处:当循环引用的时候,容易导致内存泄露问题;A引用了B,B也引用了A,这样始终不会释放,导致内存泄露(不可达的对象)。第二种:标记-清除算法实现:分为两个阶段,标记阶段和清除阶段。在标记阶段,从根节点开始,对每一个可达性的对象进行标

2020-12-31 14:23:56 638

原创 哈希算法

什么是哈希算法?哈希算法就是将任意长度的二进制值串映射为固定长度的二进制值串的映射规则。映射之后得到的值串叫做哈希值。哈希算法需要满足几个要求通过哈希值不能反推出原始值,也就是不可逆。对输入数十分敏感,值修改一点,哈希值的变化就会很大。哈希冲突的概率要小要尽量高效,很长的原始数据也可以很快计算出哈希值哈希算法应用一、安全加密常用的加密哈希算法有MD5(MD5 Message-Digest Algorithm,MD5 消息摘要算法)和SHA(Secure Hash Algorithm,安全

2020-12-31 14:23:23 997

原创 【数据结构】栈和队列---基本概念

基本概念栈栈其实很好理解,我们可以将栈理解成为一个箱子往箱子里面放东西叫做入栈往箱子里面取东西叫做出栈箱子的底部叫做栈底箱子的顶部叫做栈顶栈的特性:先进后出队列队列其实也很好理解,我们将队列可以看成小朋友排队有小朋友到指定地点了–》出队有小朋友加入了–》入队相对于栈而言,队列的特点是:先进先出栈和队列栈和队列是两种操作受限的线性表。这种受限表现在:栈的插入和删除操作只允许再表尾端进行(在栈这种成为“栈顶”)满足先进后出;队列只允许在表尾插入数据元素,在表头删除数据元素,满足先进先

2020-12-30 17:40:13 570 1

原创 【数据结构】树---基本概念

基本概念前文讲述的链表、栈和队列都是一对一的线性结构,本章讲述一对多的线性结构–树。【一对多】就是指一个元素只能有一个前驱,但是可以有多个后继。节点拥有的子树数称为节点的度。度为0的间节点称为叶节点或终端节点,度不为0的节点称为分支节点。除根节点外,分支节点也被成为内部节点。节点的子树的根称为该节点的孩子,该节点称为孩子的父节点。同一个双亲的孩子之间互称兄弟。树的度是树中各个节点度的最大值。节点的层次从根开始定义起,根为第一层,根的孩子为第二层。双亲在同一层的节点互为堂兄弟。树中节点

2020-12-30 15:59:42 632

原创 【数据结构】图---基本概念

基本概念图的定义图室友一些点和这些点之间的连线所组成;其中,点通常被称为“顶点”,而点与点之间的连线则被称为“边或弧”,通常记为:G = (V,E)图的种类根据边是否有方向,将图可以划分为:无向图和有向图。无向图是一种特殊的有向图,它的每一条边都有两个方向临接点和度邻接点一条边上的两个顶点叫做邻接点。例如:上图无向图G0中的顶点A和顶点C就是邻接点在有向图中,除了邻接点之外,还有“入边”和“出边”的概念。顶点的入边,是指以该顶点为终点的边。而顶点的出边,则是指以该顶点为起点的边。

2020-12-30 15:07:11 1056

原创 常见 MySQL 的慢查询优化方式!

慢查询日志概念MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据

2020-12-29 16:08:32 854

原创 Mysql数据库的隔离级别及其区别

​ 事务是应用程序中一系列严谨的操作,所有的操作必须是成功完成的。否则在每个操作中所做的所有事情都会被撤销。ACID原子性要不全部成功,要不全部失败一致性​ 我们的操作对数据库来说是从一个一致性状态编程另外一个一致性状态,不会出现说中间状态不一致的情况隔离性我们并行执行的事务之间必须是相互隔离的不能够相互干扰的持续性如果事务一旦提交,那么他对数据库的修改是永久性的。如果 A 向 B 转账,先把 A 的钱扣掉,在把 B 的钱增加,那么这个时候它是一个完整的事务。不可能出现

2020-12-29 15:28:06 832

原创 MySQL InnoDB锁原理剖析

事务的四大特性(ACID)中,隔离性(Isolation)是一个非常重要的特性。隔离性能保证不同的事务操作相同数据(表或行)时互相不干扰,进而保证数据的一致性。其中锁机制是实现事务隔离级别的一种重要方案(另一种是MVCC)。今天我们主要来了解一下MySQL锁的原理。前提知识一、怎么开启数据库事务?1)手工开启事务: begin / start transaction;2)设定事务是否自动开启(off代表事务不会自动提交): set session autocommit = on/off;

2020-12-29 13:58:36 951

原创 薪资被倒挂?是怒刷 LeetCode,还是另寻他路?

不知道从啥时候开始,薪资倒挂这个词就开始火起来了。其实可以理解为一年比一年高的入行门槛以及愈发激烈的同行竞争。这也无可厚非,大量的互联网公司出现,市场上的程序员需求急剧上升,程序员获得了薪资市场的优势地位,薪资高也是公认的事实。如今的程序开发和10年前已经有了很大的不同。各种开源软件和开发工具,加上更多的入门资料、文档和技术博客,如果你愿意学习,可以在很快的时间内熟悉一项开发技能这使得很多不是计算机毕业的学生,也加入了程序员的行业。人多的结果就是企业提高门槛,校招生们努力提高实力。一来二去,可不就卷了

2020-12-29 11:21:42 54

原创 JVM基本概念

主要介绍jvm的基础概念点JVM是虚拟机,总的来说是一种标准规范,虚拟机有很多实现版本。主要作用就是运行java的类文件的。而HotSpot是虚拟机的一种实现,它是sun公司开发的,是sun jdk和open jdk中自带的虚拟机,同时也是目前使用范围最广的虚拟机。HotSpot,顾名思义,它是基于热点代码探测的,有JIT即时编译功能,能提供更高质量的本地代码。二者区别是一个是标准,一个是实现方式。内存溢出和内存泄漏:内存溢出:分配的内存不足以存放下程序所需要的数据。内存泄漏:程序在申请内存是

2020-12-27 16:49:37 789

原创 JVM 字节码 对照表

原文:https://gper.club/articles/7e7e7f7ff7g5agc9g65

2020-12-27 15:47:37 905

原创 JVM-入门了解篇

引言:任何软件语言的设计都有对应的硬件设备作为参考,同理我们理解对应知识结构或设计思想也可以参考对应的体系模型进行理解。计算机体系结构:计算机处理数据过程:(1)提取阶段:由输入设备把原始数据或信息输入给计算机存储器存起来(2)解码阶段:根据CPU的指令集架构(ISA)定义将数值解译为指令(3)执行阶段:再由控制器把需要处理或计算的数据调入运算器(4)最终阶段:由输出设备把最后运算结果输出本质就是CPU处理数据并且返回CPU = 控制器+运算器+存储器什么问题需要JVM来解决?如

2020-12-27 14:13:49 1254 3

原创 JVM--运行时数据区与内存模型

开篇问题:一句话描述类加载过程?类加载过程实际是将Java文件编译为class文件并装载到JVM中最终解析为01机器代码供服务器进行的过程,涉及到的过程包括:编译、装载、链接、初始化、使用、卸载6个过程,其中各个过程的作用分别是:编译:通过javac命令将Java文件转换成class文件。装载:查找并加载class文件。链接:包括:验证、准备、解析。验证:通过对二进制流的内容进行校验来检查是否符合JVM的要求规范以及是否会对程序运行时是否会对JVM造成危害。其中包括:文件格式验证 --

2020-12-25 17:32:56 671

原创 全网疯传的Java后端岗成长笔记,先到先得!

又到了“金九银十”面试求职高峰期,在金三银四时也参与过不少面试,2020都说工作不好找,也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(1000道高频题),同时也整理一些图文解析及笔记,今天在这免费分享给大家,希望大家在即将的十月面试做好复习,长期的积累和短期的突击让自己能找到一个满意的工作!Java成长笔记:1.Java基础复盘2.Web编程初探3.SSM从入门到精通4.SpringBoot快速上手二、1-3年高工1.并发编

2020-10-20 16:51:55 96

原创 架构师技术文档:Redis+Nginx+Spring全家桶+Dubbo精选

最近花了很长的时间去搜罗整理Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多说,直接上干货!一、Redis技术好文精选整理 Redis哨兵、复制、集群的设计原理,以及区别 Spring+Redis+Docker+Dubbo 深入了解redis 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题 .

2020-08-20 15:17:37 135

原创 阿里技术文档:Redis+Nginx+Spring全家桶+Dubbo精选

最近花了很长的时间去搜罗整理Java核心技术好文,我把每个Java核心技术的优选文章都整理成了一个又一个的文档。今天就把这些东西分享给老铁们,也能为老铁们省去不少麻烦,想学什么技能了,遇到哪方面的问题了 直接打开文档学一学就好了。不多说,直接上干货!一、Redis技术好文精选整理 Redis哨兵、复制、集群的设计原理,以及区别 Spring+Redis+Docker+Dubbo 深入了解redis 如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题 .

2020-07-16 14:51:17 3445 20

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