保存成功
订阅成功
保存失败,请重试
提交成功
程猿薇茑

程猿薇茑

攻城狮||程序猿
计算机软件与理论硕士学历,Java攻城狮。曾混迹于第三方支付、移动出行等行业。主要关注前后端实战技术。个人博客:https://blog.csdn.net/hellozpc...更多
创作文章12

一文掌握 JDK8 CompletableFuture 的核心原理与实战技能

提到 CompletableFuture,就不得不提到异步编程(异步调用)。所谓异步调用其实就是指调用一个方法(函数)后调用者可以无需等待其返回结果,调用者代码可以直接继续运行。比如在 Java 中,我们可以通过启动一个线程的方式来完成方法调用中的部分计算逻辑,而调用者本身无需同步等待返回结果,可以继续运行或者直接返回。但是某些场景下调用者仍需要获取异步线程的计算结果。此时我们会想到 JDK5 新增的 Future 接口。Future,顾名思义,表示未来(将来时),即用于描述一个异步计算的结果。 虽然说 Future 提供了异步执行任务的能力,但是对于异步计算结果的获取却只能通过阻塞或者主动轮询的方式得到。阻塞的方式显然违背了异步编程的初衷;而轮询的方式又会浪费 CPU 资源,并且不能及时获取到计算结果。能不能让执行异步计算的线程主动向主线程通知其进度,以及成功失败与否呢?这就是本文要介绍的 JDK8引入的 CompletableFuture。 在 Java8 中引入的 CompletableFuture 提供了非常强大的 Future 的扩展功能,降低了异步编程的复杂度,并且提供了函数式编程的能力。相比 Future 的一个明显的优势是可以传入回调函数,当异步计算任务完成或者发生异常时,会主动调用回调对象的回调方法,这就省去了我们主动等待、获取异步计算结果,后者可以认为是一种伪异步模式。CompletableFuture 还提供了多种转换和合并 CompletableFuture 的方法,即可以实现异步任务链。所有的特性和用法都将在本文中娓娓道来。 在本场 Chat 中,将会讲到如下内容: - CompletionService 详解 - CompletableFuture 的基本用法 - 执行有返回值类型(Supplier)的任务 - 执行无返回值类型(Runnable)的任务 - 执行异步任务链 - 多 Future 合并计算 - 多 Future 并行计算 - 自定义 CompletableFuture 使用的线程池 - 任务异常处理 **适合人群**:需要在实际开发中使用异步编程的同学,想全面掌握 JDK8 CompletableFuture 用法的初学者。
42 订阅

一文掌握 Java 线程池核心原理及基于 Spring Boot 的最佳实践

日常开发中我们经常使用线程池去提升程序的性能。通过池化的思想进行线程复用、管理,可以降低系统资源消耗、提升系统响应速度、减少系统处理耗时。 熟悉服务器端开发的同学都知道,Web 服务器在接收客户端请求时,通常不会采取来一个请求就新建一个线程处理的方式。虽然这种方式实现起来简单易懂,但是如果并发的请求数非常多,并且每个请求的实际处理耗时又非常短,那么就会导致频繁地创建和销毁线程,这将大大降低系统的性能。因为线程切换是有成本的,CPU 需要保存当前执行线程的上下文,并且后期还要恢复执行线程的上下文,即所谓的“上下文切换开销”。 线程池则为多线程创建的开销和资源不足问题提供了解决方案。通过多任务下线程的重用,将线程创建的开销摊薄到了多任务上,取得了高并发环境下系统性能上的提升。 在本场 Chat 中将会讲到如下内容: - Java 中线程池的基本概念和原理以及使用案例 - Java 中的线程池调优,参数配置详解 - 使用 Spring 内置的各种线程工具类创建线程池 - 在 Spring Boot 采用优雅的方式使用线程池 - 线程池的监控与管理以及线上动态调优实践 **适合人群**:Java 前后端开发人员。想深入理解、掌握线程池的使用、配置,在项目中需要自定义线程池的开发人员。
65 订阅

Spring Boot Validation 参数校验及统一异常处理最佳实践

