分布式锁解决超卖问题

在单体应用场景下处理多线程并发问题时,我们常会用到Synchronized和Lock锁。而在分布式场景中,则需要一种更高级的锁机制来处理跨机器的进程之间的数据同步问题,这就是分布式锁。 1. 商品超卖场景 分布式锁解决的最典型问题就是商品超卖问题了,即商品库存为1,但是由于并发下单,导致产生了多笔订单。 2. 单体应用下的解决方法 使用事务注解的坑 由于创建商品订单涉及扣减库存、创建订单两个操作,所以需要用到事务。 但是如果采用事务注解@Transactional,事务提交是在方法结束的时候执行,此时方法也会释放锁,导致并发的下一个线程会与事务提交并行执行,也会导致库存扣减异常。 2.1. Synchronized + 编程式事务 public Long createOrder() throws Exception { Product product = null; //synchronized (this) { //synchronized (object) { synchronized (DBOrderService2.class) { TransactionStatus transaction1 = platformTransactionManager.getTransaction(transactionDefinition); product = productMapper.selectByPrimaryKey(purchaseProductId); if (product == null) { platformTransactionManager.rollback(transaction1); throw new Exception("购买商品:" + purchaseProductId + "不存在"); } //商品当前库存 Integer currentCount = product.getCount(); System.out.println(Thread.currentThread().getName() + "库存数:" + currentCount); //校验库存 if (purchaseProductNum > currentCount) { platformTransactionManager.

【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024) 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议(NNICE 2024)将于2024年1月19-21日在中国广州举行。 NNICE 2024是汇聚业界和学术界的顶级论坛,会议将邀请国内外著名专家就以传播神经网络、信息与通信工程方法和技术领域的技术进步、研究成果和应用做专题报告,同时进行学术交流。诚邀国内外相关高校和科研院所的科研人员、企业工程技术人员等参加会议。 重要信息 大会官网:​ www.icnnice.com ​(点击参会/投稿) 大会时间:2024年1月19-21日 大会地点:中国·广州 收录检索:EI Compendex,Scopus IEEE独立出版,ISBN:979-8-3503-9437-5 出版信息 会议的所有投稿需经过3轮专家审稿,并提交至组委会复核,经过严格的审稿之后,最终录用的论文将由 IEEE 出版(ISBN:979-8-3503-9437-5),收录进IEEE Xplore数据库,见刊后由期刊社提交至 EI Compendex和Scopus检索。 征稿主题 神经网络 机器人控制 优化组合 知识工程 人工智能 逻辑程序设计 人机交互 深度学习 信号处理 信息提取 自然语言推论 信号与信息处理 信息管理与集成 实时信号处理与应用、 DSP应用 图像传输与处理 光纤传感与微弱信号检测 电力系统中 特殊信号处理 FPGA的应用 公共信息管理与安全 电力设备红外热像测温 通信与信息系统 信息论, 编码理论, 通信网络理论与技术, 多媒体通信理论与技术 数字信号处理, 数字图像处理, 模式识别, 计算机视觉, 电子与通信系统设计自动化 非线性控制理论, 工业监控系统设计 电子与通信工程

【2023持续更新】网络安全工程师常用工具集合

文章目录 SQL注入检测安全工具命令行提示综合扫描工具综合安全类文章 SQL注入检测 https://github.com/r0oth3x49/ghauri 安全工具命令行提示 https://github.com/Orange-Cyberdefense/arsenal 综合扫描工具 https://github.com/chaitin/xray 综合安全类文章 http://wechat.doonsec.com/

解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题,全是干货分享

今天我的电脑中突然出现关于“api-ms-win-crt-runtime-l1-1-0.dll”的错误提示,关闭提示后再次打开程序依然不能正常打开,出现这样的问题突然不知道是因为什么,于是就去了解了关于出现api-ms-win-crt-runtime-l1-1-0.dll错误的问题,找到了几种解决api-ms-win-crt-runtime-l1-1-0.dll丢失的方法。如果你的电脑也出现这样的问题,希望这几个方法能够帮助大家解决api-ms-win-crt-runtime-l1-1-0.dll丢失。 一.api-ms-win-crt-runtime-l1-1-0.dll文件的作用和意义 api-ms-win-crt-runtime-l1-1-0.dll是Windows操作系统中的一个重要动态链接库文件,它包含了运行C++程序所需的运行时组件。这个文件提供了一系列函数和功能,使得C++程序能够在Windows操作系统上正确运行。 具体来说,api-ms-win-crt-runtime-l1-1-0.dll文件为C++程序提供了许多运行时库函数,包括内存管理、错误处理、字符串操作、输入输出等基础功能。它还负责加载和卸载动态链接库以及处理程序的启动和结束。 api-ms-win-crt-runtime-l1-1-0.dll文件的存在确保了C++程序的正常运行和开发环境的稳定性,可以说它对于Windows操作系统和开发者来说具有非常重要的意义。 二.api-ms-win-crt-runtime-l1-1-0.dll丢失的解决方法 更新Windows操作系统 最简单的解决方法是检查并安装最新的Windows更新。微软经常发布针对Windows运行时组件的修补程序,通过更新操作系统可以获取缺失文件的最新版本,从而将api-ms-win-crt-runtime-l1-1-0.dll丢失的问题进行解决。 Dll修复工具 如果更新windows不能解决文件丢失,那么就可以使用这个dll修复工具,这个工具可以快速的解决api-ms-win-crt-runtime-l1-1-0.dll丢失,获得dll修复工具,可以在“此电脑”中输入:dll修复.site, DLL修复工具_一键修复所有dll缺失msvcp140.dll丢失的解决方法–电脑修复精灵 点击前往就可以将工具进行获取。在点击一键修复就可以将api-ms-win-crt-runtime-l1-1-0.dll丢失的问题。 安装Visual C++ Redistributable包 用户可以下载并安装相应版本的Visual C++ Redistributable程序包。这些程序包中包含了api-ms-win-crt-runtime-l1-1-0.dll文件及其依赖项,安装后可以解决缺失的问题。 重装相关程序 如果只有特定的程序报告缺少api-ms-win-crt-runtime-l1-1-0.dll文件,可以尝试重新安装该程序。重新安装过程中会将所需的运行时组件一起安装,可能会修复文件缺失问题。卸载软件需要大家将软件进行卸载干净,可以在设置中的应用中找到需要卸载的软件点击卸载既可。 三.解决api-ms-win-crt-runtime-l1-1-0.dll丢失的注意事项 在解决api-ms-win-crt-runtime-l1-1-0.dll文件丢失问题时,需要注意以下几点: 下载安全可靠的文件:确保下载的Windows更新或Visual C++ Redistributable程序包来自官方或受信任的来源。避免从非官方网站或未经验证的来源下载文件,以防止恶意软件或病毒的感染。 遵循操作指南:按照官方提供的操作指南进行操作,注意每个步骤的顺序和要求。不要随意更改操作系统或程序的设置,以免引发其他问题。 更新操作系统:除了解决api-ms-win-crt-runtime-l1-1-0.dll文件丢失的问题,及时更新操作系统也可以增强系统的安全性和稳定性。因此,建议定期检查并安装最新的Windows更新。 总的来说,解决api-ms-win-crt-runtime-l1-1-0.dll文件丢失问题比较简单,通过更新操作系统或安装使用dll修复工具可以快速解决。希望能够帮助大家解决api-ms-win-crt-runtime-l1-1-0.dll丢失的问题。

【投稿优惠|优质会议】2024年环境工程与机电一体化国际学术会议(ICEEMI 2024)

【投稿优惠|优质会议】2024年环境工程与机电一体化国际学术会议(ICEEMI 2024) 2024 International Conference Environmental Engineering and Mechatronics Integration(ICEEMI 2024) 一、【会议简介】 2024年环境工程与机电一体化国际学术会议(ICEEMI 2024))将以线上会议形式召开。它旨在为在环境工程、机电一体化的工业界、学术界和政府的研究人员、从业人员和专业人士提供一个论坛,就相关领域的研发和专业实践进行讨论。会议主题包括环境保护、城市与区域规划、电气自动化、机电控制与光电子系统等。我谨代表大会各委员会,邀请专家学者出席会议并参与讨论,是我们的幸运和荣幸。 二、【征稿主题】主题包括但不限于以下 环境分析和监测 环境化学和生物学 环境保护 环境安全与健康 环境修复项目 污染控制项目 废物处理和回收 供水和排水工程 清洁生产过程 水文和水资源工程 水土保持和荒漠化控制 生态环境保护 地理信息与遥感科学 土地、资源与环境及城乡规划 节能环保与低碳理念 城市与区域规划 能源产业的发展与管理 环境保护与经济发展 全球气候变化与国际碳减排合作 先进的成型制造和设备 高级运动控制 自动化和控制系统、中间件 CAD/CAM 电气自动化 机电传动控制 电子技术 机电一体化系统中的故障检测与诊断 柔性制造系统 人形机器人、服务机器人 工业机器人与自动化生产线 集成制造系统 机械和机器设计 机电控制 微/纳米制造与MEMS/NEMS 多体动力学 NEMS/MEMS技术与设备 光电子系统 机械电子学 传感器和执行器 无人车 三、【重要信息】 投稿邮箱:ei_sub@163.com 投稿时请邮箱正文备注:论文投稿+苏老师推荐+投稿人姓名 最终截稿时间:请查看官网 接受/拒稿:投稿后2-3日内通知 四、【论文提交】 1. 文章需全英文,重复率低于30%。 2. 文章必须要有题目、作者、单位、邮箱、关键词、摘要、必要的图表、结论、参考文献等。 3. 投稿流程:投稿→审稿→录用→注册→开具增值税普票(专票)→电子版→纸质版→检索。 4. 请勿一稿多投,所有稿件将接受两三名专家进行评审

怎样把caj转换成pdf?

    怎样把caj转换成pdf?CAJ(中国学术期刊全文数据库)和PDF(便携式文档格式)是常见的文件格式,它们具有不同的特点和用途。CAJ文件是基于学术期刊数据库的原始全文格式,包含了完整的文章内容、图表、参考文献等信息;CAJ文件通常具有内置的检索功能,可以通过关键词或作者名等进行快速搜索和定位;CAJ文件适用于学术研究领域,包含了大量的学术期刊文章和研究成果,可供学者、研究人员和学生使用;CAJ文件通常需要特定的软件或阅读器才能打开和查看,对于一般用户来说不太友好。由于CAJ文件包含完整的文本和图像等内容,因此文件大小较大,下载和传输可能会耗费时间和带宽。某些CAJ文件只能在特定的操作系统或设备上打开和使用,可能不太兼容其他平台。 PDF是一种广泛使用的文件格式,几乎所有设备和操作系统都可以打开、查看和打印PDF文件。PDF文件可以保持原始文档的格式、字体、布局和图像等,并且不受不同设备和操作系统的影响。因此很多小伙伴希望可以将caj转换成pdf格式,那么如何转换呢?下面我来教教你,这些方法可以说是非常的简单,基本上一看就能学会。 方法一:凭借“优速电子书助手”软件将caj转为pdf 步骤1,大家应该还是第一次使用“优速电子书助手”软件,所以需要提前将这个软件下载并安装好。运行软件之后可以看到左边有非常多的功能,我们需要点击里面的【CAJ转PDF】功能进入下一步。   步骤2,然后就是添加caj文件到软件中,我们点击左上角【添加文件】按钮,然后通过文件添加窗口,将准备好文档caj文件全部添加到软件中。   步骤3,如下图所示我们设置一下输出目录,指定电脑中的一个文件夹用来保存转换成的pdf文件,如果不设置的话,软件则默认保存到电脑的桌面上。   步骤4,这时候点击【开始转换】红色按钮就可以了,转换完成后软件会自动打开输出文件夹,便于我们查看转换成的pdf文件。   步骤5,最后我们可以看到,添加到软件里的3个caj文件被成功的转成pdf格式,说明此方法是正确有效的。   方法二:使用灵机文件工具进行在线转换 灵机文件工具是一个有非常多功能的文件处理在线网站,使用它可以对各种文件进行转换或者处理,我们通过电脑里的任何一个浏览器就能将它找到并打开使用,在首页上面就能看到非常多的功能,我们在热门功能下面找到并选择“CAJ转PDF”功能。   此时我们可以看到跳转到了CAJ转PDF的操作界面,我们点击界面上绿色背景中间的“选择文件”按钮,随后就可以将caj文件上传到软件里面了,是支持批量上传和批量转换的。     文件上传好之后,我们点击“确认转换”按钮,启动格式转换程序。大家要注意,这个工具转换的速度比较慢,所以你需要耐心等待,转换结束之后大家记得从工具中将转换成的pdf文件下载下来哦。   方法三:使用小讯pdf处理器将caj转成pdf 从软件的名称我们就能知道这是一个电脑软件,所以大家请将它安装好,这是一个专业的pdf文件处理软件,它具有将不同文件转换成pdf的功能。打开软件之后我们点击顶部导航上的“特色转换”选项,之后再点击需要使用到的“caj转pdf”功能。   找到软件上的“添加文件”按钮,点击它之后将需要转换成pdf格式的caj文件上传到软件中,可以上传多个文件进行批量转换。   不需要做另外的设置,直接点击右下角的蓝色按钮启动转换即可。   等到状态栏下面的进度条变成100%的时候,说明转换完成了,我们找到软件的输出目录,就能够找到转换成的pdf文件,这样整个转换过程就结束了。       将CAJ格式的文件转换为PDF格式之后,你就可以在任何设备和操作系统上都能够方便地查看和打印文档。与此同时,PDF格式具有非常好的跨平台兼容性和可读性,确保了文档在不同设备和软件中的一致性。如果你需要与他人共享或分发文档,将其转换为PDF格式会更加方便,因为几乎所有设备和操作系统都支持PDF格式,而且PDF文件比其他文件格式更加安全可靠。不管是在工作场所还是日常生活中,使用PDF格式的文档都能够提高工作效率和信息传递的便利性。为此小编为大家准备了两个“怎样把caj转换成pdf? ”的详细方法介绍,感想去的可以试着转换一下,肯定可以帮助你。

