当前位置: 首页 > news >正文

异步处理方式探索

这里写自定义目录标题

  • 最佳异步处理方式探索
    • CompletableFuture
    • ThreadPoolTaskExecutor
    • JDK8并行流处理

最佳异步处理方式探索

JDK提供了多种异步处理方式,其中归结出来分为两大类

  • java.lang.Runnable 通过 run()方法新建一个线程处理任务,无返回值
  • java.util.concurrent.Callable 通过call()方法新建线程处理任务,可以获取返回值

适用两种场景:

  1. 不需要获取子线程返回值
  2. 需要获取子线程返回值

以下是公共依赖

package priv.utirx.explore8.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.core.date.StopWatch;
import com.google.common.collect.Lists;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import priv.utirx.explore8.feature.api.R;
import priv.utirx.explore8.utils.AsyncUtil;import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.*;

重要提示: 在获取子线程的执行结果时,务必不要马上获取子线程执行结果。详情请看下面处理方式

CompletableFuture

   @Resourceprivate ThreadPoolTaskExecutor taskExecutor;@SneakyThrows@GetMapping("/completableFuture")public R<String> completableFuture() {log.info("主线程id: {}, 主线程名称: {}", Thread.currentThread().getId(), Thread.currentThread().getName());StopWatch stopWatch = DateUtil.createStopWatch();stopWatch.start();List<String> list = Lists.newArrayListWithExpectedSize(10);List<CompletableFuture<String>> futureList = Lists.newArrayListWithExpectedSize(10);for (int i = 0; i < 10; i++) {// 异步开启, 子线程执行任务, 因为get()方法是阻塞的,所以主线程一直在等待子线程的返回, 如果此时获取结果,总耗时在20158 毫秒// String message = CompletableFuture.supplyAsync(() -> testException(false))//         .exceptionally(Throwable::getMessage).get();// list.add(message);CompletableFuture<String> exceptionally = CompletableFuture.supplyAsync(() -> testException(false)).exceptionally(Throwable::getMessage);futureList.add(exceptionally);}for (CompletableFuture<String> future : futureList) {String str = future.get();list.add(str);}list.forEach(System.out::println);stopWatch.stop();log.info("执行完成,总用时: {} 毫秒", stopWatch.getTotalTimeMillis());return R.ok("完成");}@SneakyThrowsprivate String testException(boolean is) {log.info("子线程id: {}, 子线程名称: {}", Thread.currentThread().getId(), Thread.currentThread().getName());TimeUnit.SECONDS.sleep(1);if (is) {throw new RuntimeException("账户金额异常");}TimeUnit.SECONDS.sleep(1);return "处理成功";}

运行结果:

2021-06-01 17:58:08.934  INFO 20912 --- [nio-8989-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-06-01 17:58:08.935  INFO 20912 --- [nio-8989-exec-2] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2021-06-01 17:58:08.935  INFO 20912 --- [nio-8989-exec-2] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
2021-06-01 17:58:08.957  INFO 20912 --- [nio-8989-exec-2] p.u.explore8.controller.AsyncController  : 主线程id: 39, 主线程名称: http-nio-8989-exec-2
2021-06-01 17:58:08.966  INFO 20912 --- [onPool-worker-9] p.u.explore8.controller.AsyncController  : 子线程id: 56, 子线程名称: ForkJoinPool.commonPool-worker-9
2021-06-01 17:58:08.966  INFO 20912 --- [onPool-worker-2] p.u.explore8.controller.AsyncController  : 子线程id: 57, 子线程名称: ForkJoinPool.commonPool-worker-2
2021-06-01 17:58:08.966  INFO 20912 --- [nPool-worker-11] p.u.explore8.controller.AsyncController  : 子线程id: 58, 子线程名称: ForkJoinPool.commonPool-worker-11
2021-06-01 17:58:08.966  INFO 20912 --- [onPool-worker-4] p.u.explore8.controller.AsyncController  : 子线程id: 59, 子线程名称: ForkJoinPool.commonPool-worker-4
2021-06-01 17:58:08.967  INFO 20912 --- [onPool-worker-6] p.u.explore8.controller.AsyncController  : 子线程id: 61, 子线程名称: ForkJoinPool.commonPool-worker-6
2021-06-01 17:58:08.967  INFO 20912 --- [nPool-worker-13] p.u.explore8.controller.AsyncController  : 子线程id: 60, 子线程名称: ForkJoinPool.commonPool-worker-13
2021-06-01 17:58:08.967  INFO 20912 --- [onPool-worker-8] p.u.explore8.controller.AsyncController  : 子线程id: 63, 子线程名称: ForkJoinPool.commonPool-worker-8
2021-06-01 17:58:08.967  INFO 20912 --- [nPool-worker-15] p.u.explore8.controller.AsyncController  : 子线程id: 62, 子线程名称: ForkJoinPool.commonPool-worker-15
2021-06-01 17:58:08.967  INFO 20912 --- [onPool-worker-1] p.u.explore8.controller.AsyncController  : 子线程id: 64, 子线程名称: ForkJoinPool.commonPool-worker-1
2021-06-01 17:58:08.967  INFO 20912 --- [nPool-worker-10] p.u.explore8.controller.AsyncController  : 子线程id: 65, 子线程名称: ForkJoinPool.commonPool-worker-10
处理成功
处理成功
处理成功
处理成功
处理成功
处理成功
处理成功
处理成功
处理成功
处理成功
2021-06-01 17:58:10.993  INFO 20912 --- [nio-8989-exec-2] p.u.explore8.controller.AsyncController  : 执行完成,总用时: 2032 毫秒

ThreadPoolTaskExecutor

线程池配置请查看另一篇文章: 线程池配置

  	@Resourceprivate ThreadPoolTaskExecutor taskExecutor;@GetMapping("/getResult")public R<String> getAsyncResult() {StopWatch stopWatch = DateUtil.createStopWatch();stopWatch.start();List<String> list = Lists.newArrayListWithExpectedSize(10);List<Future<String>> submitList = Lists.newArrayListWithExpectedSize(10);for (int i = 0; i < 10; i++) {log.info("循环遍历, 线程ID: [{}], 线程名称: [{}], 执行批次: ", Thread.currentThread().getId(), Thread.currentThread().getName());// 关键点,开启一个子线程执行任务,而不是同步获取结果,等待执行完成之后再for循环获取Future<String> submit = taskExecutor.submit(() -> asyncUtil.pay());submitList.add(submit);}for (Future<String> future : submitList) {try {list.add(future.get());} catch (InterruptedException e) {e.printStackTrace();} catch (ExecutionException e) {e.printStackTrace();}}list.forEach(System.out::println);stopWatch.stop();log.info("执行完成,总用时: {} 毫秒", stopWatch.getTotalTimeMillis());return R.ok();}

执行结果:

2021-06-01 17:58:39.814  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [  self-worker-0] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [67], 子线程名称: [self-worker-0] 进入异步执行方法 pay
2021-06-01 17:58:39.815  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [  self-worker-1] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [68], 子线程名称: [self-worker-1] 进入异步执行方法 pay
2021-06-01 17:58:39.815  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [  self-worker-3] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [70], 子线程名称: [self-worker-3] 进入异步执行方法 pay
2021-06-01 17:58:39.815  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.815  INFO 20912 --- [  self-worker-2] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [69], 子线程名称: [self-worker-2] 进入异步执行方法 pay
2021-06-01 17:58:39.816  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.816  INFO 20912 --- [  self-worker-4] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [71], 子线程名称: [self-worker-4] 进入异步执行方法 pay
2021-06-01 17:58:39.816  INFO 20912 --- [  self-worker-5] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [72], 子线程名称: [self-worker-5] 进入异步执行方法 pay
2021-06-01 17:58:39.816  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.816  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.816  INFO 20912 --- [  self-worker-6] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [73], 子线程名称: [self-worker-6] 进入异步执行方法 pay
2021-06-01 17:58:39.816  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 循环遍历, 线程ID: [38], 线程名称: [http-nio-8989-exec-1], 执行批次: 
2021-06-01 17:58:39.816  INFO 20912 --- [  self-worker-7] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [74], 子线程名称: [self-worker-7] 进入异步执行方法 pay
2021-06-01 17:58:39.817  INFO 20912 --- [  self-worker-9] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [76], 子线程名称: [self-worker-9] 进入异步执行方法 pay
2021-06-01 17:58:39.817  INFO 20912 --- [  self-worker-8] priv.utirx.explore8.utils.AsyncUtil      : 子线程ID: [75], 子线程名称: [self-worker-8] 进入异步执行方法 pay
成功
成功
成功
成功
成功
成功
成功
成功
成功
成功
2021-06-01 17:58:40.828  INFO 20912 --- [nio-8989-exec-1] p.u.explore8.controller.AsyncController  : 执行完成,总用时: 1013 毫秒

JDK8并行流处理

请查看我的另一篇文章: 并发编程

(本文完!引用内容务必附原文连接!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-2789.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

三种方法安装CUDA--看出你是【入门】算法工程师还是【高级】算法工程师

三种方法安装CUDA–看出你是【入门】算法工程师还是【高级】算法工程师 文章目录 三种方法安装CUDA--看出你是【入门】算法工程师还是【高级】算法工程师0 微信交流群:1 前言:2 显卡驱动安装3 CUDA9.2卸载2.1 10.0及之前2.2 cuda10.1及之后2.3 pwd2.4 卸载2.5 清除残留2.6 验…...

[HDU2520]我是菜鸟,我怕谁(每日一题5.30)

题目链接&#xff1a;Problem - 2520 (hdu.edu.cn) 乍一看这个题&#xff0c;发现不就是匀加速直线运动么&#xff0c;于是写出了如下的代码&#xff1a; #include <iostream>using namespace std;int d(int t);int main() {int T;cin >> T;while(T--){int t;cin …...

第二讲:基本飞行姿态

四旋翼在其四个轴臂上四个桨的高速转动作用下&#xff0c;会受到四个桨的拉力&#xff0c;拉力方向与机身垂直&#xff0c;当四个桨产生的拉力总和大于机身重力时&#xff0c;飞机处于上升状态&#xff1b;当总拉力小于机身重力时&#xff0c;飞机处于下降状态&#xff1b;当总…...

MySQL索引用法实例分析

建议看原文&#xff1a;https://www.jb51.net/article/88846.htm 这篇文章主要介绍了MySQL索引用法,结合实例形式较为详细的分析了mysql索引的功能、定义、使用方法与相关注意事项,需要的朋友可以参考下 本文实例分析了MySQL索引用法。分享给大家供大家参考&#xff0c;具体如下…...

必看!LuatOS自定义C库全新教程,一文极速上手

今天继续讲LuatOS的开发&#xff0c;上一期简单说了一下如何移植LuatOS&#xff0c;相信很多朋友已经看过了。那么今天&#xff0c;我就开始讲C和Lua调用的部分教程。 LuatOS相关资料及Lua语言的官方定义&#xff0c;详见以下链接&#xff1a; LuatOS仓库&#xff1a; https:/…...

Xshell 连接不上Linux Centos 7的解决方法之设置静态IP

前序 最近在开发项目&#xff0c;需要在服务器部署数据库、ftp文件管理等相关内容时&#xff0c;为了方便操作&#xff0c;使用Xshell会话管理工具进行服务器操作。出现连不上服务器网络的问题&#xff0c;就所遇问题进行学习解决方案及总结记录。 配置虚拟机网络 1.在虚拟机…...

ann2snn的代码分析

首先&#xff0c;主函数是if_cnn_mnist_work.py 1.输出snn测试结果的就是这么一些代码&#xff1a; utils.pytorch_ann2snn(model_namemodel_name,norm_tensornorm_tensor,test_data_loadertest_data_loader,devicedevice,TT,log_dirlog_dir,configconfig)2.ctrl鼠标左键点击py…...

基于域名访问网站1(作业)

搭建一个基于http://www.zuoye.com:22222访问的web网站&#xff0c;网站首页在/www/http/&#xff0c;内容为zuoye 结果 过程&#xff1a; 创建网页的根目录&#xff0c;并编辑网页内容为zuoye 编辑/etc/httpd/conf.d/zuoye.conf 关闭防火墙 关闭selinux 重启httpd 编辑/…...

虚拟内存和地址空间

目录 一、物理内存vs虚拟内存 二、物理内存空间和虚拟内存空间 三、32bit的地址空间 四、cpu位宽和cpu地址总线宽 五、虚拟内存地址空间划分 六、虚拟地址和物理地址的映射 早期的计算机程序都是直接跑在物理内存上的&#xff0c;这就要求程序大小不能超过物理内存的上限…...

STM32CubMx自学笔记(一)-LED灯翻转

STM32CubMX自学笔记&#xff08;一&#xff09;---LED灯翻转工程创建系统具体配置工程代码编写下载验证结语工程创建 首先得安装STM32CubMx软件。具体安装步骤参照 保姆级安装步骤&#xff0c;这里将不再赘述&#xff0c;第一节主要是介绍新工程的创建&#xff0c;首先在桌面打…...

十四、Python第十四课——文件和异常

&#xff08;请先看这篇文章&#xff1a;https://blog.csdn.net/GenuineMonster/article/details/104495419&#xff09; 如果看完这篇博文&#xff0c;你的问题还是没有解决&#xff0c;那么请关注我的公众号&#xff0c;后台发消息给我吧&#xff0c;当天回复&#x…...

Linux下安装sqlite3

文章目录前言安装步骤测试安装成功前言 sqlite3的安装 安装步骤 依次执行以下命令&#xff1a; 1)wget http://www.sqlite.org/sqlite-3.5.6.tar.gz 2)tar -xzvf sqlite-3.5.6.tar.gz 3)cd sqlite-3.5.6 4)./configure 5)make 6)make install测试安装成功 出现红色方框信息…...

拉伯配资6月1日策略

5月回想&#xff1a;在5月份的战略中&#xff0c;我们认为其时胶着的商场可能在5月会有所改动。从实践表现来看&#xff0c;5月下旬商场明显出现了一些活泼做多的信号&#xff0c;商场也选择了向上打破。上证指数上涨超4%&#xff0c;深圳成指上涨近3%。 行情判别&#xff1a;从…...

微信小程序趋势及前景,大厂直通车!

最近看到群里看到一个女生&#xff0c;讲述了她从开始选择Android&#xff0c;经过非常努力的学习和挣扎&#xff0c;然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜&#xff0c;如果早几年入行可能结果会比现在好很多&#xff0c;但可惜&#xff0c;这就是…...

设计模式导读助记

各个设计模式的详细介绍都已经完成&#xff0c;但是不经常用总会忘&#xff0c;所以我想用 一句话 总结设计模式&#xff0c;思考模式的真正意图&#xff0c;再用 一点提示 来思考代码如何实现 写在前面 我整理的设计模式这一个系列&#xff0c;主要是结合了以下几本书 : 《设…...

RT-Thrad|STM32F103+ESP8266 S01+RT-Thread联网之环境搭建(1/3)

文章目录前言硬件准备百问网STM32F103ESP8266 01SESP8266 介绍ESP8266 01S技术规格参数软件准备下载安装 Keil μVision5Pack Installer安装 ST-Link 驱动获取RT-Thread源码下载安装 RT-Thread env 工具文章列表 RT-Thrad|STM32F103ESP8266 S01RT-Thread联网之环境搭建(1/3)RT…...

webrtc之SVC实现(十)

一、概念 SVC&#xff08;可适性视频编码或可分级视频编码&#xff09;是传统H.264/MPEG-4 AVC编码的延伸&#xff0c;可提升更大的编码弹性&#xff0c;并具有时间可适性&#xff08;Temporal Scalability&#xff09;、空间可适性&#xff08;Spatial Scalability&#xff09…...

LeetCode 数值的整数次方

实现 pow(x, n) &#xff0c;即计算 x 的 n 次幂函数&#xff08;即&#xff0c;xn&#xff09;。不得使用库函数&#xff0c;同时不需要考虑大数问题。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xf…...

python 继承和多态

在已有类的基础上创建新类&#xff0c;这其中的一种做法就是让一个类从另一个类那里将属性和方法直接继承下来&#xff0c;从而减少重复代码的编写。提供继承信息的我们称之为父类&#xff0c;也叫超类或基类&#xff1b;得到继承信息的我们称之为子类&#xff0c;也叫派生类或…...

个性化个人主页html5模板

介绍&#xff1a; 个性化个人主页html5模板 网盘下载地址&#xff1a; http://kekewl.net/tARDuX5n02U0 图片&#xff1a;...

为啥集群小文件治理那么重要,你真的懂吗?

小文件是 Hadoop 集群运维中的常见挑战&#xff0c;尤其对于大规模运行的集群来说可谓至关重要。如果处理不好&#xff0c;可能会导致许多并发症。Hadoop集群本质是为了TB,PB规模的数据存储和计算因运而生的。为啥大数据开发都说小文件的治理重要&#xff0c;说HDFS 存储小文件…...

09.流程控制

09.流程控制 1.引子 流程控制即控制流程&#xff0c;具体指控制程序的执行流程&#xff0c;而程序的执行流程分为三种结构&#xff1a;顺序结构&#xff08;之前我们写的代码都是顺序结构&#xff09;、分支结构&#xff08;用到if判断&#xff09;、循环结构&#xff08;用到…...

Trace

TRACE:在命令行上捕获系统跟踪记录https://developer.android.google.cn/topic/performance/tracing/command-line?hlzh-cn perfetto https://developer.android.google.cn/studio/command-line/perfetto?hlzh-cn 开发这模式的系统trace使用PerfettoUI打开https://develope…...

HTML列表标签和表格标签

目录 一、列表标签与表格标签要点 二、列表 LIST &#xff08;一&#xff09;有序列表: &#xff08;二&#xff09;无序列表: &#xff08;三&#xff09;自定义&#xff08;相互嵌套使用&#xff09; 三、表格标签 TABLE &#xff08;一&#xff09;表格标签 (二&…...

webrtc之SVC实现(十)

一、概念 SVC&#xff08;可适性视频编码或可分级视频编码&#xff09;是传统H.264/MPEG-4 AVC编码的延伸&#xff0c;可提升更大的编码弹性&#xff0c;并具有时间可适性&#xff08;Temporal Scalability&#xff09;、空间可适性&#xff08;Spatial Scalability&#xff09…...

delphi JSON 数字0.00没有引号解析问题

Delphi中利用SuperObject解析JSON 0.00数字有问题 原因是superObject 的版本问题&#xff1a; 网址&#xff1a;https://www.haolizi.net/example/key_superobject_1.html 下载版本...

oracle数据库:select基本语法【条件查询】

当我们进行数据查询的时候&#xff0c;往往需要根据一些条件来筛选出我们需要的数据&#xff0c;这时候可以用到条件查询 1&#xff0c;条件查询 语法&#xff1a; select 字段1&#xff0c;字段2... from 表名 where 条件1&#xff0c;条件2...其中关键字where后面接我们查…...

CSS内联样式的使用,赶紧收藏备战金三银四!

近几年&#xff0c;随着技术和政策的变化&#xff0c;国内对技术人才的需求也是翻天覆地的变化。 为什么转行前端呢&#xff1f; 对于很多毕业学生来说&#xff0c;前端开发工程师行业需求大、待遇好、不限门槛、政策优,成为了很多大学生的就业发展选择。 学习路线 HTML基础…...

终于有人把华为认证讲明白了!

响应大家的需求&#xff0c;你要的华为认证科普来啦~ 华为认证 华为认证是华为技术有限公司&#xff08;简称“华为”&#xff09;基于“ 平台生态 ”战略&#xff0c;围绕 “云-管-端 ” 协同的新ICT技术架构&#xff0c;打造的业界覆盖ICT领域最广的认证体系&#xff0c;根据…...

一些小知识及git 使用方法

取消全局的log打印 在开发的时候&#xff0c;我们经常会log输出调试程序&#xff0c;在将程序打包的时候可能会忘记删除&#xff0c;导致在正式上线的时候&#xff0c;控制台会输出一些东西 // 设置 开发/生产 环境变量 。在入口程序中对其判断&#xff0c;并重写 console.log…...

通俗理解 什么是量纲

首先先介绍一下量纲和单位的区别&#xff0c;长度&#xff0c;时间&#xff0c;质量等都叫做量纲&#xff0c;而米&#xff0c;千米&#xff0c;秒&#xff0c;分钟&#xff0c;等都是单位&#xff0c; 国际单位制规定了七个基本量纲单位&#xff0c;这七个量纲彼此之间不能通过…...

[附源码]计算机毕业设计springboot快转二手品牌包在线交易系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

通俗理解曲率

https://blog.csdn.net/ccnt_2012/article/details/91530608 如何通俗理解曲率&#xff1a; 百度曲率计算&#xff1a; https://jingyan.baidu.com/article/7f41ecec213a10593d095c26.html 补充说明&#xff0c;如下&#xff1a;...

卡尔曼滤波通俗易懂的解释

关于卡尔曼滤波&#xff0c;网上的资料很多&#xff0c;但是有很大一部分都是不断堆叠公式&#xff0c;然后用各种晦涩难懂的专业术语进行解释&#xff0c;说实话我刚开始看的时候也是云里雾里&#xff0c;因此写下这篇博客是为了照顾和我一样的萌新&#xff0c;通篇文章我会力…...

通俗易懂的讲解关系模型

概述 说到模型&#xff0c;大家都很熟悉了&#xff0c;地图、沙盘、汽车火箭飞机模型&#xff0c;这些都可以让人联想到真实的事物&#xff0c;模型是现实世界对某个对象特征的模拟和抽象。 数据模型也是一种模型&#xff0c;是对现实世界数据特征的抽象。数据模型通常包含&a…...

redis通俗理解

一&#xff0c;redis是什么 redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存&#xff0c;事件发布或订阅&#xff0c;高速队列等场景。该数据库使用ANSI C语言编写&#xff0c;支持网络&#xff0c;提供字符串&#xff0c;哈希&#xff0c;列表&#xff0c;队列…...

计算机基本组成通俗讲解

在我看来&#xff0c;学习java最重要是要理解what(这东西是什么)&#xff0c;why(为什么要用它)&#xff0c;where(在哪用它)&#xff0c;how(怎么用)。 一、什么是计算机 计算机对于大部分人来说&#xff0c;最直观的认识无非就是一台电脑。那么一台计算机是由什么组成的&…...

如何通俗地解释梯度下降法

如何通俗地解释梯度下降法同学们大家好&#xff0c;今天我们来学习梯度下降法 1 简单印象 用一句话解释&#xff0c;梯度下降法就是快速找到最低点的一个方法。比如在山上有一个球&#xff0c;经过几次运动后&#xff0c;就会来到谷底附近。 要完成这个过程&#xff0c;我们需…...

通俗讲解强化学习!

Datawhale干货 作者&#xff1a;知乎King James&#xff0c;伦敦国王大学知乎 &#xff5c; https://www.zhihu.com/people/xu-xiu-jian-33前言&#xff1a;强化学习这个概念是2017年Alpha Go战胜了当时世界排名第一的柯洁而被大众知道&#xff0c;后面随着强化学习在各大游戏比…...

focal loss 通俗理解

文章目录什么是focal loss&#xff1f;控制正负样本的权重控制容易分类和难分类样本的权重两种权重控制方法合并关于focal loss如果看过此文还不理解&#xff0c;可以看这篇文章&#xff1a;focal loss 详解&#xff0c;及代码实现 https://blog.csdn.net/qq_42363032/article/…...

如何通俗理解协方差

如何通俗地解释协方差简单的说&#xff0c;协方差 就是用来描述随机变量 的相关性 1 相关性 随机变量的相关性分为三种 当 增大时&#xff0c; 也增大&#xff1b;或者 减小时&#xff0c; 也减小, 同向变化&#xff0c;此时称 正相关,协方差大于零。当 增大时&#xff0c; …...

范数通俗理解

作者&#xff1a;自由之畔 链接&#xff1a;https://www.zhihu.com/question/21868680/answer/389440726 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 我也在找答案&#xff0c;目前我学到的是&#xff08;这里先…...

通俗,通俗(白话)理解TCP和UDP的区别

TCP和UDP这两个所谓的协议常常出现在面试过程中&#xff0c;今天就此做一个自己的理解 一.TCP百度百科给出的解释是这样的&#xff1a; TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff…...

通俗唱法

通俗唱法(又名流行唱法)始于中国二十世纪30年代得到广泛的流传。开始叫流行歌曲唱法&#xff0c;后来称通俗唱法。   其特点是声音自然&#xff0c;近似说话&#xff0c;中声区使用真声&#xff0c;高声区一般使用假声。很少使用共鸣&#xff0c;故音量较小。演唱时必须借助电…...

计算机毕业设计Javavue学习视频课程网站(源码+系统+mysql数据库+lw文档)

计算机毕业设计Javavue学习视频课程网站(源码系统mysql数据库lw文档&#xff09; 计算机毕业设计Javavue学习视频课程网站(源码系统mysql数据库lw文档&#xff09;本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;…...

别再说你不会ElasticSearch,都给你整理好了

点击上方“朱小厮的博客”&#xff0c;选择“设为星标”后台回复"书"&#xff0c;获取后台回复“k8s”&#xff0c;可领取k8s资料本文不会关注 ES 里面的分布式技术、相关 API 的使用&#xff0c;而是专注分享下“ES 如何快速检索”这个主题上面。这个也是我在学习之…...

诗歌的分类

分类的目的是为了了解事物的特性和共性。 按照朝代 先秦汉代魏晋南北朝隋唐宋元明清按照形式 古体诗&#xff1a;四言、五言、七言近体诗&#xff1a;&#xff08;五言七言&#xff09;&#xff08;绝句律诗&#xff09;词按照内容 边塞诗爱情诗怀古诗&#xff0c;咏史诗山水诗…...

用了Elasticsearch后,查询起飞了!

点击上方“朱小厮的博客”&#xff0c;选择“设为星标”后台回复"书"&#xff0c;获取后台回复“k8s”&#xff0c;可领取k8s资料“ 最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析&#xff0c;就对 ES 进行了一些学习。…...

Elasticsearch 如何做到快速检索 - 倒排索引的秘密

点击关注公众号&#xff0c;实用技术文章及时了解一、前言最近接触的几个项目都使用到了 Elasticsearch (以下简称 ES ) 来存储数据和对数据进行搜索分析&#xff0c;就对 ES 进行了一些学习。本文整理自我自己的一次技术分享。本文不会关注 ES 里面的分布式技术、相关 API 的使…...

Elasticsearch 为什么能做到快速检索?— 倒排索引的秘密

来源&#xff1a;https://ricstudio.top/archives/es-lucene-reverted-index"All problems in computer science can be solved by another level of indirection.”– David J. Wheeler“计算机世界就是 trade-off 的艺术”| 前言最近接触的几个项目都使用到了 Elasticse…...