mghio

Java 搬运工 & 终身学习者


  • 首页

  • 标签

  • 分类

  • 归档

  • 关于

  • 搜索

Java 异步编程的几种方式

发表于 2022-02-15 | 分类于 Java , 异步 |
字数统计: 2k 字 | 阅读时长 ≈ 7 分钟

cover.jpg

前言

异步编程是让程序并发运行的一种手段。它允许多个事情同时发生,当程序调用需要长时间运行的方法时,它不会阻塞当前的执行流程,程序可以继续运行,当方法执行完成时通知给主线程根据需要获取其执行结果或者失败异常的原因。使用异步编程可以大大提高我们程序的吞吐量,可以更好的面对更高的并发场景并更好的利用现有的系统资源,同时也会一定程度上减少用户的等待时间等。本文我们一起来看看在 Java 语言中使用异步编程有哪些方式。

阅读全文 »

Java 并发之 Fork/Join 框架

发表于 2022-01-05 | 分类于 Java , 并发 , Fork-Join |
字数统计: 2.5k 字 | 阅读时长 ≈ 9 分钟

cover.jpg

什么是 Fork/Join 框架

Fork/Join 框架是一种在 JDK 7 引入的线程池,用于并行执行把一个大任务拆成多个小任务并行执行,最终汇总每个小任务结果得到大任务结果的特殊任务。通过其命名也很容易看出框架主要分为 Fork 和 Join 两个阶段,第一阶段 Fork 是把一个大任务拆分为多个子任务并行的执行,第二阶段 Join 是合并这些子任务的所有执行结果,最后得到大任务的结果。

这里不难发现其执行主要流程:首先判断一个任务是否足够小,如果任务足够小,则直接计算,否则,就拆分成几个更小的小任务分别计算,这个过程可以反复的拆分成一系列小任务。Fork/Join 框架是一种基于 分治 的算法,通过拆分大任务成多个独立的小任务,然后并行执行这些小任务,最后合并小任务的结果得到大任务的最终结果,通过并行计算以提高效率。

阅读全文 »

Spring 的循环依赖问题

发表于 2021-12-05 | 分类于 Java , Spring , 循环依赖 |
字数统计: 2.5k 字 | 阅读时长 ≈ 9 分钟

cover.jpg

什么是循环依赖

什么是循环依赖呢?可以把它拆分成循环和依赖两个部分来看,循环是指计算机领域中的循环,执行流程形成闭合回路;依赖就是完成这个动作的前提准备条件,和我们平常说的依赖大体上含义一致。放到 Spring 中来看就一个或多个 Bean 实例之间存在直接或间接的依赖关系,构成循环调用,循环依赖可以分为直接循环依赖和间接循环依赖,直接循环依赖的简单依赖场景:Bean A 依赖于 Bean B,然后 Bean B 又反过来依赖于 Bean A(Bean A -> Bean B -> Bean A),间接循环依赖的一个依赖场景:Bean A 依赖于 Bean B,Bean B 依赖于 Bean C,Bean C 依赖于 Bean A,中间多了一层,但是最终还是形成循环(Bean A -> Bean B -> Bean C -> Bean A)。

阅读全文 »

Spring 整合 Feign 的原理

发表于 2021-11-05 | 分类于 实现原理 , Feign , Spring |
字数统计: 2.5k 字 | 阅读时长 ≈ 9 分钟

cover.jpg

前言

在 上篇 介绍了 Feign 的核心实现原理,在文末也提到了会再介绍其和 Spring Cloud 的整合原理,Spring 具有很强的扩展性,会把一些常用的解决方案通过 starter 的方式开放给开发者使用,在引入官方提供的 starter 后通常只需要添加一些注解即可使用相关功能(通常是 @EnableXXX)。下面就一起来看看 Spring Cloud 到底是如何整合 Feign 的。

阅读全文 »

Feign 实现原理

发表于 2021-10-06 | 分类于 实现原理 , Feign , Spring |
字数统计: 2.8k 字 | 阅读时长 ≈ 12 分钟

cover.jpg

What is Feign?

Feign 是⼀个 HTTP 请求的轻量级客户端框架。通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java 中通过封装 HTTP 请求报文的方式直接调用。服务消费方拿到服务提供方的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。让我们更加便捷和优雅的去调⽤基于 HTTP 的 API,被⼴泛应⽤在 Spring Cloud 的解决⽅案中。开源项目地址:Feign,官方描述如下:

Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.

阅读全文 »

信息爆炸时代,该如何获取优质信息?

发表于 2021-09-05 | 分类于 思考 , 信息获取 |
字数统计: 1.7k 字 | 阅读时长 ≈ 5 分钟

