自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

木头的专栏

技术改变生活

  • 博客(164)
  • 收藏
  • 关注

原创 AI 大模型智能体,人设、记忆、规划与行动

提到大模型相关的应用,就肯定会听过一个词,叫智能体,也就是 Agent。打开通义千问的 APP,就有一个“智能体”的标签页,里面有各种智能体。这里我们说到的智能体,全称是 Large Language Model based Autonomous Agent,简称为 LLM Agent,或直接叫 Agent,指的是以大模型作为推理引擎的智能体。智能体之所以受到关注,是因为借助大模型的推理能力,智...

2024-04-24 08:00:22 236

原创 Java 22 发布,新特性一览

Java 22 发布于 2024 年 3 月 19 号。目前已经可以下载到不同供应商的构建版本了。推荐使用 Eclipse Temurin 的版本。这个最新的 Java 版本有哪些新东西呢?我们来看一下。首先介绍 Java 22 全新的功能。第一个是Class File API。这是解析、生成和转换 Java 类文件的标准 API。目前在处理 Java 的字节码时,必须用到第三方库,比如 ASM...

2024-03-26 20:00:18 1226

原创 Java 22 的流收集器,自定义流处理中间操作

Java 中的流终于可以自定义中间处理操作了。这是 Java 22 中新增的预览功能。自从 Java 8 引入了 Stream 之后,Stream 在 Java 应用中的使用频率非常高。Stream 处理时的 pipeline 由 3 个部分组成,分别是源、中间操作和终结操作:源是 Stream 中元素的来源,可以通过 Stream.of 方法创建,或者从集合类得到。中间操作对流中的元素进行处理,...

2024-03-12 08:01:30 717

原创 【Java 22 新特性】构造器 super(...) 之前可以添加语句

在学习 Java 的时候,我们都会记得一条 Java 的语法规则,与 Java 的 类继承和构造器有关。在继承一个类的时候,子类的构造器必须要使用super(...)来调用父类的构造器。这个super(...)语句必须是子类构造器方法的第一条语句。如果super(...)不是第一条语句,就会出现编译错误。这一条规则对于调用同一个类的构造器也是适用的,也就是调用this(...)的...

2024-02-21 14:01:02 723

原创 Epsilon GC - 不回收垃圾的 Java GC 实现

提到垃圾回收器,Java 开发人员应该都不陌生。Java 虚拟机提供了不同的垃圾回收器实现。这里介绍的 Epsilon 是一个很特别的垃圾回收器,它只负责分配内存,并不回收内存。当堆内存耗尽之后,JVM 直接因为 OutOfMemory 而终止。Epsilon 在 Java 11 中加入。一个不回收内存的 GC 实现有什么用呢?Epsilon 有自己的应用场景。首先是那些运行时间很短的程序,比如命...

2024-02-08 18:00:18 366

原创 java 命令直接运行包含多个 Java 源文件的程序【Java 22 新变化】

Java 11 中增加了一个功能,java 命令可以直接运行单个 Java 源代码文件,不需要首先通过 javac 编译之后再由 java 来运行。Java 11的这个功能在一定程度上简化了 Java 程序的运行。比如 Hello World 的简单 Java 程序,直接用下面的命令就可以运行。java HelloWorld.java不过这种方式存在一定的局限性,只允许有一个 Java 源文件。在...

2024-01-27 11:35:46 323

原创 通义灵码试用体验 - 阿里云的 AI 编程助手

阿里云的通义灵码全面开放公测已经有一段时间了。在通义灵码刚开始公测的时候,我就进行了试用,也录制了相关的视频。这篇文章算是一个文字版。实际的演示视频可以看我的 B 站 / 抖音 / 视频号。通义灵码可以在编程时作为辅助。在作用上类似 GitHub 的 Copilot。我之前也试用过类似 Cursor 这样的工具,确实对编程开发有一定的帮助。对于阿里云的通义灵码也是有所期待。通义灵码支持 VS Co...

2023-12-05 08:00:40 1288

原创 从源代码出发,Jenkins 任务排队时间过长问题的解决过程

