自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CHENXY

终是庄周梦了蝶 你是恩赐也是劫

  • 博客(42)
  • 收藏
  • 关注

原创 【源码系列】Dubbo源码学习一:Hello,dubbo!

一、写在前面 毕业四年,就职两家公司,用的项目框架都是Dubbo,每次面试都会被问到框架的一些细节。而因为项目产品是由公司产品部门封装自研的,所以好多底层技术也不是很了解。并不打算全部读完了解完源码的每个细节,一是因为没那个水平,二是也会耗费很多时间。框架的学习不在于去学习源码写了啥,而在于学习思想以及解决实际中的问题。所以大概总结了一下常被问到的几个点,打算深入源码一探究竟,希望我不会被困难击败吧~加油~奥利给!二、环境搭建源码地址:https://github.com/apache/d..

2020-07-16 22:10:29 307 1

原创 【面试相关】202006面试总结

一、写在前面 Hello,你们好啊!没错时隔数月我又回来了!这次重新载着梦想再次起航,并且保证这次更新的时间久一些。虽然粉丝不多,但是感恩相遇,感谢支持。在过去的一段时间里,由于种种原因,停更了许久,虽然也有在学习,但是并没有输出什么。学习是一个持续输入与输出的过程,希望看到这篇文章的你们也可以一直坚持下去~ 来北京一年了,工作仍然不是我想要的。工作内容也好,薪水也好,都不是我想要的。我承认我似乎有些膨胀,但是不被嘲笑的梦想又何谈是梦想呢?于是时隔一年,这个月又重新开始刷新了简历寻找新的...

2020-06-28 22:24:34 786 1

原创 【Java多线程与并发】一:Java运行原理分析

这里写自定义目录标题写在前面1.JVM运行时数据区1.1class文件内容功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导...

2019-10-07 20:48:01 256

原创 数据结构与算法学习笔记一:复杂度分析

一、为什么要进行复杂度分析    数据结构是用来解决“快”和“省”的问题,也就是如何是代码运行更快以及如何节省更多的空间。因此执行效率在算法中就是一个非常重要的考核指标。时间、空间复杂度分析就是用来衡量一个算法代码的执行效率的指标。复杂度分析在数据结构和算法中占有核心的地位,你每使用一个数据结构和算法,都需要进行时间、空间复杂度分析,以确定最优方案。    在日常的测试和生产中,我们可以把...

2018-09-28 17:27:09 879

原创 【RabbitMQ】java.lang.NoClassDefFoundError: org/springframework/util/backoff/BackOff

问题描述:    Spring整合RabbitMQ时,配置了消费者监听之后启动报错如下:    解决方案:    目前项目中Spring版本为 3.2.8.RELEASE,spring-rabbit版本为1.7.5.RELEASE,经分析是因为版本不一致的原因导致。有两种方案要么对Spring进行升级,要么对spring-rabbit进行降级。因项目整体依赖Spring,故最后选择...

2018-09-19 10:09:08 2347

原创 Java常用的设计模式:抽象工厂

一、场景问题    举个生活中常见的例子-组装电脑,这里说的范围更小一些,组装CPU到主板上,CPU有各种各样的型号,主板也有各种各样的型号,CPU不同的型号有不同的针脚数目,如果针脚数目与主板的插口不兼容,那么将无法进行组装。对于装机工程师来说,他只负责配件的组装,而具体的选择哪种类型的CPU和主板,还是由客户来进行选择的。现在需要设计一个程序来把装机的过程,尤其是选择组装电脑配件的过程实现出来...

2018-07-13 11:11:40 3724

原创 Java编程思想学习笔记十四:类型信息

    运行时类型信息,可以使你在程序运行的时候发现和使用类型信息。一、为什么需要RTTI    RTTI(Run-Time-Type-Information),运行时类型信息。读《Java编程思想》这本书时是第一次知道这个词,于是先百度了一番,某乎上的讲解是这个概念最早是由本书的作者在《Think in C++》上提出的,实际上的意思与Java中的反射差不多。书中主要说的应用场景是在多态的过程中...

2018-07-11 18:18:13 783

原创 Java常用的设计模式:工厂方法