Trapcode Suite 2024.0.2

Trapcode Suite是一款用于在After Effects中模拟和建模3D粒子和效果的软件。 该软件包包含11种不同的工具,可以帮助用户模拟火、水、烟、雪等粒子效果,以及创建有机视觉效果和3D元素。它还支持在AE与PR 2022插件,使得用户可以轻松地在后期制作软件中创建理想的3D场景。 Red Giant Trapcode Suite可以大大简化After Effects中的3D模拟过程,为用户提供高效、逼真的视觉效果。它不仅可以帮助用户轻松模拟粒子、流体、3D合成、表面、声音和运动的效果,还支持用户使用颜色和风景来改进模拟效果,并应用声音移动到模拟组件。 总而言之,Red Giant Trapcode Suite是一款功能强大的3D粒子模拟软件,专为行业标准而设计,能满足挑剔的用户需求,是After Effects中模拟和建模3D粒子和效果的必备插件。 Trapcode Suite 2024.0.2

PN8016 宽输出范围非隔离交直流转换芯片适用于非隔离的辅助电源

PN8016集成PFM控制器及800V高雪崩能力智能功率MOSFET,用于外围元器件极精简的小功率非隔离开关电源,输出电压可通过FB电阻调整。 PN8016内置800V高压启动与自供电模块,实现系统快速启动、超低待机、自供电功能。该芯片提供了完整的智能化保护功能,包括过载保护,欠压保护,过温保护。另外PN8016的降频调制技术有助于改善EMI特性。 产品特征 ■ 内置800V高雪崩能力智能功率MOSFET ■ 内置高压启动和自供电电路 ■ 适用于Buck、Buck-Boost、Flyback等多种架构 ■ 输出电压3.3V~18V可通过FB电阻调整 ■ 半封闭式稳态输出电流300mA @230VAC,5V输出 ■ 改善EMI的降频调制技术 ■ 优异的负载调整率和工作效率 ■ 全面的保护功能  过载保护(OLP)  过温保护(OTP)  欠压保护(UVLO) 外围参数选择参考 为了获得更好的 PN8016 系统性能,请务必遵守以下规则: 1. 为通过 2KV 差模雷击,建议增加二极管 D1* 1N4007。 2. PN8016 为 SOP-7 封装,2 脚 VDD 与 3 脚 SW 之间不建议保留焊盘。 PN8016集成PFM控制器及800V高雪崩能力智 能功率MOSFET,用于外围元器件极精简的小功率 非隔离开关电源,输出电压可通过FB电阻调整。 PN8016内置高压启动与自供电模块,实现系统快 速启动、超低待机、自供电功能。该芯片提供了完 整的智能化保护功能,包括过载保护,欠压保护, 过温保护。另外PN8016的降频调制技术有助于改 善EMI特性。 搜恒森宇电子了解更多相关功能! 首页

OutOfDirectMemoryError错误

2023-11-29 14:25:30.329 dev [frosoms-gateway-136:12345]192.168.50.136 [reactor-http-epoll-7] WARN [io.netty.channel.AbstractChannelHandlerContext AbstractChannelHandlerContext.java:invokeExceptionCaught:311] - An exception 'reactor.core.Exceptions$BubblingException: reactor.netty.ReactorNetty$InternalNettyException: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16 7216 byte(s) of direct memory (used: 469762055, max: 477626368)' [enable DEBUG level for full stacktrace] was thrown by a user handler's exceptionCaught() method while handling the following exception: io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s) of direct memory (used: 469762055, max: 477626368) at io.netty.util.internal.PlatformDependent.incrementMemoryCounter(PlatformDependent.java:754) at io.netty.util.internal.PlatformDependent.allocateDirectNoCleaner(PlatformDependent.java:709) at io.netty.buffer.PoolArena$DirectArena.allocateDirect(PoolArena.java:645) at io.netty.buffer.PoolArena$DirectArena.newChunk(PoolArena.java:621) at io.netty.buffer.PoolArena.allocateNormal(PoolArena.java:204)

算法——》排序&&查找

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 算法——》排序&&查找 一、排序算法1、内部排序算法2、外部排序算法 二、查找算法 一、排序算法 用于将一组数据按照特定的规则进行排序。 排序算法可以分为内部排序和外部排序两种。 不同的排序算法在时间复杂度、空间复杂度和稳定性等方面有所差异,选择合适的排序算法取决于具体的应用场景和数据规模。 1、内部排序算法 算法描述冒泡排序(Bubble Sort)重复比较相邻的两个元素,如果顺序错误就交换位置,直到整个序列有序插入排序(Insertion Sort)将待排序的元素插入已经排好序的序列中的正确位置,直到整个序列有序选择排序(Selection Sort)每次从待排序序列中选择最小(或最大)的元素放到已排序序列的末尾,直到整个序列有序快速排序(Quick Sort)选择一个基准元素,将比基准元素小的元素放在基准元素的左边,比基准元素大的元素放在基准元素的右边,然后递归地对左右两个子序列进行快速排序归并排序(Merge Sort)将待排序序列划分为两个子序列,分别对两个子序列进行归并排序,然后将排序好的两个子序列合并成一个有序序列堆排序(Heap Sort)将待排序序列构建成一个最大堆(或最小堆),然后依次取出堆顶元素,再对剩余元素进行堆调整,直到整个序列有序 2、外部排序算法 算法描述多路归并排序将待排序的数据分为多个有序的子序列,然后通过多次归并操作将这些子序列合并为一个有序序列基于置换的排序通过多次置换操作将待排序的数据重新排列成有序的序列多层归并排序将待排序的数据分成多个层次,每个层次都进行归并排序操作,最终得到一个有序序列 二、查找算法 查找算法 = 搜索算法,是一种用于在数据集中查找特定元素的算法。 查找算法可以应用于各种数据结构,如数组、链表、树等。 算法描述线性查找顺序遍历数据集,逐个比较元素,直到找到目标元素或遍历完整个数据集。时间复杂度为O(n),其中n为数据集的大小二分查找仅适用于已经排序的数据集。从数据集的中间元素开始比较,如果目标元素小于中间元素,则在左半部分继续查找;如果目标元素大于中间元素,则在右半部分继续查找;如果目标元素等于中间元素,则找到目标元素。时间复杂度为O(log n)哈希查找通过哈希函数将目标元素映射到一个位置,然后在该位置进行查找。哈希查找的平均时间复杂度为O(1),但是在处理哈希冲突时可能需要线性查找二叉查找树将数据集构建成二叉查找树,其中每个节点的左子树的值小于节点的值,右子树的值大于节点的值。通过比较目标元素和节点的值,可以在二叉查找树中进行快速查找平衡二叉查找树在二叉查找树的基础上,通过旋转操作保持树的平衡,以提高查找效率。常用的平衡二叉查找树有红黑树、AVL树等B树和B+树适用于大规模数据的查找,将数据集分散存储在多个节点中,通过多级索引进行查找。B树和B+树的高度较小,能够减少磁盘I/O操作,提高查找效率字符串匹配算法用于在文本中查找特定的字符串。常用的字符串匹配算法有暴力匹配算法、KMP算法、Boyer-Moore算法等

vue+cesium添加点

接上节 项目要求地图标注点有动效,参考动效链接https://blog.csdn.net/weixin_39150852/article/details/124126031 新建一个pointentity.js 如下 /** * @param {Viewer} viewer * */ export default class PointEntity { constructor(val) { this.viewer = val.viewer } addEntity(item) { // let poin = this.viewer let map_green = require("../../assets/map_icon_green.png") let map_green1 = require("../../assets/map_icon_green1.png") let x = 1; let flog = true; let poin = this.viewer.entities.add({ id: item.id, name: item.pointName, position: Cesium.Cartesian3.fromDegrees(item.longitude, item.latitude, 990), billboard: { image:map_green, show: true, // default pixelOffset: new Cesium.Cartesian2(0, 0), // default: (0, 0) eyeOffset: new Cesium.

C/C++数据结构与算法课程设计题目(24题)[2023-11-27]

C/C++数据结构与算法课程设计题目(24题)[2023-11-27] 数据结构与算法课程设计题目及评分标准 一、课程选题及问题描述 Part 1 基础型题目 输入某年某月某日,判断这一天是这一年的第几天?编写一个3人对战的“猜拳游戏”。由计算机来担任2个角色,这2个角色的手势都用随机数来生成。要求玩家可以选择是否重复进行游戏。编写一个“记忆力训练”程序,玩家按照相反的顺序输入已记忆的字符串序列,例如提示的题目是5892,屏幕显示n秒钟后,题目数字自动消失,并提示输入,玩家需输入2985。输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。输入一个整数n,当n为偶数时,调用函数求1/2+1/4+…+1/n,当n为奇数时,调用函数求1/1+1/3+…+1/n。 Part 2 应用型题目 1.个人账务管理系统 (一)问题描述 用C或C++语言实现一个简单的个人账务管理系统,该系统要求个人能对某月的支出情况进行统计和分析。通过此课题,熟练掌握数组、文件、结构体、指针的各种操作,以及一些算法思想的应用。 (二)课题要求 课题分基本要求和扩展要求,基本要求是必须完成的,扩展要求视能力自选一个或多个完成。 基本要求 (1) 支出信息包括:支出类型(主要可以分为食品、学习、交通、通信、礼品等小项),金额,消费地点,消费日期等。 (2) 消费情况的录入功能,可以任意输入某日期,并记录该日的某项消费情况。对于同一天,可以输入多条消费记录,如记录10月1日中餐的消费情况,再记录10月1日的晚餐消费情况。将相关的信息记录在文件中,每次程序启动可以从文件中读入数据。 (3) 实现对某段时间进行分类统计和明细条目排序。分类统计指可以对指定时间区间内的消费情况进行汇总,用户可以对所有类型或指定类型进行统计,如对10月1日至11月15日期间所有类型进行统计时,依次统计各类型的消费金额汇总,如食品总消费1000元,交通总消费200元等。也可以指定查询10月1日至11月15日期间交通消费总金额。明显条目排序,指对指定时间区间内的消费情况进行明细排列,并能按金额大小或日期顺序进行排序。例如查看10月1日至11月15日期间“学习”消费的明细情况,对“学习”的每笔花费按金额大小或日期顺序进行排序。可以将分类统计和明细条目排序相结合,如在统计出交通消费总金额的同时,在其后列举消费明细。 (4) 显示功能:将排序后的内容存为文件,形成个人财务报表。 (5) 排序功能:按消费的金额升序或降序排序。扩展要求 (1) 对日期输入的合法性进行判断,如不能输入2010-2-30. (2) 界面友好,输入信息符合逻辑如金额不为负数等。数据使用文件存储,无需重复输入数据或所需时间等)。 2. 运动会分数统计 (一)问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) (二)基本要求 (1) 可以输入各个项目的前三名或前五名的成绩。 (2)能统计各学校总分。 (3)可以按学校编号、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 源码联系UP主 -> https://space.bilibili.com/329101171 3. 打印万年历 (一)课题内容 用C或C++编程实现一个简单、实用的万年历程序。主要功能为在屏幕上显示任意年月的月历,按每行两个月的格式输出当年或指定的任意年的年历。通过此课题,熟练掌握数组、格式输出、字符串处理、时间函数的调用、文件的各种操作,以及一些基本的日期算法思想。 (二)课题要求 课题分基本要求和扩展要求,基本要求是必须完成的,扩展要求视能力自选一个或多个完成。 基本要求 (1) 读取系统时钟,计算与日期相关的信息,首先打印出当月的月历,在当月月历的最下方也下列两行方式显示与当前有关的信息: 今天是: 2005年12月20日,星期二 当前时间是:22时40分43秒 (2) 输入任意年号能得到指定年的年历(万年历)。 (3) 将屏幕上显示的月历和年历均存为文本文件以便今后读取。 (4) 按每行两个月的格式显示今年的日历,形式如下: ***** ***** ***** ***** * * * * * * * ***** * * * * ***** * * * * * * ***** ***** ***** ***** Jan Feb ________________________________ ________________________________ Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat 1 1 2 3 4 5 2 3 4 5 6 7 8 6 7 8 9 10 11 12 …… …… 扩展要求

