4 国斌

Java研发工程师

毕业于哈尔滨工业大学,就职于互联网公司。点点滴滴,皆是学问,看到了、学会了、记住了,便是收获、便是进步。

添加认证
等级
TA的排名 299

详述 synchronized 和 volatile 的实现原理以及两者的区别

版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchronized 和 volatile 的区别线程安全在并发编程中,线程安全是我们最需要关心的问题,而导致并发问题的原因,主要是:存在共享数据;并且,存在多条线程共同操作共享数据。因此,为了解决这个问题,我.

2020-05-24 19:22:31

详述 JDK 和 CGLIB 动态代理的实现原理以及两者的区别

文章目录JDK 动态代理的实现原理代码示例源码分析CGLIB 动态代理的实现原理代码示例源码分析JDK 和 CGLIB 动态代理的区别JDK动态代理CGLIB动态代理何时使用JDK还是CGLIB?如何强制使用CGLIB实现AOP?JDK动态代理和CGLIB字节码生成的区别?CGlib比JDK快?Spring如何选择用JDK还是CGLIB?代码示例JDK和CGLIB动态代理总结JDK 动态代理的实现原理天天的都听到人们说JDK动态代理,听上去感觉好屌的样子,为什么要叫JDK动态代理?是因为代理对象是由J

2020-05-23 19:28:52

出现 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

十分钟搞懂 Lombok 的使用方法与实现原理

Lombok 是一款好用顺手的工具,就像 Google Guava 一样,在此予以强烈推荐,每一个 Java 工程师都应该使用它。Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(`POJO`),它通过注释实现这一目的。通过在开发环境中使用 Lombok,开发人员可以节省构建诸如`hashCode()`和`equals()`这样的方法以及以往用来分类各种`accessor`和`mutator`的大量时间。

2017-05-22 21:26:10

详述 MySQL 中 InnoDB 的索引结构以及使用 B+ 树实现索引的原因

文章目录表空间在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。表空间首先,来了解一下 MySQL 的表空间。中的所有数据被存储在一个空间内,称之为表空间,表空间内部又可以分为段(segment)、区(extent)、页(page)、行(row),逻辑结构如下图:参考资料:MySQL存储引擎MyISAM和InnoDB底

2020-05-22 08:04:11

详细分析 MySQL 事务日志(redo log 和 undo log)

InnoDB 事务日志包括`redo log`和`undo log`,其中`redo log`是重做日志,提供前滚操作;`undo log`是回滚日志,提供回滚操作。`undo log`不是`redo log`的逆向过程,其实它们都算是用来恢复的日志:- `redo log`通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。- `undo log`用来回滚行记录到某个版本,`undo log`一般是

2018-02-22 09:13:04

二叉树的前序、中序、后序、层序以及蛇形遍历的实现方式

文章目录树节点的定义二叉树的前序遍历递归迭代二叉树的中序遍历递归迭代二叉树的后序遍历递归迭代二叉树的层序遍历递归迭代二叉树的蛇形遍历递归迭代总结树节点的定义首先,给出树节点的定义,方便我们理解下面的算法:public class TreeNode { public int val; public TreeNode left; public TreeNode right; public TreeNode(int x) { val = x; }}

2020-05-16 19:01:53

深入理解 MySQL 事务:隔离级别、ACID 特性及其实现原理

什么是事务?事务(`Transaction`),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元。事务通常由高级数据库操作语言或编程语言(如 SQL,C++ 或 Java)书写的用户程序的执行所引起,并用形如`begin transaction`和`end transaction`语句(或函数调用)来界定。事务由事务开始(`begin transaction`)和事务结束(`end transaction`)之间执行的全部操作组成。

2017-03-10 17:42:25

不可不说的 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

基于 Redis 的分布式锁实现

文章目录关于分布式锁基于数据库实现分布式锁基于数据库表的增删基于数据库排他锁基于数据库锁的优缺点基于 Zookeeper 实现分布式锁基于缓存实现分布式锁基于 Redis 的分布式锁实现SETNX存在死锁的问题一种实现方式获取锁释放锁总结关于分布式锁很久之前有讲过并发编程中的锁「并发编程的锁机制:synchronized和lock」。在单进程的系统中,当存在多个线程可以同时改变某个变量时,就需...

2020-05-07 19:44:04

常用的分布式事务解决方案

