- 博客(17)
- 资源 (32)
- 收藏
- 关注
原创 详述 ThreadLocal 的实现原理及其使用方法
文章目录实现原理ThreadLocal 的 get 方法ThreadLocal 的 set 方法ThreadLocal 的特性使用方法Threadlocal是一个线程内部的存储类,可以在指定线程内存储数据,并且该数据只有指定线程能够获取到,其官方解释如下:/** * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thre
2020-05-30 18:21:27 2594 1
转载 详述 Spring MVC 启动流程及相关源码分析
- 部署描述文件中(例如 Tomcat 的`web.xml`)由`<listener>`元素标记的事件监听器会被创建和初始化- 对于所有事件监听器,如果实现了`ServletContextListener`接口,将会执行其实现的`contextInitialized()`方法- 部署描述文件中由`<filter>`元素标记的过滤器会被创建和初始化,并调用其`init()`方法- 部署描述文件中由`<servlet>`元素标记的 Servlet 会根据`<load-on-startup>`的权值按顺序创
2020-05-30 09:00:52 5664 15
转载 详述 Spring Boot 中内嵌 Tomcat 的实现原理
对于一个 Spring Boot Web 工程来说,一个主要的依赖标志就是有`spring-boot-starter-web`这个`starter`,`spring-boot-starter-web`模块在 Spring Boot 中其实并没有代码存在,只是在`pom.xml`中携带了一些依赖,包括`web`、`webmvc`和`tomcat`等
2020-05-26 22:41:02 4012
原创 详述 synchronized 和 volatile 的实现原理以及两者的区别
版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchronized 和 volatile 的区别线程安全在并发编程中,线程安全是我们最需要关心的问题,而导致并发问题的原因,主要是:存在共享数据;并且,存在多条线程共同操作共享数据。因此,为了解决这个问题,我.
2020-05-24 19:22:31 2613
原创 出现 curl: (51) SSL: no alternative certificate subject name matches target host name 错误的原因及解决方法
## 问题描述![curl-ssh-51](https://img-blog.csdnimg.cn/20200522151604861.png)如上图所示,通过`curl`发起 POST 请求,出现 SSL 51 异常:> curl: (51) SSL: no alternative certificate subject name matches target host name通过异常描述,我们知道,该错误为:没有与目标主机名匹配的证书。
2020-05-23 14:14:31 44372
转载 十分钟搞懂 Lombok 的使用方法与实现原理
Lombok 是一款好用顺手的工具,就像 Google Guava 一样,在此予以强烈推荐,每一个 Java 工程师都应该使用它。Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(`POJO`),它通过注释实现这一目的。通过在开发环境中使用 Lombok,开发人员可以节省构建诸如`hashCode()`和`equals()`这样的方法以及以往用来分类各种`accessor`和`mutator`的大量时间。
2020-05-23 08:11:44 2739 1
原创 详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因
文章目录表空间在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。表空间首先,来了解一下 MySQL 的表空间。中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:参考资料:MySQL存储引擎MyISAM和InnoDB底
2020-05-22 08:04:11 3841
原创 二叉树的前序、中序、后序、层序以及蛇形遍历的实现方式
文章目录树节点的定义二叉树的前序遍历递归迭代二叉树的中序遍历递归迭代二叉树的后序遍历递归迭代二叉树的层序遍历递归迭代二叉树的蛇形遍历递归迭代总结树节点的定义首先,给出树节点的定义,方便我们理解下面的算法:public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; }}
2020-05-16 19:01:53 1258
原创 深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理
什么是事务?事务(`Transaction`),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如`begin transaction`和`end transaction`语句(或函数调用)来界定。事务由事务开始(`begin transaction`)和事务结束(`end transaction`)之间执行的全部操作组成。
2020-05-10 21:31:48 132802 22
转载 不可不说的 Java “锁”事
文章目录前言1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语前言Java 提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自 JDK 8 和 Ne...
2020-05-08 14:36:14 764 1
转载 基于 Redis 的分布式锁实现
文章目录关于分布式锁基于数据库实现分布式锁基于数据库表的增删基于数据库排他锁基于数据库锁的优缺点基于 Zookeeper 实现分布式锁基于缓存实现分布式锁基于 Redis 的分布式锁实现SETNX存在死锁的问题一种实现方式获取锁释放锁总结关于分布式锁很久之前有讲过并发编程中的锁「并发编程的锁机制:synchronized和lock」。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需...
2020-05-07 19:44:04 631
转载 常用的分布式事务解决方案
众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~
2020-05-07 15:40:16 14345 14
原创 面试官:什么是死锁?如何解决死锁?写一段死锁的代码吧!
## 什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括:- 系统资源不足;- 程序执行的顺序有问题;- 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,那么死锁出现的可能性就很低;否则,就会因争夺有限的资源而陷入死锁。其次,程序执行的顺序与速度不同,也可能产生死锁。产生死锁的四个必要
2020-05-06 20:10:31 19915 23
转载 面试官:请你谈谈 Java 的类加载过程
刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 类的加载过程吗?这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你 Java 功底的问题。如果你答好了,这是你应该的;如果你没答好,那么对不起,面试官心中已经给了你不及格。今天,小编就 Java 类加载过程这个问题,抛砖引玉,说一下自己的理解,如果有不对的地方,欢迎大家在评论去指正。
2020-05-05 19:46:09 2761 2
原创 详述 Spring 中 Bean 的生命周期
1 实例化 Bean2 设置对象属性(依赖注入)3 注入 Aware 接口4 BeanPostProcessor5 InitializingBean 与 init-method6 DisposableBean 和 destroy-method
2020-05-05 19:13:20 5153
转载 Java 内存溢出(OOM)异常完全指南
java.lang.OutOfMemoryError:Java heap spaceJava 应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:`Heap space`(堆空间)和`Permgen`(永久代)
2020-05-04 08:31:48 3057
原创 深入理解 JVM 垃圾回收机制及其实现原理
对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java 语言的可移植性正是建立在 JVM 的基础上。任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(`.class`)就可以在该平台上运行。这就是
2020-05-03 13:38:29 398512 167
2019年北京市导游考试导游词.zip
2019-12-05
MySQL Group Replication
2017-04-22
阿里巴巴 2016 双 11 背后的技术
2017-01-20
Cornerstone(免费破解版)
2017-01-12
算法设计与分析
2016-11-19
深入浅出面向对象分析与设计
2016-11-18
深入理解Java虚拟机:JVM高级特性与最佳实践
2016-11-14
设计模式之禅
2016-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人