自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Java线程池源码分析

文章目录概述类结构详细解析构造函数一些成员变量关于线程池状态添加一个任务之后发生了什么?execute()方法 概述 线程是稀缺资源,如果线程被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,所以合理的使用线程池对线程进行统一分配、调优和监控,有巨大的好处。 降低资源消耗 提高...

2019-02-21 10:27:14 1205 11

原创 LeetCode-字符串的最长回文子串

文章目录题目链接题目描述示例解析代码 题目链接 Problem.5:https://leetcode.com/problems/longest-palindromic-substring/ 题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 ...

2019-02-13 09:02:56 487 20

原创 Java对象的自我救赎-finalize

对象的自我救赎 即使在可达性分析算法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑”阶段,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有GC Roots相连接的引用链,那它将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行fin...

2019-02-02 10:23:40 518 8

原创 Object的notify和notifyAll方法的区别

区别 notify:只会唤醒等待该锁的其中一个线程。 notifyAll:唤醒等待该锁的所有线程。 既然notify会唤醒一个线程,并获取锁,notifyAll会唤醒所有线程并根据算法选取其中一个线程获取锁,那最终结果不都是只有一个线程获取锁吗?那JDK为什么还需要做出来这两个方法呢?这两种同...

2019-01-28 14:29:41 3254 13

原创 Object的wait方法为什么要处于同步代码中

