java
一念之间•
活着
展开
-
MVCC是什么?
MVCC,Multi-Version Concurrency Control,多版本并发控制 数据库有四种隔离级别,通过MVCC在每种查询下的情况也是不一样的。 在每次insert 、update 、delete都会生成一个事物id,事物id 是递增的。聚簇索引记录中都包含两个必要字段 trx_id 、roll_pointer ,每次修改都会生成undo日志(insert没有,因为没历史)。 这里有几个主要就是概念就是版本链、readview。 版本链: 对于使用`InnoDB`存储引擎的..原创 2020-10-15 13:38:31 · 295 阅读 · 0 评论 -
同步机制与内存屏障
获取屏障(LoadLoad、LoadStore的组合): 确保屏障之前的读操作优先于屏障之后的任何读、写操作被提交。 释放屏障(LoadStore、StoreStore的组合): 确保屏障之前的读、写操作优先于屏障之后的任何写操作被提交。 重点: volatile对可见性的保障是通过写线程和读线程配对使用存储屏障和加载屏障实现的 synchronized的实现方式与volatile的实现类似。虚拟机在monitorenter指令之后临界区之前插入获取屏障,在monitorexit字节码指令之前临原创 2020-10-15 13:36:43 · 312 阅读 · 0 评论 -
并发编程之创建线程的几种方式
创建线程的四种方式 继承 Thread 类; 实现 Runnable 接口; 实现 Callable 接口; 使用 Executors 工具类创建线程池 1、继承 Thread 类 定义一个Thread类的子类,重写run方法,将相关逻辑实现,run()方法就是线程要执行的业务逻辑方法 创建自定义的线程子类对象 调用子类实例的star()方法来启动线程 2、实现 Runnable 接口 1、实现Runnable接口,并重写run()方法 2、创建类的实例作为target创...原创 2020-07-09 16:20:25 · 245 阅读 · 0 评论 -
ConcurrentHashMap的实现原理是什么?
JDK1.7 首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。 在JDK1.7中,ConcurrentHashMap采用Segment + HashEntry的方式进行实现,结构如下: 一个 ConcurrentHashMap 里包含一个 Segment 数组。Segment 的结构和HashMap类似,是一种数组和链表结构,一个 Segment 包含一个 HashEntry 数组,每个 HashEntry 是一个链表结构的原创 2020-07-09 16:01:48 · 485 阅读 · 0 评论 -
HashMap之put原理分析。
JDK1.7 VS JDK1.8 比较 JDK1.8主要解决或优化了一下问题: resize 扩容优化 引入了红黑树,目的是避免单条链表过长而影响查询效率。 解决了多线程死循环问题,但仍是非线程安全的,多线程时可能会造成数据丢失问题。 首先看一下源码: 底层是调用一个putVal的方法: public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } 再看一下原创 2020-07-08 17:17:51 · 953 阅读 · 0 评论 -
HashMap之get原理分析。
1、首先看源码 public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; } 我们可以看到的是HashMap底层是调用一个getNode的方法。用的三目运算符。如果返回的值等于null,就直接返回null,否则就返回value值。接下来我们看getNode方法。 以下源码: final No.原创 2020-07-07 17:38:09 · 2251 阅读 · 0 评论 -
面试日记2020-06-10
北京人股科技有限公司 1、JDK1.8的新特性。 2、Map和set的区别。 3、HsahMap的底层原理。 4、简单工厂和抽象工厂的区别。 5、Mysql索引的实现。 6、Redis的持久化机制。 7、创建线程池有哪几种方式。 8、线程的几个状态。 ...原创 2020-06-10 12:29:25 · 252 阅读 · 0 评论 -
Java的内存区域详解。
1、运行时数据区 Java虚拟机在执行java程序的过程中将它所管理的内存划分为以下几个运行时数据区域: 1、程序计数器(Program Counter Register) 2、虚拟机栈(VM Stack) 3、本地方法栈(Native Method Stack) 4、堆(Heap) 5、方法区(Method Area) 线程私有区域(程序计数器、虚拟机栈、本地方法栈),线程共享区域...原创 2020-02-16 17:36:53 · 808 阅读 · 0 评论 -
Java并发编程基础(1)—线程
1、线程简介 1.1 什么是线程? 1)、现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process) 2)、在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高...原创 2020-02-16 17:02:03 · 255 阅读 · 0 评论 -
synchronized的实现原理与应用
1、synchronized 1.1、synchronized的实现synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性 1.2、synchronized实现同步的基础: 1、对于普通同步方法,锁是当前实例对象。 2、对于静态同步方法,锁是当前类的Class对象。 3、对于同步方法块,锁是Sy...原创 2020-02-14 16:58:23 · 429 阅读 · 0 评论 -
Java死锁详解
1、死锁 锁是个非常有用的工具,运用场景非常多,因为它使用起来非常简单,而且易于理解。但同时它也会带来一些困扰,那就是可能会引起死锁,一旦产生死锁,就会造成系统功能不可用。如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的。 让我们先来看一段代码,这段代码会引起死锁,使线程t1和线程t2互相等待对方释放锁。 public class De...原创 2020-02-14 16:10:02 · 1565 阅读 · 0 评论 -
Java内存模型详解
1、什么是Java内存模型? Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。 Java内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到内存和从内存中取出变量值这样的底层细节,此处的变量不包括局部变量和方...原创 2020-02-13 15:45:57 · 257 阅读 · 0 评论 -
Java技术栈最全电子书集合
地址:https://pan.baidu.com/s/1QuG_00_AJbHsnQU-dLMBUQ 提取码 :b7l9原创 2019-12-02 13:47:01 · 1219 阅读 · 2 评论 -
HashMap的底层原理及源码分析
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,H...转载 2019-11-20 14:35:30 · 206 阅读 · 0 评论 -
ArrayList的底层原理及源码分析
一、ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包...转载 2019-11-20 14:32:16 · 344 阅读 · 0 评论 -
springboot上传文件或者图片存在后台
1、创建对象FileProperties @ConfigurationProperties(prefix = "file") public class FileProperties { private String uploadDir; public String getUploadDir() { return uploadDir; } pub...原创 2019-10-25 15:54:03 · 1464 阅读 · 1 评论 -
springboot项目每添加一条数据自动生成一个二维码
1、导入pom.xml依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</versio...原创 2019-10-23 15:42:42 · 1779 阅读 · 1 评论