自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CG国斌的博客

全职程序员,兼职导游,非著名相声演员。

原创 史上最简单的 MySQL 教程

史上最简单的 MySQL 教程 数据库是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海...

2019-12-20 10:41:31 1422 1

翻译 快速入门 Akka Java 指南

Akka 是一个用于在 JVM 上构建高并发、分布式和容错的事件驱动应用程序的运行时工具包。Akka 既可以用于 Java,也可以用于 Scala。本指南通过描述 Java 版本的Hello World示例来介绍 Akka。

2019-10-08 10:48:15 327540 93

原创 史上最简单的 GitHub 教程

1 简介  GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器...

2017-03-27 17:18:51 41377 30

原创 史上最简单的 IntelliJ IDEA 教程

温馨提示:本教程的 GitHub 地址为「intellij-idea-tutorial」,欢迎感兴趣的童鞋Star、Fork,纠错。 1 简介   IntelliJ IDEA(简称 IDEA),是 Java 语言开发的集成环境,IDEA 在业界被公认为最好的 Java 开发...

2017-03-10 09:17:08 199182 95

原创 详述 Java NIO 以及 Socket 处理粘包和断包方法
原力计划

NIO 是 New I/O 的简称,是 JDK 1.4 新增的功能,之所以称其为 New I/O,原因在于它相对于之前的 I/O 类库是新增的。由于之前老的 I/O 类库是阻塞 I/O,New I/O 类库的目标就是要让 Java 支持非阻塞 I/O,所以也有很多人喜欢称其为 Non-block ...

2020-07-04 12:23:42 68 0

转载 带你详细了解,一致性哈希算法的实现原理

一致性哈希算法在 1997 年由麻省理工学院的 Karger 等人在解决分布式 Cache 中提出的,设计目标是为了解决因特网中的热点问题,初衷和 CARP 十分类似。一致性哈希修正了 CARP 使用的简单哈希算法带来的问题,使得 DHT 可以在 P2P 环境中真正得到应用。 但现在一致性哈希算...

2020-06-25 09:44:20 3279 0

转载 由阿里巴巴 Java 开发规约 HashMap 条目引发的故事

