- 博客(386)
- 资源 (82)
- 收藏
- 关注

原创 JVM内存区域
JVM的学习分两个阶段即原理和源码学习、通过原理知识的学习我们能粗略的了解从java代码到字节码文件再到JVM运行产出的流程,之后你肯定会有一万个为什么,那时只能阅读源码来回答你的一万个为什么……一、JVM内存区域、JVM内存模型1、计算机内存:计算机内存就是存储CPU计算时需要读取数据的一个区域。2、JVM内存区域:同理JVM内存区域也就是java程序运行时读取、存放相关数据的区域。3、JVM内存模型:在特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。其实JVM内存区.
2020-07-26 18:42:16
999
原创 new一个对象
JVM的学习分两个阶段即原理和源码学习、通过原理知识的学习我们能粗略的了解从java代码到字节码文件再到JVM运行产出的流程,之后你肯定会有一万个为什么,那时只能阅读源码来回答你的一万个为什么……上篇文章学习了JVM内存区域,了解了JVM各个内存区域存储的数据,其中堆内存用来存储创建的对象,那下面一起来了解一下对象创建相关内容以及HSDB查看堆内存在JVM内存中的分配区域。带着这些疑问开始new指令创建对象的学习……1、创建的对象包含什么?2、对象内存布局(通俗说对象的组成部...
2020-08-31 22:47:09
1756
原创 Javassist-手写字节码文件
上篇文章我们学了jdk中动态代理类生成,其实整个过程分两步,第一步获取代理类字节码文件、第二步加载字节码文件并验证、解析生成Class对象。在整个过程中发现生成字节码文件过程是比价麻烦,如果你看过”javaSE虚拟机规范”这本书你也会发现书中大部分也是讲.class字节码文件格式的,所以如果不借助工具自己写字节码文件那还是比较难的。 其实javac编译器就是一个将我们写的.java文件转化为.class 字节码文件工具,但是我们没法使用javac进行动态的字节码文件编写,其实除了ja...
2020-06-21 19:07:25
1189
2
原创 动态代理类生成Hotspot VM干了什么
本来想着从头开始写JVM但是之前写了动态代理设计模式,而动态代理模式中又涉及到动态生成Class对象的过程,索性就先了解一下对象生成过程,在后续学习过程如果发现写的有问题在纠正和补充!一、动态代理类生成主流程1、类加载、代理类实现接口Class对象集合获取2、校验是否为为接口(java是单继承而动态生成的代理李继承了Proxy所以其他的只能是接口)3、判断接口是不是public的,如果不是public则要判断是否为同一个目录下的,如果不是同一目录下的则生成代理类结束4、生成代理类包名..
2020-06-21 18:55:09
639
原创 设计模式在结算系统中的实战
结算系统主要是生成账单,当然账单有多种类型,不同账单生成的条件可能不同、账单数据组装可能不同、账单生成之后有不同的后续业务处理…… 个人对各个模式的理解和为何使用的理解:一、模板方法模式的抽象类多个业务处理流程一致,可以吧整个流程抽象到父类,在父类中定义整个流程的骨架。 公共的方法提升到父类,在父类实现、多个子类公用。 子类实现流程中自己使用的特殊处理二、策略模式策略模式是一个业务场景中需要的多种策略、算法的封装,这些算法是可以替换调用。 策略模式是面上策略抽象类编程...
2020-05-31 23:23:13
932
原创 MySQL Out of range value for column bills_amount
MySQL- Out of range value for column 'bills_amount'这个问题爆出来第一感觉就是数值大小大于数据库定义变量的最大存储值。问题描述:从"A"表获取amount 字段塞入"B"表bills_amount 字段,但是塞入时报如下异常信息:1、Error updating database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Out of range value ..
2020-05-27 10:30:00
574
原创 设计模式-动态代理模式
摘要:代理模式有静态代理模式和动态代理模式,静态代理模式比较简单就过了,主要来看看动态代理模式以及动态代理模式在使用。动态代理是一种增强代码功能的方式、手段,其实我们可以通过继承重写、装饰也能对代码功能进行新功能的增加。但有些情况下使用代理模式、动态代理模式可能更适合。你在使用动态代理的时候有没有想过他是什么时候生成的,怎么生成的,为何调用一个接口方法就能调用委托类的方法并返回相关方法值;下面从代理示例、分析代理类生成过程以及代理类结构信息一步步了解代理类的生成原理……一、动态代理模式示例
2020-05-17 23:17:39
431
原创 单例的8种实现
单例模式是比较简单的设计模式,但是涉及到的知识点还是挺多,比如并发模式下的单例、序列化反序列化情况下保证单例、反射情况下保证单例,下面来看看各种情况下怎么保证单例。单例模式最基本的组成构造函数私有化、即不能随便创建对象;对外提供一个静态方法来获取对象。一、饿汉模式1、饿汉模式实现public class Single { /** * 类成员变量 */ private static Single single = new Single(); priv...
2020-05-09 00:06:20
1052
2
原创 设计模式-工厂模式
摘要: 工厂模式也是创建型模式中的一中、而工厂模式具体有三种即简单工厂模式(静态工厂模式)、工厂方法模式、抽象工厂模式。一、简单工厂模式简单工厂模式又称为静态工厂模式,实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例;将对象创建过程交给工厂方法来执行……1、UML类图2、角色工厂类、抽象产品类、抽...
2020-04-26 04:16:42
284
原创 设计模式-建造者模式
摘要:建造者模式是创建型模式大类中的一种,在面向对象的语言中无时无刻不在进行者对象的创建,下面来学习一下建造者模式来创建对象。在这篇文章中我们来学习一下下面几个问题1、什么是建造者模式2、使用建造者模式创建产品3、为何要用建造者模式,在怎样的场景下使用建造者模式4、演变后的建造者模式5、演变后的建造者模式相比构造函数和setter的优缺点一、建造者模式...
2020-04-22 00:39:17
316
原创 设计模式-责任链模式
摘要: 责任链设计模式说白了就是一个个的过滤器的使用,打个比方就好比水净化器一样,一层一层的处理直到最后其实责任链模式就是这样的没什么特别的下面来详细看看!一、责任链模式定义1、定义是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到链执行完为止。2、类图没有统一实现方式,所以这里就不展示...
2020-03-15 01:12:16
279
原创 设计模式-观察者模式
摘要: 观察者设计模式定义了对象间的一种一对多的组合关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。一、观察者模式定义1、定义: 观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在观察者模式中,主题是通知的发布者,它发出通知时并不需要知道谁是...
2020-03-08 02:47:45
427
原创 设计模式-模板方法模式
如约而至,开始模板方法模式学习的旅途……一、模板方法模式定义模板方法模式定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变算法结构即可重新定义该算法的某些特定步骤。二、模板方法模式使用场景1、使用场景(1)、当子类中有一些不变的通用的算法时,可以把这些提升到父类,减少代码重复,特定子类相关步骤在子类中完成。2、类图模...
2020-03-01 10:03:24
354
原创 设计模式-策略模式
摘要: 设计模式不是新技术而是一种解决特定环境下问题的策略,是各位前辈总结出的经验,不用设计模式能实现功能开发但使用设计模式写出的代码耦合性更低,扩展性更好。 在所有的文章中都会说项目中的if else 可以使用策略模式来解决,其实设计模式的书看了很多遍但一直不理解说使用策略模式替换if else 的判断,后来突然理解了,说的使用策略模式代替if else 其实不是完全不...
2020-02-22 12:07:31
583
原创 CPU、内存打满排查流程、JVMGC调优
This is my, my, my, beautiful day!一、问题确认 1、top 命令查看各个进程cpu、内存使用量top //每隔5秒显式所有进程的资源占用情况 top -d 2//每隔2秒显式所有进程的资源占用情况 top -c//每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名) top -p 12345 ...
2020-01-19 16:53:01
4131
1
原创 git https clone 的坎坷经历
git 都知道是用来做代码管理、功能是相当强大所以使用的也是比较多,个人认为是对git也算是能熟悉使用的,但是今天公司服务器使用https来clone(个人一直使用ssh)然后问题就来了……详细描述问题过程1、git init2、git clonehttps://git.xxxx.xxx/xxx……(远程仓库地址)3、输入用户名:输入gitlab的登录用户名4、输入密码:输...
2019-06-10 20:12:25
2594
转载 Github或GitLab上如何更新自己Fork的库,利用Fork库进行开发的整个流程
在实际的项目开发中我们经常会通过Fork项目库到自己的git仓库,减少对项目库的直接操作。流程脑图为:步骤:1.从原库Fork到自己的仓库2. 将Fork库Clone到到本地我现在示例的库(我的为gitlab库)原库: http://gitlab.henu.edu.cn/web/sport_meeting.gitFork库:http://gitlab.henu....
2019-05-31 16:02:13
2709
原创 Netty实现简单RPC
使用Netty实现简单RPC,主要是netty的使用,所以缓存,服务的暴露等都使用缓存来代替了netty使用的是5.0+ 所以和4.0+可能有点不同……下面先看一下主要类:从两个方面来看,一是netty部分,netty客户端和服务端的实现 二是从调用netty来看,其实也就是代理的实现。一、netty服务端因为这里是单线程实现所以服务端和我们平时写的都是一样的。
2017-12-10 19:34:59
2549
转载 tcp三次握手四次挥手
TCP的三次握手(建立连接)和四次挥手(关闭连接)参照:http://course.ccniit.com/CSTD/Linux/reference/files/018.PDFhttp://hi.baidu.com/raycomer/item/944d23d9b502d13be3108f61 建立连接: 理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流
2017-12-10 17:04:48
904
原创 Netty中对象的序列化,反序列化
之前写的nettydemmo都是传递字符串的,而在真实使用的时候我们传的都是对象,然后写序列化方法进行序列化和返序列化,在netty中对序列化和返序列化都提供了相应的接口,而且netty也支持很多的序列化方式,但这里先提供java的序列化实现方式。一、java序列化方式package com.decode;import java.io.ByteArrayInputStream;
2017-12-03 20:03:58
4441
1
原创 多次尝试请求接口
在接口请求的时候我们一般都是一次请求,成功就是成功失败就是失败,但是有的时候我们要同步的确定接口请求成功,比如一个订单的状态,订单状态对整个流程影响是很大的,所以我们在有必要的时候需要同步请求成功,所以我们就需要多次请求接口直到成功或者直到N次的请求,所以我们可以看看下面demo来实现三次请求。代码如下:import com.alibaba.fastjson.JSON;import co
2017-12-01 00:14:24
3729
原创 httpclient连接池释放异常和多余资源
请求、异常链接监控代码如下:import org.apache.commons.lang3.StringUtils;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client
2017-11-30 11:16:48
8226
转载 lombok注解介绍
lombok注解介绍lombok注解文档 lombok官网下载lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然,这带来的副作用就是不易阅读…不过,还是能看得懂吧,废话不多说,先看一下lombok支持的一些常见的注解。@No
2017-11-18 18:53:25
721
转载 springmvc异常统一处理
spring mvc异常统一处理(ControllerAdvice注解)1、配置spring 版本:[html] view plain copyorg.springframework-version>4.1.9.RELEASEorg.springframework-version> spring-servlet.xml,
2017-11-18 18:42:46
2386
原创 git 安装后的init、key、clone
这里我们就不说git的安装了,因为git的安装确实很简单而且文章也也很多,所以我们就来看看安装git后的init 、往github或gitlab添加key以及从远端拉代码;一、Git安装后的本地仓库的创建在使用git的时候要清楚的知道本地仓库和远程服务,我们知道这点后再来说1、创建本地仓库再本地创建仓库是很简单的,创建一个工作文件夹然后执行 git init 命令这样在本地制定的文件下创建了gi...
2017-11-18 10:23:54
1328
转载 MySql 里的IFNULL、NULLIF和ISNULL用法
今天用到了MySql里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下:mysql中isnull,ifnull,nullif的用法如下:isnull(expr) 的用法:如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。 mysql> select isnull(1+1);-> 0mysql> select isnu
2017-11-14 22:31:55
623
原创 netty 服务端作为客户端跳转请求服务端
一般的请求都是从客户端发起请求到服务端,服务端接收到请求后做相应处理然后在返回给客户端相应信息,但是很多时候我们要用服务端作为客户端在发送请求到另一台服务端,这样中的这台服务器不仅是服务端也是客户端。OK 整体请求就是这样的,下面来看代码:一、客户端1、客户端引导package com.test3;import io.netty.bootstrap.Bootstrap;
2017-11-05 15:26:53
3564
3
转载 netty源码学习三(channel、channelHandler、channelPipeline)
Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的“梦境”概念,希望大家喜欢。一层梦境:Channel实现概览在Netty里,Channel是通讯的载体,而ChannelHandler负责Channel中的逻辑处理。
2017-11-04 17:42:37
524
转载 netty源码学习二(EventLoopGroup、EventLoop)
前面的一章我们学习了ServerBootstrap即引导,如果说引导是对netty的一个整体学习则EventLoopGroup、EventLoop就是具体内容的分析.EventLoopGroup、EventLoop 也是netty中比较核心的组件,下面就来看看netty的线程模型和Reactor模式1. NioEventLoopGroupnetty的程序的启动(在服务端一般是两个Nio
2017-11-04 17:20:26
1578
转载 netty源码学习一(Serverbootstrap引导程序)
BootStrap在netty的应用程序中负责引导服务器和客户端。netty包含了两种不同类型的引导: 1. 使用服务器的ServerBootStrap,用于接受客户端的连接以及为已接受的连接创建子通道。 2. 用于客户端的BootStrap,不接受新的连接,并且是在父通道类完成一些操作。ServerBootStrap的运行原理下面先看一下这两个引导类的类继
2017-10-29 10:52:47
1334
转载 logback高级特性使用(三)
异步记录日志注意:该功能需要高版本才能支持,如1.0.11。AsyncAppender,异步记录日志。工作原理:当Logging Event进入AsyncAppender后,AsyncAppender会调用appender方法,append方法中在将event填入Buffer(这里选用的数据结构为BlockingQueue)中前,会先判断当前buffer的容量以及丢弃日志特性是
2017-10-28 17:11:33
892
转载 logback高级特性使用(二)
自定义Pattern模板创建自定义格式转换符有两步:1.写一个转换器类,继承ClassicConvert示例代码:package com.cj.log; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.ILogging
2017-10-28 17:01:54
974
转载 logback高级特性使用(一)
logback支持类似于占位符的变量替换功能,即如果输出的msg里面带有{}符号且括号中间不带其他字符,那么logback在构造LoggingEvent的时候,会用MessageFormat类来格式化msg,将{}替换成具体的参数值。示例如下:logger.info("{},it's OK.","Hi");则输出结果如下:Hi,it's OK.支持多JVM同时操作同一个日志
2017-10-28 16:57:59
1085
转载 【java-日志组件】slf4j+logback配置及详解
文本主要介绍一下slf4j+logback在java工程中的配置,面向的读者是已经对slf4j+logback有一定了解的同学,不了解的同学,请看文章末尾的相关链接。以后会写一篇介绍slf4j框架的文章,其中会说明logback与之的关系。下面咱们进入正题。一、基于maven的slf4j+logback pom.xml配置 org.slf4j slf4j-api
2017-10-28 16:15:07
988
1
转载 使用MDC为Logback slf4 日志记录线程ID,区分每次执行的会话日志
我们先回想这样一个场景: 在Java开发中,因为业务需求肯定会输出很多日志。在出现问题时,根据输出的日志分析问题。 对于一个访问量很大的网站来说,日志的输出速度是很快的,同样的代码方法被同时调用是很正常的。 那么现在问题来了,我们如何从日志中来区分每一个会话的日志呢?就是我们发现了一个异常,如何知道在这个异常之前对应的一些列日志是什么呢?我们都知道,不管是普通后台代码执行(定时
2017-10-28 14:46:30
7454
原创 google本地缓存LoadingCache使用
在项目中语使用本地缓存记录一下,具体代码如下:@Servicepublic class StrategyLocal { private static final Logger LOG = LoggerFactory.getLogger(StrategyLocal.class); @Autowired private RouteInfoDAO routeInfoDAO; private
2017-10-27 20:05:32
6094
4
原创 Java 延迟队列实例
延时队列,第一他是个队列,所以具有对列功能第二就是延时,这就是延时对列,功能也就是将任务放在该延时对列中,只有到了延时时刻才能从该延时对列中获取任务否则获取不到……应用场景比较多,比如延时1分钟发短信,延时1分钟再次执行等,下面先看看延时队列demo之后再看延时队列在项目中的使用:简单的延时队列要有三部分:第一实现了Delayed接口的消息体、第二消费消息的消费者、第三存放消息的延时队列,
2017-09-24 23:27:43
5486
1
dao层动态代理实现demo
2016-06-07
commons-pool.jar
2016-05-19
org.apache.commons.httpclient相关架包
2016-02-27
spring+activemq topic持久化订阅
2017-03-14
dubbo demo
2016-10-16
commons-lang
2016-08-30
使用springmvc 实现文件上传
2016-07-19
文件上传demo
2016-07-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人