众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务”。那么在目前数据库不支持跨库事务的情况下,我们应该如何实现分布式事务呢?本文首先会为大家梳理分布式事务的基本概念和理论基础,然后介绍几种目前常用的分布式事务解决方案。废话不多说,那就开始吧~

2017-01-09 16:02:51

面试官:什么是死锁?如何解决死锁?写一段死锁的代码吧!

## 什么是死锁?死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括:- 系统资源不足;- 程序执行的顺序有问题;- 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,那么死锁出现的可能性就很低;否则,就会因争夺有限的资源而陷入死锁。其次,程序执行的顺序与速度不同,也可能产生死锁。产生死锁的四个必要

2017-05-31 21:03:03

面试官:请你谈谈 Java 的类加载过程

刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 类的加载过程吗?这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你 Java 功底的问题。如果你答好了,这是你应该的;如果你没答好,那么对不起,面试官心中已经给了你不及格。今天,小编就 Java 类加载过程这个问题,抛砖引玉,说一下自己的理解,如果有不对的地方,欢迎大家在评论去指正。

2017-05-06 21:05:36

详述 Spring 中 Bean 的生命周期

1 实例化 Bean2 设置对象属性(依赖注入)3 注入 Aware 接口4 BeanPostProcessor5 InitializingBean 与 init-method6 DisposableBean 和 destroy-method

2016-12-07 17:57:48

Java 内存溢出(OOM)异常完全指南

java.lang.OutOfMemoryError:Java heap spaceJava 应用程序在启动时会指定所需要的内存大小,它被分割成两个不同的区域:`Heap space`(堆空间)和`Permgen`(永久代)

2017-09-08 19:30:47

深入理解 JVM 垃圾回收机制及其实现原理

对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java 语言的可移植性正是建立在 JVM 的基础上。任何平台只要装有针对于该平台的 Java 虚拟机,字节码文件(`.class`)就可以在该平台上运行。这就是

2018-05-31 13:47:17

Spring IOC 容器源码分析:循环依赖的解决方法

Hello everybody,如题,这是一个招聘通知:招聘邮箱:guobinhit@qq.com福利情况:NO1. 带薪假期,国外团建,绩效奖金;NO2. 司龄满足7年发放足金纪念金牌,工龄满7年有无时限自由假;NO3. 每日健身名额,每周两次社团活动,包括羽毛球、篮球、足球和瑜伽。易宝支付是中国支付行业的开创者和领导者,也是互联网金融(ITFIN)和移动互联领军企业。易宝...

2019-09-06 10:08:25

分库分表?如何做到永不迁移数据和避免热点?

中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。

2019-06-11 21:57:48

回滚 Git 提交到 GitHub 的 commit 记录

在我们使用 Git 的时候,有时候会遇到想要回滚到某次提交之前的场景。在这时,我们只需要按照如下步骤操作,即可实现这个目的:首先,找到想要回退到某个版本的版本号,查看版本号的命令为`git log`,例如

2016-12-07 08:00:35

调度服务 ScheduledExecutorService 经常卡顿问题的排查及解决方法

如上述代码所示,启动 10 个调度线程,延迟 10 秒,开始执行定时逻辑,然后每隔 2 秒执行一次定时任务。定时任务类为`TaskWorker`,其要做的事就是根据`offset`和`rows`参数,到数据库捞取指定范围的待处理记录,然后送到`TaskService`的`processTask`方法中进行处理。从逻辑上来看,该定时没有什么毛病,但是在执行定时任务的时候,却经常出现卡顿的问题,表现出来的现象就是:**定时任务不执行了**。

2017-10-16 21:16:48

查看更多

CSDN身份
  • 博客专家
勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 脉脉勋章
    脉脉勋章
    绑定脉脉第三方账户获得
  • 签到王者
    签到王者
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 技术圈认证(专家版)
    技术圈认证(专家版)
    博客专家完成年度认证,即可获得
  • 推荐红人
    推荐红人
    发布高质量Blink获得高赞和评论,进入推荐栏目即可获得
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv2
    阅读者勋章Lv2
    授予在CSDN APP累计阅读博文达到7天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力探索
    原力探索
    参与《原力计划【第二季】——打卡挑战》的文章入选【每日精选】的博主将会获得此勋章。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 博客之星-入围
    博客之星-入围
    授予每年博客之星评选结果第21-200名的用户
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。