在后端开发中,我们常常需要对接口的请求参数进行“参数合法性性”校验。比如我们要进行入参的判空、格式检查等来避免程序出现异常。首先想到的实现方式是采用 if(){...} else{...} 方式逐个对参数进行判断,这种方式功能上没有问题,能够达到目的。但是在入参很多的场景下,代码中将会充斥着大量的 if else 判断,降低了代码的美观性和可读性,显然不够优雅。那么有没有更好的方式来做这件事呢? 回答上述问题前我们再来看看另一个问题。 在后端开发中,还有个常见的问题。就是在程序中,我们不可避免地需要处理各种异常。代码中常常会看到大量的 try {...} catch {...} finally {...}。这同样造成了代码冗余,降低了可读性。那么有没有更优雅的方式来处理程序中的异常呢? 好了,带着上述问题,我们来引出本文的主要内容。在本场 Chat 中,将会讲述下列内容: - Bean Validation 概述及其具体实现介绍 - Spring Boot 中 Validation 的使用入门 - RequestBody/RequestParam/PathVariable 参数校验 - 分组校验、嵌套类校验、集合元素校验 - 自定义注解式规则校验、编程式校验 - 在 Service 接口中使用参数校验 - 后端接口统一数据格式响应 - 后端接口统一异常处理 **适合人群:** 本文篇幅较长,适合日常开发中使用 Spring Boot、Spring Cloud 微服务架构,需要经常面向 API 接口编程的开发人员。
74 订阅

循序渐进学 Netty 之 Java IO 体系、线程模型大总结

本教程的题目是《循序渐进学Netty》,就是说要从最基础的知识开始讲起,一步一步、由浅入深引导大家进行 Netty 的学习。在正式学习 Netty 之前,我们有必要回顾一下 Linux IO 模型、线程模型以及 Java 中 I/O 相关的知识,温故而知新。 在本场 Chat 中,将会讲到如下内容: - 传统 Java I/O 及其编程案例 - Java NIO 及其编程案例 - Java 网络编程 - NIO的理论基础及Linux的五种I/O模型 - Reactor线程模型 - 小结 **适合人群** :想温习 Java I/O 知识、学习 Netty 提升技术内功、对网络编程感兴趣的开发人员。
严选Netty
185 订阅

JVM 面试与调优

本专栏以极其精炼的语言向读者介绍了 JVM 的相关知识。此乃居家旅行,面试必备之物,望笑纳。 本篇为第一篇,主要讲解 JVM 的理论知识,以 JVM 运行时数据区为核心展开,以图文并茂的方式向读者讲授 Java 虚拟机的知识。 在本场 Chat 中,将会讲到如下类容: 1. JVM 概述 2. 类的加载 3. 运行时数据区 - 方法区 - 程序计数器 - Java 虚拟机栈 - 本地方法栈 - 堆 4. 对象的结构 5. 直接内存 6. 执行引擎 **适合人群**:对 JVM 感兴趣,工作、面试中需要和 JVM 打交道的研发、测试、运维人员。
JVM
134 订阅

万字长文详解大数据流式计算框架 Flink 实战(案例篇)

大数据计算框架 Flink 实战教程共分为三篇。涵盖 Flink 安装配置、基本原理、核心概念; 流处理 API 和批处理 API、存储及状态一致性、容错机制;实战案例、面试题讲解等。 本篇为第三篇,主要讲解 Flink 的应用案例和常见面试题。 在本场 Chat 中,将会讲到如下类容: 1. BroadCast State和BroadCast Stream 2. QueryableState、RocksDB 3. 网页 UV 统计 4. 头条实时热榜统计 5. 订单系统实时对账 6. Flink 常见面试题 **适合人群**:对大数据流式计算感兴趣、工作中需要使用 Flink 进行大数据处理的研发、测试、运维人员。
Flink
114 订阅

万字长文详解大数据流式计算框架 Flink 实战(中篇)

大数据计算框架 Flink 实战教程共分为三篇。涵盖 Flink 安装配置、基本原理、核心概念、 流处理 API 和批处理 API、存储及状态一致性、容错机制、实战案例以及面试题讲解等。 本篇为第二篇,主要讲解 Flink 的 API、Window 和 Watermark 机制、状态管理和存储、容错机制、状态一致性等等。 在本场 Chat 中,将会讲到如下类容: 1. FlinkAPI - Environment - Source - Transformation - Sink - Window - Watermark - 分层 API 2. Flink 状态管理 3. Flink 状态后端存储 4. Flink 容错机制 5. Flink 检查点和保存点 6. Flink 状态一致性 **适合人群**:对大数据处理感兴趣、工作中需要使用 Flink 进行大数据处理的技术人员。
严选Flink
167 订阅

万字长文详解大数据流式计算框架 Flink 实战(前篇)

