Brown Blog

以终为始,聚沙成塔

工作三年的思考


异步编程学习4:Spring提供的异步方法注解

为了快速的将同步方法变为异步方法,Spring提供了@Async和@EnableAsync注解。两个注解搭配,就可以快速实现一个异步方法。 1 初步体验@Async注解 下面,我们假设有一个异步记录日志的方法,需要异步输出日志,代码如下。 定义异步日志输出类,需要是一个spring bean。 // 使用@Component,定义为一个spring bean。 // @EnableAsy...

使用jekyll+github pages搭建博客

1 背景 之前就已经使用jekyll+github pages将博客搭建好了,使用的主题是https://github.com/qiubaiying/qiubaiying.github.io。但是,使用过程中有一个bug:文章页面下滑或者上滑,滚动条会卡住,导致页面卡住。一直想修复这个问题。 想换一个页面主题,觉得这个主题不够好看。 2 调研 更换主题 更换主题可以...

异步编程学习3:使用Future和CompletableFuture来获取结果

在计算图比较复杂的时候,如下图所示,任务之间存在相互依赖,即任务C依赖于任务A的执行结果。这时候,需要获取异步任务A的执行结果之后再执行任务C。一种方式是通过Future来获取,另一种方式是CompletableFuture 1 初步体验Future 如果要执行下面的计算图, 可以考虑将任务A在线程池中执行,然后在主线程中执行任务B。接着,获取任务A的执行结果,执行任务C。代码如下。...

异步编程学习2:线程池方式

想象一下我们有两个任务A和B,A和B之间没有依赖关系。如果想要异步执行,那么最容易想到的是使用将A和B在不同的线程中执行。代码如下所示。 public class ThreadDemo { public static void main(String[] args) { var start = System.currentTimeMillis(); ...

异步编程学习1:概述

1 概述 先来看看异步、同步、阻塞和非阻塞的区别。 同步和异步 同步和异步是针对通信方式而言的,表示调用方和服务方之间是同步通信还是异步通信。同步通信是指,调用方调用服务方的方法之后,调用方会等待服务方返回结果。异步通信是指,调用方调用服务方的方法之后,就直接返回了,不会继续等待,结果一般是通过状态和消息来告诉调用方,或者调用方代理执行回调函数来处理结果。 阻塞和非阻塞 阻塞和非阻塞是...

学习方法之费曼技巧

之前已经讲过费曼技巧了,这里再讲一遍。因为,反思了过去的时间自己学习的方式,发现自己的学习效率低,认为主要原因是没有利用好费曼技巧。 1 简介 费曼技巧是一种“以教为学”的学习方式,它要求学习者用简单易懂的语言将所学知识讲给一个小学六年级的学生听,让他们听懂。具体的运用步骤如下: 向小学六年级的学生讲述该问题(注意,小学六年级的学生对于很多知识缺乏认知) 自己没有讲清楚的地方记...

微服务架构学习2:扩展立方体

微服务,架构,扩展立方体

《The Art of Acalability》描述了一个关于应用的扩展性的三维立方体:扩展立方体,如下图所示。 扩展立方体中,将应用当做一个立方体,可以分别从X、Y和Z三个方向来对应用进行扩展,提升应用的容量、可用性、性能和系统功能的可维护性。 1 X轴扩展:服务/数据水平复制 X轴扩展通过克隆实例的方式来扩展,多个实例是无差别的,实例的请求分布是由负载均衡来控制的。这种方式可以很...

微服务架构学习1:概论

微服务,架构

1 微服务出现的背景 最初,许多企业服务的内部实现都是单体架构的。如下图所示,下图是《微服务架构设计模式》提供的虚构的某订餐企业的系统架构图,该架构提供的服务包括餐厅管理、订单管理、配送管理、支付、通知和结算。通过REST API和Web页面的方式来让送餐员、消费者和餐馆使用,通过一些适配器来使用外部的数据库、消息服务、邮件服务和支付服务。该系统内部是模块化的,但是该应用在部署的时候还是被打...

《乌合之众》读书笔记

读书笔记,心理学

1 前言 如今新型肺炎闹得沸沸扬扬,湖北省封省,本人被困在家里没法回去上班,在家里每天看新闻都是新型肺炎铺天盖地的报道。网络上群体在疯抢口罩和双黄连口服液,湖北红十字会腐败的现象也被同时发掘出来。在封省前,滞留在湖北省的群众有些连夜收拾行李“出逃“。这些现象,让我不得不想起之前听过的一本书《乌合之众》,一本讲群体心理学的书。 2 群体的定义 一群聚集的人,他们会表现出一些新的特点,他们的个...