element UI - this.$confirm is not a function, this.$message is not a function, this.$alert is not a

在utils下新建loginout.js,引用element MessageBox 弹框后报错,this.$confirm is not a function, this.$message is not a function, this.$alert is not a function。。。 解决: loginout.js里引用 import { MessageBox } from 'element-ui' MessageBox.confirm('这是一段内容', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { 。。。。。 }) 灵感来自:elementUI——MessageBox组件源码分析 - 简书 Vue.prototype.$msgbox = MessageBox; Vue.prototype.$alert = MessageBox.alert; Vue.prototype.$confirm = MessageBox.confirm; Vue.prototype.$prompt = MessageBox.prompt;

文档理解的新时代:LayOutLM模型的全方位解读

一、引言 在现代文档处理和信息提取领域,机器学习模型的作用日益凸显。特别是在自然语言处理(NLP)技术快速发展的背景下,如何让机器更加精准地理解和处理复杂文档成为了一个挑战。文档不仅包含文本信息,还包括布局、图像等非文本元素,这些元素在传递信息时起着至关重要的作用。传统的NLP模型通常忽略了这些视觉元素,但LayOutLM模型的出现改变了这一局面。 LayOutLM模型是一种创新的深度学习模型,它结合了传统的文本处理能力和对文档布局的理解,从而在处理包含丰富布局信息的文档时表现出色。这种模型的设计思想源于对现实世界文档处理需求的深刻理解。例如,在处理一份报告时,我们不仅关注报告中的文字内容,还会关注图表、标题、段落布局等视觉信息。这些信息帮助我们更好地理解文档的结构和内容重点。 为了说明LayOutLM模型的重要性和实用性,我们可以考虑一份含有多种元素(如文本、表格、图片)的商业合同。在这样的文档中,合同的条款可能以不同的字体或布局突出显示,而关键的图表和数据则以特定的方式呈现。传统的文本分析模型可能无法有效地识别和处理这些复杂的布局和视觉信息,导致信息提取不完整或不准确。而LayOutLM模型则能够识别这些元素,准确提取关键信息,从而大大提高文档处理的效率和准确性。 在接下来的章节中,我们将详细探讨LayOutLM模型的架构、技术实现细节以及在实际场景中的应用。通过深入了解LayOutLM模型,读者将能够更好地理解其在现代文档理解领域的独特价值和广泛应用前景。 二、LayOutLM模型详解 LayOutLM模型代表了自然语言处理(NLP)与计算机视觉(CV)交叉领域的一大步。它不仅理解文本内容,还融入了文档的布局信息,为文档理解带来了革新性的进步。接下来,我们将深入探讨LayOutLM模型的关键组成部分、工作原理和实际应用。 模型架构概览 LayOutLM采用了与BERT类似的架构,但它在输入表示中加入了视觉特征。这些视觉特征来自文档中的每个词的布局信息,如位置坐标和页面信息。LayOutLM利用这些信息来理解文本在视觉页面上的分布,这在处理表格、表单和其他布局密集型文档时特别有用。 输入表示方法 在LayOutLM中,每个词的输入表示由以下几部分组成: 文本嵌入: 类似于传统的NLP模型,使用词嵌入来表示文本信息。位置嵌入: 表示词在文本序列中的位置。布局嵌入: 新增加的特征,包括词在页面上的相对位置(例如左上角坐标和右下角坐标)。 例如,考虑一个简单的发票文档,包含“发票号码”和具体的数字。LayOutLM不仅理解这些词的语义,还能通过布局嵌入识别数字是紧跟在“发票号码”标签后面的,从而有效地提取信息。 预训练任务和过程 LayOutLM的预训练包括多种任务,旨在同时提高模型的语言理解和布局理解能力。这些任务包括: 掩码语言模型(MLM): 类似于BERT,部分词被掩盖,模型需要预测它们。布局预测: 模型不仅预测掩盖的词,还预测它们的布局信息。 微调和应用 在预训练完成后,LayOutLM可以针对特定任务进行微调。例如,在表单理解任务中,可以用具有标注的表单数据对模型进行微调,使其更好地理解和提取表单中的信息。 # 示例代码: LayOutLM模型微调 from transformers import LayoutLMForTokenClassification # 加载预训练的LayOutLM模型 model = LayoutLMForTokenClassification.from_pretrained('microsoft/layoutlm-base-uncased') # 微调模型(伪代码) train_dataloader = ... # 定义训练数据 optimizer = ... # 定义优化器 for epoch in range(num_epochs): for batch in train_dataloader: inputs = batch['input_ids'] labels = batch['labels'] outputs = model(inputs, labels=labels) loss = outputs.loss loss.backward() optimizer.

Git提示 Connection closed by remote host

问题如下图: 解决: 删除./ssh目录下的config文件,如下图config文件是新增的 原因:不知道什么原因,连接外网后突然断开或导致自动增加config文件。

【EasyExcel实践】导出多个sheet到多个excel文件,并压缩到一个zip文件

文章目录 前言正文一、项目依赖二、封装表格实体和Sheet实体2.1 表格实体2.2 Sheet实体 三、核心实现3.1 核心实现之导出为输出流3.2 web导出3.3 导出为字节数组 四、调试4.1 构建调试用的实体类4.2 控制器调用4.3 测试结果 五、注册大数转换器,长度大于15时,转换为字符串5.1 实现转换器5.2 使用转换器 前言 工作中遇到一个需求,一次导出多个Excel 文件,并且每个excel中可能存在1到多个sheet页。 好在没有那种单元格合并的要求。 总体的思路是,设计两个实体,一个表示表格,一个表示sheet 数据。并且表格包含一个list 类型的sheet对象。 然后再使用ZipOutputStream、ExcelWriterBuilder、EasyExcel#writerSheet(...) 等类和方法去组装表格,最终进行压缩。 项目整体使用 java 8 和 阿里的easyexcel工具包。 正文 一、项目依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.11</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency> </dependencies> 二、封装表格实体和Sheet实体 2.1 表格实体 /** * excel数据 */ @Data public static class ExcelData { // sheet的列表 private final List<ExcelShellData<?

Java——正则表达式

1、什么是正则表达式 一个正则表达式,就是用某种模式去匹配字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过练习后,就觉得这些复杂的表达式写起来还是相当简单的,而且,一旦你弄懂它 们,你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成。 2、正则表达式的语法 正则表达式的分类 特殊字符(转义字符'|') 字符匹配符 选择匹配符 限定符 定位符 分组组合和反向引用符 3、元字符(Metacharacter) 3.1转义号 \\ \\符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。 案例: 用$ 去匹配 "abc("会怎样?用(去匹配"abc("会怎样? 在Java的正则表达式中,两个\\代表其他语言中的一个\。 需要使用转义字符的场景 . * + () $ / \ ? [] ^ {} 3.2、字符通配符 符号符号说明示例解释[]可接收的字符列表[efgh]e、f、g、h中的任意一个字符[^]不可接收的字符列表[^abc]除a、b、c之外的任意1字符,包括数字和特殊符号-连字符A-Z任意单个大写字母.匹配除\n以外的任何字符a..b以a开头,b结尾,中间包括2个任意字符长度为4的字符串\\d匹配单个数字字符,相当于[0-9]\\d{3}(\\d)?包含3个或4个数字的字符串\\D匹配非单个数字字符,相当于[^0-9]\\D(\\d)*以单个非数字字符开头,后接任意个数字字符串\\w匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z]\\d{3}\\w{4}以3个数字字符开头的长度为7的数字字符串\\W匹配非单个数字、大小写字母字符,相当于[^0-9a-zA-Z]\\W+\\d{2}以至少1个非数字字母字符开头,2个数字字符结尾的字符串 3.3、选择通配符| 在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号(|)。 符号符号说明示例解释|匹配"|"之前或之后的表达式ab|cdab或者cd 3.4、限定符 符号含义示例说明匹配输入*指定字符重复0次或n次(无要求,零到多)(abc)*仅包含任意个abc的字符串,等效于\w*abc abcabcabc+指定字符重复1次或n次(至少一次,1到多)m+(abc)*以至少1个m开头,后接任意个abc的字符串m mabc mabcabc?指定字符重复0次或1次(最多一次,0到1)m+abc?以至少1个m开头,后接ab或abc的字符串mab mabc mmabc{n}只能输入n个字符[abcd]{3}由abcd中字母组成的任意长度为3的字符串abc dbc adc{n,}指定至少n个匹配[abcd]{3,}由abcd中字母组成的任意长度不小于3的字符串aab dbc aaabdc{n,m}指定至少n个但不多于m个匹配[abcd]{3,5}由abcd中字母组成的任意长度不小于3,不大于5的字符串abc abcd aaaaa bcdab 3.5、定位符 符号含义示例说明匹配输入^指定起始字符^[0-9]+[a-z]*以至少1个数字开头,后接任意个小写字母的字符串123$指定结束字符^[0-9]\\-[a-z]+$以一个数字开头后接连接符"-",并以至少1个小写字母结尾的字符串m mabc mabcabc\\b匹配目标字符串的边界abc\\b这里说的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置cabcd cabc ccabc\\B匹配目标字符串的非边界abc\\B和\\b的含义刚刚相反cabcd cabc ccabc 3.6、分组 常用分组构造形式说明(pattern)非命名捕获。捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。(?<name>pattern)命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如:(?'name')(?:pattern)匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存 储供以后使用的匹配。这对于用"or"字符(|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) '是比'industry|industries'更经济的表达式。(?=pattern)它是一个非捕获匹配。例如,'Windows (?=95|98|NT|2000)'匹配 "Windows 2000"中的"Windows",但不匹配"Windows 3.

echarts图表滚动条带动页面窗口滚动条的问题

网上搜了很多方法不管用,后来发现每次滚动echarts或者左右滑动echarts下方都会报错,报错提示如下,看看你们的图表是否这样报错: 报错信息如下:Unable to preventDefault inside passive event listener invocation 原因分析: 我们的事件已经默认被定义为了被动事件监听。结果我们在这个事件监听中调用了event.preventDefault(),浏览器就不高兴了,报错,告诉你:“你定义的事件不是一个被动事件监听吗?不就是告诉我为了提高响应速度不要处理event.preventDefault()吗?为啥你还要调用event.preventDefault()!” 解决方案: 1、文件node_modules下,找到zrender文件。在zrender文件中找到event.js文件。 2、具体路径:zrender/lib/core/event.js。 3、找到event.js文件下的addEventListener函数,如下修改标注红色字体部分。 新增代码: el.addEventListener(name, handler, { passive: false }); 试一下,图表无论是放大缩小,或者是拖动滚动条,应该都没问题了。

