学成在线:第五天(p82-p93)

1、面试:在分片广播中,如何保证多个执行器不会重复执行任务?
(虽然有分片序号,但是加入只有两个执行器,有很多任务,这两个执行器得到的分片序号也就只是两个数字,后面的分片是如何能够通过这两个数字分发给不同的任务执行器的?)

每个执行从数据表取任务时可以让任务 id 模上 分片总数,如果等于分片序号则执行此任务。
上边两个执行器实例那么分片总数为 2,序号为 0、1,从任务 1 开始,如下:
1 % 2 = 1 执行器 2 执行
2 % 2 = 0 执行器 1 执行
3 % 2 = 1 执行器 2 执行
以此类推

2、面试:如果同一个执行器在处理一个视频还没有完成,此时调度中心又一次请求调度,为了不重复处理同一个视频该怎么办?

首先配置【调度过期策略】:
①忽略:调度过期后,忽略过期的任务,从当前时间开始重新计算下次触发时间;
②立即执行一次:调度过期后,立即执行一次,并从当前时间开始重新计算下次触发时间;
再看【阻塞处理策略】:
阻塞处理策略就是当前执行器正在执行任务还没有结束时调度时间到达到,此时该如何处理。
①单机串行(默认):调度请求进入单机执行器后,调度请求进入 FIFO 队列并以串行方式运行;
②丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
③覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
这里说的方法在网络环境下不能绝对地保证任务不重复执行,所以需要后面介绍的锁来控制

3、面试:什么是任务的幂等性?

任务的幂等性是指:对于数据的操作不论多少次,操作的结果始终是一致的。
它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果。
幂等性是为了解决重复提交问题,比如:恶意刷单,重复支付等。
【项目中的应用】这里我们在数据库视频处理表中添加处理状态字段,视频处理完成更新状态为完成,执行视频处理前判断状态是否完成,如果完成则不再处理。

4、乐观锁?悲观锁

乐观锁和悲观锁的最终目的都是为了保证线程安全,避免在并发场景下的资源竞争问题
项目中的应用:就是当前的表中添加了一个字段version(版本号机制)
悲观锁:
悲观锁总是假设最坏的情况,认为共享资源每次被访问的时候就会出现问题(比如共享数据被修改),所以每次在获取资源操作的时候都会上锁,这样其他线程想拿到这个资源就会阻塞直到锁被上一个持有者释放。比如Java中的synchronized
即,共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程
悲观锁通常多用于写多比较多的情况下(多写场景),避免频繁失败和重试影响性能。
乐观锁:
乐观锁总是假设最好的情况,认为共享资源每次被访问的时候不会出现问题,线程可以不停地执行,无需加锁也无需等待,只是在提交修改的时候去验证对应的资源(也就是数据)是否被其它线程修改了(具体方法可以使用版本号机制或 CAS 算法)
乐观锁通常多于写比较少的情况下(多读场景),避免频繁加锁影响性能,大大提升了系统的吞吐量。
版本号机制:
一般是在数据表中加上一个数据版本号 version 字段,表示数据被修改的次数。当数据被修改时,version 值会加一。当线程 A 要更新数据值时,在读取数据的同时也会读取 version 值,在提交更新时,若刚才读取到的 version 值为当前数据库中的 version 值相等时才更新,否则重试更新操作,直到更新成功。(提交版本必须等于当前版本才能执行更新)
CAS算法:
CAS 的全称是 Compare And Swap(比较与交换) ,就是用一个预期值和要更新的变量值进行比较,两值相等才会进行更新。
CAS 是一个原子操作,底层依赖于一条 CPU 的原子指令。——原子操作:最小不可拆分的操作,也就是说操作一旦开始,就不能被打断,直到操作完成。
CAS 涉及到三个操作数:
V :要更新的变量值(Var)
E :预期值(Expected)
N :拟写入的新值(New)
当且仅当 V 的值等于 E 时,CAS 通过原子方式用新值 N 来更新 V 的值。如果不等,说明已经有其它线程更新了V,则当前线程放弃更新
比如说:线程 A 要修改变量 i 的值为 6,i 原值为 1(V = 1,E=1,N=6)
乐观锁存在的ABA问题:
如果一个变量 V 初次读取的时候是 A 值,并且在准备赋值的时候检查到它仍然是 A 值,那我们就能说明它的值没有被其他线程修改过了吗?很明显是不能的,因为在这段时间它的值可能被改为其他值,然后又改回 A,那 CAS 操作就会误认为它从来没有被修改过。这个问题被称为 CAS 操作的 "ABA"问题。
ABA 问题的解决思路是在变量前面追加上版本号或者时间戳。

