自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

转载 基于Netty包中的Recycler实现的对象池技术详解

一、业务背景当项目中涉及到频繁的对象的创建和回收的时候,就会出现频繁GC的情况,这时就出现了池化的技术来实现对象的循环使用从而避免对象的频繁回收,Netty包下的Recycler就实现了这一功能。当创建对象的时候直接从池中获取,但使用完毕进行回收的时候,直接将对象回收到池中,这样可以大量减少对象的创建和回收,是对JVM优化的很好的手段二、Recycler的使用案例首先定义...

2019-08-17 21:36:00 344

转载 以银行转账为例分析分布式事务的解决方案

提起分布式系统,就会涉及分布式事务,本文就以金融项目的转账业务为例,分析各种业务场景下的转账业务的事物问题。一、业务场景以工商银行转账业务为例,那么项目的分布式架构大致如下,一个银行的一个支行部署一个节点,那么相同节点之间的业务就是本地事务、不同节点之间的就是分布式事务转账业务包括以下三种情况支行内转账:同为工行的相同支行内转账(本地事务)行内转账:同为工行...

2019-08-16 16:51:00 1566

转载 Java并发包2--ThreadLocal的使用及原理浅析

ThreadLocal 是本地线程变量,是一个以ThreadLocal对象为key,任意对象为value的存储结构。一、使用案例1.定义线程类MyThread,代码如下: 1 public class MyThread extends Thread{ 2 3 private User user; 4 5 public MyThread(...

2019-07-30 13:35:00 285

转载 Netty框架问题记录1--多线程下批量发送消息导致消息被覆盖

业务背景项目是基于Netty实现的实时课堂项目,课堂中老师需要对试卷进行讲解,则老师向服务器发送一个打开试卷信息的请求,服务器获取试卷信息,将试卷信息发送给所有的客户端(学生和老师)。发送给学生的时候需要在试卷信息中加上本人得分的信息。实现方式大致如下:1 Paper paper = getPaper(paperId); // 根据试卷ID获取试卷详细信息2 f...

2019-07-29 18:12:00 1038

转载 InnoDB存储引擎的高级特性大盘点

InnoDB作为mysql数据库最常用的存储引擎,自然包含了其独有的很多特性。如相比于memory、MyISAM引擎,InnoDB支持行级锁、事务等都是比较重要的特性。本文将盘点下InnoDB处理事务和行级锁之外的高级特性一、自适应哈希innodb建立索引时,只可以建立B+tree索引,是不可以建立hash索引的,而hash索引相对于B+tree索引,虽然无法实现排序、...

2019-07-28 23:27:00 198

转载 mysql日志体系大盘点

MySql日志文件主要包含:错误日志、慢查询日志、事务日志、二进制日志等Mysql的日志配置可以通过命令1 show global variables like '%log%'; 执行的结果如下"back_log" "80""binlog_cache_size" "32768""binlog_checksum" "CRC32""...

2019-07-28 20:27:00 159

转载 通俗易懂描述dubbo工作原理

关于dubbo的描述就不再赘述,直接进入主题,那就是dubbo的工作原理。dubbo分为服务提供者和服务消费者,主要的工作内容有以下几点:提供者暴露服务、消费者引入服务、提供者和消费者和注册中心之间的通信、消费者消费服务、监控中心、其他扩展一、provider暴露服务1、首先provider可以在配置文件中配置自己可以提供那些服务,通过<dubbo:service>可...

2019-07-20 23:04:00 212

转载 Java并发编程3-抽象同步队列AQS详解

AQS是AtractQueuedSynchronizer(队列同步器)的简写,是用来构建锁或其他同步组件的基础框架。主要通过一个int类型的state来表示同步状态,内部有一个FIFO的同步队列来实现。AQS的使用方式是通过子类继承来实现,子类继承同步器并且实现抽象方法来完成同步,实现过程中涉及到同步状态的方法主要有:getState():获取同步状态setState(int...

2019-07-14 20:03:00 206

转载 Java集合--阻塞队列及各种实现的解析

阻塞队列(Blocking Queue)一、队列的定义说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIFO(先进先出)的原则队列的入口一端叫做队尾(rear),出口一端叫做队头(front),最简单的比如就是排队买火车票,新加入的排队者必须在队尾插入,而下一个排队结束的永远的队伍的第一...

2019-07-12 00:58:00 237

转载 NIO之路1--传统BIO到NIO的演变过程

一、BIO时代BIO1.0版本在jdk1.4之前,java网络编程都是采用的BIO模式,BIO全称是Blocking IO,也就是阻塞式IO 接下来就以拨打10086客服电话为例,介绍下BIO是如何通信的。(10086客服是服务端,移动用户是客户端,10086是端口号) BIO1.0版本 客服等待用户拨打电话10086,此时是阻塞的,因为客服不能干别的事,只能等待客户拨打电话。当...

2019-06-12 21:34:00 283

转载 spring源码解析-ApplicationContext解析

ApplicationContext和BeanFactory一样都是bean的容器,而BeanFactory是一切Bean容器的父类,ApplicationContext继承于BeanFactory(继承之BeanFactory的子类)ApplicationContext包含了BeanFactory的所有功能,并且扩展了其他功能。先从ApplicationContext的案例入手,代...

2019-06-08 21:43:00 135

转载 分布式系统的CAP理论

CAP理论是指分布式系统架构中通常只能够满足CAP三个指标中的两个,而不能同时满足CAP三个指标C(Consistency):一致性 一致性指的是All nodes see the same data at the same time,也就是说所有节点在同一时间看到的数据必须是一模一样的,比如足球比赛中,当比分发生了改变,客户端A看到的比分是1:0,而客户端B看到的比分还是0:0;又...

2019-05-23 21:02:00 173

转载 Java常用设计模式详解1--单例模式

单例模式:指一个类有且仅有一个实例由于单例模式只允许有一个实例,所以单例类就不可通过new来创建,而所有对象都默认有一个无参的构造函数可以创建对象,所以单例类不仅不能提供public的构造方法,还需要重写默认的无参构造方法。由于单例类不可再new创建,所以需要有一个公用的实例需要创建好并返回,所以单例类还需要有一个返回单例对象的方法。且这个方法还必须是静态的方法,否则此方法无法在其他...

2019-05-23 20:59:00 104

转载 mysql全方位知识大盘点

一、mysql都有哪些存储引擎?各自的特点是什么?引擎事务锁主键索引外键数据结构适用场景InnoDB支持行锁、表锁必须有主键,没有设置会自动创建主键索引和数据在一起,其他索引执行主角索引支持2个文件,一个是表结构,一个是索引和数据事务、增删改频繁MyISAM不支持只支持表锁可以没有...

2019-05-13 00:24:00 132

转载 HashMap基本介绍

1.HashMap简介(本文是按照JDK1.8进行解析)HashMap位于JDK自带jar包rt.jar的java.util目录下。 HashMap是一个散列表,存储的内容是键值对<key,value>映射。HashMap继承于AbstractMap,实现了Map、Cloneable、Serializable接口 HashMap是线程不安全的,其中key、value都...

2019-05-09 10:02:00 457

转载 spring源码解析2--容器的基本实现

spring的主要特性是IOC,实现IOC的关键是bean,而更关键的是如何bean的管理容器,也就是BeanFactory,本文的目标是弄清楚BeanFactory具体是怎么样的存在。先看下最简单的获取bean的案例,代码如下:1 public static void main(String[] args){2 BeanFactory factory =...

2019-04-27 21:47:00 289

转载 JDK8到JDK12各个版本的重要特性整理

JDK8新特性1、Lambda表达式2、函数式编程3、接口可以添加默认方法和静态方法,也就是定义不需要实现类实现的方法4、方法引用5、重复注解,同一个注解可以使用多次6、引入Optional来避免空指针7、引入Streams相关的API8、引入新的Date/Time相关的API9、新增jdeps命令行,来分析类、目录、jar包的类依赖层级关系10、...

2019-04-26 00:30:00 1708

转载 Javaagent技术及Instrumentation接口详解

一、JavaagentJavaagent相当于一个插件,在JVM启动的时候可以添加 javaagent配置指定启动之前需要启动的agent jar包这个agent包中需要有MANIFEST.MF文件必须指定Premain-Class配置,且Premain-Class配置指定的Class必须实现premain()方法在JVM启动的时候,会从agent包中找到MAINIFEST.MF...

2019-04-25 23:24:00 1277

转载 spring源码解析1--spring整体架构

一、Spring整体架构图关于Spring的基本介绍就不再赘述了,先展示Spring框架的整体架构图如下示:二、Spring结构介绍Spring主要分为Core Container、Test、Data Access、Web、AOP、Aspects等几个大模块,而Spring最核心的模块就是Core Container之后的Beans、Core、Context三个模块...

2019-04-24 23:49:00 119

转载 Java并发包1--线程的状态及常用方法

一、线程主要有以下几种状态:new(新建):线程刚刚被创建runnable(就绪):新建的线程执行start方法进入就绪状态等待系统调度分配CPU,被分配了之后就进入运行中状态blocked(阻塞):当线程执行被锁的代码块或方法时,等待其他线程释放锁而处于阻塞状态waiting(等待):线程进入等待状态,需要等待其他线程做出一些特点动作(通知或中断)time_wait...

2019-04-24 22:56:00 126

转载 JVM探秘6--图解虚拟机栈的局部变量表和操作数栈工作流程

案例代码如下: 1 public class JVMTest { 2 public static Integer num = 10; 3 4 public int add(int i){ 5 int j = 5; 6 int k = i+j; 7 j++; 8 k = n...

2019-04-11 23:39:00 339

转载 Java面试题整理---Redis篇

1.redis支持五种数据结构类型?2.redis内部结构?3.redis持久化机制?4.redis集群方案与实现?5.redis为什么是单线程的?6.redis常见回收策略?7.缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级8.redis主节点宕机了,还有没有同步的数据如何处理?9.redis过期策略是如...

2019-04-09 23:47:00 69

转载 Java面试题整理---网络篇

1.BIO、AIO和NIO的概念及区别?2.什么是长连接和短连接?3.http1.0、http1.1和http2.0的区别?4.https和http的区别?5.https的工作原理?6.http和tcp以及udp的区别?7.tcp三次握手和四次挥手?为什么需要三次和四次?8.http为什么是无连接和无状态的?...

2019-04-09 23:44:00 88

转载 深入浅出Java探针技术2---java字节码生成框架ASM、Javassist和byte buddy的使用

目前Java字节码生成框架大致有ASM、Javassist和byte buddy三种ASM框架介绍及使用1.ASM介绍ASM是一种Java字节码操控框架,能够以二进制形式修改已有的类或是生成类,ASM可以直接生成二进制class文件也可以在类被加载入JVM之前动态改变类,只不过ASM在创建class字节码时说底层JVM的汇编指令,需要使用者对class组织结构和JVM汇编指令...

2019-04-09 22:34:00 1594

转载 深入浅出Java探针技术1--基于java agent的字节码增强案例

Java agent又叫做Java 探针,本文将从以下四个问题出发来深入浅出了解下Java agent一、什么是java agent?Java agent是在JDK1.5引入的,是一种可以动态修改Java字节码的技术。java类编译之后形成字节码被JVM执行,JVM在执行这些字节码之前获取这些字节码信息,并且对这些字节码进行修改,来完成一些额外的功能,这种就是java agent...

2019-04-09 21:47:00 715

转载 浅探网络1---tcp协议详解(三次握手和四次挥手)

TCP协议是网络多层协议中运输层的最重要的协议之一,运输层是两台主机的进程之间的通信。除了TCP还有一个是UDP协议(用户数据包协议)TCP全称是Transmission Control Protocol,意思是传输控制协议一、TCP简介1.TCP协议两个对等运输实体之间进行传送的数据单位是:TCP报文段2.TCP提供的是面向连接的服务,在传送数据之前必须建立连接,数据传...

2019-04-08 22:16:00 183

转载 深入浅出JAVA线程池使用原理2

一、Executor框架介绍Executor框架将Java多线程程序分解成若干个任务,将这些任务分配给若干个线程来处理,并得到任务的结果1.1、Executor框架组成任务:被执行任务需要实现的接口:Runnable接口或Callable接口任务的执行:任务执行的核心接口Executor以及其子类ExecutorService接口任务的结果:包括Future接口以及F...

2019-04-07 02:03:00 101

转载 深入浅出JAVA线程池使用原理1

前言:Java中的线程池是并发框架中运用最多的,几乎所有需要异步或并发执行任务的程序都可以使用线程池,线程池主要有三个好处:1、降低资源消耗:可以重复使用已经创建的线程降低线程创建和销毁带来的消耗2、提高响应速度:执行任务时,不需要等待线程的创建就可以直接执行任务3、提高线程的可管理性:线程是稀缺资源,如果无限制地创建不仅会消耗系统资源,还会降低系统的稳定性,线程池可以对...

2019-04-07 00:07:00 142

转载 Java面试题整理---JVM篇

1.JVM运行时内存区域划分?2.内存溢出OOM和堆栈溢出SOE的案例、原因、排查及解决?3.常用的JVM性能监控工具?4.JVM参数设置?5.类加载过程?6.JVM内存模型?7.四大引用类型?区别?8.JVM性能调优?9.Minor GC和Full GC 分别在什么时候触发?10.GC算法有哪些?...

2019-04-01 22:25:00 140

转载 JVM探秘5---JVM监控命令大全

jps命令---查看JVM进程状况格式为:jps[options] [hostid]功能描述: jps是用于查看有权访问的hotspot虚拟机的进程. 当未指定hostid时,默认查看本机jvm进程,否者查看指定的hostid机器上的jvm进程,此时hostid所指机器必须开启jstatd服务。 jps可以列出jvm进程lvmid,主类类名,main函数参数, jvm参数,ja...

2019-04-01 21:02:00 112

转载 JVM探秘2--详解内存溢出OutOfMemoryError异常

JVM运行时内存被划分成多个区域,而除了程序计数器之外,其他几个区都会出现OutOfMemoryError异常,主要原因就是对应内存区域的内存不足以再分配内存,一般要么是内存泄漏了要么就是内存参数设置的过小而导致。本文就在实际操作中模拟下JVM内存模型中各个区域出现内存溢出的场景。1.堆内存溢出先设置JVM启动参数,设置初始化堆内存大小为-Xms15M-Xmx15M...

2019-03-30 22:45:00 200

转载 JVM探秘1--JVM内存运行时区域划分

Java程序员一般不需要太关注内存,因为操作内存的权力都交给了Java虚拟机,但是Java程序员必须需要了解JVM是如何使用内存的,否则一旦内存出现泄漏或事溢出的话,就会一筹莫展不知道从哪去入手排查问题。一、JVM内存模型JVM在运行时会把它管理的内存划分成若干个不同区域,每个区域有各自不同的用处,以及不同的创建和销毁的时间,有的随着JVM进程启动而存在,而有的需要随着用户...

2019-03-30 22:38:00 128

转载 skywalking学习之路---skywalking环境从零搭建部署

介绍SkyWalking项目是由华为大牛吴晟开源的个人项目,目前已经加入Apache孵化器。SkyWalking项目的核心目标是针对微服务、Cloud Native、容器化架构提供应用性能监控和分布式调用链追踪功能,目前链路追踪和监控应用支持的组件包括主流框架和容器,如dubbo、motan、spring boot、spring cloud等。整体架构如下图示:整体主要分...

2019-03-26 23:47:00 5672

转载 mybatis源码解析12---ResultSetHandler解析

说完了StatementHandler和ParameterHandler,接下来就需要对查询的结果进行处理了,而对于sql结果的处理是由ResultSetHandler处理的,ResultHandler位于mybatis包的org.apache.ibatis.executor.resultset下,源码如下:1 public interface ResultSetHandle...

2019-03-26 15:33:00 199

转载 mybatis源码解析11---ParameterHandler解析

ParameterHandler接口是参数处理器,位于mybatis包的org.apache.ibatis.executor.parameter下,源码如下:1 public interface ParameterHandler {2 3 Object getParameterObject();//获取参数4 5 void setParameters(Prepar...

2019-03-26 14:29:00 151

转载 mybatis源码解析9---执行器Executor解析

从前面分析我们知道了sql的具体执行是通过调用SqlSession接口的对应的方法去执行的,而SqlSession最终都是通过调用了自己的Executor对象的query和update去执行的。本文就分析下sql的执行器-----ExecutorExecutor是mybatis的sql执行器,SqlSession是面向程序的,而Executor则就是面向数据库的,先看下Executo...

2019-03-26 00:13:00 186

转载 mybatis源码解析8---执行mapper接口方法到执行mapper.xml的sql的过程

上一篇文章分析到mapper.xml中的sql标签对应的MappedStatement是如何初始化的,而之前也分析了Mapper接口是如何被加载的,那么问题来了,这两个是分别加载的到Configuration中的,那么问题来了,在使用过程中MappedStatement又是如何和加载的mapper接口进行关联的呢?本文将进行分析。首先还是SqlSession接口的一个方法说起,也就是...

2019-03-25 22:23:00 293

转载 最新毕业设计参考文献大全

一年一度的毕业季,最令毕业生头疼的就是毕业设计以及撰写毕业论文,而毕业论文还需要加上多篇参考文献,有的老师对参考文献的要求是很多的,比如需要国内的和国外的,时间必须是近三年的,满足XXX要求的文献至少需要三篇以上等等。今天我就来给大家整理了各种技术各个出版时间年份的参考文献以供大家引用:(按文献出版时间倒序)一、Java参考文献 [1]明日科技.Java从入...

2019-03-21 23:36:00 21726

转载 mybatis源码解析7---MappedStatement初始化过程

上一篇我们了解到了MappedStatement类就是mapper.xml中的一个sql语句,而Configuration初始化的时候会加载所有的mapper接口类,而本篇再分析下是如何将mapper接口和xml进行绑定的。先从上一篇的源码开始分析: 1 public <T> void addMapper(Class<T> type) { 2 ...

2019-03-21 23:02:00 577

转载 mybatis源码解析6---MappedStatement解析

MappedStatement类位于mybatis包的org.apache.ibatis.mapping目录下,是一个final类型也就是说实例化之后就不允许改变MappedStatement对象对应Mapper.xml配置文件中的一个select/update/insert/delete节点,描述的就是一条SQL语句,属性如下: 1 private String ...

2019-03-21 21:39:00 325

空空如也

空空如也

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

TA关注的人

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