- 博客(91)
- 资源 (10)
- 收藏
- 关注

原创 分布式事务之TCC
TCC本质上也是一种二阶段协议,不同在于TCC需要与具体业务耦合,下面首先看下TCC步骤: 所有事务参与方都需要实现try,confirm,cancle接口。 事务发起方向事务协调器发起事务请求,事务协调器调用所有事务参与者的try方法完成资源的预留,这时候并没有真正执行业务,而是为后面具体要执行的业务预留资源,这里完成了一阶段。 如果事务协调器发现有参与者的try方法预留资源时候发现资源不...
2018-07-31 15:37:17
3401
1

原创 分布式事务之异步消息补偿
1、MQ发送方发送远程事务消息到MQ Server; 2、MQ Server给予响应, 表明事务消息已成功到达MQ Server. 3、MQ发送方Commit本地事务. 4、若本地事务Commit成功, 则通知MQ Server允许对应事务消息被消费; 若本地事务失败, 则通知MQ Server对应事务消息应被丢弃. 5、若MQ发送方超时未对MQ Server作出本地事务执行状态的反馈...
2018-07-27 22:09:54
7385

原创 分布式事务之两阶段提交与三阶段提交
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。 为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文主要介绍关于分布式事务,二阶段提交和三阶段提交。 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本,这些副本会放置在不同的物理的机器上...
2018-07-27 20:31:49
2907