概述 wait和notify是用于线程间通信。 以生产者消费者模式来说的话,就是生产者和消费者通过队列进行通信,既然他们通过同一个队列通信,那么对于队列的操作就一定要保证线程安全性。 代码解释 一般wait的用法如下 while(queue.size() == MAX_SIZE){ wait()...

2019-01-27 16:28:34 855 0

原创 wait()、notify()和notifyAll()方法为什么属于Object

前提条件 要搞清这个问题,我们首先需要知道wait()、notify()和notifyAll()是干吗的,然后才能够知道它们为什么属于Object。就以wait为例吧,wait的含义是使当前线程放弃对象锁,并进入阻塞状态。 原因 原因一:Java中,任何对象都可以作为锁,既然wait是放...

2019-01-27 15:59:37 1358 9

原创 生产者-消费者模式(使用wait & notifyAll实现)

文章目录概述关键操作模拟代码实现队列实现生产者实现消费者实现测试实现打印结果代码解惑解惑总结 概述 生产者与消费者共用一个队列。 当队列满时,生产者无法再继续生产,所以生产者阻塞; 当队列空时,消费者无法再继续消费,所以消费者阻塞。 关键操作模拟 队列:本文以LinkedL...

2019-01-27 15:03:11 471 2

转载 Java8-Stream

概述 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干...

2019-01-16 20:18:52 676 36

转载 Java8-Lambda表达式

概述 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 使用 Lambda 表达式可以使代码变的更加简洁紧凑。 语法 lambda 表达式的语法格式如下: (parameters) -&...

2019-01-16 19:46:00 519 2

原创 LeetCode-判断一棵树是否为平衡二叉树

文章目录题目链接题目描述示例解析代码 题目链接 Problem.110:https://leetcode.com/problems/balanced-binary-tree/ 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右...

2019-01-11 19:59:25 864 6

原创 TCP/IP协议-最大传输单元MTU和最大分段大小MSS

一 概述 MTU和MSS MTU和MSS都是TCP/IP协议中的重要概念。其中 MTU解释为网络最大传输单元,它的大小由硬件决定,例如以太网的MTU为1500。 MSS解释为网络传输数据最大值,实际指的是TCP数据部分的传输最大值。 MTU与MSS的关系为 MTU = MSS ...

2019-01-08 18:50:50 746 8

原创 2018年博客之星,需要您宝贵的一票!

很荣幸入选了CSDN博客之星候选,既然入选了,那么我还是想全力以赴!虽然比不上其他大佬那么优秀,但还是希望大家多多支持! 请投 003 号:刘志熊 一票 投票地址 https://bss.csdn.net/m/topic/blog_star2018/index ...

2018-12-30 23:21:09 1969 98

原创 Java并发编程之CountDownLatch & CyclicBarrier

概述 CountDownLatch类位于java.util.concurrent包下,利用它可以实现线程间同步等功能。 例如,现在有一个主线程和两个子线程,主线程需要等待两个子线程执行结束之后才能执行,那么就可以通过CountDownLatch来实现。 构造器 &am...

2018-12-29 10:41:07 644 5

原创 浅谈volatile在i++情况下失效

概述 如果你对volatile不陌生的话,应该会知道volatile能够保证共享变量对线程的可见性。 那为什么volatile无法保证 i++ 操作的线程可见性呢? 分析 假设i的初始值为0,现有两个线程,分别为线程1和线程2进行 i++ 操作,我们来分析一下为什么会出现错误。 首先,i...

2018-12-25 13:35:47 1635 8

原创 Kafka Produce如何保证数据不丢失

概述 Kafka的发送模式可以分为同步模式和异步模式,可以通过参数producer.type=sync和producer.type=async指定。 同步模式 producer.type设置为sync时为同步模式。 此时可以通过配置request.required.acks的值来指定确认机制,分别...

2018-12-25 11:00:22 1144 4

原创 HTTP协议的POST与PUT区别

幂等性 对同一URL的多个请求应该返回同样的结果。 区别 PUT和POS都有更改指定URI的含义。但是POST被定义为非幂等的方法,PUT被定义为幂等的方法。 POST : 后一个请求不会把前一个请求覆盖掉,而是新增一个资源。 PUT : 后一个请求会把前一个请求覆盖掉。 ...

2018-12-25 10:12:26 866 4

原创 Mybatis原理剖析之二级缓存(五)

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将深入分析MyBatis的二级缓存的设计以及实现原理。

2018-12-20 11:17:04 1042 12

原创 Mybatis原理剖析之一级缓存(四)

一级缓存是SqlSession级别的缓存,缓存的作用是,一是提升查询速度,二是降低数据库的并发请求压力。

2018-12-18 13:42:14 1383 19

原创 LeetCode-二叉搜索树的范围和

给定一个二叉搜索树的根节点,以及两个整数类型的左边界和右边界,计算二叉搜索树中介于左边界和右边界的整数和(包含左边界和右边界)。注:假设二叉搜索树中的节点值唯一。

2018-12-15 15:02:05 986 2

原创 Mybatis原理剖析之自动映射器(三)

自动映射器算是Mybatis的一种特性吧,如果不能搞懂自动映射器的实现原理,那也没法理解Mybatis的其他特性。

2018-12-14 09:44:43 1111 15

原创 Mybatis原理剖析之Configuration(二)

Mybatis包含两类至关重要的XML配置文件,分别为mybatis-config.xml和mapper.xml。

2018-12-13 14:28:04 787 4

原创 Mybatis原理剖析之架构分析(一)

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

2018-12-13 11:02:43 991 4

原创 设计模式之观察者模式

观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。

2018-12-12 13:48:18 870 14

原创 设计模式之模板方法模式

模板方法模式在一个父类方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。

2018-12-11 19:56:11 698 2

原创 设计模式之外观模式

外观模式的意图是为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

2018-12-11 13:29:32 699 0

原创 设计模式之原型模式

通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

2018-12-11 11:11:22 729 0

原创 设计模式之建造者模式

建造者模式将类的构建与表示进行分离,可以在一定程度上解决这个问题,建造者模式又称创建者模式或Builder模式。

2018-12-11 10:22:20 709 2

原创 设计模式之抽象工厂模式

抽象工厂模式是对工厂方法模式的进一步改进,实际上,只是把对某一类相同特性的产品改由同一个工厂来生产而已,工厂方法模式是一种特殊的抽象工厂模式。

2018-12-10 12:27:29 829 18

原创 设计模式之工厂方法模式

抽象工厂模式是简单工厂模式的进阶,对工厂类做了进一步的抽象,符合“开放-封闭”原则。

2018-12-07 13:51:31 910 3

原创 设计模式之简单工厂模式

简单工厂模式不属于23种GoF设计模式之一,但是它却是理解工厂方法模式得基础,所以尽量还是搞懂。

2018-12-07 10:37:34 987 10

转载 分布式锁简单入门以及三种实现方式

主要介绍了分布式锁的由来,以及三大实现分布式锁的方式,分别为数据库分布式锁,Redis分布式锁,Zookeeper分布式锁。

2018-12-07 10:03:27 1653 0

原创 单链表反转

单链表反转是面试高频题,本文包含思路解析和Java代码实现。

2018-12-06 14:58:06 1179 4

原创 二叉树遍历七种方式

包括先序递归遍历,先序非递归遍历,中序递归遍历,中序非递归遍历,后续递归遍历,后续非递归遍历,层次遍历等。

2018-12-06 14:27:28 1003 2

原创 Kafka、ActiveMQ、RabbitMQ及RocketMQ性能对比

从单机吞吐量、topic 数量对吞吐量的影响、时效性、可用性、消息可靠性和功能支持等方面分析几大中间件的性能对比。

2018-12-06 11:07:46 2593 4

原创 Maven生命周期

包含清洁,默认和站点三大阶段,具体见文章详细内容。

2018-12-06 10:37:42 859 0

原创 BeanFactory和FactoryBean

BeanFactory和FactoryBean是两个容易混淆的类,本文对两个类的异同做了详细阐述。

2018-12-05 19:04:19 812 0

原创 TCP协议滑动窗口机制

TCP分段传输,确认机制,超时重传,滑动窗口,流量控制等。

2018-12-05 14:14:31 1077 4

原创 Redis集群-哨兵模式

哨兵模式是Redis官方推荐的集群部署方式,与主从复制方式不同,哨兵模式可以在Master宕机时,自动实现主备切换。详情请阅读本文。

2018-12-04 19:53:12 1300 0

原创 Redis集群-主从复制模式

为了降低每个redis服务器的负载,可以设置多个Redis服务器一起执行任务,做主从模式集群,一个redis服务器负责写数据,其他的服务器负责读数据,主服务器的数据也会自动的同步给其他的从服务器。

2018-12-03 16:26:58 1101 0

原创 IO多路复用及select、poll和epoll

select、poll和epoll是Linux的IO多路复用三种实现方式,了解他们的优缺点至关重要。

2018-12-02 13:47:14 1280 6

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