大热的《[阿里巴巴 Java 开发规约](https://github.com/alibaba/p3c/)》中有提到: - 【推荐】集合初始化时,指定集合初始值大小。 说明:`HashMap`使用如下构造方法进行初始化,如果暂时无法确定集合大小,那么指定默认值(`16`)即可: ```jav...

2020-06-24 07:24:33 2015 5

原创 在使用 Spring Boot 的过程中,你可能不太知道的点?
原力计划

如题,本文主要罗列一些在使用 Spring Boot 的过程中,大家可能不太知道的点: Spring Boot 的精髓:自动配置、起步依赖、Actuator 和命令行界面。 Spring Initializr:Click HERE,Spring Boot 快速搭建网站。 @SpringBootA...

2020-06-22 22:32:16 118 0

原创 使用 VisualVM 和 JProfiler 进行性能分析及调优
原力计划

文章目录概述 概述 开发大型 Java 应用程序的过程中难免遇到内存泄露、性能瓶颈等问题,比如文件、网络、数据库的连接未释放,未优化的算法等。随着应用程序的持续运行,可能会造成整个系统运行效率下降,严重的则会造成系统崩溃。为了找出程序中隐藏的这些问题,在项目开发后期往往会使用性能分析工具来对应用程...

2020-06-19 22:15:40 191 0

原创 设置 Linux 别名命令 alias 永久生效的方法

直入主题,编辑.bashrc文件,该文件主要用于保存一些个性化的设置,如命令别名、路径等: vim .bashrc 执行上述命令后,如下图所示: 如上图所示,我们可以在User specific aliases and functions这一行下面新增我们的个性化配置,如设置别名: ali...

2020-06-18 09:06:18 81 0

转载 使用 Redis 统计网站 UV 的方法

文章目录前言思路HyperLogLog使用 Redis 命令操作使用 Java 代码操作HyperLogLog 使用原理及特点使用 Java 代码实现 HyperLogLog小结 前言 网页 UV(Unique Visitor)就是指网站的独立用户访问量 Unique Visitor。即相同用户的...

2020-06-16 07:06:32 73 0

原创 Kafka:高吞吐量、消息精确一次语义以及保证消息顺序

文章目录前言高吞吐量顺序读写Page Cache零拷贝分区分段+索引批量读写批量压缩消息精确一次语义消息系统语义概述必须被处理的故障Apache Kafka 中的精确一次语义幂等性:每个分区中精确一次且有序事务:跨分区原子写入真实案例:Apache Kafka 中的精确一次流处理保证消息顺序 前言...

2020-06-14 16:43:32 448 0

原创 详述 Java 并发编程中 CAS 以及 AQS 的实现原理

版权声明:本文的内容大都来自于「vioao」的博文,略作修改。 文章目录CAS什么是 CAS?CAS 的应用CAS 的缺点AQS什么是 AQS?AQS 的应用AQS 实现原理浅析 CAS 什么是 CAS? CAS(Compare And Swap),即比较并交换,是解决多线程并行情况下使用锁造成...

2020-06-07 10:08:11 134 0

原创 详述 ThreadLocal 的实现原理及其使用方法

文章目录实现原理ThreadLocal 的 get 方法ThreadLocal 的 set 方法ThreadLocal 的特性使用方法 Threadlocal是一个线程内部的存储类,可以在指定线程内存储数据,并且该数据只有指定线程能够获取到,其官方解释如下: /** * This class p...

2020-05-30 18:21:27 286 0

转载 详述 Spring MVC 启动流程及相关源码分析

- 部署描述文件中(例如 Tomcat 的`web.xml`)由`<listener>`元素标记的事件监听器会被创建和初始化 - 对于所有事件监听器,如果实现了`ServletContextListener`接口,将会执行其实现的`contextInitialized()`方法 - 部...

2020-05-30 09:00:52 4321 15

转载 详述 Spring Boot 中内嵌 Tomcat 的实现原理

对于一个 Spring Boot Web 工程来说,一个主要的依赖标志就是有`spring-boot-starter-web`这个`starter`,`spring-boot-starter-web`模块在 Spring Boot 中其实并没有代码存在,只是在`pom.xml`中携带了一些依赖,包...

2020-05-26 22:41:02 1868 0

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

版权声明:本文的内容大都来自于「zejian_」的博文,略作修改。 文章目录线程安全synchronized使用方式作用于实例方法作用于静态方法作用于同步代码块实现原理同步代码块同步方法其他可能需要了解的关键点可重入性线程中断等待唤醒机制volatile内存可见性禁止指令重排优化synchron...

2020-05-24 19:22:31 829 0

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

文章目录JDK 动态代理的实现原理代码示例源码分析CGLIB 动态代理的实现原理代码示例源码分析JDK 和 CGLIB 动态代理的区别JDK动态代理CGLIB动态代理何时使用JDK还是CGLIB?如何强制使用CGLIB实现AOP?JDK动态代理和CGLIB字节码生成的区别?CGlib比JDK快?S...

2020-05-23 19:28:52 406 0

原创 出现 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...

2020-05-23 14:14:31 627 0

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

Lombok 是一款好用顺手的工具,就像 Google Guava 一样,在此予以强烈推荐,每一个 Java 工程师都应该使用它。Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(`POJO`),它通过注释实现这一目的。通过...

2020-05-23 08:11:44 1060 0

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

文章目录表空间 在 MySQL 的众多存储引擎中,InnoDB 是最常用的存储引擎,也是 MySQL 现阶段唯一免费支持事务机制的存储引擎。在本文中,我们以 InnoDB 为例,介绍 MySQL 的索引结构以及其使用 B+ 树实现索引的原因。 表空间 首先,来了解一下 MySQL 的表空间。中的所...

2020-05-22 08:04:11 193 0

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

InnoDB 事务日志包括`redo log`和`undo log`,其中`redo log`是重做日志,提供前滚操作;`undo log`是回滚日志,提供回滚操作。`undo log`不是`redo log`的逆向过程,其实它们都算是用来恢复的日志: - `redo log`通常是物理日志,记...

2020-05-20 08:12:10 1752 0

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

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

2020-05-16 19:01:53 209 0

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

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

2020-05-10 21:31:48 117706 10

转载 不可不说的 Java “锁”事

文章目录前言1. 乐观锁 VS 悲观锁2. 自旋锁 VS 适应性自旋锁3. 无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁无锁偏向锁轻量级锁重量级锁4. 公平锁 VS 非公平锁5. 可重入锁 VS 非可重入锁6. 独享锁 VS 共享锁结语 前言 Java 提供了种类丰富的锁,每种锁因其特性的不...

2020-05-08 14:36:14 161 1

转载 基于 Redis 的分布式锁实现

文章目录关于分布式锁基于数据库实现分布式锁基于数据库表的增删基于数据库排他锁基于数据库锁的优缺点基于 Zookeeper 实现分布式锁基于缓存实现分布式锁基于 Redis 的分布式锁实现SETNX存在死锁的问题一种实现方式获取锁释放锁总结 关于分布式锁 很久之前有讲过并发编程中的锁「并发编程的锁机...

2020-05-07 19:44:04 164 0

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

众所周知,数据库能实现本地事务,也就是在同一个数据库中,你可以允许一组操作要么全都正确执行,要么全都不执行。这里特别强调了本地事务,也就是目前的数据库只能支持同一个数据库中的事务。但现在的系统往往采用微服务架构,业务系统拥有独立的数据库,因此就出现了跨多个数据库的事务需求,这种事务即为“分布式事务...

2020-05-07 15:40:16 13543 14

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

## 什么是死锁? 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。产生死锁的原因,主要包括: - 系统资源不足; - 程序执行的顺序有...

2020-05-06 20:10:31 12267 11

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

刚刚走出校门的应届毕业生,如果在去寻求一份 Java 开发的工作时,你的面试官很有可能一边看着你的简历,一边漫不经心地问你:了解过 Java 类的加载过程吗? 这个时候你一定要注意了,虽然这是一个老生常谈的问题,但是这也是一个非常能够考验你 Java 功底的问题。 如果你答好了,这是你应该的;...

2020-05-05 19:46:09 2228 2

原创 详述 Spring 中 Bean 的生命周期

1 实例化 Bean 2 设置对象属性(依赖注入) 3 注入 Aware 接口 4 BeanPostProcessor 5 InitializingBean 与 init-method 6 DisposableBean 和 destroy-method

2020-05-05 19:13:20 994 0

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

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

2020-05-04 08:31:48 1545 0

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

对于 JVM 来说,我们都不陌生,其是 Java Virtual Machine(Java 虚拟机)的缩写,它也是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统,其本质上就是一个程序,当它在命令行上启...

2020-05-03 13:38:29 343936 125

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

Hello everybody,如题,这是一个招聘通知: 招聘邮箱:guobinhit@qq.com 福利情况: NO1. 带薪假期,国外团建,绩效奖金; NO2. 司龄满足7年发放足金纪念金牌,工龄满7年有无时限自由假; NO3. 每日健身名额,每周两次社团活动,包括羽毛球、篮球、足球和瑜伽...

2020-04-30 16:53:10 1980 7

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

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

2020-04-28 10:21:15 328 0

原创 回滚 Git 提交到 GitHub 的 commit 记录

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

2020-04-23 20:43:20 904 0

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

如上述代码所示,启动 10 个调度线程,延迟 10 秒,开始执行定时逻辑,然后每隔 2 秒执行一次定时任务。定时任务类为`TaskWorker`,其要做的事就是根据`offset`和`rows`参数,到数据库捞取指定范围的待处理记录,然后送到`TaskService`的`processTask`方...

2020-04-20 17:32:17 77320 2

原创 记一次 JVM CPU 使用率飙高问题的排查过程

首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图: ![cpu-usage](https://img-blog.csdnimg.cn/202004071615390.png) 如上图所示,在 **下午3:45** 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为什...

2020-04-07 23:48:52 56481 39

转载 如何画出一张合格的技术架构图?

当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况: - 对着画布无从下手、删了又来? - 如何用一张图描述我的系统,并且让产品、运营、开发都能看明白? - 画了一半的图还不清楚受众是谁? - 画出来的图到底是产品图功能图还是技术图又或是大杂烩? - 图上的框框有点少是不是要找点儿...

2020-03-24 14:39:25 2479 2

原创 详述 JedisCommands 接口中的方法说明

文章目录前言方法说明 前言 在 JedisCommands 接口中,其提供了操作 Redis 的全部方法,分别对应着 Redis 的各种操作命令,但遗憾的是,该接口中并没有给出详细的注释。 在这种情况下,如果我们想知道某个方法的作用,就需要我们找到其对应的 Redis 命令来进行理解了,很不方便。...

2020-03-22 16:15:26 631 0

原创 详述 IntelliJ IDEA 遇到 Maven 项目打开(Open)或者导入(Import)失败的解决方法

详述 IntelliJ IDEA 遇到 Maven 项目打开(Open)或者导入(Import)失败的解决方法

2020-03-18 20:10:35 1498 0

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