自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴阳春的博客

吴阳春的博客

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

原创 项目中的常用注解(二)

之前对项目中常用注解有过一次整理项目中的常用注解,这里继续补充一下。供自己和有需要的小伙伴查漏补缺。

2020-07-02 14:38:21 246

原创 JVM优化--优化gc

什么时候需要排查gc问题我们遇到什么样的现象会怀疑gc有问题,进而优化呢?gc问题大体上可以分为两类:内存溢出、gc不健康。内存溢出一般会借助dump文件进行查看,设置jvm参数-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/system/error.dump可以在发生oom时给出dump信息。有了dump信息可以使用MAT,Jprofile,jvisualvm 进行排查。gc不健康主要表现在这么几个方面:young gc频

2020-06-15 11:16:07 2024

原创 RocketMQ问答

文章目录一、为什么要使用MQ?我们系统中如何使用MQ的?为什么用他?介绍一下RocketMQ。二、RocketMQ的架构是怎么样的?引申1:RocketMQ如何做到高可用?引申2:RocketMQ如何保证消息不被重复消费?引申3:如何保证消息的可靠传输?引申4:为什么是NameServer而不是zookeeper?引申5:RocketMQ的消息消费模式和消息传输模式。三、RocketMQ工作的流程...

2019-10-28 14:20:01 341

原创 ES基础入门基本查询语句

最近由于项目中使用ES,对照《Elasticsearch: 权威指南》进行学习,将一些知识进行整理总结。##插入一条记录PUT /megacorp/employee/1{ "first_name" : "John", "last_name" : "Smith", "age" : 25, "about" : "I love to go ...

2019-08-22 16:06:15 4099

原创 远程调试的正确姿势

目前测试环境开启了远程调试,但是很多小伙伴不清楚远程调试的正确姿势,容易影响其他人对于测试环境的使用,更严重的可能会导致服务不可用。这里讲一下我们了解到的远程调试正确姿势,供小伙伴们参考。一、远程调试的开启1)Tomcat工程是在tomcat所在目录下的bin/startup.bat中,加入SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava....

2019-08-19 11:00:00 2065

原创 概要设计的必要性及写法

1.1.文档的重要性很多小伙伴在需求、开发、测试阶段不注重文档,认为这耽误时间、画蛇添足。实际上文档对于软件行业是十分重要的。软件的定义:软件是包括程序、数据及其相关文档的完整集合。从这个定义中我们能够体会到文档的重要性。很多小伙伴常说要对线上数据保持敬畏,对线上程序保持敬畏,同样的,我们也要对文档保持敬畏,千万不能轻视他。往小里说,文档代表了传承与积淀。我们在抱怨前辈没有留下足够的文档、前...

2019-05-24 15:00:28 5864 1

原创 RocketMQ中的路由中心NameServer

RocketMQ的路由中心采用了自研的NameServer,提供了路由管理、服务注册、服务发现的功能。NameServer集群间互不通信。先简单了解一下这三种能力的实现方式,后面会有源码分析。路由管理:通过配置文件灵活加载配置。服务注册:Broker在启动时向所有的NameServer心跳语句,每隔30S向所有NameServer发起心跳包。NameServer收到心跳包后更新缓存。Name...

2019-05-07 18:30:07 4923

原创 RocketMQ中的顺序消息

我们在项目开发过程中,有需要使用RocketMQ顺序消息的场景,该如何使用呢?顺序消息的原理是怎样的呢?本文进行了一些探讨。一、顺序消息的定义顺序消息(FIFO:First Input First Output)是一种严格按照顺序进行发布和消费的消息类型。要求消息的发布和消息消费都按照顺序进行。二、顺序消息的设计在探讨RocketMQ中的普通消息的实现之前,我们有必要了解一下顺序消息的设计...

2019-04-14 15:18:14 5478 1

原创 关于java NIO的探讨