5、139页mediaProcessMapper.update方法的参数是啥,和updateById区别

update包含两个参数:第一个是包含了更新数据的实体对象entity,第二个是包含了查询条件的实体对象封装操作类UpdateWrapper
在这里插入图片描述
update更新传回数据的所有字段,没有传回的字段保持原样。
updateByPrimaryKey对实体类的字段全部更新(不判断是否为Null),即如果字段为空就更新为空
【补充】updateByPrimaryKeySelective会对实体类字段进行判断再更新(如果为Null就忽略更新),如果字段为空,忽略不更新;

6、面试:xxl-job 的工作原理是什么?xxl-job 是什么怎么工作?

XXL-JOB :分布式任务调度服务,由调用中心和执行器组成,调用中心负责按任务调度策略向执行器下发任务,执行器负责接收任务执行任务。
1)首先部署并启动 xxl-job 调度中心。(一个 java 工程)
2)首先在微服务添加 xxl-job 依赖,在微服务中配置执行器
3)启动微服务,执行器向调度中心上报自己。
4)在微服务中写一个任务方法并用 xxl-job 的注解去标记执行任务的方法名称。
5) 在调度中心配置任务调度策略,调度策略就是每隔多长时间执行还是在每天或每月的固定时间去执行,比如每天 0 点执行,或每隔 1 小时执行一次等。
6)在调度中心启动任务。
7)调度中心根据任务调度策略,到达时间就开始下发任务给执行器。
8)执行器收到任务就开始执行任务。

7、面试:如何保证任务不重复执行?

1)调度中心按分片广播的方式去下发任务
2)执行器收到作业分片广播的参数:分片总数和分片序号,计算 “任务 id 除以 分片总数”得到一个余数,如果余数等于分片序号这时就去执行这个任务,这里保证了不同的执行器执行不同的任务。
3)配置调度过期策略为“忽略”,避免同一个执行器多次重复执行同一个任务
4)配置任务阻塞处理策略为“丢弃后续调度”,注意:丢弃也没事,下一次调度就又可以执行了
5)另外还要保证任务处理的幂等性,执行过的任务可以打一个状态标记已完成,下次再调度执行该任务判断该任务已完成就不再执行

8、面试:任务幂等性如何保证?

它描述了一次和多次请求某一个资源对于资源本身应该具有同样的结果。
幂等性是为了解决重复提交问题,比如:恶意刷单,重复支付等。
解决幂等性常用的方案:
1)数据库约束,比如:唯一索引,主键。同一个主键不可能两次都插入成功。
2)乐观锁,常用于数据库,更新数据时根据乐观锁状态去更新。
3)唯一序列号,请求前生成唯一的序列号,携带序列号去请求,执行时在 redis 记录该序列号表示以该序列号的请求执行过了,如果相同的序列号再次来执行说明是重复执行。

9、面试:模板引擎

