自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AQS ReentrantLock 原理 源码详解

文章目录一 概述1.1 设计思想1.2 如何使用一 概述AQS(AbstractQueuedSynchronizer) ,类如其名,抽象的队列同步器,定义了一套多线程访问共享资源的同步框架,许多类实现都依赖于它,如Semaphore,ReentrangLock底层都是使用了这个框架。使用AQS能够简单高效的构造出大量的同步器。AQS具备一下特性,阻塞等待队列,共享/独占,公平/非公平,可重入,允许中断。1.1 设计思想AQS维护了一个volatile int state表示共享变量,和一个FIFO线

2021-06-16 23:43:07 158 2

原创 AtomicLong LongAdder 源码解析 Doug Lea太强了!!!

文章目录一 AtomicLong原理二 LongAdder原理三LongAdder源码一 AtomicLong原理AtomicLong通过cas+自旋更新AtomicLong中的value值,进而保证value的原子性,N个线程同时改变value的值,只能有一个线程更新成功,其他线程这次的cas是失败的由于一次只能有一个线程修改成功,其他线程得要自旋,一直到修改失败,在并发量比较高的情况下,可能会导致这些线程占用长时间修改值失败,导致cas次数过多。二 LongAdder原理在高并发场景下Lon

2021-06-08 11:09:17 472 4

原创 FutureTask源码剖析

一类介绍FutureTask类实现了Runnable和Future类接口,定义一个可以被取消的异步计算任务,提供了开始和取消任务接口,当计算完成可以查询执行结果,如果任务没有完成,get接口会阻塞获取结果线程,二 关键属性任务状态 private volatile int state; // 初始化 当前任务没执行 private static final int NEW = 0; //当前任务正在结束,尚未完全结束,一种临界状态

2021-06-01 13:41:26 179

原创 HashMap源码解析

一 HashMap底层数据结构HashMap底层数据结构为散列表,结合了数组和链表+红黑树 的优势,Node数据结构 hash值为key的hash值,二 HashMap的主要属性//默认Hash表的大小 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16 //Hash表最大大小 static final int MAXIMUM_CAPACITY = 1 << 30; //默认加载因子 st

2021-05-31 23:07:58 755 3

原创 跳表

跳表,在有序链表的基础上增加了"跳跃"的功能,使得有序链表的的搜索,删除,添加的平均时间复杂度是O(logn)Redis中的SortedSet,LevelDB中的MemTable都用到了跳表Redis,LevelDB都是著名的Key-Value数据库跳表的搜索从顶层链表的首元素开始,从左往右搜索,直到找到一个大于或等于目标的元素,或者到达当前链表的尾部如果该元素等于目标元素,则表明该元素已被找到如果改元素大于目标元素或已经到达链表的尾部,则退回当前层的前一个元素,然后转入下..

2021-04-03 00:29:56 135

原创 常用排序算法

插入排序,

2021-03-23 11:09:43 1137 2

原创 Java 多线程面试题

文章目录1 什么是进程?什么是线程?进程和线程的区别(从java语言的角度来讲解)?2 说数并发和并行的区别?3 为什么要使用多线程呢?4 使用多线程能带来什么问题?临界资源?5 说说线程的生命周期?6 线程状态阻塞和等待状态的区别?7 JMM的作用是什么?8 as-if -serial是什么?9 heppens-before是什么?10 什么是指令重排序?11 as-if-serial 和happens-before有什么区别?12 程序计数器为什么是线程私有的?13 虚拟机栈为什么是线程私有的?14 用

2021-03-18 00:14:19 121

原创 javaThread类 API详解

文章目录一 线程状态转换图二 线程切换三 Thread 类API一 线程状态转换图Java中线程从创建到最终消失,要经历以下几个状态, NEW ,线程还没启动 RUNNABLE 线程运行在jvm中,但是在等待cpu BLOCKED 线程在等待monitor lock WAITING, 一个线程等待另一个线程的特定操作结果,一般是由于调用了如下方法 wait(),join(),park()方法,没有time 一个线程在这个状态由于等待

2021-03-04 22:15:09 178 2

原创 explain工具 索引优化介绍

