保存成功
订阅成功
保存失败,请重试
提交成功
行梭渔人

行梭渔人

攻城狮||程序猿
Java攻城狮。曾混迹于第三方支付、移动出行等行业。主要关注前后端实战技术。个人博客:https://blog.csdn.net/hellozpc...更多
创作文章19

深入理解 Java 并发编程:Volatile 关键字、CAS 操作

掌握 Java 并发编程是深入理解 Java 的必经之路。市面上许多高性能的开源框架中都用到了 Java 并发编程技术。本文对Java 并发相关的知识点各个击破、循序渐进,最终将 Java 并发相关的知识通俗易懂地呈现在读者面前。 在本场 Chat 中会讲到如下内容: - 什么是原子性/可见性/有序性 - happens-before 原则 - Volatile 的作用与使用案例 - Volatile 的底层原理 - 悲观锁及其实现方式 - 乐观锁及其实现方式 - CAS 算法的原理与缺点分析 - CAS 操作在 Java 原子类中的应用 **适合人群**:对 Java 并发编程感兴趣,在工作、面试中需要了解 Java 并发编程知识的技术人员。
45 订阅

深入理解 Java 并发编程:Java 中的那些锁事儿

掌握 Java 并发编程是深入理解 Java 的必经之路。市面上许多高性能的开源框架中都用到了 Java 并发编程技术。本文从 Java 并发相关的知识点逐一切入,循序渐进,最终将 Java 并发相关的知识完美的呈现在读者面前。 在本场 Chat 中会讲到如下内容: - JDK 1.6 对 synchronized 的优化 - 偏向锁 - 轻量级锁 - 自旋锁 - 重量级锁 - 锁的消除与锁的粗化 - 死锁及其检测工具 - Lock 锁的原理与使用案例 - Condition 条件的原理与使用案例 - Lock与Synchronized的性能对比 **适合人群**:对 Java 并发编程感兴趣,在工作、面试中需要了解 Java 并发编程知识的技术人员。
45 订阅

深入理解 Java 并发编程:线程同步与 Synchronized 关键字

掌握 Java 并发编程是深入理解 Java 的必经之路。市面上许多高性能的开源框架中都用到了 Java 并发编程技术。本文从 Java 并发相关的知识点逐一切入,循序渐进,最终将 Java 并发相关的知识完美的呈现在读者面前。 在本场 Chat 中,会讲到如下内容: - Object 类的 wait/notify/notifyAll 方法原理 - Object 类的同步方法使用案例 - Synchronized 的概念与使用案例 - Synchronized 的底层原理与性能分析 - 对象的同步监视器(Monitor)的概念 - 对象的同步监视器(Monitor)的底层代码分析 **适合人群**:对 Java 并发感兴趣,工作、面试中需要用到 Java 并发编程知识的技术人员。
42 订阅

JVM 面试与调优:垃圾回收器详解

本专栏以极其简单精炼的语言向读者介绍了 JVM 相关的理论知识和调优工具。此乃居家旅行,面试必备之物,望笑纳。 本篇为该专栏的第三篇,主要讲解 JVM 的垃圾回收器。 在本场 Chat 中,将会讲到如下类容: - 垃圾收集器的发展历史 - Serial 收集器 - ParNew 收集器 - Parallel 收集器 - CMS 收集器 - G1 收集器 - ZGC 和 Shenandoah 收集器展望 - GC 日志分析与线上频繁 Full GC 排查 **适合人群**:对 JVM 感兴趣,工作、面试中需要和 JVM 打交道的研发、测试、运维人员。
JVM
71 订阅

JVM 面试与调优:垃圾回收算法详解

本专栏以极其简单精炼的语言向读者介绍了 JVM 相关的理论知识和调优工具。此乃居家旅行,面试必备之物,望笑纳。 本篇为该专栏的第二篇,主要讲解 JVM 的垃圾回收及相关算法,包括引用计数法、可达性分析算法、标记清除法、标记压缩法、复制算法、分代收集算法、增量收集算法等。 在本场 Chat 中,将会讲到如下类容: - 垃圾回收及垃圾回收算法概述 - 引用计数算法(Reference Counting) - 可达性分析算法(Tracing Garbage Collection) - 标记-清除算法(Mark-Sweep) - 复制算法(Copying) - 标记-压缩算法(Mark-Compact) - 分代收集算法 - 增量收集算法 - 分区算法 - 与垃圾回收相关的其它概念 **适合人群**:对 JVM 感兴趣,工作、面试中需要和 JVM 打交道的研发、测试、运维人员。
JVM
58 订阅

JVM 面试与调优:调优工具详解与实战

本专栏以极其简单精炼的语言向读者介绍了 JVM 相关的理论知识和调优工具。此乃居家旅行,面试必备之物,望笑纳。 本篇为该专栏的第四篇,主要讲解 JVM 的调优工具,包括 JDK 自带的命令行工具 jstack、jmap、jinfo 以及图形界面工具 jconsole、JVisualVM。此外还会介绍一些第三方的调优工具,比如 Eclipse MAT、JProfiler、Arthas 等。最后结合实际的案例,讲解 GC 日志的分析。 在本场 Chat 中,将会讲到如下类容: - JVM 命令行调优工具 - JVM 图形界面调优工具 - Eclipse MAT - JProfiler - 阿里 Arthas - JVM 运行时参数剖析 - GC 日志分析 **适合人群**:对 JVM 感兴趣,工作、面试中需要和 JVM 打交道的研发、测试、运维人员。
JVM
81 订阅

基于 Netty 实现 HTTP Server 和 HTTP Client

HTTP 服务器就是通常我们所说的 Web 服务器,比如 Tomcat 就是我们最常用 Web Server 之一。在学习过 Netty 之后,我们知道其支持各种协议,当然也包括 HTTP。使用 Netty 也可以方便地开发一个同传统 Web 容器 Tomcat、Jetty 类似的 HTTP 服务器。同样的,也可以基于 Netty 开发一个通用的 HTTP Client,类似 Apache HTTP Client 或 Spring Resttemplate 的功能。 在本场 Chat 中将会讲述如下内容: - 基于 Netty 实现一个简单的 HTTP Server 端 - 基于 Netty 实现一个简单的 HTTP Client 端 - 深入分析 HTTP 服务器、客户端模型 - 实现一个功能完备的 HTTP Server 端 - 实现一个功能完备的 HTTP Client 端 - 演示客户端/服务端的使用,实际开发使用 HTTP Client 作为工具类 **适合人群**:对 Netty 感兴趣,需要进行实战训练的同学。实际开发中需要使用高性能的 HTTP 客户端工具请求服务端接口的研发人员。
Netty
92 订阅

一文掌握 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 用法的初学者。
JDK
109 订阅

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

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

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 接口编程的开发人员。
严选Spring Boot
180 订阅

循序渐进学 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
218 订阅

JVM 面试与调优 : JVM的体系结构详解

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

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

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

万字长文详解大数据流式计算框架 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
179 订阅

万字长文详解大数据流式计算框架 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大数据
138 订阅

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
320 订阅

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

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

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

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

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

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