现在使用NIO的场景越来越多,很多技术框架或多或少的使用NIO技术,但是我对其一直没有深入了解过,最近对其做了一些总结,部分观点为个人观点,如有偏颇请您指正。本文主要想回答这样几个问题:什么是IO?什么是IO操作?什么是NIO?什么是java中的NIO?我先说下我的理解,下文进行分析。NIO相关概念的定义**I/O:**I/O即输入/输出(input/output),输入输出的对象可以是磁盘...

2019-03-27 20:57:41 337

原创 关于java克隆的探讨

在做项目的过程中踩了一个深克隆浅克隆的坑,利用闲暇时间将克隆相关的知识进行了一下总结。其中夹杂了一些个人的思考,部分结论可能存在问题,请大家指正。什么是克隆什么的克隆,克隆是否等于复制?个人观点:1、狭义的克隆指Object类中的clone()方法,创建并返回此对象的一个复制。基于此定义,基本类型的复制不属于克隆,不实现clone()方法来复制对象也不属于克隆。2、广义的克隆等同于复制,...

2019-02-27 22:21:46 1782 1

原创 JVM知识整理

对JVM的知识用脑图进行了整理 JVM

2018-07-24 19:49:17 189

原创 设计模式整理

用百度脑图对常用设计模式进行了整理,在github上对这几种设计模式进行了代码样例实现。github地址 脑图地址

2018-07-24 19:47:45 175

原创 java基础

java基础整理了java几个面试比较长问的知识点,做成了脑图,查漏补缺。

2018-07-24 14:54:44 193

原创 java多线程整理

java多线程整理利用项目闲暇时间整理了一份java多线程的脑图,还有不完善的地方,在以后的工作中再补充。 脑图地址

2018-07-23 20:45:58 262

原创 缓存

缓存利用项目闲暇时间,对缓存知识进行了一次梳理,整理成了脑图,这里配合脑图进行一下说明。 脑图:缓存知识点整理 [TOC]缓存简介缓存的本质是让数据更接近使用者,如何设计缓存、哪些数据适合进行缓存、缓存的方式、缓存的回收策略都是我们需要考量的点。java应用缓存http缓存redis缓存数据库缓存mybatis缓存nginx缓存...

2018-07-18 16:53:01 870 1

原创 git常用指令

1、创建版本库:git init 2、提交文件://将文件提交到暂存区git add 文件名 //将暂存区内容提交到当前分支git commit -m "提交描述" 3、查看历史记录://查看历史记录git log //单行显示历史记录,界面更友好 git log --pretty=oneline...

2018-07-10 23:34:38 598

原创 分布式系统中生成全局唯一ID的方法

阅读了这篇文章而后总结了下我们系统中全局唯一ID的生成方法。 http://www.cnblogs.com/heyuquan/archive/2013/08/16/global-guid-identity-maxId.html主键ID采用UUID,只作为唯一性标识。 部分业务表需要有业务No的,我们采用以下方法生成唯一ID: 从redis中用lpop指令取指定key值的数据。(lpop:移除并

2017-12-04 16:00:16 600

原创 项目中的常用注解

1、@SuppressWarnings 作用:用于抑制编译器产生告警 用法:@SuppressWarnings(“unchecked”)、@SuppressWarnings(“static-access”)等2、@Autowired 作用:完成自动装配,可以作用于类成员变量、方法及构造函数上。 用法:当扫描到@Autowired时,会自动在容器中查找对应的bean,并装配给该对象的属性。

2017-11-21 20:06:14 922

原创 CAP理论与BASE理论

CAP理论:一个分布式系统中,不可能同时满足C、A、P这三个基本需求,最多只能满足其中的两项。 C:Consistency 一致性(始终一致) A:Availability 可用性(始终可用) P:Partition tolerance分区容错性(网络分区故障不影响整体服务)BASE理论:是CAP理论的演化,即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终

2017-11-21 11:13:24 406

原创 JVM(9)编译器与编译优化

