- 博客(32)
- 资源 (4)
- 收藏
- 关注
翻译 MySQL中InnoDB上的锁分类
概要文章翻译自15.7.1 InnoDB Locking,其中所有锁特性都以mysql-8.0版本为准将会介绍到的Innodb的锁种类如下:共享锁和排它锁意向锁记录锁间隙锁后键锁插入意向锁自增锁空间索引的谓词锁共享锁和排它锁(Shared and Exclusive Locks)Innodb实现了标准的行级锁,包括共享锁和排它锁两种类型共享锁(s锁)允许拥有该锁的事...
2019-05-15 20:52:48 390
原创 从源码入手分析SpringMVC的原理
概述SpringMVC作为控制层框架,具体的作用就不在此赘述了,本文主要针对其处理请求流程的原理来做一次较为细致的讲解首先来看经典的MVC的三层架构,下面是一个模拟请求的调用和返回,我们把重点放在中间的控制层:SpringMVC就是用于管理这一层,负责将视图层发来的请求发送给下一层,然后再将结果返回,听起来很简单,但是真的这么简单吗?接下来,我们就来渐进式的分析,来研究其工作的原理准备工作...
2019-05-01 23:36:17 177
原创 聊聊Java中的生产者消费者模型——BlockingQueue
前言生产者/消费者模型相信各位都不陌生,是一种很常见的分布式资源调度模型。在这个模型中,至少有两个对象:生产者和消费者。生产者只负责创建资源,消费者只负责使用资源。如果自己实现一个简单的生产者/消费者模型也很容易,无非就是通过一个队列来做,但是这种方式有很多隐藏的缺陷:需要保证资源的线程可见性,同时要手动实现线程同步需要考虑各种临界情况和拒绝策略需要在吞吐量与线程安全之间保持平衡所以...
2019-06-05 17:56:53 744
原创 浅谈AQS(抽象队列同步器)
概念AQS,全称AbstractQueuedSynchronizer,即抽象队列同步器,和CAS共同撑起了整个java.util.concurrent包,同时也是Java并发编程上绕不开的一个概念抽象队列同步器,以下统称AQS,用于解决的就是多线程并发访问控制问题。在传统的多线程编程中,如果有多个线程需要访问同一个变量,就需要使用synchronized来为临界区加锁(临界区:访问共享资源的程...
2019-06-04 09:51:47 756
原创 浅谈TCP连接的创建和销毁过程
1. 概述本文主要讲述的内容主要包含以下部分TCP的概念连接的建立过程连接的拆除过程2. TCP协议我们首先要明确一点,这里讨论的TCP协议并不是指TCP/IP协议簇,而是单指TCP协议,即Transmission Control Protocol,指传输控制协议,位于传输层(OSI七层模型的第四层,或是TCP/IP四层协议的第三层)都应该清楚,传输层负责报文从进程到进程的传递,...
2019-05-24 13:01:17 916
原创 浅谈Redis的两种持久化机制
前言众所周知,redis是一个内存数据库,既然是将数据保存在内存中,上下线之后数据自然就会丢失,在我们的业务中,这种情况当然是不允许发生的,所以这时候就需要涉及到redis的持久化机制redis可以手动开启持久化,来让内存中的数据持久化到磁盘上,redis提供了以下两种持久化方案:RDB快照AOF日志接下来我们就要针对这两种方式来做一个讲解RDB快照rdb快照的原理是对redis...
2019-05-01 17:38:34 1121
原创 浅谈JVM垃圾内存回收算法
前言首先,我们要讲的是JVM的垃圾回收机制,我默认准备阅读本篇的人都知道以下两点:JVM是做什么的Java堆是什么因为我们即将要讲的就是发生在JVM的Java堆上的垃圾回收,为了突出核心,其他的一些与本篇不太相关的东西我就一笔略过了众所周知,Java堆上保存着对象的实例,而Java堆的大小是有限的,所以我们只能把一些已经用完的,无法再使用的垃圾对象从内存中释放掉,就像JVM帮助我们手...
2019-04-30 22:45:10 199
原创 浅谈Java的序列化机制
概念一个对象如果想在硬盘上存储,一定就需要借助于一定的数据格式。这种把对象转换为硬盘存储的格式的过程就叫做对象的序列化,同样地,将这些文件再反向转换为程序中对象的操作就叫做反序列化一些复杂的解决方案可能是将对象转换为json字符串的方式,这种方式的优点是易读,但是效率还是太低,所以Java的序列化的解决方案是将对象转换为一个二进制流的形式,来实现数据的持久化,本篇文章将会来详细讲解序列化的实现...
2019-04-28 23:24:12 401
原创 浅谈Java中的四种内部类
概述如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做内部类,按照一般的分法,大致可以分为以下四类:成员内部类局部内部类匿名内部类静态内部类接下来会针对这四种内部类进行详细讲解,旨在解释这些类的特点和应用场景我们预先定义好一个类,接来下的所有操作都会在这个类中执行:class Demo {...
2019-04-27 11:46:24 229
原创 浅谈Java中的异常种类
前言一般来讲,关于报错信息主要分为两大类,即Exception(异常) 和 Error(错误),有时候我们用“异常”来统称这两种情况,在本文中,将会就这两种情况做进一步的讲解同时,在这里我先声明,本文将不含Java对异常的处理方式、各个异常的详细讲解以及编译后代码中异常处理的讲解,而仅仅是针对Java中各种异常大类做一个粗略的讨论概念我们一般将宏观概念的异常分为以下两类,它们都属于Java...
2019-04-24 22:30:05 200
原创 简要了解JVM的内存划分
虽然Java将内存管理的权限交给了JVM,但是了解JVM是如何管理内存,是一个Java程序员必备的知识,在本篇,将会重点讲解JVM的内存划分情况
2019-04-24 11:19:44 118
原创 详解ThreadPoolExecutor线程池的原理
线程池作为一种对象池的一种,在多线程的场景中应用非常广泛,这里就来详细讲解ThreadPoolExecutor是怎么实现线程池技术的
2019-04-23 23:23:06 198
原创 快速搭建基于注解的Dubbo项目
虽然dubbo官方提供了一个快速启动的项目,但是样例程序是基于xml配置的,而且自己下载运行的时候按照提供的步骤可能会遇到一些奇奇怪怪的错误,所以这里提供了一个基于注解的dubbo示例程序
2019-04-23 16:22:49 370
原创 Spring的IOC中属性注入的过程
背景上一篇从源码解读Spring的IOC讲解了spring容器的初始化以及依赖注入的过程,但是在其中有一个很重要的部分暂时还没讲。可能已经有人发现了,那篇文章虽然讲解了IOC容器创建对象的整个流程,但是好像并没有涉及我们的依赖对象以及属性是怎么注入到对象当中的,所以这篇文章就来专门分析属性注入的整个过程...
2019-04-22 23:02:42 1365
原创 从源码分析DBCP数据库连接池的原理
背景数据库连接池的概念大家应该都很熟悉,类似dbcp、c3p0,还有如今常用的druid等,使用时无非就是从网上抄几段配置,调一下参数,但是深入理解数据库连接池的原理在如今的Java开发中还是很有必要的,这里以dbcp为例,简要分析一下数据库连接池的实现原理这里我采用的版本是2.5.0版本 <dependency> <groupId>org.apache.c...
2019-04-21 21:53:31 756
原创 从源码解读Spring的AOP
概念IOC和AOP作为Spring的两大核心,如果你接触过Spring框架,那就一定需要了解这两个核心部分的工作原理。IOC控制反转(或者说依赖注入)的部分已经在我的从源码解读Spring的IOC文章中有介绍,这篇文章主要来讲解AOP面向切面编程的原理AOP,即Aspect Oriented Programming,面向切面编程,关于什么是面向切面编程,为了避免喧宾夺主,我在这里不进行过多的探...
2019-04-18 12:54:23 4311
原创 从源码解读Spring的IOC
概念IOC(Inversion Of Control),即控制反转,或者说DI(Dependency Injection),依赖注入,都属于Spring中的一种特点,可以统称为IOC控制反转,即控制权的反转,也就是说将内置对象创建的控制权交给第三方容器,而不是本身的对象依赖注入,即将依赖对象进行注入,也就是说不主动创建对象,而是通过第三方容器将依赖的对象注入进来不管是IOC还是DI,它...
2019-04-16 11:08:35 998
原创 函数式编程——Java中的lambda表达式
背景在JDK1.8之前,我们经常会遇到下面这几种场景:无法传入方法,只能传入对象 Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread()); } });即使是简单方...
2019-04-05 23:26:25 287
原创 浅谈ThreadLocal
介绍ThreadLocal作为JDK1.2以来的一个java.lang包下的一个类,在面试和工程中都非常重要,这个类的主要目的是提供线程本地的变量,所以也有很多地方把这个类叫做线程本地变量从字面理解,这个类为每个线程都创建了一个本地变量,实际上是ThreadLocal为变量在每个线程中都创建了一个副本,使得每个线程都可以访问自己内部的副本变量通常提到多线程,都会考虑变量同步的问题,但是Thr...
2019-04-05 21:30:39 147
原创 从源码分析ConcurrentHashMap
介绍作为线程安全的HashMap,Java提供了Hashtable和ConcurrentHashMap两种实现,而Hashtable控制线程安全的方式仅仅是用synchronized对方法加锁,这种低效且过时的方法已经不适合如今的开发在JDK5中,就已经出现了ConcurrentHashMap作为Hashtable的高效替代品。在JDK7及之前,ConcurrentHashMap还是使用分段锁...
2019-03-29 08:59:42 125
原创 从源码分析HashMap
阅读本篇内容,需要你了解**散列表**和**哈希冲突**的概念,当然,如果不了解也可以,在后面我会对这两个概念简要地解释本篇会解决的问题: - HashMap是怎么存储数据的 - HashMap的KV键值对是怎么插入的
2019-03-20 20:35:40 126
原创 Leetcode题解:287. Find the Duplicate Number寻找重复数
代码实现只想抄个答案把题过了的可以直接复制下面的代码:class Solution {public: int findDuplicate(vector&amp;amp;lt;int&amp;amp;gt;&amp;amp;amp; nums) { int slow = 0, fast = 0, tar = 0; do { slow = nums[slow]; fast = nums[nums[fast]]; }...
2019-01-28 18:17:19 195
原创 求最长回文子串——Manacher算法详解
回文子串问题回文子串问题通常会给出一个字符串,然后找出这个字符串中最长的回文子串。回文串即为正读和反读一致的字符串,比如”aa&amp;amp;quot;,“abba”,&amp;amp;quot;abcba&amp;amp;quot;等。判别一个字符串是否为回文串很容易想到的方法是:设立两个游标,分别在串的最左和最右,让这两个游标向对方逼近的同时比较这两个游标的值但是这里我们要讨论的是回文子串,所以上述方法暴露出一个严重的缺陷:难以确定右游标(因
2019-01-24 23:21:47 235
原创 Leetcode题解:405. 数字转换为十六进制数
题目描述:数字转换为十六进制数(Convert a Number to Hexadecimal)给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字 符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。...
2019-01-24 15:16:09 333
原创 学着写chrome插件 (一)—— 了解chrome插件并自己写一个小demo
写在前面本篇教程仅适合使用chrome浏览器以及一系列类似360极速浏览器等使用chrome内核的浏览器chrome插件是什么我们经常称呼的chrome插件更准确的名字是Chrome Extension,可以理解成一个依附于chrome浏览器,用于增强浏览器功能的一个微型软件。怎么安装插件我们所下载的插件,都会是一个后缀为crx的压缩文件,在chrome之前的版本可以直接将这个文件拖拽入...
2018-12-02 23:06:33 6306 3
原创 Dijkstra最短路径算法分析
Dijkstra算法属于稍微复杂一些的算法,理解起来也不是那么容易,当初在网上搜最短路径算法的时候感觉大多数博文都讲的不是那么通俗,主要是代码,许多需要注释的地方都省略了。也不是说这样做不好,注释的越少越能提高程序员阅读代码的能力。但是对新人来讲,先给一个注释详细的代码,然后接下来自己多动手敲几遍(不要看之前的代码),这样可能更有效果。要想理解算法不自己完整地敲一遍是不可能的。算法分析:...
2017-05-06 23:22:26 553
原创 关于三种基本排序算法的速度直观分析
三种排序算法的介绍插入排序:插入排序分为2种,直接插入排序和折半插入排序。插入排序的算法很简单,即从第二个元素开始,标记当前元素,从前扫描数组,每扫描一个数组中的数就将其往后移动一位,直到遇到一个小于(或大于,与排序顺序有关)标记元素的数,至于为什么遇到一个就可以停止当前循环,是因为遇到的这个小于标记元素的数前面的所有数据都已经被排好次序了。折半插入排序则是利用了这一点,使得扫描的次数更快一点
2017-04-30 22:48:36 1350
raft一致性算法英文原版论文
2020-01-20
谷歌分布式领域三大论文合集(GFS、MapReduce、BigTable)
2020-01-20
log4j依赖jar包
2019-04-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人