原创 浅谈Java中的类加载机制
如下图所示,JVM类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为访问方法区这个类的各种数据的入口。注意这里不一定非得要从一个Class文件获取,这里既可以从ZIP包中读取(比如从jar包和war包中读取),也可以在运行时计算生成(动...
2018-07-14 15:52:05
596

原创 HTTP协议请求头和响应头
HTTP请求和相应的内容: HTTP请求包括: 1、请求行:请求的http方法+URL+http的版本号 2、请求头 3、请求体:(key=value)HTTP响应包括: 1、状态行:http协议的版本+状态码+描述 2、响应头 3、响应体:web服务器把要发送给客户端的文档信息放在响应体http请求头: accept:浏览器通过这个头告诉服务器,它...
2018-05-11 23:48:33
1462

原创 浅谈Http长连接和Keep-Alive以及Tcp的Keepalive
Keep-Alive模式: 我们知道Http协议采用“请求-应答”模式,当使用普通模式,即非Keep-Alive模式时,每个请求/应答,客户端和服务器都要新建一个连接,完成之后立即断开连接;当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。 http1.0中默认是关闭的,需...
2018-05-11 16:57:55
53139
3

原创 浅谈Java线程池
public class ThreadPoolExecutor extends AbstractExecutorService { public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, Blocki...
2018-05-07 18:28:46
251

原创 redis主从复制原理
前言: Redis持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障。 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况。为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结...
2018-05-06 17:16:13
3656

原创 ArrayList实现原理分析
ArrayList概述: ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会...
2018-05-05 22:47:09
281

原创 HashSet实现原理分析
HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet的实现: 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关HashSet的操作,基本上都是直接调...
2018-05-05 21:21:31
248

原创 算法题:两个大数相加(java)
题目: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。输入的两个大数可能正可能负分析: 首先需要判断两个大数的正负号,使用字符串来模拟小学数学中的两个数的加减法。代码:/** * 两个大数相加,输入的两个大数的正负号不确定 */public class Solution { public static void main...
2018-04-29 18:11:55
3446

原创 redis基础知识
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下: 1、字符串类型 2、散列类型 3、列表类型 4、集合类型 5、有序集合类型。redis的特点: 1、Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 2、Redi...
2018-04-26 23:43:24
275

原创 redis集群的分区实现原理
绪论 Redis Cluster本身提供了自动将数据分散到Redis Cluster中不同节点的能力,分区实现的关键点问题包括:如何将数据自动地分散到不同的节点,使不同节点的存储数据相对均匀;如何保证客户端能够访问到正确的节点和数据;如何保证重新分片的过程中不影响正常服务。这篇文章通过了解这些问题来认识Redis Cluster分区实现原理。认识Redis Cluster Redis Cl...
2018-04-26 21:49:18
662

原创 初步了解redis集群
集群原理1、redis-cluster架构图: 架构细节: (1)所有redis节点彼此互联(通过PING-PONG机制),内部使用二进制协议优化传输速度和带宽。 (2)节点fail是通过集群中超过半数的节点检测失效时才生效。 (3)客户端与redis节点直连,不需要中间proxy层。客户端不需要连接集群中的所有节点,连接集群中任何一个可用节点即可。 (4)redis-clust...
2018-04-26 20:58:11
306

原创 HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂很大。但数组的按照二分查找时间复杂度小,为O(logn);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,...
2018-04-23 21:47:52
201

原创 java线程中join方法的简单讲解
一、作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间的并发执行变为串行执行。具体看代码:public class Test { public static void main(String[] args) throws InterruptedException { ThreadJoinTest t1 = new ThreadJoinTes...
2018-04-11 22:17:16
414

原创 浅谈Java中Volatile关键字
很早就接触了volatile,但是并没有特别深入的去研究它,只有一个朦胧的概念,就是觉得用它来解决可见性问题,但可见性又是什么呢?最近经过查阅各种资料,并结合自己的思考和实践,对volatile有了比较深刻的认识,在此总结并分享给大家。可见性如何理解可见性,还是来看个会出现死循环的例子: 这是为什么呢?先来看看java的内存模型,如下图: java...
2018-04-02 11:34:02
2229

原创 java中的静态代理、动态代理以及Cglib代理
Java的三种代理模式1.代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接...
2018-03-27 17:58:39
199

原创 设计模式之代理模式
一、概述 代理模式为一个对象提供一个替身以控制对这个对象的访问。其实代理就是做到类似转发的功能,针对不同代理,转发的具体实现不同。二、解决问题 从原理知道他就是控制客户对一个对象的访问,它跟现实中的中介代理类似,只是作为代表做一些受理工作,真正执行的并不是它自己。比如买火车票,外面有很多火车票代理点,我们直接去代理点买票就好而不用跑到火车票买了(暂时不考虑网购哈...
2018-03-27 17:40:18
208

原创 设计模式之工厂模式
1. 简单工厂模式1.1 描述简单工厂模式是由一个工厂对象根据收到的参数决定要创建哪一个类的对象实例。1.2 使用场景工厂类负责创建的对象比较少,客户只需要传入工厂类参数,对于如何创建对象(逻辑)不关心。简单工厂模式很容易违反高内聚低耦合的原则,因此一般只在很简单的情况下使用。1.3 优点最大的优点在于工厂类中包含了必要的逻辑,根据客户需要的逻辑动态实例化相关的类。1.4 例...
2018-03-27 15:46:57
198

原创 使用PriorityQueue实现堆结构
在堆排序这篇文章中千辛万苦的实现了堆的结构和排序,其实在Java 1.5版本后就提供了一个具备了小根堆性质的数据结构也就是优先队列PriorityQueue。下面详细了解一下PriorityQueue到底是如何实现小顶堆的,然后利用PriorityQueue实现大顶堆。Priorit...
2018-03-26 21:29:17
289

原创 谈谈final、finally、finalize的区别
1、final修饰符(关键字) 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能既被声明为abstract,又被声明为final。将变量或者方法声明为final,可以保证他们在使用中不被改变。其初始化可以在两个地方,一个是其定义处,也就是说,在final变量定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数...
2018-03-20 17:28:45
152

原创 Java中的四种引用方式
强引用(StrongReference)强引用就是指在程序代码之中普遍存在的,比如下面这段代码中的object和str都是强引用:Object object = new Object();String str = "hello";只要某个对象有强引用与之关联,JVM必定不会回收这个对象,即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。比如下面这...
2018-03-20 16:19:51
302

原创 Java中的String,StringBuilder,StringBuffer的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。 1、首先说运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改...
2018-03-16 19:52:49
166

原创 java中j=j++和j=++j的理解
先来看一段程序:public class Test1 { public static void main(String[] args) { int j = 0; for(int i = 0; i < 100; i++){ j = j++; } System.out.println(j);...
2018-03-01 10:44:23
23510
9

原创 全文检索引擎Solr的基本原理
一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等
2018-01-06 11:56:11
774

转载 JBPM与Spring整合
Spring与Jbpm的整合1,整合的必要性:流程中对业务数据操作与流程操作需要在同一个事务中实现例如:请假流程——请假人提交请假申请,流程跳转到下一个节点任务(JBPM数据);记录请假人信息到用户表(业务数据)一个操作,可能会同时涉及到JBPM数据和业务数据,如果用两个事务,可能会导致业务与流程的数据不一致。 2,整合图整合原理:(1)使用Spring容器
2017-11-15 18:25:39
644

转载 SSH2框架整合小案例
SSH2框架整合小案例2017-07-05 00:34 152人阅读 评论(0)收藏举报分类: SSH2整合 目录(?)[+]StrutsSpringHibernate整合一创建web工程搭建Struts框架开发环境二搭建Hibernate开发环境三搭建Spring开发环境四Spring与Hibernate整合五S
2017-11-15 17:06:48
487

原创 浅谈Struts2中的ValueStack、StackContext、request
提出问题: StackContext和ValueStack、request
2017-10-18 18:02:50
480

原创 java web项目——MySQL中文乱码问题解决
在我们开发java web项目使用MySQL数据库时,常会遇到中文乱码的问题,比如:使用MySQL命令行查询数据库中的表显示中文乱码;使用jdbc访问数据库读取到中文乱码;在jsp页面显示中出现中文乱码等等问题。
2017-10-01 11:44:37
7986
1

原创 MySql之事务处理详解
在我们谈到事务时,我们想想为什么会有事务存在?现在看看下面这个例子: 如果有以下一个场景:A用户和B用户是银行的储户。现在A要给B转账500元。那么需要做以下几件事: 1. 检查A的账户余额>500元; 2. A账户转账扣除500元; 3. B账户收款增加500元; 正常的流程走下来,A账户扣了500,B账户加了500,皆大欢喜。那如果A账户扣了钱之后,系统出故障了呢?A白白损失了500
2017-09-25 17:59:50
454

原创 设计模式之单例模式
单例模式就是有且仅有一个实例化对象。这有什么用处呢?其实有一些对象我们只需要一个,比如说:线程池、缓存、对话框、处理偏好设置和注册表的对象、日志对象、充当打印机显卡等设备的驱动程序的对象。事实上,这些对象只能有一个实例,如果制造出了多个实例,就会导致许多问题产生,例如:程序的行为异常、资源使用过量、或者是不一致的结果。实现单例的方法: 1、首先将该类的构造方法私有化 2、然后提供一个static
2017-09-24 22:30:43
263
黑马程序员19期java学院全部培训资料和22套java web项目
2018-01-07
【MyEclipse】配置代码格式化模版
2017-10-15
新闻管理系统model2模式
2017-03-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人