JAVA ’ 目录归档

基于JDK8中Optional写出可读性高的代码

一、前言

JDK8中引入了函数式编程,大大提高了我们编写代码的可读性,其中Optional则是为了避免NPE而生,下面我们就来看看它是如何提高代码可读性的。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 基于JDK8中Optional写出可读性高的代码

httpclient连接池管理,你用对了?

一、前言

为何要用http连接池那?因为使用它我们可以得到以下好处:

因为使用它可以有效降低延迟和系统开销。如果不采用连接池,每当我们发起http请求时,都需要重新发起Tcp三次握手建立链接,请求结束时还需要四次挥手释放链接。而链接的建立和释放是有时间和系统开销的。另外每次发起请求时,需要分配一个端口号,请求完毕后在进行回收。

使用链接池则可以复用已经建立好的链接,一定程度的避免了建立和释放链接的时间开销。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: httpclient连接池管理,你用对了?

HttpClient的异步调用,你造吗?

一、前言

HttpClient提供了两种I/O模型:经典的java阻塞I/O模型和基于Java NIO的异步非阻塞事件驱动I/O模型。

Java中的阻塞I/O是一种高效、便捷的I/O模型,非常适合并发连接数量相对适中的高性能应用程序。只要并发连接的数量在1000个以下并且连接大多忙于传输数据,阻塞I/O模型就可以提供最佳的数据吞吐量性能。然而,对于连接大部分时间保持空闲的应用程序,上下文切换的开销可能会变得很大,这时非阻塞I/O模型可能会提供更好的替代方案。

异步I/O模型可能更适合于比较看重资源高效利用、系统可伸缩性、以及可以同时支持更多HTTP连接的场景。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: HttpClient的异步调用,你造吗?

一文让你快速上手 Mockito 单元测试框架

前言

在计算机编程中,单元测试是一种软件测试方法,通过该方法可以测试源代码的各个单元功能是否适合使用。为代码编写单元测试有很多好处,包括可以及早的发现代码错误,促进更改,简化集成,方便代码重构以及许多其它功能。使用 Java 语言的朋友应该用过或者听过 Junit 就是用来做单元测试的,那么为什么我们还需要 Mockito 测试框架呢?想象一下这样的一个常见的场景,当前要测试的类依赖于其它一些类对象时,如果用 Junit 来进行单元测试的话,我们就必须手动创建出这些依赖的对象,这其实是个比较麻烦的工作,此时就可以使用 Mockito 测试框架来模拟那些依赖的类,这些被模拟的对象在测试中充当真实对象的虚拟对象或克隆对象,而且 Mockito 同时也提供了方便的测试行为验证。这样就可以让我们更多地去关注当前测试类的逻辑,而不是它所依赖的对象。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 一文让你快速上手 Mockito 单元测试框架

关于Java中流式编程与ForkJoinPool的一点事

一、前言

最近在看项目代码时候,发现有一段奇怪的代码,细看完全多余,然后这其中却隐藏着一个不为人知的关于 ForkJoinPool 的秘密…

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 关于Java中流式编程与ForkJoinPool的一点事

HotSpot虚拟机垃圾收集优化教程-并行垃圾收集器

并行垃圾收集器

并行垃圾收集器(也称为吞吐量收集器)是与串行垃圾收集器类似的分代收集器。串行和并行垃圾收集器之间的主要区别在于并行垃圾收集器使用多线程去加快垃圾收集速度。

使用命令行选项-XX:+UseParallelGC启用并行垃圾收集器。默认情况下,使用该选项,minor和major垃圾收集都并行运行,以进一步减少垃圾收集开销。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: HotSpot虚拟机垃圾收集优化教程-并行垃圾收集器

HotSpot虚拟机垃圾收集优化教程-大多数并发垃圾收集器

大多数并发垃圾收集器

大多数并发垃圾收集器对应用程序并发地执行部分工作,正如他们的名称一样。JAVA HotSpot VM包含两个最常使用的并发垃圾收集器:

  • Concurrent Mark Sweep(CMS) 垃圾收集器:此垃圾收集器适用于那些希望缩短垃圾收集暂停时间并且能够与垃圾收集共享处理器资源的应用程序。
  • Garbage-First (G1) 垃圾收集器:这个是服务器级别的垃圾收集器,应用于具有大量内存的多处理器计算机。他在实现垃圾收集器暂停时间目标的同时达到一个尽可能高的吞吐量。
阅读全文

HotSpot虚拟机垃圾收集优化教程-CMS并发标记扫描 垃圾收集器

CMS并发标记扫描 垃圾收集器

