6 gkmmg

尚未进行身份认证

我要认证

小菜鸡

等级
TA的排名 20w+

java 单链表反转

将单向链表发转方向,头变尾,尾变头,将链表调个个儿。思路:定义三个引用,pre为上一结点,cur为当前节点,nex为下一结点。把cur的下一节点暂存到nex中,然后将cur的下一节点指向pre,再将pre指向cur,cur指向nex。只要cur不为空,就一直如此循环。直到cur为空,即最后一个节点的next结点为空。最后再把原链表的头节点变成了尾节点,所以要把它的next节点设置为null。...

2019-02-15 19:26:19

用策略模式重构工作中的代码

策略模式:所谓策略模式,其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。实际项目中,重构前的代码:if (processType != null) { if (processType.equals(BizTypeEnums.TRAVEL.getCod...

2018-12-19 22:48:57

java8 JDK1.8 stream 对数据分组操作

之前想对数据进行分组统计之类的操作,需要使用关系型数据库的group by等操作来实现。但这两天工作中碰到一个问题,数据从其他系统获取而不再是我从数据库中取了,也就是说我没法使用关系型数据库提供的操作方法了。了解了一下java8中stream 对数据的处理。这次碰到的需求是,拿到通过dubbo接口调用其他系统返回的数据,然后对这些进行一个类似于聚合的操作,把多个属性相同的对象视为同一个对象。...

2018-08-15 11:35:06

在实际工作中理解乐观锁和悲观锁

先把需求提出:在用户提交表单数据后,保存表单数据之前,通过切面手段或硬编码生成一个表单编号放入表单数据中。 生成编号的规则是A3501047800002009120003A+12位单位编码+年月+四位顺序号(按照A+12位单位编码+年月去查询目前的最大值,然后+1) 如果两个线程A、B同时查出上一个编号是A3501047800002009120003,都做了+1操作,如果数据库表单...

2018-05-24 14:47:13

为什么覆盖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

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

java并发控制常用api

sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),属于Thread类中的方法。在调用sleep()方法的过程中,线程不会释放对象锁。依然持有着锁入眠,也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。等待睡眠时间到了之后进入线程进入就绪状态。sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行...

2018-04-26 10:29:25

关于HashSet,LinkedHashSet ,TreeSet

HashSet这个类,表面上是Set接口的实现类,继承自Collection,但却是基于HashMap来实现的。之所以和List、Queue同属于Collection子类,我想是因为他们都是线性结构的吧。而Map类Key的唯一性正好适用于Set集合的唯一性的特性,所以Set类设计者就直接拿Map来用了吧。来看下HashSet类的源码: /** * 如果此set不包含任何元素,则返回...

2018-04-24 00:27:54

理解断路器(curcuit breaker)模式

在分布式环境下,特别是微服务结构的分布式系统中, 一个软件系统调用另外一个远程系统是非常普遍的。这种远程调用的被调用方可能是另外一个进程,或者是跨网路的另外一台主机, 这种远程的调用和进程的内部调用最大的区别是,远程调用可能会失败,或者挂起而没有任何回应,直到超时。更坏的情况是, 如果有多个调用者对同一个挂起的服务进行调用,那么就很有可能的是一个服务的超时等待迅速蔓延到整个分布式系统,引起连锁反应...

2018-04-21 08:30:16

SpringCloud之服务治理机制

服务提供者服务注册:服务提供者在启动的时候通过发送Rest请求的方式将自己注册到Eureka Server上,同时带上了自身服务的一些元数据信息。Eureka Server在收到这个请求后,将元数据信息存储在一个双层结构Map中,第一层的key是服务名,第二层的key是具体服务的实例名。服务同步:两个服务提供者分别注册到两个不同的服务注册中心上,因为服务中心之间是相互注册为服务的,所以当服务提供者...

2018-04-09 16:53:29

SpringCloud之注册服务提供者和注册服务消费者

上篇文章讲到了如何利用SpringBoot快速搭建一个SpringCloud的Eureka Server集群。这篇来讲一下如何创建并向Eureka Server集群注册一个或多个服务提供者、服务消费者。服务消费端这是我们开发环境中的目录结构我们需要的maven的依赖:<dependencies> <dependency> <groupId>org.spr...

2018-04-09 16:51:12

SpringCloud之高可用注册中心Eureka Server集群搭建

Spring Cloud的Eureka Server的高可用实际上就是将自己作为服务向其他服注册中心注册自己,形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。接下来介绍下如何搭建一个服务注册中心集群。下图是文件结构, 非常简洁,就一个启动类。不得不说有了spingBoot开发一个新的项目简单了不少。我们需要的maven的依赖:<dependencies> ...

2018-04-08 15:43:04

java中volatile关键字

volatile提供可见性支持,但是不能控制并发。在说volatile关键字之前,要先提一下JMM(java内存模型)对java线程之间通信的控制,线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其...

2018-04-06 17:58:01

java多线程模拟死锁问题

什么时死锁呢?来自百度百科的解释:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。用比较好理解的大白话来说就时线程A拿到了资源1对象的锁,接下来准备要再拿资源2对象的锁的时候,线程B来了,线程B先拿了资源2对象的锁,如何要准备去拿资源1对象的锁。这个时候就进入了一个谁也不让步谁有不能继续执行下去的尴尬场面。再有更多的...

2018-04-06 15:55:30

阿里巴巴Java代码检测插件的安装和使用

做为一个码农,不能单单是为了完成功能编码,还需要对自己编写的代码质量负责。介绍一下最近在idea上安装的阿里巴巴发布的代码规范插件,功能非常的简单暴力。IDEA插件安装1、 File >> Settings >> Plugins >> Browse repositories… 搜 alibaba 即可。2、安装完成重启后,出现下图小图标,即安装成功。使用 点击这...

2018-04-04 15:52:56

JDK1.8新特性之接口类的新关键字default

写在前面:发现这个新特性是在看容器类源码时,看到Iterator类的时候发现接口类竟然有方法体,开始怀疑自己对接口定义的概念,于是又查了一下,才发现这是jdk1.8的新特性(好吧我承认我发现的有点晚T.T)public interface Iterator<E> { boolean hasNext(); E next(); default void remove...

2018-03-22 16:59:26

HashMap底层分析

最近整理HashMap的知识,发现HashMap的底层数据结构在jdk1.8版本之后发生了变化,在1.8版本之前,和散列表的一样,是由散列桶(数组)+链表组成的。在1.8版本之后,结构如下图所示,由散列桶(数组)+链表+红黑树实现。先贴出HashMap中数据结构的定义/* 部分HashMap类中属性的定义 */transient HashMap.Node<K, V>[] table;...

2018-03-22 00:14:53

防止按钮被快速多次点击,防止多次提交

一开始试了把ansyc设置成false,但是并没有用,在网上找了下,发现可以用以下方式解决。beforeSend:请求发送前,complete:请求完成(不管请求成功还是失败)  $.ajax({ async:true, url:"/BoardManage/board/Post", type:"post", data:form...

2017-04-07 15:02:40
勋章 我的勋章
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!