6月 142019
 

正在学习:

  • spring cloud主要组件系统的过一遍,之后会开始源码分析
  • zookeeper
  • Java多线程、并发相关,系统的过一遍,会进行源码分析,会写一些文章记录下
  • Kafka使用
  • 每日刷1-3题leetcode,数据结构与算法回炉重学中,感觉收获很大

主要想读读源代码,并将源代码阅读所学的东西记录下来,目前想做这些: Continue reading »

12月 032015
 

这里写下一些我觉得比较经典的书籍,纯属个人建议,事先声明:其中有不少书我没看过,或是看的不细,但大概知道书里讲啥东西,也会在下面列出。

更新记录

本文是2014年甚至是更早的时候写的,肯定有些陈旧,不过还是有些价值的,现在简单更新、置顶一下,后续会进行更新。

  • 2017.2.28 初始版本
  • 2017.10.29 更新读书记录。

目前正在看或是打算看的书:

  • 《智能时代》 吴军博士 刚买,还没来得及翻
  • 《高可用架构》 10月才出的书,书明天到货,然后可以拜读了,看作者,一堆熟悉的业界大佬,质量应该有保证 🙂
  • 《图解HTTP》 看着比较轻松,补齐一些基础知识
  • 《深入分析Java Web技术内幕》 许令波著。阿里技术书系列。在看,可以用来补全一些有关java web的知识。JVM、编码、session与cookie、spring框架分析等,内容比较全,正看,暂时不做评价。

2017年已读完的书籍: Continue reading »

11月 202020
 

事情是这样子的:

我想自定义一个缓存注解,用来缓存方法返回值,并且支持自定义缓存超时时间,注解定义是这样:


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Inherited
public @interface MyCache {

    @AliasFor("value")
    int expireTime() default 60;

    @AliasFor("expireTime")
    int value() default 60;
}

Continue reading »

10月 222020
 

Raft基础

在raft中,服务器节点共有3种状态(或者说角色):

  • leader

    • 负责client交互和log复制,同一时刻系统中最多存在1个。

  • follower

    • 节点的初始状态就是follower,follower只能被动响应请求RPC,从不主动发起请求RPC。

    • 如果follower在一定时间范围(后面会讲,这个叫election timeout)内没有收到leader的请求,则follower可以转变成candidate(If followers don’t hear from a leader then they can become a candidate.)

  • candidate

    • 一个临时的状态,只存在于选举leader阶段。一个节点想要变成leader,那么就发起投票请求,同时自己变成candidate。如果选举成功,则变为candidate,否则退回为follower。其他节点根据当前状态回复是否,如果已经投票给其他candidate,则不会再投票给这个candidate(一个节点只有一票)。

    • 获得多数选票的candidate(n/2+1)将会变成leader。

Continue reading »

9月 222020
 

说明

本文所分析代码版本为spring boot/cloud 2.2.6。

预备知识

一些注解的说明

eureka中用到几个比较有意思的注解,简化程序实现。

@ConfigurationProperties(“eureka.instance”)

表示从外部配置文件中(properties或是yml文件)读取”eureka.instance”对应的配置。

@ConditionalOnBean/@ConditionalOnClass

Continue reading »

9月 212020
 

我个人觉得,学习源码的姿势,首先是需要知道想学习的框架/工具如何使用,然后接下来再去看源码注释,看看当时代码作者是如何阐述代码的,再去看代码怎么编写,效果才最佳。

同样的,接下来要分析的线程池,首先用途自不必说,不管有没有用过,ThreadPoolExecutor的运行机制、传说中的7个参数(核心线程数corePoolSize、最大线程数maxPoolSize、等待时间keepAliveTime、时间单位timeUnit、阻塞队列blockingQueue、线程工厂threadFactory、拒绝策略rejectHandler),相信大家都已经熟练掌握,此处不再赘述。

接下来简单过一下ThreadPoolExecutor的注释。
Continue reading »

9月 172020
 

前言

本文所涉及spring/spring boot代码,请参考spring boot 2.2.6对应版本。

我们在刚学习spring boot时,有没有一个困惑:spring boot能够自动实例化很多第三方的依赖库?比如eureka、druid等。这个就涉及到spring boot的扩展机制spring factories。

简单来将,spring factories类似与Java SPI机制,利用该机制,我们能够自定义实现一些SDK或是spring boot starter,其实例化过程由我们来实现,使用方只需要在项目中引入包、不需要或是只需做很少的配置。

Spring Factories的核心

spring factories机制核心在spring-core包中定义的SpringFactoriesLoader类,该类的公有方法只有2个:
Continue reading »

9月 112020
 

说明

本文基于Apache Kafka 2.5.1(2020.09.10拉取最新代码)

Consumer如何使用?

阅读源码前的首先要做到熟悉相关组件的概念、基本使用。而最靠谱的资料就是官方文档。

建议阅读官方文档(https://kafka.apache.org/documentation/)后,自己练习、使用kafka之后再开始阅读源码。 Continue reading »

9月 092020
 

不得不说的Reactor模式

提到Netty,就必须先说一下Reactor模式,源头应该是Doug Lea大神(学java的如果不知道这位神的请自己反思一下……)的Scalable IO in Java所提出的Multiple Reactors模式,参见下图

如果想知道为何出现Reactor模式,需要将IO发展过程,都说一下可能才会比较清晰,此处就不一一展开,有兴趣的童鞋可以参考这篇帖子:Reactor模式 Continue reading »