自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 看不懂线程池源码?ThreadPoolExecutor核心源码这样实现

ThreadPoolExecutor核心源码注释文章目录ThreadPoolExecutor核心源码注释执行流程图核心属性构造方法execute()方法addWorker()Worker()构造Worker的run()runWorker()getTask()processWorkerExit()执行流程图核心属性// 存储线程池的状态,高3位表示线程池状态,低29位表示worker数量 private final AtomicInteger ctl = new AtomicInteger(

2021-05-25 20:24:23 179 3

原创 Java-WebSocket使用简介

Java WebSocket详解写在前面,在项目中需要使用到websocket和前端进行交互时在网上寻找资源,但看了各种博客,一言难尽。最后看Oracle的JavaEE文档将WebSocket算是有了一个比较清晰的理解。本文只对核心概念和核心使用方式进行说明(只说明注解方式,官方推荐),详细信息情参考官方文档,连接如下。文档:https://docs.oracle.com/javaee/7/tutorial/websocket.htm文章目录Java WebSocket详解一、WebSocket

2021-05-03 12:32:33 6003 3

原创 还学不会Spring源码?保姆级图示带你不一样的体验

Spring源码-声明式事务流程源码学习最好的办法还是DeBug,分享出自己Debug时画出的流程图,分享出自己deBug时的源码注释https://gitee.com/jueminggitee/spring.git

2021-03-31 14:04:51 831

原创 Java虚拟机JVM的编译期优化(早期、晚期)和几种语法糖

编译期(早期)优化和几种语法糖文章目录编译期(早期)优化和几种语法糖一、编译期概述二、前端编译期步骤过程解析与填充符号表词法与语法分析填充符号表注解处理器语义分析与字节码生成三、语法糖泛型与类型擦除自动装箱、拆箱与遍历循环编译期(晚期)优化解释器与编译器HotSpot虚拟机内置即时编译器编译优化技术一、编译期概述Java语言的“编译期”并不特指将xxx.java编译为xxx.class。Java有三个编译器JIT编译器:将字节码编译为机器码(将热点代码进行编译,提高效率)AOT编译器:将xxx.

2020-06-08 09:51:23 402

原创 JAVA虚拟机JVM字节码执行引擎(栈帧内部结构、分派概念、基于栈的指令集)

虚拟机字节码执行引擎运行时栈帧结构概述栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,位于虚拟机栈中。栈帧包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。局部变量表局部变量表是一组变量的存储空间,用于存放方法参数和方法内部的局部变量,在程序被编译为Class文件时就被方法的Code属性中的max_locals数据项确定(详情不了解参看之前博客Class类文件结构)变量槽局部变量表的容量以变量槽(Slot)为最小单位分配。虚拟机规范并未明确指明Slot大

2020-06-05 16:42:17 420

原创 Java虚拟机类加载机制(类加载过程、类加载器、双亲委派机制)

虚拟机类加载机制在我们写好的代码编译生成xxx.class文件之后,是如何被JVM加载执行的呢?这就是虚拟机类加载机制要解决的问题了。一、概述虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,就是虚拟机的类加载机制Java支持动态扩展,与在编译时需要进行连接的语言不同,Java语言可以在运行时进行类的加载二、类加载的时机当一个类被加载到虚拟机内存中到卸载出内存为止,它的生命周期包括了七个阶段:加载、验证、准备、解析、初

2020-06-05 16:11:34 186

原创 Java并发线程安全与锁优化(不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步 非阻塞同步 自旋锁 自适应锁 锁消除 锁粗化 轻量级锁 偏向锁 CAS synchronized)

线程安全与锁优化文章目录线程安全与锁优化一、线程安全概念不可变绝对线程安全相对线程安全线程兼容线程对立二、线程安全的实现方法互斥同步最基本互斥手段就是synchronized另一种手段JUC下的ReentrantLock阻塞同步的问题:非阻塞同步实现方式CAS操作:无同步方案三、锁优化自旋锁与自适应锁锁消除锁粗化轻量级锁偏向锁一、线程安全概念为了更好的理解线程安全,我们不把线程安全看做是一个二元对立的选项来看,而是按照线程安全的”安全程度“由强至弱来排序。Java线程各种操作共享的数据分为五类:

2020-05-31 18:28:33 1216

原创 数据库事务(ACID特征(原子性、一致性、隔离性、持久性)、丢失数据修改,脏数据,不可重复读,幻读,死锁,活锁)讲解