CMS垃圾收集器是为了那些需要更短的垃圾收集暂停时间,并且能够在应用程序运行时与垃圾收集器共享处理器资源的应用程序而设计的。

通常,拥有相对较大的长时间存活的数据(一个大的年老代)并且在运行的机器上具有两个或者更多的处理器的应用程序会从CMS垃圾收集器受益。CMS垃圾收集器可以通过命令行选项-XX:+UseConcMarkSweepGC启用。

CMS垃圾收集器已经被废弃,强烈建议考虑G1垃圾收集器替代。

阅读全文

如何在亿级数据中判断一个元素是否存在?

前言

在日常工作中,经常要判断一个元素是否在一个集合中。假设你要向浏览器添加一项功能,该功能可以通知用户输入的网址是否是恶意网址,此时你手上有大约 1000 万个恶意 URL 的数据集,你该如何实现该功能。按我之前的思维,要判断一个元素在不在当前的数据集中,首先想到的就是使用 `hash table`,通过哈希函数运行所有的恶意网址以获取其哈希值,然后创建出一个哈希表(数组)。这个方案有个明显的缺点,就是需要存储原始元素本身,内存占用大,而我们其实主要是关注 `当前输入的网址在不在我们的恶意 URL 数据集中`,也就是之前的恶意 URL 数据集的具体值是什么并不重要,通过吴军老师的《数学之美》了解到,对于这种场景大数据领域有个用于在海量数据情况下判断某个元素是否已经存在的算法很适合,关键的一点是该算法并不存储元素本身,这个算法就是 — 布隆过滤器(Bloom filter)。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 如何在亿级数据中判断一个元素是否存在?

面向对象和面向函数之争

大卫说:“服务的调用最终是通过函数实现的”。“但函数要绑定数据以确定并行的粒度”:皮特争辩道。早上大卫和皮特在花园里争论着,我们所开发的软件的结构究竟是面向对象还是面向函数?这个问题猛然听来好像非常矛盾。软件的结构似乎只能在面向对象和面向函数之间进行选择。但其实不然,面向对象和面向函数不过是我们在开发过程中的一种思考方式。当你从用户的角度来看开发的过程,就是面向对象的。因为用户最终操作的是一个很小的数据集合。这个集合可以抽象的叫做对象。当你换个角度从服务器这边去看时。服务器的数据被各种用户函数所操作。所有函数所拥有的数据的子集的合,构成了服务器的全部数据。并且每个函数的范围都不固定。可能操作很小的数据,也可能操作很大的数据。小到用户状态的更改。大到对几年的数据进行统计分析。哪么从服务器的角度来看就叫面向函数的编程。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 面向对象和面向函数之争

  • 2,263 人阅读
  • 面向对象和面向函数之争已关闭评论

工厂模式-创建型模式

作者:小村长

工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 工厂模式-创建型模式

设计模式

 作者:小村长

疫情期间重新温习了一遍设计模式,期间查阅了很多博客学习了其他老师对于设计模式的见解。然后整理成笔记分享给大家,同时也非常欢迎大家指出笔记中有所欠缺的地方,希望本系列笔记能够对大家的工作和学习有所帮助。

什么是设计模式 模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案 软件设计的几大原则

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 设计模式

非阻塞同步算法实战(四)- 计数器定时持久化

问题背景及要求

  • 需要对评论进行点赞次数和被评论次数进行统计,或者更多维度
  • 要求高并发、高性能计数,允许极端情况丢失一些统计次数,例如宕机
  • 评论很多,不能为每一个评论都一直保留其计数器,计数器需要有回收机制
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 非阻塞同步算法实战(四)- 计数器定时持久化

探秘分布式解决方案: 分布式事务——微服务架构下的主流解决方案之TCC

本文原文地址: 点我

作者: skypyb

上篇文章 (原文) 说完了分布式事务最核心的思想2pc。

那么现在进入到更加复杂的场景。像这种跨库调用之类的,一线互联网公司早就不玩这一套了。上来就是微服务架构。

我这么多服务,你整个啥跨库调用呢?一个服务可能同时调用多个其他的服务。这多个其他的服务中都要执行SQL语句,修改落实到服务所对应的数据库之中。

阅读全文

HotSpot虚拟机垃圾收集优化教程-影响垃圾回收性能表现的因素

影响垃圾回收性能表现的因素

影响垃圾收集性能的两个最重要因素是总的可用内存和专用于年轻代的内存比例。

  • 总堆
    • 影响分代堆大小的选项
    • 堆大小的默认选项值
    • 通过最小化Java堆大小来节省动态占用空间
  • 年轻代
    • 年轻代堆大小选项值
    • 幸存者空间大小
阅读全文

return top