Java Random 随机数生成不安全,如果同时泄漏第一个和第二个随机数,那么后面的随机数序列可以被破解。 Java Random类使用线性同余生成器(Linear Congruential Generator)算法来生成伪随机数。所谓伪随机数是指,如果我们使用相同的种子(seed)来生成随机数序列,那么得到的结果将是一样的。…
Java提供了许多工具来处理并发编程,而本文将重点介绍Java8中的CompletableFuture。在本文中,笔者通过查阅资料和实践经验,避免了重复已有优秀文章的内容和思路,而是用更简单明了的示例和语言来介绍CompletableFuture,并提供自己的思考。最后,本文还会附上其他一些优秀文章的链接,供读者更深入学习和理解。 1 .理解 Future…
Java属性的实例化、构造函数的执行是有先后顺序的。 此外 当出现子类继承情况时,子类和父类也是有初始化顺序的,这让情况更加复杂! 下面我们重点看几个常见的构造函数陷阱! 对象属性间的平行依赖 属性的实例化和 构造函数执行顺序是有先后的,如果构造函数和属性实例之间存在依赖顺序,请小心!请看下面的例子。 public class Context{…
在MySQL数据库操作中,高并发下的性能问题常见于复杂查询、锁竞争、资源瓶颈等情况。下面将描述一个具体的场景,并提供针对该场景的优化方案及Spring Boot中的实现示例。 场景描述…
今天遇到一个小需求,当用户上传了一个关于用户数据的列表,我们需要将其与数据库中已有的用户数据进行比较。假设数据库中的用户数据存储在集合A中,而用户上传的数据存储在集合B中。我们需要确定集合B中有多少数据在集合A中,以及有多少数据不在集合A中,并记录这些信息到日志中。那么,我们应该如何处理这个需求呢? 一、如何查找两个集合的重复数据?…
可能对不少人来说,Lambda显得陌生又复杂,觉得Lambda会导致代码可读性下降,诟病Lambda语法,甚至排斥。 其实所有的这些问题,在尝试并熟悉后,可能都不是问题。 对Lambda持怀疑态度的人,也许可以采取渐进式使用Lambda的策略。在一些简单和低风险的场景下先尝试使用Lambda,逐渐增加Lambda表达式的使用频率和范围。…
在Java集合中,ArrayList是最常用到的数据结构,无论是在日常开发还是面试中,但是很多人对它的源码并不了解。下面提问几个问题,检验一下大家对ArrayList的了解程度。 ArrayList的初始容量是多少?(90%的人都会答错) ArrayList的扩容机制 并发修改ArrayList元素会有什么问题 如何快速安全的删除ArrayList中的元素…
1. 分配内存空间 可以使用allocate() 和 allocateDirect()方法为ByteBuffer分配空间,其他buffer类也有该方法 allocate() : 使用的是java的堆内存,堆内字节缓冲区,读写效率低,会受到GC的影响 allocateDirect()…
在日常工作中,我们经常会遇到需要生成树形结构的需求,例如:部门树、菜单树等,我们以往的实现方式是写一个递归算法来实现,但是如果这样的需求多了,我们难不成要给每个需求都写一个递归算法来实现吗?显然这是不合理的,我们这样操作会造成很多的冗余代码。那么我们有没有更好的实现思路呢?在这里我分享一种思路,也欢迎大家来一起讨论 思路剖析…
前言 Java NIO有两种解释: 一种叫非阻塞IO(Non-blocking I/O) 另一种叫新的IO(New I/O) 其实两种概念也是相同的。 一、概述 Java NIO是从Java1.4版本开始引入的一个新的IO API,可以代替标准的IO API。 NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,…