自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (5)
  • 收藏
  • 关注

原创 延迟队列两种实现方式

延迟队列在我们工作中经常用到。比较常见的例子有订单发货后半个小时通知用户,用户在系统中定义了任务的执行周期,或者定时执行等场景。比较成熟的开源系统有小海豚(dolphinscheduler),目前可支持百万级的任务调度。公司级的调度或者数仓的任务调度可以在其基础上进行二次开发,而且开源给apache。实现原理思考针对用户设置的执行周期,我们可能想到两种实现方式。可以主动扫描或者被动通知。主...

2021-12-05 17:05:00 82

原创 ES 添加字段默认值

业务背景当我们在使用多维度检索时,mysql显然已经不能满足我的的使用场景,尤其涉及到表之间的join且数据量较大时,mysql的查询性能显得捉襟见肘。这时候ES的多维检索功能就派上用场了。我们可以将两张或者多张业务表,制作成一个比较宽的索引,监听业务的binlog,并将数据保存到ES中。这样就可以快速的支持业务检索了。业务需求通常情况下,会使用ES的动态模板,之后添加其他的维度过滤会...

2021-11-21 22:18:00 476

原创 ES集群启动流程

ES集群是主从模式的,其启动的过程主要包括主Master选举,集群元数据选举,索引主分片选取和副本分片选取。其主要过程如下:1 Master选举集群启动的第一件事就是选取Master节点,选取的时间点为当集群启动的备选master节点过半时,开始集群的选举,这一点和zookeeper是类似的。例如集群有7个节点,有5个节点设置了node.master:true 当这5个备选节点中有超过dis...

2021-06-26 22:37:00 115

原创 ES 系统模型

ES是一个近实时的查询系统,基于其倒排索引的结构,使得其在根据文档值索引文档相当快,在此基础上,多节点,多分片,多副本等设计提高了整个系统的相应速度的同时,也保证了数据的高可用。下面我们介绍一下ES的存储结构。Node节点一般指的是我们部署集群的服务器,一个服务器我们认为是一个节点。这些节点中会存在一个主节点,是通过选举出来的,关于master选举,主要思想还是基于高可用的的分布式选举。内容...

2021-06-24 14:13:00 81

原创 HBase 体系结构

HBase 的系统模型原文连接简介NoSQLHbase 是一种 NoSQL 数据库,其实它更是一个分布式数据库,从技术上讲,相较于数据库,HBase更像是一个数据存储。因为HBase缺少很多关系型数据库的特性,例如有类型的列,耳机索引,触发器,高级的查询语句。但是HBase提供了很多支持线性及模块化的扩展。HBase可以通过增加RegionServer来扩展集群。如果一个集群的Regi...

2021-06-20 15:26:00 63

原创 HBase 数据模型

HBase 数据模型主要由table,row,column,timestamp,cell几个元素构成。table表,一个表可能包含多行数据,在HBase中,表其实是一个分布式的表,真正的数据是存储在Region中的,Region可以理解为分片,每个表会包含多个分片,分别由不同的RegionServer管理。每个分片会有多个副本,以实现分片的高可用。row行,一行数据包含唯一的rowkey...

2021-06-19 21:16:00 49

原创 引用中间件导致的OOM问题调查

一次使用中间件引发的OOM调查描述问题在上一次上线完成后,线上的系统在运行几天后就会收到FullGC频繁的告警,而且每台服务都会告警,万能的重启可以解决问题,但不是根本办法,肯定是上一期的代码出现了内存泄漏,在预发环境上,由于操作次数较少,这个问题很难暴露。于是dump 线上的内存,用JProfiler对hprof 文件进行了分析分析及解决过程分析文件使用jprofiler打开 dum...

2021-06-07 09:41:00 43

原创 BeanDefinition注册逻辑解析

//调用:BeanDefinitionReaderUtils.registerBeanDefinition//最终实现:org.springframework.beans.factory.support.DefaultListableBeanFactory#registerBeanDefinitionpublic void registerBeanDefinition(String bean...

2021-05-18 23:46:00 71

原创 spring xml 解析bean配置文件为beanDefinition过程