一、场景问题:    前文提到的Java常用的设计模式:简单工厂 最后说了一下存在的缺点:1.工厂类的实质是做选择创建,那么一旦工厂类不能正常工作,那么整个系统都将受到影响。2.违背了面向对象思想中的“开发-关闭”原则,所谓“开放-关闭”原则大体上指的是在面向对象的程序设计过程中,软件是开放扩展的,但是是关闭修改的。在简单工厂方法中,一旦扩展新增加新的产品,就必须要对工厂类做修改,这样大大的提高了...

2018-07-04 15:35:10 226

原创 Java常用的设计模式:简单工厂

    简单工厂不属于标准的设计模式,但是它非常的实用和简单,而且在一些思想上与标准的设计模式切合,所以暂且归为设计模式中。一、场景问题1.1接口回顾    接口是一种特殊的抽象类,与抽象类相比,接口中的所有方法都是抽象方法,所有的属性都是常量,也就是接口中只有方法的定义而没有任何方法的实现。    通常使用的接口的目的,是定义一个实现类的外观,用来约束实现类的行为。接口相当于一份契约,根据外部应...

2018-07-02 14:41:35 175

原创 【Websocket】Blocking message pending 10000 for BLOCKING

一、问题描述    最近学习了一下Websocket,然后使用它结合spring做了一个实施监控的页面(使用的是spring-websocket),功能是监控交易发生,当交易发生时主动推送给前端页面展示交易流水。测试的时候一个线程顺序批量执行接口没有什么问题,页面哗啦啦的显示很顺利。当启动两个线程以上之后跑了一会儿之后就宕掉了。日志报错“Blocking message pending 10000...

2018-06-28 14:45:25 2677

原创 【DataTable】关于实现DataTable后端分页过程中的一些问题总结

一、场景    公司新开发的一个web项目,项目中一个功能是从失败交易流水表中按日期查询失败的交易,以列表的形式展示出来。前端列表使用了DataTable,DataTable自带前端分页和后端分页。所谓前端分页就是一次性从数据库中查出所有数据返回给前端,前端自动进行分页。这种处理方式在数据量较小的情况下还可以,当数据量较大(具体数据量没有测试)会导致前端加载数据缓慢卡顿,同时因为后端一次性从数据库...

2018-06-21 12:01:25 7965 6

