自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

NullPointerException的博客

路漫漫其修远兮 吾将上下而求索

  • 博客(155)
  • 资源 (1)
  • 收藏
  • 关注

原创 Hive On Tez 进度条不显示问题修复

===========

2020-09-10 09:36:26 1799

原创 JVM:类的加载过程

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

2020-06-28 13:25:49 313

原创 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 300

原创 Reactor线程模型

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

2020-06-25 11:15:57 255

原创 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 413

翻译 Pulsar configuration 介绍:ZooKeeper相关参数

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

2020-03-04 22:22:56 1265

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

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

2020-02-20 22:54:20 819

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

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

2020-02-20 22:51:39 590

原创 Kafka消费者消费方式

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

2020-02-04 21:19:42 2102

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

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

2020-02-04 19:57:10 1191

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

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

2020-02-04 15:52:07 316

原创 Kafka基础架构

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

2020-02-03 21:50:37 1796

原创 手写spring核心原理Version3

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

2019-11-27 22:33:51 484 1

原创 手写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 406

原创 手写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 654 3

原创 powermock常用注解介绍及区别

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

2019-07-28 20:45:48 2048

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

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

2019-05-26 03:01:50 538

原创 java class字节码概述

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

2019-05-26 01:40:10 324

转载 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 273

原创 java反射机制详解

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

2019-05-15 20:25:44 493

原创 代理模式之Cglib动态代理

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

2019-04-07 20:14:44 727

原创 代理模式之JDK动态代理

JDK动态代理上一篇博文静态代理介绍了静态代理的简单实现,以及静态代理的缺点:代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。JDK动态代理的优点代理对象不需要实现接口,这样就不会有众多的代理类;利用JDK生成代理...

2019-04-07 18:00:59 434

原创 代理模式之静态代理

代理模式代理模式为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。从图中可以看出,代理接口(Subject)、代理类(ProxySubject)、委托类(RealSubject)形成一个“品”字结构。 根据代理类的生...

2019-04-07 14:57:19 227

原创 Spring AOP注解和切面表达式详解

AOP设计的初衷DRY:Don’t Repeat Yourself,减少重复代码;SoC:Separation of Concerns,关注分离;水平分离:展示层 --> 服务层 --> 持久层垂直分离:模块之间分离;切面分离:功能性需求与非功能性需求分离;使用AOP的好处集中处理某一关注点/横切逻辑可以很方便的添加/删除关注点侵入性少,增强代码可读性以...

2019-04-05 23:34:28 4595

原创 Spring Security权限控制源码分析

流程图类和接口介绍FilterSecurityInterceptor:是整个权限判断流程的入口,包含着请求的相关信息;AccessDecisionManager:是一个接口,有一个抽象实现(AbstractAccessDecisionManager)和三个具体实现(AffirmativeBased、ConsensusBased和UnanimousBased)AbstractAcces...

2019-03-30 22:47:53 1013 1

原创 Spring Security OAuth核心源码分析

流程图※:绿色的方块代表实体类;蓝色的方块代表接口(下方括号中的名称表示实际调用的实现类);流程介绍step1:客户端发起获取令牌的请求:/oauth/token;step2:TokenEndpoint是整个流程的入口,可理解为一个controller,用来处理获取令牌的请求即:/oauth/token请求;step3:ClientDetailService用来读取请求中client...

2019-03-30 17:52:15 580

原创 Effective Java第三章: 对所有对象都通用的方法

一、覆盖equals方法时遵守通用约定期望结果类的每个实例本质上都是惟一的;不关心类是否提供了“逻辑相等”的测试功能;超类已经覆盖了equals方法,从超类继承过来的行为对于子类也是合适的;类是私有的或者是包级私有的,可以确定它的equals方法永远不会被调用;覆盖equals方法时的通用约定自反性:对于任何非null的引用值x,x.equals(x)必须返回true;对称性...

2019-01-27 16:52:11 175

原创 Effective Java 第2章: 创建和销毁对象

一、用静态工厂方法代替构造器静态工厂方法与构造器相比有以下几个优点:静态工厂方法有名称;不必每次调用的时候都创建新的对象;可以返回原返回类型的任何子类型的对象;在创建参数化类型实例的时候没,静态工厂方法使得代码变得更加简洁;缺点:类如果不含有公有的或者受保护的构造器,就不能被子类化;静态工厂方法与其他的静态方法实际上并没有任何区别;静态工厂方法常用的名称:valueO...

2019-01-20 19:01:49 206

原创 Hadoop介绍