前端编译器:java -> class 后端编译器:class -> 机器码class文件生成过程: 1、解析与填充符号表。 2、处理注解。 3、分析生成字节码。前期优化: 前期的优化主要靠语法糖来实现,包括: 1、泛型与类型擦除。 2、自动装箱、拆箱、遍历循环。 3、条件编译。晚期优化: 晚期优化主要靠即时编译器来实现,将热点代码编译为平台相关的机器码,并优化。HotSpot虚拟

2017-11-03 16:05:47 488

原创 JVM(8)Tomcat类加载器架构

主流web服务器需要解决以下几个问题: 1、可隔离:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互隔离。 2、可共享:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互共享。 3、服务器安全:服务器本身也有依赖的类库,要保证服务器自身的安全不受部署的web应用程序影响。 4、支持jsp热替换:jsp由于其纯文本存储的特性,运行时修改的概率远大于

2017-10-26 19:00:35 318

原创 JVM(7)虚拟机字节码执行引擎

不同执行引擎在执行java代码的时候可能会有解释执行和编译执行两种选择,也可两者兼备。但是从外观上看,java虚拟机执行引擎都是一致的:输入字节码文件(class文件),处理过程是字节码解析,输出的执行结果。运行时栈帧结构栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,在虚拟机栈中。 每一个栈帧都包括局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。 局部变量表:用于存放方

2017-10-25 19:21:53 315

原创 JVM(6)类加载器

加载步骤中虚拟机需要完成以下三件事: 1、通过一个类的全限定名来获取定义此类的二进制字节流。 2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。 3、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。 其中实现“通过一个类的全限定名来获取定义此类的二进制字节流”这个步骤的代码模块称为类加载器。每一个类加载器,都拥有一个独立的

2017-10-20 17:20:42 196

原创 JVM(5)类的生命周期

类的生命周期 加载、验证、准备、初始化、卸载的开始顺序是固定的,解析有可能在初始化之后(动态绑定)。这几个步骤并不等一个完成另一个才开始,而是可能交叉进行。加载:类加载的时机: 1、使用new关键字实例化对象的时候、读取或设置类的静态字段(被static修饰且未被final修饰)的时候,调用类的静态方法的时候。 2、使用反射的时候。 3、初始化一个类时,如果父类没有加载,先加载父类。 4、

2017-10-19 17:24:04 283

原创 JVM(4)类文件结构

class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在class文件中,中间没有分隔符。 class文件格式: 类型 名称 数量 描述 u4 magic 1 魔数 u2 minor_version 1 次版本号 u2 major_version 1 主版本号 u2 constant_pool_c

2017-10-19 16:06:39 240

原创 java基础整理

这是一篇总结性质的博客,学习了其他博客的一些知识,总体比较零散,这里进行了总结。一、java文件的执行Jdk是什么?   Java development kit java开发工具包 Jdk包括:   Jre( java运行环境)、   一堆java工具(java编译器javac.exe java解释执行器java.exe)、   java基础类库(3600多)常用类150多个安装

2017-09-29 17:39:38 358

原创 eclipse远程调试

当我们的代码上了测试环境、预发布环境时,由于本地环境和测试环境有差异,可能需要用到远程调试。这里介绍下用eclipse远程调试的方法。 远程调试前,需要保证本地的代码和测试环境上的代码保持一致,否则可能会出现代码行错位,难以达到debug的效果。 利用远程调试,我们可以观察到运行时一些变量的值,还是很有意义的。不过需要注意的是,一旦起了远程调试,所有访问环境上服务器的请求都会被本地监听到。如果本

2017-06-09 17:30:27 480

原创 concurrent包分析-ConcurrentMap及其实现类

concurrent包分析-ConcurrentMap及其实现类ConcurrentMap有两个实现类,ConcurrentHashMap, ConcurrentSkipListMap。下面对这两个实现类进行分析。ConcurrentHashMap通过分析Hashtable就知道,synchronized是针对整张Hash表的,即每次锁住整张表让线程独占,ConcurrentHashMap允许多个修

2017-05-24 17:29:42 698

原创 concurrent包分析-阻塞双端队列BlockingDeque及其实现类