数据库事务文章目录数据库事务一、什么是事务二、事务的特征三、并发问题1、丢失数据修改2、读脏数据3、不可重复读4、幻读四、并发控制1、两种基本锁2、死锁和活锁一、什么是事务事务就是用户定义的操作序列。这些操作共同构成一个完整的工作单元,一个事务内的操作要么全部执行,要么全部不执行。简单来说就是这样举例:熟悉的支付操作有三个步骤操作1:用户发起支付操作2:扣除用户余额操作3:增加商家余额很明显:这三个操作要么都不执行、要么全部执行。不能出现用户扣钱了,商家没收到钱的情况。事务就是为了避免这

2020-05-25 13:10:56 753

原创 数据结构复习之红黑树B树B+树(HashMap底层红黑树,磁盘I/OB树、数据库索引B+树)

五、红黑树2-3查找树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为lgN,相比普通的二叉查找树保证了最坏情况下的时间复杂度。红黑树是2-3树思想的简单实现红黑树主要是对2-3树进行编码,红黑树背后的基本思想是(标准的二叉查找树)和一些额外的信息替换3-结点来表示2-3树。所以将树中的链接分为两种类型:红链接:将两个2-结点链接起来构成一个3-结点...

2020-04-24 16:18:11 853

原创 搞不清JUC类之间的关系?看看这张图吧

JUC类体系图

2022-03-27 10:40:13 558

原创 MySQL数据库——事务(ACID特性、事务并发问题、事务隔离级别、锁类型、MVCC机制)

事务MySql 数据库设计了事务隔离机制、锁机制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。事务的ACID特性事务有四大特征:简称ACID特征原子性(Atomicity):保证事务是一个不可分割的整体例:支付操作必须全部完成,不能只完成一部分一致性(Consistency):使数据库从一个一致性状态转移到另一个一致性状态例:支付操作要么支付成功,要么支付失败。如果只成功一部分那么就要回滚(rollback)至未支付的状态隔离性(Isolation):不同事务之间不能互

2021-06-22 20:52:51 423

原创 MySQL数据库——索引(B+树索引、Hash索引、聚簇索引、非聚簇索引、最左匹配规则)

一、MySQL索引索引:索引是帮助MySQL高效获取数据的排好序的数据结构1.1 MySQL索引类型从数据结构上区分为:B+树索引Hash索引B+树与B树B树特点:叶节点具有相同的深度,叶节点的指针为空所有索引元素不重复节点中的数据索引从左到右递增排列非叶节点存储索引和对应的数据内容B+树特点:非叶节点不存储数据内容、只存储索引信息叶子节点使用指针连接,提高区间访问的性能在MySQL中一个数据页的大小是默认是16k查看mysql文件页大小(16K):SHOW GLOB

2021-06-22 20:42:53 632

原创 MyBatis源码全体系流程图

MyBatis源码全体系流程图文章目录MyBatis源码全体系流程图MyBatis是一个半自动的ORM持久层框架主要使用步骤MyBatis在查询数据库时使用了二级缓存机制MyBatis的ConfigurationMyBatis几个重要接口和抽象类MyBatis源码全体系流程图MyBatis是一个半自动的ORM持久层框架主要使用步骤写mybatis-config.xml和mapper.xml写mapper.xml对应的mapper接口(可省略)获取SqlSessionFactory获取SqlS

2021-05-30 18:00:32 443 4

原创 通用方式解决根据二叉树遍历重建二叉树问题

通用方式解决根据二叉树遍历重建二叉树问题重做LeetCode题目的时候,发现两道题目非常类似,但之前却用了两种写法差别比较大的解法。感觉可以合并为同一种方式进行解决,于是找出了如下的通用方式解决这两个问题题目一:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]题目二:根据一棵树的中序遍历与后序遍历构造二叉树

2021-04-06 21:35:24 117

原创 WebSocket整合SpringBoot并传输JSON数据进行操作

WebSocket整合SpringBoot并传输JSON数据进行操作1、引入依赖<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.1.RELEASE</version> &l

2021-03-22 13:55:15 3103

原创 数据结构-实现一个SimpleBloomFilter布隆过滤器

SimpleBloomFilter布隆过滤器是一种判断元素是否存在的数据结构使用一系列的二进制位来判断元素是否存在特点:效率很高但有误判的可能误判:当插入一个元素的时候根据hash函数将该元素使用随机的几位二进制进行表示当查找时只有元素对应的所有二进制位都为1时代表查询成功该元素可能存在(原因:可能会存在某个元素虽然不在过滤器中,但是刚好hash得到的几位二进制都为1,即表示元素存在)如果一个元素哈希的二进制位有一位是0 就代表元素不存在总结:布隆过滤器是一个判断元素是否可能存在的数

