7 小猴子豆芽菜

尚未进行身份认证

我要认证

一名90后程序猿,现就任于ThoughtWorks,从事软件开发、大数据开发,同时也是一位健身、羽毛球爱好者。

等级
TA的排名 2w+

JVM:类的加载过程

类的加载过程类的加载过程整体可以分为五个阶段:加载、验证、准备、解析、初始化,其中验证、准备和解析又被概括为链接。加载通过一个类的全限定名获取定义此类的二进制字节流;将这个字节流所代表的的静态存储结构转化为方法区的运行时数据结构;在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口;加载.class文件的方式从本地系统中直接加载;通过网络获取;从Zip压缩包中读取;运行时计算生成,使用最多的是:动态代理技术;由其他文件生成;从专

2020-06-28 13:25:49

Netty Reactor线程模型

前两篇博文分别介绍了Java 线程模型:BIO NIO和Reactor线程模型,本篇博文将介绍Reactor线程模型在Netty中的实际应用。Netty模型Netty模型的简单介绍Netty 主要基于主从 Reactors 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多个 Reactor。BossGroup 线程维护 Selector , 只关注 Accecpt;当接收到Accept事件,获取到对应的SocketChannel,封装成NIOScoketChannel并注.

2020-06-28 09:23:34

Reactor线程模型

线程模型基本介绍目前存在的线程模型有:传统I/O服务模型、Reactor模型。根据Reactor 的数量和处理资源池线程的数量不同,有3种典型的实现:单 Reactor 单线程、单 Reactor 多线程、主从 Reactor 多线程。Netty 线程模式(Netty 主要基于主从 Reactor 多线程模型做了一定的改进,其中主从 Reactor 多线程模型有多 个 Reactor)。传统I/O服务模型原理图色的框表示对象,蓝色的框表示线程,白色的框表示方法(API)模型特点采

2020-06-25 11:15:57

Java IO模型介绍:BIO、NIO、AIO

I/O模型I/O模型基本说明I/O模型的简单理解:就是用什么样的通道进行数据的发送和接受,很大程度上决定了程序通信的性能;Java共支持三种网络编程I/O模型:BIO、NIO、AIO;Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销;Java NIO:同步非阻塞,服务端实现模式为一个线程处理多个请求,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接的I/O请求就

2020-06-22 22:02:24

Pulsar configuration 介绍:ZooKeeper相关参数

Pulsar configuration本篇博文主要介绍Pulsar configuration中有关zookeeper的参数。ZookeeperZookeeper在Pulsar中扮演着重要的角色,主要用于处理各种必须的配置以及各组件间协调性相关的task;Pulsar中的默认配置文件为:conf/zookeeper.conf参数名含义默认值tickTime...

2020-03-04 22:22:56

Kafka源码阅读(二):Producer Metadata概述及源码分析

上一篇博文Kafka源码阅读(一):Kafka Producer整体架构概述和源码分析(一)介绍了Kafka 生产者发送消息的主要流程和计算分区等机制,接下来这篇博文将对Kafka更新Producer Metadata的机制进行讲解说明。Metadata什么是metadatametadata指Kafka集群的元数据,包含了Kafka集群的各种信息,例如如:集群中有哪些节点;集群中有...

2020-02-20 22:54:20

Kafka源码阅读(一):Kafka Producer整体架构概述及源码分析

整体架构线程        整个 Kafka 客户端由两个线程协调运行,即Main线程和Sender线程。        在Main线程中由KafkaProducer创建消息,然后通过Interceptor、Serializer和...

2020-02-20 22:51:39

Kafka消费者消费方式

consumer消费方式pull模式,consumer从Broker中主动拉取数据pull模式不足之处:如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数据。针对这一点,Kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有 数据可供消费,consumer 会等待一段时间之后再返回,这段时长即为 timeout。push模式,由Broker推送...

2020-02-04 21:19:42

Kafka生产者分区策略和数据可靠性保证

分区策略分区原因:方便集群扩展,每个Partition可以通过调整大小以适应它所在的机器,而一个 topic又可以由多个 Partition组成,因此整个集群就可以适应任意大小的数据。可以提高并发,分区之后就可以以Partition为单位读写。分区原则:我们需要将 producer 发送的数据封装成一个 ProducerRecord 对象。指明 partition 的情况下,直...

2020-02-04 19:57:10

Kafka工作流程及文件存储机制