explain中的列CREATE TABLE `actor` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4CREATE TABLE `film` ( `id` int(11) NOT NULL, `name` varc

2021-01-25 11:08:38 195 1

原创 MVCC 多版本并发控制机制详解,undo log版本链和ReadView是如何避免并发问题

文章目录一 undo log版本链是什么东西?二 通过undo log多版本链条实现的ReadView机制三 Read Committed隔离级别是如何基于ReadView机制实现的四 ReadView是如何实现RR隔离级别的五 总结一 undo log版本链是什么东西?数据库的隔离级别,以及脏读,幻读,不可重复读,为什么mysql的默认隔离级别RR,可以让脏读,不可重复读,幻读都不会发生呢?     这就是由经典的MVCC多版本并发控制机制做到的,讲解这个M

2021-01-20 11:56:59 2933 4

原创 undo log日志长什么样

      对于一个事务,如果有2条个增删改操作,如果目前已经执行了1个操作,修改了一些数据,还有1条逻辑没有执行,此时事务要回滚怎么办?Mysql中有一个回滚日志 undo log日志。      如果你在执行了一个insert语句,那么此时在Undo log日志中,对这个操作记录的回滚日志就必须有一个主键和一个对应的delete操作。      那么比如说你要执行的是delete操作,那么起码你要

2021-01-19 23:10:55 1225

原创 jvisualvm安装Visual GC插件

visualvm访问地址:https://visualvm.github.io/index.html复制url打开jvisualvm,工具->插件->设置->编辑,复制刚刚的url,如果没有安装visual gc,安装visual gc重启即可

2021-01-13 11:00:30 70

原创 JVM类加载机制 双亲委派

文章目录一 类加载全过程二 类加载器和双亲委派机制三 打破双亲委派机制一 类加载全过程java命令执行代码的大体流程如下:其中loadClass的类加载过程由如下几步加载 >> 验证 >>准备 >>解析 >>初始化 >>使用 >>卸载加载:在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Cla

2021-01-13 10:43:18 419 1

原创 操作系统 信号量 管程

临界区互斥:同一时间临界区中最多一个线程前进:如果一个进程想进入临界区,那么它最终会成功有限等待:如果一个线程i处于入口区,那么在i的请求被接受之前,其他线程进入临界区的时间是有限制的禁用硬件中断进入和离开临界区的代码没有中断,没有上下文切换,因此没有并发.进入临界区, 禁用中断效率过低,不适合在多cpu的场景基于软件的解决方法更高级的抽象信号量管程信号量实现信号量管程...

2020-12-31 15:33:19 141

原创 操作系统 进程 程序 线程

进程,线程,PCB,程序

2020-12-31 12:08:04 86

原创 ERROR 1010 (HY000): Error dropping database (can‘t rmdir ‘./test_db‘, errno: 39)

多半是数据库数据文件损坏解决办法删除文件实体# 查看数据文件存储在哪里,我这里是/var/lib/mysql/SELECT @@datadir ;cd /var/lib/mysql/test_dbrm -rf *

2020-12-09 18:47:14 287

原创 java cannot execute binary file: Exec format error

在linux系统中配置中配置java环境,出现错误cannot execute binary file: Exec format error是由于装了操作系统位数是32位,jdk是64位数查看操作系统的位数uname -m输出显示的是x86_64,就说明系统是64位的,输出i686说明是32位的。...

2020-12-08 18:23:22 4219 1

原创 图解传输层 TCP UDP

传输层功能,传输层协议UDP,TCP,TCP可靠传输的实现,TCP的流量控制,TCP的拥塞控制,TCP的3次握手,4次挥手

2020-12-03 16:44:26 666

原创 SpringBoot整合邮件

发送纯文本的简单邮件发送html格式的文件发送带附件的邮件发送嵌入静态资源(一般是图片)的邮件

2020-11-25 00:56:20 700

原创 计算机网络概述

文章目录计算机网络在信息时代中的作用因特网的概述因特网的组成计算机网络的性能计算机网络体系结构计算机网络在信息时代中的作用连通性 彼此联通,交换信息共享 信息共享,软硬件共享(如打印机)因特网的概述网络:很多计算机连接在一起,一般是通过交换机,集线器互联网:许多网络连接咋一起,通过路由器,路由器有广域网接口因特网:全球最大的一个互联网多层次的ISP结构的互联网因特网的组成主机之间的通信方式客户服务器 方式对等连接方式(P2P)数据交换方式电路交换(Circuit S

2020-11-22 01:41:52 1002 1

原创 尾递归和递归总结

尾递归和递归总结

2020-11-09 11:03:58 220

原创 递归和尾递归

@[ToC]递归递归就是一个函数直接或间接的调用自己.一般来说,递归需要有边界条件,递归前进段和递归返回段.当边界条件不满足的时,递归前进,当边界条件满足的时候,递归返回.递归就是在过程或者函数里调用自身.在使用递归策略时.必须有一个明确的递归结束条件,称为递归出口.递归一般用来解决三类问题:数据的定义是按照递归定义的(Fibonacci函数,n的阶乘)问题解法按递归实现(回溯...

2020-11-09 10:30:41 15

原创 进程和线程的区别

进程是资源分配的最小单位,线程是CPU调度的最小单位进程,在一定的环境中,把静态的程序代码运行起来,通过使用不同的资源,来完成一定的任务.一个系统中,有很多进程,他们都会使用内存.为了防止确定的内存不被别人使用,每个进程索所能访问的内存都是圈好的.一人一份,谁也不能干扰谁.还有内存的分页,进程需要管理它的资源.其中,线程作为进程的一部分,扮演好的角色就是利用中央处理器去运行代码.这其中牵制到的最重要的资源就是中央处理器和其中的寄存器,和线程的栈,而不是内存管理资源....

2020-11-08 16:22:44 59

原创 二,多叉树的前,中,后序递归,迭代,层次遍历方法

二,多叉树的前,中,后序递归,迭代,层次遍历方法 BFS,DFS

2020-10-27 23:08:05 1057

原创 发送请求,SpringMVC的运行流程

接收到请求,前端控制器(DispatcherServlet)收到请求,调用doDispatch进行处理根据HandlerMapping中保存的请求映射信息找到,处理当前请求的,处理器执行链,包括所配置的拦截器根据当前处理器找到HandlerAdapter拦截器的preHandle先执行适配器调用目标方法,并返回ModelAndView首先初始化model通过参数解析器解析目标方法的参数拦截器的postHandle方法执行通过目标方法的返回值得到的modelan..

2020-10-21 18:30:45 144

原创 @AutoWired和@Resource的区别

@Resource注解, 可扩展性强,如果切换成另外一个容器框架,@Resource还是可以使用,这点要比AutoWire强大@AutoWiredAutoWired注解,先按照类型查找。如果找到了一个匹配类型的就注入,如果没有找到就报错如果找到两个及以上,就按照变量值经行查找,如果找到了,就注入,没有找到就报错,这个时候,可以配合使用@ Qualifier进行注入。现在有如下的类接口Car:package cn;import org.springframework.ste.

2020-10-11 20:47:32 100

原创 java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionEx JACKSON报错

java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionEx

2020-09-28 10:00:16 163

原创 Mysql事务和并发问题解决办法MVCC

数据库事务,ACID ,INNODB 存储引擎,MVCC

2020-09-24 21:23:04 1442 1

原创 数据库 delete truncate和drop的区别

数据库 delete truncate和drop的区别

2020-09-23 22:50:16 90

原创 redis

安装redis,并配置服务开机自启动redis数据持久化java使用redisredis数据连接池

2020-09-02 18:16:38 151 1

原创 linux 安装,卸载mysql 5.7步骤 修改密码,设置远程连接

linux 安装,卸载mysql 5.7步骤 修改密码,设置远程连接

2020-08-18 18:28:53 157

原创 maven安装,配置,依赖冲突管理,继承和聚合

Maven的安装maven的两个经典作用Maven的依赖管理Maven仓库分类项目的一键构建idea的maven配置

2020-07-28 22:12:04 1232

原创 Java集合,list,set,map,iterator

文章目录数组与集合集合继承树iterator接口Collection子接口之一:list接口Collection子接口之二:Set接口Map接口数组与集合集合与数组存储数据概述集合,数组都是多个数据经行存储操作的结构,简称容器说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)数组存储的特点:一旦初始化后,其长度也就确定了数组一旦定义好,其元素的类型也就确定了。数组存储的弊端一旦初始化以后,其长度就不可以修改。数组中提供的方法非常的

2020-05-26 22:14:25 118

原创 Java Map接口,HashMap,LinkedhashMap,TreeMap解析,HashTable

文章目录Map接口Map接口map接口继承树Map中的key:无序的、不可重复的,使用Set存储所的key —> key所在的类要重写equals()和hashCode() (以HashMap为例)Map中的value:无序的、可重复的,使用Collection存储所的value -->value所在的类要重写equals()一个键值对:key-value构成了一个Entry对象。Map中的entry:无序的、不可重复的,使用Set存储所的entry...

2020-05-26 17:05:16 148

原创 Java list接口,ArrayList,LinkedList,Vector

文章目录List接口ArrayListLinkedListVector面试题List接口存储的数据特点:存储序的、可重复的数据。常用方法:(记住)增:add(Object obj)删:remove(int index) / remove(Object obj)改:set(int index, Object ele)查:get(int index)插:add(int index, Object ele)长度:size()遍历:① Iterator迭代器方式② 增强for循环③ 普

2020-05-18 00:13:05 156

原创 java集合iterator接口

Iterator接口和foreach循环

2020-05-17 23:24:26 120

原创 单例模式的写法,和DCL

设计模式是在大量的实践中总结和理论化之后优的代码结构、编程风格、以及解决问题的思考方式。单例模式要解决的问题:所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。具体代码的实现:饿汉式1:class Bank{ //1.私化类的构造器 private Bank(){ } //2.内部创建类的对象 //4.要求此对象也必须...

2020-05-05 11:30:59 231

原创 面向对象 类和类之间的关系说明

依赖关系 关联 聚合 组合 继承

2020-04-08 00:09:31 337

原创 java中 基本类型,包装类与String类之间的转换总结

实际开发中不用记这么多基本数据类型/包装类数据类型可以自动装拆箱所以当成一种类型基本数据类型/包装类数据类型 到String 类型用String s=10+"";int i=Integer.parseInt(s)即可...

2020-03-25 14:55:02 562

原创 this和super的区别

区别点thissuper属性先直接找本类中的属性,如没有则在父类中查找直接访问父类中的属性方法先在本类中查找方法,如没有则到父类中找直接访问父类中的方法构造器调用本类中重写的构造器,且必须放在构造器的首行调用父类构造器,必须放在子类构造器的首行子类中所有的构造器,都会默认访问父类中的空参数的构造器当父类中没有空参数的构造器时,子类的构造器必须...

2020-03-25 11:14:37 77

空空如也

空空如也

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

TA关注的人

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