模板引擎其实就是服务器渲染页面的技术,渲染的过程就是向 jsp 页面(模板)内填充数据(模型)。服务器将渲染生成的页面返回给浏览器。
模板引擎就是:模板+数据=输出,jsp 页面就是模板,页面中嵌入的 jsp 标签就是数据,两者相结合输出 html 网页。
常用的 java 模板引擎还有哪些?
Jsp、Freemarker、Thymeleaf 、Velocity 等。
本项目用的是Freemarker
Freemarker: 一种基于模板和要改变的数据, 用来生成输出文本(HTML 网页等)的通用工具。 它不是面向最终用户的,而是一个 Java 类库。

10、ssi on

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思,是一种基于服务端的网页制作技术
SSI具有 强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新
网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题。
原理是:将 一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。
需要的选项主要是以下三个:
ssi: 默认值off,启用ssi时将其设为on
ssi_silent_errors: 默认值off,开启后在处理SSI文件出错时不输出错误提示"[an error occurred while processing the directive]"。
ssi_types: 默认是text/html,所以如果需支持html,则不需要设置这句(因为是默认的),如果需要支持其他类型,则需要设置
三个参数可以放在http, server或location作用域下。

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

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

相关文章

蓝桥杯刷题冲刺 | 倒计时11天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.质因子2.蓝桥王国1.质因子 题目 链接: 1545. 质因子 - AcWing题库 给定一个整数 N…

NexNoSQL Client:Elasticsearch、Redis、MongoDB三合一的可视化客户端管理工具

背景: 工作中我们使用了Elasticsearch作为存储,来支持内容的搜索,Elasticsearch这个软件大家都耳熟能详,它是一个分布式、高扩展、高实时的搜索与数据分析引擎,不仅仅支持文本索引,还支持聚合操作&#xf…

Java面向对象部分 个人学习记录

