自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

翻译 谷歌文件系统(The Google File System译)(第3章)

第3章主要内容是系统交互,讲解了GFS的大致执行流程

2019-05-26 09:01:54 303

翻译 谷歌文件系统(The Google File System译)(1~2章)

1~2章内容是GFS整体设计的总览,主要包含介绍和设计概述

2019-05-23 12:34:37 796

翻译 MySQL中InnoDB上的锁分类

概要文章翻译自15.7.1 InnoDB Locking,其中所有锁特性都以mysql-8.0版本为准将会介绍到的Innodb的锁种类如下:共享锁和排它锁意向锁记录锁间隙锁后键锁插入意向锁自增锁空间索引的谓词锁共享锁和排它锁(Shared and Exclusive Locks)Innodb实现了标准的行级锁,包括共享锁和排它锁两种类型共享锁(s锁)允许拥有该锁的事...

2019-05-15 20:52:48 380

原创 从源码入手分析SpringMVC的原理

概述SpringMVC作为控制层框架,具体的作用就不在此赘述了,本文主要针对其处理请求流程的原理来做一次较为细致的讲解首先来看经典的MVC的三层架构,下面是一个模拟请求的调用和返回,我们把重点放在中间的控制层:SpringMVC就是用于管理这一层,负责将视图层发来的请求发送给下一层,然后再将结果返回,听起来很简单,但是真的这么简单吗?接下来,我们就来渐进式的分析,来研究其工作的原理准备工作...

2019-05-01 23:36:17 166

原创 聊聊Java中的生产者消费者模型——BlockingQueue

前言生产者/消费者模型相信各位都不陌生,是一种很常见的分布式资源调度模型。在这个模型中,至少有两个对象:生产者和消费者。生产者只负责创建资源,消费者只负责使用资源。如果自己实现一个简单的生产者/消费者模型也很容易,无非就是通过一个队列来做,但是这种方式有很多隐藏的缺陷:需要保证资源的线程可见性,同时要手动实现线程同步需要考虑各种临界情况和拒绝策略需要在吞吐量与线程安全之间保持平衡所以...

2019-06-05 17:56:53 729

原创 浅谈AQS(抽象队列同步器)

