自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序那些事

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在程序那些事!...

原创 java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程
原力计划

java作为第一大编程语言,可谓源远流长,一代又一代的java程序员前仆后继走在java学习的路上。java程序员的学习之路在2020年又有什么变化呢?本文详细附上了每一个部分所需知识的教程链接地址,并会持续更新,希望能够和大家一起进步!

2020-04-13 10:16:38 12086 8

原创 Iterator to list的三种方法
原力计划

文章目录简介使用while使用ForEachRemaining使用stream总结 Iterator to list的三种方法 简介 集合的变量少不了使用Iterator,从集合Iterator非常简单,直接调用Iterator方法就可以了。 那么如何从Iterator反过来生成List呢?今天教...

2020-04-30 07:02:54 8675 0

原创 fail-safe fail-fast知多少
原力计划

文章目录简介Fail-fast IteratorFail-fast 的原理Fail-safe Iterator总结 fail-safe fail-fast知多少 简介 我们在使用集合类的时候,通常会需要去遍历集合中的元素,并在遍历中对其中的元素进行处理。这时候我们就要用到Iterator,经常写程...

2020-04-30 06:54:50 9686 0

原创 JDK14的新特性:Lombok的终结者record
原力计划

文章目录简介新的Record类型探讨Record的秘密record扩展总结 JDK 14的新特性:Lombok的终结者record 简介 自从面向对象产生之后,程序界就开始了新的变化,先是C发展到了C++,后面java横空出世,大有一统江湖的趋势。 面向对象凭借其结构化的特点和在大型项目中的优势,...

2020-04-30 06:48:56 9465 1

原创 自定义parallelStream的thread pool

文章目录简介通常操作使用自定义ForkJoinPool总结 自定义parallelStream的thread pool 简介 之前我们讲到parallelStream的底层使用到了ForkJoinPool来提交任务的,默认情况下ForkJoinPool为每一个处理器创建一个线程,parallelS...

2020-04-29 07:14:03 8605 0

原创 java 8中构建无限的stream
原力计划

文章目录简介基本使用自定义类型总结 java 8中构建无限的stream 简介 在java中,我们可以将特定的集合转换成为stream,那么在有些情况下,比如测试环境中,我们需要构造一定数量元素的stream,需要怎么处理呢? 这里我们可以构建一个无限的stream,然后调用limit方法来限定返...

2020-04-29 07:09:46 8590 0

原创 java 8中 predicate chain的使用
原力计划

文章目录简介基本使用使用多个Filter使用复合Predicate组合PredicatePredicate的集合操作总结 java 8中 predicate chain的使用 简介 Predicate是一个FunctionalInterface,代表的方法需要输入一个参数,返回boolean类型。...

2020-04-28 07:39:47 8755 0

原创 JDK 14的新特性:更加好用的NullPointerExceptions
原力计划

JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了。NullPointerExceptions简称NPE,它是运行时异常的一种,也是java程序中最最容易出现的异常。 出现了NullPoi...

2020-04-28 07:33:26 9265 0

原创 技术回顾系列:最新最热门的技术大事-第一周

技术回顾系列:最新最热门的技术大事-第一周 每一周我们都会回顾一下上周发生的有趣的事情,现在让我们来看看上周都发生了哪些事情吧: Apache Kafka 2.5.0发布了 Apache软件基金会在四月16日发布了最新的Apache Kafka 2.5.0版本。 该版本包含了最新的安全更新,新的...

2020-04-28 07:25:14 8709 0

原创 JDK 14的新特性:instanceof模式匹配

JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。 本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。 也就是说在instanceof中可...

2020-04-27 07:36:41 8811 0

原创 JDK 15 JAVA 15的新特性展望
原力计划

伴随着2020的寒冬和新冠病毒的肆虐,JAVA迎来了久未已久的JAVA 14。自从2017年JAVA 9发布之后,JAVA的发布版本跟上了敏捷开发的步伐,小步快跑,Java平台发布节奏已从每3年以上的主要版本转变为每6个月发布一次功能。现在,每年的3月和9月都会发布新的版本功能。 三月已过,九月...