Kafka工作流程Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的。topic 是逻辑上的概念,而 partition 是物理上的概念。每个partition都有对应的.log文件,该 log 文件中存储的就是 producer 生产的数据。producer生产的数据会发送给topic的每个partition,并追加到parti...

2020-02-04 15:52:07

Kafka基础架构

Kafka基础架构消息队列的两种模式1. 点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除)过程:producer将消息发送到queue中;consumer从queue中拉取并消费message;message从queue中删除特点:一个queue可以有多个consumer;一个message只会被一个consumer消费;2. 发布/订阅模式...

2020-02-03 21:50:37

手写spring核心原理Version3

上两篇博文手写spring核心原理Version1和手写spring核心原理Version2分别介绍了如何完成一个自动注入、以及如何用设计模式进行重构,接下来这篇将仿照SpringMVC对参数列表以及methodMapping进行重构。重构MyDispatcherServletimport javax.servlet.ServletConfig;import javax.servlet....

2019-11-27 22:33:51

手写spring核心原理Version2

上一篇博文(手写spring核心原理Version1)中粗略的实现了自动注入等功能,此篇博文主要在上一篇的基础之上对MyDispatcherServlet.java中的方法运用设计模式进行重构。重构MyDispatcherServletpackage com.xyz.demo.core;import com.xyz.demo.core.annotaion.MyAutowired;im...

2019-11-24 14:51:26

手写spring核心原理Version1

此篇博文主要通过一个简单的demo演示spring的核心原理,例如spring是如何根据@RequestMapping、@Autowired等注解进行路径匹配和自动注入的。自定义注解@MyAutowiredpackage com.xyz.demo.core.annotaion;import java.lang.annotation.*;@Target({ElementType.FI...

2019-11-23 22:19:52

powermock常用注解介绍及区别

@Mock和@InjectMocks区别@Mock创建一个假数据; @InjectMocks主动将已存在的mock对象注入到bean中, 按名称注入, 但注入失败不会抛出异常;※ 注意:你必须使用@RunWith(MockitoJUnitRunner.class)或Mockito.initMocks(this)来初始化这些mock并注入它们。Example@RunWith(Mockit...

2019-07-28 20:45:48

java 常量池及字节码文件的9大属性

常量池的基本结构java类所对应的常量池主要由常量池数量和常量池数组两部分组成,如下图所示,常量池数量紧跟在minor version后面,占2个字节。常量池数组则紧跟在常量池数量之后。常量池数组是一个类似数组的结构。这个数组是固化在字节码文件中的,由多个元素组成。与一般的数组概念不同,常量池数组中不同元素的类型、结构都不相同,长度也不相同。但是每一种元素的第一个数据都是一个u1类型,该字节...

2019-05-26 03:01:50

java class字节码概述

class 字节码概述每一个java类被编译后都会生成一个对应的.class字节码文件,要想研究JVM加载java类的原理,实现必须掌握java类被编译成的.class文件结构。下面从几个方面来描述字节码的组成格式。1. class文件构成基础在class字节码文家中,数据都是以二进制流的形式存储。这些字节流之间都严格按照规定的顺序排列,字节之间不存在任何空隙,对于超过8位的数据,将按照Bi...

2019-05-26 01:40:10

java中的native修饰符

今天偶然看代码,发现别人有这样写的方法,并且jar里面有几个dll文件,比较奇怪,于是把代码打开,发现如下写法。public native String GSMModemSMSReadAll(String s, int i);public native String GSMModemGetErrorMsg(String s);public native boolean GSMModemIsC...

2019-05-15 20:53:16

java反射机制详解

程序运行过程在讲解反射机制之前先简单看一下java程序的运行过程,如下图所示:java编译期将.java文件编译为.class字节码文件;ClassLoader将.class的字节码文件加载到code segment中;运行环境找到mian方法,并开始执行程序;程序运行过程会有很多.class文件被load到代码区,这些class文件并不是一次性被load完成的,而是在运行时被动态...

2019-05-15 20:25:44

代理模式之Cglib动态代理

Cglib动态代理前两篇博文静态代理和JDK动态代理,他们各有优缺点,JDK动态代理缺点:目标类必须实现的某个接口,如果某个类没有实现接口则不能生成代理对象;只能代理接口,要代理类需要使用第三方的CLIGB等类库;Cglib动态代理则没有对被代理对象必须实现接口的要求,cglib生成的代理类会继承被代理类,并在代理类中对代理方法进行强化处理(前置处理、后置处理等)。实例演示被代理...

2019-04-07 20:14:44

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。