cover.jpg

前言

我们现在所处的信息爆炸时代,如何强调快速获取信息都不为过,信息多种多样,有些能找到源头,有些则不能,有些能找到规律,有些则不一定能找到,信息的源头和获取渠道很重要。然而事实上,能够真正有效获取到优质信息并加以消化利用的人并不多。

在信息的获取的过程中,应该要具备筛选信息的能力,什么是官方信息,你要核实,什么是虚假信息,你要甄别。看到网上有些陷入杀猪盘的,负载累累。仔细思考一下,其实甄别筛选信息的能力真的是最大的问题。

当然一个人将信息并内化利用是一个很复杂的过程,每个人都有自己独到的方法。今天来聊聊应该如何去获取「优质信息」以及如何去过滤无用信息。下面分享几个获取信息的原则:

阅读全文 »

分享几个好用的 Google 搜索技巧

发表于 2021-08-15 | 分类于 Google , Search , Tips |
字数统计: 891 字 | 阅读时长 ≈ 3 分钟

cover.jpg

搜索能力是被绝大多数人低估一项基本素质,绝大部分做编程技术相关的朋友应该都知道如何使用 Google,但是并不知道如何利用它的潜力。其实不管是 Google 还是 百度,会搜索的人一样都可以查找到需要的东西,不会搜索的人用什么都不好使。下面介绍一些 Google 常用的搜索技巧以及搜索快捷方式,可以帮助你更快,更准确地找到结果。Google 是世界上功能最强大的搜索引擎,它已经改变了我们查找信息的方式。

阅读全文 »

论基础理论知识的重要性

发表于 2021-07-05 | 分类于 基础知识 , 思考 |
字数统计: 1.1k 字 | 阅读时长 ≈ 3 分钟

cover.jpg

前言

在计算机行业工作的人们,最大的感触就是这个行业里总是会出现很多的新东西,各种技术、框架等等,变化无处不在,有很大一部分人都比较焦虑。在一些论坛或者社区里面总是有人在问如何学习一门新技术?怎样才能跟上技术的潮流?我想说是,我们应该打牢基础,应对变化,以不变应万变。

阅读全文 »

如何实现一个简易版的 Spring - 如何实现 AOP(终结篇)

发表于 2021-06-13 | 分类于 Java , Spring , AOP |
字数统计: 2.5k 字 | 阅读时长 ≈ 12 分钟

cover.jpg

前言

在 上篇 实现了 判断一个类的方式是符合配置的 pointcut 表达式、根据一个 Bean 的名称和方法名,获取 Method 对象、实现了 BeforeAdvice、AfterReturningAdvice 以及 AfterThrowingAdvice并按照指定次序调用 等功能,这篇再来看看剩下的 代理对象如何生成、根据 XML 配置文件生成 BeanDefintion以及如何将生成的代理对象放入到容器中 等功能,话不多说,下面进入主题。

阅读全文 »

如何实现一个简易版的 Spring - 如何实现 AOP(下)

发表于 2021-06-06 | 分类于 Java , Spring , AOP |
字数统计: 2.5k 字 | 阅读时长 ≈ 11 分钟

cover.jpg

前言

前面两篇 如何实现 AOP(上)、如何实现 AOP(中) 做了一些 AOP 的核心基础知识简要介绍,本文进入到了实战环节了,去实现一个基于 XML 配置的简易版 AOP,虽然是简易版的但是麻雀虽小五脏俱全,一些核心的功能都会实现,通过实现这个简易版的 AOP,相信你会对 AOP 有深入的理解,不止知其然,还能知其所以然。AOP 的顶层接口规范和底层依赖基础组件都是由一个叫 AOP Alliance 的组织制定的,我们经常听到的 AspectJ、ASM、CGLIB 就是其中被管理的一些项目,需要明确的一点是,在 Spring 中只是使用了 AspectJ 的核心概念和核心类,并不是像 AspectJ 那样在编译期实现的 AOP,而是在运行期。话不多说,下面开始进入主题。

阅读全文 »
123…6
mghio

mghio

58 日志
63 分类
57 标签
RSS
GitHub 思否 简书 掘金 E-Mail 博客园
友情链接
  • 气象万千
  • 淡白记忆博客
  • Junhua's blog
  • IT运维狗
  • Z
  • 13blog
  • 黄泽彬个人站
  • 荷戟独彷徨
  • Java学习之道
  • 宇宙湾
  • Morcat Blog
  • Jason
© 2019 — 2025 mghio
湘 ICP 备 2021001218 号-1 · 湘公网安备 43312302000074
本网站由提供 CDN 加速服务
访客数 人 总访问量 次