2020-04-27 07:27:11 14354 0

原创 怎么break java8 stream的foreach
原力计划

文章目录简介使用Spliterator自定义forEach方法总结 怎么break java8 stream的foreach 简介 我们通常需要在java stream中遍历处理里面的数据,其中foreach是最最常用的方法。 但是有时候我们并不想处理完所有的数据,或者有时候Stream可能非常的...

2020-04-26 07:45:34 8854 0

原创 java 8 stream中的Spliterator简介
原力计划

文章目录简介tryAdvancetrySplitestimateSizecharacteristics举个例子总结 java 8 stream中的Spliterator简介 简介 Spliterator是在java 8引入的一个接口,它通常和stream一起使用,用来遍历和分割序列。 只要用到st...

2020-04-26 07:40:44 8907 0

原创 怎么在java中创建一个自定义的collector
原力计划

文章目录简介Collector介绍自定义Collector总结 怎么在java中创建一个自定义的collector 简介 在之前的java collectors文章里面,我们讲到了stream的collect方法可以调用Collectors里面的toList()或者toMap()方法,将结果转换为...

2020-04-25 07:56:27 7091 0

原创 java 8 stream reduce详解和误区
原力计划

文章目录简介reduce详解总结 java 8 stream reduce详解和误区 简介 Stream API提供了一些预定义的reduce操作,比如count(), max(), min(), sum()等。如果我们需要自己写reduce的逻辑,则可以使用reduce方法。 本文将会详细分析一...

2020-04-25 07:51:24 6915 0

原创 java stream中Collectors的用法
原力计划

在java stream中,我们通常需要将处理后的stream转换成集合类,这个时候就需要用到stream.collect方法。collect方法需要传入一个Collector类型,要实现Collector还是很麻烦的,需要实现好几个接口。 于是java提供了更简单的Collectors工具类来...

2020-04-24 07:46:58 8801 0

原创 java关于throw Exception的一个小秘密

文章目录简介throw小诀窍总结 java关于throw Exception的一个小秘密 简介 之前的文章我们讲到,在stream中处理异常,需要将checked exception转换为unchecked exception来处理。 我们是这样做的: static <T> C...

2020-04-24 07:42:37 8872 0

原创 java 8 lambda表达式中的异常处理
原力计划

文章目录简介处理Unchecked Exception处理checked Exception总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,lambda表达式可以让我们的代码更加简介,业务逻辑更加清晰,但是在lambda表达式中使用的Functio...

2020-04-23 06:59:08 9104 0

原创 java 8 Stream中操作类型和peek的使用
原力计划

文章目录简介中间操作和终止操作peek结论 java 8 Stream中操作类型和peek的使用 简介 java 8 stream作为流式操作有两种操作类型,中间操作和终止操作。这两种有什么区别呢? 我们看一个peek的例子: Stream<String> stream = Strea...

2020-04-23 06:54:41 9680 0

原创 怎么在java 8的map中使用stream
原力计划

文章目录简介基本概念使用Stream获取map的key使用stream获取map的value总结 怎么在java 8的map中使用stream 简介 Map是java中非常常用的一个集合类型,我们通常也需要去遍历Map去获取某些值,java 8引入了Stream的概念,那么我们怎么在Map中使用S...

2020-04-22 07:30:43 8983 0

原创 在java 8 stream表达式中实现if/else逻辑

文章目录简介传统写法使用filter总结 简介 在Stream处理中,我们通常会遇到if/else的判断情况,对于这样的问题我们怎么处理呢? 还记得我们在上一篇文章lambda最佳实践中提到,lambda表达式应该越简洁越好,不要在其中写臃肿的业务逻辑。 接下来我们看一个具体的例子。 传统写法 假...

2020-04-22 07:25:57 10418 7

原创 Lambda表达式最佳实践
原力计划

