- 博客(54)
- 资源 (2)
- 收藏
- 关注
原创 HashMap阅读笔记 也来说说快速失败机制
我发现大部分博文对快速失败机制是这样描述的:在使用迭代器对集合对象进行遍历的时候,如果 A 线程正在对集合进行遍历,此时 B 线程对集合进行修改(增加、删除、修改),或者 A 线程在遍历过程中对集合进行修改,都会导致 A 线程抛出 ConcurrentModificationException 异常。给出的代码示例如下: HashMap hashMap = new HashMap();...
2019-07-10 17:50:27 488
原创 SpringBoot源码解析 内置Tomcat启动流程(二)
在上一篇文章中,我们了解到了Spring是如何启动内置Web服务器的。我们也知道Spring Boot本身是使用Tomcat作为默认服务器的。这又是如何做到的呢?我们来细看下EmbeddedWebApplicationContext中的createEmbeddedServletContainer方法。Spring Boot所支持的WebServer都是在这里初始化并创建的。我们可以看到其先获...
2019-01-02 17:57:43 2786
原创 SpringBoot源码解析 内置Tomcat启动流程(一)
打开源代码过程略去不谈,找到入口方法之后发现有两次调用,而我们实际需要开始关注的是下面这个方法。public static ConfigurableApplicationContext run(Object[] sources, String[] args) { return (new SpringApplication(sources)).run(args);}可以...
2018-08-20 15:22:10 8857 2
原创 MySQL的MVCC机制可以完全解决幻读么?
定义MVCCMVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。在MySQL,MVCC并不是Server级别的实现,而是InnoDB引擎的实现。快照读像不加锁的select操作就是快照读,即不加锁的非阻塞读;快照读的前提是隔离级别不是串行级别,串行级别下的快照读会退化成当前读;之所以出现快照读的情况,是基于提高并发性能的考虑,快照读的实现是
2021-06-11 22:23:41 1387 2
原创 填坑日志2021-03-12 xml解析异常:Content is not allowed in prolog
场景测试通过后运维上线,出现异常提示Content is not allowed in prolog。原因排查后发现文件编码被修改为ANSI码。解决方法重新修改xml文件至UTF-8格式。
2021-03-12 23:58:31 793
原创 ThreadLocal作用和原理分析
ThreadLocal主要为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。要理解ThreadLocal需要理解下面三个问题:每个线程的变量副本是存储在哪里的?(参考ThreadLocal的get()源码)每个线程都有一个threadLocals成员,引用类型是ThreadLocalMap,以ThreadLocal和ThreadLocal对象声明的变量类型作为参数。这样,我们所使用的ThreadLocal变量的实际数据,通过get函数取值的时候,就是通过取出Thread中th
2021-02-22 18:22:15 298
原创 JDK源码阅读 ConcurrentHashMap探秘1
都知道ConcurrentHashMap是线程安全的Map,那么它的线程安全是如何实现的呢?让我们来看一下吧。
2020-10-28 16:13:30 83 2
原创 SpringBoot源码解析 AutoConfigure机制
SpringBoot只要引入对应Starter就可以自动加载对应配置项并且初始化对应组件实在是太方便了。那么SpringBoot是如何做到这一点的呢?
2020-09-14 14:27:01 407 1
原创 Redis 高级特性 布隆过滤器
布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。
2020-09-10 16:17:18 219 1
原创 Jenkins使用笔记(五) 参数化构建
构建过程中免不了需要使用各种参数,比如备份版本号,打tag也需要参数,甚至进行分支切换,那么参数化构建就很方便了。
2020-09-09 19:57:09 1319
原创 Spring源码阅读2 AsyncConfigurer 配置线程池及异常处理
简介先看下代码吧public interface AsyncConfigurer { /** * The {@link Executor} instance to be used when processing async * method invocations. */ @Nullable default Executor getAsyncExecutor() { return null; } /** * The {@link AsyncUncaughtExcepti
2020-07-10 10:52:22 677
原创 解决MySQL创建UDF报错ERROR 1418的正确姿势
MySQL创建UDF ERROR 1418ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,or READS SQL DATA in its declaration and binary logging is enabled(you *might* want to use the less safe log_bin_trust_function_creatorsvariable)搜索资料,发现大部分资料是这么写
2020-07-03 19:00:55 333
原创 Spring源码阅读1 AOP如何判定是否可以使用JDK动态代理
Spring DefaultAopProxyFactory源码或许大家会奇怪了,不就是判断是不是代理的接口就可以了吗?其实并不是这么简单。直接上代码。 @Override public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyIn
2020-06-11 16:40:18 821
转载 强软弱虚引用,只有体会过了,才能记住
以前学习强软弱虚引用的时候,只是走马观花看看博客,并没有自己写代码去实践、去证明,导致每次看完后,过不了多久就忘了,后来下定决心,一定要自己敲敲代码,这样才能让印象更加深刻,古人云:纸上得来终觉浅,绝知此事要躬行。Java中的四种引用Java中有四种引用类型:强引用、软引用、弱引用、虚引用。Java为什么要设计这四种引用Java的内存分配和内存回收,都不需要程序员负责,都是由伟大的JV...
2020-03-22 23:49:40 132
转载 有点深度的聊聊JDK动态代理
在接触SpringAOP的时候,大家一定会被这神奇的功能所折服,想知道其中的奥秘,底层到底是如何实现的。于是,大家会通过搜索引擎,知道了一个陌生的名词:动态代理,慢慢的又知道了动态代理有多种实现方式,比如 JDK动态代理,Cglib 等等。今天我就来简单说说JDK动态代理。JDK动态代理的简单应用我们还是从一个最简单的例子着手:首先我们需要定义一个接口:public interface...
2020-03-22 23:16:14 295
原创 wakeonlan成功!树莓派远程开机
树莓派已经配置了frp,映射到了云服务器上。如果加上远程唤醒的话就可以随时随地移动办公了。记录下实现的过程。1. 修改Bios,开启网络唤醒。1.1 官方文档说明我的主板型号是B250M,去技嘉官网找了说明文档 。文档在此上面关于网络开机的选项有如下几个:NetWork Stack Driver SupportDisabled 关闭网络开机功能支持。(预设值)Enabled ...
2020-03-06 02:32:57 11896 1
原创 MySQL面试索引必问
为什么选择B+树作为索引结构Hash索引:Hash索引底层是哈希表,哈希表是一种以key-value存储数据的结构,所以多个数据在存储关系上是完全没有任何顺序关系的,所以,对于区间查询是无法直接通过索引查询的,就需要全表扫描。所以,哈希索引只适用于等值查询的场景。而B+ 树是一种多路平衡查询树,所以他的节点是天然有序的(左子节点小于父节点、父节点小于右子节点),所以对于范围查询的时候不需要做全...
2020-03-03 15:05:55 685 1
原创 Java SPI(服务发现机制)
简介SPI 全称为Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。Java原生SPI使用步骤1 定义接口package com.chen.service;...
2020-03-02 11:47:09 551
原创 Redis的四种搭建模式
1.单节点单节点实例还是比较简单的,平时做个测试,写个小程序如果需要用到缓存的话,启动一个Redis还是很轻松的,做为一个key/value数据库也是可以胜任的。过于简单,在此不做说明。2.主从模式存在问题:主节点挂了之后,无法从新选举新的节点作为主节点进行写操作,导致写服务不可用搭建方式:只需要在配置文件中加上一行配置:slaveof 192.168.1.1 6379主从模式的一个作...
2020-01-14 21:07:53 913
原创 填坑日志(20200102) 记一次HttpClient引发的线程池死锁
背景某同学求救说任务可以提交,但是无法执行,所有线程都hang在了同一个地方。让帮忙看下,而且说自己跑单元测试的时候复现不了。问题定位过程导出栈第一步当然是导出栈信息看下。导出之后相关日志大致如下:"threadPoolTaskExecutor-5" #95 prio=5 os_prio=0 tid=0x00007f2a6018d000 nid=0x7179 runnable [0x00...
2020-01-02 18:06:51 1168
转载 MySQL事务隔离级别
事务的基本要素(ACID)原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱...
2019-09-16 23:09:34 106
原创 HashMap源码阅读笔记 put(K key, V value)实现
先说下众所周知的结论吧,HashMap是个数组加链表(或树)的形式。先来看下类图吧。从类图可以看到,HashMap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口的。重要字段。 /** * 在第一次使用的时候初始化 自动扩容。当重新分配大小时,其长度总会是2的倍数 */ transient N...
2019-07-03 22:55:08 245
原创 填坑日志(20190613) 自定义Header莫名消失解决
公司的项目目前使用Spring Cloud+Vue架构,通过Nginx做反向代理,一直运行正常。今天却遇到了一个奇怪的问题,自定义的Header怎么都获取不到。开始以为是自己写的有问题,debug后发现Spring确实没有接收到Header。于是怀疑到了Nginx上,查阅资料发现了这个配置:Syntax: underscores_in_headers on | off;Default: u...
2019-06-13 11:35:25 1674
原创 《深入理解Java虚拟机》读书笔记 垃圾回收算法
标记-清除算法过程,首先标记所有需要进行回收的对象,标记完成后统一清除缺陷:效率低下:标记及清除效率不高产生大量不连续的内存碎片,难以进行再次分配。复制算法过程:将内存分为对等的两部分,每次只使用其中一部分,垃圾回收时,将仍存活的对象复制到另一块区域,同时将原使用内存区域清空。优点:简单方便运行高效缺点:只能使用一半内存标记-整理算法过程:标记过程和标记清除算...
2019-06-01 22:48:38 699
原创 JVM源码阅读笔记:String为什么要设计为final类型
看String源码时,最显眼的莫过于public final class String implements java.io.Serializable, Comparable<String>, CharSequence那么String为什么要设计为Final类型呢?在String类的源码中,我们可以看到这段注释Strings are constant; their valu...
2019-05-28 22:18:43 751
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人