自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 RESTful风格

REST – REpresentational State Transfer 直译:表现层状态转移。这个中文直译经常出现在很多文章中。尼玛,谁听得懂“表现层状态转移”,这是人话吗?那就逐个单词来理解REST名称 REST – REpresentational State Transfer 首先,之所以晦涩是因为前面主语被去掉了,全称是 Resource Representational St

2017-12-30 17:16:51 512

原创 策略模式

使用Lambda表达式实现策略模式看下面这个例子public class Asset { public enum AssetType { BOND, STOCK }; private final AssetType type; private final int value; public Asset(final AssetType assetType, final

2017-12-28 08:40:44 376

转载 平衡二叉树

上一篇我们聊过,二叉查找树不是严格的O(logN),导致了在真实场景中没有用武之地,谁也不愿意有O(N)的情况发生,作为一名码农,肯定会希望能把“范围查找”做到地球人都不能优化的地步。     当有很多数据灌到我的树中时,我肯定会希望最好是以“完全二叉树”的形式展现,这样我才能做到“查找”是严格的O(logN),比如把这种”树“调正到如下结构。     这里就涉及到了“树节点”的旋转,也是

2017-12-27 21:34:56 518

原创 java8 - 排序

java8以前在java以前为了对集合排序,通常的做法是这样的bean如下private static class Person { private final String name; private final int age; public Person(String name, int age) { this.name = name;

2017-12-20 21:05:23 1303 1

原创 java8 - Lambda集合操作

遍历集合在java8之前的版本中遍历一个集合常用下面这两种方法private static void list() { for (int i = 0; i < fruits.size(); i++) { System.out.println(fruits.get(i)); }}private static void list1() { for (String

2017-12-20 19:16:41 4471 1

原创 java8 - fork-join之CompletableFuture 使用总结

CompletableFuture类实现了CompletionStage和Future接口。Future是Java 5添加的类,用来描述一个异步计算的结果,但是获取一个结果时方法较少,要么通过轮询isDone,确认完成后,调用get()获取值,要么调用get()设置一个超时时间。但是这个get()方法会阻塞住调用线程,这种阻塞的方式显然和我们的异步编程的初衷相违背。 为了解决这个问题,JDK吸收了

2017-12-20 19:00:03 2840

转载 git安装和使用

1.首先介绍一下什么是Git和GitHub Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius和Merb在内的很多知名项目都使用了Git。 GitHub基于Rails的Git库托管 如前所述,作为一个分布式的版本控制系统,在Git中

2017-12-19 21:01:51 344

原创 尾递归

递归对于下面这个递归求阶乘调用private static long factorialRecursive(long n) { return n == 1 ? 1 : n * factorialRecursive(n - 1);}factorialRecursive调用在运行的时候每次执行factorialRecursive方法调用都会在调用栈上创建一个新的栈帧,用于保存每个方法调用的状态

2017-12-19 14:45:13 365

转载 优先级队列

优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。  PriorityQueue是从JDK1.5开始提供的新的数据结构接口。  如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列。       由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个de

2017-12-16 21:43:07 335

转载 Guava篇-缓存

范例LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES) .removalListener(MY_LISTENER) .build(

2017-12-16 21:41:33 460

转载 HashSet 的实现原理

HashSet 概述 对于 HashSet 而言,它是基于 HashMap 实现的,底层采用 HashMap 来保存元素,所以如果对 HashMap 比较熟悉了,那么学习 HashSet 也是很轻松的。我们先通过 HashSet 最简单的构造函数和几个成员变量来看一下,证明咱们上边说的,其底层是 HashMap:private transient HashMap<E,Object> map;

2017-12-16 18:39:20 484

原创 java8 - 字符串操作

1.java-8新特性 String-Join操作1.字符串之间分隔符StringJoiner sj=new StringJoiner(","); sj.add("aaa"); sj.add("bbb"); sj.add("ccc"); System.out.println(sj.toString());运行结果aaa,bbb,ccc2

2017-12-15 19:00:52 2089

原创 ThreadGroup解读

ThreadGroup是位于java.lang包下的一个类,用于统一的线程管理.一旦一个线程加入到一个线程组后,就不能更换线程所在的线程组将当前线程加入到线程组中Thread thread = new Thread(threadGroup, new MyThread(), "threadname-" + i);通过重写uncaughtException方法捕获异常ThreadGroup thread

2017-12-15 12:10:08 2022

转载 Java SPI机制

SPI的全称是Service Provider Interface。简单来说,SPI机制提供了一个表达接口和其具体实现类之间的绑定关系的方案。具体是在JAR包的"META-INF/services/"目录下建立一个文件,文件名是接口的全限定名,文件的内容可以有多行,每行都是该接口对应的具体实现类的全限定名。

2017-12-12 20:48:04 308

原创 java8 Stream简述

Stream是java 8的新特性,Stream是对集合功能的增强Stream不是集合元素它不是数据结构,不能用于保存数据,它是有关于算法和计算的Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时

2017-12-12 14:35:51 524

原创 动态绑定和静态绑定

动态绑定动态绑定是指编译器在编译阶段不知道要调用哪个方法Parent父类,父类有两个方法一个是类方法shout,一个是实例方法saypublic class Parent { String name; public static void shout(){ System.out.println("我是父类shout静态方法"); } public voi

2017-12-11 20:04:53 4258 4

原创 java final用法汇总

final在java中可以声明变量成员,方法,类以及本地变量,final修饰变量表示该变量不能再改变,final修饰的类和方法表示子类无法再覆盖final关键字的优点JVM会优化final变量,final关键字提高了性能final变量可以在无需线程同步的情况下并发使用final的知识点final成员变量必须在声明的时候初始化或者在构造器中初始化或者在普通初始化快初始化,否则就会报编译错误。

2017-12-11 18:56:45 788

原创 工厂模式

工厂模式工厂模式简单的说就是为屏蔽对象的实例化过程工厂模式可以分为三种 1. 简单工厂 2. 工厂方法模式 3. 抽象工厂模式简单工厂模式简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。如果不使用简单工厂模式,我们一般按如下的方法开发以用户买车为例抽象类车,他可以有很多子类比如大众,BMW或者奥迪@ToStringpublic a

2017-12-10 20:27:17 308

原创 Jdk1.8 HashMap解读

jdk1.8中HashMap重要属性Node关键函数hashstatic final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); }在这里(h = key.hashCode()) ^ (h >>> 16)主要分为了三步

2017-12-10 19:32:06 328

转载 适配器模式

转载自http://blog.csdn.net/zhangjg_blog/article/details/18735243德国插座和中国插座不一样,在德国旅行期间,为了在德国酒店使用德国标准的插座供电需要使用转换器,下面是具体得体代码德标插座接口public interface DBSocketInterface { void powerWithTwoRound();}德标插座实现类pub

2017-12-10 08:43:00 265

原创 装饰模式

通常为了给一个类增加行为,我们会使用继承机制,但是继承机制是静态的,用户不能控制增加行为的方式和时机。而在装饰模式这一设计模式中,我们可以动态的给一个对象增加一些额外的功能,比继承更有灵活性,利于扩展,满足设计模式中的一个重要原则,对修改关闭(避免引入bug)对扩展开放(程序具有弹性)。装饰模式包括如下角色,Component抽象构建,ConcreteComponent具体构建,Decorator抽

2017-12-09 16:47:50 260

原创 利用注解配置Spring容器

@Configuration标注在类上,相当于将该类作为spring的xml的标签@Configurationpublic class SpringConfiguration { public SpringConfiguration() { System.out.println("初始化Spring容器"); }}主函数进行测试public class Main

2017-12-09 11:54:17 555

原创 Java异常机制

Error和Exception区别Java异常的基类为java.lang.Throwable.Throwable对象可以分为两种类型 一种Exception,一种是ErrorError是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题,比如JVM内部的严重问题,无法恢复,程序人员不用处理Exception异常通过合理的处理,程序还可以回到正常执行流程。要求编程人员要进行处理

2017-12-09 09:33:02 381

原创 lombok简介

简介在编写代码的时候,我们要常常编写很多的getter和setter方法,虽然现在的IDE很强大,可以帮我们自动生成这些代码,但是我们可以使用lombok注释来简化源代码使用方法@Data public class BasicClusterInfo implements Serializable { private static final long serialVersionUID

2017-12-08 11:55:31 405

原创 函数式编程@FunctionalInterface

函数式接口是Java8对java8对一类特殊类型的接口的称呼.这类接口定义了唯一的抽象方法的接口.函数式接口代表一种契约,一种对某个特定函数类型的契约.在它出现的地方,实际期望一个符合契约要求的函数.这个注解主要用于编译器错误检查,加上该注解后,当写的接口不符合函数式接口定义的时候会报错JDK8之前已有的函数式接口java.lang.Runnablejava.util.concurrent.Call

2017-12-08 11:15:14 559

原创 Spring.xml 标签配置补充

使用ref来引用容器中其他对象实例,可以通过ref的local,parent,bean属性来指定引用的对象的beanName是什么 属性 说明 local 指定与当前配置的对象在同一个配置文件的对象定义的名称 parent 指定位于当前容器的父容器中定义的对象的引用 bean 适用于任何情况对parent属性的说明:BeanFactory可以分层次,通过实现Hiera

2017-12-07 21:33:57 325

原创 Spring IOC BeanFactory简单介绍

Spring提供了两种容器类型:BeanFactory和ApplicationContextBeanFactory:BeanFactory是基础类型的IoC容器,提供完整的IoC服务支持.如果没有特殊指定,默认采用延迟初始化策略(lazy-load).也就是说bean只有在真正使用的情况下才会被初始化以及依赖注入操作,所以Bean初期启动速度较快,在对于资源有限,并且功能要求不严格的场景,BeanF

2017-12-07 20:23:18 387

转载 异或运算

参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0例如:10100001^00010001=101100000^0=0,0^1=1 0异或任何数=任何数1^0=1,1^1=0 1异或任何数-任何数取反任何数异或自己=把自己置0按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进

2017-12-07 16:39:22 578

原创 代理模式

在开发过程中,常常会遇到下面这样的权限验证场景,比如某个方法只能某些类别的用户才能调用。以前我是这样开发的public class ReadDataService implements EmployeeGateway { //查看某数据 public void readData() { String currentUser=AccessControl.getCurren

2017-12-06 17:10:26 296

原创 java注解回顾

Java注解 又称Java标注,是Java语言5.0版本开始支持加入源代码的特殊语法元数据。Java语言中的类、方法、变量、参数和包等都可以被标注。Java标注和Javadoc不同,标注有自反性。在编译器生成类文件时,标注可以被嵌入到字节码中,由Java虚拟机执行时获取到标注Annotation 不能影响程序代码的执行,无论增加、删除 Annotation,代码都始终如一执行元注解元注解的作用就是用

2017-12-06 14:48:55 259

原创 ReentrantLock的一个问题

今天在回顾java并发编程时遇到一个问题,有点奇怪 代码如下class BlockMutex { private Lock lock = new ReentrantLock(); public BlockMutex() { lock.lock(); } public void f(String name) { lock.lock();

2017-12-04 18:36:17 388

空空如也

空空如也

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

TA关注的人

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