- 博客(149)
- 资源 (1)
- 收藏
- 关注
转载 Java线程:CyclicBarrier 原理
1.CyclicBarrier 字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时候,屏障才会开门。所有被屏障拦截的线程才会运行。2.常用的方法: CyclicBarrier(int parties)创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程...
2019-03-12 21:44:37
370
转载 Java线程:CountDownLatch 原理
CountDownLatch的使用CountDownLatch是同步工具类之一,可以指定一个计数值,在并发环境下由线程进行减1操作,当计数值变为0之后,被await方法阻塞的线程将会唤醒,实现线程间的同步。 public void startTestCountDownLatch() { int threadNum = 10; final CountDownL...
2019-03-12 21:44:29
305
转载 Java线程:sleep() 、join()、yield()区别
sleep() sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。 wait() wait()方法需要和noti...
2019-03-12 21:44:18
543
转载 Java线程:多线程同步器
Java中多线程开发时,离不开线程的分工协作,常用的多线程的同步器有如下几种:1、CountDownLatch应用场景:等待一组线程任务完成后在继续执行当前线程。用法:定义一个CountDownLatch变量latch,在当前线程中调用latch.await()方法,在要等待的一组线程中执行完后调用latch.countDown()方法,这样当该做线程都调用过latch.countDo...
2019-03-12 21:44:07
472
转载 Java线程:创建线程的方式及实现
1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程:Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体。Ø 实现Runnable接口来创建线程类,重写run()方法作为线程执行体。Ø 实现Callable接口来创建线程类,重写run()方法作为线程执行体。其中第一种方式效果最差,它有2点坏处:l 线程类继承了Thread类,无法在继承其他父类。...
2019-03-12 21:43:59
258
转载 Java集合:HashMap 和 ConcurrentHashMap 的区别
从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心。在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从此Map也有安全的了。ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从Concurr...
2019-03-12 21:43:51
743
转载 Java集合:HashSet 和 HashMap 区别
HashSet: HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现: public boolean add(Object obj...
2019-03-12 21:43:42
576
转载 Java集合: HashMap 和 Hashtable 的区别
HashMap 与HashTable的区别HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。本文对两者从来源,特性,算法等多个方面进行对比总结。力争多角度,全方位的展示二者的不同,做到此问题的终结版。1 作者Hashtable的作者:HashMap的作者:Hash Map的作者比Hashtable的...
2019-03-07 21:23:55
301
转载 Java集合:ArrayList 与 Vector 区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态的数组,我们以后可以按位置索引号取出某个元素,,并且其中的数据是允许重复的,这是HashSet之类的集合的最大不同处,HashSet之类的集合不可以按索引号去检索其中的元素,也不允许有重复的元素(本来题目问的与has...
2019-03-07 21:14:14
370
转载 Java集合:Arraylist 与 LinkedList 区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous) 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和...
2019-03-07 21:11:13
278
转载 Java集合:List 和 Map 区别
List是有顺序的 可重复的Map是通过键值对进行取值的key和value是一一对应的关系这张图简单揭示了Set、List与Map之间的相对关系。需要说明下的是,图中的实现并不指这么简单的实现,这个稍后会说到。Collection接口Collection是Java中最基本的集合接口。它描述了一组有关集合操作的方法。int Size(); //集合大小boole...
2019-03-07 21:08:44
471
转载 Java集合:List 和 Set 区别
在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口。 今天我们就来谈谈List集合接口与Set集合接口的差异性。查看List集合接口的接口方法 查看Set集合接口的API 从两者的API中,以add和get为例来看, List中提供索引的方式来添加元素...
2019-03-07 21:03:48
418
转载 JAVA基础:equals 与 == 的区别
区别:“==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。如果两个对象的引用相同时(指向同一对象时),“==”操作符返回true,否则返回flase。注:如果有对内存分配及变量存储位置(堆、栈、方法区常量池、方法区静态区)感兴趣的可以去看看这篇博客,里面写的很详细。对我还在学基础的人来说帮助很大,理解了很多内容,还有待消化。...
2019-03-07 10:02:53
218
转载 JAVA基础:MVC 设计思想
一、概念MVC是model、view、controller的简称。它是一中软件的设计思想,将应用的一个输入、处理、输出按照模型层,视图层,控制层进行分层设计。1)模型: 业务逻辑包含了业务数据的加工与处理以及相应的基础服务(为了保证业务逻辑能够正常进行的事务、安全、权限、日志等等的功能模块)2)视图:展现模型处理的结果;另外,还要提供相应的操作界面,方便用户使用。3)控制器:视图发...
2019-03-07 10:02:39
595
转载 JAVA基础:JDBC 流程
JDBC概述 使用JDBC也挺长时间了,最近因为想学习mybatis的源码,因此打算重新复习一下JDBC的使用。定义:JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开...
2019-03-07 10:02:26
222
转载 JAVA基础:Cookie和Session
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。1.1 Cookie机制在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆...
2019-03-07 10:02:11
307
转载 JAVA基础:http中get和post
1、get和post区别:从设计初衷考虑get是为了查询服务器资源(不改变服务器数据及状态,因此说它是安全和幂等的,但get请求参数一般是直接在url后面,浏览器地址栏中会被看到能保存书签及历史记录,这点讲可能不安全),post是向服务器提交资源(会改变服务器资源和状态,但向服务器提交的数据一般是放在请求体request body中不会直接在地址栏中看到这点说它相对安全——实际上抓包是能看到数...
2019-03-07 10:01:58
439
转载 JAVA基础:Java注解总结
注解是Java元数据,可以理解成代码的标签,正确使用能极大的简化代码的编写逻辑,在各种框架代码中使用也越来越多。一、注解的应用场景生成doc文档; 编译器类型格式检查; 运行时处理如注入依赖等二、自定义注解注意事项注解的类型是@interface,里面只有以“无形参的方法”的形式来声明的成员变量。其方法名定义了成员变量的名字,返回值类型定义了该成员变量的类型。在注解中定义属...
2019-03-06 22:13:23
259
转载 JAVA基础:Java反射
反射是Java最重要的特性。通过Java反射可以在运行时知道一个类的所有成员和方法,知道一个对象的类类型、成员和方法的所有信息,进而调用对象的方法或生成对象的代理或包装类。 Java是面向对象语言,除了静态变量或原始数据类型外都是完全面向对象的。每个类定义也都是Class的实例变量,它表示类的类定义,类的方法、成员变量、构造函数都可以抽象理解为对象,其中Method代表类成员方法对象的类类型,F...
2019-03-06 22:12:12
250
转载 JAVA基础:Java中的接口和抽象类
接口和抽象类是Java设计中最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类。但实际使用上还有很多的不同。两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的抽象,表示本质相似的关系,即like-a关系,而抽象类可以对数据和行为抽象,表示本质相同即has-a关系。 抽象类中的属性和方法可以通过各种访问修饰符修饰,但接口中的变量默认是 public st...
2019-03-06 22:10:53
215
转载 JAVA基础:重载和重写的区别
方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型注:(1)子类中不能重写父类中的final方法(2)子类中必须重写父类中的abstract方法首先我们来讲讲:重载(O...
2019-03-06 22:09:49
228
转载 JAVA基础:int 和 Integer 有什么区别
如果面试官问Integer与int的区别:估计大多数人只会说道两点,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱。所以我对它们进行了总结,希望对大家有帮助。 首先看...
2019-03-06 22:06:33
369
转载 JAVA基础:final, finally, finalize 的区别
1. final 在java中,final可以用来修饰类,方法和变量(成员变量或局部变量)。下面将对其详细介绍。1.1 修饰类 当用final修饰类的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意:final类中所有的成员方法都会隐式的定义为final方法。1.2 修饰方法使用final方法的原因主要有两个: ...
2019-03-06 22:02:30
226
转载 JAVA基础:面向对象的设计原则
面向对象的初衷是应对需求变化、简化设计,提升组件复用性,使系统更稳定、易扩展易维护,而不是让系统更复杂,只开发写一次代码,重复造乱子。开闭原则:对扩展开放,对修改关闭,是面向对象的目标原则,是最终想达到的状态。因为对修改关闭,所以原有功能稳定不会被改出新问题,因为扩展开放,所以可以新增功能应对需求变更。 里氏替换原则:子类替换父类,凡是父类或接口出现的地方都可以用它的子类或实现楼代替,...
2019-03-06 21:59:39
213
转载 JAVA基础:JAVA面向对象设计中类关系
类之间关系分为继承、泛化、依赖、关联、聚合、聚合关系几种。继承是is a关系,泛化(类实现接口)表示like a关系。Generalization(泛化)表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。继承、实现关系是比较明确的,另外几种依赖、关联关系要结合语义(具体上下文环境)来理解。依赖(Dependency)关系...
2019-03-06 21:58:16
663
转载 JAVA基础:面向对象的优良特性
面向对象的优良特性是封装,继承,多态。封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口。有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者;而外部调用者也可以知道自己不可以碰哪里。这就提供一个良好的合作基础——或者说,只要接口这个基础约定不变,则代码改变不足为虑。继承同时具有两种含义:其一是继承基类的方法,并做出自己的改变和/或扩展...
2019-03-06 21:49:32
232
转载 分布式学习笔记十五:数据库分库分表思路
一. 数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),以及切分后对数据的定位、整合。数据切分就是将数据分散存...
2019-03-06 21:37:21
352
转载 分布式学习笔记十四:Web集群与负载均衡服务实现
集群(Cluster):是一组独立的计算机系统构成一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。 负载均衡(Load balance cluster,LBC): 它是利用一个集群中的多台单机,完成许多并行的小的工作。一般情况下,如果一个应用使用的人多了,那么用户请求的相应时间就会增大,机器的性能...
2018-11-02 17:19:47
258
转载 分布式学习笔记十三:分布式事务 TCC-Transaction 源码分析 —— TCC 实现
本文主要基于 TCC-Transaction 1.2.3.3 正式版1. 概述本文分享 TCC 实现。主要涉及如下三个 Maven 项目:tcc-transaction-core :tcc-transaction 底层实现。 tcc-transaction-api :tcc-transaction 使用 API。 tcc-transaction-spring :tcc-transa...
2018-11-01 18:37:35
826
转载 分布式学习笔记十二:Java常用消息队列原理介绍及性能对比
消息队列使用场景为什么会需要消息队列(MQ)?解耦 在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。 冗余 有些情况下,处理数据的过程会失败。除非数据被持久化,否则将造成丢失。消息队列把数据进行持久化直到它们已经被完...
2018-11-01 10:23:13
662
转载 分布式学习笔记十一:分布式事务模型DTP
一。 DTP简介 X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是了定义了规范和API接口,由厂商进行具体的实现 X/Open DTP 定义了三个组件: AP,TM,RMAP(Application Program):也就是应用程...
2018-10-31 17:29:53
1079
转载 分布式学习笔记十:分布式事务的解决方案
分布式事务的解决方案有如下几种:全局消息 基于可靠消息服务的分布式事务 TCC 最大努力通知方案1:全局事务(DTP模型)全局事务基于DTP模型实现。DTP是由X/Open组织提出的一种分布式事务模型——X/Open Distributed Transaction Processing Reference Model。它规定了要实现分布式事务,需要三种角色:AP:Applica...
2018-10-31 15:19:36
907
转载 分布式学习笔记九:一致性协议
2PC与3PC在分布式系统中,每一个机器节点虽然都能够明确地知道自己在进行事务操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果。因此,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务处理的ACID特性,就需要引入一个称为"协调者(Coordinator)"的组件来统一调度所有分布式节点的执行逻辑,这些被调度的分布式节点则被称为"参与者(Participant)"...
2018-10-31 14:39:58
185
转载 分布式学习笔记八:漫画什么是分布式事务?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bjweimengshu/article/details/79607522点击上方“程序员小灰”,选择“置顶公众号” 不知道你是否遇到过这样的情况,去小卖铺买东西,付了钱,但是店主因为处理了一些其他事,居然忘记你付了钱,又叫你重新付。又或者在网上购物明明已经扣款,但是却告诉我没有发生交...
2018-10-31 11:38:22
564
转载 分布式学习笔记七:基于zookeeper实现分布式锁
一、分布式锁介绍 分布式锁主要用于在分布式环境中保护跨进程、跨主机、跨网络的共享资源实现互斥访问,以达到保证数据的一致性。二、架构介绍 在介绍使用Zookeeper实现分布式锁之前,首先看当前的系统架构图 解释: 左边的整个区域表示一个Zookeeper集群,locker是Zookeeper的一个持久节点,node_1、node_2、n...
2018-10-31 10:12:48
144
转载 分布式学习笔记六:分布式利器Zookeeper
ZooKeeper简介ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ZooKeeper设计目的1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。2.可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受...
2018-10-31 09:53:13
166
转载 分布式学习笔记五:redis分步式锁
前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,本篇博客将详细介绍如何正确地实现Redis分布式锁。需满足如下条件:-互斥性。在任意时刻,只有一个客户端能持有锁。 - 不会...
2018-10-30 18:31:37
685
转载 分布式学习笔记四:分布式锁的实现方式
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致...
2018-10-30 16:55:23
211
转载 分布式学习笔记三:分布式系统session一致性的问题
session的概念什么是session?服务器为每个用户创建一个会话,存储用户的相关信息,以便多次请求能够定位到同一个上下文。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放...
2018-10-30 10:48:42
446
1
转载 分布式学习笔记二:从分布式一致性谈到CAP理论、BASE理论
问题的提出在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景。1、火车站售票假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车 票,然后拿着车票去检票口,再坐上火车,开始一段美好的旅行----一切似乎都是那么和谐。想象一下,如果他选择的目的地是杭州,而某一趟开往杭州的火车 只剩下最后一张车票,可能在同一时刻,不同售票窗口的另...
2018-10-30 09:45:25
344
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人