
Java
文章平均质量分 95
古时的风筝
古时的风筝,一个平庸的程序员,主语言 Java,第二语言 Python,其实学 Python 的时间比 Java 还要早。
喜欢写博客,写博客的过程能加深自己对一个知识点的理解,同时还可以分享给他人。
喜欢做一些小东西,所以也会一些前端的东西,React、JavaScript、CSS 都会一些,做一些小工具还够用。
展开
-
什么时候用 Runnable?什么时候用 Callable ?
Runnable在java.lang这个包下,而当JDK1.5发布的时候,新加入的Callable被安置在了这个包下,这是 Java 里有名的并发编程相关包,各种锁啊、多线程工具类啊,都被放在这个包下。按道理,Runnable也应该在这里才对。可见再厉害的项目也是随着项目的扩大而慢慢的规划,而前期的一些看似不太合理的地方,只能做兼容和妥协。原创 2023-12-13 10:16:37 · 836 阅读 · 0 评论 -
差生文具多系列之最好看的编程字体
📢 声明:🍄🌍 作者主页:【⚠️ 本文目的为个人学习记录及知识分享。如果有什么不正确、不严谨的地方请及时指正,不胜感激。直达博主:「(搜索或点击扫码)对于我们程序员而言,每天面对时间最长的就是各种 IDE 了。选择一款好看的编程字体就变得很重要了,赏心悦目,对身心健康还是很有帮助的,可能吧。如果你现在还在使用默认的字体,或者随便用的,那可以考虑一下下面这三款字体。没准换上之后,心情一好,还能少写俩 bug 呢。原创 2023-12-12 09:52:14 · 1631 阅读 · 0 评论 -
当接口要加入新方法时,我后悔没有早点学设计模式了
通过适配器模式和策略模式,我们即可以保证具体的实现类实现共同的接口或继承共同的基类,同时,又能在新增功能(方法)的时候,尽可能的保证设计的清晰。不像之前那种破罐子破摔的方式,接口和实现类几乎脱离了关系,每个实现类,各玩儿各的。推荐阅读➿剑走偏锋,无头浏览器是什么神奇的家伙➿新项目决定用 JDK 17了➿5000字,10张图,完全掌握 MySQL 事务隔离级别。原创 2023-12-11 11:23:59 · 92 阅读 · 0 评论 -
彻底理解零拷贝,看这一篇就够了
问题出来数据拷贝和模态切换上。但既然是 I/O 操作,不可能没有数据拷贝的,只能减少拷贝的次数,还有就是尽量将数据存储在离应用程序(用户缓冲区)更近的地方。而区分用户态和内核态有其他更重要的原因,不可能单纯为了 I/O 效率就改变这种设计吧。那也只能尽量减少切换的次数。零拷贝的理想状态就是操作数据不用拷贝,但是显示情况下并不一定真的就是一次复制操作都没有,而是尽量减少拷贝操作的次数。尽量减少数据在各个存储区域的复制操作,例如从磁盘缓冲区到内核缓冲区等;原创 2023-12-10 14:23:26 · 6591 阅读 · 2 评论 -
Nacos 配置加密功能也太鸡肋了吧,有种更好的方式
当项目中用了 Nacos 做配置中心,是不是所有的配置都放到里面呢,大部分时候为了省事和统一,系统所有的配置都直接放在里面了,有时候,会包括一些账号、密码、秘钥等信息。这时候你们的项目是怎么处理的呢?一种方式,不管它,反正 Nacos 有密码,如果 Nacos 都被攻破了,那也没办法。还有一种方式,这些涉及到密码、秘钥的信息放到本地环境变量中,这种方式虽然也还算方便,但是管理起来就不是很统一了。原创 2023-12-09 14:53:24 · 1541 阅读 · 1 评论 -
新项目决定用 JDK 17了
最近在调研 JDK 17,并且试着将之前的一个小项目升级了一下,在测试环境跑了一段时间。JDK 1.8:“不是说好了,他发任他发,你用 Java 8 吗?不光是我呀,连 Spring Boot 都开始要拥护 JDK 17了,下面这一段是 Spring Boot 3.0 的更新日志。Spring Boot 3.0 需要 JDK 的最低版本就是 JDK 17,如果你想用 Spring Boot 开发应用,你需要将正在使用的 Java 8 或 Java 11升级到 Java 17。原创 2023-12-06 10:12:05 · 1509 阅读 · 0 评论 -
从一个bug认识 Spring 单例模式
谁还没在 Spring 里栽过跟头呢,从哪儿跌倒,就从哪儿睡一会儿,然后再爬起来。原创 2023-12-05 11:43:18 · 86 阅读 · 0 评论 -
JDK21要来了,并发编程更加丝滑了
目前 Java 的最新稳定版是 JDK 20,但这是个过渡版,JDK21就是 LTS 版的了,也快要发布了,在今年9月份(也就是2023年9月)就要正式发布了。但是,猜都不用猜,你肯定还在用 Java 8 吧!原创 2023-06-14 14:55:30 · 939 阅读 · 0 评论 -
用了这么久 IDEA,你还没用过 Live Templates 吗?
有时候我们经常会高频词的使用一段相似的代码, 比如做网络开发的同学,会经常用到 Socket 相关的初始化代码。对于这种我们自己经常要写的某些类似的代码段,就可以抽取出一个 Template 出来,方便我们使用。下面我就实现一个自定的 Template,来看一下是不是大大简化了重复性劳动。有的同学可能觉得无所谓的事儿,复制、粘贴也挺省事儿。见仁见智吧,觉得有用的可以尝试一下,觉得鸡肋的也无所谓,反正也不影响最后的功能实现。比如我最新在做一些系统优化的工作,这个过程中,我会频繁的用的StopWatch。原创 2023-01-10 10:09:13 · 408 阅读 · 0 评论 -
过两年 JVM 可能就好被 GraalVM 替代了
虽然我们还没有看到有哪个公司说在用 GraalVM 了,但是Quarkus、、Spring等很多的框架都已经支持 GraalVM 的 Native-image 模式,而且在 Orcale 的大力推广下,相信不久之后就会出现在更多的产品中。赶紧体验一下吧。如果觉得还不错的话,给个赞吧!原创 2022-12-16 09:43:18 · 2942 阅读 · 1 评论 -
这个 bug 让我更加理解 Spring 单例了
谁还没在 Spring 里栽过跟头呢,从哪儿跌倒,就从哪儿睡一会儿,然后再爬起来。原创 2020-12-22 09:51:25 · 203 阅读 · 0 评论 -
手动实现一个 Redis 客户端需要掌握什么知识点
那面试又问了,你知道 AOF 持久化之后的文件是什么格式吗?答:好像就是文本文件吧?好,文本文件,那你知道它有什么规则吗?或者说,它和 Redis 的协议有什么关系吗?答:啊,这个,恩,不太清楚呢。原创 2020-12-04 11:02:50 · 272 阅读 · 0 评论 -
听说 synchronized 性能不行,是真的吗?
在多线程环境中,锁的使用是避免不了的,使用锁时候有多种锁供我们选择,比如 `ReentrantLock`、`CountDownLatch`等等,但是作为 Java 开发者来说,刚刚接触多线程的时候,最早接触和使用的恐怕非 `synchronized`莫属了。那你真的了解`synchronized`吗,今天我们就从以下几个方面彻底搞懂 `synchronized`。原创 2020-11-19 14:08:27 · 3604 阅读 · 2 评论 -
JVM 的几种死法,知己知彼才能百战不殆
我们都知道 Java 程序都是跑在 JVM 上的,一旦 JVM 有什么风吹草动,必然会影响服务的稳定性。幸运的话,服务会发生抖动,可能有部分请求出现延迟或异常。不幸的话,JVM 直接崩溃,导致服务完全中断。原创 2020-11-06 09:06:59 · 237 阅读 · 0 评论 -
高频面试题:Java程序占用 CPU 过高怎么排查
线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因?原创 2020-11-03 12:42:25 · 2211 阅读 · 4 评论 -
90%的开发者都没搞清楚的 Java 字符串常量池
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现。可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白。原创 2020-08-27 09:42:13 · 3772 阅读 · 7 评论 -
写给 Java 开发者:你知道各种 JVM 监控工具背后的实现技术和原理吗?
比如你如果用 Spring Boot,那你用过 Spring Boot Actuator 吧,它就用到了 JMX 。比如你用过 JConsole 或者 VisualVM 吧,它们也用到了 JMX。原创 2020-08-20 11:08:11 · 750 阅读 · 0 评论 -
『JWT』,你必须了解的认证登录方案
JWT 全称是 JSON Web Token,是目前非常流行的跨域认证解决方案,在单点登录场景中经常使用到。有些人觉得它非常好用,用了它之后就不用在服务端借助 redis 实现认证过程了,但是,还有一部分人认为它生来就有缺陷,根本不能用。原创 2020-08-19 10:02:38 · 580 阅读 · 0 评论 -
因为没做过主从配置和读写分离,面试官让我回去等通知
10分钟掌握 MySQL 主从配置和读写分离。原创 2020-07-29 12:09:02 · 2484 阅读 · 2 评论 -
我所理解的微服务架构
SOA和微服务到底是什么关系?说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式。我倒觉得微服务其实就是随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。以这种说法做为根据,我觉得SOA与微服务的区别在于如下几个方面:微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、原创 2020-07-27 17:16:30 · 246 阅读 · 0 评论 -
Spring 实现自定义 bean 的扩展
Spring mvc 提供了扩展 xml 的机制,用来编写自定义的 xml bean ,例如 dubbo 框架,就利用这个机制实现了好多的 dubbo bean,比如<dubbo:application> 、<dubbo:registry>等等,只要安装这个标准的扩展方式实现配置即可。扩展自定义 bean 的意义何在假设我们要使用一个开源框架或者一套 API,我们肯定希望以下两点: 易用性,即配置简单,要配置的地方越少越好 封装性,调用简单,也就是越高层封..原创 2020-07-27 00:26:56 · 563 阅读 · 0 评论 -
一个排查了大半天儿的问题,差点又让 MyBatis 背锅
MyBatis:大哥,这锅我不背!原创 2020-07-23 10:20:41 · 385 阅读 · 1 评论 -
Java 进程占用内存过多导致宕机,幕后元凶原来是线程太多
那天中午吃饭,一个同事说,那个项目组的人快气死我了,程序有问题,早晨在群里@了他们,到中午才回消息,然后竟然还说他们的程序没有问题,是我们这边调用的太频繁了。原创 2020-07-22 16:15:28 · 2689 阅读 · 2 评论 -
阿里巴巴泰山版《Java 开发者手册》,也是一份防坑指南
4月22日,阿里巴巴发布了泰山版《Java 开发手册》,以前以为**终极版**就真的是终极版了,没想到还是想的太简单了,继终极版之后又发布了详尽版、华山版,这不,泰山版又来了。想想也对,行业一直在发展,JDK 也一直在更新,怎么可能有终极版。原创 2020-07-17 10:40:27 · 526 阅读 · 0 评论 -
面试官:请动手实现一下 LRU 算法,以及 Caffeine 和 Redis 中的缓存淘汰策略
我是风筝,公众号「古时的风筝」。 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。那天我在 LeetCode 上刷到一道 LRU 缓存机制的问题,第 146 题,难度为中等,题目如下。运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写.原创 2020-07-14 22:33:58 · 1224 阅读 · 0 评论 -
Spring Boot 2.3 支持分层 Jar包、优雅停机、完美支持 Docker/k8s 了,赶紧跟我一起来尝鲜儿
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。Spring Boot 2.3 已经发布两个月了,这两天才想起来尝一尝鲜儿。除了常规的升级外,很大部分的升级是针对 Docker 的,让你不得不相信,Docker 容器化微服务已然大势所趋。还没有用过的同学,再不下手就晚了。此次升级主要包括如下几个方面,接下来就跟着我一起来尝一尝吧。准备工作.原创 2020-07-08 09:46:52 · 840 阅读 · 0 评论 -
看完这篇 HashSet,跟面试官扯皮没问题了
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。之前的7000 字说清楚 HashMap已经详细介绍了 HashMap 的原理和实现,本次再来说说他的同胞兄弟 HashSet,这两兄弟经常被拿出来一起说,面试的时候,也经常是两者结合着考察。难道它们两个的实现方式很类似吗,不然为什么总是放在一起比较。实际上并不是因为它俩相似,从根本上来说,它俩本.原创 2020-07-01 10:45:35 · 738 阅读 · 0 评论 -
看完这一篇 7000 字 HashMap,跟面试官扯皮没问题了
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。这是上篇文章 有趣的条漫版 HashMap,25岁大爷都能看懂 的文字版。有不少同学说条漫版的比较有意思,简单易懂,但是毕竟图片画不了那么详细,只能从大面而上理解。真正的了解细节,还得看这一篇。其实是这篇先写完,然后画了不少图片,所以就写了一篇图片版的。本篇 7000 多字,建议三连呦。在 Ja.原创 2020-06-23 10:03:24 · 3410 阅读 · 10 评论 -
有趣的漫画版 HashMap,25岁大爷都能看懂
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。回复「666」有高清学习路线图。因为写文章的过程中画了不少的图,所以,我想,能不能用长图的形式展现一次呢,结果图片熬夜做了半天,最后出来的效果不是很好,哎,审美缺失吧。之后会有详细的文字源码解析版放出,敬请各位看官关注。在 Java 中,最常用的数据类型是 8 中基本类型以及他们的包装类型以及字符.原创 2020-06-22 10:46:41 · 1525 阅读 · 1 评论 -
Maven 下载包太慢,那我自己建服务器行了吧
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。差不多所有的 Java 开发者应该都用过 Maven 的吧,如果你没用过,那可能你正在用的是 Gradle,如果这俩你都没用过,那就有点不太正常了。顺道说一句,在 Gradle 眼里,Maven 什么的都是垃圾。Maven 作为 Java 项目管理工具,它不仅可以用作包管理,还有许多的插件,可以.原创 2020-06-16 11:03:08 · 473 阅读 · 0 评论 -
Java 都已经 25 岁了,想必比在座的很多同学年龄还大吧?(暴露年龄)
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。Java 都已经 25 岁了,想必比在座的很多同学年龄还大吧。你发任你发,我用 Java 8在 JDK 版本的世界里,从来都是 Oracle 发他的新版本,我们继续用我们的老版本。4 年之前用 JDK 7,后来终于升级到了 JDK 8。自从升级了没多久,JDK 就开始了半年发一个新版本的节奏,陆.原创 2020-06-13 14:27:27 · 1053 阅读 · 0 评论 -
8000字长文让你彻底了解 Java 8 的 Lambda、函数式接口、Stream 用法和原理
我是风筝,公众号「古时的风筝」。一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。公众号回复『666』获取高清大图。就在今年 Java 25周岁了,可能比在座的各位中的一些少年年龄还大,但令人遗憾的是,竟然没有我大,不禁感叹,Java 还是太小了。(难道我会说是因为我老了?)而就在上个月,Java 15 的试验版悄悄发布了,但是在 Java 界一直有个神秘现象,那就是「你发你.原创 2020-06-10 09:31:20 · 457 阅读 · 0 评论 -
我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
我是斜杠程序员风筝,我又来了。微信搜索公众号「古时的风筝」,一个不只有技术的技术公众号。本篇并不是苹果吹,只要是你用的顺手并适合的系统就是最好的系统,我现在也是 Mac 、Windows 都用,只是发现 Mac 系统于我而言我认为比较好的地方。重点是后面推荐的我常用的一部分工具。我第一次买苹果的产品就是一款 2015 版的 MacBook Pro ,在此之前没有用过任何苹果的设备,手机一直都用安卓,直到媳妇儿把她淘汰下来的 iPhone 6 plus 淘汰了,我才算有了除苹果笔记本之外的苹果设备.原创 2020-06-08 09:59:17 · 2314 阅读 · 0 评论 -
别再重复造轮子了,这几个开源 Java 工具库送给你
文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。风筝我作为一个野路子开发者,直到遇见下面的这几个工具库,才知道之前重复造了不少轮子,而且轮子还不一定有人家的圆。相信跟我一样,没事儿造轮子的人还不在少数,有些人就是对造轮子感兴趣,这个咱也无话可说,但是,比如我,我是造轮子之前不知道这世上已经有好用的轮子了,害,无知限制了我的想象力。比如我们在拿到一个 List 集合之后,要对这个集合进行判空操作,以前我一直是这样写的:List<String&.原创 2020-06-04 09:14:10 · 577 阅读 · 0 评论 -
10分钟搞懂 Spring AOP 和 动态代理
我是风筝,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面。公众号回复『666』获取高清大图。Spring Cloud 系列文章已经完成,可以到 我的github 上查看系列完整内容。公众号回复「pdf」获取 pdf 版。之前介绍了 Spring 核心科技 IOC 原理,《包你懂系列》一文讲清楚 Spring IoC 实现原理和过程,今天来介绍另一个核心科技 AO.原创 2020-06-03 14:55:37 · 421 阅读 · 0 评论 -
看了这一篇,以后就不会踩到 ArrayList 的坑了
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python、React 也玩儿的 6 的斜杠开发者。Spring Cloud 系列文章已经完成,可以到 我的github 上查看系列完整内容。也可以在公众号内回复「pdf」获取我精心制作的 pdf 版完整教程。请看下面的代码,谁能看出它有什么问题吗?String a = "古时的";String b = "风筝";List<String> stringList = Array.原创 2020-05-29 09:34:35 · 2488 阅读 · 1 评论 -
实现一个 Spring Boot Starter 原来如此简单,读 Starter 源码也不在话下
实现一个 Spring Boot Starter 其实是很简单的,跟着我一起来实现一个 Spring Boot Starter。原创 2020-05-25 11:58:35 · 553 阅读 · 0 评论