自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GarfieldEr007的专栏

勤奋治学 深度思考 静心钻研 先苦后甜

  • 博客(201)
  • 资源 (1)
  • 收藏
  • 关注

转载 JDK源码分析——Java的SPI机制分析与实战

重点提示:在我博客中的所有的源码分析的实例,我都将会放到github上,感兴趣的朋友可以下载下来调试运行,我相信还是可以有所收获的。我的目的是让所有读到我博客的朋友都可以了解到有价值的东西,学习到java核心的原理,使用起来更加得心应手。所有实例的GitHub地址:https://github.com/mh47838704/JavaExample ,我会不定期的更新代码,所有大家可以长期关注一...

2018-12-31 12:25:04 609

转载 高级开发必须理解的Java中SPI机制

本文通过探析JDK提供的,在开源项目中比较常用的Java SPI机制,希望给大家在实际开发实践、学习开源项目提供参考。1 SPI是什么SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。整体机制图如下: Java SPI 实际上是“基于接口的编程+策略模式+配置文件”组合...

2018-12-31 12:22:28 820

转载 [Google Guava] 3-缓存

原文地址  译文地址    译者:许巧辉  校对:沈义扬范例01 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 02         .maximumSize(1000) 03         .expireAfterWrite(10, TimeUnit.MINUTES) 0...

2018-12-31 12:03:26 626

转载 [Google Guava] 11-事件总线

原文链接 译文连接 译者:沈义扬传统上,Java的进程内事件分发都是通过发布者和订阅者之间的显式注册实现的。设计EventBus就是为了取代这种显示注册方式,使组件间有了更好的解耦。EventBus不是通用型的发布-订阅实现,不适用于进程间通信。范例01 // Class is typically registered by the container. 02 clas...

2018-12-31 12:03:19 641

转载 [Google Guava] 1.3-常见Object方法

原文链接 译者: 沈义扬equals当一个对象中的字段可以为null时,实现Object.equals方法会很痛苦,因为不得不分别对它们进行null检查。使用Objects.equal帮助你执行null敏感的equals判断,从而避免抛出NullPointerException。例如:1 Objects.equal("a", "a"); // returns true 2 ...

2018-12-31 12:03:11 565

转载 [Google Guava] 2.4-集合扩展工具类

原文链接 译文链接 译者:沈义扬,校对:丁一简介有时候你需要实现自己的集合扩展。也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个Iterable,其底层实际上是遍历数据库查询的结果集。Guava为你,也为我们自己提供了若干工具方法,以便让类似的工作变得更简单。(毕竟,我们自己也要用这些工具扩展集合框架。)Forwarding装饰器针对所有类型的集合接口,Guava都提...

2018-12-31 12:03:03 650

转载 [Google Guava] 8-区间