public AbstractBeanDefinition parseBeanDefinitionAttributes(Element ele, String beanName, @Nullable BeanDefinition containingBean, AbstractBeanDefinition bd) { // https://blog.csdn.net/ZixiangLi...

2021-05-15 21:56:00 50

原创 ES 选举Master节点机制

ES采用主从模式架构,Master节点的选取对整个集群的可用性及数据一致性都起到了关键作用,下面介绍一下ES选取主节点的流程(版本6.1)整体流程选举临时Master节点,判断如果本节当选,则等待选票超过半数,成为真正的Master节点,如果本节点不是临时Master节点,则尝试加入集群,加入集群其实是投票的过程,整体流程如下:1 选取临时节点1.1 ping所有节点,获取节点列表ful...

2021-02-21 16:43:00 115

原创 CountDownLatch与CyclicBarrier对比

在并发编程时总会遇到一种这样的场景:等待一系列任务做完后,才能开始做某个任务。当遇到这种场景时,两个类cross our mind:CountDownLatch和CyclicBarrier。下面从使用方法和内部实现原理分别对这两个类做出介绍。使用方法CountDownLatch任务class MyThread extends Thread{ private CountDownL...

2018-11-27 22:35:00 41

原创 ArrayBlockingQueue与LinkedBlockingQueue对比

ps:在下文中分别以Array代表ArrayBlockingQueue,Link代表LinkedBlockingQueue,下文中不再说明。Array和Link在并发场景中经常使用,他们的共同作用就是实现线程安全队列。下面对这两种队列的实现进行对比分析。底层实现ArrayBlockingQueue底层基于数组实现,在对象创建时需要指定数组大小。在构建对象时,已经创建了数组。所以使用Ar...

2018-11-08 11:30:00 41

原创 手写HashMap

根据自己对hashMap的理解,基于数组加链表实现了一个HashMap。下面给出源码:https://github.com/XiaoheXu/hotchpotch/blob/master/src/main/java/com/chris/java/collections/HashMap.java单元测试源码:https://github.com/XiaoheXu/hotchpotch/blob...

2018-08-08 13:38:00 35

原创 volatile关键字解析

volatile 保证此变量对所有线程的可见性。这个可见性是指,当一个线程读取volatile修饰的变量时,永远读取的都是最后一个线程写回主内存的最新值。某个线程在读取数据之后,另一个线程对变量值做了修改,这个线程是不知道的,这就导致当前线程读取的值是过期的,当前线程将过期的数据经过计算写回主内存时,就会出现问题。看下面代码:public class VolatileTest { p...

2018-07-10 19:26:00 44

原创 两个栈实现队列——优化版

这个是一个很常见的算法,在剑指offer中有详细的讲解,在这里提供一种优化的实现。该实现的优点是不需要每次在数据出列时,将数据copy到另一个堆栈中。并写了其对应的单元测试。主要思想主要实现是在类中定义了两个全局变量,标明当前队列中两个栈的状态,isMain 表示现在数据存储在哪个栈中。inOrder 表示现在最早加入队列的元素是否在栈顶。在向对列中添加顺序时,如果inOrder ...

2018-06-28 22:26:00 34

原创 RabbitMQ Authentication failed

当我们兴致勃勃的安装完erlang和rabbitMQ。准备爽一下的时候,发现在执行一些rabbitmqctl list_users命令时总是报错。报错信息如下:看了图片以后会发现授权失败的提示信息。再往下看就会看到当前rabbitMQ的Erlang cookies hash。这个报错信息是因为rabbitmq使用的erlang.cookies和erlang本身运行环境使用的cookies不...

2018-06-10 17:29:00 113

原创 JVM中数组长度限制

发现问题当写下这行代码时,程序会注定运行失败。String strs[] = new String[Integer.MAX_VALUE];错误信息:java.lang.OutOfMemoryError: Requested array size exceeds VM limit.而且在jdk源码中总会看到类似这样的定义:/** * The maximum size of ar...

2018-06-10 14:14:00 50

原创 Vector源码解析

简介Vector 看上去想一个可增长的数组,可以使用索引访问。他的size随着添加或删除item可大可小。Vector为了优化存储,保存着capacity和capacityIncrement两个变量。capacity最小为vector当前的大小。一般比vector的size要大,当有有数据添加到vector时,vector的大小以capacityIncrement的整数倍增加。vector的...

2018-06-10 12:55:00 39

原创 RabbitMQ 入门

RabbitMQ作为应用程序之间通信的工具,越来越受欢迎,下面结合介绍一下RabbitMQ中一些简单的概念。建议初学者可以看一下RabbitMQ官方教程和官方在GitHub上提供的样例代码。几个重要概念生产者生产者也叫客户端,不是RabbitMQ的一部分,他创建消息,并将消息发送到给消息代理RabbitMQ。消息主要分为两部分:有效载荷和标签。有效载荷为要传输的数据,标签用于标明一个交换器...

2018-06-03 21:31:00 34

原创 模板设计模式(Template Design Pattern)

如果说算法,数据结构是编码术的层面,那么设计模式则是编码中的道。定义模板设计模式,定义一组算法的框架,这些算法的步骤大致相同。而将这些算法中不同的步骤延迟到子类中实现。例子我们在日常生活中使用的料理机时,先将原材料经过初步处理(打豆浆,需要泡豆子;榨果汁,需要提前将水果洗好),然后打开料理机的盖子打开,将原材料放进去,打开料理机开关完成粉碎,然后过滤,得到我们想要的果汁(或豆浆)。将整个...

2018-05-17 21:29:00 36

原创 代理模式实现

最近在看java的反射,看着看着就看到了jdk中动态代理的实现,于是将代理的知识点在这里介绍一下。在设计模式中有一种模式就是代理模式,它的主要作用是创建一个对象的代理,来控制对该对象的访问。本章节不深入讨论代理设计模式,而是介绍其两种实现方式:静态代理、动态代理。简介对于代理模式,我们首先要明白其中包含的角色:抽象角色:一般为接口,定义需要实现的业务方法。具体角色:接口的具体实现类,定...

2018-04-13 18:13:00 20

原创 Spring数据转换(三)-- WebBindingInitializer

如果想使用全局范围的自定义编辑器,可以使用WebBindingInitializer接口,并在该类中注册自定义编译器。public class DateBindingInitializer implements WebBindingInitializer { @Override public void initBinder(WebDataBinder binder, WebRequest ...

2018-03-12 20:54:00 26

原创 Spring数据转换(二)-- @InitBinder

Spring支持Jdk提供的PropertyEditor实现数据类型的转换。相比于Spring提供的数据转换,PropertyEditor的使用相对简单,不需要在xml文件中配置什么。首先继承PropertyEditorSupport实现其中的setAsText方法public class DateEditor extends PropertyEditorSupport { // 将传如的...

2018-03-12 20:44:00 26

原创 Spring数据转换(一)--ConversionService

一般情况下MVC中的V在用户的客户端,而C则在服务端,当客户端向服务端提交数据时,不能再以java中的对象形式进行传输了,这时候就需要序列化和反序列化来帮助实现了。in this blog, 我们着重介绍一下springMVC中的数据转换。ConversionService是类型转换的核心接口,而ConversionServiceFactoryBean提供了一个创建ConversionServi...

2018-03-12 20:32:00 98

原创 SpringMVC 国际化

SpringMVC 国际化作为当前比较流行的MVC框架,SpringMVC也支持国际化。国际化说白了就是可以设置不同的语言。Spring 国际化的步骤给系统定义国际化的资源文件。输出国际化,这需要两点的支持,1,在视图输出界面使用SpringMVC的标签库 spring:message2,在Controller的处理方法中,进行相应的处理。配置及编码springmvc...

2018-03-07 20:53:00 30

原创 SpringMVC 注解详解

spring mvc 中有很多的注解,每个注解都有自己的功能,下面我们就对spring mvc中的注解一一作出介绍。关于spring的注解还没有总结,请等待后续blog更新。@controllerorg.springframework.stereotype.Controller注解类型用于指示当前类是一个控制器。 Spring使用扫描机制查找应用程序中所有基于注解的控制器类,分发器会扫描使用...

2018-03-04 16:39:00 31

原创 Spring对事务的支持

简介springMVC中对事务的支持是通过在service层的类上标注 @Transactional实现的。在标注时有两个参数isolation和propagation。下面对这两个参数做具体介绍。isolation 事务隔离级别springmvc在 org.springframework.transaction.annotation.Isolation 定义了事务的隔离级别。DEF...

2018-02-23 20:32:00 23

原创 MappedByteBuffer 存储long

val folder = TemporaryFolder()folder.create()val file = folder.newFile("test.dat")// 创建一个20字节容量的MappedByteBufferval buffer = RandomAccessFile(file,"rw") .channel.map(FileChannel.MapMode.R...

2018-02-09 11:07:00 25

原创 Springmvc 配置--applicationContext.xml配置

<!--spring启动时会自动扫描这些包作为bean注入到容器中--><mybatis:scan base-package="com.chris.dao"/><!--使用PropertyoverrideConfigurer后处理器加载数据源参数--><context:property-override location="classpath:db...

2018-02-06 20:12:00 23

原创 springmvc配置--springmvc-config.xml

先将springmvc-config整个文件列出<context:component-scan base-package="com.chris.controller"/><mvc:annotation-driven/><mvc:default-servlet-handler/><!-- 权限校验器,定义了处理所有的请求 -->&lt...

2018-02-06 08:54:00 40

原创 Springmvc 配置--web.xml配置

先将配置文件内容列出:<!-- 配置spring 核心监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <...

2018-02-04 17:34:00 32

原创 LinkedList 源码解读

简介LinkedList 是一个双向链表,他实现了List和Deque(双向队列,既有队列的性质,又有栈的性质)。LinkedList的实现也是非线程安全的,如果有多个线程访问队列,只是读取链表的内容没有关系,当有其中的一个线程修改了list的结构时,在代码中必须保证同步。在链表中添加和删除元素都会引起链表结构的改变,只有修改某个节点的值不会引起结构改变。如果没有保证线程同步的对象,那么可以使...

2018-02-04 10:15:00 20

原创 Linux关闭jetty服务器脚本

Linux 停止与启动服务器在日常的开发中,我们经常需要停止tomcat或jetty服务器进行一些操作后,然后重新启动服务器。下面即为停止jetty服务器的一段脚本。我们通过脚本来理解一下这里面的脚本#!/bin/bashpidlist=`ps -ef|grep start.jar|grep -v "grep"|awk '{print $2}'`if [ "$pidlist" = ""...

2018-01-31 13:58:00 75

原创 TreeMap 源码解读

TreeMap下文中提到的比较大小,>0,<0 都是指key用比较器比较大小简介TreeMap是一个有序的Map,是基于红黑树实现的。排序根据Map创建时传入的Comaprable或Comparator实现排序,如果没有传,则默认按插入数据的顺序。TreeMap 的get,containsKey,get,put,remove 操作使用的时间为log(n),因为每次查找都是从树...

2018-01-30 19:52:00 18

原创 LinkedHashMap 源码解读

1 结构简介他继承自hashMap,在hashMap的基础上添加了一个双向链表的结构。双向链表决定迭代顺序 (迭代顺序在下文中具体介绍)。LinkedHashMap 的add,contains,remove的时间复杂度为O(1),但是性能比HashMap稍差,因为在其内部需要维护链表。迭代器迭代全部元素时,需要的时间正比于size(而HashMap正比于capacity) 性能稍优于Hash...

2018-01-13 16:43:00 28

原创 HashTable 源码解读

很多人都知道HashTable与HashMap的关系,HashTable是线程安全的,HashMap是非线程安全的。在介绍完HashMap之后,趁热介绍一下HashTable。在HashTable中没有像HashMap中那么多关于数据结构的内容。HashTable是线程安全的,因为其源码的方法里都带有synchronized,但是效率不高,如果想使用高性能的Hash结构,建议使用java.uti...

2018-01-05 20:46:00 37

原创 MappedByteBuffer文件句柄释放问题

问题描述现在很多java代码中都会用到内存映射的概念。文件映射的方式比输入输出流的方式快很多。但是在使用的过程中,正常地调用了FileChannel的force和close方法后,重命名文件或删除文件还会失败。主要原因还是文件的句柄没有释放。问题分析及解决文件句柄如果被持有,就相当于jvm虚拟机中有一个指向文件的指针,所以重命名文件和删除文件都会导致失败。而MappedByteBuffer...

2017-12-09 12:32:00 93

原创 HashMap源码解读

HashMap通常使用链地址方法存储,但是当链的长度太大(大于8)时,这个链就会转换为红黑树,类似java.util.TeeMap。大部分情况下使用链表,但检查到节点为树节点时,也会使用树。树状的链表可以像其他链表一样使用和遍历,但是如果HashMap中冲突严重的情况下,树状的链表查找更快。HashMap中的链表多以单链表为主,查找当前链表是否是树一般会造成延迟。树链表按hashCode的值排...

2017-12-02 09:35:00 43

原创 Java 对象创建过程

对象创建在语言层面,创建一个对象通常仅一个new关键字就可以解决了,但是在虚拟机中,对象的创建要经过一个复杂的过程。方法区中的常量池当虚拟机遇到一个new关键字时,首先去方法区中的常量池中找有没有这个类的符号引用,并检查这个符号代表的类是否已经被加载、解析和初始化过,如果没有先执行类的加载过程。堆内存类加载完成后,接下来在虚拟机中的堆上划分出一块内存,存储类的对象(大小在类加载完成后,...

2017-11-26 23:19:00 27

原创 java 虚拟机内存介绍

已经入行快有两年了,然而没有认真看过java虚拟机内存的介绍,下面把自己看的关于java虚拟机内存的介绍写下来,分享给大家。java 虚拟机在运行时将内存分为几个区域,分别为程序记数区,java虚拟机栈,本地方法栈,java堆,方法区,运行常量池。此外还有一个叫做直接内存的区域,虽然不是java虚拟机的一部分,但是也非常重要。程序计数器顾名思义就是记录当前线程执行的字节码的行号,由于jav...

2017-11-16 22:08:00 27

自己动手写爬虫完整代码

自己动手写代码完整源码

2017-03-08

数据结构 严蔚敏

数据结构,内置详细代码,看后收获颇丰!你一定会喜欢的。

2015-03-16

Java jdk api 1.7 api

很好的一个编程工具,不管对已初学者还是编程高手,Java jdk api1.7 是你正确的选择!

2014-12-05

名企2012面试题.rar

各名企 真题,各名企 真题,各名企 真题,各名企 真题,各名企 真题,

2014-09-14

空空如也

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

TA关注的人

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