2020 往日不可追,2021 来日犹可期

2021新年快乐

现在是 2021 年 23 点 01 分,2020 年已然逝去,此刻有人已经熟睡,有人正在享受节日狂欢,有人还在工作,有人寒夜孤灯敲起键盘。我正准备缩入这寒冷的夜,却在被窝中刷起来了朋友圈

虽然这一年突如其来的事情有很多,虽然生活固然沉闷,但跑起来就会有风。朋友圈中满是新年气氛。

阅读全文

SpringBoot 的多数据源配置

最近在项目开发中,需要为一个使用 MySQL 数据库的 SpringBoot 项目,新添加一个 PLSQL 数据库数据源,那么就需要进行 SpringBoot 的多数据源开发。代码很简单,下面是实现的过程。

阅读全文

量子革命?脑机接口?电子皮肤?我看了一次高质量科学大会

周末刷知乎时,看到了 2020 腾讯科学 WE 大会的直播观看邀请,留意了下时间,发现空闲。所以观看了下,全程 2小时 21 分,8 位不同领域的顶级研究者分享了自己最新研究成果,十分精彩,这可能是我 2020 年唯一的看了这么长的科学分享,故整理记录分享之。

演讲嘉宾

阅读全文

Guava - 拯救垃圾代码,写出优雅高效,效率提升N倍

Google Guava

最近在看一个同学代码的时候,发现代码中大量使用了 Google 开源的 Guava 核心库中的内容,让代码简单清晰了不少,故学习分享出 Guava 中我认为最实用的功能。

Guava 项目是 Google 公司开源的 Java 核心库,它主要是包含一些在 Java 开发中经常使用到的功能,如数据校验不可变集合、计数集合,集合增强操作、I/O、缓存、字符串操作等。并且 Guava 广泛用于 Google 内部的 Java 项目中,也被其他公司广泛使用,甚至在新版 JDK 中直接引入了 Guava 中的优秀类库,所以质量毋庸置疑。

使用方式直接 mavan 依赖引入。

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.0-jre</version>
</dependency>
阅读全文

「1024」专属序猿的快乐,惊奇迷惑代码大赏

1024程序猿/媛节日快乐。

你是知道的,我从来都不写日常琐文,人生经历。

今天日子特殊,分享一些专属于我们的快乐

我相信作为屏幕前的你可以发现其中的乐趣。

话不多少,快码加鞭,放码出来

1
2
3
4
5
public class HelloWorld{
public static void main(String[] args){
System.out.println("write code, love life !!");
}
}
阅读全文

「源码分析」CopyOnWriteArrayList 中的隐藏的知识,你Get了吗?

杭州-阿里园区墙

前言

本觉 CopyOnWriteArrayList 过于简单,寻思看名字就能知道内部的实现逻辑,所以没有写这篇文章的想法,最近又仔细看了下 CopyOnWriteArrayList 的源码实现,大体逻辑没有意外,不过还是发现很多有意思的地方,故留此篇文章分享之。

看完这篇文章你会了解到:

  • CopyOnWriteArrayList 的实现原理,扩容机制。
  • CopyOnWriteArrayList 的读写分离,弱一致性。
  • CopyOnWriteArrayList 的性能如何。
  • CopyOnWriteArrayList 修改元素时,为什么相同值也要重新赋值(作者 Doug Lea 这么写都是有道理的)。
  • CopyOnWriteArrayList 在高版本 JDK 的实现有什么不同,为什么。
阅读全文

和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性

其实在这之前已经写过一篇关于 Java 7 的新特性文章了,那篇文章主要介绍了 Java 7 的资源自动关闭、Switch String 实现原理、异常捕获 try-catch、新的二进制书写方式等,具体的内容也可以看下当初的这篇文章(补一波 Java 7 语法特性)。而在那篇文章里唯独没有介绍到 Java 7 中对于 IO 操作的更新,而这部分恰好又是非常重要的一部分,该还的总是要还的,现在补上。

阅读全文

JMH-大厂是如何使用JMH进行Java代码性能测试的?必须掌握!

Java 性能测试难题

现在的 JVM 已经越来越为智能,它可以在编译阶段、加载阶段、运行阶段对代码进行优化。比如你写了一段不怎么聪明的代码,到了 JVM 这里,它发现几处可以优化的地方,就顺手帮你优化了一把。这对程序的运行固然美妙,却让开发者不能准确了解程序的运行情况。在需要进行性能测试时,如果不知道 JVM 优化细节,可能会导致你的测试结果差之毫厘,失之千里,同样的,Java 诞生之初就有一次编译、随处运行的口号,JVM 提供了底层支持,也提供了内存管理机制,这些机制都会对我们的性能测试结果造成不可预测的影响。

1
2
3
4
long start = System.currentTimeMillis();
// ....
long end = System.currentTimeMillis();
System.out.println(end - start);
阅读全文

「源码分析」ArrayList和LinkedList如何实现的?我看你还有机会!

前言

说真的,在 Java 使用最多的集合类中,List 绝对占有一席之地的,它和 Map 一样适用于很多场景,非常方便我们的日常开发,毕竟存储一个列表的需求随处可见。尽管如此,还是有很多同学没有弄明白 List 中 ArrayListLinkedList 有什么区别,这简直太遗憾了,这两者其实都是数据结构中的基础内容,这篇文章会从基础概念开始,分析两者在 Java 中的具体源码实现,寻找两者的不同之处,最后思考它们使用时的注意事项。

这篇文章会包含以下内容。

  1. 介绍线性表的概念,详细介绍线性表中数组链表的数据结构。
  2. 进行 ArrayList 的源码分析,比如存储结构、扩容机制、数据新增、数据获取等。
  3. 进行 LinkedList 的源码分析,比如它的存储结构、数据插入、数据查询、数据删除和 LinkedList 作为队列的使用方式等。
  4. 进行 ArrayList 和 LinkedList 的总结。
阅读全文

Java 开发的编程噩梦,这些坑你没踩过算我输

很多 Java 初学者在开始编程时会出现一些问题,这些问题并不是指某个特定领域的问题,也不是指对某个业务不熟悉而导致的问题,而是对基础知识不够熟悉导致的问题。而就是这些问题让我们编写了一些不够健壮的代码。
这篇文章会列举几种编程初学者常常出现的一些问题,我相信这些问题多多少少也曾困扰着现在或曾经的你。如果觉得文章不错,不妨点赞分享,让更多人跳过这些开发中的坑。

阅读全文