原文链接 译文链接 译文:沈义扬范例1 List scores; 2 Iterable belowMedian =Iterables.filter(scores,Range.lessThan(median)); 3 ... 4 Range validGrades = Range.closed(1, 12); 5 for(int grade : ...

2018-12-31 12:02:56 627 1

转载 [Google Guava] 6-字符串处理:分割,连接,填充

原文链接 译文链接 译者:沈义扬,校对:丁一连接器[Joiner]用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有null,那连接操作会更难。Fluent风格的Joiner让连接字符串更简单。1 Joiner joiner = Joiner.on("; ").skipNulls(); 2 return joiner.join("Harry", ...

2018-12-31 12:02:47 910

转载 [Google Guava] 1.1-使用和避免null

原文链接 译文链接 译者: 沈义扬   Doug Lea 说,“Null 真糟糕。”  当Sir C. A. R. Hoare 使用了null引用后说,”使用它导致了十亿美金的错误。”轻率地使用null可能会导致很多令人惊愕的问题。通过学习Google底层代码库,我们发现95%的集合类不接受null值作为元素。我们认为, 相比默默地接受null,使用快速失败操作拒绝null值对开发者更...

2018-12-31 12:02:40 573

转载 [Google Guava] 4-函数式编程

原文链接 译文链接 译者:沈义扬,校对:丁一注意事项截至JDK7,Java中也只能通过笨拙冗长的匿名类来达到近似函数式编程的效果。预计JDK8中会有所改变,但Guava现在就想给JDK5以上用户提供这类支持。过度使用Guava函数式编程会导致冗长、混乱、可读性差而且低效的代码。这是迄今为止最容易(也是最经常)被滥用的部分,如果你想通过函数式风格达成一行代码,致使这行代码长到荒唐,Gua...

2018-12-31 12:02:33 606

转载 google Guava包的ListenableFuture解析

原文地址  译者:罗立树  校对:方腾飞并发编程是一个难题,但是一个强大而简单的抽象可以显著的简化并发的编写。出于这样的考虑,Guava 定义了 ListenableFuture接口并继承了JDK concurrent包下的Future 接口。我们强烈地建议你在代码中多使用ListenableFuture来代替JDK的 Future, 因为:大多数Futures 方法中需要它。 转到...

2018-12-30 21:18:07 909

转载 [Google Guava] 9-I/O

原文链接 译文链接 译者:沈义扬字节流和字符流Guava使用术语”流” 来表示可关闭的,并且在底层资源中有位置状态的I/O数据流。术语”字节流”指的是InputStream或OutputStream,”字符流”指的是Reader 或Writer(虽然他们的接口Readable 和Appendable被更多地用于方法参数)。相应的工具方法分别在ByteStreams 和CharStreams...

2018-12-30 21:09:53 571

转载 [Google Guava] 1.2-前置条件

原文链接 译文链接 译者: 沈义扬前置条件:让方法调用的前置条件判断更简单。Guava在Preconditions类中提供了若干前置条件判断的实用方法,我们强烈建议在Eclipse中静态导入这些方法。每个方法都有三个变种:没有额外参数:抛出的异常中没有错误消息; 有一个Object对象作为额外参数:抛出的异常使用Object.toString() 作为错误消息; 有一个String...

2018-12-30 21:09:11 618

转载 [Google Guava] 10-散列

原文链接 译文链接 译者:沈义扬概述Java内建的散列码[hash code]概念被限制为32位,并且没有分离散列算法和它们所作用的数据,因此很难用备选算法进行替换。此外,使用Java内建方法实现的散列码通常是劣质的,部分是因为它们最终都依赖于JDK类中已有的劣质散列码。Object.hashCode往往很快,但是在预防碰撞上却很弱,也没有对分散性的预期。这使得它们很适合在散列表中运用...

2018-12-30 21:08:22 586

转载 [Google Guava] 2.1-不可变集合

原文链接 译者:沈义扬范例01 public static final ImmutableSet<String> COLOR_NAMES = ImmutableSet.of( 02         "red", 03         "orange", 04         "yellow", 05         "green",...

2018-12-30 21:07:37 606

转载 [Google Guava] 排序: Guava强大的”流畅风格比较器”

原文链接 译者: 沈义扬排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。从实现上说,Ordering实例就是一个特殊的Comparator实例。Ordering把很多基于Comparator的静态方法(如Collections.max)包装为自己的实例方法(非静态方法),并且提供了链式调用方法,来定制和...

2018-12-30 21:06:54 632

转载 [Google Guava] 12-数学运算

原文链接 译文链接 译者:沈义扬范例1 int logFloor = LongMath.log2(n, FLOOR); 2 int mustNotOverflow = IntMath.checkedMultiply(x, y); 3 long quotient = LongMath.divide(knownMultipleOfThree, 3, RoundingM...

2018-12-30 21:06:03 668

转载 [Google Guava] 7-原生类型

原文链接 译文链接 译者:沈义扬,校对:丁一概述Java的原生类型就是指基本类型:byte、short、int、long、float、double、char和boolean。在从Guava查找原生类型方法之前,可以先查查Arrays类,或者对应的基础类型包装类,如Integer。原生类型不能当作对象或泛型的类型参数使用,这意味着许多通用方法都不能应用于它们。Guava提供了若干通用...

2018-12-30 21:05:08 642

转载 Google Guava官方教程(中文版)

原文链接  译文链接 译者: 沈义扬,罗立树,何一昕,武祖  校对:方腾飞引言Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] 、缓存 [caching] 、原生类型支持 [primitives support] 、并发库 [concurrency libraries] 、通用注解 [common annotations] 、...

2018-12-30 21:02:17 736 1

转载 Java泛型的类型擦除

写在前面:最近在看泛型,研究泛型的过程中,发现了一个比较令我意外的情况,Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节代码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。 其实编译器通过Code sharing方式为每个泛型类型创建唯一的字节码表示,并且将该泛型类型的实例都映射到这个唯一的字节码表示上。将多种泛型类形实例映射到唯一...

2018-12-30 17:53:29 756

转载 Java语言 泛型 类型擦除

初学者只要学习了"Java 编程简介学习路径"的第 20 单元,也可以学习本文。此文将定义类型擦除,它与 Java 泛型的关系,以及未正确使用泛型时看到的一些神秘错误和警告消息(相信我,我们都经历过这些)。前提条件Java 编程语言的基础知识更多信息: 《Java 编程简介》学习路径,第 1 单元Java 泛型的初中级知识(第 20 单元)更多信息: 《Java 编程简介》学...

2018-12-30 17:53:09 966

转载 Java泛型:类型擦除

前情回顾Java泛型:泛型类、泛型接口和泛型方法类型擦除代码片段一 1234567 Class c1 = new ArrayList<Integer>().getClass();Class c2 = new ArrayList<String>().getClass(); System.out.printl...

2018-12-29 20:53:39 711

转载 java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题

原java泛型(二)、泛型的内部原理:类型擦除以及类型擦除带来的问题2012年08月29日 23:44:10 Kilnn 阅读数:56717 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LonelyRoamer/article/details/7868820参考:java核心技术一、Java泛型的实现方法:类型擦除前面已...

2018-12-29 20:52:53 668

转载 Java 泛型,你了解类型擦除吗?

泛型,一个孤独的守门者。大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可测,它并不神秘与神奇。泛型是 Java 中一个很小巧的概念,但同时也是一个很容易让人迷惑的知识点,它让人迷惑的地方在于它的许多表现有点违反直觉。文章开始的地方,先给大家奉上一道经典的测试题。List<String> l1 = new Arr...

2018-12-29 20:51:39 621

转载 Java 泛型中? super T和? extends T的区别

原文链接          李璟(jlee381344197@gmail.com)经常发现有List<? super T>、Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类,下面我们详细分析一下两种通配符具体的区别。 exten...

2018-12-29 12:59:51 662

转载 Java 泛型总结(三):通配符的使用

简介前两篇文章介绍了泛型的基本用法、类型擦除以及泛型数组。在泛型的使用中,还有个重要的东西叫通配符,本文介绍通配符的使用。这个系列的另外两篇文章:Java 泛型总结(一):基本用法与类型擦除 Java 泛型总结(二):泛型与数组数组的协变在了解通配符之前,先来了解一下数组。Java 中的数组是协变的,什么意思?看下面的例子:class Fruit {}class App...

2018-12-29 12:58:20 1060

转载 【Java】泛型中 extends 和 super 的区别?

<? extends T>和<? super T>是Java泛型中的“通配符(Wildcards)”和“边界(Bounds)”的概念。<? extends T>:是指 “上界通配符(Upper Bounds Wildcards)” <? super T>:是指 “下界通配符(Lower Bounds Wildcards)”为什么要用通配符...

2018-12-29 12:57:18 652

转载 Java泛型三:通配符详解extends super

在java泛型中,? 表示通配符,代表未知类型,< ? extends Object>表示上边界限定通配符,< ? super Object>表示下边界限定通配符。通配符 与 T 的区别T:作用于模板上,用于将数据类型进行参数化,不能用于实例化对象。 ?:在实例化对象的时候,不确定泛型参数的具体类型时,可以使用通配符进行对象定义。< T > 等同于 ...

2018-12-29 12:55:11 761

转载 Java泛型详解

泛型是什么?用来规定一个类、接口或方法所能接受的数据的类型. 就像在声明方法时指定参数一样, 我们在声明一个类, 接口或方法时, 也可以指定其"类型参数", 也就是泛型. 泛型的好处提高安全性: 将运行期的错误转换到编译期. 如果我们在对一个对象所赋的值不符合其泛型的规定, 就会编译报错. 避免强转: 比如我们在使用List时, 如果我们不使用泛型, 当从List中取出元素时, ...

2018-12-29 12:52:19 642

转载 Java泛型详解

引言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个简单的Box类: 1 2 3 4 5 public class Box {     private Strin...

2018-12-29 12:51:29 599

转载 Java泛型:泛型类、泛型接口和泛型方法

根据《Java编程思想 (第4版)》中的描述,泛型出现的动机在于:有许多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。泛型类容器类应该算得上最具重用性的类库之一。先来看一个没有泛型的情况下的容器类如何定义:public class Container { private String key; private String value;...

2018-12-29 12:50:14 599

转载 GIT使用rebase和merge的正确姿势

背景使用GIT这么久了从来没有深层次的研究过,一般情况下,只要会用pull,commit,push等几个基本提交命令就可以了,公司的项目分支管理这部分操作一直都是我负责,对于分支的合并我一直都使用merge操作,也知道还有一个rebase,但是一直不会用,百度了很多,说的基本都差不多,按照步骤在公司项目里操作,简直就是噩梦,只要rebase就出现噩梦般的冲突,所以一直不敢用,今天自己捣腾了一番...

2018-12-28 12:49:06 9692 1

转载 Git 教程 菜单

高质量的 Git 中文教程,源于国外社区的优秀文章和个人实践

2018-12-28 12:47:29 760

转载 git Rebase 代替合并

虽然合并(merge)操作可以用来简单和方便地整合改动,但是它却不是唯一的方法。“Rebase” 就是另一种替代手段。注释虽然 rebase 相对于我们已知的整合操作来说有着比较显著的优点,但是这也是在很大程度上取决于个人的喜好。一些团队喜欢使用 rebase,而另一些可能倾向于使用合并。Rebase 相对于合并来说是比较复杂的。我建议你可以跳过这一章,除非你和你的团队确定会用到 re...

2018-12-28 12:46:17 921

转载 git Rebase 变基 教程

在上一节我们看到了,多人在同一个分支上协作时,很容易出现冲突。即使没有冲突,后push的童鞋不得不先pull,在本地合并,然后才能push成功。每次合并再push后,分支变成了这样:$ git log --graph --pretty=oneline --abbrev-commit* d1be385 (HEAD -> master, origin/master) init hel...

2018-12-28 12:45:06 1066

转载 用git rebase合并

合并issue3分支的时候,使用rebase可以使提交的历史记录显得更简洁。现在暂时取消刚才的合并。$ git reset --hard HEAD~切换到issue3分支后,对master执行rebase。$ git checkout issue3Switched to branch 'issue3'$ git rebase masterFirst, rewindin...

2018-12-28 12:44:02 905

转载 Git 分支 - rebase 变基

变基在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。 在本节中我们将学习什么是“变基”,怎样使用“变基”,并将展示该操作的惊艳之处,以及指出在何种情况下你应避免使用它。变基的基本操作请回顾之前在 分支的合并 中的一个例子,你会看到开发任务分叉到两个不同分支,又各自提交了更新。Figure 35. 分叉的提交历史之前介绍过,整合分支最容易的...

2018-12-28 12:43:14 1100

转载 Java中JMX管理器的作用,项目中有什么具体使用?

作者:wuxinliulei链接:https://www.zhihu.com/question/36688387/answer/68667704来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能。那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不简断运行...

2018-12-28 12:28:34 742

转载 用 JMX 检测应用程序

有多少次您曾经注视着运行中的应用程序,问自己:“它到底在做什么?为什么用了这么长时间呢?” 在这些时刻,您可能会想如果自己在应用程序中构建了更多的监视功能就好了。例如,在服务器应用程序中,能够查看排队等候处理的任务的数量和类型、当前正在处理的任务、过去一分钟或一小时内的吞吐量统计、平均任务处理时间等。这些统计值容易搜集,但是在需要数据的时候,如果没有非侵入性的数据检索机制,那么这些值就不太有用。...

2018-12-28 12:28:26 808

转载 JMX 与系统管理

前言在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMTI 等,才能监测 Java 程序运行过程中的 JVM 和系统的一系列情况,这种方式一直以来被人所诟病,因为这需要大量的 C 程序和 JNI 调用,开发效率十分低下。于是出现了各种不同的专门做资源管...

2018-12-27 22:26:40 666

搜索引擎以及网上免费学术资源的检索

介绍了一下搜索引擎的工作原理和组成部分,以Google和百度为代表介绍了搜索引擎的高级检索功能,以及搜索引擎非常强大的最常用的八条高级检索命令,最后对网上免费学术资源网站进行了介绍。

2015-09-22

空空如也

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

TA关注的人

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