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 »

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 »

8月 182020
 

预备知识

  • 计算任务的分类

    • CPU密集型:需要线程长时间进行的复杂的运算,这种类型的任务需要少创建线程,过多的线程将会频繁引起上文切换,降低任务处理处理速度。

    • IO密集型:由于线程并不是一直在运行,可能大部分时间在等待 IO 读取/写入数据,增加线程数量可以提高并发度,尽可能多处理任务。

  • JDK线程池,java.util.concurrent.ThreadPoolExecutor 传说中的7个参数,作用,线程池运行机制,参见下图复习

Continue reading »

7月 242020
 

按官方提示https://github.com/naver/pinpoint-docker ,通过docker安装pinpoint时,遇到端口冲突问题

 docker-compose up -d                                                                                                                                                                                             
Creating network "pinpoint-docker_pinpoint" with driver "bridge"                                                                                                                                                   
Creating pinpoint-docker_zoo3_1    ... done                                                                                                                                                                        
Creating pinpoint-docker_zoo2_1    ... done                                                                                                                                                                        
Creating pinpoint-flink-jobmanager ... done                                                                                                                                                                        
Creating pinpoint-docker_zoo1_1     ... done                                                                                                                                                                       
Creating pinpoint-mysql             ... done                                                                                                                                                                       
Creating pinpoint-hbase             ... error                                                                                                                                                                      
Creating pinpoint-flink-taskmanager ... done                                                                                                                                                                       
                                                                                                                                                                                                                   
ERROR: for pinpoint-hbase  Cannot start service pinpoint-hbase: Ports are not available: listen tcp 0.0.0.0:2180: bind: An attempt was made to access a socket in a way forbidden by its access permissions.       
                                                                                                                                                                                                                   
ERROR: for pinpoint-hbase  Cannot start service pinpoint-hbase: Ports are not available: listen tcp 0.0.0.0:2180: bind: An attempt was made to access a socket in a way forbidden by its access permissions.       
Encountered errors while bringing up the project.                                                                                                                                                                  

根据官方提示,修改pinpoint-docker文件夹下的.env文件,修改hbase端口即可,比如我修改为了12180 Continue reading »