原创 Java编程思想学习笔记十三:字符串

    大量程序表明,字符串操作是程序设计中最常见的操作。一、不可变String    String对象是不可变的,每一个看似修改了String值的方法,实际上都是创建了一个全新的String对象。package com.chenxyt.java.practice;public class Immutable { public static String upCase(String s){ ...

2018-05-15 14:20:23 286

原创 Java编程思想学习笔记十二:通过异常处理错误

    发现错误的理想时机是在编译阶段,也就是程序在编码过程中发现错误,然而一些业务逻辑错误,编译器并不能一定会找到错误,余下的问题需要在程序运行期间解决,这就需要发生错误的地方能够准确的将错误信息传递给某个接收者,以便接收者知道如何正确的处理这个错误信息。    改进错误的机制在Java中尤为重要,Java使用异常来提供一致性的错误报告,使得程序构件可以与客户端代码可靠地沟通问题所在。本文学习如...

2018-05-07 14:28:57 258

原创 Java编程思想学习笔记十一:持有对象

    在前面的学习过程中,我们使用的都是固定数量的且生命周期已知的对象。而在一些情况中,我们可能需要不确定数量不确切类型的对象,这种创建一个单一的对象显然是不行的了。Java提供了多种支持,比如数组,数组可以保存一组基本数据类型。但是数组的大小是固定的,在更特殊的编程条件下,固定长度显然是不友好的,所以Java类库提供了一套相当完整的容器类来解决这个问题。我们也称作是集合类。本章优先学习常用的集...

2018-04-24 16:23:51 302

原创 【Zookeeper】Zookeeper源码环境搭建出现的问题

一、ant eclipse 时提示Connection reset    从GitHub下载下来的压缩包不是eclipse版本的工程,我们需要使用ant eclipse命令编译成eclipse版本的项目,运行过程提示Connection reset 是编译文件build.xml中的路径不支持下载了。修改源码路径下的build.xml文件修改前:<get src="https://downlo...

2018-04-12 09:49:20 2352

原创 【Apache Ant】Unsupported major.minor version 52.0

一、问题描述    在windows、jdk版本为1.7的环境下安装了Apache Ant最新版 apache-ant-1.10.3,配置完环境变量执行ant命令时报错Unsupported major.minor version 52.0    二、解决方案    经查,该问题是由于class的版本与jdk的版本不对应导致,版本对应关系如下:    JDK1.8 = 52    JDK1.7 =...

2018-04-11 19:07:28 416

原创 Java编程思想学习笔记十:内部类

一、创建内部类    将一个类定义在另一个类的内部,这就是内部类。内部类与组合是不同的概念。创建一个内部类:package com.chenxyt.java.test;public class Parcell { class Contents{ private int i = 11; public int value(){ return i; } } class Dest...

2018-04-11 11:39:51 363

原创 【Zookeeper】Unable to read additional data from client sessionid *, likely client has closed socket

一、问题描述    因为项目中使用到了Zookeeper,所以我自己找了些关于zk的资料学习了一下。在异步创建节点的过程中,抛出了如下问题:     异步创建节点的时候总是闪退,然后服务端报错 Unable to read additional data from client sessionid 0x162b246bfe50000, likely client has closed socket...

2018-04-11 09:27:53 14904

原创 JAVA编程思想学习笔记:1-9章总结

一、对象导论   面向对象编程的思想主要针对的是对象,Java把一切待解决的事物都抽象了出来做为对象,每一个种类的对象都有一个特定的类别,它们有共同的属性和行为。程序是对象的集合,每个程序都由对象组成,每个对象都可以由其它对象组成。对象的特性规定了这个对象能接收什么样的消息,相同类型的对象可以接收相同的消息。消息在对象中的传递是通过接口进行的,并且每个接受消息的对象都可以提供一个特定的服务。   ...

2018-04-02 19:54:54 230

原创 Java常用的设计模式:适配器模式

一、场景问题    先考虑一个生活场景的问题,小明有一个台式机,硬盘比较旧了,其它的都还好,所以小明打算换一个新的硬盘,一切准备就绪之后发现新的硬盘跟原来的电影不是同一个规格的接口,不能用到一起去,于是小明又买了个转接线,这个转接线的作用就是将新的硬盘接口与电源线口连接起来,这样就可以使用了。在上边这个例子中,转接线的作用就相当于一个适配器,用来协调连接两个接口不同的东西。再说一个生活的场景,比如...

2018-03-31 14:54:03 518 1

原创 Java常用的设计模式:单例模式

    我大概在脑中规划了一下自己的技术成长路线,包括从基本的编程语言到数据库、网络编程这些,其中设计模式是一块,因为我本人有大概两年的工作经验,所以多少了解一些常用的设计模式,这里借着《研磨设计模式》这本书系统的学习一下,也避免长期学习《Java编程思想》显得枯燥乏味。《Java编程思想》只是本人对基础知识的一个回归。同时也由于时间有限,短期只针对常用的设计模式进行学习研究。个人觉得《研磨设计模...

2018-03-29 17:14:07 560 2

原创 Java编程思想学习笔记九: 接口

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。这种机制在编程语言中并不通用,Java语言提供了关键字说明人们认为这些思想是重要的。还有另一个概念叫做抽象类,它是介于普通的类与接口之间的一个中庸之道。尽管在构造某些具有未实现方法的类时,你第一想到的可能是接口,但是抽象类仍旧是一种用于此目的的一种重要而必须的工具。因为你不可能总是使用纯接口。一、抽象类和抽象方法    在之前...

2018-03-29 16:32:07 271

原创 Java编程思想学习笔记八: 多态

一、再论向上转型    在第七章中我们说过,对象引用既可以作为它自己本身的类型使用,也可以作为它的基类型使用,这种把某个类型引用作为它的基类型使用的做法被称为向上转型。package com.chenxyt.java.practice;class Instrument{ public Instrument() { //--- } public void print(){ Syste...

2018-03-27 08:58:17 216

原创 Java编程思想学习笔记七:复用类

一、组合语法    代码复用是所有语言中都具有的一种特性,我们不必编写功能相同或相似的代码,只需要将原有的代码直接拿来或者是在原有代码的基础上进行改动即可。改动的方式有两种,一种是组合的方式,另一种是继承的方式。组合方式的使用很常见,前边的例子也用到过,就是比如说我们新建了一个类,在这个类中引用了其它类的实例对象,这种就是组合。类中的变量域是成员变量,正如第二章所说,当成员变量为基本类型时,比如i...

2018-03-26 09:09:30 245

原创 Java编程思想学习笔记六:访问权限控制

     一个优秀的程序员是通过不断的重构代码让自己的程序变得更加易用、可读和完善的。在重构修改的过程中,如果是一个类库编写人员,那么怎么样保证自己修改的部分不会影响到客户端编写人员(即使用这个类库的程序员)呢?同时也要避免他们对自己类库内部的程序进行改动。Java中提供了访问权限控制的概念,提供了三种不同级别的访问控制,访问开放程度由高到低依次为“public”、“protected”“priv...

2018-03-23 21:12:10 198

原创 Java编程思想学习笔记五:初始化与清理

一、用构造器确保初始化    Java中通过提供构造器,确保每个类的对象都可以得到初始化,构造器的形式为:className(){ //---}在类的内部定义的一个与类名相同的方法,该方法没有返回值,没有返回值并不是返回void,而是真正的无返回值。该方法在对象创建时会自动执行。package com.chenxyt.java.practice;public class Constru...

2018-03-22 20:52:31 213

原创 Java编程思想学习笔记四:控制执行流程

一、true和false    关系操作符构造的条件语句如“==”的返回值是true和false,Java中不允许将一个数字作为布尔值使用。二、if-else    if else语句与其它语言的相同,其中else是可选的。if else用来实现多种条件下的执行。三、迭代    while、do-while、for用来控制循环,有时候将他们称为迭代语句。语句会重复执行,直到起控制作用的布尔值得到“...

2018-03-22 08:58:01 173

原创 Java编程思想学习笔记三:操作符

一、更简单的打印语句    在第二章中使用了一个打印语句如下:System.out.println("Hello World");结合上一篇学习static的文章可知,打印语句如果在一个类中多次调用的时候,我们可以把这个语句抽出来写成静态方法,然后通过导入静态包的方式调用这个打印方法。test包下的Printer类:package com.chenxyt.java.test;public cla...

2018-03-21 09:32:18 190

原创 Java编程思想学习笔记二(1):static关键字的四种用法

    前文中说到了static关键字,在Java中这是一个很重要的关键字,它有很多的用法,并且在某些特定的情况下使用可以优化程序的性能。本文学习static关键字的应用场景。在这之前了解变量的类型,变量按作用域分为成员变量和局部变量,成员变量也就是全局变量,它是在类中声明的,不属于类中任何一个方法。而局部变量是在类中的方法体中声明的,作用域只是这个方法体。接下来说一下static的作用。一、修饰...

2018-03-13 22:35:49 515

原创 Java编程思想学习笔记二:一切都是对象

一、用引用操作对象    在Java中一切都是对象,但操纵标识符的是对象的一个“引用”。可以将这一情形想象是电视机与遥控器的关系。电视机是一个对象,遥控器是对象的引用,我们在房间里拿着遥控器不管在哪里都可以操控电视机对象。此外,脱离电视机对象,遥控器引用也是可以独立存在的。因此有如下代码:String s;这里只是创建了一个引用,并没有创建对象,如果此时向s发送消息的话,会报出运行时异常的错误,因...

2018-03-12 23:14:19 206

原创 Java编程思想学习笔记一:对象导论

一、抽象过程     1万物皆为对象:理论上讲,我们可以抽取一个待解决问题中的任何概念化构件(狗、建筑、服务)等,将其表示为程序中的对象。    2程序是对象的集合,它们通过发送消息来告知彼此所要做的。通俗来说,一个程序是一些对象的集合体,程序之间的通信实际是对象与对象之间的通信,要想进行通信,就必须要发送一条消息。更确切的说,我们可以把消息理解为是对对象的某个特定方法的请求。    3每个对象都...

2018-03-01 08:57:41 224

原创 RabbitMQ学习笔记十:RabbitMQ与Spring 的整合

一、概述    前面的文章中整理了常规项目下RabbitMQ实现各种通用消息队列的方式,一般的企业级项目,通常使用Spring框架来实现项目,本文主要讲述RabbitMQ与Spring的集成,通过一个简单的示例演示集成。   示例:通过Spring管理项目,实现RabbitMQ的fanout类型交换机的消息队列,一个生产者Producer,一个fanout类型的交换机exchangeTest,两个...

2018-02-24 09:01:16 349

原创 RabbitMQ学习笔记九:RabbitMQ实现RPC(远程过程调用)

一、概述    前面几篇文章讲述的内容都是单向的消息传递,生产者将消息发送给消费者之后就不再管后续的业务处理了。实际业务中,有的时候我们还需要等待消费者返回结果给我们,或者是说我们需要消费者上的一个功能、一个方法或是一个接口返回给我们相应的值,而往往大型的系统软件,生产者跟消费者之间都是相互独立的两个系统,部署在两个不同的电脑上,不能通过直接对象.方法的形式获取想要的结果,这时候我们就需要用到

2018-02-07 19:10:23 3558 1

原创 RabbitMQ学习笔记八:RabbitMQ的消息确认

一、概述    前文说到RabbitMQ的交换机、队列、消息的持久化并不能100%的保证消息不会丢失。首先从生产者端,持久化的消息在RabbitMQ同步到磁盘之前,还需要一段时间,这个时间很短,但是不容忽视。假如此时服务器宕机了,那么消息就丢失了。这种发生在生产者上的消息丢失我们可以使用镜像队列和事务机制来保证数据的完整性。其次是消费者端,假如消费者拿到消息还未处理,发生异常而崩溃,此时这条消

2018-02-07 09:19:54 1970 1

原创 RabbitMQ学习笔记七:交换机、队列、消息的持久化

一、概述    在生产过程中,难免会发生服务器宕机的事情,RabbitMQ也不例外,可能由于某种特殊情况下的异常而导致RabbitMQ宕机从而重启,那么这个时候对于消息队列里的数据,包括交换机、队列以及队列中存在消息恢复就显得尤为重要了。RabbitMQ本身带有持久化机制,包括交换机、队列以及消息的持久化。持久化的主要机制就是将信息写入磁盘,当RabbtiMQ服务宕机重启后,从磁盘中读取存入的

2018-02-06 09:14:33 2782 1

原创 RabbitMQ学习笔记六:Exchange的学习(4)

一、概述    前面三篇文章讲述了RabbitMQ 常用的三种Exchange类型,这篇文章学习一下第四种不常用的Exchange类型:Headers这种类型与topic类型类似,只不过不是匹配routingKeys,是匹配AMQP协议中的Header,Header是一个HashTable类型的键值对,而routingKey是String类型的字符串。功能与Topic相同,消息发送者绑定消息的

2018-02-01 17:04:53 258

原创 RabbitMQ学习笔记五:Exchange的学习(3)

一、概述    前两篇文章中讲述了全部匹配和直接匹配两种交换机Exchange的类型,这篇文章讲述第三种模糊匹配Topic类型的交换机。Topic类型的交换机,支持路由规则routingKey模糊匹配,匹配符号有‘#’全部一个或多个单词,‘*’一个单词。    示例:假设我们有两条队列,队列的绑定规则不确定,只有部分是确定的,也就是我们会接收包含这确定路由规则的信息。    实现方

2018-01-27 12:05:05 230

原创 RabbitMQ学习笔记四:Exchange的学习(2)

一、概述    前一篇文章中,我们了解了交换机的四种类型,并使用了一个广播式发送消息的示例学习了fanout类型的交换机,这篇文章继续学习direct类型的交换机。direct类型的交换机可以实现不同的消息发送到不同的队列中去。    示例场景:在绑定同一个交换机的两个队列中,一个队列负责接收生产者发送的奇数消息,一个队列负责接收生产者发送的偶数消息,当发送的消息为10的整数倍时,两个队列

2018-01-25 11:21:11 399 1

原创 RabbitMQ学习笔记三:Exchange的学习(1)

一、概述    上一篇文章中讲述了一个简单的消息传递模型,消息从生产者发送到消费者再发送到队列,实际的工作中生产者不知道要把消息发送给哪个队列,可能有多个消费者要生产者的消息,也可能有的消费者不需要生产者的全部消息,比如日志系统,一个消费者需要info级别的信息,另一个消费者需要error和info级别的信息,这时候我们就用到了交换机,生产者把消息发送到交换机,交换机像是一个消息中转站,一边接

2018-01-23 17:03:35 309 2

原创 RabbitMQ学习笔记二:Hello World

一、流程概述    本文主要实现RabbitMQ在JAVA项目中的入门级别应用,即实现消息生成者发送一条‘’Hello World“ 消息,消费者收到这条信息并打印出来。消息的传递流程是“生产者-队列-消费者”,没有经过交换机,如图:P:消息生产者QUEUE:队列X:消息接收者二、源代码    我这里用的是一个maven项目,首先要在pom.xml中引入RabbitMq

2018-01-22 14:03:35 988 1

空空如也

空空如也

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

TA关注的人

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