注:此博客是个人学习记录,会有错的地方,面向对象部分我可能会画很多图来加深我的理解 不引出了,直接开始 class Dog{String name;int age;String type;public Dog(String name,int age,String type){this.namename;this.ageage;this.typetyp…

全志V3S嵌入式驱动开发(准备)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 要学好嵌入式,其实最好自己可以画板子、调试板子、写软件、调试软件这样来学习。简单的51单片机、stm32这样的mcu或许画起来不是很复杂…

Python 自动化指南(繁琐工作自动化)第二版:零、前言

关于作者 Al Sweigart 是一名软件开发人员和技术书籍作者。Python 是他最喜欢的编程语言,他是该语言的几个开源模块的开发者。他的其他书籍可以在他的网站上根据知识共享许可免费获得。他的猫现在重 11 磅。 关于技术评审 Philip James 从事 Python 工作已经超过…

MobTech 秒验|本机号码一键登录会泄露隐私吗

本机号码一键登录是一种新型的应用登录方式,它可以利用运营商的数据网关认证能力,实现手机号免密登录,提高用户体验和转化率,降低验证成本和流失率。本机号码一键登录支持三大运营商号码认证,3秒内完成手机号验证&…

Java小课堂:自定义注解(案例:自定义DecimalFormat注解)

文章目录 引言I 预备知识1.1 元注解1.2 Target注解的ElementType枚举1.3 Retention注解的RetentionPolicy枚举II 自定义注解2.1 基本条件2.2 注解自定义属性的格式III 案例3.1 自定义DecimalFormat注解3.2 自定义json序列化解析引言 需求: 编辑费率限制的值时填写几位就保存几…

如何在前端中实现精美的图片和文字的垂直对齐

🌟所属专栏:前端只因变凤凰之路 🐔作者简介:rchjr——五带信管菜只因一枚 😮前言:该系列将持续更新前端的相关学习笔记,欢迎和我一样的小白订阅,一起学习共同进步~👉文章…

关于线性与条带化下LVM增加磁盘数据分布的讨论

关于线性与条带化下LVM增加磁盘数据分布的讨论一、环境介绍二、线性模式逻辑卷创建逻辑卷删除三、条带化逻辑卷创建逻辑卷删除LVM有两种模式:线性模式:先写满组成线性逻辑卷的第一个物理卷,再向第2个物理卷中写入数据,以此类推&am…

必看>>>>Linux数据库被其他服务器远程访问(修改权限、开设端口)

目录 一:修改权限 1.1 进入Linux数据库 1.2 修改数据库的远程连接权限 1.2.1 数据库远程权限修改命令 1.2.2 数据库远程权限查看命名 1.3 给Linux机添加端口 1.4 远程数据库连接 注意mysql中的中英文输入 一:修改权限 1.1 进入Linux数据库 文章…

【职场热点】软件测试岗位,真正达到月收入1万以上的有多少

在某一线城市相亲角,有位阿姨自称孩子是程序员、36岁、月入3万8,并直言“月入1万如讨饭”,引来大量互联网人自嘲式认领“乞丐”身份。今年2月,“月收入一万”的鄙视链压力给到了二线城市,有位入行2年的软件测试员发帖称…

1-python基础

1.字面量 被写在代码中固定的值 2.注释 # 单行注释""" 多行注释1:三对双引号 """ 多行注释2:三对单引号 3.变量与输出 age10 # 变量赋值 print("我今年",age,"岁") (1)pri…

Java数据类型与变量

1.字面常量 public class Demo{ public static void main(String[] args){ System.Out.println("hello world!"); System.Out.println(300); System.Out.println(3.1415926); System.Out.println(T); System.Out.println(true); System.Out.println(false); } 其中…

【CocosCreator入门】CocosCreator组件 | ParticleSystem (粒子)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中ParticleSystem组件是一个用于创建粒子效果的工具,可用于实现火花、爆炸、雪花等效果。 目录 一、组件属性 二、组件使用 三、效果演示 四、性能优化 一、组件属性 属性…

迅为3A5000_7A2000工控主板,龙芯自主指令集架构全国产工业级板卡性能

迅为iTOP-3A5000开发板核心板底板方式,底板资料开源,提供底板的原理图和PCB工程文件,可以根据需求定制属于自己的开发板。 核心板也支持工业级核心板定制开发。 根据二进制翻译功能使用,可流畅运行WIN和Android系统APP。 支持Loo…

renderdoc resource manager说明

*写在前面 只针对renderdoc opengl es 场景进行说明, vukan的没有,不过其实应该也差不多啦,若有必要后面再考虑补上。本文使用 文字图代码 的方式叙述,若只想了解原理过程,可忽略代码部分, 由于renderdoc代…

文章生成器-免费的文章生成器

随着信息爆炸的时代,自媒体人员不仅需要创造性的策略,还需要快速产生具有高质量文章的能力,这样才能快速响应趋势并保持优势。文章生成器,一款基于人工智能和自然语言处理技术的文本生成软件,可在没有任何人工干预的情…

企业搭建帮助中心的额方式有哪些?

帮助中心对于企业价值的重要性在于提高客户满意度和忠诚度,增强企业品牌形象,促进业务增长和提高利润率。通过提供详细的帮助文档和客户支持,企业可以向客户传达其专业知识和技能,并帮助客户更好地使用其产品或服务。这将提高客户…

C++(Qt)软件调试---使用任务管理器导出Dump(6)

C(Qt)软件调试—使用任务管理器导出Dump(6) 文章目录C(Qt)软件调试---使用任务管理器导出Dump(6)1、前言2、软件下载3、使用三款软件导出Dump4、软件下载地址更多精彩内容👉个人内容分类汇总 👈&#x1f44…

『.NET Tools』在.NET中实现汉字转拼音,只要一个方法就够了!

📣读完这篇文章里你能收获到 傻瓜式扩展方法直接使用可实现汉字转拼音及汉字转拼音首字母功能感谢点赞收藏,避免下次找不到~ 文章目录一、代码引用Step 1 : 安装包,通过Nuget安装包Step 2 : 代码通过扩展方法/帮助类实现实现汉字转拼音实现汉…