Flink 实战教程共分为 3 篇。涵盖 Flink 安装配置、基本原理、核心概念、 流处理 API和批处理 API、存储及状态一致性、容错机制、实战案例以及面试题讲解等。 本篇为第一篇,主要讲解 Flink 的入门、安装及配置、基本术语和概念、核心原理以及快速入门案例。 在本场Chat中,将会讲到如下内容: 1. Flink 概述 2. Flink 安装部署 - 本地模式 - 下载安装包 - 上传并解压至 Linux - 启动 Flink - 关闭防火墙 - 集群模式 - Standalone 模式 - Flink on YARN 模式 3. Flink 高可用(HA) - Standalone 集群 HA - Flink on Yarn 集群 HA 4. 快速入门案例 - 引入 pom 依赖 - 批处理 - 流式处理 - 提交 Flink 集群运行 5. Flink 核心概念与原理讲解 - Flink 运行时架构 - JobManager - TaskManagers - Flink 核心概念与处理流程 - 并行度(Parallelism) - 任务槽(Task Slots) - 两者关系 - 最佳实践 - Flink 应用程序执行流程 - Flink 任务链 **适合人群**: 对大数据感兴趣、工作中需要使用Flink 进行大数据处理的运维、开发人员。
Flink大数据
130 订阅

Kafka 实战教程与面试题讲解

Kafka 是一个分布式的、发布-订阅式消息中间件。最初是由 Linkedin 领英公司基于 Scala 和 Java 语言开发的分布式消息系统,现已捐献给 Apache 软件基金会。事实上 Kafka 不仅仅是一个消息队列(MQ),其已然成为一个开源的分布式流处理平台。Kafka 具有高吞吐、低延迟的特性,许多大数据处理系统比如 Storm、Spark、Flink 等都能很好地与之集成。 在本场 Chat 中,将会讲到如下内容: - Kafka 概述 - Kafka 体系结构 - 分区和主题 - Kafka 文件存储机制 - Kafka 安装与配置 - Kafka 监控管理 - Kafka 生产者消费者脚本 - Kafka 生产者客户端 API - Kafka 消费者客户端 API - Kafka 事务 - Spring Boot 集成 Kafka - Kafka 面试题集锦 **适合人群**:对消息队列感兴趣,在实际开发中需要使用 Kafka 的技术人员
严选Kafka
296 订阅

SnowFlake 雪花算法生成分布式 ID 实战

SnowFlake 是 Twitter 开源的分布式唯一 ID 生成算法,其具有高性能、低延迟、按时间趋势有序等特点。理论支持每毫秒生成 4096 个不同数字,能够满足绝大多数高并发场景下的互联网应用。 在本场 Chat 中,会讲到如下内容: - SnowFlake 的基本概念 - 基于内存的 WorkerId、DatacenterId 自动生成 - 单位毫秒内的ID初始值随机生成 - 时钟回拨处理 - 十进制数字字符串位数补齐 - SnowFlake 完整实现:Java 版 - 业务定制雪花算法案例:订单号生成 **适合人群**: 需要在实际应用中生成分布式唯一 ID 的技术人员,Java 程序员
算法
209 订阅

最适合后端人的 Vue+Spring Boot 入门实战教程

Vue 是一套用于构建用户界面的前端框架,简单易上手。对很多后端程序员来说,掌握一项前端技术既是工作所需,也是对自身技术栈的补充。本文的目的在于引导后端程序员快速上手基于 Vue 脚手架+ElementUI+Spring Boot 的前后端分离项目开发。 在本场 Chat 中,会讲到如下内容: - Vue 的基本概念 - 使用 Vue 脚手架 - 使用 IDEA 开发 Vue 项目 - 使用 Spring Boot 开发后台接口 - 使用 Vue 脚手架开发前端工程 - 前后端集成测试 - 集成 ElementUI 适合人群: 对前端 Vue 感兴趣的技术人员,Java 程序员
Vue.jsSpring Boot
155 订阅

RateLimiter及互联网并发限流算法实战

在应对互联网高并发请求时,我们通常需要采取一定的措施来保护我们的系统或微服务抗住突发的压力。比如我们可以增加**缓存**以提高数据访问速度,降低后端服务和数据存储的压力;我们也可以采取**服务降级**,即临时关闭或者弱化非核心业务的服务,为主营业务、核心流程腾出资源。 本文主要介绍互联网**限流**相关的概念与**算法**,并且附以完整的 Java 代码实现。包括**计数器法**、**滑动窗口计数**法、**漏斗桶算法**、**令牌桶算法**。本文还封装了自定义**限流注解**以及基于 AOP 拦截的可配置化限流框架,方便读者在实际开发中应用。 通过本 Chat 你将获得如下知识: 1. 限流相关的基本概念 - 服务熔断 - 服务降级 - 服务隔离 - 服务限流 - 比较 2. 常见的限流手段 3. 常用的限流算法 - 简单计数 - 滑动窗口计数 - 漏斗桶 - 令牌桶 4. 常用的限流算法 Java 实现 - 基于 Redis 的简单计数法 - 基于 Redis 的滑动窗口计数法 - 漏斗桶算法 - 基于 RateLimiter 的令牌桶算法 - 自定义注解、AOP 封装限流 **适合人群**: 对互联网微服务高并发限流感兴趣、亟需实施应用限流的技术人员
并发编程
188 订阅