concurrent包分析-阻塞双端队列BlockingDeque及其实现类java.util.concurrent 包里的 BlockingDeque 接口表示一个线程安放入和提取实例的双端队列。 BlockingDeque 类是一个双端队列,在不能够插入元素时,它将阻塞住试图插入元素的线程;在不能够抽取元素时,它将阻塞住试图抽取的线程。 deque(双端队列) 是 “Double Ended

2017-05-23 19:59:20 564

原创 concurrent包分析-阻塞队列BlockingQueue及其实现类

concurrent包分析-阻塞队列BlockingQueue及其实现类BlockingQueue简介java.util.concurrent 包里的 BlockingQueue 接口表示一个线程安放入和提取实例的队列。 BlockingQueue 具有 4 组不同的方法用于插入、移除以及对队列中的元素进行检查。 四组不同的行为方式解释: 1. 抛异常:如果试图的操作无法立即执行,抛一个异

2017-05-19 17:49:12 578

原创 HashMap分析

参考:http://www.cnblogs.com/chengxiao/p/6059914.htmlHashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度依然为O(1),因为最新的Ent

2017-05-17 17:01:41 318

原创 设计模式之策略模式

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。 何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。 如何解决:将这些算法封装成一个一个的类,任意地替换。 关键代码:实现同一个接口。 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。 缺点:

2017-05-16 14:35:19 390 1

原创 java并发编程实战阅读笔记(第四章)对象的组合

一、设计线程安全的类在设计线程安全类的过程中,需要包含三个步骤: 1)找出构成对象状态的所有变量。 2)找出约束状态变量的不变形条件。 3)建立对象状态的并发访问管理策略。对象的域:是指对象中的变量。 对象的状态:如果对象中的所有域都是基本类型的变量,那么这些域将构成对象的全部状态。如果对象中引用了其他对象,那么该对象的状态将包含被引用对象的域。收集同步需求如果不了解对象的不变性条件与后验条

2017-05-12 17:16:32 418

原创 java并发编程实战阅读笔记(第三章)对象的共享

如何共享和发布对象,从而使他们能够安全地由多个线程访问。可见性可见性:   可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。  可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果。另一个

2017-05-09 16:17:29 326

原创 java并发编程实战阅读笔记(第二章)线程安全性

什么是线程安全性 当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。线程安全性最核心的概念是正确性。原子变量:多线程中,执行将计数器+1这样的操作,容易产生竞态条件,可以使用原子变量(AtomicLong, AtomicInteger, AtomicReference),代码样例:public class CountingFactorizer implements

2017-05-04 16:57:18 406

原创 设计模式之外观模式

外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 主

2017-05-04 11:26:26 368

原创 设计模式之装饰器模式

装饰器模式装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。 我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。意图:动态地给一个对象

2017-05-03 15:19:00 269

原创 设计模式之代理模式

代理模式在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 介绍 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要

2017-05-03 10:24:35 250

原创 设计模式之桥接模式

设计模式之桥接模式特点  将抽象部分与实现部分分离,使他们都可以独立地进行变化。为了达到让抽象部分和实现部分独立变化的目的,抽象部分会拥有实现部分的接口对象,有了实现部分的接口对象之后,就能够通过这个接口来调用具体实现部分的功能。桥接在程序上就体现成了抽象部分拥有实现部分的接口对象,维护桥接就是维护这个关系,也就是说,桥接模式中的桥接是一个单方向的关系,只能够抽象部分去使用实现部分的对象,而不能反过

2017-04-28 17:29:34 486

原创 设计模式之适配器模式

设计模式之适配器模式功能: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 适用场景: 1、已经存在的类的接口不符合我们的需求; 2、创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作; 3、在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。 类

2017-04-28 17:00:32 230

2020java面试资料大全.zip

比较全的java面试资料大全,有需要的可以下载哦。包含java基础以及进阶,数据结构、数据库,多线程等都有。

2020-06-15

空空如也

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

TA关注的人

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