文章目录简介优先使用标准Functional接口使用@FunctionalInterface注解在Functional Interfaces中不要滥用Default Methods使用Lambda 表达式来实例化Functional Interface不要重写Functional Interfac...

2020-04-21 07:20:05 8958 0

原创 java并发Exchanger的使用
原力计划

文章目录简介类定义类继承构造函数两个主要方法具体的例子结语 简介 Exchanger是java 5引入的并发类,Exchanger顾名思义就是用来做交换的。这里主要是两个线程之间交换持有的对象。当Exchanger在一个线程中调用exchange方法之后,会等待另外的线程调用同样的exchange...

2020-04-21 07:13:50 8900 0

原创 java中functional interface的分类和使用
原力计划

文章目录简介Functional InterfaceFunction:一个参数一个返回值BiFunction:接收两个参数,一个返回值Supplier:无参的FunctionConsumer:接收一个参数,不返回值Predicate:接收一个参数,返回booleanOperator:接收和返回同样...

2020-04-20 11:13:13 9051 0

原创 java 8 Streams简介
原力计划

文章目录简介Functional InterfaceFunction:一个参数一个返回值BiFunction:接收两个参数,一个返回值Supplier:无参的FunctionConsumer:接收一个参数,不返回值Predicate:接收一个参数,返回booleanOperator:接收和返回同样...

2020-04-20 11:07:46 9037 0

原创 一篇文章让你彻底弄懂SSL/TLS协议
原力计划

文章目录SSL/TLS的应用TLS协议的架构握手协议主密码和预备主密码TLS记录协议 一篇文章让你彻底弄懂SSL/TLS协议 SSL/TLS是一种密码通信框架,他是世界上使用最广泛的密码通信方法。SSL/TLS综合运用了密码学中的对称密码,消息认证码,公钥密码,数字签名,伪随机数生成器等,可以说是...

2020-04-19 07:44:23 10730 0

原创 基于口令的密码(PBE)

基于口令的密码(PBE) 基于口令的密码(Password Based Encryption,PBE)是一种基于口令生成密钥,并使用该密钥进行加密的方法。其中加密和解密使用的是同一个密钥。 根据用户自己的口令和salt生成口令密码,我们先看下加密的过程: 加密的过程可以分为这几步: 生成KEK...

2020-04-18 07:47:27 9195 0

原创 更加安全的密钥生成方法Diffie-Hellman

更加安全的密钥生成方法Diffie-Hellman 之前我们谈到了密钥配送的问题,这个世界是如此的危险, 一不小心通信线路就会被监听,那么我们怎么在这种不安全的线路中传递密钥呢? 这里我们介绍一下Diffie-Hellman密钥交换算法。这个算法是由Whitfield Diffie和Martin ...

2020-04-17 07:27:25 9202 0

原创 有关密钥的最全总结都在这了
原力计划

文章目录各种密钥总结其他密钥分类密钥的管理 密钥详解 在之前的文章中,我们讲到了对称密码,公钥密码,消息认证码和数字签名等密码学的技术,这些技术中都使用到了一个叫做密钥的东西。 那么到底什么是密钥呢?密钥就是一个key,通过这个key可以获得最终的明文。所以密钥其实是和明文等价的。 举个例子,保险...

2020-04-17 07:19:48 10001 4

原创 一文读懂密码学中的证书
原力计划

一文读懂密码学中的证书 之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认。但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送者。 如果你获取到的公钥是伪造的,那么不管你的签名算法多完美,也是会得到错误的结果。 那么我们怎么...

2020-04-16 07:24:26 9631 0

原创 java内存模型(JMM)和happens-before
原力计划

文章目录重排序Happens-Before安全发布初始化安全性 java内存模型(JMM)和happens-before 我们知道java程序是运行在JVM中的,而JVM就是构建在内存上的虚拟机,那么内存模型JMM是做什么用的呢? 我们考虑一个简单的赋值问题: int a=100; JMM考虑的...

2020-04-16 07:17:53 9037 0