Hadoop概念Apache Hadoop是一款支持数据密集型分布式应用并以Apache 2.0许可协议发布的开源软件框架。Hadoop是一套开源的软件平台,利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理。Hadoop框架透明地为应用提供可靠性和数据移动,还提供了分布式文件系统,用以存储所有计算节点的数据,这为整个集群带来了非常高的带宽。MapReduce和分布式文件系...

2019-01-12 19:00:39 224

原创 Kubernets特性及概念介绍

Kubernets概述Kubernets是什么Kubernets是Google在2014年开源的一个容器集群管理系统,简称k8s;k8s用于容器化应用程序的部署,扩展和管理;k8s提供了容器编排、资源调度、弹性伸缩、部署管理和服务发现等一系列功能;k8s目标是让部署容器化应用简单高效;可以将k8s理解为一个容器平台、一个微服务平台、一个便携式平台;Kubernets特性自...

2019-01-05 23:27:46 581

原创 @JsonProperty和@SerializedName对比

问题在日常开发中经常需要将一个json格式的字符串转换成某个java对象,当json字符串中的字段跟java对象中定义的属性名不一致时,就会出现转换错误。将一个java对象转换成json格式的字符串,并且要求转换后的字符串中字段名跟原java对象中的属性名不一致。例子:1. 将json字符串转换成Java对象;2. 将java对象转换成指定的json字符串json格式的字符串St...

2018-12-30 18:31:50 4364

转载 HttpStatus状态码详解

1xx 消息这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。[4]这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。100 Continue服务器已经接收到请求头,并且客户端应继续发送请求...

2018-12-28 20:50:23 3820 2

原创 RabbitMQ学习笔记

RabbitMQ介绍       RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现;AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求较高的场景,对性能和吞吐量的要求还在其次。RabbitMQ高性能的原

2018-12-19 23:24:18 736

原创 RabbitMQ:死信队列DLX介绍及演示

DLX: Dead Letter Exchange       利用DLX,当消息在一个队列中变成死信(dead message:消息在该队列中没有消费者去消费)之后,它就会被重新publish到另一个Exchange中,这个Exchange就是DLX;死信队列和普通队列并没有区别,只是相关属性进行了设置;消息变成死信的几种情况消息被拒...

2018-12-17 22:23:15 635

原创 RabbitMQ:消费端限流

什么是消费端限流       当我们的RabbitMQ服务器上有大量未处理的消息时,消费端的客户端可能无法同时处理大量的消息,这时候就要对消费端进行限流,同时只接受一定数量的消息。如何限流       RabbitMQ提供了一种qos(服

2018-12-17 21:06:54 937

原创 RabbitMQ:Return消息机制

幂等性常见操作:唯一ID+指纹码机制,利用数据库主键去重好处:实现简单;坏处:高并发下有数据库写入的性能瓶颈;解决方案:利用ID进行分库分表进行算法路由;利用Redis原子性去重...

2018-12-17 20:36:36 546

原创 RabbitMQ:生产端和消费端的可靠性投递解决方案

消息如何保证100%的投递成功?什么是生产端的可靠性投递?保障消息的成功发出;保障MQ节点的成功接收;发送端收到MQ节点(Broker)确认应答;完善消息补偿机制;生产端可靠性投递常见解决方案消息落库,对消息状态进行打标;       将消息存入数据库,记录消息的状态。可以通

2018-12-16 20:34:42 1531

原创 RabbotMQ: Exchange四种模式介绍

Exchange是什么       Exchange就是交换机,用于接收消息,并将根据路由键(routing key)将详细转发到它所绑定的消息队列(queue);Exchange属性name:Exchange名称;type:Exchange类型,包括direct、topic、headers和fanout;Durabili

2018-12-16 00:36:59 2122 2

原创 AMQP协议模型和核心概念

AMQP高级消息队列协议定义:Advanced Message Queueing Protocol       是具有现代特征的二进制协议,是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计AMQP协议模型AMQP核心概念Server  &amp

2018-12-15 22:11:44 763

原创 @EntityListeners(AuditingEntityListener.class)介绍

@EntityListeners源码/** * Specifies the callback listener classes to be used for an * entity or mapped superclass. This annotation may be applied * to an entity class or mapped superclass. * * @s...

2018-12-03 20:26:39 19420

传智播客黑马JavaEE实战项目:宜立方商城

传智播客黑马JavaEE实战项目:宜立方商城;注册、登录、添加购物城、下订单、支付、搜索、菜单分类、后台管理、、、、

2018-09-22

空空如也

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

TA关注的人

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