IntelliJ IDEA 的这个 BUG 存在三年了! 2022-11-23 Java 程序员使用最多的 IDE 那一定是 IntelliJ IDEA(如果你还在用 Eclipse 或者 MyEclipse 我建议你换换),阿粉作为一名Java 程序员日常工作中几乎天天使用,不知道你有没有遇到过这种场景,那就是如果远程仓库中多了新的分支,每次通过右下角的分支管理 fetch 了远程分支过后,在搜索框中找不到获取到的分支,而是要关闭窗口,重新再打开搜索一下才能进行 checkout 操作,而且移除了分支也是一样,不会动态更新。 虽然说问题不大,但是当分支多了操作的次数多了以后,还是很烦心的,一开始遇到的时候总觉得是自己使用的不对,或者软件的版本有问题,但是最近升级到最新版本过后,发现这个问题还是存在,无奈的 Google 了一下,不搜不知道一搜索才发现,原来这个 Bug 已经存在了三年了,而且还一直处于 Open 的状态。 这个 BUG 的描述跟我们的问题是完全一样的,说的是 fetch 结束过后,分支列表并没有更新。而且通过右边的面板我们可以看到,这还是一个未关闭的高优先级的 BUG。BUG 的完整链接地址我放在文末了,感兴趣的小伙伴可以去看看。而且在这个 BU....
Java 中一个你绝对没用过,但是很好用的数据结构 2022-11-23 Java 中常规的集合工具,相比大家都熟练于胸,但是如果说有一个集合类你不一定知道或者说肯定没用过,你相不相信呢?今天跟大家介绍的就是java.util.EnumMap,也是 java.util 包下面的一个集合类,同样的也有对应的的 java.util.EnumSet,下面我们看一下吧。 用过的小伙伴在评论扣 1,没用过扣个 0,让阿粉看看有多少小伙伴用过 Map 和 Set 结构在我们日常工作的使用的特别多,经常会用来存放数据或者参数传递,不过有些场景在使用 Map 的时候,不知道大家会不会感受到一丝丝的不安,毕竟 Map 的数据设置我们没办法控制,完全不知道别人会 put 一些什么样的数据进去,或者说如果某些场景我们 Map 的数据 Key 的类型和个数是固定,那在这种情况的下,我们如何提升系统的安全性和性能呢? 这个时候我们就可以考虑使用 EnumMap,EnumMap 顾名思义首先是一个 Map,其次它的key 只能是枚举,大家都知道枚举中的实例个数是固定的,而且还是预编译的,所以在很大程度上保证了数据的安全性,同时也可以提升一定的性能。 EnumMap 下面我们来看下如何使....
Java 代码基于开源组件生成带头像的二维码,推荐收藏! 2022-11-23 二维码在我们目前的生活工作中,随处可见,日常开发中难免会遇到需要生成二维码的场景,网上也有很多开源的平台可以使用,不过这里我们可以通过几个开源组件,自己来实现一下。 在动手之前我们先思考一下需要进行的操作,首先我们需要生成一个二维码,其次我们需要在这里二维码中间添加一个头像。 这里我们生成二维码使用工具 zxing,合成图片我们采用 thumbnailator,接下来我们实操一下吧。 生成二维码 首先我们先根据目标地址,生成一个二维码,这里我们使用的是组件 zxing,在 SpringBoot 的pom依赖中,我们加入下面的依赖。 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.4.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId&am....
SpringBoot 自动装配的原理分析 2022-11-23 关于 SpringBoot 的自动装配功能,相信是每一个 Java 程序员天天都会用到的一个功能,但是它究竟是如何实现的呢?今天阿粉来带大家看一下。 自动装配案例 首先我们通过一个案例来看一下自动装配的效果,创建一个 SpringBoot 的项目,在 pom 文件中加入下面的依赖。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 其中 web 的依赖表示我们这是一个 web 项目,redis 的依赖就是......
Java 中九种 Map 的遍历方式,你一般用的是哪种呢? 2022-11-23 日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经常使用的是哪一种。 通过 entrySet 来遍历 1、通过 for 和 map.entrySet() 来遍历 第一种方式是采用 for 和 Map.Entry 的形式来遍历,通过遍历 map.entrySet() 获取每个 entry 的 key 和 value,代码如下。这种方式一般也是阿粉使用的比较多的一种方式,没有什么花里胡哨的用法,就是很朴素的获取 map 的 key 和 value。 public static void testMap1(Map<Integer, Integer> map) { long sum = 0; for (Map.Entry<Integer, Integer> entry : map.entrySet()) { sum += entry.getKey() + entry.getValue(); } System.out.println(sum); } 看过 HashMap 源码的同学.....
关于 Java 的可变参数你真的了解吗? 2022-11-23 我们都知道 Java 支持可变参数的形式定义方法,这种语法糖在某些时候可以简化我们的代码,但是关于可变参数是如何实现的以及其他的更多细节,你真的知道吗?今天阿粉就带你来了解一下。 ![image-20220212232737739](/Users/silence/Library/Application Support/typora-user-images/image-20220212232737739.png)
微软宣布正式关闭 IE浏览器,历时 28 年的 IE 浏览器走向了终点 2022-11-23 提到 IE 浏览器大家能想到是什么呢?慢,慢,还是慢!近日有消息称微软将在 2022 年 6月 15 日正式关闭 IE 浏览器,届时更新了最新 Windows 系统的用户将无法在新系统上启用 IE 浏览器,只能说该来的总会来。 说真的阿粉从接触电脑以来除了在学校机房里面用 IE 浏览器之外,其他时候用的最多的就是通过 IE 浏览器下载 Chrome 浏览器,而它的价值也就停留在这里了,下载了 Chrome 浏览器以后,IE 再也没有被打开过,桌面上的快捷方式也被删掉了。 今天 IE 也终于迎来了它的末日,虽然 IE 比不了当下的 Chrome,Firefox 等浏览器,但是毕竟也是曾经的一哥,靠着强大的微软爸爸的系统强绑定,一度市场份额占据第一,而且很多政府单位的官网或者系统都还只支持 IE 访问。 之前微软就对 IE 浏览器停止了更新,现在是真正的准备放弃了,毕竟 IE 的名声已经就不回来了,索性推出 Edge,用一个新的产品来替代旧的。 熟悉的朋友可能知道,其实最开始的浏览器并不是 IE ,而是网景公司开发的 Netscape 浏览器,Netscape 浏览器定义了许多关于浏览器的....
远程调用失败?如何优雅的进行重试? 2022-11-23 在日常开发的过程中我们经常会需要调用第三方组件或者数据库,有的时候可能会因为网络抖动或者下游服务抖动,导致我们某次查询失败,这种时候我们往往就会进行重试,当重试几次后依旧还是失败的话才会向上抛出异常进行失败。接下来阿粉就给大家演示一下通常是如何做的,以及如何更优雅的进行重试。 常规做法 我们先来看一下常规做法,常规做法首先会设置一个重试次数,然后通过 while 循环的方式进行遍历,当循环次数没有达到重试次数的时候,直到有正确结果后就返回,如果重试依旧失败则会进行睡眠一段时间,再次重试,直到正常返回或者达到重试次数返回。 package com.example.demo.service; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import java.util.Random; import java.util.concu....
我敢打赌你一定没用过 Java 中的这个类! 2022-11-23 在 Java 中有这样的一个类,平时可能都用不到,但是需要的时候还是会很方便的,它就是 Java 中的javafx.util.Pair。在介绍 Pair 的使用之前我们先看看下面的例子。 如果对 Python 或者 GO 这两个语言有了解的,应该知道这两种语言是有下面这样的特性,那就是一个函数可以返回多个值,如下所示: Python 示例: #! /usr/bin/env python3 # -- coding: utf-8 -- """ 日期:2022-07-09 12:14 描述:a test module """ author = 'ziyou' def mul_result(a, b): key = "key" value = a + b return key, value if name == 'main': key, mul = mul_result(3, 4) print(key) print(mul) GO 示例: package main import "fmt" func mul_result(a, b int) (key string....
Java 中如何实现一个像 String 一样不可变的类? 2022-11-23 如果问你在日常开发中用到的最多的一个 Java 类是什么,阿粉敢打赌绝对是 String.class。说到 String 大家都知道 String 是一个不可变的类;虽然用的很多,那不知道小伙伴们有没有想过怎么样创建一个自己的不可变的类呢?这篇文章阿粉就带大家来实践一下,创建一个自己的不可变的类。 特性 在手动编写代码之前,我们先了解一下不可变类都有哪些特性, 定义类的时候需要使用 final 关键字进行修饰:之所以使用 final 进行修饰是因为这样可以避免被其他类继承,一旦有了子类继承就会破坏父类的不可变性机制; 成员变量需要使用 final 关键词修饰,并且需要是 private 的:避免属性被外部修改; 成员变量不可提供 setter 方法,只能提供 getter 方法:避免被外部修改,并且避免返回成员变量本身; 提供所有字段的构造函数; 实操 知道了不可变类的一些基本特性之后,我们来实际写代码操作一下,以及我们会验证一下,如果不按照上面的要求来编写的话,会出现什么样的问题。 这里我们定义一个 Teacher 类来测试一下,按照我们上面提到的几点,我们给类和属性的定义都加上 f....
后端程序员对于 Docker 要掌握多少才行?阿粉的答案是 2022-11-23 阿粉的答案是会部署服务就行了。 关于 Docker 阿粉相信作为后端程序员小伙伴们多多少少都听过或者用过,而且很多时候也都是因为要使用的时候才会去学习,毕竟学了用不上还不如不学。 对于后端程序员来说,如果不是专门运维或者喜欢研究运维的同学,对于 Docker 的使用只要能熟练的部署服务基本上就够用了。毕竟说实话作为后端程序员要学习的东西真的太多了,一名合格的后端程序员不仅要能看得懂改得了前端代码,也要能懂运维部署和数据库设计,而且每个领域还动不动就有很多新东西要学习,只能说太难了,毕竟每个人的精力是有限的。 为了掌握一下 Docker 再加上阿粉最近搞了一台轻量服务器,想折腾点东西,但是不知道搞什么好,所以就想起来了搭建一个网站来玩玩,可以用来写一些文章和分享啥的。 搭建网站有很多种方式,不过最强大的还是要数 WordPress,但是如果要完全靠自己搭建环境还是比较复杂,所以就想着还是使用 docker 来搭建,简单快速。 0. 安装 Docker 在 Linux 服务器中安装 docker 非常简单,直接执行yum install docker 命令即可,阿粉这边已经安装过了,所以就....
一文教你如何通过 Stream API 批量 Mock 数据 2022-11-23 在日常开发的过程中我们经常会遇到需要 mock 一些数据的场景,比如说 mock 一些接口的返回或者说 mock 一些测试消息用于队列生产者发送消息,可能很多时候我们都是使用一些固定的 case 或者一条相同的数据重复使用。今天阿粉就教大家用 Stream 去构造一些伪真实的一些数据。 Mock 任意个 UUID 首先我们通过普通写法来构造 100 个 UUID,代码如下相信大家都会写,就不多说了。 public static List<UUID> listUUID(int size) { List<UUID> list = new ArrayList<>(); for (int i = 0; i < size; i++) { UUID uuid = UUID.randomUUID(); list.add(uuid); } return list; } 下面再提供 Stream 的写法,代码如下,一行搞定 public static List<UUID> listUUID2(int size) { return Stream........
成为程序员之后你明白了什么? 2022-11-23 如果问你成为程序员以来,你明白了哪些道理,你的回答会是什么呢? 知乎上面有个提问,问题是成为程序员后你都明白什么?获取的几十万的浏览量。 首赞的一个回答是引用了阮一峰老师的一个博文,是翻译美国最大的论坛 Reddit 之前的一个热帖,是一个喝醉了的十年工作经验的程序员写下来的,堪称是程序员的酒后真言。 职业发展的最好方法是换公司。 技术栈不重要。技术领域有大约 10-20 条核心原则,重要的是这些原则,技术栈只是落实它们的方法。你如果不熟悉某个技术栈,不需要过度担心。 工作和人际关系是两回事。有一些公司,我交到了好朋友,但是工作得并不开心;另一些公司,我没有与任何同事建立友谊,但是工作得很开心。 我总是对经理实话实说。怕什么?他开除我?我会在两周内找到一份新工作。 如果一家公司的工程师超过 100 人,它的期权可能在未来十年内变得很有价值。对于工程师人数很少的公司,期权一般都是毫无价值。 好的代码是初级工程师可以理解的代码。伟大的代码可以被第一年的 CS 专业的新生理解。 作为一名工程师,最被低估的技能是记录。说真的,如果有人可以教我怎么写文档,我会付钱,也许是 1000 美元。 网上....
Google 翻译退出中国大陆,原因竟然是因为... 2022-11-23 不知道大家最近有没有发现,谷歌翻译突然用不了了,阿粉查询了一下,原因是谷歌翻译退出了中国大陆,然而退出中国大陆的原因你绝对想不到,竟然是因为使用率太低! 看到这个原因有很多网友表示震惊了,表示自己一直用谷歌翻译,每天都用,怎么就使用率太低了,不能访问的太突然了。现在打开谷歌翻译国内域名https://translate.google.cn/ 会显示下面的页面,变成一个普通的搜索框,点击过后会进入谷歌翻译香港地址。当然香港地址在国内也还是没有办法正常访问的。 早在 2010年,谷歌这家科技巨头就已经退出中国市场,仅保留谷歌翻译与谷歌地图两款服务。但是在2020年2月,谷歌地图在中国大陆停止服务,如今,最后一项服务也暂停在中国的服务。 对于程序员来说,使用的最多的翻译应该就是谷歌翻译,谷歌翻译的准确性相对于国内的一些翻译软件要好很多,这也是为什么大家会使用的原因,谷歌翻译是一项免费的服务,支持翻译的语言多达133种。 这款翻译工具使用传统计机器翻译,会在翻译的过程中在经过人工翻译的文档中进行大量检索与推测,从而得出最合适的翻译结果,因此受到很多用户的喜爱,特殊被程序员钟爱。 所以当阿粉发现....
消息队列堆积太多,下游处理不过来怎么办? 2022-11-23 作为后端程序员日常工作中难免会遇到要跟消息队列打交道的时候,而且在当下微服务的场景下,很多服务的性能不是我们自己能控制的,这不阿粉最近就遇到了一个场景,由于上游服务流量增加,发送到消息队列的消息增多,阿粉在处理消息的时候需要依赖下游的一个服务,可是谁想到下游的服务效率太差,消息太多处理不过来,CPU 居高不下。 看过我们昨天文章的小伙伴应该都知道,这个时候我们就需要进行限流了,为了避免将下游的服务打垮,我们来进行单机限流操作。这里我们来模拟一下操作过程,首先我们通过一段伪代码来模拟大流量,然后通过配置 sentinel 的控制台来配置规则从而实现单机 QPS 20 的限制。 创建 SpringBoot 服务 首先我们创建一个 SpringBoot 服务,在 pom.xml 文件中增加下面的配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </depende....
15 行 Java 代码实现一个标准输出的进度条,其中的知识点你知道但并不一定会用 2022-11-23 最近阿粉在折腾一台服务器,折腾的过程中往往会需要安装很多依赖软件,有的是在官网下载压缩包,有的是通过系统命令直接安装,在通过系统命令直接安装的时候,就会有类似下面的进度条出现。 进度条在我们日常使用的软件中已经很频繁了,不过除了安装软件一般都是在网页中看到,看到这个阿粉就想知道,那如何在标准输出中实现一个进度条呢? 光有想法是不行,接下来我们就开始实践一下,通过 Java 代码在标准输出中实现一个类似的进度条。 首先我们看到一个进度条是从 0 加载到 100 的一个过程,实现进度条我们需要一个最终的状态,然后逐渐从到有变化形成,所以我们要有一个百分比显示,其次我们要有两种不一样的样式变化。我们可以通过先展示一种符合为百分百,然后不断通过替换新的符合,产生一种变化的效果,这里我们采用下面这两种符号来表示 char incomplete = '░'; // U+2591 Unicode Character 表示还没有完成的部分 char complete = '█'; // U+2588 Unicode Character 表示已经完成的部分 通过用完成的符号不断的替换未完成的符号,形成.....
程序员如何打造一款适合自己的终端工具?Oh My Zsh YYDS! 2022-11-23 作为后端程序员日常工作中使用最多的工具除了 IDEA 之外,那一定是 Linux 终端工具了,页面上终端工具有很多,比如 SecureCRT,Putty,Xshell 或者 macOS 自带的终端工具或者 iTerm 等等,其中有收费的也有免费,大家可以根据自己的喜好选择合适的一款就好,但是不管选择哪个工具,最终都是用来链接 Linux 系统的,如果想要用的顺手,我们还必须对其进行设置。 阿粉使用的终端是 macOS 系统的 iTerm,接下来就跟 iTerm 给大家演示如何设置终端,默认的终端是下面这样,不得不说,太难看了. 首先我们进行 zsh 的安装,通过命令yum install zsh 安装 zsh,如果是直接使用 macOS 可以使用命令brew install zsh 进行安装。 安装 zsh 完成过后,我们还需要给 zsh 做一个增强,接下来我们需要使用命令chsh -s $(which zsh) 切换 shell 类型,如下,不用关心下面的警告,必现没有报错。 接下来是最重要的部分,我们需要安装 Oh My Zsh 了,通过执行下面的这个命令,从 github 中下载....
Java 中经常被提到的 SPI 到底是什么? 2022-11-23 Java 程序员在日常工作中经常会听到 SPI,而且很多框架都使用了 SPI 的技术,那么问题来了,到底什么是 SPI 呢?今天阿粉就带大家好好了解一下 SPI。 SPI 概念 SPI 全称是 Service Provider Interface,是一种 JDK 内置的动态加载实现扩展点的机制,通过 SPI 技术我们可以动态获取接口的实现类,不用自己来创建。 这里提到了接口和实现类,那么 SPI 技术上具体有哪些技术细节呢? 接口:需要有一个功能接口; 实现类:接口只是规范,具体的执行需要有实现类才行,所以不可缺少的需要有实现类; 配置文件:要实现 SPI 机制,必须有一个与接口同名的文件存放于类路径下面的 META-INF/services 文件夹中,并且文件中的每一行的内容都是一个实现类的全路径; 类加载器 ServiceLoader:JDK 内置的一个类加载器,用于加载配置文件中的实现类; 举个栗子 上面说了 SPI 的几个概念,接下来阿粉就通过一个栗子来带大家感受一下具体的用法。 第一步 创建一个接口,这里我们创建一个解压缩的接口,其中定义了压缩和解压的两个方法。 packag....
用了那么久的 Java For 循环,你知道哪种方式效率最高吗? 2022-11-23 作为程序员每天除了写很多 if else 之外,写的最多的也包含 for 循环了,都知道我们 Java 中常用的 for 循环有两种方式,一种是使用 for loop,另一种是使用 foreach,那如果问你,这两种方式哪一种效率最高,你的回答是什么呢?今天阿粉就来带你看一下。 首先我们先通过代码来实际测试一下,在计算耗时之前我们先创建一个大小集合,然后通过不断的获取集合中的内容来测试耗时。 package com.example.demo; import java.util.ArrayList; import java.util.List; /** * <br> * <b>Function:</b><br> * <b>Author:</b>@author ziyou<br> * <b>Date:</b>2022-06-26 12:22<br> * <b>Desc:</b>无<br> */ public class ForTest ....
Java 极客技术的第 800 篇原创,想跟你分享一下我们的成长历程 2022-11-23 Hello,大家好,这是我们公号「Java 极客技术」的第 800 篇原创,作为圈内分享技术的公众号我们的原创数量不说最多,但也绝对不少。这一路走来团队里面的每个小伙伴都在努力,大家基本上都是从 2019 年开始一路坚持下来的,这三年多的时间风雨无阻,砥砺前行。 公号的由来 早期的小伙伴应该都知道我们 【Java 极客技术】公众号是由【纯洁的微笑】微笑哥在 2019 年发起的一起搞事情创立起来的,早期的成员还包括【沉默王二】的二哥,【江南一点雨】的松哥,都是圈内有名的大佬。 一起搞事情活动是微笑哥发起的项目,简单来说在网上组织几个志同道合的人一起运营项目,运营项目的收益大家根据多劳多得的准则自行分成,就比如说我们的公众号【 Java 极客技术】是最早第一期搞事情的项目,现在以鸭血粉丝的形象在独立运营,带来的收益其实是有几个人一起分成的。 比如上面就是我们公众号去年某个月的分成数据,可以看到基本上每个月都可以有 1-2k 额外收入,当然并不是每个月都会是这样,根据行情以及公号的运营情况而定。另外搞事情这个活动不单单是运营公众号,还有很多其他活动比如说闲鱼,抖音,B 站,知乎等等,找到最适....