自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

|-| [- |_ |_ ()

0xCAFEBABE 0x53 0x74 0x61 0x74 0x69 0x63

  • 博客(91)
  • 收藏
  • 关注

原创 2020年学习计划(优化的计划制定)

前言计划必须有,但赶不上变化是常态。因为计划的作用是使我们有一个大致前进的方向,像是指南针不断修正你的方向。为什么是每年开年这个时间点来写总结和计划:笔者是2018年春节左右正式毕业且入坑Java,所以每年的春节(2月份)左右都刚好是周年,也会比较空闲,所以正适合做一年的总结与来年的计划想自己制定一个比较合理的学习计划,可以参考笔者下面的思路这篇学习计划按照往常的习惯本来要早在新...

2020-05-04 10:02:37 1008 1

原创 Java程序员技术书籍指南

开篇“夫夷以近,则游者众;险以远,则至者少”,希望读者可以在知识的海洋里不轻言放弃,当您面临挑战时,那才是成长的开始。 —小马哥mercyBlitz 文章总览Java 多线程与并发框架与中间件与存储消息中间件 算法操作系统????☕️????????????????????网络系统设计计算机系统工具编码规范...

2020-01-23 20:25:33 3248

原创 Netty学习笔记(前言)

文章目录什么是Netty?NIO与BIO的对比BIO的劣势NIO的优势为什么要学习Netty?Netty大纲什么是Netty?在Netty官网有这么一句话:Netty is an asynchronous event-driven network application frameworkfor rapid development of maintainable high perform...

2019-06-29 16:05:26 333

原创 Spring学习笔记(前言)

写在前面(序言)​ 时间飞逝,距离我上次写2018下半年学习计划已经过了6个月,眼看还有半个多月2018下半年就过去了,但回头看看计划,发现还有大半没有学习到,很多知识点其实都是易学难精,例如我即将要写的这个Spring,如果只是会用的话相信只要几天时间就可以,但是你如果深究其原理,其实是一件很需要意志力并且时间的事,我看源码的过程是一次兴趣使然,先看了Java类库的集合类源码,觉得特别有意思,...

2018-12-10 10:35:14 1504

原创 Mybatis学习笔记(前言)

最近在深入学习Mybatis,系统分析Mybatis各个模块,写下自己的理解,帮助自己更好的理解Mybatis。制定分析模块(目录)介绍Mybatis与使用(什么是Mybatis?怎么用?) Mapper.xml配置文件解读 MyBatis概览(各组件以及底层实现原理) 自己动手实现一个简单的MyBatis(初级版本1.0) 基于1.0版本的Mybatis对它进行改良以及加入Plu...

2018-10-29 23:02:51 460

原创 设计模式之学习笔记 (前言)

最近一直在学习设计模式,希望在这里记录一个学习过程,让自己不仅是读懂设计模式的定义和类图,更要是能敲出一个简单的demo,并能写下来设计模式各方面的运用。读懂、会用、书写出来,我认为这三个是不同的阶段,读懂了不一定会用,会用了不一定能把它写下来,能独立写出来我认为需要有自己的理解,这样记忆才会更深刻。同样这三个过程也是一个循序渐进的过程,不可跳跃的步骤。设计模式传送门:单例模式...

2018-05-30 15:11:35 383

原创 学习分布式一致性协议:自己实现一个Raft算法

前言MIT6.824是麻省理工学院开设的一个很棒的分布式系统公开课程,课程的Schedule在这里 ,这门课程的学习方式主要是通过教授的 lecture 讲解、Paper阅读、FAQ答疑,以及实践lab来完成的,是一个学习理论知识,然后动手实践的过程,个人认为是很好的学习方式,而MIT6.824公开课让更多不是麻省理工的学生也能很好的学习分布式系统知识,免费学习MIT课程学到就是赚到!MIT6.824主要围绕以下4个lab进行学习lab1->MapReduce:实现一个MapReduce系统

2020-07-01 13:35:19 1508 3

原创 从RefreshScope实现原理看刷新配置失效问题

前言在SpringIOC中,我们熟知的BeanScope有单例(singleton)、原型(prototype), Bean的Scope影响了Bean的创建方式,例如创建Scope=singleton的Bean时,IOC会保存实例在一个Map中,保证这个Bean在一个IOC上下文有且仅有一个实例。SpringCloud新增了一个refresh范围的scope,同样用了一种独特的方式改变了Bean的创建方式,使得其可以通过外部化配置(.properties)的刷新,在应用不需要重启的情况下热加载新的外部化配

2020-06-01 09:03:12 8209 4

原创 Reactive声明式响应式编程到底带给我们什么?

前言希望有reactive库的使用经验的小伙伴阅读,会比较有体会记得我第一次接触Reactive是在读一本知秋大佬写的RxJava书的时候,书名叫《Java编程方法论:响应式RxJava与代码设计实战》,这本书让我初识了Reactive的底层实现范式,如果有读过RxJava的源码就可以知道,其底层类似扩展了面向对象的设计模式 — 观察者模式,一个事件数据流从生产者发射,一个个消费者(观察者...

2020-05-04 10:10:06 2026

原创 从分布式理论到如何做一个生产级别的分布式锁

最全的分布式锁要点

2020-04-10 23:55:48 1397

原创 从分布式CAP理论到分布式一致性协议

文章目录前言CAP理论分布式一致性协议协议的几个规则数据复制领导者选举如何保证一致性总结回答开篇前言在分布式开发中,我认为具备CAP理论与了解Raft、Zab等分布式一致性协议是十分有必要的,例如分布式锁的选择,你是选择Redis的主备集群(AP模型)还是选择ZK、etcd(CP模型)呢?关于分布式锁的文章 点击这里查看 ,如果不具备这些理论知识,我觉得是无法灵活选择且用好分布式锁的,不同业务...

2020-04-10 09:33:28 771 1

原创 从数据结构之跳表分析到Redis的有序集合浅析

前言个人认为,大部分的数据结构都是基于链表(二叉树这种也算一种链式结构,其节点会保存了左右节点的指针)与数组组成的,所以链表与数组是数据结构中的一个基石,在上一篇数据结构分析 文章中我结合了查找这一场景,突出了数组与链表的特点,讲解了几个数组、链表变形的、用于查找的数据结构,理解上篇文章,我认为对数组和链表的理解可以更上一层楼上一篇的 关于查找常用的几个数据结构 文章的主要议题是关于查找的...

2019-12-14 21:03:44 336 2

原创 高性能MySQL优化要点整合

本篇文章为《高性能MySQL》一书的读书笔记,主要提取了几点在开发中会用到的高性能的做法与一些MySQL的介绍1. MySQL架构MySQL最重要、最与众不同的特性是它的存储引擎架构。这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。此时可以根据性能、特性以及其他需求来定制化数据存储的方式(存储引擎)1.1 MySQL逻辑架构[外链图片转存失败,源站可能有防盗链机制,...

2019-11-09 20:05:44 381

原创 高性能查找之基础数据结构与各类算法思想的碰撞

文章目录前言1. 快速查找的几种方式1.1 二分查找单值查找范围查找1.2 跳表单值查找范围查找1.3 字典表设计字典表散列函数装载因子散列冲突策略散列与链表的相辅相成1.4 查找树2. Redis选择跳表实现有序列表3. MySQL选择B+Tree4. 总结前言应小伙伴的号召,打算写一篇关于数据结构的文章,也算是一段数据结构学习的总结吧本篇文章不会详细讲解什么是二分查找,什么是跳表、字典...

2019-11-07 17:15:09 536 1

原创 设计模式之访问者模式(十五)(ASM原理分析)

从访问者模式到ASM框架动态生成字节码分析

2019-10-24 13:40:30 870 1

原创 分析FastJSON为何那么快与字节码增强技术揭秘

文章目录前言1. FastJSON为什么这么快1.1 字符数组的处理1.1.1 减少容量检查1.1.2 减少内存分配开销1.2 序列化顺序输出1.3 使用ASM避免反射开销2. 自定义实现简易序列化工具2.1 ASM字节码增强总结前言JSON作为一种序列化协议,它有可读性强的特点,其越来越流行,越来越成为一个不同进程交换数据的序列化普遍使用的一个协议,其也不需要配置schama,JSON协议有...

2019-10-18 10:48:11 1447 3

原创 阻塞队列的首选之队列超集LinkedTransferQueue

文章目录前言队列的语义切换线程安全的队列Hand-off(SynchronousQueue语义)无界的阻塞队列LTQ原理分析假设阻塞特性1. 来一个线程存数据2. 又来一个线程存数据3. 来一个线程取数据总结前言这次讨论的议题是 JDK 1.7 新增的一个阻塞队列LinkedTransferQueue,那么它与上一篇我们讨论的那3个基本的阻塞队列有什么不同呢?为什么JDK1.7的时候需要在JU...

2019-09-05 16:51:47 283

原创 生产-消费模型之"阻塞队列"的源码分析

文章目录前言阻塞队列API存放元素boolean add(E e)boolean offer(E e)boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;void put(E e) throws InterruptedException获取元素E take() throws InterruptedE...

2019-09-01 14:45:13 269

原创 从Java线程池实现原理到如何配置一个合适的线程池

文章目录前言为什么要使用线程池线程池的运行原理的源码分析线程池状态启动线程池创建线程线程池的工人 “Worker”启动工人,开启线程工人获取任务拒绝策略默认拒绝策略(抛异常)最旧淘汰策略(丢弃)关闭线程池温和关闭线程池暴力关闭线程池小结配置一个合适的线程池合适的线程数量合适的阻塞队列低耗时任务高耗时任务定时任务前言本文会出现一些阻塞队列相关的只是,这种队列除了有队列Queue的特性之外,还有...

2019-09-01 14:37:40 696

原创 SpringBoot自定义自动装配与Conditional失效问题

文章目录前言自动装配规则类命名规则package命名规则jar包构建规则jar包结构jar包取名构建自定义的自动装配@ConditionOnBean失效问题为何非自动装配的配置会失效?为何自动装配的配置就有效?前言参考书籍《SpringBoot编程思想》— 小马哥mercyblitz此书是难得的讲述SpringBoot的一本好书,由Spring的注解发展史介绍到Spring的注解驱动,以一...

2019-08-01 09:29:20 1739

原创 揭秘SpringBoot自动装配的魔法

文章目录前言自动装配的魔法@ComponentScan扫描并注册@EnableAutoConfiguration自动注册Bean获取候选装配的Bean类名SpringFactories加载机制获取SpringFactories中指定的factory排除候选装配的Bean过滤候选装配的Bean发布自动装配获取完成事件自定义自动装配监听器总结前言首先,自动装配包含了哪些的装配?自动将包下的被打...

2019-08-01 09:22:41 684 1

原创 Spring手动挡装配Bean之Enable模式

文章目录前言@Enable驱动模式自定义Enable模式注解驱动@Configuration方式接口编程ImportSelector接口方式ImportBeanDefinitionRegistrar接口方式手动挡装配原理ConfigurationClassPostProcessor的注册解析@Import总结前言在SpringBoot开发中,我们经常见到Enable的模式开发,例如在Sprin...

2019-08-01 09:19:25 753

原创 Spring源码解析之注解驱动的"发动机"

文章目录前言BeanFactoryPostProcessor处理判断是否需要被解析Full完全模式与Lite轻量模式解析BeanDefinition@Conditional条件过滤解析配置注解@ComponentScan注解的解析@Bean方法的解析@Import注解的解析延迟导入解析总结注册Bean阶段注解驱动处理总结前言本篇文章将解析ConfigurationClassPostProces...

2019-08-01 09:16:22 584

原创 Netty之基于长度域的动态解码

文章目录前言基于长度域的动态解码器使用介绍源码分析丢弃模式前言这篇文章算是上篇文章 Netty解码器源码分析 的扩展篇 ,这里单独开一篇讲解这个特殊的解码器LengthFieldBasedFrameDecoder。首先,它有什么用呢?有什么应用场景吗?这边我举一个例子,dubbo底层使用了Netty做了服务间通信来完成远程调用,其中应用层协议使用了自定义dubbo协议[外链图片转存失败(i...

2019-07-06 20:11:22 1614

原创 Netty源码解析之解码器

文章目录前言解码器基石解决读半包问题具体解码器例子基于行分隔的解码器丢弃数据前言在前面,我们介绍了Netty的三大组件:服务端启动代码分析Reactor线程模型源码分析pipeline事件传播机制源码分析在这篇文章中,我们将介绍Netty中的通用基类的解码器ByteToMessageDecoder,在大部分的协议解码中,大量的使用了此基类来构造特定的解码器,可以说是大部分的解码器的...

2019-07-05 22:06:51 373

原创 Netty源码解析之pipeline传播事件机制

文章目录前言Pipeline初始化Pipeline数据结构传播事件头尾传播Context传播传播粒度传播事件从Pipeline传播从Context传播头节点Conetxt绑定channel激活时自动读写出数据尾节点Context兜底操作前言在分析过前两节(服务端启动、Reactor线程模型)之后,我们再来介绍一下,pipeline的传播机制。在前两篇的分析中,不断的出现了pipeline,出...

2019-07-05 14:26:35 1470

原创 Netty源码解析之Reactor线程模型

文章目录前言线程组的初始化发动机线程的初始化发动机启动select流程:轮询Channel上的事件selector空轮询BUGprocessSelectedKeys:处理事件服务端Channel处理事件一个新连接到服务端之后会发生什么事?客户端Channel处理事件runAllTasks:运行所有任务拿到定时任务执行任务Reactor线程模型前言个人认为,Netty中最核心的就是它的线程模型了...

2019-07-04 23:00:11 449

原创 Netty源码解析之服务端启动

文章目录前言Sample引导类的启动线程池的设置Channel的设置Hanlder的设置引导类正式启动channel的初始化与注册工作实例化Channel总结初始化Channel总结注册Channel总结channel绑定监听端口总结前言从本篇文章开始,将开启一系列的Netty源码分析。Netty的版本均基于4.1.37.Final作分析。Netty的各个版本的一些实现可能不同,但大致的思想...

2019-07-04 00:00:24 329

原创 Netty实现一个小应用服务器 +消息收发推送系统

文章目录1. Servlet容器1.1 介绍1.2 协议1.3 Servlet映射关系初始化1.4 HTTP协议的编解码1.5 服务端的启动1.6 请求的业务逻辑处理1.7 Servlet处理具体业务逻辑1.7.1 响应View(html页面)的Servlet1.7.2 响应RESTful API(JSON或简单文本)的Servlet1.8 测试使用情况2. 仿支付功能1.1 介绍1.2 协议与编...

2019-07-03 11:03:14 1354 4

原创 分析Dubbo中的扩展机制

文章目录Dubbo SPI扩展机制示例源码分析IOC依赖注入机制包装类装饰Dubbo 自适应扩展机制自适应扩展介绍源码分析在dubbo框架中,Extension扩展机制可谓是一大设计亮点,此扩展机制贯穿了dubbo源码,几乎很多地方都有用到,例如配合dubbo的URL机制去动态选择类,可以做到在配置中动态选择,比如在dubbo中的registry,可以选择zk,可以选择redis,只需要在配置...

2019-06-12 22:39:08 869

原创 ConcurrentHashMap是如何实现线程安全的

ConcurrentHashMap是如何实现线程安全的文章目录ConcurrentHashMap是如何实现线程安全的前言相关概念Amdahl定律初始化数据结构时的线程安全总结put操作的线程安全总结扩容操作的线程安全扩容时的get操作多线程协助扩容在什么情况下会进行扩容操作?总结统计容器大小的线程安全假设当前线程为第一个put的线程出现了线程竞争导致CAS失败计数桶扩容总结get操作的线程安全总...

2019-05-25 18:08:40 41515 26

原创 深入源码分析JUC框架中的AQS

深入源码分析J.U.C框架中的AQS文章目录深入源码分析J.U.C框架中的AQS1. 前言1.1 什么是AQS?1.2 为什么要学习AQS?2. 深入源码分析AQS2.1 AQS中的成员变量2.2 AQS中的内部类2.3 AQS中的方法2.3.1 state的线程安全2.3.2 AQS中比较常用且重要的方法3. 分析重入锁,理解AQS3.1 重入锁实战分析4. 总结5. ReentrantLoc...

2019-04-25 20:01:20 485

原创 设计模式之迭代器模式(十四)

文章目录前言什么是迭代器模式定义实现使用迭代器模式的好处总结前言今天介绍的这个设计模式,是我认为日常代码最常用的一个设计模式—迭代器模式。所以这篇文章将使用JDK集合类框架来介绍迭代器模式。在我们使用聚合类例如各种集合框架ArrayList、LinkedList、HashMap等等的集合类遍历时都会用到。那么此时可以引申出几个问题:迭代器模式是什么?为什么要用迭代器模式?它解决了哪些问...

2019-03-19 18:24:20 212

原创 2019年学习计划

2019年学习计划文章目录2019年学习计划每个时期的学习目标循序渐进的学习计划如何学习总结知识点相关书籍给JAVA初学者的一些建议写在前面:经过制定2018年下半年学习计划,以及实践的这一过程,对于学习计划有了自己的更进一步的理解,这篇2019年学习计划将比2018年学习计划更加成熟更加脚踏实地。每个时期的学习目标虽然是2019年的学习计划,但是是从2月份开始的,因为我刚好是从去...

2019-02-04 01:54:49 835

原创 2018年学习计划总结

2018年学习总结文章目录2018年学习总结关于书籍书籍总结关于知识点知识点总结拒绝浅尝辄止博客文章的深度写在前面:制定计划固然重要,对完成计划之后自我总结我认为是更重要的,这篇文章将对2018下半年学习进行一个大总结,并说一些自己的感想。在2018年6月份,也就是去年下半年前期,我针对2018年下半年的时间计划并发表了一篇文章:2018年下半年学习计划,在这里针对这个计划做一个总结,...

2019-02-03 23:04:21 1073

原创 深度分析Spring中的构造器注入

深入源码分析Spring中的构造器注入文章目录深入源码分析Spring中的构造器注入1. 示例疑问点小结2. 依赖注入伊始3. 初始化Bean4.总结在往期文章中我没有提到在Spring中是如何将Bean注入到构造器,其实这个过程发生在实例化Bean时期,由AbstractAutowireCapableBeanFactory的createBeanInstance方法来做的。若想快速得到结论...

2019-01-02 09:30:21 23589 10

原创 深入源码分析SpringMVC底层原理(二)

深入分析SpringMVC请求处理过程文章目录深入分析SpringMVC请求处理过程1. DispatcherServlet处理请求1.1 寻找Handler1.2 没有找到Handler的处理1.3 根据Handler寻找Adapter1.4 拦截器的处理1.5 Adapter处理请求1.6 异常视图的处理1.7 页面的跳转2.总结在上一篇文章中我们讲到了SpringMVC的初始化,分别初...

2018-12-27 10:24:39 490 4

原创 深入源码分析SpringMVC底层原理(一)

初识SpringMVC与其初始化文章目录初识SpringMVC与其初始化1. 初探SpringMVC基本流程2. ContextLoaderListener3.DispatcherServlet3.1 初始化WebApplicationContext3.2 刷新4. 小结1. 初探SpringMVC基本流程先来看一张图(引用自《Spring实战》第四版 ):这张图大致描述了SpringM...

2018-12-27 10:22:35 1848 4

原创 深入源码分析SpringAOP实现原理

深入源码分析SpringAOP实现原理阅读这篇文章前,最好有代理模式的基础,以及了解关于Spring扩展点例如BeanPostProcessor和如何使用自定义标签集成Spring,这些文章在我的博客里都能找到。当然,也最好有使用AOP的经验,这篇文章不会讲解如何使用AOP。文章目录深入源码分析SpringAOP实现原理1. AOP简介2. 自定义标签开启AOP3. 注册Annotatio...

2018-12-20 17:59:41 697

原创 深入源码分析SpringIOC(四)

Spring扩展点之番外篇(自定义标签)文章目录Spring扩展点之番外篇(自定义标签)1. 自定义标签简介2. 自定义标签的使用3. 深入源码分析自定义标签实现原理3.1 获取Handler3.2 使用Handler调用对应的Parser4.总结1. 自定义标签简介在之前的文章中,我们在深入源码分析SpringIOC(一)的章节里提到了IOC容器读取Bean的过程是定位、加载、注册,而在加...

2018-12-18 17:49:43 366 4

空空如也

空空如也

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

TA关注的人

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