Cron 选择器

在这里插入图片描述

// 定义一个名为 cron 的新组件
Vue.component('cron', {name: 'cron',props: ['data'],data() {return {second: {cronEvery: '',incrementStart: '3',incrementIncrement: '5',rangeStart: '',rangeEnd: '',specificSpecific: [],},minute: {cronEvery: '',incrementStart: '3',incrementIncrement: '5',rangeStart: '',rangeEnd: '',specificSpecific: [],},hour: {cronEvery: '',incrementStart: '3',incrementIncrement: '5',rangeStart: '',rangeEnd: '',specificSpecific: [],},day: {cronEvery: '',incrementStart: '1',incrementIncrement: '1',rangeStart: '',rangeEnd: '',specificSpecific: [],cronLastSpecificDomDay: 1,cronDaysBeforeEomMinus: '',cronDaysNearestWeekday: '',},week: {cronEvery: '',incrementStart: '1',incrementIncrement: '1',specificSpecific: [],cronNthDayDay: 1,cronNthDayNth: '1',},month: {cronEvery: '',incrementStart: '3',incrementIncrement: '5',rangeStart: '',rangeEnd: '',specificSpecific: [],},year: {cronEvery: '',incrementStart: '2017',incrementIncrement: '1',rangeStart: '',rangeEnd: '',specificSpecific: [],},output: {second: '',minute: '',hour: '',day: '',month: '',Week: '',year: '',}}},watch: {data() {this.rest(this.$data);}},computed: {text() {return {Seconds: {name: "秒",every: "每一秒钟",interval: ["每隔", "秒执行 从", "秒开始"],specific: "具体秒数(可多选)",cycle: ["周期从", "到", "秒"]},Minutes: {name: "分",every: "每一分钟",interval: ["每隔", "分执行 从", "分开始"],specific: "具体分钟数(可多选)",cycle: ["周期从", "到", "分"]},Hours: {name: "时",every: "每一小时",interval: ["每隔", "小时执行 从", "小时开始"],specific: "具体小时数(可多选)",cycle: ["周期从", "到", "小时"]},Day: {name: "天",every: "每一天",intervalWeek: ["每隔", "周执行 从", "开始"],intervalDay: ["每隔", "天执行 从", "天开始"],specificWeek: "具体星期几(可多选)",specificDay: "具体天数(可多选)",lastDay: "在这个月的最后一天",lastWeekday: "在这个月的最后一个工作日",lastWeek: ["在这个月的最后一个"],beforeEndMonth: ["在本月底前", "天"],nearestWeekday: ["最近的工作日(周一至周五)至本月", "日"],someWeekday: ["在这个月的第", "个"]},Week: ["天", "一", "二", "三", "四", "五", "六"].map(function (e) {return "星期" + e}),Month: {name: "月",every: "每一月",interval: ["每隔", "月执行 从", "月开始"],specific: "具体月数(可多选)",cycle: ["从", "到", "月之间的每个月"]},Year: {name: "年",every: "每一年",interval: ["每隔", "年执行 从", "年开始"],specific: "具体年份(可多选)",cycle: ["从", "到", "年之间的每一年"]},Save: "保存",Close: "关闭"}},secondsText() {let seconds = '';let cronEvery = this.second.cronEvery;switch (cronEvery.toString()) {case '1':seconds = '*';break;case '2':seconds = this.second.incrementStart + '/' + this.second.incrementIncrement;break;case '3':this.second.specificSpecific.map(val => {seconds += val + ','});seconds = seconds.slice(0, -1);break;case '4':seconds = this.second.rangeStart + '-' + this.second.rangeEnd;break;}return seconds;},minutesText() {let minutes = '';let cronEvery = this.minute.cronEvery;switch (cronEvery.toString()) {case '1':minutes = '*';break;case '2':minutes = this.minute.incrementStart + '/' + this.minute.incrementIncrement;break;case '3':this.minute.specificSpecific.map(val => {minutes += val + ','});minutes = minutes.slice(0, -1);break;case '4':minutes = this.minute.rangeStart + '-' + this.minute.rangeEnd;break;}return minutes;},hoursText() {let hours = '';let cronEvery = this.hour.cronEvery;switch (cronEvery.toString()) {case '1':hours = '*';break;case '2':hours = this.hour.incrementStart + '/' + this.hour.incrementIncrement;break;case '3':this.hour.specificSpecific.map(val => {hours += val + ','});hours = hours.slice(0, -1);break;case '4':hours = this.hour.rangeStart + '-' + this.hour.rangeEnd;break;}return hours;},daysText() {let days = '';let cronEvery = this.day.cronEvery;switch (cronEvery.toString()) {case '1':break;case '2':case '4':case '11':days = '?';break;case '3':days = this.day.incrementStart + '/' + this.day.incrementIncrement;break;case '5':this.day.specificSpecific.map(val => {days += val + ','});days = days.slice(0, -1);break;case '6':days = "L";break;case '7':days = "LW";break;case '8':days = this.day.cronLastSpecificDomDay + 'L';break;case '9':days = 'L-' + this.day.cronDaysBeforeEomMinus;break;case '10':days = this.day.cronDaysNearestWeekday + "W";break}return days;},weeksText() {let weeks = '';let cronEvery = this.day.cronEvery;switch (cronEvery.toString()) {case '1':case '3':case '5':weeks = '?';break;case '2':weeks = this.week.incrementStart + '/' + this.week.incrementIncrement;break;case '4':this.week.specificSpecific.map(val => {weeks += val + ','});weeks = weeks.slice(0, -1);break;case '6':case '7':case '8':case '9':case '10':weeks = "?";break;case '11':weeks = this.week.cronNthDayDay + "#" + this.week.cronNthDayNth;break;}return weeks;},monthsText() {let months = '';let cronEvery = this.month.cronEvery;switch (cronEvery.toString()) {case '1':months = '*';break;case '2':months = this.month.incrementStart + '/' + this.month.incrementIncrement;break;case '3':this.month.specificSpecific.map(val => {months += val + ','});months = months.slice(0, -1);break;case '4':months = this.month.rangeStart + '-' + this.month.rangeEnd;break;}return months;},yearsText() {let years = '';let cronEvery = this.year.cronEvery;switch (cronEvery.toString()) {case '1':years = '*';break;case '2':years = this.year.incrementStart + '/' + this.year.incrementIncrement;break;case '3':this.year.specificSpecific.map(val => {years += val + ','});years = years.slice(0, -1);break;case '4':years = this.year.rangeStart + '-' + this.year.rangeEnd;break;}return years;},cron() {return `${this.secondsText || '0'} ${this.minutesText || '0'} ${this.hoursText || '*'} ${this.daysText || '*'} ${this.monthsText || '*'} ${this.weeksText || '?'}`},},methods: {getValue() {return this.cron;},change() {this.$emit('change', this.cron);// this.close();},// close() {//     this.$emit('close')// }// ,rest(data) {for (let i in data) {if (data[i] instanceof Object) {this.rest(data[i])} else {switch (typeof data[i]) {case 'object':data[i] = [];break;case 'string':data[i] = '';break;}}}}},watch:{cron(){this.change();}},mounted() {this.change();},template: `<div  ><el-tabs type="border-card">
<!--            <el-tab-pane>-->
<!--                <span slot="label"><i class="el-icon-date"></i> {{text.Seconds.name}}</span>-->
<!--                <div class="tabBody">-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="second.cronEvery" label="1">{{text.Seconds.every}}</el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="second.cronEvery" label="2">{{text.Seconds.interval[0]}}-->
<!--                            <el-input-number size="small" v-model="second.incrementIncrement" :min="1" :max="60"></el-input-number>-->
<!--                            {{text.Seconds.interval[1]||''}}-->
<!--                            <el-input-number size="small" v-model="second.incrementStart" :min="0" :max="59"></el-input-number>-->
<!--                            {{text.Seconds.interval[2]||''}}-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio class="long" v-model="second.cronEvery" label="3">{{text.Seconds.specific}}-->
<!--                            <el-select size="small" multiple v-model="second.specificSpecific">-->
<!--                                <el-option v-for="val in 60"  :value="val-1">{{val-1}}</el-option>-->
<!--                            </el-select>-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="second.cronEvery" label="4">{{text.Seconds.cycle[0]}}-->
<!--                            <el-input-number size="small" v-model="second.rangeStart" :min="1" :max="60"></el-input-number>-->
<!--                            {{text.Seconds.cycle[1]||''}}-->
<!--                            <el-input-number size="small" v-model="second.rangeEnd" :min="0" :max="59"></el-input-number>-->
<!--                            {{text.Seconds.cycle[2]||''}}-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                </div>-->
<!--            </el-tab-pane>-->
<!--            <el-tab-pane>-->
<!--                <span slot="label"><i class="el-icon-date"></i> {{text.Minutes.name}}</span>-->
<!--                <div class="tabBody">-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="minute.cronEvery" label="1">{{text.Minutes.every}}</el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="minute.cronEvery" label="2">{{text.Minutes.interval[0]}}-->
<!--                            <el-input-number size="small" v-model="minute.incrementIncrement" :min="1" :max="60"></el-input-number>-->
<!--                            {{text.Minutes.interval[1]}}-->
<!--                            <el-input-number size="small" v-model="minute.incrementStart" :min="0" :max="59"></el-input-number>-->
<!--                            {{text.Minutes.interval[2]||''}}-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio class="long" v-model="minute.cronEvery" label="3">{{text.Minutes.specific}}-->
<!--                            <el-select size="small" multiple v-model="minute.specificSpecific">-->
<!--                                <el-option v-for="val in 60"  :value="val-1">{{val-1}}</el-option>-->
<!--                            </el-select>-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="minute.cronEvery" label="4">{{text.Minutes.cycle[0]}}-->
<!--                            <el-input-number size="small" v-model="minute.rangeStart" :min="1" :max="60"></el-input-number>-->
<!--                            {{text.Minutes.cycle[1]}}-->
<!--                            <el-input-number size="small" v-model="minute.rangeEnd" :min="0" :max="59"></el-input-number>-->
<!--                            {{text.Minutes.cycle[2]}}-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                </div>-->
<!--            </el-tab-pane>--><el-tab-pane><span slot="label"><i class="el-icon-date"></i> {{text.Hours.name}}</span><div class="tabBody"><el-row><el-radio v-model="hour.cronEvery" label="1">{{text.Hours.every}}</el-radio></el-row><el-row><el-radio v-model="hour.cronEvery" label="2">{{text.Hours.interval[0]}}<el-input-number size="small" v-model="hour.incrementIncrement" :min="0" :max="23"></el-input-number>{{text.Hours.interval[1]}}<el-input-number size="small" v-model="hour.incrementStart" :min="0" :max="23"></el-input-number>{{text.Hours.interval[2]}}</el-radio></el-row><el-row><el-radio class="long" v-model="hour.cronEvery" label="3">{{text.Hours.specific}}<el-select size="small" multiple v-model="hour.specificSpecific"><el-option v-for="val in 24"  :value="val-1">{{val-1}}</el-option></el-select></el-radio></el-row><el-row><el-radio v-model="hour.cronEvery" label="4">{{text.Hours.cycle[0]}}<el-input-number size="small" v-model="hour.rangeStart" :min="0" :max="23"></el-input-number>{{text.Hours.cycle[1]}}<el-input-number size="small" v-model="hour.rangeEnd" :min="0" :max="23"></el-input-number>{{text.Hours.cycle[2]}}</el-radio></el-row></div></el-tab-pane><el-tab-pane><span slot="label"><i class="el-icon-date"></i> {{text.Day.name}}</span><div class="tabBody"><el-row><el-radio v-model="day.cronEvery" label="1">{{text.Day.every}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="2">{{text.Day.intervalWeek[0]}}<el-input-number size="small" v-model="week.incrementIncrement" :min="1" :max="7"></el-input-number>{{text.Day.intervalWeek[1]}}<el-select size="small" v-model="week.incrementStart"><el-option v-for="val in 7"  :label="text.Week[val-1]" :value="val"></el-option></el-select>{{text.Day.intervalWeek[2]}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="3">{{text.Day.intervalDay[0]}}<el-input-number size="small" v-model="day.incrementIncrement" :min="1" :max="31"></el-input-number>{{text.Day.intervalDay[1]}}<el-input-number size="small" v-model="day.incrementStart" :min="1" :max="31"></el-input-number>{{text.Day.intervalDay[2]}}</el-radio></el-row><el-row><el-radio class="long" v-model="day.cronEvery" label="4">{{text.Day.specificWeek}}<el-select size="small" multiple v-model="week.specificSpecific"><el-option v-for="val in 7":label="text.Week[val-1]":value="['SUN','MON','TUE','WED','THU','FRI','SAT'][val-1]"></el-option></el-select></el-radio></el-row><el-row><el-radio class="long" v-model="day.cronEvery" label="5">{{text.Day.specificDay}}<el-select size="small" multiple v-model="day.specificSpecific"><el-option v-for="val in 31"  :value="val">{{val}}</el-option></el-select></el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="6">{{text.Day.lastDay}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="7">{{text.Day.lastWeekday}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="8">{{text.Day.lastWeek[0]}}<el-select size="small" v-model="day.cronLastSpecificDomDay"><el-option v-for="val in 7"  :label="text.Week[val-1]" :value="val"></el-option></el-select>{{text.Day.lastWeek[1]||''}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="9"><el-input-number size="small" v-model="day.cronDaysBeforeEomMinus" :min="1" :max="31"></el-input-number>{{text.Day.beforeEndMonth[0]}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="10">{{text.Day.nearestWeekday[0]}}<el-input-number size="small" v-model="day.cronDaysNearestWeekday" :min="1" :max="31"></el-input-number>{{text.Day.nearestWeekday[1]}}</el-radio></el-row><el-row><el-radio v-model="day.cronEvery" label="11">{{text.Day.someWeekday[0]}}<el-input-number size="small" v-model="week.cronNthDayNth" :min="1" :max="5"></el-input-number><el-select size="small" v-model="week.cronNthDayDay"><el-option v-for="val in 7" :label="text.Week[val-1]" :value="val"></el-option></el-select>{{text.Day.someWeekday[1]}}</el-radio></el-row></div></el-tab-pane><el-tab-pane><span slot="label"><i class="el-icon-date"></i> {{text.Month.name}}</span><div class="tabBody"><el-row><el-radio v-model="month.cronEvery" label="1">{{text.Month.every}}</el-radio></el-row><el-row><el-radio v-model="month.cronEvery" label="2">{{text.Month.interval[0]}}<el-input-number size="small" v-model="month.incrementIncrement" :min="0" :max="12"></el-input-number>{{text.Month.interval[1]}}<el-input-number size="small" v-model="month.incrementStart" :min="0" :max="12"></el-input-number></el-radio></el-row><el-row><el-radio class="long" v-model="month.cronEvery" label="3">{{text.Month.specific}}<el-select size="small" multiple v-model="month.specificSpecific"><el-option v-for="val in 12"  :label="val" :value="val"></el-option></el-select></el-radio></el-row><el-row><el-radio v-model="month.cronEvery" label="4">{{text.Month.cycle[0]}}<el-input-number size="small" v-model="month.rangeStart" :min="1" :max="12"></el-input-number>{{text.Month.cycle[1]}}<el-input-number size="small" v-model="month.rangeEnd" :min="1" :max="12"></el-input-number></el-radio></el-row></div></el-tab-pane>
<!--            <el-tab-pane>-->
<!--                <span slot="label"><i class="el-icon-date"></i> {{text.Year.name}}</span>-->
<!--                <div class="tabBody">-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="year.cronEvery" label="1">{{text.Year.every}}</el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="year.cronEvery" label="2">{{text.Year.interval[0]}}-->
<!--                            <el-input-number size="small" v-model="year.incrementIncrement" :min="1" :max="99"></el-input-number>-->
<!--                            {{text.Year.interval[1]}}-->
<!--                            <el-input-number size="small" v-model="year.incrementStart" :min="2018" :max="2118"></el-input-number>-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio class="long" v-model="year.cronEvery" label="3">{{text.Year.specific}}-->
<!--                            <el-select size="small" filterable multiple v-model="year.specificSpecific">-->
<!--                                <el-option v-for="val in 100" :label="2017+val" :value="2017+val"></el-option>-->
<!--                            </el-select>-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                    <el-row>-->
<!--                        <el-radio v-model="year.cronEvery" label="4">{{text.Year.cycle[0]}}-->
<!--                            <el-input-number size="small" v-model="year.rangeStart"  :min="2018" :max="2118"></el-input-number>-->
<!--                            {{text.Year.cycle[1]}}-->
<!--                            <el-input-number size="small" v-model="year.rangeEnd"  :min="2018" :max="2118"></el-input-number>-->
<!--                        </el-radio>-->
<!--                    </el-row>-->
<!--                </div>-->
<!--            </el-tab-pane>--></el-tabs><div class="bottom"><div class="value">表达式:{{this.cron}}</div>
<!--            <ResultDisplay style="border: 1px solid #DCDFE6;padding:15px;margin-bottom: 10px;margin-top: 10px;" :ex="this.cron"></ResultDisplay>-->
<!--            <el-button type="primary" @click="change">{{text.Save}}</el-button>-->
<!--            <el-button type="primary" @click="close">{{text.Close}}</el-button>--></div></div>`,// components: {//     ResultDisplay// }
})
    /*** @Description 推算cron最近五次运行时间* @Param cron* @Return com.tianqiauto.base.model.AjaxResult* @Author wjx* @Date 2023/4/18 16:36**/@GetMapping("/tuiSuanCron")public AjaxResult tuiSuanCron(String cron){if (!CronSequenceGenerator.isValidExpression(cron)){return AjaxResult.getInstance().setSuccessChain(false).setMessageChain("无效表达式:" + cron);}ArrayList<String> strings = null;try {CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);Date next = new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");strings = new ArrayList<>();for (int i = 0; i < 5; i++) {next = cronSequenceGenerator.next(next);if (next != null){String date = simpleDateFormat.format(next);strings.add(date);}else {break;}}} catch (Exception e) {return AjaxResult.getInstance().setSuccessChain(false).setMessageChain("表达式解析发生错误!");}return AjaxResult.getInstance().setSuccessChain(true).setDataChain(strings);}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年一建学霸笔记

考点:单方取消或辞去委托承担的民事责任女《民法典》规定&#xff0c;因解除合同造成对方损失的&#xff0c;除不可归责于该当事人的事由外&#xff0c;无偿委托合同的解除方应当赔偿因解除时间不当造成的直接损失&#xff0c;有偿委托合同的解除方应当赔偿对方的直接损失和合同…

简单理解TCP,UDP,HTTP

我们都知道TCP、UDP、HTTP内部有很复杂的过程&#xff0c;很多人没办法理解的那么深&#xff0c;只想知道这是个什么鬼。 1、TCP、UDP、HTTP 是什么? TCP/IP是个协议组&#xff0c;可分为三个层次&#xff1a;网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、…

关于云服务器ECS、宝塔的安装配置以及图床的使用

一、阿里云服务器的申请以及宝塔的安装 安装配置服务器的原理&#xff1a; step1&#xff1a;地址栏输入阿里云服务器官网地址 step2&#xff1a;在首页依次点击以下内容&#xff1a; step3&#xff1a;选择立即购买&#xff0c;并填写以下内容&#xff1a; step4&#xff1a…

Postman和Jmeter做接口测试的区别

1. 用例组织方式 Jmeter的组织方式相对比较扁平&#xff0c;它首先没有WorkSpace的概念&#xff0c;直接是TestPlan&#xff0c;TestPlan下创建的Threads Group就相当于TestCase&#xff0c;并没有TestSuite的层级。 Postman功能上更简单&#xff0c;组织方式也更轻量级&#…

opencv 之 外接多边形(矩形、圆、三角形、椭圆、多边形)使用详解

opencv 之 外接多边形&#xff08;矩形、圆、三角形、椭圆、多边形&#xff09;使用详解 本文主要讲述opencv中的外接多边形的使用&#xff1a; 多边形近似外接矩形、最小外接矩形最小外接圆外接三角形椭圆拟合凸包 将重点讲述最小外接矩形的使用 1. API介绍 #多边形近似 v…

Redisson实现简单消息队列:优雅解决缓存清理冲突

在项目中&#xff0c;缓存是提高应用性能和响应速度的关键手段之一。然而&#xff0c;当多个模块在短时间内发布工单并且需要清理同一个接口的缓存时&#xff0c;容易引发缓存清理冲突&#xff0c;导致缓存失效的问题。为了解决这一难题&#xff0c;我们采用Redisson的消息队列…

带你体验stable discussion文生图,实现自己的真人写真工具

前言 Midjourney 由于精致的画图风格备受好评&#xff0c;但由于其网络环境以及会员费&#xff0c;导致入门门槛过高&#xff0c;拦住了很多对AIGC感兴趣的小伙伴。今天带大家体验一下最近很火的Stable Diffusion&#xff0c;满足大家的AI爱好,无需科学上网&#xff0c;本地部…

数据分析系统中的六边形战士——奥威BI系统

数据分析软件可以对收集的数据进行分析和报告&#xff0c;帮助企业获得更深入的数据洞察力&#xff0c;从而推动企业数字化运营决策&#xff0c;提高决策效率与质量。进入大数据时代&#xff0c;企业对数据分析软件的要求也在水涨船高&#xff0c;传统的数据分析软件显然已不能…

Git 学习笔记

Git 仓库中的提交记录保存的是你的目录下所有文件的快照&#xff0c;就像是把整个目录复制&#xff0c;然后再粘贴一样&#xff0c;但比复制粘贴优雅许多&#xff01; Git 希望提交记录尽可能地轻量&#xff0c;因此在你每次进行提交时&#xff0c;它并不会盲目地复制整个目录。…

华为盘古大模型:能源领域的颠覆性突破

近日&#xff0c;华为盘古大模型在能源领域横空出世&#xff0c;引发了广泛关注和期待。作为一项具有颠覆性影响的技术创新&#xff0c;华为盘古大模型在能源行业中展现出巨大的潜力和前景。其优质的计算能力和智能优化算法&#xff0c;将为能源产业带来翻天覆地的变革。 盘古大…

一篇文章搞定数据同步工具SeaTunnel

文章目录 前言第 1 章 Seatunnel 概述第 2 章 Seatunnel 安装和使用第 3 章 SeaTunnel 基本原理第 4章应用案例后记 前言 SeaTunnel安装包及代码&#xff1a; 链接: https://pan.baidu.com/s/1JvgAZpqoOPJ0ecfxUbLo4Q 提取码: pur8 –来自百度网盘超级会员v4的分享 第 1 章 …

成为一名数字IC后端工程师需要掌握哪些技能?(内附学习视频)

众所周知&#xff0c;数字后端设计是IC设计中必不可少的一个环节&#xff0c;数字后端工程师是将门级网表转换成标准的GDS文件&#xff0c;又称为设计实现或物理设计。正所谓前端保证功能正确&#xff0c;后端保证芯片的实现正确。 数字后端工程师是做什么的&#xff1f; 数字…

多线程(JavaEE初阶系列3)

目录 前言&#xff1a; 1.中断一个线程 2.等待一个线程-join() 2.1join()无参调用的使用 2.2join()有参调用的使用 3.线程的状态 3.1观察线程的所有状态 4.多线程带来的风险—线程安全 4.1观察线程不安全 4.2该问题出现的原因 4.3线程不安全问题的解决 4.3.1synchro…

解决JMeter+Grafana+influxdb 配置出现transaction无数据情形

问题描述 JMeterGrafanainfluxdb 配置时&#xff0c;Darren洋发现jmeter中明明已经配置好了事务条件以及接口实例信息&#xff0c;但就是在grafana的头部导航栏中的transaction按钮下来没有相应事务数据信息&#xff0c;经过相关资料查询&#xff0c;Darren洋发现执行以下两个步…

搭建基于Nginx+Keepalived的高可用web集群并实现监控告警

目录 搭建相关服务器DNS服务器配置WEB服务器配置配置静态IP编译安装nginx 负载均衡器配置lb1lb2高可用配置 NFS服务器配置配置静态IP安装软件包新建共享目录web服务器挂载 监控服务器配置安装node-exporter编写prometheus.yml安装alertmanager和钉钉插件获取机器人webhook编写a…

Python实战之数据挖掘详解

一、Python数据挖掘 1.1 数据挖掘是什么&#xff1f; 数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;通过算法&#xff0c;找出其中的规律、知识、信息的过程。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的数据挖掘库&#…

Nginx配置解析

server {listen 80;server_name example.com;location / {proxy_pass http://backend;}location / 是 Nginx 的一个匹配规则&#xff0c;用于匹配所有请求路径。proxy_pass 指令则用于将匹配到的请求转发给指定的后端服务器。下面是关于 location / 和 proxy_pass 的详细介绍&a…

解决嵌入式中QTableWidget双击出现空白QTableWidgetItem输入

目录 所说BUG现象解决方式1方式2全部内容 效果 今天突然想起在上个公司解决的一个BUG 嵌入式中QTableWidget一般只能看数据不能编辑&#xff0c;或者是选择 所以双击出现空白QTableWidgetItem是不允许的 所说BUG现象 解决 在空白的单元格中&#xff0c;添加不可编辑的QTableWid…

数字孪生:未来科技的新前沿

数字孪生作为一项新兴的研究方向&#xff0c;正逐渐成为科技界的焦点。它是将现实世界中的实体、系统或过程通过数字化手段进行建模、仿真和分析&#xff0c;形成与实体相对应的数字化副本。数字孪生的发展为我们带来了无限的想象空间&#xff0c;以及解决现实问题的新途径。 在…

Zabbix监控安装grafana并配置图形操作

第三阶段基础 时 间&#xff1a;2023年7月20日 参加人&#xff1a;全班人员 内 容&#xff1a; Zabbix监控安装grafana 目录 安装并配置grafana 一、安装Grafana 二、下载安装插件 三、配置grafana 四、Web访问并配置&#xff1a; 安装并配置grafana 一、安装Graf…