2021-03-19 15:00:05 149

原创 数据结构-单调栈 leetcode 下一个更大的数

数据结构-单调栈 leetcode 下一个更大的数2由leetcode题目引入:刷题时看到这道题,第一反应使用循环数组暴力解题了,附上代码暴力解题代码public static int[] nextGreaterElements(int[] nums) { int[] res = new int[nums.length]; Arrays.fill(res,-1); int j; int index; for (int

2021-03-06 11:35:07 255

原创 第三届传智杯程序设计赛B组题解Java版

第三届传智杯程序设计赛B组题解Java版文章目录第三届传智杯程序设计赛B组题解Java版A - 课程报名B - 期末考试成绩C - 志愿者D - 终端E - 运气A - 课程报名import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt

2020-12-28 18:35:17 2709 4

原创 No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalanc

SpringCloud OpenFeign报错No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?问题原因:今天的疑惑报错,我大意了啊,没有闪。使用Spring Initializr初始化项目引入了openfeign,没有在意版本。直到运行项目进行远程调用时报错No Feign Client for loadBalancing defined.

2020-12-04 16:19:58 32785 27

原创 Java ---- HashMap扩容方法源码

HashMap扩容方法源码失踪人口回归!终于腾出手来发一篇水文,给大家乐呵乐呵。无发方强!共勉HashMap的扩容当原数组存放元素过多会导致Hash碰撞的概率增大,降低效率。所以需要适时的对数组进行扩容,以减少Hash碰撞,存储更多的元素。默认扩容阈值是原数组空间利用0.75之后进行扩容。 final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (old

2020-09-19 11:15:48 258

原创 HashMap源码剖析(上)HashMap数据结构、扩容方法、putVal方法。源码带注释~~~

HashMap源码剖析(上)对于每一个Java程序员来说,HashMap你一定不陌生,作为经典面试题,从HashMap上可以考察的知识点太多了。于是乎希望总结一份HashMap的源码级剖析,来检验自己对于Java知识体系的掌握程度本文主要内容:一、HashMap的数据结构二、HashMap的构造三、元素的添加四、HashMap的扩容五、HashMap的树化六、HashMap的链表化一、HashMap的数据结构大家或多或少都了解过HashMap在JDK1.7之前HashMap的结构是

2020-08-25 00:13:45 351

原创 SpringBoot-Vue交互JSON数据交互后台数据收到为null问题解决

SpringBoot-Vue交互JSON数据交互后台数据收到为null问题解决在做练习项目时遇到了一个让人郁闷的问题:后台使用@RequestBody竟然收不到JSON数据后台使用Swagger测试正常前台使用console.log()测试数据也可以获得于是乎就非常郁闷了,在掉了亿根头发之后终于发现了问题所在//post请求的参数信息,data为传送json数据格式data: { TeacherQuery} 没错这里能有什么问题呢?看浏览器中NetW

2020-08-19 21:40:08 1844

转载 计算机网络-码分多路复用技术(清晰至极!)

引子:CDMA是个很重要的通信概念,很多的大学教科书上都会提到它,甚至我们今天可能都在使用它。然而提到cdma,很少有资料提到它的思想是多么的有创意,教科书上关于cdma的章节都过于复杂,过于数学化,虽然也有一些简便的描述方式,但是却几乎没有资料揭示cdma是多么的简单,实际上它比其他很多的概念都要更简单。如果仅仅希望理解诸如cdma的概念而不得不去学习一大堆数学是很悲哀的事情! 如果最终你费了九牛二虎之力把数学推理过程搞明白了,你对数学本身的理解将超过你对cdma的理解,本来数学仅仅是为了帮忙理解cd

2020-08-12 21:15:34 3227 3

原创 JVM-垃圾收集器与内存分配策略(垃圾回收算法、垃圾回收器、内存分配与回收)

JVM垃圾收集器与内存分配策略文章目录JVM垃圾收集器与内存分配策略一、哪些内存需要回收1、引用计数法2、根搜索算法3、什么是引用4、对象的标记5、回收方法区二、垃圾回收算法1、标记清除算法2、复制算法3、标记整理算法4、分代收集算法三、垃圾收集器1、Serial收集器2、ParNew收集器3、Parallel Scavenge收集器4、Serial Old收集器5、Parallel Old收集器6、CMS收集器7、G1收集器四、内存分配和回收策略1、对象优先在Eden分配2、大对象直接进入老年代3、长期

2020-08-11 17:14:41 601 2

原创 数据结构-优先队列(最大优先队列、最小优先队列、索引优先队列)Java实现

数据结构-优先队列(最大优先队列、最小优先队列、索引优先队列)由于队列先进先出的特性,无法灵活按照优先级进行数据的获取。但是在应用中又有此类需求,例如计算机按照优先级进行的任务调度。所以需要对于队列进行改进,以满足此类需求使用堆的数据结构,可以很方便的获取当前等待队列中的最大值或最小值,所以对于优先队列可以采用堆的方式完成一、最大优先队列每次都获取队列中的最大值参考代码package priority;/** * 实现最大优先队列 * <T extend Comparable&g

2020-08-09 20:28:09 523

原创 数据结构复习之AVL树(AVL树的概念、左旋、右旋操作保证平衡)Java实现

数据结构复习之AVL树(AVL树的概念、左旋、右旋操作保证平衡)文章目录数据结构复习之AVL树(AVL树的概念、左旋、右旋操作保证平衡)一、平衡查找二叉树二、如何旋转三、参考代码一、平衡查找二叉树由于二叉查找树在某些极端情况下可能会形成一个链表,使其性能大大降低,故AVL树作为对其的一种改进AVL改进的方式,数据的插入仍然遵循二叉查找树的特性,但是需要在元素插入时候保证其左右子树的高度之差<=1,如果不满足,则需要通过旋转来保证树的平衡性二、如何旋转对于元素插入导致AVL树失衡的情况有四种

2020-08-07 17:49:05 616 5

原创 动态规划经典例题-国王的金矿问题

金矿问题问题概述:有一位国王拥有5座金矿,每座金矿的黄金储量不同,需要参与挖掘的工人人数也不同。例如有的金矿储量是500kg黄金,需 要5个工人来挖掘;有的金矿储量是200kg黄金,需要3个工人来挖 掘…… 如果参与挖矿的工人的总数是10。每座金矿要么全挖,要么不挖,不能 派出一半人挖取一半的金矿。要求用程序求出,要想得到尽可能多的黄 金,应该选择挖取哪几座金矿?什么是动态规划:动态规划:将复杂问题简化为规模较小的子问题,再从简单的子问题自底向上一步一步递推,最终得到复杂问题的最优解思路:利用

2020-07-06 17:52:00 1768

原创 老生常谈的大数加法

大数加法** 问题概述:**两个极大的数进行加法求和思路:根据列竖式方式解决问题,一位一位的满十进一package algorithm;import java.util.Arrays;/** * 大数加法 */public class BigNumAddition { public static void main(String[] args) { String num1 = "123"; String num2 = "98";

2020-07-05 15:59:04 2963

原创 删除k个数后得到尽可能小的数

今日小算法问题概述:删除K位数字后,使剩余数字最小例:2634 删除1位数后得到最小数为234删除2位数后得到最小数为23…思路:利用贪心算法思想获取局部最优解,最后得到整体最优解每删除1位数就获得当前的最小值,然后在当前最小值基础上继续进行删除package algorithm;import java.util.Arrays;/** * 删除K位数字后,使剩余数字最小 * 思路:删除高位数字、删除大数 * 从高位遍历数字寻找下一位小于本位的数字删除 * 这样可以使下一位

2020-06-18 12:37:21 385

原创 给定一个数寻找全排列的下一个数

今日小算法寻找全排列的下一个数问题概述:给定一个数,要求出该数全排列后大于该数的最小的数思路:一个数最大为所有数字逆序一个数最小为所有数字顺序利用这个规则,将整个数分为逆序区和非逆序区,进行数据位置交换,最后将逆序区有序即可,详细参考代码package algorithm;import java.util.Arrays;/** * 全排列问题: * 给定一个数,要求出该数全排列后大于该数的最小的数 * 例:123 运算结果是132 * 主要分三步: * 1、寻找逆序区前一个

2020-06-17 23:46:08 234

原创 使用栈完成队列功能

今日小算法问题概述:使用栈完成队列先进先出的功能思路:使用两个栈,入栈使用A栈,出栈时将A栈中所有元素全部放入B栈中之后再从B栈中取元素就OKpackage algorithm;public class StackQueue { MyStack stackA = new MyStack(); MyStack stackB = new MyStack(); public static void main(String[] args) { StackQueu

2020-06-16 20:56:00 128

原创 最大相邻差

今日小算法最大相邻差问题概述:最大相邻差求一无序数组排序后两个数相邻的最大距离例:原数组:1 3 2 4 7 6 2排序后:1 2 2 3 4 6 7相邻差:1 0 1 1 2 1最大相邻差:2思路:利用计数排序或桶排序的思路计数排序:当两个下标之间的0的个数最多时,这两个数的差值就是最大相邻差如例:计数排序后结果为:可以发现a[4]与a[6]之间0最多,最大相邻差就为6-4=2桶排序:桶排序则解决了当元素差距较大但数量却不多时计数排序创建数组过多的问题例:原数组:1

2020-06-15 18:36:19 341

原创 排序方法之计数排序

今日小算法计数排序问题概述:利用数组下标进行元素排序思路:创建一个辅助数组,利用下标自然有序的特性进行排序最好的情况下时间复杂度可以是线性的package SortTest;/** * 计数排序 * 需要提前知道元素的大致范围,创建一个新的辅助数组大小恰好可以为原数组max+1 * 之后按照下标向辅助数组中放元素 * 最后遍历辅助数组输出(还需遍历每位直至其下标对应的元素为0)即可 */public class CountSortTest { public static

2020-06-13 14:31:43 175

原创 一行代码解决2的整数次幂

每日一道算法题一行代码解决2的整数次幂问题概述:给定一个数number,确定该数是否为2的整数次幂问题本质:计算机存储二进制格式、&运算的运用思路:2^1=> 102^2=> 1002^3=> 1000…2^n=> 100…000那么2^1-1=> 12^2-1=> 11…2^n=> 111…111package algorithm;public class Pow { public static voi

2020-06-11 18:24:08 614

原创 如何最优求解最大公约数

每日一道算法题最大公约数问题概述:求两数的最大公约数,要求时间复杂度尽可能小问题本质:经典算法使用、灵活位运算思路:利用辗转相除法利用更相减损术针对两个方法缺点进行改进融合使用位运算提高计算机处理性能package algorithm;/** * 最大公约数算法 * 1、辗转相除法 * 2、更相减损术 * 3、二者结合 */public class CommonDivisor { public static void main(String[] args)

2020-06-10 16:04:03 362

原创 获取栈中最小值的最小栈问题

每日一道算法题最小栈问题问题概述:获取一个栈中最小的元素问题本质:栈的灵活运用思路:对于一个栈,采用标记位的方法记录栈中的最小值。如果新入栈的元素小于当前栈中保存的最小值,就将栈的最小值替换为新入栈的元素。注意需要考虑出栈的情况,如果当前最小值出栈,那么当前最小值的前一个最小值应该为当前栈的最小值。故:需要将栈的最小值的标记位修改为一个辅助栈,存储栈中的所有最小值。例图分析:package algorithm;import java.util.Iterator;public cl

2020-06-09 20:52:55 481 1

原创 链表成环问题

每日一道算法题(Day01,无特殊情况每日打卡)链表成环问题问题概述:判断一个单链表是否有环问题本质:追及问题package algorithm;import java.util.Iterator;public class LinkList<T> implements Iterable<T>{ //记录链表头节点 private Node head; //记录链表长度 private int len; //创建一个内部类,存

2020-06-08 22:48:34 612

原创 Java之Class类文件结构(学了这么久Java,你了解Class字节码文件吗?)

Class类文件结构由于本部分内容过于繁琐与细节,所以本文内容较多,且有些细节仍未照顾到,所以最后以一个反编译文件为例进行类文件结构分析。如果大家有问题可以评论,一起学习一起进步。文章目录Class类文件结构一、Class文件结构魔数与Class文件的版本常量池访问标志类索引、父类索引与接口索引集合字段表集合方法表集合属性表集合一、Class文件结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符。如果有效文件不是8字节

2020-06-04 09:23:19 507

原创 JAVA你真的了解String类型吗(String类型经典内存位置问题深入解读)

你真的了解String类型吗(String类型经典内存位置问题深入解读)本文讲解一下String的基本情况,对于对应API方法不做涉及,本文所指JAVA环境为JAVA8主要讲解内容:public class StringTest { public static void main(String[] args) { String hello = "Hello"; String world = "World"; String hello_world1

2020-05-31 18:39:16 222

原创 SpringCloud-Nacos集群搭建CentOS7

Nacos单机集群配置SPringCloudAlibaba之Nacos单机集群配置nacos默认带有derby嵌入式数据库进行集群配置时各自为政所以需要配置自己的数据库目前官方只支持mysql数据库(要求数据库版本为5.6.5+)单机集群配置步骤:在nacos/conf目录下找到nacos-mysql.sql文件在mysql创建数据库,导入sql文件打开conf目录下application.properties文件在其中增加mysql数据源配置spring.datas

2020-05-18 22:43:03 403

空空如也

空空如也

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

TA关注的人

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