自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杨宇java的博客

学习java之路

  • 博客(50)
  • 资源 (2)
  • 收藏
  • 关注

原创 concurrent包的实现(并发编程的艺术)

分析concurrent包的源代码实现,会发现一个通用化的实现模式:首先,声明共享变量为volatile。然后,使用CAS的原子条件更新来实现线程之间的同步。同时,配合以volatile的读/写和CAS所具有的volatile读和写的内存语义来实现线程之间的通信。AQS,非阻塞数据结构和原子变量类(java.util.concurrent.atomic包中的类),这些concurrent 包中的基础类都是使用这种模式来实现的而concurrent包中的高层类又是依赖于这些基础类来实现的.

2020-11-19 15:59:38 169

原创 AQS

模板方法模式:模板:package com.atguigu.springcloud.template;/** * 抽象模板类Cook * 步骤一:cookOne * 步骤二:cookTwo * 步骤三:cookThree * 提供一个标准模板,执行顺序分别为一,二,三 */public abstract class Cook { //抽象类的抽象方法没有方法体,类似于接口方法 public abstract void cookOne(); public

2020-11-19 15:36:17 384

原创 volatile的内存语义

一:保证内存的可见性二:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性三:禁止指令的重排序解析:一:对于使用volatile关键字的共享变量,会强制将修改后的值立即写入主内存,并会使得其他处理器里面的缓存行失效(嗅探机制,缓存一致性协议),所以其他线程会重新从主内存中获取对应的新值,所以可见性是通过主内存来实现的。二:可以理解volatile具有一定的原子性,但不是全部:private volatile boolean .

2020-10-29 16:49:26 183

原创 Java内存模型(JMM)基础

本地内存是一个便于理解的抽象概念,物理上涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化重排序:三种重排序会导致内存可见性问题:1属于编译器重排序,2和3属于处理器重排序。对于编译器,JMM的编译器重排序规则会禁止特定类型的编译器重排序(不是所有的编译器重排序都要禁止)。对于处理器重排序,JMM的处理器重排序规则会要 求Java编译器在生成指令序列时,插入特定类型的内存屏障(Memory Barriers,Intel称之为 Memory Fence)指令,通过内存屏障指令来..

2020-10-28 15:38:40 120

原创 Java多线程保证原子操作原理

缓存行:缓存的最小单元处理器保证原子操作的俩种方式:缓存锁和总线锁处理器保证从系统内存中读取或者写 入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节 的内存地址。但是复杂的内存操作处理器是不能自动保证其原子性的,比如跨总线宽度、 跨多个缓存行和跨页表的访问总线锁:处理器提供LOCK信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该 处理器可以独占共享内存缓存锁(不是所有的处理器都支持):内存区域如果被缓存在处理器的缓存.

2020-10-27 14:31:23 356

原创 Synchronized关键字

啊手动阀啊

2020-10-26 11:35:54 75

原创 volatile底层实现(Java并发编程的艺术)

内存屏障:是CPU的一组指令,实现对内存操作的顺序限制有多种类型,读屏障,写屏障。。volatile多线程数据之间的可见性的底层实现(强制刷新了缓存)缓冲行:

2020-10-21 15:15:50 67

原创 Stream用法

//stream:对数据源进行一系列流水线式的操作,产生新数据,所以数据源不会改变//创建stream4种方式//1.通过Collection系列集合提供的stream()或parallelStream()//stream()是单线程的,而parallelStream()是多线程并行处理List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);Stream<Integer> stream1 = list.stream();st.

2020-10-20 16:54:19 623

原创 Lambda表达式写法

eg:对一个数进行运算:

2020-10-14 14:16:03 274

原创 获取当前年所有月份的集合,获取结果为:[2020-01,2020-02,2020-03......2020-11,2020-12]

2020-10-13 16:10:38 446 1

原创 Optional写法

recipe不为null时,threeMap添加数据:

2020-10-13 14:39:10 176

原创 Java虚拟机--- 强,软,弱,虚引用(读深入理解Java虚拟机)

强引用(Strongly Re-ference):类似于new Object(),不回收强引用对象软引用(Soft Reference):还有用,但非必须的对象。只被软引用关联着的对象。内存溢出异常前,会把这些对象进行第二次回收,如果这次回收还没有足够的内存, 才会抛出内存溢出异常。引用队列SoftReference类来实现弱引用(Weak Reference):当垃圾收集器开始工作,无论当前内存是否足够,都会回收掉被弱引用关联的对象。引用队列WeakReference类来实现弱引用虚引用(Ph

2020-09-22 14:50:33 111

原创 Java虚拟机--- 判断对象是否已死的算法(读深入理解Java虚拟机)

很漂亮的一句话:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进来,墙里面的人想出去。引用技数算法:Java虚拟机不是此方法对象中添加一个引用计数器,每当有地方引用它时,计数器加一,引用失效时,减一。为0时则为不可能再使用。很难解决循环引用问题:A引用B,B引用A可达性分析算法(Reachability Analysis):是通过 一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的..

2020-09-18 15:35:51 86

原创 Java虚拟机---对象创建过程(读深入理解Java虚拟机)

符号引用:.class文件里面的符号,告知jvm对应的类需要哪些调用方法,继承哪些类等信息直接引用:类似于指针,直接指向对应类的调用方法,继承类等信息符号引用转换为直接引用:通过符号引用 ,再加上符号引用的地址,转换成直接引用对象的创建:(1)java虚拟机遇到字节码new指令后,先检查此指令的参数是否能在常量池中定位到类的符号引用,并检查符号引用对应的类是已经被加载,解析和初始化,没有的话先加载这个。(2)类加载完成后,为新生对象分配内存(大小在加载完成后就确定了)(3)分配.

2020-09-16 17:42:57 96

原创 Java虚拟机---内存区域(读深入理解Java虚拟机)

程序计数器:当前线程所执行的字节码的行号指示器(标记 .class 字节码文件执行到哪行) Java多线程是靠线程的来回切换来实现(针对单个内核),切换后能回到正确位置,所以需要计数器 当前线程执行的是Java方法,则计数器记录的是对应的虚拟机字节码指令地址,若执行本地(Native)方法,null 唯一一个没有OutOfMemoryError的情况(根据上一条可看出...

2020-09-15 15:27:39 86

原创 InnoDB 事务(读MySQL技术内幕-InnoDB存储引擎)

ACID:原子性(Atomicity):整个数据库事务是不可分割的工作单位,事务中所有操作都成功,整个事务才算成功一致性(Consistency):从一种一致状态到下一种一致状态隔离性(Isolation):事务提交前对其他事务都不可见持久性(Durability):事务只要提交,就是永久性的事务的分类(类似于事务的传播属性):扁平事务(Flat Transactions)带有保存点的扁平事务(Flat Transactionswith Savepoints)链事务(C.

2020-09-08 23:49:38 125

原创 InnoDB 锁问题(读MySQL技术内幕-InnoDB存储引擎)

脏读: 一个事务读取到另一个事务未提交的数据(READ-UNCOMMITTED下会发生)不可重复读和幻读(READ-COMMITTED下会发生): 不可重复读:同一个事务俩次读取同一数据的内容不同(因为另一个事务删除或修改了数据) 幻读:同一个事务俩次读取的数据记录数目不同(因为另一个事务添加了新数据) 默认隔离级别(REPEATETABLE-READ)可以解决不可重复读,不一定能解决幻读: https://blog.csdn...

2020-09-08 01:43:04 91

原创 InnoDB 行锁的三种算法及Phantom Problem(读MySQL技术内幕-InnoDB存储引擎)

行锁三种算法: Record Lock:单个行记录上的锁 Gap Lock:间隙锁,锁定一个范围,但不会针对里面的每条记录上锁 Next-Key Lock:Gap Lock + Record Lock 锁定一个范围,且对记录本身也上锁 Record Lock:锁定的是索引,没有索引的话,锁定的是隐式的主键。 Next-Key Lock:此算法的锁定技术称为:Next-Key Locking 对于行...

2020-09-07 16:42:14 155

原创 InnoDB 锁及锁的类型(读MySQL技术内幕-InnoDB存储引擎)

锁的类型:共享锁(S Lock):允许事务读一行数据排他锁(X Lock):允许事务删除或更新一行数据意向共享锁(IS Lock):事务想要获取一张表中某几行的共享锁意向排他锁(IX Lock):事务想要获取一张表中某几行的排他锁事务T1已经获取了R记录的共享锁,事务T2任然能获取R记录的共享锁,即为兼容,反之不兼容从表格中看出:排他锁均不兼容,意向排他锁和共享锁不兼容,其他均兼容mysql中information_schema和performance_schema...

2020-09-03 15:38:04 94

原创 Hash表,HashCode,Hash函数等。。。

直接寻址表:直接寻址是汇编里面的概念:即直接给出指定数据在内存中的地址上图中的U指的是定义了一个关键字的全域(即所有的关键字都在里面) k为实际的关键字(实际使用到的)T为一个数组(T即为一个直接寻址表),其中每个位置都对应U里面的一个关键字(和直接寻址的概念相同)问题: U很大时,保存对应的T不合实际 实际使用的k相对于U很小时,则分配给T的空间大部分都浪费Hash表:由一个直接寻址表和hash函数组成常用的Hash函数: 除法散...

2020-09-01 16:26:29 205

原创 InnoDB 覆盖索引(读MySQL技术内幕-InnoDB存储引擎)

从辅助索引中就可以得到查询的记录,而不需要查询聚集索引中的记录辅助索引不包含整行的信息,所以其大小远远小于聚集索引,因此可以减少大量的IO操作(不一定是单表查询)。辅助索引其叶子节点存放信息:primary key1 , primary key2 , ..key1 , key2 , ...下列语句都仅仅使用一次辅助索引即可完成查询:辅助索引在统计上的优点: select count(*) from table上面的sql innoDB不会用到聚集索引来统计,因为...

2020-09-01 10:34:31 102

原创 InnoDB 联合索引(读MySQL技术内幕-InnoDB存储引擎)

联合索引也是一颗B+树,只是键值的数量不是1现创建(a,b)联合索引,则其索引树结构:通过叶子节点读出所有数据,即为:(1,1)(1,2)(2,1)(2,4)(3,1)(3,2)则a的值是有顺序的:1,1,2,2,3,3b的值是无序的:1,2,1,4,1,2但b相对于a是有序的,即a 固定的时候,b是有序的(也解释了索引的左匹配原则): 当a 为1时,b的顺序为:1,2 当a为2时,b的顺序为:1,4 。。。。。所以:select * from table ...

2020-09-01 09:40:01 757

原创 InnoDB中Cardinality值(读MySQL技术内幕-InnoDB存储引擎)

Cardinality值: 统计表中字段的高选择性: 类似于姓名字段,表中都不相同的,属于高选择性,适用于添加索引 类似于性别字段,只有男,女的,属于低选择性,则不适用于添加索引 show index from table;InnoDB中更新Cardinality值的策略: 表中1/16发生过变化 表中某一行记录频繁更新,表中却没有记录的添加时,更新次数>2 000 000 000次Cardinality值的统计:采样的...

2020-08-31 15:13:41 96

原创 mysql和redis一致性

https://www.cnblogs.com/liuqingzheng/p/11080680.html#_labelTop

2020-08-28 15:02:23 61

转载 java锁

https://www.cnblogs.com/jyroy/p/11365935.html

2020-08-25 15:48:42 59

原创 查找命令

more针对大日志文件:

2020-08-25 15:47:27 109

原创 Explain字段解析(Mysql)

explain + sql语句 了解次条sql语句的执行计划字段如下:id:select查询的序列号:id值越大,优先级越高,id值相同时,则执行顺序自上而下并不是有where子查询时id就会增加,具体何时会导致id增加暂时不清楚(下图)select_type:查询的类型simple :简单子查询(很多博客说不使用union和子查询)---应该指的是不包括in关键字吧。。 primary:最外层子查询 subQuery:第一层子查询...

2020-08-13 11:11:22 265 1

原创 索引的操作解析(覆盖,回表,下推)(需补充)

概念:覆盖索引:extra 值:using index 语句用到的所有列要被所使用的索引覆盖,不需要从数据表中读取数据(包括select,join和where子句使用到的列)测试联合索引:先添加联合索引:(暂时还不清楚非聚集索引,后面再补充)回表查询:索引下推:...

2020-08-10 11:13:25 312

原创 InnoDB数据结构和算法(读MySQL技术内幕-InnoDB存储引擎)

InnoDB支持的常用的索引:B+树索引,全文索引,哈希索引B+树是从平衡二叉树演化而来,却不是二叉树。https://www.cnblogs.com/yichengming/p/11176741.htmlB+树索引找到的并不是一个给定键值的具体行,而是被查找数据所在的页,将页读入到内存,再从内存中查找需要的数据二分查找法(折半查找法):每次取中心点做比较上图中:顺序查找平均次数:(1+2+3+4+5+6+7+8+9+10)/10 = 5.5次 ...

2020-07-30 18:24:07 84

原创 对象属性的校验,对象转换方法等

1.校验对象所有属性不能为null2.校验对象集合里面的对象所有属性不能为null3.校验对象指定的属性不能为null(keList为指定属性名称的集合)4.校验对象指定的属性可以为null,其他属性都不能为null(keyList为可以为null的属性集合)5.自定义对象转map(对象有一对多的关联关系):...

2020-07-28 10:14:14 311

原创 SpringCloud动态获取yml文件里面的自定义配置

不同的环境,bootstrap.yml加载不同的application文件:1.在application-dev.yml和application-prod.yml都写上配置2.定义类去获取(此种写法不需要指定特定的application文件,只需指定application里面的key值,bootstrap.yml加载哪个文件,就从哪个文件里面获取值)(下面的写法需要加载指定文件)...

2020-07-28 09:34:16 2007

原创 InnoDB启动和关闭(读MySQL技术内幕-InnoDB存储引擎)

mysql突然宕机对Innodb的影响:innodb_fast_shutdown:默认值为1 0表示mysql关闭时,Innodb需要完成所有的full purge和merge insert buffer,所有脏页刷回磁盘 1表示不需要所有的full purge和merge insert buffer,但需要刷脏页 2表示都不需要,而是将日志都写入到日志文件innodb_force_recovery影响InnoDB的恢复情况:默认为0 0表示进行所有的恢复操作,...

2020-07-18 17:38:07 113

原创 InnoDB特性(读MySQL技术内幕-InnoDB存储引擎)

插入缓冲俩次写自适应哈希索引异步IO刷新邻接页插入缓冲Insert Buffer:物理页的一部分对于非聚集索引的插入或者更新操作,不是每一次直接插入到索引数据页中,而是先判断插入的非聚集索引页是否在缓冲池中,若在,则直接插入,若不在,先放在一个Insert Buffer对象中,看似数据库已经将这个非聚集索引插入到叶子节点中,实则没有,只是存放在另一个位置,再以一定的频率和情况进行Insert Buffer和辅助索引数据页的子节点的merge操作,将多个插入合并到一个操作中(在一.

2020-07-18 17:23:28 105

原创 InnoDB(Master Thread工作方式)(读MySQL技术内幕-InnoDB存储引擎)

内部由多个循环组成:主循环(loop),后天循环(backgroup loop),刷新循环(flush loop),暂停循环(suspend loop)Master Thread 会根据数据库运行状态在各个循环中进行切换Loop主循环(大部分操作):每秒的操作和每0秒的操作每秒的操作:1.日志缓冲刷新到磁盘,即使事务没有提交(总是)----->即使再大的事务,提交(commit)时间也很短的原因2。合并插入缓冲(可能)---->Innodb会判断前一秒的IO次数是否小于5次,

2020-07-18 14:10:42 77

原创 InnoDB(CheckPoint技术)(读MySQL技术内幕-InnoDB存储引擎)

Write Ahead Log策略(事务数据库系统):当事务条件时,先写重做日志,再修改页,(用日志恢复数据)Checkpoint(检查点)技术解决的问题:缩短数据库恢复时间:数据库宕机时,不需要重做所有的日志,因为checkpoint之前的页已经刷到磁盘了缓冲池不够用时,将脏页刷新到磁盘(给缓冲池腾空间):此时根据LRU算法会溢出最近最少使用的页(脏页),此时需强制执行Checkpoint,将脏页刷回磁盘重做日志不可用时,刷新脏页(重做日志不可用,即不能保证数据的恢复了,就相当于每次操作都

2020-07-17 08:41:21 100

原创 InnoDB体系架构(后台线程和内存池)(读MySQL技术内幕-InnoDB存储引擎)

1.InnoDB有多个后台线程(mysql引擎自己的)和内存块(内存块组成了一个大的内存池)内存池:缓存磁盘的数据后台线程:保证内存中缓存的是最新数据,并将数据刷新到磁盘中、后台线程:Master Thread (将数据缓冲池中的数据异步刷新到磁盘,包括脏页的刷新,合并插入缓冲,UNDO页的回收)脏页:内存数据页和磁盘数据页不一致时,称这个内存页为脏页,一致的内存页就是干净页合并插入缓冲:https://blog.csdn.net/qq_39101581/article/de..

2020-07-16 19:54:21 108

原创 WebService客户端和服务端(CXF)

客户端调用服务端的方式1.用流的方式调用2.通过工具生成客户端3.动态调用(对namespace有要求)

2020-07-14 18:47:12 328

原创 Json格式字符串转Java对象(JSON.parseOBject(str,T.class))

JSON:Java对象:转换方法:

2020-07-10 13:10:49 2045

原创 端口被占用

netstat -ano | findstr "8080"任务管理器---》详细信息---》结束

2020-07-09 09:22:39 84

原创 在字符串模板中获取指定的值

在指定位置添加(.*?)

2020-07-08 15:05:55 789

webService服务端.rar

webService服务端,亲自,可用。

2020-07-14

webService工具生成的客户端

工具自动生成的客户端,和服务端不匹配,但是按照这个格式可以调用成功,亲自可用。打字太累了

2020-07-14

空空如也

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

TA关注的人

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