JAVA
gkmmg
小菜鸡
展开
-
SpringCloud之高可用注册中心Eureka Server集群搭建
Spring Cloud的Eureka Server的高可用实际上就是将自己作为服务向其他服注册中心注册自己,形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。接下来介绍下如何搭建一个服务注册中心集群。下图是文件结构, 非常简洁,就一个启动类。不得不说有了spingBoot开发一个新的项目简单了不少。我们需要的maven的依赖:<dependencies> ...原创 2018-04-08 15:43:04 · 1478 阅读 · 2 评论 -
用策略模式重构工作中的代码
策略模式:所谓策略模式,其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。实际项目中,重构前的代码:if (processType != null) { if (processType.equals(BizTypeEnums.TRAVEL.getCod...原创 2018-12-19 22:48:57 · 395 阅读 · 0 评论 -
java8 JDK1.8 stream 对数据分组操作
之前想对数据进行分组统计之类的操作,需要使用关系型数据库的group by等操作来实现。但这两天工作中碰到一个问题,数据从其他系统获取而不再是我从数据库中取了,也就是说我没法使用关系型数据库提供的操作方法了。了解了一下java8中stream 对数据的处理。这次碰到的需求是,拿到通过dubbo接口调用其他系统返回的数据,然后对这些进行一个类似于聚合的操作,把多个属性相同的对象视为同一个对象。...原创 2018-08-15 11:35:06 · 19863 阅读 · 0 评论 -
在实际工作中理解乐观锁和悲观锁
先把需求提出:在用户提交表单数据后,保存表单数据之前,通过切面手段或硬编码生成一个表单编号放入表单数据中。 生成编号的规则是A3501047800002009120003A+12位单位编码+年月+四位顺序号(按照A+12位单位编码+年月去查询目前的最大值,然后+1) 如果两个线程A、B同时查出上一个编号是A3501047800002009120003,都做了+1操作,如果数据库表单...原创 2018-05-24 14:47:13 · 482 阅读 · 0 评论 -
为什么覆盖equals时也要覆盖hashCode方法
参考自《effective java》第九条。现在假设我们有一个矩形类Rectangle public class Rectangle { private int length; private int width; public Rectangle(int length, int width) { this.length = length; ...原创 2018-05-13 01:23:10 · 2466 阅读 · 3 评论 -
java并发控制常用api
sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),属于Thread类中的方法。在调用sleep()方法的过程中,线程不会释放对象锁。依然持有着锁入眠,也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。等待睡眠时间到了之后进入线程进入就绪状态。sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行...原创 2018-04-26 10:29:25 · 461 阅读 · 0 评论 -
JAVA中对CAS算法的应用
CAS算法:Compare and Swap比较并交换。总共由三个操作数,一个内存值v,一个线程本地内存旧值a(期望操作前的值)和一个新值b,在操作期间先拿旧值a和内存值v比较有没有发生变化,如果没有发生变化,才能内存值v更新成新值b,发生了变化则不交换。循环CAS算法则是不停的执行CAS操作。java.util.concurrent.atomic包下的原子变量类型,比如AtomicInteger...原创 2018-05-02 20:57:33 · 2025 阅读 · 0 评论 -
HashMap底层分析
最近整理HashMap的知识,发现HashMap的底层数据结构在jdk1.8版本之后发生了变化,在1.8版本之前,和散列表的一样,是由散列桶(数组)+链表组成的。在1.8版本之后,结构如下图所示,由散列桶(数组)+链表+红黑树实现。先贴出HashMap中数据结构的定义/* 部分HashMap类中属性的定义 */transient HashMap.Node<K, V>[] table;...原创 2018-03-22 00:14:53 · 307 阅读 · 0 评论 -
关于HashSet,LinkedHashSet ,TreeSet
HashSet这个类,表面上是Set接口的实现类,继承自Collection,但却是基于HashMap来实现的。之所以和List、Queue同属于Collection子类,我想是因为他们都是线性结构的吧。而Map类Key的唯一性正好适用于Set集合的唯一性的特性,所以Set类设计者就直接拿Map来用了吧。来看下HashSet类的源码: /** * 如果此set不包含任何元素,则返回...原创 2018-04-24 00:27:54 · 235 阅读 · 0 评论 -
java中volatile关键字
volatile提供可见性支持,但是不能控制并发。在说volatile关键字之前,要先提一下JMM(java内存模型)对java线程之间通信的控制,线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其...原创 2018-04-06 17:58:01 · 159 阅读 · 0 评论 -
java多线程模拟死锁问题
什么时死锁呢?来自百度百科的解释:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。用比较好理解的大白话来说就时线程A拿到了资源1对象的锁,接下来准备要再拿资源2对象的锁的时候,线程B来了,线程B先拿了资源2对象的锁,如何要准备去拿资源1对象的锁。这个时候就进入了一个谁也不让步谁有不能继续执行下去的尴尬场面。再有更多的...原创 2018-04-06 15:55:30 · 2467 阅读 · 3 评论 -
SpringCloud之服务治理机制
服务提供者服务注册:服务提供者在启动的时候通过发送Rest请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。Eureka Server在收到这个请求后,将元数据信息存储在一个双层结构Map中,第一层的key是服务名,第二层的key是具体服务的实例名。服务同步:两个服务提供者分别注册到两个不同的服务注册中心上,因为服务中心之间是相互注册为服务的,所以当服务提供者...原创 2018-04-09 16:53:29 · 1454 阅读 · 0 评论 -
SpringCloud之注册服务提供者和注册服务消费者
上篇文章讲到了如何利用SpringBoot快速搭建一个SpringCloud的Eureka Server集群。这篇来讲一下如何创建并向Eureka Server集群注册一个或多个服务提供者、服务消费者。服务消费端这是我们开发环境中的目录结构我们需要的maven的依赖:<dependencies> <dependency> <groupId>org.spr...原创 2018-04-09 16:51:12 · 2959 阅读 · 0 评论 -
java 单链表反转
将单向链表发转方向,头变尾,尾变头,将链表调个个儿。思路:定义三个引用,pre为上一结点,cur为当前节点,nex为下一结点。把cur的下一节点暂存到nex中,然后将cur的下一节点指向pre,再将pre指向cur,cur指向nex。只要cur不为空,就一直如此循环。直到cur为空,即最后一个节点的next结点为空。最后再把原链表的头节点变成了尾节点,所以要把它的next节点设置为null。...原创 2019-02-15 19:26:19 · 247 阅读 · 0 评论