最近开发了一个部署相关的工具,使用 Jenkins 来构建应用。Jenkins 的任务从模板中创建而来。每次部署时,通过 Jenkins API 来触发构建任务。在线上运行时发现,通过 API 触发的 Jenkins 任务总是会时不时在队列中等待较长的时间。某些情况下的等待时间甚至长达几分钟。直接在 Jenkins 界面上触发的任务却几乎不需要排队,直接马上就可以执行。过长的等待时间影响了构建的效...

2023-11-28 08:00:21 852

原创 Git 删除已经合并的本地分支

在使用 Git 的开发流程中,经常会创建很多的 Git 分支,包括功能分支(features/*)、发布分支(release/*)和 hotfix 分支(hotfix/*)。在开发了一段时间之后,本地就会有出现很多分支。这些分支最终都会被合并到主分支。虽然这些分支在远端 Git 仓库已经被删除,仍然会出现在本地。这些本地分支可以被清理。在清理之前,首先运行git fetch来进行更新。有两种清...

2023-08-25 20:00:22 1133

原创 Java 21 新特性和改进

Java 21 是 Java 17 之后的下一个 LTS 版本。虚拟线程在 Java 21 中将成为正式功能。可以预期的是,Java 21 会成为一个很流行的 Java 版本。Java 21 将在 2023 年 9 月 19 日发布。目前 Java 21 包含的内容已经基本确定了。下面来梳理一下 Java 21 中会包含的内容。正式功能虚拟线程 (Virtual Threads)自从 Java 1...

2023-05-28 18:14:06 5695

原创 【Java 21 新特性 】顺序集合(Sequenced Collections)

Java 21 中增加了一种新的集合类型:顺序集合(Sequenced Collections)。要介绍顺序集合,就首先要说明一下出现顺序(encounter order)。出现顺序指的是在遍历一个集合时,集合中元素的出现顺序。有些集合类型,有确定的出现顺序,比如List。不管遍历多少次这样的集合,其中元素的出现顺序始终是固定。有些集合类型,并没有确定的出现顺序,比如HashSet。如果多次遍...

2023-04-01 22:45:13 3226 1

原创 Cursor:GPT-4 驱动的强大代码编辑器

Cursor (https://www.cursor.so/)是 GPT-4 驱动的一款强大代码编辑器,可以辅助程序员进行日常的编码。下面通过一个实际的例子来展示 Cursor 如何帮助你编程。这个例子做的事情是网页抓取。抓取的目标是百度首页上的百度热搜,如下图所示。我用的是 JavaScript 来实现的。同时按下 Ctrl + K,给出的提示是:抓取 https://www.baidu.com...

2023-03-17 19:00:44 24712 9

原创 ChatGPT 又整活了,从零开始设计并实现一个类似数独的游戏 Sumplete

ChatGPT 又整活了。这次是从零开始设计并实现一个类似数独的游戏。数独应该很多人都玩过,规则也很简单。那能不能设计一款与数独类似的新游戏呢?国外有位叫 Daniel Tait 的工程师就想到了让 ChatGPT 来试试。经过几个小时与 ChatGPT 的对话,ChatGPT设计并开发了这款名为 Sumplete 的游戏。这款游戏的规则也很简单。给定 3x3、4x4、5x5、6x6、7x7、8x...

2023-03-10 21:00:20 943

原创 Java应用使用 Reflections 库时提升启动性能

Reflections 是 Java 应用中进行反射操作时的常用库。比如,如果想要找到所有标注了@Tag注解的方法,可以用 Reflections 提供的getMethodsAnnotatedWith方法,如下面的代码所示。public class TagLoader { Set<String> findTags() { var reflections = new...

2023-02-13 23:58:51 724

原创 Git commit 消息的格式与约定式提交

在开发人员的日常工作中,提交代码到 Git 是必不可少的动作。代码提交时的消息该怎么写呢?最基本的原则是:如果团队有 commit 格式要求,就遵循该要求。这一点与代码风格是一样的。commit 消息的格式没有绝对的好与坏,最重要的是保持一致性。如果团队没有具体的格式要求,可以参考下面的一些建议。消息应该分成主题和内容两个部分,两部分用一个空行分隔。主题部分对 commi...

2022-06-09 23:07:24 1360

原创 介绍 Docker 的多阶段构建功能

云原生应用以容器镜像作为发布形式。云原生应用的构建过程负责把源代码转换成可以直接运行的镜像。这个转换过程根据编程语言而有所不同:解释型语言,如 JavaScript 和 Python,一般...

2021-12-28 14:16:35 1094

原创 OCI 容器镜像的优化策略

OCI 容器镜像在云原生应用的开发中起着非常重要的作用。如何优化 OCI 容器镜像也是一个重要的话题。一般来说,OCI 容器镜像的优化有三个方向:容器镜像的尺寸容器镜像的拉取和推送速度容器...

2021-12-23 15:47:33 777

原创 详解 OCI 容器镜像的层

在 OCI 容器镜像规范中,最重要的概念是层(layer)。如果需要对容器镜像的存储尺寸进行优化,就离不开对层的理解。变化集层表示的是文件系统的变化集(Changeset)。每个层表示的是...

2021-12-10 12:42:58 1287

原创 了解 OCI 容器镜像的 ID 与标签

在本地开发中使用 Docker 时,一个常用的命令是docker pull,用来拉取镜像到本地。如下面代码所示:docker pull nginx上面的代码仅包含了nginx,这是一个...

2021-12-04 15:36:39 571

原创 手把手教你了解 OCI 镜像规范

在云原生应用的开发中,应用会被打包成容器镜像。容器镜像遵循OCI 镜像规范。了解 OCI 镜像规范,对构建容器镜像有重要的作用。在介绍 OCI 镜像规范之前,首先需要介绍内容可寻址的文件...

2021-11-29 17:16:13 2796 1

原创 Java 的字符串连接与 StringBuilder 的使用

Java 的字符串连接与 StringBuilder作为一名Java程序员,当看到下面的代码时,第一反应可能是:为什么要用字符串相加?得用 StringBuilder 啊,不然性能有问题。...

2021-11-12 20:24:59 380

原创 使用 run-java.sh 运行 Java 应用

当需要运行Java应用时,不管在机器上还是容器里,一般的做法是运行java命令。一些 Java 应用会被打包成单个可执行的 JAR 文件,如 Spring Boot 应用。对于这样的 ...

2021-11-11 18:58:00 4014

原创 【升级到Java 17】文本块

一直以来,Java 语言中并没有很好的方式在代码中直接添加多行的字符串常量。一种常见的做法是使用字符串连接。每一个字符串表示一行,需要手动添加换行符。字符串连接的问题在于很难维护。尤其是需...

2021-10-10 11:21:41 3033

原创 【升级到Java 17】模式匹配

提到模式匹配,可能很多 Java 开发人员比较陌生。了解模式匹配我们从一个具体的示例出发来看模式匹配的作用。我们的目标是把任意的 Java 对象转换成字符串。我们可以很容易的写出类似下面的...

2021-10-07 20:08:12 2012

原创 【升级到Java 17】switch 表达式

提到switch, 所有 Java 开发人员应该都不陌生。switch根据变量的值来执行不同的逻辑,用来替代多分支的if/else。不过switch语句在使用时存在一些常见问题。首...

2021-10-04 12:25:04 3312

原创 使用Kafka UI管理Kafka

在使用Kafka进行开发时,有个可视化的管理界面有助于提高开发效率。目前已经有很多Kafka的管理界面实现。本文介绍的Kafka UI是一个新的实现。该界面的GitHub地址是provectus/kafka-ui。GitHub - provectus/kafka-ui: Open-Source Web GUI for Apache Kafka ManagementOpen-Source Web GUI for Apache Kafka Management. Contribute to provectu

2021-10-02 13:33:03 11767 2

原创 【升级到Java 17】密封类

提到密封类,需要首先介绍Java的继承机制。Java继承机制Java的继承机制的设计理念是开放的。在满足可见性限制的前提下,类默认都是可以被继承的。这种开放的继承机制在有些情况下会产生问题...

2021-10-01 20:30:00 793

原创 Docker Desktop 4.1为免费用户提供了卷管理功能

在最新发布的 Docker Desktop 4.1中,之前为付费用户提供的卷管理(Volume Management)功能已经免费。只需要升级到 4.1 就可以使用该功能。下面是 Docker Desktop 4.1 的版本信息。在 Docker Desktop的仪表盘界面可以查看全部的卷。对每个卷可以查看详细信息。还可以查看卷中的文件结构,并进行管理。这个功能有助于对容器运行时产生的错误进行调试。...

2021-10-01 07:57:17 331

原创 使用单一代码仓库管理微服务应用

如何组织源代码,是实现微服务架构中的一个现实问题。由于每个微服务相对独立,一种最直接的做法是为每个微服务使用各自独立的代码仓库。这种做法的好处很明显,就是从源头开始对微服务进行隔离。每个微...

2021-09-30 18:55:57 851

原创 了解 Java 的记录类型

提到记录类型,就首先要介绍值对象。熟悉领域驱动设计的人应该听过实体和值对象这两个概念。值对象每个实体都唯一的标识符,可以是业务ID或是由应用指派的ID。实体的相等性完全由标识符来确定。值对...

2021-09-28 19:14:04 444

原创 使用 JDK 14 的 jpackage 打包 Java 应用

Java应用的分发一直是一个比较麻烦的问题。这是因为Java应用的运行需要虚拟机的支持,仅有Java应用打包的JAR文件是不够的,目标机器还需要安装版本匹配的JDK或JRE。随着云原生和容...

2021-09-23 19:48:38 3180

原创 Java 版本更新周期与不同的 Java 发行

当你还在用 Java 8 开发时,突然发现 Java 16 已经发布了,Java 17 已经在路上。Java 的版本变化也太快了吧。在 Java 9 之前,Java 的版本更新一直都是比较...

2021-08-21 16:58:56 1377

原创 kustomize 入门 - Kubernetes 原生配置管理工具

在前一篇文章中介绍了 Kubernetes 上的包管理工具 Helm。Helm Chart 以模板的形式来生成 Kubernetes 上的资源定义,允许对应用的安装进行灵活的定制。Hel...

2020-12-10 08:30:00 4309

原创 Helm 入门介绍 - Kubernetes 上的包管理软件

这篇文章介绍一下云原生应用在 Kubernetes 上安装时,经常会用到的一个重要工具,Helm。Helm 是 Kubernetes 的包管理软件。提到包管理软件,很多人都不陌生。Mav...

2020-11-09 20:41:47 469 1

原创 Minikube 入门介绍

在云原生应用的开发中,离不开在开发和测试时可以使用的 Kubernetes 。Minikube是一个常用的在本地运行的 Kubernetes,在开发和测试中非常实用。本文将介绍 Min...

2020-11-03 08:30:00 7998 2

原创 Java 应用从源代码到镜像 - 使用 Docker 多阶段构建

对于一个 Java 应用,如果要部署到 Kubernetes,首先需要创建一个容器镜像。这其实由两个步骤组成:构建 Java 源代码,并打包成 JAR 文件。把 JAR 文件和 JDK ...

2020-10-28 18:04:39 587

原创 Apache Maven 的常用命令行参数

Apache Maven 是一个常用的 Java 构建工具。在日常的开发中通常不会关注 Maven 命令的参数。但在持续集成时,有些命令行参数很重要。下面对 Maven 3.6.3的常...

2020-10-24 11:23:00 482

原创 部署到 Kubernetes 时初始化 Cassandra 数据库

当部署 Cassandra 到 Kubernetes 时,一个常见的需求是对数据库进行初始化,包括创建 key space 和表。本文说明了如何使用 helmfile 和 Bitnami...

2020-10-20 19:49:56 437

原创 VS Code 的 Kubernetes 扩展 - 实用的 Kubernetes 工具

在开发云原生应用时,总是免不了与 Kubernetes 打交道。与 Kubernetes 进行交互的方式主要有两种:第一种方式是使用命令行工具kubectl,第二种方式是使用 Kube...

2020-09-21 19:53:21 5224

原创 免费午餐时代的结束 - Docker Hub 新的服务条款

在云原生技术中,容器化是很重要的一环,其中免不了的是容器镜像的共享,这就必须要用到容器注册表。目前最流行的容器注册表是Docker Hub。Docker Hub上保存了1亿五千万个容器镜...

2020-09-07 20:59:50 2784

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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