原创 非阻塞算法(Lock-Free)的实现
原力计划

文章目录非阻塞的栈非阻塞的链表 非阻塞算法(Lock-Free)的实现 上篇文章我们讲到了使用锁会带来的各种缺点,本文将会讲解如何使用非阻塞算法。非阻塞算法一般会使用CAS来协调线程的操作。 虽然非阻塞算法有诸多优点,但是在实现上要比基于锁的算法更加繁琐和负责。 本文将会介绍两个是用非阻塞算法实现...

2020-04-15 10:24:17 9012 0

原创 非阻塞同步机制和CAS
原力计划

文章目录什么是非阻塞同步悲观锁和乐观锁CAS 非阻塞同步机制和CAS 我们知道在java 5之前同步是通过Synchronized关键字来实现的,在java 5之后,java.util.concurrent包里面添加了很多性能更加强大的同步类。这些强大的类中很多都实现了非阻塞的同步机制从而帮助其提...

2020-04-15 10:17:49 8985 0

原创 同步类的基础AbstractQueuedSynchronizer(AQS)
原力计划

同步类的基础AbstractQueuedSynchronizer(AQS) 我们之前介绍了很多同步类,比如ReentrantLock,Semaphore, CountDownLatch, ReentrantReadWriteLock,FutureTask等。 AQS封装了实现同步器时设计的大量细节...

2020-04-14 12:07:39 8940 0

原创 由于不当的执行顺序导致的死锁
原力计划

为了保证线程的安全,我们引入了加锁机制,但是如果不加限制的使用加锁,就有可能会导致顺序死锁(Lock-Ordering Deadlock)。上篇文章我们也提到了在线程词中因为资源的不足而导致的资源死锁(Resource Deadlock)。 本文将会讨论一下顺序死锁的问题。 我们来讨论一个经常存在...

2020-04-11 08:58:03 9042 0

原创 java中有界队列的饱和策略(reject policy)
原力计划

文章目录AbortPolicyDiscardPolicyDiscardOldestPolicyCallerRunsPolicy使用Semaphore java中有界队列的饱和策略(reject policy) 我们在使用ExecutorService的时候知道,在ExecutorService中有...

2020-04-10 10:17:55 8944 0

原创 万万没想到,线程居然被饿死了!

我们的线程被饿死了 我们在构建线程池的时候可以构建单个线程的线程池和多个线程的线程池。 那么线程池使用不当可不可能产生死锁呢?我们知道死锁是循环争夺资源而产生的。线程池中的线程也是资源的一种,那么如果对线程池中的线程进行争夺的话也是可能产生死锁的。 在单个线程的线程池中,如果一个正在执行的线程中,...

2020-04-09 10:11:44 9128 0

原创 使用ExecutorService来停止线程服务
原力计划

文章目录使用shutdown使用shutdownNow 使用ExecutorService来停止线程服务 之前的文章中我们提到了ExecutorService可以使用shutdown和shutdownNow来关闭。 这两种关闭的区别在于各自的安全性和响应性。shutdownNow强行关闭速度更快,...

2020-04-08 09:57:04 9000 0

原创 都2020年了,这5个java IDE神器你还不知道?
原力计划

TIOBE的4月份编程语言排行榜出来了,java还是稳坐第一位,java最新的版本也到了13,一直以来java凭借其企业级应用的优势和大量的框架级应用俘获了大量的粉丝和企业客户。 谈到开发者,java肯定是个绕不过去的话题,那么这么多的java开发者到底都用哪些IDE呢? 好的IDE肯定不仅要支...

2020-04-07 09:50:58 22766 0

原创 java中CompletionService的使用

java中CompletionService的使用 之前的文章中我们讲到了ExecutorService,通过ExecutorService我们可以提交一个个的task,并且返回Future,然后通过调用Future.get方法来返回任务的执行结果。 这种方式虽然有效,但是需要保存每个返回的Fut...

2020-04-03 09:25:05 9002 0

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