概念AQS,全称AbstractQueuedSynchronizer,即抽象队列同步器,和CAS共同撑起了整个java.util.concurrent包,同时也是Java并发编程上绕不开的一个概念抽象队列同步器,以下统称AQS,用于解决的就是多线程并发访问控制问题。在传统的多线程编程中,如果有多个线程需要访问同一个变量,就需要使用synchronized来为临界区加锁(临界区:访问共享资源的程...

2019-06-04 09:51:47 737

原创 Spring项目中自定义注解的使用

本篇博客将从一个普通的spring项目入手,教你如何在项目中应用自定义注解

2019-05-24 23:18:38 53024 18

原创 浅谈TCP连接的创建和销毁过程

1. 概述本文主要讲述的内容主要包含以下部分TCP的概念连接的建立过程连接的拆除过程2. TCP协议我们首先要明确一点,这里讨论的TCP协议并不是指TCP/IP协议簇,而是单指TCP协议,即Transmission Control Protocol,指传输控制协议,位于传输层(OSI七层模型的第四层,或是TCP/IP四层协议的第三层)都应该清楚,传输层负责报文从进程到进程的传递,...

2019-05-24 13:01:17 895

原创 浅谈Redis五种数据结构的底层原理

概念

2019-05-04 10:50:54 2629

原创 浅谈Redis的两种持久化机制

前言众所周知,redis是一个内存数据库,既然是将数据保存在内存中,上下线之后数据自然就会丢失,在我们的业务中,这种情况当然是不允许发生的,所以这时候就需要涉及到redis的持久化机制redis可以手动开启持久化,来让内存中的数据持久化到磁盘上,redis提供了以下两种持久化方案:RDB快照AOF日志接下来我们就要针对这两种方式来做一个讲解RDB快照rdb快照的原理是对redis...

2019-05-01 17:38:34 1106

原创 浅谈JVM垃圾内存回收算法

前言首先,我们要讲的是JVM的垃圾回收机制,我默认准备阅读本篇的人都知道以下两点:JVM是做什么的Java堆是什么因为我们即将要讲的就是发生在JVM的Java堆上的垃圾回收,为了突出核心,其他的一些与本篇不太相关的东西我就一笔略过了众所周知,Java堆上保存着对象的实例,而Java堆的大小是有限的,所以我们只能把一些已经用完的,无法再使用的垃圾对象从内存中释放掉,就像JVM帮助我们手...

2019-04-30 22:45:10 180

原创 浅谈Java的序列化机制

概念一个对象如果想在硬盘上存储,一定就需要借助于一定的数据格式。这种把对象转换为硬盘存储的格式的过程就叫做对象的序列化,同样地,将这些文件再反向转换为程序中对象的操作就叫做反序列化一些复杂的解决方案可能是将对象转换为json字符串的方式,这种方式的优点是易读,但是效率还是太低,所以Java的序列化的解决方案是将对象转换为一个二进制流的形式,来实现数据的持久化,本篇文章将会来详细讲解序列化的实现...

2019-04-28 23:24:12 385

原创 浅谈Java中的四种内部类

概述如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做内部类,按照一般的分法,大致可以分为以下四类:成员内部类局部内部类匿名内部类静态内部类接下来会针对这四种内部类进行详细讲解,旨在解释这些类的特点和应用场景我们预先定义好一个类,接来下的所有操作都会在这个类中执行:class Demo {...

2019-04-27 11:46:24 214

原创 浅谈线程和进程的区别

作为几乎每次面试必问的知识点,本篇文章比较详细地整理了一下线程和进程的知识点,虽然没有多少技术含量,但是还是非常值得记住的

2019-04-25 23:12:35 194

原创 浅谈Java中的异常种类

前言一般来讲,关于报错信息主要分为两大类,即Exception(异常) 和 Error(错误),有时候我们用“异常”来统称这两种情况,在本文中,将会就这两种情况做进一步的讲解同时,在这里我先声明,本文将不含Java对异常的处理方式、各个异常的详细讲解以及编译后代码中异常处理的讲解,而仅仅是针对Java中各种异常大类做一个粗略的讨论概念我们一般将宏观概念的异常分为以下两类,它们都属于Java...

2019-04-24 22:30:05 191

原创 简要了解JVM的内存划分

虽然Java将内存管理的权限交给了JVM,但是了解JVM是如何管理内存,是一个Java程序员必备的知识,在本篇,将会重点讲解JVM的内存划分情况

2019-04-24 11:19:44 110

原创 详解ThreadPoolExecutor线程池的原理

线程池作为一种对象池的一种,在多线程的场景中应用非常广泛,这里就来详细讲解ThreadPoolExecutor是怎么实现线程池技术的

2019-04-23 23:23:06 184

原创 快速搭建基于注解的Dubbo项目

虽然dubbo官方提供了一个快速启动的项目,但是样例程序是基于xml配置的,而且自己下载运行的时候按照提供的步骤可能会遇到一些奇奇怪怪的错误,所以这里提供了一个基于注解的dubbo示例程序

2019-04-23 16:22:49 362

原创 Spring的IOC中属性注入的过程

背景上一篇从源码解读Spring的IOC讲解了spring容器的初始化以及依赖注入的过程,但是在其中有一个很重要的部分暂时还没讲。可能已经有人发现了,那篇文章虽然讲解了IOC容器创建对象的整个流程,但是好像并没有涉及我们的依赖对象以及属性是怎么注入到对象当中的,所以这篇文章就来专门分析属性注入的整个过程...

2019-04-22 23:02:42 1339

原创 从源码分析DBCP数据库连接池的原理

背景数据库连接池的概念大家应该都很熟悉,类似dbcp、c3p0,还有如今常用的druid等,使用时无非就是从网上抄几段配置,调一下参数,但是深入理解数据库连接池的原理在如今的Java开发中还是很有必要的,这里以dbcp为例,简要分析一下数据库连接池的实现原理这里我采用的版本是2.5.0版本 <dependency> <groupId>org.apache.c...

2019-04-21 21:53:31 738

原创 从源码解读Spring的AOP

概念IOC和AOP作为Spring的两大核心,如果你接触过Spring框架,那就一定需要了解这两个核心部分的工作原理。IOC控制反转(或者说依赖注入)的部分已经在我的从源码解读Spring的IOC文章中有介绍,这篇文章主要来讲解AOP面向切面编程的原理AOP,即Aspect Oriented Programming,面向切面编程,关于什么是面向切面编程,为了避免喧宾夺主,我在这里不进行过多的探...

2019-04-18 12:54:23 4294

原创 从源码解读Spring的IOC

概念IOC(Inversion Of Control),即控制反转,或者说DI(Dependency Injection),依赖注入,都属于Spring中的一种特点,可以统称为IOC控制反转,即控制权的反转,也就是说将内置对象创建的控制权交给第三方容器,而不是本身的对象依赖注入,即将依赖对象进行注入,也就是说不主动创建对象,而是通过第三方容器将依赖的对象注入进来不管是IOC还是DI,它...

2019-04-16 11:08:35 984

原创 函数式编程——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 274

原创 浅谈ThreadLocal

介绍ThreadLocal作为JDK1.2以来的一个java.lang包下的一个类,在面试和工程中都非常重要,这个类的主要目的是提供线程本地的变量,所以也有很多地方把这个类叫做线程本地变量从字面理解,这个类为每个线程都创建了一个本地变量,实际上是ThreadLocal为变量在每个线程中都创建了一个副本,使得每个线程都可以访问自己内部的副本变量通常提到多线程,都会考虑变量同步的问题,但是Thr...

2019-04-05 21:30:39 138

原创 从源码分析ConcurrentHashMap

介绍作为线程安全的HashMap,Java提供了Hashtable和ConcurrentHashMap两种实现,而Hashtable控制线程安全的方式仅仅是用synchronized对方法加锁,这种低效且过时的方法已经不适合如今的开发在JDK5中,就已经出现了ConcurrentHashMap作为Hashtable的高效替代品。在JDK7及之前,ConcurrentHashMap还是使用分段锁...

2019-03-29 08:59:42 117

原创 从源码分析HashMap

阅读本篇内容,需要你了解**散列表**和**哈希冲突**的概念,当然,如果不了解也可以,在后面我会对这两个概念简要地解释本篇会解决的问题: - HashMap是怎么存储数据的 - HashMap的KV键值对是怎么插入的

2019-03-20 20:35:40 118

原创 Leetcode题解:287. Find the Duplicate Number寻找重复数

代码实现只想抄个答案把题过了的可以直接复制下面的代码:class Solution {public: int findDuplicate(vector&amp;amp;amp;lt;int&amp;amp;amp;gt;&amp;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 181

原创 求最长回文子串——Manacher算法详解

回文子串问题回文子串问题通常会给出一个字符串,然后找出这个字符串中最长的回文子串。回文串即为正读和反读一致的字符串,比如”aa&amp;amp;amp;quot;,“abba”,&amp;amp;amp;quot;abcba&amp;amp;amp;quot;等。判别一个字符串是否为回文串很容易想到的方法是:设立两个游标,分别在串的最左和最右,让这两个游标向对方逼近的同时比较这两个游标的值但是这里我们要讨论的是回文子串,所以上述方法暴露出一个严重的缺陷:难以确定右游标(因

2019-01-24 23:21:47 220

原创 Leetcode题解:405. 数字转换为十六进制数

题目描述:数字转换为十六进制数(Convert a Number to Hexadecimal)给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字 符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。...

2019-01-24 15:16:09 320

原创 学着写chrome插件 (一)—— 了解chrome插件并自己写一个小demo

写在前面本篇教程仅适合使用chrome浏览器以及一系列类似360极速浏览器等使用chrome内核的浏览器chrome插件是什么我们经常称呼的chrome插件更准确的名字是Chrome Extension,可以理解成一个依附于chrome浏览器,用于增强浏览器功能的一个微型软件。怎么安装插件我们所下载的插件,都会是一个后缀为crx的压缩文件,在chrome之前的版本可以直接将这个文件拖拽入...

2018-12-02 23:06:33 6262 3

原创 Dijkstra最短路径算法分析

Dijkstra算法属于稍微复杂一些的算法,理解起来也不是那么容易,当初在网上搜最短路径算法的时候感觉大多数博文都讲的不是那么通俗,主要是代码,许多需要注释的地方都省略了。也不是说这样做不好,注释的越少越能提高程序员阅读代码的能力。但是对新人来讲,先给一个注释详细的代码,然后接下来自己多动手敲几遍(不要看之前的代码),这样可能更有效果。要想理解算法不自己完整地敲一遍是不可能的。算法分析:...

2017-05-06 23:22:26 535

原创 关于三种基本排序算法的速度直观分析

三种排序算法的介绍插入排序:插入排序分为2种,直接插入排序和折半插入排序。插入排序的算法很简单,即从第二个元素开始,标记当前元素,从前扫描数组,每扫描一个数组中的数就将其往后移动一位,直到遇到一个小于(或大于,与排序顺序有关)标记元素的数,至于为什么遇到一个就可以停止当前循环,是因为遇到的这个小于标记元素的数前面的所有数据都已经被排好次序了。折半插入排序则是利用了这一点,使得扫描的次数更快一点

2017-04-30 22:48:36 1336

raft一致性算法英文原版论文

Raft 是用来管理复制日志(replicated log)的一致性协议。它跟 multi-Paxos 作用相同,效率也相当,但是它的组织结构跟 Paxos 不同。这使得 Raft 比 Paxos 更容易理解并且更容易在工程实践中实现。为了使 Raft 协议更易懂,Raft 将一致性的关键元素分开,如 leader 选举、日志复制和安全性,并且它实施更强的一致性以减少必须考虑的状态的数量。用户研究的结果表明,Raft 比 Paxos 更容易学习。 Raft 还包括一个用于变更集群成员的新机制,它使用重叠的大多数(overlapping majorities)来保证安全性

2020-01-20

谷歌分布式领域三大论文合集(GFS、MapReduce、BigTable)

英文原版论文pdf 1. 2003年,Google发布Google File System论文,这是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。从根本上说:文件被分割成很多块,使用冗余的方式储存于商用机器集群上。 2. 紧随其后的就是2004年公布的 MapReduce论文,论文描述了大数据的分布式计算方式,主要思想是将任务分解然后在多台处理能力较弱的计算节点中同时处理,然后将结果合并从而完成大数据处理。 3. 最后就是谷歌发布于2006年的Bigtable,其启发了无数的NoSQL数据库,比如:Cassandra、HBase等等。Cassandra架构中有一半是模仿Bigtable,包括了数据模型、SSTables以及提前写日志(另一半是模仿Amazon的Dynamo数据库,使用点对点集群模式)。

2020-01-20

log4j依赖jar包

web项目常用的日志框架依赖,内含log4j-1.2.17.jar、log4j-api-2.0-rc1.jar和log4j-core-2.0-rc1.jar

2019-04-29

cglib代理的依赖jar包

内含asm-3.3.1.jar和cglib-2.2.2.jar,添加到项目即可,亲测可用

2019-04-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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