大数据——一文详解数据仓库概念(数据仓库的分层概念和维度建模详解)

1、ods是什么? ods层最好理解,基本上就是数据从源表拉过来,进行etl,比如MySQL映射到Hive,那么到了Hive里面就是ods层。ods全称是 Operational Data Store,操作数据存储——“面向主题的”,数据运营层,也叫ods层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是 300 岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一ID 却有两条重复数据,在接入的时候需要做一步去重)、字段命名规范等一系列操作。 2、数据仓库层dw 数据仓库层(dw),是数据仓库的主体.在这里,从 ods层中获得的数据按照主题建立各种数据模型。这一层和维度建模会有比较深的联系。 数据明细层:DWD(Data Warehouse Detail);数据中间层:DWM(Data WareHouse Middle);数据服务层:DWS(Data WareHouse Service)。 2.1、dwd明细层 明细层 (ods:Operational Data Store,dwd:data warehouse detail) 概念: 是数据仓库的细节数据层,是对STAGE层数据进行沉淀,减少了抽取的复杂性,同时ods/dwd的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进行集中,明细层跟stage层的粒度一致,属于分析的公共资源数据生成方式: 部分数据直接来自kafka,部分数据为接口层数据与历史数据合成。这个stage层不是很清晰 2.2、dwm 轻度汇总层( MID 或 dwb , data warehouse basis) 概念: 轻度汇总层数据仓库中dwd层和dm层之间的一个过渡层次,是对dwd层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。轻度综合层与dwd的主要区别在于二者的应用领域不同,dwd的数据来源于生产型系统,并未满意一些不可预见的需求而进行沉淀;轻度综合层则面向分析型应用进行细粒度的统计和沉淀数据生成方式: 由明细层按照一定的业务需求生成轻度汇总表。明细层需要复杂清洗的数据和需要MR处理的数据也经过处理后接入到轻度汇总层。日志存储方式: 内表,parquet文件格式。日志删除方式: 长久存储。表 schema : 一般按天创建分区,没有时间概念的按具体业务选择分区字段。库与表命名。库名:dwb,表名:初步考虑格式为:dwb日期业务表名,待定。旧数据更新方式: 直接覆盖。 2.3、dws主题层( dm , data market 或dws, data warehouse service ) 概念: 又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询, OLAP 分析,数据分发等。数据生成方式: 由轻度汇总层和明细层数据计算生成。日志存储方式: 使用impala内表,parquet文件格式。日志删除方式: 长久存储。表 schema : 一般按天创建分区,没有时间概念的按具体业务选择分区字段。库与表命名。库名:dm,表名:初步考虑格式为:dm日期业务表名,待定。旧数据更新方式: 直接覆盖。 3、ads层 数据产品层(ads),这一层是提供为数据产品使用的结果数据。

九、TypeScript之Web 开发

一、Web 开发基础 1 概述 下棋游戏(XXOO)是通过Web(网页)开发实现的,因此,我们要学习Web开发的相关知识。 Web 开发涵盖以下内容: HTML 、 CSS 、 JavaScript ( HTML 、 CSS 不是本课程的重点,仅简单讲解)。 三者之间的关系: (结构)HTML负责创建页面结构。 (样式)CSS负责美化页面结构(相当于化妆)。 (行为)JavaScript负责让页面“动”起来,解锁更多动效。 2 HTML HTML ( H yper T ext M arkup L anguage ,即:超文本标记语言)负责创建页面结构。 创建第一个 HTML 步骤: 1. 创建 a .html 文件。 2. 快速生成 HTML 基本骨架:在文件中输入英文叹号( ! ),然后,按 tab 键。 3. 创建按钮标签:在 body 标签中,输入 button ,按 tab 键。 4. 打开 HTML 页面:在文件夹中找到页面文件,双击打开。 注意:页面中可见的内容,写在 body 标签中。 3 CSS CSS ( C ascading S tyle S heets ,即:层叠样式表)负责美化页面结构。 使用 CSS 的三种方式: 1.

通过JMeter压测结果来分析Eureka多种服务下线机制后的服务感知情况

文章目录 前言1. Eureka-Server的设计2. Eureka+Ribbon感知下线服务机制3.服务调用接口压测模型4.Eureka几种服务下线的方式4.1强制下线压测 4.2 发送delete()请求压测 4.3 调用DiscoveryManager压测 4.4 三方工具Actuator压测 总结 前言 上文末尾讲到了Eureka对于下线服务的感知不是很敏锐,会把已经下线的服务加载到可用的服务列表里。当轮询到该服务实例来处理请求就会出现“调用请求已经发送出去,但是接口却TimeOut、404、500…错误”,本文会使用多种服务下线方式并结合JMeter压测来具体分析 1. Eureka-Server的设计 Eureka中设计了三级缓存:一级缓存(registry注册表)——二级缓存(readWriteCacheMap读写缓存)——三级缓存(readOnlyCacheMap只读缓存)。作为经典的AP模型,读写分离,牺牲了一致性保证了高可用。(以后会分析源码) 2. Eureka+Ribbon感知下线服务机制 当客户端的服务实例正常下线,会发送心跳向Eureka服务端中的一级缓存更新信息(30S)——一级缓存会向二级缓存同步信息(立刻)——二级缓存向三级缓存同步信息(30S)——客户端从三级缓存中同步信息(30S)——Ribbon会向客户端同步缓存,更新服务列表upList(30S),可见如果是在极端情况下,感知到一个服务下线是需要120S的。(注意这并不是串行化执行,30S均为默认时间) 下面基于这个流程,采用多种下线的方式结合JMeter压测报告来研究Eureka服务下线感知情况 3.服务调用接口压测模型 采用Jmeter(100个线程—3S内请求)对服务下线后的服务调用接口进行压测,来观察接口执行情况,以及结合日志来体现Ribbon的负载均衡情况: 通过观察线程组执行完后响应的异常率,来判断已经下线的服务是否没有被Eureka、Ribbon及时更新(也就是服务的感知情况),从而使调用方调用到了不可用的服务。 服务被调用方现有8081、8083、8084三个端口的实例,本次实验统一下线其中两个服务实例,并且Ribbon负载均衡的策略都为默认 4.Eureka几种服务下线的方式 4.1强制下线 直接关闭进程,类似于在服务器上通过kill-9的方式。通过下面的案例可以看到,当我强制下线了服务下的两个服务实例之后,此时立即进行服务间的远程调用(由于Eureka的缓存机制,已经下线的服务还会在缓存的服务列表中没来得及更新,但是列表里已经被下线的实例已经无法再处理请求),调用方会报出connect refused的错误,就像这样: 在控制台中,调用方直接无法建立连接,请求已经到达目标服务,但目标服务主动拒绝了连接。 在postman中发起调用的接口则是直接报出了500错误,显示服务端存在内部问题: PS:这样下线会存在很多风险,比如进程中还有请求在处理,不建议使用 压测 15S,使用Jmeter压测模型进行压测,发现异常率高达51% 30S,使用Jmeter压测模型进行压测,发现异常率为0% 4.2 发送delete()请求 向Eureka服务端发送http请求,来删除注册表的服务信息,也就是一级缓存中的数据 @GetMapping("/service-down") public String shutDown(@RequestParam List<Integer> portParams,@RequestParam String vipAddress) { List<Integer> successList = new ArrayList<>(); //获取到服务名下的所有服务实例 List<InstanceInfo> instances = eurekaClient.getInstancesByVipAddress(vipAddress, false); //map<端口-实例id> instances.forEach(temp -> { String instanceId = temp.getInstanceId(); String appName = temp.getAppName(); int port = temp.

阿里云MQTT: 子设备上线流程

0. 背景 阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里,显然太麻烦了!我经过阅读阿里文档,发现有些简化的方法,更便于客户使用,因此分享给大家。 1. 主要信息片段 子设备 ${SubProductKey} ${SubDeviceName} ${SubDeviceSecret} 父网关 ${DadProductKey} ${DadDeviceName} ${DadDeviceSecret} Product就是所有相同属性和操作的设备的集合或者类。Key就是一串唯一标识了。 Device就是具体一个产品的实例或对象了。 Name就是设备的唯一标识,阿里要求在自己的Product内唯一即可。这就是为什么我起个dev01的名字,系统不提示重名的原因。产品名字空间不同而已。 Secret就是一个密钥,加密用到。到底是公钥还是私钥没深入研究。 2. 阿里平台准备。 父网关必须已具备上线能力。子设备是依赖父网关的MQTT通道上线的。子设备至少已经在平台添加好产品和具体设备。剩下的工作就由父网关设备内部的软件,自动让设备注册,建立拓扑,上线 3.网关内部Alink流程 3.1 动态注册 名字起的不知所云,经过试验,说白了就是查询子设备的${SubDeviceSecret} 父网关发布主题:/sys/${DadProductKey}/${DadDeviceName}/thing/sub/register 父网关订阅主题:/sys/${DadProductKey}/${DadDeviceName}/thing/sub/register_reply { "id": "123", "version": "1.0", "sys":{ "ack":1 }, "params": [ { "deviceName": ${SubDeviceName}, "productKey": ${SubProductKey} } ], "method": "thing.sub.register" } 如果返回200,${SubDeviceSecret}也就抓取到手。 3.2 建立拓扑 说白了,目的是建立子设备与网关的父子关系(如果原先已建立,也会返回成功) 父网关发布主题:/sys/${DadProductKey}/${DadDeviceName}/thing/topo/add 父网关订阅主题:/sys/${DadProductKey}/${DadDeviceName}/thing/topo/add_reply { "id": "123", "version": "1.0", "sys":{ "ack":1 }, "params": [ { "deviceName": ${SubDeviceName}, "productKey": ${SubProductKey}, "sign": "3908C94C2D9F33AC50A4CC9B1C4BCD45093E3EA4",

RIS-Assisted Communication Radar Coexistence:Joint Beamforming Design and Analysis

1、基本内容: 未来无线通信系统需要更高的数据传输率和和智能感知服务,这就对频谱资源提出了更高的需求。一方面,我们可以将频谱向高频拓展。另一方面,在多个系统之间实现频谱共享。由于雷达和通信系统在硬件、信号处理等许多方面的相似性,ISAC被提出来。ISAC有两个层面,低层面来说,就是只共享频谱,对应的系统是通信雷达共存系统,研究难点是互干扰管理;更高层面就是不仅共享频谱,还共享设备,也就是双功能雷达通信系统(DFRC),研究难点是ISAC波形的设计。 本文考虑的是通信雷达共存系统,为了消除互干扰,作者将两个RIS引入系统,一个部署在发射器抑制发射器对雷达的干扰,一个部署在接收器抑制雷达对接收器的干扰。 作者考虑了雷达功率较大和较小两种场景。 本文的目标是通过联合优化雷达的有源波束形成矩阵和RIS​​的无源波束形成矩阵来最大化通信性能,同时确保雷达发射功率约束下的雷达检测性能。作者考虑用双环罚对偶分解double-loop penalty dualdecomposition (PDD)求解。 2、系统模型: 雷达探测方向: 脉冲重复间隔(PRI): 雷达发射的脉冲信号: 方向的发射功率: 发射信号经过的时间才被接收。 方向的回波: 通信对感知的干扰:“发射机-雷达”和“发射机-RIS1-雷达”。 方向的感知SINR: ———————————————————————————————————————— 用户接收的想要的通信信号: 感知对通信的干扰:“雷达-接收器”和“雷达-RIS2-接收器” 整个epoch的平均通信SINR: 3、优化问题: ——————————————————内环———————————————————— 作者考虑在PDD框架下求解,难点在于目标函数是分式项以及感知约束中变量高度耦合。 对于目标函数,利用分式规划(FP)求解。 对于感知约束,引入辅助变量,来替换耦合部分。 感知约束变为: 将辅助变量引入的等式约束通过罚因子加入到广义拉格朗日函数中。 感知约束变成了一个difference-of-convex (DC)函数,可以使用concave-convex procedure (CCCP)进行处理。然后利用块坐标下降(BCD)求解。 ——————————————————外环————————————————————— 更新罚因子和对偶变量。 罚因子以常数衰减。 对偶变量通过KKT条件更新。 外环终止条件:约束违反在容忍范围外就终止。 约束违反程度: —————————————————更新流程———————————————————— 参考文献 [1]Y. He, Y. Cai, H. Mao and G. Yu, "RIS-Assisted Communication Radar Coexistence: Joint Beamforming Design and Analysis," in IEEE Journal on Selected Areas in Communications, vol. 40, no. 7, pp.

模拟退火算法应用——求解TSP问题

仅作自己学习使用 一、问题 旅行商问题(TSP) 是要求从一个城市出发,依次访问研究区所有的城市,并且只访问一次不能走回头路,最后回到起点,求一个使得总的周游路径最短的城市访问顺序。 采用模拟退火算法求解TSP问题,很自然的想到退火的目标函数(优化函数)应该就是总的周游距离。那么在算法中如何体现呢?那就是把城市的坐标放在一个n×2的矩阵中,矩阵中存放城市的顺序就是依次周游城市的路径,所以在求解过程中会不断的产生新的更优解(周游顺序,在算法中体现就是城市坐标的存放顺序),有了这个关键的思路就很好解决了。 二、Matlab代码 clear clc T1 = cputime; C = [ % 各个城市坐标 39.91, 116.39; % 北京 31.22, 121.48; % 上海 23.13, 113.27; % 广州 22.54, 114.06; % 深圳 30.67, 104.06; % 成都 34.27, 108.93; % 西安 31.98, 118.75; % 南京 39.92, 116.36; % 天津 28.71, 115.83; % 南昌 45.75, 126.63; % 哈尔滨 36.07, 120.38; % 青岛 38.04, 114.48; % 石家庄 29.59, 106.54; % 重庆 26.08, 119.

初试华为网络设备-交换机

目录​​​​​​​ 一.交换机的工作原理 二.交换机的三个主要功能 三.交换机的类型 四.华为交换机的系统类型 五.常用华为交换机常用配置和命令 1.查看设备信息 2.查看和修改交换机系统时间 3.修改设备命令 4.配置console登陆认证方式及超时时间 5.telnet配置 6.配置设备超级密码 7.配置aaa登陆认证 一.交换机的工作原理 交换机根据收到数据帧中的源MAC地址建立该地址同交换机端口的映射,并将其写入到MAC地址表中。交换机将数据帧中的目的MAC地址同已建立的Mac地址表进行比较,已决定由哪个端口进行转发。如数据帧中的目的Mac地址不存在Mac地址表中,则向所有端口转发。这一过程称为泛洪(flood)。广播帧和组播帧向所有端口进行转发。 二.交换机的三个主要功能 学习:以太网交换机了解每一端口相连设备的Mac地址,并将地址同相应的端口映射起来存放在交换机缓存中的Mac地址表中。转发/过滤:当一个数据帧的目的地址在Mac地址表中有映射时,它会被转发到连接目的节点的端口而不是所有端口(如该数据帧为广播/组播帧转发至所有端口)。消除回路:当交换机包括一个冗余回路时,以太网交换机通过生成树协议避免回路的产生,同时允许存在后备路径 三.交换机的类型 傻瓜式交换机:无法进行配置,无法进行划分vlan等操作,基于交换机工作原理进行转发所收到的数据包,适用于办公区域进行多终端设备进行连接。二层交换机:传统交换机可以进行配置,基于Mac地址表进行转发数据包。三层交换机:可以进行配置,在二层交换机功能上添加了路由功能,可以基于路由表进行一次转发多次通信,同样转发速度也会快很多,相对价格会比二层交换机贵很多。 四.华为交换机的系统类型 用户模式:登陆设备后,直接进入的就是用户模式, 只能执行少量查看配置命令。视图模式:用户模式下,执行system-view进入视图模式,可执行设备全局配置的命令。局部模式:视图模式下,输入局部配置命令,如interface GE1/0/0,进入接口模式,vlan 10进入vlan模式 五.常用华为交换机常用配置和命令 1.查看设备信息 display version 2.查看和修改交换机系统时间 display clock clock datetime 12:00:00 2023-11-27 3.修改设备命令 system-view sysname hostname 4.配置console登陆认证方式及超时时间 console登陆:默认console登陆无密码,任何人通过串口线直连设备console接口,可直接修改配置,管理员可配置console密码,登陆不需要用户名,初次配置时使用console。 超时时间:指连接设备后,一段时间内无操作,系统自动退出,需重新登陆,默认超时时间为10min。 #进入console配置模式 [*CE6800]user-interface console 0 #Console认证方式为password [*CE6800-ui-console0]authentication-mode password #设置console密码为密文形式huawei@123 [*CE6800-ui-console0]set authentication password cipher huawei@123 #设置超时时间为20min [*CE6800-ui-console0]idle-timeout 20 0 #使用quit返回视图模式,保存后使用display this检查配置结果,乱码是加密后的密码; 5.telnet配置 配置密文登陆验证 进入vty配置模式,0 4表示允许5个并发telnet连接 [~CE6800]user-interface vty 0 4 配置telnet使用密文认证,设置密码为Gauss_234

51单片机的智能窗帘系统【含proteus仿真+程序+报告+原理图】

1、主要功能 该系统由AT89C51单片机+LCD1602显示模块+DS18B20温度模块+DS1302时间模块+光敏传感器+步进电机+蓝牙等模块构成。适用于智能窗帘、智能门窗家具等相似项目。 可实现基本功能: 版本一: 1、LCD1602实时显示北京时间、环境温度、光照强度、手动/自动控制等信息 2、DS18B20采集温度信息 3、DS1302采集时间数据 4、光敏传感器(电位器模拟)采集光照强度信息 5、可以设置自动或手动模式:自动模式下,光照强度过高/过低(模拟大中午和天黑),步进电机自动运行关闭窗帘,光照强度适中时(天亮),自动打开窗帘;手动模式下,可以手动开启/关闭窗帘。 6、自带定时模式:按键可以设置窗帘自动开启和关闭的时间,默认8:00开启,19:00关闭。 本项目同时包含器件清单、proteus运行的项目视频、代码的纯文本文件(914行代码)和课设报告(5946字) 版本二: 加入蓝牙模式:可以通过蓝牙控制窗帘的开启和关闭。 本项目同时包含器件清单、proteus运行的项目视频、代码的纯文本文件(997行代码)和课设报告(6465字) 2、仿真 protues 仿真使用的是8.10版本,由于该软件版本迭代原因,不能确保其他版本软件能够正常运行,请安装好对应软件(版本一致或者高于这个版本都可以) 版本一: 版本二: 3、程序代码 只是放上来了部分代码,仅供参考,注释齐全。 4、原理图 版本一: 版本二: 5、报告 6.5k字,29页,纯手打,有详细的电路分析和代码解析 6、常见问题汇总 里面包含了我对各个模块的详细解析,可以结合代码一起理解。如果正巧老师问题多,这个可以帮到你哦。(不定时更新,讲解模块也会越来越多) 7、资源获取 本项目包含的所有文件都可以在:今天也不想打工,回复 “51智能窗帘” get! 项目纯手打,不是免费的哦,一杯奶茶的💴~ 希望可以帮到你哈!

Java实现Excel导出数据(下载导出) -- 有这一篇就够了

前言: 昨天有个刚毕业学妹来问: 1、如何把数据库的数据写入到excel, 2、如何导出文件到本地、或者上传到服务器又或者返回到浏览器 这里想针对这两个问题做个记录, 突然想写一下专门的excel表格导出到本地,或者返回到浏览器下载的,作者这里使用的是EasyExcel 一、初始化EasyExcel的ExcelWriter 这个是easyexcel中封装好的一个工具,下述是他的注释作用: Excel Writer 此工具用于通过 POI 将值写出到 Excel。此对象可以执行以下两个功能。 1.创建一个新的空Excel工作簿,填充值后将值写入流。 2. 编辑现有 Excel,写入原始 Excel 文件,或将其写入其他地方。 这里初始化封装了一个方法:也可以自行调用修改 1、下方代码是将数据写入excel并导入到本地的一个方法实现: /** * 导出数据到excel文件返回到前端浏览器 * @param filename 文件名 * @param dataResult 源数据 * @param clazz 数据类 * @param toFilePath 本地路径 */ public static void exportExcelToLocal(String filename, List<?> dataResult, Class<?> clazz, String toFilePath) { OutputStream outputStream = null; ExcelWriter excelWriter = null; try { if (StringUtils.isBlank(filename)) { throw new RuntimeException("

Maya 2024(3D建模、动画和渲染软件)

Maya 2024是一款非常强大的3D建模、动画和渲染软件,它提供了许多新功能和改进,以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面,Maya 2024引入了Symmetry(对称)功能,可以在网格两侧生成均匀的边,使建模师可以更加轻松地创建对称的模型。此外,Maya 2024还提供了一些新的选项,用于选择性地保留网格细节区域中的特征,例如根据边的角度或组件标记保留边的选项。此外,Maya 2024还对重新拓扑工作流进行了改进,包括界面和可用性改进,使建模师可以获得更好的结果。 在动画方面,Maya 2024提供了一些新的工具和功能,用于雕刻动画曲线和调整动画。例如,可以使用曲线图编辑器的“抓取”、“平滑”和“涂抹”曲线雕刻工具,本能地、直观地塑造关键帧组,并轻松地进行调整。此外,Maya 2024还引入了基于笔刷的雕刻Graph Editor工具,可以使用通用场景描述格式的数据来创建自定义材质,并使Maya自动将其保存到活动的USD层。 在渲染方面,Maya 2024提供了一些新的选项和功能,以帮助渲染师更加高效地进行渲染。例如,可以使用Maya标准笔刷热键来配置曲线雕刻工具笔刷半径和强度:B表示大小,M表示压力。此外,Maya 2024还为多个工作流提供了重要的稳定性修复和功能更新,例如指定相对路径和通过已更新的Maya通用场景描述(USD)插件使用显示层等。 总之,Maya 2024是一款非常强大的3D建模、动画和渲染软件,它提供了许多新功能和改进,以帮助建模师、动画师和渲染师更加高效地进行创作。 Maya 2024(3D建模、动画和渲染软件)

SVG图片选择库组件封装及使用

需求 需求: 在项目中通常需要做菜单管理,想要让左侧菜单好看一点,一般都会选择添加图标,需要自定义选择喜欢的图标,得提供一个有选择项的图标库 延伸需求:在项目中通常可能有好几个图标选择库,可能每个可选择图标库里的图标都不能相同,这就需要我们做区分展示 前置条件 需要使用到svg图片,以前有写下载使用svg图片的文章,可以参考一下 链接:在vue中使用svg 图例 1. 菜单图标库 2. 场景图标库 实现 svg文件 可以在svg文件夹的下级创建scene文件夹,在svg文件夹中的svg图片属于菜单图标库(不包含scene文件夹中的图片),scene文件夹中的svg图片属于场景图标库,如果想美观一点可以把菜单图标库的图标用文件夹归纳一下,重要的是icons文件夹下的index.js文件中的匹配 index.js文件 import Vue from 'vue' import SvgIcon from '@/components/SvgIcon'// svg component Vue.component('svg-icon', SvgIcon) const req = require.context('./svg', false, /\.svg$/) //温馨提示:要想使用scene文件夹中的图片一定要写这个哦 const scenereq = require.context('./svg/scene', false, /\.svg$/) const requireAll = requireContext => requireContext.keys().map(requireContext) requireAll(req) requireAll(scenereq) 1. 菜单图标组件 组件(@/components/IconSelect) index.vue文件 <template> <div class="icon-body"> <el-input v-model="name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons"> <i slot="suffix" class="el-icon-search el-input__icon" /> </el-input> <div class="

【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器

以下命令默认已经构建了一个 Docker Image。 # 在服务器上启动 docker (-p 端口映射,用于后续的 ssh 连接) docker run -itd -v /mnt/mount/:/home -p 8124:22 --name container-name --gpus all image-name # 进入容器中 docker exec -it container-name /bin/bash # 设置密码,后续登陆使用,比如 admin passwd # 查看 ssh 状态(出现 ssh: unrecognized service 表示 ssh 未安装) service ssh status # 安装 ssh apt-get update apt-get install openssh-server # 启动 ssh (出现 * Starting OpenBSD Secure Shell server sshd 表示启动成功) service ssh start # 打开 ssh 配置文件进行修改,并重启 vi /etc/ssh/sshd_config ``` # 修改 PermitRootLogin 和 UsePAM #PermitRootLogin prohibit-password PermitRootLogin yes # UsePAM yes UsePAM no ``` service ssh restart # 在服务器上进行连接测试,输入上面设置的密码 admin,登陆成功则没问题 ssh root@127.

Java——》线性数据结构

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 Java——》线性数据结构 一、数组Array1、特点2、优点3、缺点4、示例 二、链表1、特点2、分类2.1 单向链表(1)删除节点(2)添加节点 2.2 双向链表(1)删除节点(2)添加节点 2.3 循环链表 三、队列queue1、特点2、数据结构演示3、示例 四、栈stack1、特点2、主要操作 线性表就是数据排成像一条线的结构。 每个线性表上的数据最多只有前和后两个方向。 线性表结构:数组、链表、队列、栈 一、数组Array 数组是一种线性表数据结构。用一组连续的内存空间,来存储一组具有固定大小的相同类型的数据。在数组中,数据元素按照有序的方式进行排列,可以通过索引访问数组中的任意位置的元素。 1、特点 顺序存储:按照顺序存储在连续的内存空间中类型相同:数组中的所有元素必须是相同的数据类型索引访问:每个元素都有一个唯一的索引,可以通过索引快速访问大小固定:一旦定义了数组的大小,就不能改变。如果需要更大的存储空间,需要重新定义一个新的数组。 2、优点 访问速度快:由于数组是顺序存储的,可以通过索引直接访问数组中的元素,时间复杂度为O(1)。易于实现:数组是一种简单的数据结构,容易实现和操作。 3、缺点 大小固定:数组的大小是固定的,不能动态扩展。如果需要更多的存储空间,需要重新定义一个新的数组,这会增加额外的开销。空间利用率低:由于数组是连续的内存空间,即使某些位置没有被使用,也不能被其他数据结构使用,导致空间利用率较低。 4、示例 // 动态初始化:初始化时由程序员只指定数组长度,由系统为数组元素分配初始值 char c1[] = new char[5]; // 静态初始化: 初始化时由程序员显示置顶每个数组的初始值,由系统决定数组长度 char c2[] = new char[]{'E','D','U','Y','U'}; char c3[] = {'E','D','U','Y','U'}; 二、链表 数组是一种线性表数据结构。 通过指针将一组零散的内存块串联在一起。链表中的每个内存块被称为节点,每个节点除了存储数据之外,还需要记录链上的下一个节点的地址。 1、特点 不需要连续的内存空间有指针引用插入、删除数据效率高,时间复杂度为O(1)级别(只需更改指针指向即可);但是,随机访问效率低,时间复杂度O(n)级别(需要从链头至链尾进行遍历)。和数组相比,内存空间消耗更大,因为每个存储数据的节点都需要额外的空间存储后继指针。 2、分类 分类特点单向链表节点只有一个后继指针next指向后面的节点双向链表节点除了有一个后继指针next指向后面的节点外,还有一个前驱指针prev指向前面的节点循环链表循环链表与单向链表的唯一区别是尾节点的指针指向头节点,形成一个环 2.1 单向链表 单向链表由节点组成,每个节点都包含下一个节点的指针,表头为空,表头的后继节点是"结点10"(数据为10的结点),“节点10"的后继结点是"节点20”(数据为20的结点) (1)删除节点 (2)添加节点 2.2 双向链表 双链表由节点组成,每个结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 static final class Node { // 前一个节点 volatile Node prev; // 后一个节点 volatile Node next; // 链表节点存储的具体数据 volatile Thread thread; } (1)删除节点 (2)添加节点 2.

上海数交所与合合信息发布产业数据行业创新中心,政产学研合力为“数据航母”加速

大数据产业是数字经济创新发展、加速发展的重要方向。11月25日,2023全球数商大会在上海盛大开幕。大会以“数联全球、商通未来”为主题,聚焦数字经济时代下,数据要素推动实体经济发展的规划与成果,是数据交易领域的行业级峰会和数据要素流通市场的生态盛会。 “产业数据”是基于企业经营和供需关系形成的,对产业整体和企业经营与信用状况描述的数据,也是推动行业数字化转型,社会智能化运作的关键要素。本次大会上,上海数据交易所与上海合合信息科技股份有限公司(简称“合合信息”)共同举办了《产业数据应用与流通》主题论坛,上海市经济和信息化委员会信息化推进处(大数据处)副处长山栋明,华为云全球生态总裁康宁出席论坛并发表致辞。 论坛期间,上海数据交易所与合合信息共同发布了业内首个产业数据行业创新中心(简称“中心”)。 构建生态中心,助力产业数据从“资源”向“价值”转化 产业数据类型多样,维度各异,既包括产业趋势数据等宏观数据,也有中观数据如产业结构、空间、指标相关的数据等。从微观层面看,每个产业主体都会产生属于自己的独特数据,且其中大部分以私域的形式进行保存,例如供应链数据、交易数据、票据数据、履约数据、生产数据、工业数据等。 产业数据在企业产业洞察、发展趋势研判、金融服务获取、供应链管理等领域中有着广泛的应用需求,也为相关部门制定、推行行业支持政策提供了评估依据。然而,由于产业数据技术栈复杂,数据资源多、杂、散,流通交易链条长,对于产业链上的个体而言,想要便捷地获取高质量的产业数据并进行有效应用,还需要疏通诸多“堵点”。产业数据行业创新中心应运而生。 据悉,中心由上海数据交易所与合合信息共同运营,通过打造一站式产业数据服务新链路,构建场内场外交易融合新范式,探索跨域数据融合新项目等三大创新举措,打造合规、公平、可信的数据交易秩序和数商生态,助力产业数据从“资源”向“价值”转化。 上海数交所为“产业数据行业创新中心”揭牌 图为上海数交所党总支书记、副总经理韦志林(左)与合合信息董事、副总经理陈青山(右) 合合信息董事、副总经理陈青山提到,产业数据行业创新中心主要具备“聚、用、创、易、乘”五大应用优势:“聚”——全栈数据采集加工技术;“用”——多样高质量产业数据资源;“创”——丰富数据产品场景方案 ;“易”——畅通在线数据交易渠道;“乘”——实现数据资产资本快速增值。 供应链金融是产业数据应用的重点领域。中心重点推出了“供应链数据要素跨域融合平台”(简称“平台”),汇集了大型集团企业平台、产业互联网平台、工业企业及工业互联网平台等多源第三方数据,通过国内首个基于数据空间技术形成的数据交易创新模式进行数据融合建模,在满足产业发展和普惠金融相关数据需求的同时,帮助数商更快捷地进行数据商业化。 与传统供应链数据要素流通模式相比,平台具备四大优势,一是多源聚合数据更完整;二是信用评估信息更准确;三是实现跨区域互补,供应链节点企业可以根据地域和其他个性化需求选择更合适的银行;四是可分析出整个产业链 、供应链的发展情况,为决策提供指导,让数据价值变现和增值。 合合信息在商业大数据技术及应用领域具备多年深耕经验,是平台的核心技术支持方之一。启信宝商业大数据产品基于境内2.3亿家企业等组织机构的超过1000亿条实时动态商业大数据,形成系列基础数据服务、标准化服务、场景化解决方案,已在金融、制造业、政务等多个行业中落地。 政产学研多方协力,下好产业数据“大棋局” 数字化浪潮之下,数据开放、共享已成全球关注的焦点。《产业数据应用与流通》主题论坛邀请了来自上海交通大学、复旦大学、工商银行、大成律所、中金公司等政府、高校、金融机构及企业的行业专家,围绕产业数据应用及服务的创新生态及产业数据要素流通等议题进行深入分享。 工商银行上海市分行科创中心总经理方奇表示,工商银行非常重视以数据要素驱动金融创新发展。数据产品的应用,对持续升级改进综合服务、生态场景、流程渠道和科技架构,为企业提供更加全面、更加方便、更加智慧的服务非常有价值。 大成律所高级合伙人、上海董事、中国区金融行业牵头人曲峰提到,数据要素正成为一种重要生产要素,宏观上是数字经济的基础,微观上也会带动新经济、新产业、新模式。数据要素市场的培育、价值的提升,首先需要确定数据要素资产产权权利;其次,需要构建数据资产的交易与流通的法律保障障环节。有了这两个基础,就可以延展于数据挖掘加工、商业场景应用及数据产品设计等多个方面。同时,曲峰认为,数据要素的商业应用离不开数据交易场所,以及数据的交易体系、交换、评估、流动、跨境流动等多个环节。 学术界也在积极思考新技术在数据要素流通渠道建设中的作用。“受到隐私保护和数据安全的限制,价值难以量化,开放数据许可协议不成熟,教育、出行、医疗、金融等领域的数据几乎无法直接流通,产业数据也面临类似的问题。”上海交通大学人工智能研究院总工程师金耀辉教授表示,利用大模型进行数据治理、数据扩充可实现更高的自由度,生成式人工智能为数据流通带来更多机会,未来有望为行业提供更多优质的产业数据。 复旦大学管理学院教授、博士生导师吴肖乐分享了基于数据对产业链、供应链韧性的评估方法。“基于全产业链的数据分析,能够洞察企业之间的供应关系,评估如何从供应链的角度推动产业链的补链、延链、强链。”吴肖乐提到,数据分析有助于在招商引资等领域中促进发展动能转换,推动产业结构调整,推进产业高质量发展。 “数据要素千亿元蓝海市场已经打开,产业链各环节价值量亟待挖掘。”中金公司研究部计算机行业首席分析师、副总经理于钟海表示,从整个数据交易链上看,数据的存储、分析、流通环节占比较大。目前,数据要素市场已经走过标准规范建立、标杆打造的阶段,未来将通过平台赋能、集中运营,去推进产业演进多产融合,产生新的业态。 “数据产品供应商 、业务场景数据需求方、资产评估方、经营数据资源方、数据产品经纪方是不可或缺的贡献者。中心将在上海数据交易所建设的新型数据要素基础设施的支持下,形成国内首个基于可信数据空间技术形成的数据交易创新模式,通过优秀的数据汇聚能力、应用创新能力、流通交易能力,助力国家下好数据要素‘战略大棋局’。”陈青山表示,合合信息将与上海数据交易所一起,在产业数据行业创新中心这座“数据航母”的带领下,与生态伙伴共同开拓产业数据“蓝海”,谱写产业生态共赢之路。

Spring Boot 3.2 发行说明(机翻)

英文原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes 3.2 中的新增功能 3.2 版本的亮点包括: 支持虚拟线程对 JVM Checkpoint Restore (Project CRaC) 的初始支持SSL 捆绑包重新加载大量可观测性改进对 RestClient 的支持对 JdbcClient 的支持支持 Jetty 12支持 Spring for Apache Pulsar对 Kafka 和 RabbitMQ 的 SSL 捆绑包支持重新设计了嵌套 Jar 处理Docker 映像构建改进 从 Spring Boot 3.1 升级 参数名称发现 Spring Boot 3.2 使用的 Spring Framework 版本不再尝试通过解析字节码来推断参数名称。 如果遇到依赖项注入或属性绑定问题,则应仔细检查是否正在使用该选项进行编译。有关详细信息,请参阅“升级到 Spring Framework 6.x”wiki 的这一部分。-parameters 记录的应用程序名称 现在,只要您设置了属性,默认日志输出就会包含您的应用程序名称。 如果您更喜欢以前的格式,可以设置为 .spring.application.name``logging.include-application-name``false 自动配置的用户详细信息服务 现在,当一个或多个 、 和位于类路径上时,自动配置的会回退。 同样,在反应式应用程序中,当一个或多个 和 是类路径之一时,自动配置的现在会回退。InMemoryUserDetailsManager``spring-security-oauth2-client``spring-security-oauth2-resource-server``spring-security-saml2-service-provider``MapReactiveUserDetailsService``spring-security-oauth2-client``spring-security-oauth2-resource-server 如果您正在使用上述依赖项之一,但在应用程序中仍然需要 OR,请在应用程序中定义所需的 bean。InMemoryUserDetailsManager``MapReactiveUserDetailsService OTLP 跟踪端点 默认值 已被删除。 现在,只有当 Bean 具有值时,才会自动配置。 要恢复旧行为,请将 。management.

使用Moment.js中获取上周的开始日期和结束日期(可自定义)

前言 有时候需求是这样的,想要获取上周的开始日期和结束日期,或者前几周的时间范围 比如今天是2023.11.28号,我想获取上周的周一到周日,也就是,上周的开始日期: 2023-11-20,上周的结束日期: 2023-11-26 1.上代码,这种是直接获取的是上周的周一到周日 import moment from 'moment'; // 获取当前日期 const currentDate = moment(); // 获取上周的开始日期(周一) const lastWeekStartDate = moment(currentDate).clone().subtract(1, 'weeks').startOf('isoWeek'); // 获取上周的结束日期(周天) const lastWeekEndDate = moment(currentDate).clone().subtract(1, 'weeks').endOf('isoWeek'); console.log('上周的开始日期:', lastWeekStartDate.format('YYYY-MM-DD')); console.log('上周的结束日期:', lastWeekEndDate.format('YYYY-MM-DD')); 2.如果想获取前三周的周一到周日 import moment from 'moment'; // 获取当前日期 const currentDate = moment(); // 获取上周的开始日期(周一) const lastWeekStartDate = moment(currentDate).clone().subtract(3, 'weeks').startOf('isoWeek'); // 获取上周的结束日期(周天) const lastWeekEndDate = moment(currentDate).clone().subtract(3, 'weeks').endOf('isoWeek'); console.log('上周的开始日期:', lastWeekStartDate.format('YYYY-MM-DD')); console.log('上周的结束日期:', lastWeekEndDate.format('YYYY-MM-DD')); 3.如果想获取自定义的周一到周日 subtract(10, ‘weeks’) 这里的10可以替换成你想要的周期 import Moment from 'moment' Vue.

Qt编译数据库驱动(Qt6)

背景介绍 在高版本的Qt中官方并没有为我们提供可用的mysql和oralce插件,只提供了源代码(不能直接使用),需要我们基于这些源码自行编译得到对应的动态库(静态库)之后,才能被程序加载从而连接上相应的数据库。 关于在程序中连接数据库有很多种处理方式,比如:odbc、ado等,在Qt底层也对数据库的连接进行了封装,基于不同的连接方式为我们提供了不同的插件(二进制代码,在需要的时候被加载,表现形式为动态库、静态库)。 查看Qt版本 查看mysql版本 MySQL的版本是Ver 8.0.31 for Win64 on x86_64。这意味着你的MySQL是运行在64位Windows操作系统上的,并且安装的MySQL版本是64位的。 注意事项 Qt 编译套件的位数和数据库的位数必须相同,都是32位或都是64位。 编译驱动步骤 1.确保Qt下载了源码 2.找到源码目录 3.打开项目文件 问题:发现mysql文件夹中,没有以前版本的mysql.pro文件,可供编译 用MinGW编译 4. 新建一个目录专门用来生成驱动 原因:mysql的默认安装目录存在空格,将会导致找不到对应的文件,所以需要将mysql文件夹中的部分文件夹复制到该临时文件夹中,再进行编译。 5.用Qt Creator打开项目 6.选用编译器 7. Qt Creator会自动配置好项目 8.找到mysql的目录 9.将该文件夹下的include和lib文件夹复制到你的另一个工作目录 10.从项目文件中找到并打开.cmake.conf文件 在末尾增加三句话 规则 我的 set(QT_REPO_MODULE_VERSION "6.2.4") SET(FEATURE_sql_mysql ON) SET(MySQL_INCLUDE_DIR "D:/Colin/temp/include") SET(MySQL_LIBRARY "D:/Colin/temp/lib/libmysql.lib") 报错(不一定都有) 1. 在其他地方已经编译过了,将原来的缓存目录(build-sqldrivers-Desktop_Qt_6_2_4_MinGW_64_bit-Debug)删除, 2. 修改D:\App\QT\6.2.4\Src\qtbase\src\plugins\sqldrivers\mysql\qsql_mysql.cpp文件第1256行 11.编译成功 12.查看生成的文件 路径:D:\App\QT\6.2.4\Src\qtbase\src\plugins\build-sqldrivers-Desktop_Qt_6_2_4_MinGW_64_bit-Debug\plugins\sqldrivers 13. 将编译好的驱动复制到编译器的驱动插件文件夹中 14.将MySQL的lib和dll文件给编译器 15.测试代码 1)在pro文件中添加数据库模块 2)回想一下密码 3)源文件 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); QStringList list = QSqlDatabase::drivers(); qDebug() << list; QSqlDatabase db = QSqlDatabase::addDatabase("

【Linux】初识重定向(输入输出)

一切皆文件 这是Linux的设计理念,因为这个理念的存在我们可以使用统一的方法对待不同的东西,,这也是为什么嵌入式之类的会需要Linux,因为用LInux来操纵硬件真的很方便 另外我们下文也会都基于这个理念来命名, 比如:显示器我们叫显示器文件 目录 输出重定向:追加重定向:输入重定向: 输出重定向: 回到主题: 我们先看如下的行命令 echo是一个向显示器文件输出的命名,"中有什么就会打印什么到屏幕中",就像上图一样。 但是如果我们在echo时加入一个>符号,我们就会创建一个log.txt的文件,并且其中有内容,正是我们原本要输出到屏幕上的内容 这就是输出重定向,把原本要输出到显示器文件上的内容重定向到另一个普通文件中 故>就是输出重定向的符号。 性质: 当没有文件时创建文件,有文件时清空文件将原本向一个文件输出的数据转移到另一个文件 我们知道,Linux大部分是C语言编写的,这个就像C语言中的打开文件,创建文件 此时我们创建一个C语言文件,会得到一个data.txt的文件 我们进行下图的操作,就会比较清晰的看到>就是以"w"方式打开文件 一一一一一一一一一分割线一一一一一一一一一 追加重定向: 输出重定向是一个>,相当于"w"方式打开 追加重定向是两个>>,相当于"a"方式打开 一一一一一一一一一分割线一一一一一一一一一 输入重定向: 我们先了解一个cat命令的特性,我们都知道cat命令是打印的命令,如果我们不在cat后边加上要打印的文件,就成了从键盘输入,输入什么就打印出来什么(图片不容易展示,还是自己操作最好哦) 那么输出重定向的符号当然就是<,相当于以"r"的方式打开 将原本从键盘输入的变成了从文件输入 当然此篇只是初识,一个大体的了解,博主也会继续更新新的内容 欢迎讨论哦

HuggingFace学习笔记--datasets的使用

目录 1--datasets的使用 1-1--加载数据集 1-2--查看数据集 1-3--打乱和排序数据集 1-4--选择和筛选数据集 1-5--划分数据集 1-6--修改数据集 1-7--导出数据集 1--datasets的使用 1-1--加载数据集 代码: from datasets import load_dataset, load_from_disk if __name__ == "__main__": # 加载数据集 dataset = load_dataset(path = 'lansinuote/ChnSentiCorp') # 保存数据集 dataset.save_to_disk(dataset_dict_path = './data/ChnSentiCorp') # 从本地加载数据集 dataset = load_from_disk('./data/ChnSentiCorp') print(dataset) 输出结果: DatasetDict({ train: Dataset({ features: ['text', 'label'], num_rows: 9600 }) validation: Dataset({ features: ['text', 'label'], num_rows: 1200 }) test: Dataset({ features: ['text', 'label'], num_rows: 1200 }) }) 1-2--查看数据集 代码: from datasets import load_from_disk if __name__ == "

Deep Reinforcement Learning Based Resource Allocation andTrajectory Planning in Integrated Sensing

1、基本内容: ISAC通过共享设备和频谱,可以大大降低硬件成本和训练开销,从而提高频谱效率和能量效率。由于UAV具有可控的移动性,部署的灵活性及其低廉的成本,利用UAV作为空中ISAC基站不仅可以通过移动建立直视路径,而且可以大大增加ISAC系统的灵活性。但是,由此带来的调度和轨迹规划问题是设计难点。 本文联合优化用户关联、无人机轨迹规划和功率分配,以最大化无人机的最小加权频谱效率。 (1)作者首先利用对称群对原问题进行了等效变换,然后利用SAC算法求解。为了提高样本效率,作者引入了两种数据增强方案:random和adaptive。 (2)利用多智能体SAC(MASAC)求解问题。 2、系统模型: 多无人机(2D)、多目标用户 无人机位置: 一个时隙飞行的最大距离: 无人机间的最小避免碰撞距离: 用户协同:每架无人机可服务多个目标用户,且每个目标用户仅由一架无人机服务。 无人机最大能量约束: —————————————————————————————————————————— 通信信道增益: 感知信道增益: 通信频谱效率: 感知频谱效率: 加权频谱效率: 长期的加权频谱效率: 3、优化问题: 混合动作空间: 因为,所以在设计奖励函数时,需要引入Jain 公平指数。 Jain 公平指数: 奖励函数: 作者提出每个无人机的索引都是认为安排的,那么可以对其索引进行全排列,这样可以轻松得到其对称群,将对称群的数据也加入到经验池,相当于实现经验池数据的扩充。(没太看懂,感觉就是把一组数据复制了多次) 数据增强方案: (1)random:每个episode从对称群中随机选一定数量的轨迹。 (2)adaptive:随着算法训练,从对称群中选取的轨迹适应性减少。 选取数量: 参考文献 [1]Y. Qin, Z. Zhang, X. Li, W. Huangfu and H. Zhang, "Deep Reinforcement Learning Based Resource Allocation and Trajectory Planning in Integrated Sensing and Communications UAV Network," in IEEE Transactions on Wireless Communications, vol. 22, no. 11, pp.

Python Flask 基础入门第一课:创建Flask app并与前端进行简单交互

Flask 基础入门第一课 介绍 Flask 是一个使用 Python 编写的轻量级 Web 框架,它被广泛应用于开发 Web 应用和 API。它具有简洁、灵活和易于上手的特点,使得它成为学习和构建 Web 应用的理想选择。在本篇教程中,我们将介绍 Flask 的基础知识,并提供一些可实际运行的示例代码,同时附带前端代码,以帮助你快速入门。 环境设置 在开始之前,我们需要确保你的开发环境已经安装了 Flask。你可以使用以下命令通过 pip 安装 Flask: pip install flask 安装完成后,我们可以开始编写我们的第一个 Flask 应用程序。 Hello, Flask! 首先,让我们创建一个简单的 Flask 应用,用于输出 “Hello, Flask!”。 # app.py from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello, Flask!' if __name__ == '__main__': app.run() 在上面的示例代码中,我们导入了 Flask 类,并创建了一个应用实例 app。然后,我们定义了一个路由 /,并使用 @app.route 装饰器将该路由与 hello 函数绑定。hello 函数将返回 “Hello, Flask!”。最后,通过 app.run() 启动应用。

Ubuntu使用ufw防火墙实现端口转发

很多服务器往往对外网络不友好,在连接ssh和Windows远程桌面等操作时,需要借助另一台对内网络友好的服务器进行tcp转发,以达到优化连接质量。 Ubuntu默认防火墙是ufw,很多网上的资料,多数为卸载ufw安装iptables实现,那么想要保留ufw实现转发需要哪些操作呢? 1、修改 /etc/default/ufw,找到 DEFAULT_FORWARD_POLICY,修改为: DEFAULT_FORWARD_POLICY="ACCEPT" 2、开启转发,修改 /etc/sysctl.conf,增加一行 net.ipv4.ip_forward=1 然后执行命令 sysctl -p 使其生效。 3、修改 /etc/ufw/before.rules,在 *filter 之前,加入以下这段: *nat :PREROUTING ACCEPT [0:0] -A PREROUTING -p tcp -m tcp -d $from_ip --dport $from_port -j DNAT --to-destination $to_ip:$to_port -A POSTROUTING -j MASQUERADE COMMIT 请把 f r o m i p 、 from_ip、 fromi​p、from_port、$to_ip 和 $to_port 变量修改为实际值,如: -A PREROUTING -p tcp -m tcp -d 172.10.10.2 --dport 80 -j DNAT --to-destination 172.16.10.6:80 4、把相关端口打开 sudo ufw allow from any to any port $port 或

Mysql——》int(1)和 int(10)区别

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoDB】 总结——》【Elasticsearch】 文章名称 1、UNSIGNED:无符号2、ZEROFILL:填充零3、长度4、总结 不同类型的最大存储范围是不一样的。 类型单位(字节)有符号取值范围无符号取值范围tinyint1-128 ~ 1270 ~ 255smallint2-32768 ~ 327670 ~ 65535mediumint3-8388608 ~ 83886070 ~ 16777215int4-2147483648 ~ 21474836470 ~ 4294967295integer4-2147483648 ~ 21474836470 ~ 4294967295bigint8-9223372036854775808 ~ 92233720368547758070 ~ 18446744073709551615 1、UNSIGNED:无符号 表示不允许负值。 Q:有符号 VS 无符号? A: 相同: 相同的存储空间相同的性能 不同: 不同的存储范围 2、ZEROFILL:填充零 如果数据宽度小于指定长度,则在数字前面填充零'0'。 当使用zerofill 时,默认会自动加unsigned(无符号)属性。 3、长度 数值类型设置的长度并不影响该数值字段的取值范围,只是规定了用来显示字符的个数。 长度只有在设置 ZEROFILL 即 “填充零” 后才有所意义。 比如 int(3) 存储 1 ,填充零时会填充为 001。 CREATE TABLE `test` ( `num` int(3) DEFAULT NULL, `num_zerofill` int(3) unsigned zerofill DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试'; INSERT INTO `test` (`num`, `num_zerofill`) VALUES (1, 1); INSERT INTO `test` (`num`, `num_zerofill`) VALUES (2, 2); INSERT INTO `test` (`num`, `num_zerofill`) VALUES (3, 3); INSERT INTO `test` (`num`, `num_zerofill`) VALUES (4, 4); INSERT INTO `test` (`num`, `num_zerofill`) VALUES (5, 5); 4、总结 1.

KofamScan-KEGG官方推荐的使用系同源和隐马尔可夫模型进行KO注释

文章目录 简介安装使用输入蛋白序列输出detail-tsv格式输出detail格式输出mapper格式 输出结果detail和detail-tsv格式mapper格式常用命令tmp目录 与emapper结果比较其他参数参考 简介 KofamScan 是一款基于 KEGG 直系同源和隐马尔可夫模型(HMM)的基因功能注释工具,可通过同源搜索和预先计算的自适应分数阈值,将 KEGG 同源物(KOs)分配给蛋白质序列的隐马尔可夫模型(KOfam)数据库。在线版本可在 https://www.genome.jp/tools/kofamkoala/ 上获取。KofamKOALA 比现有的 KO 分配工具更快,其准确性可与性能最好的工具相媲美。KofamKOALA 的功能注释有助于将基因与 KEGG 通路图等 KEGG 资源联系起来,并促进分子网络的重建。 安装 # 软件 (base) [yut@io02 ~]$ mamba install -c bioconda kofamscan # 数据库 # filezila打开ftp.genome.jp看一下最新版数据库更新时间 mkdir -p KoFamDB20231025 cd KoFamDB20231025 #数据库: wget ftp://ftp.genome.jp/pub/db/kofam/ko_list.gz wget ftp://ftp.genome.jp/pub/db/kofam/profiles.tar.gz gunzip ko_list.gz tar xvzf profiles.tar.gz 使用 输入蛋白序列 查询文件是包含一个或多个氨基酸序列的 FASTA 文件。不能使用核苷酸序列。每个序列必须有一个唯一的名称。序列名称是介于标题符号(“>”)和第一个空白字符(空格、制表符、换行符等)之间的字符串。请勿在">"之后使用空格。 (base) [yut@node01 TestData]$ grep -c ">" GCA_002343985.1_ASM234398v1_genomic.faa 2486 # 蛋白数量 输出detail-tsv格式 time exec_annotation -p ~/Database/KoFamDB20231025/profiles -k ~/Database/KoFamDB20231025/ko_list --cpu 10 --tmp-dir .

Python 安装 启动项目 有线版/离线版

测试机器:Linux Centos7 一,安装Python 有线版: 1、首先检查机器的gcc版本(要求版本在4.8.5) gcc --version 2、安装前置依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel 3、下载Python-3.7.4 wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz 4、解压并进入 tar -xvf Python-3.7.4.tar.xz 5、配置安装目录 ./configure --prefix=/usr/local/python3 6、执行安装 make && make install 7、查看python软链接 cd /usr/bin ll python* 8、清除python软链接的连接信息 unlink /usr/bin/python 8、更换python软链接的连接地址 ln -s /usr/local/python3/bin/python3 /usr/bin/python 9、验证是否成功 (如果提示是3.7.4版本说明是成功) python -V 10、查看pip软链接(如果显示不存在,或者版本不是19.0.3,需要更换pip软链接的地址) cd /usr/bin ll pip* # 如果存在pip执行如下命令,清除pip软链接的地址信息,不存在不用执行 unlink /usr/bin/pip 11、更换pip软链接的连接地址(如果查询的pip版本就是19.0.3无需执行如下命令) ln -s /usr/local/python3/bin/pip3 /usr/bin/pip 12、验证pip是否成功(如果提示19.0.3版本说明成功) pip -V 离线版 1、首先检查机器的gcc版本(要求版本在4.

Sentinel网关限流

背景 在微服务架构下,每个服务的性能都不同,为避免出现流量洪峰将服务冲垮,需要依赖限流工具来保护服务的稳定性。sentinel是阿里提供的限流工具,社区活跃,功能也很全面,包含实时监控、流控、熔断等功能。它也提供了spring-cloud-gateway的支持,可以很方便和spring-gateway进行整合。 目标 spring-gateway服务添加sentinel支持,并通过sentinel dashboard进行规则配置,规则数据存在nacos里,支持规则变更实时生效。 方案 服务结构 spring-gateway改动 引入工程依赖 在pom文件里添加sentinel的依赖: <!--sentinel支持spring--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!--自动集成spring gateway--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId> </dependency> <!--支持nacos的动态数据源--> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> </dependency> 加载限流规则 在application.properties文件里添加sentinel规则对应nacos配置信息: project.name=spring-gateway sentinel.nacos.default.namespace=SENTINEL_GROUP spring.cloud.sentinel.datasource.gw_api_group.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.gw_api_group.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.gw_api_group.nacos.data-id=${project.name}-gw_api_group-rules spring.cloud.sentinel.datasource.gw_api_group.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.gw_api_group.nacos.data-type=json spring.cloud.sentinel.datasource.gw_api_group.nacos.rule-type=gw_api_group spring.cloud.sentinel.datasource.gw_flow.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.gw_flow.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.gw_flow.nacos.data-id=${project.name}-gw_flow-rules spring.cloud.sentinel.datasource.gw_flow.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.gw_flow.nacos.data-type=json spring.cloud.sentinel.datasource.gw_flow.nacos.rule-type=gw_flow spring.cloud.sentinel.datasource.degrade.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.degrade.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.degrade.nacos.data-id=${project.name}-degrade-rules spring.cloud.sentinel.datasource.degrade.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.degrade.nacos.data-type=json spring.cloud.sentinel.datasource.degrade.nacos.rule-type=degrade spring.cloud.sentinel.datasource.system.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.system.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.system.nacos.data-id=${project.name}-system-rules spring.cloud.sentinel.datasource.system.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.system.nacos.data-type=json spring.cloud.sentinel.datasource.system.nacos.rule-type=system spring.cloud.sentinel.datasource.authority.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.authority.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.authority.nacos.data-id=${project.name}-authority-rules spring.cloud.sentinel.datasource.authority.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.authority.nacos.data-type=json spring.cloud.sentinel.datasource.authority.nacos.rule-type=authority spring.cloud.sentinel.datasource.param_flow.nacos.server-addr=${spring.cloud.nacos.config.server-addr} spring.cloud.sentinel.datasource.param_flow.nacos.namespace=${spring.cloud.nacos.config.namespace} spring.cloud.sentinel.datasource.param_flow.nacos.data-id=${project.name}-param_flow-rules spring.cloud.sentinel.datasource.param_flow.nacos.group-id=${sentinel.nacos.default.namespace} spring.cloud.sentinel.datasource.param_flow.nacos.data-type=json spring.cloud.sentinel.datasource.param_flow.nacos.rule-type=param_flow 限流处理 请求击中限流规则后,我们要对限流异常进行处理。可以通过自定义BlockRequestHandler来定制处理逻辑,也可以使用sentinel spring gateway的默认处理器,支持需要在配置文件里加上一下信息:

Linux命令(134)之install

linux命令之install 1.install介绍 linux命令install是用来复制文件并设置其属性 2.install用法 install [参数] source destination install参数 参数说明-m设定目标文件权限,默认为755-o设定目标文件属主-g设定目标文件属组-d创建目录 3.实例 3.1.复制/etc/passwd文件至/tmp目录,并设置文件权限为777 命令: install -m 777 /etc/passwd /tmp [root@centos79 tmp]# cd /tmp [root@centos79 tmp]# install -m 777 /etc/passwd /tmp [root@centos79 tmp]# ls -l passwd -rwxrwxrwx 1 root root 2397 11月 24 09:20 passwd [root@centos79 tmp]# 3.2.复制/etc/passwd文件至/tmp目录,并设置属主为zhangtengjiao,属组apache,文件权限为777 命令: install -m 777 -o zhangtengjiao -g apache /etc/passwd /tmp [root@centos79 tmp]# cd /tmp [root@centos79 tmp]# install -m 777 -o zhangtengjiao -g apache /etc/passwd /tmp [root@centos79 tmp]# ls -l passwd -rwxrwxrwx 1 zhangtengjiao apache 2397 11月 24 09:23 passwd [root@centos79 tmp]# 3.

【python】Python将100个PDF文件对应的json文件存储到MySql数据库(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C++/Python语言 👉公众号👈:测试开发自动化【获取源码+商业合作】 👉荣__誉👈:阿里云博客专家博主、51CTO技术博主 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。 Python将100个PDF文件对应的json文件存储到MySql数据库(源码) 目录 Python将100个PDF文件对应的json文件存储到MySql数据库(源码)1. 需求描述2. 结果展示3. 代码分析3. 1 导入模块3.2 数据库配置3.3 数据库连接3.4 创建数据库表3.5 数据插入函数3.6 加载和处理JSON数据3.7数据检索函数1.8 示例检索和清理 部分代码 1. 需求描述 给100篇PDF文件与其一一对应的json文件,假定这一百篇PDF文件存储于D盘的名为100PDF的文件夹中,json文件存储在D盘名为100JSON的文件夹中。 要求: 1.利用python对接数据库,将这100篇PDF和对应的JSON文件存储在名为Mypdf的数据库中。 2.写一段python代码,能够调用这100篇 PDF和其对应的JSON文件。 100_PDF_MetaData.json 部分内容如下: { "elsevier_05cbcb9ef5629bc25e84df43572f9d1eddb9a35f": { "date": "1981-12-01T00:00:00", "ref_paper": [], "conference": "", "keywords": [], "year": 1981, "author": { "affiliation": [ "Chemistry Department, B-017, University of California at San Diego, La Jolla, CA 92093 U.S.A.", "Chemistry Department, B-017, University of California at San Diego, La Jolla, CA 92093 U.

冒泡排序,迈开跑路第一步

#include<iostream> #include<string> using namespace std; int main() { int arr[] = { 7,8,6,3,2,4,8,6,5,1 }; int len = sizeof(arr) / sizeof(arr[0]); int temp = 0; for (int i = 0; i < len-1; i++) { for (int j = 0; j < len-i-1; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for (int i = 0; i < len; i++) { cout << arr[i] << endl; } system("

MATLAB 和 Simulink 官方文档下载地址

MATLAB 官方文档中文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html 如图: MATLAB 官方文档英文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/matlab/index.html?lang=en 如图: Simulink 官方文档中文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/simulink/index.html 如图: Simulink 官方文档英文版下载网址: https://ww2.mathworks.cn/help/pdf_doc/simulink/index.html?lang=en 如图: