音频筑基:巴克谱和梅尔谱辨析 是什么深入了解相关参考 在音频信号处理中,巴克谱和梅尔谱是我们经常遇到的概念,也是语音处理中常用到的频域特征,这里谈谈自己对它们的理解。
是什么 巴克谱又称Bark Spectrum,梅尔谱又称Mel Spectrum,其中异同梳理如下:
相同点: Bark谱和Mel谱都是将线性频谱映射到非线性谱上的表征,根据不同频带的感知能力来划分,但它们的核心思想不同。这两种谱都是语音信号处理中常用的特征提取方法,它们可以用于基频、降噪、编解码、特殊声音检测等领域。 不同点: 机理不同: BFCC(Bark-Frequency Cepstral Coefficents),人耳对响度感知灵敏度确定的频带划分方法, amplitude/loudnessMFCC(MelScale-Frequency Cepstral Coefficents),人耳对音高感知灵敏度确定的频带划分方法, pitch 映射函数不同: Bark谱将线性频谱映射到Bark域上,以符合人耳听觉机理。在Bark域上分布是非线性的。Bark谱通常基于MDCT弄的,常用于编解码领域。Mel谱将线性频谱映射到Mel频率域(对数log)上,以模拟人类听觉系统机理。在Mel频域上,分布是线性的。Mel谱通常基于STFT弄的,使用更广泛。 两者的区别在于映射函数不同,Bark谱的映射函数是非线性的,而Mel谱的映射函数是线性的。 深入了解 巴克谱/bark刻度具体如何解释?
bark刻度指的是频点分带策略按人耳听觉感知特性,对0-15500Hz频点从听感上进行等间距划分24个带,低于500Hz的bark刻度近似线性,高于500Hz的bark刻度近似对数尺度。bark谱划分最高到15.5kHz,若到20kHz需增加为25个带(15.5-20k)bark谱的关键在于临界带的宽度,而非具体位置 相关参考 语音特征小结 - 知乎 (zhihu.com)],link音频处理中的尺度–Bark尺度与Mel尺度_bark(巴克)频率尺度-CSDN博客,linkBark谱维基百科,link
//用word方式计算正文字数 function fnGetCpmisWords(str){ sLen = 0; try{ // 标签做特殊处理 str = str.replace(/<\/?[^>]+(>|$)| /gi, "龘"); //先将回车换行符做特殊处理 str = str.replace(/(\r\n+|\s+| +)/g,"龘"); //处理英文字符数字,连续字母、数字、英文符号视为一个单词 str = str.replace(/[\x00-\xff]/g,"m"); //合并字符m,连续字母、数字、英文符号视为一个单词 str = str.replace(/m+/g,"*"); //去掉回车换行符 str = str.replace(/龘+/g,""); //返回字数 sLen = str.length; }catch(e){ } return sLen; }
😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。
🎈 本文专栏:本文收录于洲洲的《送书福利》系列专栏,该专栏福利多多,只需 关注+点赞+收藏 三连即可参与送书活动!欢迎大家关注本专栏~专栏一键跳转
🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以私信我加入我的社群~社群中将不定时分享各类福利
🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!点此即可获得联系方式~
本文目录 一、前言二、什么是OTA?三、OTA方案的特点1、时间短、效率高2、合理使用无线资源,提升终端更新的服务效率3、通用性 四、OTA系统的参考架构和服务流程五、抽奖方式总结 一、前言 2020年,特斯拉发布过一次OTA更新,车主可以通过这次系统更新获得座椅加热功能。当时,这则新闻震惊了车圈和所有车主,彼时的大家还没有把汽车当作可以“升级”的智能设备。
如今3年过去了,车主对各家车企的OTA升级早已见怪不怪。
在智能设备早已普及的今天,大家对“软件升级”这个概念已经非常熟悉:
软件可以升级、个人电脑可以升级、手机系统可以升级……
但对于物联网(IoT)设备的升级,大家也许还会感到陌生和好奇。为什么原本不具备加热功能的座椅或方向盘,仅通过一次软件升级,就能获得新功能呢?
这就要引出我们今天的主角——OTA。
二、什么是OTA? OTA(Over-The-Air,空中下载技术)是一种无线传输技术,用于在物联网设备之间进行远程更新和配置。OTA指的是通过无线通信网络来远程更新或升级嵌入式系统中的软件或固件。OTA 更新是一种方便的方法,用于将新功能、改进后的性能、安全补丁或其他更改推送到嵌入式设备,而无须物理接触设备或用户手动干预。
OTA简化了设备的更新和维护过程。传统的软件更新方法通常需要用户将设备带到服务中心或使用有线连接进行更新,这既耗时又麻烦。而OTA技术则允许设备自动接收并安装更新,大大节省了时间和精力。OTA技术提高了设备的可靠性和安全性。通过定期更新设备软件,可以修复潜在的安全漏洞和性能问题,从而降低设备被攻击和损坏的风险。OTA技术可以实现远程诊断和故障排除,帮助用户更快地解决问题。 在物联网领域,OTA技术被广泛应用于各种设备,如智能家居、智能城市、工业自动化等。
三、OTA方案的特点 面对远程更新所面临的挑战,物联网平台远程更新方案需要具有如下特点:
1、时间短、效率高 物联网平台应尽可能减少远程升级的时间,提高升级效率。
·通过控制升级包的大小,采用差分分组来降低升级包的大小,减少远程网络传输时间。·通过模块内升级提高升级的灵活度。·增加断点续传功能,避免终端故障或通信中断造成的数据重传,减少数据传输时间。 2、合理使用无线资源,提升终端更新的服务效率 为了提升无线资源的使用效率,终端远程更新服务应该实现多任务的并发,一个任务对应一次远程更新计划,其中包含一组待更新的远程终端。同时,为了保障同一无线区域中其他终端业务的正常使用,物联网平台应对进行更新操作的终端数量进行限制。
高可靠性
高可靠性是为了保障终端更新的效率。
远程更新的管理和控制要精细、准确、智能化。物联网平台应能根据具体终端的状态进行有效性检查(如版本、文件类型、升级包大小等),然后再触发终端远程更新流程。通过引入状态机的机制、对远程更新过程实施控制并实现异常处理,能够保障端云间控制的协同,降低远程更新操作的风险。在远程升级过程中,为了避免升级包数据可能出错或丢失,要考虑使用升级包的校验机制来确保升级包的完整性,使用可靠的传输协议保证数据传输的可靠性,并使用物联网平台的重试策略保证传输和升级过程的稳定性。 3、通用性 通用性是指物联网平台接入的不同领域、不同种类的异构终端应该使用相同的终端更新流程。这样可以最大限度地降低终端远程更新的维护成本,实现用户的自服务、自管理,以及对异构终端的规模化更新。
终端远程更新方案需要做到控制流和业务流的分离,控制流不受终端所处环境的影响。控制流采用标准、开放的国际标准协议承载,保证技术方案的可实施性。兼容升级包,并支持业务流的个性化升级,而且支持第三方差分服务商提供的差分包升级服务。 四、OTA系统的参考架构和服务流程 物联网云平台远程更新系统的结构由服务端和终端两部分组成。
远程更新服务端是物联网平台的一个功能模块,主要实现用户自服务和远程更新的管理控制功能。用户自服务是指用户通过门户方式进行远程更新任务的制定和远程更新状态的查询。任务制定内容包括更新版本、升级包、待升级终端组和更新策略等;远程更新管理包括更新的触发、升级包下载和安装控制,以及下载和安装失败时的策略执行控制。
升级包的生成和下载在服务端完成,并支持两种方式:
一种是物联网平台为待升级的终端提供下载服务,这种方式是用户通过门户上传升级包,物联网平台负责升级包的管理;
另一种是第三方差分服务器提供差分分组的生成和下载,在这种方式下,用户在制定任务时需要选择第三方差分服务器的访问地址。
无论是哪种方式,服务端和终端都要支持断点续传功能。
远程更新时,终端需要根据服务端的指示来下载、安装升级包并上报安装结果。终端下载应支持断点续传功能和升级包的校验功能。终端安装应支持安装和容错功能,容错是指终端在安装阶段对故障进行隔离和处理,以确保安装失败时不影响终端的正常运行。
远程更新服务流程包括更新任务制定、更新触发、升级包下载和安装4个阶段。
五、抽奖方式 抽奖送书老规矩(不点赞收藏中奖无效):注意记得关注博主及时获取中奖通知。
1. 点赞+收藏 文章 2. 评论区留言:我要成为架构师(留言才能进入奖池,每人最多留言三条) 3. 周日晚(2024年1月7日)八点随机抽奖3人 4. 京东自营购买链接:https://item.jd.com/14305756.html 总结 Hello,各位看官老爷们好,洲洲已经建立了CSDN技术交流群,如果你很感兴趣,可以私信我加入我的社群。
📝社群中不定时会有很多活动,例如每周都会包邮免费送一些技术书籍及精美礼品、学习资料分享、大厂面经分享、技术讨论、行业大佬创业杂谈等等。
📝社群方向很多,相关领域有Web全栈(前后端)、人工智能、机器学习、自媒体变现、前沿科技文章分享、论文精读等等。
📝不管你是多新手的小白,都欢迎你加入社群中讨论、聊天、分享,加速助力你成为下一个技术大佬!也随时欢迎您跟我沟通,一起交流,一起成长。变现、进步、技术、资料、项目、你想要的这里都会有
📝网络的风口只会越来越大,风浪越大,鱼越贵!欢迎您加入社群~一个人可以或许可以走的很快,但一群人将走的更远!
📝关注我的公众号(与CSDN同ID:程序员洲洲)可以获得一份Java 10万字面试宝典及相关资料!~
📝想都是问题,做都是答案!行动起来吧!欢迎评论区or后台与我沟通交流,也欢迎您点击下方的链接直接加入到我的交流社群!~ 跳转链接社区~
源自:【C++】-命名空间的概念及使用_命名空间的概念及作用-CSDN博客
摘抄:
项目面板
素材箱
标签
工具面板
轨道选择工具
波纹编辑工具
视频裁剪工具
时间轴面板
时间轴相关快捷键
素材编辑
源面板
插入
节目面板
基本声音
效果面板
效果快捷键
视频效果
视频过渡
全部面板
通用快捷键
效果控件
效果控件通用结构
码表
运动
不透明度
字幕组
字幕添加
【网易见外工作台】字幕文件生成
字幕风格
Lumetri颜色面板
Lumetri颜色使用流程
基本校正
编辑栏
时间轴配置
编辑栏
导出功能
发布平台
PR用例
概念篇 ★
序列
序列预设
序列设置
基本校正
实例导航
素材箱
已经导入到项目面板的视频、音频、图片等素材可以通过两种方式来管理:素材箱、标签分类;
将项目面板里的列表管理方式切换为列表形式,ctrl + B 新建一个素材箱,拖拽素材进对应素材箱,和计算机管理文件夹是一样。
标签
在列表管理形式的最左边有标签分类(各类颜色),在项目面板单个素材上右键选择"标签",可以修改标签的颜色:
轨道选择工具
选中轨道选择工具,点击时间轴面板中的一个素材时,会选中这一素材后边(前边)所有的素材;
按A表示轨道选择工具快捷键,并选中这一素材后边所有的素材;
按shift表示单选一个轨道,并选中这一素材后边所有的素材;
按 shift + A 表示反选这一素材往前所有的素材;
波纹编辑工具
波纹编辑,就是说当将一段视频删除或添加了一段视频,时间线后面的所有视频都会自动向前或向后移动,保证所有视频衔接完整。
首先把鼠标放在视频边缘,这里面会出现一个红色的箭头,直接拖动就可以实现视频的裁剪
此时视频间会留下一个缝隙,右键选择波纹删除,对间隙进行删除即可,但当我们要对视频进行延长,就需要我们预留位置才可以进行延长,若不预留则无法进行操作
这里的波纹编辑工具就能够轻松的帮助我们解决上面的问题,不仅可以删除不留缝隙,而且可以在没有缝隙的情况下进行延长
视频裁剪工具
当觉得手动CV进行裁剪视频繁琐时,可以使用删除并拼接快捷键:Q-W。如下图当蓝色播放线到达合适位置时,按Q键将删除左侧部分并补齐空缺,W键同理相反。
Vlookup函数是电子表格中的一个查找匹配函数,适用于Excel与WPS各个版本。
在所有的函数中,vlookup函数应该是使用频率最高的函数之一,对新手小伙伴来说,掌握它是十分有必要的。
本篇文章从其基本用法、进阶用法、匹配不出来原因分析、如何规避错误值、冷门用法科普等五个维度来详细介绍下vlookup函数,希望能够帮助小伙伴们快速入门、以及加深对此函数的认识。
一、基本用法 语法解释
vlookup函数一共有4个参数,参数1要搜索的值、参数2搜索区域、参数3返回的列数、参数4匹配模式,参数有点多,没关系,我们用一个实例来看下每个参数的具体作用。
精准匹配 下图中,根据左边的信息表,利用vlookup函数匹配出李白的年龄,G2单元格中的公式该如何输入?
参数1:搜索值,找谁?
虽然最终结果是获取年龄字段,但是查找值并不是年龄,而是查找“李白的年龄”,主语是“李白”,所以参数1、查找值是“李白”,也就是F2单元格。
参数2:搜索区域,去哪找?
重点来了:查找区域的第一列必须是搜索值所对应的列(查找对象必须位于查询区域的最左列),参数1搜索值是“李白”,对应到左边到表格就是“姓名”字段,所以参数2搜索区域必须以B列作为首列,以B列作为首列向后拖动到我们需要匹配的值所在列,也就是D列年龄列(也可以继续向后拖动,只要包括年龄列就可以),所以参数为就是B:D列。
参数3:在第几列?
这里有个误区,很多小伙伴觉得左边的匹配表一共4列(A-D列),年龄列在D列,也就是第4列,所以参数3输入了“4”,这是错误的。
参数3实际指的是返回值(年龄)在搜索区域中所处的列数,也就是在参数2框选区域中所处的列数,上面我们框选了B:D列,实际上仅框选了3列,B是第一列、C是第二列、D是第三列....所以返回值“年龄”在第三列,参数3输入数字“3”。
参数4:匹配模式?
匹配模式分为精准匹配(输入0、FALSE或者省略都可以)、近似匹配(输入1或者TRUE),最常用的当属精准匹配,也就是要完完全全找到“李白”这个人,而不是“李小白”、“李白小”,所以参数4输入数字“0”,表示精准匹配,也可以直接省略或者输入FALSE。
日常工作中,99%的情况下都是使用vlookup函数的精准匹配,也就是参数4大家可以默认输入0。
通过以上例子,介绍了vlookup函数的最基本、最实用的用法,最容易出错的两点在于:
1、参数2/搜索区域 的首列必须是返回值所在的列;
2、参数3/列数 必须是返回值在搜索区域对应的列数。
近似匹配 上面说到99%的情况下,vlookup函数的参数4都是0,也就是精准匹配,那么还剩下1%的情况,需要用到vlookup函数的近似匹配,在表格中也有非常合适的应用场景,那就是数据分组功能。
下图中如何根据左侧A-B列的评级表,去匹配每位同学所属的评级?
首先建立一列辅助列,在G2单元格内输入公式:=VLOOKUP( F2,B:C,2,1),向下填充,完成区间匹配。
这里利用vlookup函数近似匹配的功能,它会返回小于等于查找值的最大值。
查找数字56,等于查找 “小于等于56的最大值”,60/80/90都要大于56,只有0小于56,所以返回0对应的评级“不及格”; 查找数字88,等于查找 “小于等于88的最大值”,0/60/80都要小于88,但80最大,所以返回80对应的评级“良好”;
最重要的一点,利用vlookup函数近似匹配之前,需要对匹配表数据进行升序处理,即上图中先对辅助列B列升序(上图中B列数字由小到大排序)。
因为vlookup函数近似匹配采用的是二分法,一般是从中间开始向上下两端查找,不断二分,默认数据升序处理。
不升序会怎么样?
下图中,匹配序列处于乱序状态,利用vlookup函数近似匹配、返回小于等于查找值的最大值,正确结果应该是a1,(6是小于等于6.5的最大值),但是函数返回结果却是a2。
二分法中间开始查找,序列中间值为7,7要大于查找值6.5,所以继续向上查找,上面的1要小于6.5,查找停止,返回1对应值。所以,在近似匹配的时候,切记要升序处理。
二、进阶用法 进阶用法主要是vlookup函数搭配辅助列或者其它函数,来实现数据匹配,常用的方法主要分为以下几种。
在此之前,还有一个比较重要的概念就是 单元格引用 ,在vlookup函数匹配的时候,参数1与参数2经常涉及到相对引用与绝对引用,十分重要。Excel入门必看篇,单元格的相对引用、绝对引用与混合引用 多列查找 1、结合column函数
下图中,匹配各同学的性别、年龄、城市三个字段,直接利用COLUMN函数(返回单元的列),动态返回需求列。公式=VLOOKUP($F2,$A:$D,COLUMN(B2),0),其中参数1与参数2皆涉及到单元格的引用。
2、结合match函数
上图需要匹配的列与原表列的位置顺序一样,可以用COLUMN函数解决,如果顺序不一致的话,需要结合match函数使用,公式=VLOOKUP($F2,$A:$D,MATCH(G$1,$A$1:$D$1,0),0) 注意其中的引用方式。
match函数返回查找值在数组中的位置,比如查找字段“性别”,它在数组“A1:D1”中处于第2位,所以vlookup函数参数三就等于2。
以上两种方式都是通过动态变更参数三,从而完成多字段匹配。
逆向查找 由于vlookup函数的参数2、查找区域首列必须为搜索值对应的列,如果返回值所在的列在搜索值对应的列前方的话,vlookup正常用法无法完成匹配。
下图中,根据A-B列的数据源,匹配出E列的学号,根据前文,搜索区域只能从B列开始、向后拖动,但是返回值在A列,肯定查不到正确的结果。
这种情况我的建议是调整列的位置,比如在学号列前方复制插入姓名列,逆向转正向匹配。
当然也可以使用INDEX+MATCH组合以及XLOOKUP函数解决逆向匹配的问题,这里不是我们的讨论范围,感兴趣的小伙伴可以自行了解。
多条件匹配 多个字段匹配的情况,可以在源数据的基础上,增加一列辅助列,利用“&”将各列数据进行连接。
模糊查找 “*”是通配符,代表0到多个字符,"*"&D2&"*"则表示包含D2关键字的任意字符串:
一对多查找 下图中,根据B-C列数据源,匹配出E列部门的所有员工姓名。由于vlookup函数只能返回首个值,然后有多个员工,这里利用COUNTIF函数将每个部门的个数进行编号。
辅助列公式=B2&COUNTIF($B$1:B2,B2),注意其中的绝对引用。这样每个部门都会被标上序号。
接着F2输入公式=VLOOKUP($E$2&ROW(A1),A:C,3,0),公式下拉,即可返回多个结果。
三、匹配不出来的原因 明明有数据,vlookup却匹配不出来,在工作中是比较常见的。
第一种常见错误是匹配区域未绝对引用、发生变化所致。下图中匹配年龄字段。
在E2单元格内输入公式=VLOOKUP(D2,A2:B9,2,0),由于参数2未采用绝对引用,公式在下拉到“赵云”的时候,引用区域变成了“A4:B11”,区域内并无此人,当然查找不到数据。
正确的做法是:参数2引用区域采用绝对引用(选中引用区域,按下F4键)
一般RTC模块设备管理时间日历、计时器等。从年到二。一些爱普生RTC
模块可以通过使用来自32768 Hz的分割频率来管理次第二功能。本文件
描述了RTC模块的三个具体的应用程序。(表1)
表1中的功能和产品
[FOUT函数应用程序]
图1描述了RTC模块(RA8000CE)的分频器电路,它可以提供几种分频器电路
频率为32768 Hz。FOUT引脚有频率输出。
RA8000CE可输出32768Hz、1024 Hz或1 Hz。
图2显示了模数转换器(ADC)的应用程序。低速ADC可用于低频交货。1,024 Hz,32768 Hz.FOUT引脚可提供ADC采样时钟。其他一些RTC模块设备可以输出4,096 Hz。
图3描述了32768 Hz单片机(微控制器单元)系统时钟。因此,客户没有任何信息
单片机器件用32768 Hz晶体振荡电路的必要性。
第二个应用程序
通常在视频图像应用中的每个帧数据捕获时间戳。这个时间戳数据用于适当的电影回放,判断名声的顺序。但有些系统无法从MPEG(电影专家组)中捕捉时间戳数据,H.264导致系统限制。在这种情况下,子秒时间数据将被捕获到每个帧。
图4描述了RTC模块(RX-8803SA/LC)提供了视频记录的时间数据。摄像机单片机要求RTC模块为每一帧发送时间日期。RTC模块发送时间日期
包括每一帧的1/100秒。
该视频系统可以正确地播放视频画面,也可以判断帧顺序。
RX8901CE、RX4901CE、RA8000CE、RA4000CE产品具有捕获时间数据的能力
决议下降到1/512和1/1024秒。
使用1/100秒的时间戳,可以正确地观看视频回放质量。用户也可以判断
帧排序。见图5。
这个1/100秒(0.01秒周期)的时间戳可以管理网络摄像头应用程序(30帧/
第二周期0.033秒),以及安全摄像头应用(5帧/秒0.2秒)。
图6,将摄像机A、B与GNSS(全球导航卫星系统)进行时间同步后,这些摄像机用1/100秒的时间数据记录同一滑雪者,摄像机A、B获得帧的定时顺序。
因此,用户可以用两个不同的相机方向来分析滑雪者的相框。
【提交第二次时间戳申请】
通过结合爱普生RTC模块和单片机,FPGA(现场可编程门阵列)系统的用户可以
管理记录事件时间等的时间戳操作。停电、系统错误等。
RX8111CE,RX4111CE可以记录从年份到第二年的时间。还有RA8000CE,RA4000CE从年到次秒。图7显示了RA8000时间戳的方框图。这个产品可以记录任何一个BCD(二进制文件
编码的十进制格式)或二进制格式。
许多计算机系统都可以通过使用单片机、FPGA来管理次秒时间戳。使用单片机、FPGA和RA8000CE的组合,用户可以在事件发生时将时间戳数据存储到RTC模块中,进行数据备份操作。因此,即使在停电期间,用户也可以识别时间戳记录。用户除了使用普通BCD格式的日期外,还可以使用二进制日期。见图8。
爱普生主要RTC模块的产品信息供参考。
RTC模块与子第二次时间(ex。1/100秒)
RX-8803SA, RX-8803LC, RX8901CE, RX4901CE, RA8000CE, RA4000CE
带有子秒时间戳的RTC模块
RX8901CE,RX4901CE,RA8000CE,
文章目录 1. 用法2. 语法3. 实际应用3.1 求总和与小计3.2 按多个维度分组3.3 标记小计和总计 1. 用法 将Grouping Sets 运算符添加到Group by 子句中,使用Grouping Set 可以在一个查询中指定数据的多个分组,其结果与针对指定的组执行union all 运算等效
2. 语法 SELECT column1, column2, ..., aggregate_function(column) FROM table_name GROUP BY GROUPING SETS ((column1, column2, ...), (column1), (column2), ...); 注意事项:
在Group by 子句中,如果不是Grouping sets 列表的一部分,不能使用Grouping sets 进行分组。不能在Grouping sets 内部使用Grouping sets 3. 实际应用 假设现在有一个订单表 Orders ,包含订单号、顾客信息、产品和订单金额四个字段,如下图所示
建表语句如下:
--建表 if object_id('Orders','u') is not null drop table Orders go create table Orders ( OrderID INT ,CustomerID INT ,CustomerName varchar(20) ,ProductName varchar(20) ,SalesValue int ) go insert into Orders values (1,1, 'Lily','打印机',908) ,(2,1,'Lily','碎纸机',560) ,(3,2,'Coco','传真机',380) ,(4,2,'Coco','打印机',710) ,(5,2,'Coco','办公桌',420) ,(6,3,'Joe','办公椅',120) ,(7,4,'Emma','碎纸机',570) ,(8,1,'Lily','碎纸机',260) ,(9,3,'Joe','办公椅',100) go 3.
一、前言 又到了年底,这一年过的真的好快,犹如白驹过隙。
身体快跃过去了,灵魂还没有。
拿起键盘却迟迟无法下手,经过三天终于完成了!
这是很颓很丧的一年,很难看到自己的成长,就像登山卡在半山腰,开车堵在高架桥,刷一半短视频显示加载中。
想起之前经常传的一句梗:一年经验用三年
好消息:我有三年工作经验
坏消息:一年工作经验用了三年
年底总结,和大家一起聊聊!把自己的一些拙见分享一下,记录一下今年的生活,以及下一年的目标和展望!
互联网现在步入寒冬,我们是躺平 OR 寻找风口?欢迎大家一起交流学习!
二、我与工作的三年之痒 不知道大家有没有感触,对于三年这个坎,似乎很难跨过去,自己虽是三年开发经验,好像到达瓶颈了!
三年一般都要有所作为了,要么是个中级或者高级开发,要么是个小组长来统筹开发!
而我,还没有达到中级!惭愧!
三年是个分水岭,一般企业也是只招三年以上的。过了三年之后,没有质的提升,薪资基本都会停在这里,当然这个提升到五年也是不晚的!
个人认为三年这个阶段是最重要的,和小编一个阶段的要抓紧了,突破自己。
三年是一个承上启下的过程,是一个逐渐转向成熟的阶段。
因为三年,基本上所有的技术或多或少都会接触过,对于源码的探索也有一定接触。
这个时间段再去深入框架和源码会得心应手,最最重要的一点是:三年你需要把基础补牢,所谓基础不牢,地动山摇,地基一定要打稳。这也是自己极度需要补的,大家有没有觉得基础不牢的,一起加油!
学习建立在你有足够多的空闲时间。
时间是海绵里的水,挤挤总会有的。把摸鱼的时间拿来学习,也是很划算的一件事情!
上班时间太忙,想着在家学习,需要你有很强的控制力,相信你们可以的!
注:虽说鼓励你们可以在周末学习,但是自己周末在家,好像脑子被封印了一样,不如在公司思路开阔!有没有懂心理学的给普及一下,这是个什么现象?
三、互联网寒冬——风口 想想今年讨论最多的话题莫过于:互联网寒冬,今年怎么这么难,人工智能会替代程序员吗,某某大厂又裁员了!
在加上最近俩月的,某某APP又崩了!
这些东西好像在之前没有发生过,今年来却层出不穷。
出现了很多网络热词很搞笑:开猿结瘤,降本增笑。
很多人调侃到:现在学Java犹如清末进宫当太监!
经常有人说人工智能会替代程序员,我认为不可能,但是只会淘汰不会使用人工智能的程序员!
不是自己不行了,是行业的红利期到了!今年的金三银四、金九银十也没有激起太大的水花!
互联网经过铺天盖地的发展,之前是任何企业都想做一个系统自己用,养一群开发团队。
大厂也是看那个方向吃香就招人搞,万一成了呢,之前不缺钱,即使你在的部门不赚钱,其他的挣钱的部门也能顶起来!
现在不行了,整个行业缩水了,不赚钱的部门砍了,小型企业赚的少了,养不起把开发团队砍了!
一个行业发展到一定时期,就会面临到转型。转型可以是宽泛,不单单只在互联网下!
咱们日渐增强的地位,也是从低端制造业到高端制造业转型的阶段。新能源车,光伏,芯片,这些和咱们关系有点远。
我们要拒绝躺平,我们要迎风直上,看看下一个风口是否能把握住!
我们来看看下一个风口是什么呢?
华为的崛起,下一年鸿蒙生态不会兼容安卓,这就会造成一大批鸿蒙开发者。大厂纷纷签署合作,这是趋势也是必然,国产化是必须的。几百万款APP,总会有一批企业来分一杯羹。
让我们卷起来,可以试一试,多条方向多条路,人要是不懒总会有饭吃!
就像前几年比较火的:云原生、go一样,他们的需求量还是大厂比较多。
鸿蒙的需求量应该会很大,抽空学一下也是不错的,当然要把吃饭的工作保持住!
一个月薪三千的和你们谈风口,大家当说笑了,拙见看看就行!
一句话,你只管学习,诸多因果尽加吾身!
四、平淡的日子里也泛着光 扯了这么多了,总不能自己的这一年的经历不说吧!
现在回忆一下,今年真的是平平无奇的一年,单是平淡的日子里也泛着光!
没有发生什么惊天动地的大事,和上一年比什么都没有变,除了自己的头发!
什么?你问我工资变没变,好像变了,不过是往下变的!
但是,五一带了对象回家,家里都比较认可,明年等我们的好消息喽!
已经自己做饭一年多了,从每周五次减到了每周四次,吃自己的饭吃够了,谁懂啊!
来一张拿得出手的,鸡爪大虾煲,献丑了!
关于工作上的事情就不多说了,工作没有变动,前半年开发,后半年运维 + 开发。
不过趁着出差去了一趟香港,还是挺赚的。来看看太平山下的景色!
五、上年任务完成情况 咱是第二年写年度总结, 所以多了一个环节。
我们先来看看上一年的目标有哪些:
50篇博客阅读量20w微信公众号粉丝500源码学习学习大数据或者新语言 第一个现在是44+3没有发的,还差三篇,差不多还有半个月。进度94%
阅读量20w是达到了,只算CSDN就够了。Bingo
微信公众号粉丝500,已经1000多了,感谢大家!Bingo
源码学习,学了spring和nacos的一些源码,感觉还差点意思。进度80%
学习大数据或者新语言,没有学,环境倒是装了,学了一点点,已经忘了。进度10%
有点失败,关于学习的都不尽人意。
原因:使用占位符时使用了%1$d,然后传入的数值为double类型的数值,所以导致报错
解决方法:
直接使用 %1$s进行占位,传入的值使用String.valueOf()转换。
其他类型占位符:
// %s 字符串类型 String string1 = String.format("你好呀,我是%s,请问你是%s吗?", "张三", "李四"); System.out.println("string1 = " + string1); // %c 字符类型 String string2 = String.format("字母%c", 'a'); System.out.println("string2 = " + string2); // %b 布尔类型 String string3 = String.format("布尔型%b", false); System.out.println("string3 = " + string3); // %d 整数类型(十进制) String string4 = String.format("数字%d", 3); System.out.println("string4 = " + string4); // %f 浮点类型 String string5 = String.format("数字%f", 3.0); System.out.println("string5 = " + string5);
🍎个人博客:个人主页
🏆个人专栏: Mybatis ⛳️ 功不唐捐,玉汝于成
目录
前言
正文
1、使用参数化的 SQL 语句:
2、使用动态 SQL 标签:
3、禁止拼接 SQL:
4、限制参数类型:
5、使用 MyBatis 的拦截器:
结语
我的其他博客
前言 在软件开发过程中,数据安全一直是至关重要的一环。SQL 注入攻击是一种常见而危险的威胁,攻击者通过恶意构造 SQL 语句,试图绕过应用程序的合法性检查,访问、修改或删除数据库中的数据。MyBatis 作为一款流行的持久层框架,提供了多种机制来防范 SQL 注入攻击,开发者应当充分利用这些机制,保障应用程序的数据安全性。
正文 MyBatis 是一种基于 Java 的持久层框架,它的设计目标之一是防止 SQL 注入攻击。以下是一些在 MyBatis 中防止 SQL 注入的常用方法:
1、使用参数化的 SQL 语句: 最有效的防范 SQL 注入的方式是使用参数化的 SQL 语句,而不是将参数直接拼接到 SQL 语句中。MyBatis 支持使用 #{} 占位符来引用参数,这样 MyBatis 将会在执行 SQL 语句时自动进行参数的安全处理。
<!-- 使用 #{} 占位符 --> <select id="getUserById" resultType="User"> SELECT * FROM user WHERE id = #{userId} </select> 这样,MyBatis 会在执行时将 userId 参数安全地替换到 SQL 语句中。
文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务,管理起来非常简单,但在真正的项目中将会出现大量的微服务,当一些核心配置发生改变的时候,我们就需要修改所有与它相关的微服务,且不得不重启,这样带来的代价是非常大的。所以我们希望这些配置文件能够实现统一的管理,并且保证更改热更新,无需重启即可生效。
此时我们需要一个配置管理服务,将核心的经常需要改动的配置放上去,微服务启动的时候就可以去读取该配置,再与本地的配置相结合,作为完整配置去使用。当这些核心配置需要改动的时候,直接在配置管理服务中去改动就 OK 了,改完之后它就会立即通知微服务,完成配置的读取。
不管是注册中心还是配置管理服务,它们都是由 Nacos 实现的,所以配置管理服务也是在 Nacos 控制台设置的!
① 点击配置列表中的加号添加配置
② 填写配置表单,Data ID 其实就是配置文件的名称,该名称不能冲突,一般的命名格式为:服务名-生产环境.后缀名(userserver-dev.yaml)
③ 编写配置内容并发布,注意这里的内容并不是啥都往上写,我们只写核心的、有热更新需求的配置
二、微服务配置拉取 配置获取步骤如下:
项目启动 → 读取 Nacos 中的配置文件 → 读取本地配置文件 → 创建 spring 容器 → 加载 bean
Nacos 中的配置文件与本地配置文件相结合,组成最终的配置文件!
项目启动后,我们需要知道去哪里读取 Nacos 配置文件(当然是 Nacos)?要读取的又是哪个文件(落实到文件名)?而这些信息其实都被提前配到了一个叫 bootstrap.yml 文件中。
bootstrap.yml 是引导类配置文件,它的优先级高于 application.yml 文件,所以我们可以把 Nacos 地址以及文件的相关信息都写到 bootstrap.yml 里面,完成 Nacos 配置的读取,而后与本地文件相结合。
① 引入 Nacos 的配置管理客户端依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ② 在 userserver 中的 resource 目录中添加一个 bootstrap.
首先介绍一下什么是git Git是一个分布式版本控制系统,它可以帮助开发人员管理和跟踪项目的代码变化。与其他版本控制工具(如SVN)不同,Git不需要中央服务器来存储代码版本,而是将代码版本存储在本地和远程仓库中。
开发人员可以从远程仓库克隆代码库到本地计算机,对代码进行修改和提交,并将更改推送回远程仓库。Git还提供了强大的分支和合并功能,使多人协作开发更加容易。开发人员可以创建自己的分支,进行独立的开发工作,并在完成后将其合并回主分支。
Git的优点包括:
分布式:每个开发者都可以拥有自己的本地仓库,不需要中央服务器,可以在没有网络连接的情况下进行工作。
强大的分支和合并功能:开发人员可以轻松创建和管理分支,并将它们合并回主分支。
高效性:由于Git使用本地仓库来存储代码版本,所以操作速度非常快。
安全性:Git使用SHA-1加密算法来保护数据完整性和安全性。
总之,Git是一款强大、易用且高效的版本控制工具,对于任何规模的软件开发项目来说都是必不可少的工具。
然后介绍一下怎么使用 1、首先,在您的计算机上安装Git。您可以从Git官方网站(https://git-scm.com)下载并安装适合您操作系统的版本。
2、安装完成后,打开一个文件夹,并在文件夹内点击鼠标右键,在右键菜单中选择“Git Bash Here”选项,以打开Git Bash命令窗口。
3、在Git Bash命令窗口中,运行以下命令来配置您的用户名和邮箱:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com" 请将 "Your Name" 替换为您在仓库注册时使用的用户名,并将 "email@example.com" 替换为您的邮箱地址。
4、在命令窗口中,切换到您希望初始化Git仓库的文件夹,并运行以下命令来初始化Git仓库
$ git init 5、将文件添加到Git仓库中。在命令窗口中,使用以下命令将所有文件添加到暂存区:
$ git add . 如果您只想添加特定文件,可以替换 . 为文件路径或文件名。
6、提交版本信息。在命令窗口中,使用以下命令提交您的更改并添加一条注释:
$ git commit -m "first commit" 请将 "first commit" 替换为您希望的注释。
7、关联远程仓库。在命令窗口中,使用以下命令将本地仓库与远程仓库关联起来:
$ git remote add origin 仓库地址 请将 "仓库地址" 替换为您的远程仓库地址。
GDB VX:hao541022348 1. GDB调试器1.1 前言1.2 GDB编译程序1.3 启动GDB1.4 载入被调试程序1.4.1 本地调试1.4.2 远程调试 1.5 查看源码1.6 运行程序1.7 断点设置1.7.1 通过行号设置断点1.7.2 通过函数名设置断点1.7.3 通过条件设置断点1.7.4 查看断点信息1.7.5 删除断点 1.8 单步调试1.9 查看变量1.10 修改变量1.11 设置观察点1.12 打印表达式1.13 查看运行信息1.14 分割窗口 2. GDB调试core文件2.1 设定core文件的最大值2.2 临时修改core文件的生成路径2.2.1 示例一:除数设为02.2.2 示例二:这里scanf后的参数没有加& 2.3 1. GDB调试器 1.1 前言 GDB是GNU调试器(GNU Debugger)的缩写,是一种功能强大的调试工具,可以用于调试多种编程语言的程序,如C、C++、汇编等。GDB可以帮助程序员在程序运行时进行调试,包括查看变量的值、跟踪程序执行流程、设置断点等。
GDB支持多种操作系统,包括Linux、Unix、Windows等。
1.2 GDB编译程序 文件编译
g++ main.cpp -o main带有GDB debug功能,编译
g++ -g main.cpp -o main查看可执行文件是否带有debug功能
readelf -S main | grep debug
1.3 启动GDB 1.4 载入被调试程序 1.4.1 本地调试 ~#gdb ./build
1.4.2 远程调试 远程调试需要两个GDB程序,运行在远程设备(target)上的程序称之为gdbserver,运行在本地主机host上的gdb程序为交叉编译器,即在x86平台上运行arm平台的gdb程序,记作gdb_client
文章目录 TypeScrip基础语法变量的声明复合类型 条件控制if-elseswitch for&while循环常规遍历数组 函数基础样式箭头函数可选参数 面向对象枚举、接口继承 模块开发导出导入 TypeScrip TypeScript是微软开发的开源编程语言,在JavaScript的基础上拓展了一些语法,是 JavaScript 的一个超集。
TypeScript官网:https://www.typescriptlang.org/
在线测试TypeScript代码:https://www.typescriptlang.org/play
菜鸟教程:https://www.runoob.com/typescript/ts-tutorial.html
基础语法 变量的声明 TypeScript 在 JavaScript基础上加入了静态类型检查功能,因此每一个变量都有固定的数据类型。
例如:let msg: string = 'hello world
let: 声明变量的关键字,类似的 const代表常量
string:变量类型(拓展JavaScript的部分),其他常见类型如下:
number:整数、数值、浮点数、二进制等
boolean:布尔类型
any:不确定,可是任意类型(相当于跳过类型检查)
union类型:例如let u: string|number|boolean = 'hello'可以是多个指定类型中的一种
object:对象
let p = {name:'jack', age: 21} console.log(p.name) console.log(p['name']) 复合类型 数组 let names: Array<string> = ['a','b'] let age: number[] = [1,2] console.log(names[1]) 条件控制 if-else let num:number = 21 if(num%2===0){ // 推荐使用三个等于号判断 console.log("ou") } else{ console.
cotact.h #define _CRT_SECURE_NO_WARNINGS 1
#define MAX 100
#define MAXname 20
#define MAXsex 10
#define MAXtre 12
#define MAXaddr 30
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
//类型声明
//人的信息
typedef struct p
{
char name[MAXname];
int age;
char sex[MAXsex];//性别
char tele[MAXtre];//电话
char address[MAXaddr];//地址
}p;//加了typedef,就把结构体类型struct p重命名为了p
//封装一个通讯录(由于data和count都是通讯录的成员,同时变化且变化量相同,所以在头文件中封装,更容易找到)
typedef struct Contact
{
p data[MAX];//存放100个人的信息
int count;//记录当前通讯录中人的实时个数,添加一个+1,删除一个-1
}Contact;
//初始化通讯录
void InitContact(Contact* pc);//由于我们要通过pc指针来改变con的内容,所以不需要+const进行修饰
//增加联系人到通讯录
void AddContact(Contact* pc);
//显示通讯录中的信息
void ShowContact(const Contact*pc);//此处添加const是为了保护con的信息不被改动
//删除指定联系人
void DelContact(const Contact* pc);
//查找指定联系人
RA4000CE是一个集成了32.768 kHz数字温度补偿晶体振荡器(DTCXO)的RTC模块,适用于汽车,工作温度范围宽,稳定性高。它包括各种功能,如具有闰年校正的秒到年时钟/日历,时间警报,唤醒计时器,时间更新中断,时钟输出和时间戳功能,可以在外部或内部事件发生时记录两个时间和日期,以及由自我监控功能检测到的电源状态。本产品符合AEC-Q100标准,低功耗运行,适用于汽车应用。
内置频率调节32.768 kHz晶体单元宽温度操作-40°C至+125°C接口类型SPI-Bus接口3线、4线低备份电流300na/ 3 v时间戳功能最多2个时间戳。时间更新中断每小时、每分钟和第二次闹钟中断在天,日期,小时,分钟,秒自动重复唤醒定时器中断自监控中断晶体振荡停止。VDD低。AEC-Q100兼容 框图 规范(特点) 终端连接/外部尺寸
1、背景:我们的系统本身逻辑已经十分成熟,在给另一家公司生产环境部署时,回归验证时发生了这个问题。
2、问题描述:我们的主要业务处理应用是由python代码写的,多个进程,进程之间通过mq消息队列传递消息。当代码处于等待mq的消息时,进程会处于阻塞状态。我们其中的一个进程在阻塞了超过二十多分钟后,接受到mq的消息后继续执行时,会在固定的数据库操作中卡住15至16分钟,卡完后会抛出数据库异常ORA-03113: 通信通道的文件结尾,后续由于我们封装的执行数据库操作的函数在检测到规定内的异常时会尝试重新建立数据库连接,后续就不会在卡住。卡住一次后的二十分钟左右内的交易不会再次卡住,之后便会再次卡住。
3、问题分析:经过打印日志排查,确定了卡主的地方是在执行数据库操作时,并且由于卡主的时间比较固定,分析是Oracle数据库的一个空闲连接超过一定时间后便会自动清理连接的设置导致的。
由于我们的python代码并未用到数据库连接池,无法进行心跳检测连接是否还可用。当应用起来之后只会初始化一次数据库连接,后续一直用同一个,当等待mq超过一定时间后,数据库服务端单方面将连接清理,但我们的代码对此是感知不到的,由此会发生系统流程卡住一定时间的现象,而且是偶现的。并且我们排除了卡住是由于系统资源不足导致的进程阻塞。
解决方案1:在每次交易时新建数据库连接。
结论1:这种方案确实有一点效果,但是当我这样做后,发现代码还是会卡,但这次代码是卡在了读取excel的地方,而且现象和刚开始的问题是一样的。这个现象是十分矛盾的,问题现象是和数据库连接相关的现象,但代码实际卡住的地方并未进行数据库操作,我们陷入了迷茫。对此,为了进一步排查是哪里卡住了,怀疑可能是句柄泄露导致的,我们修复了句柄泄露问题(不管用)。让现场运维安装了个strace工具,该工具可以打印出来监听的进程id所调用的操作系统提供的具体函数,然后在进行交易前执行该命令,发现卡住在这个函数read(句柄ID,),但我们发现这个句柄ID并不是读取excel相关的句柄ID。openat(句柄ID,”文件名“)。也不是recvfrom()函数建立的句柄ID,而是打开共享内存的某个文件/dev/shm/xxx。但这无法得知该句柄是关于什么的。但发现卡住之后立即就执行了write()函数,文件是Oracle客户端的某个地方的一个错误日志。打开日志文件后发现了一些错误信息。对此,我们可以确定,卡住的原因并不是由于读取excel文件,还是有由于数据连接。
对此我们将代码修改成了plan b
解决方案2:在主函数中加一个线程,每个五分钟执行一个select 1 from dual,让数据库服务端不在自动清理该数据库连接,进程还是只用一个数据库连接。
结论2:可行,相当于模拟了连接池的心跳检测,但是消耗的性能更多点。
当发现问题并不是代码层面的问题,使用strace命令看到进程具体在执行什么,具体卡住在哪里,以及卡住之后干了什么是比较好用的。因为我们使用方案1取跑的时候,他在卡住后不会抛出异常,后续就正常跑了,发生了啥、为啥卡住是看不出来的。
Spring框架回顾、SpringMVC学习目标、传统JavaWeb开发架构分析、SpringMVC简介、SpringMVC入门案例环境搭建、SpringMVC入门案例实现、SpringMVC入门案例总结。
SpringMVC传递参数项目环境搭建、SpringMVC接收基本类型参数、SpringMVC接收日期类型参数SpringMVC接收对象类型数据、SpringMVC接收集合类型数据、SpringMVC接收请求参数总结。
SpringMVC处理中文乱码问题、SpringMVC实现转发和重定向、SpringMVC模块今日小结、使用request和session传值、使用Model和ModelAndView传值、使用 @SessionAttributes传值及传值总结。
SpringMVC静态资源、JSON介绍和 @ResponseBody注解、@RestController的使用、注解 @RequestBody使用和ApiPost测试工具、Jackson常用注解、FastJSON介绍及使用、SpringMVC统一异常处理、SpringMVC拦截器、SpringMVC验证码实现、RESTFul、@PathVariable 注解、SpringMVC使用@CrossOrigin解决跨域问题、SpringMVC使用WebMvcConfigurer解决跨域问题、SpringMVC文件上传环境搭建、SpringMVC文件上传控制层开发、SpringMVC文件上传操作配置、SpringMVC文件下载操作。
SpringMVC源码-SpringMVC基于XML配置开发、SpringMVC源码、SpringMVC核心知识点、SpringMVC的源码分析1、SpringMVC的源码分析2、SpringMVC的源码分析3、SpringMVC的源码分析4、SpringMVC的源码分析5。
涉及python pandas(pd)的知识点:
1、读取输入文件, 并转化为pd dataframe # 读取输入文件,并根据分割符划分字段, 并指定字段名 import pandas as pd data = pd.read_csv('train.csv', sep = "\t", names=['label', 'msg']) # 查看输入的数据 print(data.shape) print(data.head(10)) 2、将训练样本打散 #对数据进行随机打乱 data = data.sample(frac=1, random_state=42) 3、对字段进行转化 data['msg'] = data['msg'].apply(lambda x: ' '.join(x)) 4、查看样本label的分布 print(data['label'].value_counts()) 5、将样本根据比例切分成训练集和测试集 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test = \ train_test_split(data['msg'], data['label'], test_size=0.3, random_state=42 ) 6、将训练好的模型进行保存和读取 1、tf-idf模型
# tf-idf模型保存和读取 #tf-idf训练 import pickle vectorizer_word = TfidfVectorizer( max_features=800000, token_pattern=r"(?u)\b\w+\b", min_df=1, #max_df=0.1, analyzer='word', ngram_range=(1, 5) ) vectorizer_word.
Vue 炫酷 Echarts 图表 网址:https://www.makeapie.com/explore.html#sort=ranktimeframe=allauthor=all
上面的网址已经停服了,有几个网址更新一下子
https://www.makeapie.cn/
https://www.isqqw.com/#/homepage
这上边还是有很多设计炫酷的 echarts 图表的,可以做大屏的时候使用。简单的写几个案例,可以根据自己的需要选择使用。
水波球 首先使用这个水波球也有叫水纹球的,他需要安装一个插件
npm install echarts-liquidfill 然后就可以使用了。
效果
代码
<doc> https://www.makeapie.com/explore.html#sort=rank~timeframe=all~author=all https://www.npmjs.com/package/echarts-liquidfill npm install echarts-liquidfill </doc> <template> <div> <div id="shuiwen" style="width: 500px;height:400px;border:1px solid red;float: left;"></div> </div> </template> <script> import echarts from 'echarts' import "echarts-liquidfill"; export default { data() { return { charts: '', } }, mounted() { this.init("shuiwen") }, methods: { init(id) { this.charts = echarts.init(document.getElementById(id)) let value = 0.
搜了一圈,没有找到合适的答案,自己研究写了一个,思路对了,写起来就比较简单
直接上代码,index.vue
<template> <div style="position: relative"> <Editor ref="targetRef" v-bind="$attrs" :style="editorStyle" @onCreated="handleCreated" @onChange="handleChange" /> <span ref="resizeRef" class="is-resize"> icon占位 </span> </div> </template> <script setup lang="ts"> import "@wangeditor/editor/dist/css/style.css"; // 引入 css import { onBeforeUnmount, shallowRef, computed, ref, CSSProperties } from "vue"; import { IDomEditor } from "@wangeditor/editor"; import { Editor } from "@wangeditor/editor-for-vue"; import { useResize } from "./use-resize"; const props = defineProps(["resize", "editorHeight"]); const editorHeight = computed(() => `${props.editorHeight}px`); const editorRef = shallowRef<IDomEditor>(); const targetRef = ref<HTMLElement>(); const resizeRef = ref<HTMLElement>(); const resize = computed(() => props.
AI时代Python大数据分析 在AI时代,Python在大数据分析中扮演着重要的角色。Python作为一种高级编程语言,具有易读性、语法简洁和强大的科学计算能力等特点,使其成为大数据处理和分析的理想选择。
Python拥有丰富的数据处理和分析库,如NumPy、Pandas和SciPy等,这些库提供了强大的数学计算、数据清洗、数据转换和数据分析功能。此外,Python还支持多种数据存储方式,如关系型数据库、NoSQL数据库和分布式文件系统等,使得数据存储和处理更加灵活高效。
在AI时代,Python在大数据分析中的应用场景非常广泛。例如,可以利用Python进行数据挖掘和模式识别,通过机器学习和深度学习等技术对大数据进行分类、聚类和预测等分析。同时,Python还支持多种数据可视化工具,如Matplotlib、Seaborn和Plotly等,可以将数据分析结果以直观的图表和图形形式展示出来,帮助用户更好地理解和洞察数据。
总之,Python在AI时代的大数据分析中具有重要的作用。通过Python的强大库和工具,用户可以轻松地处理和分析大数据,挖掘出更多的商业洞察和价值。
《AI时代Python量化交易实战:ChatGPT让量化交易插上翅膀》 关键点 1.量化交易新模式:让量化交易更高效、更快捷、更完美。
2.全流程解析:涵盖量化交易的不同应用场景,介绍从发量化交易Python语言基础、工具库、可视化库、数据采集与分析,再到量化交易、套利策略等关键环节。
3.实战检验:ChatGPT结合多种量化交易工具及案例实操讲解,理解更加透彻。
4.100%提高量化交易效率:揭秘ChatGPT与量化交易高效融合的核心方法论和实践经验。
5.赠送资源:赠送教学视频及配套工具,供读者下载学习。
内容简介 本书是一本旨在帮助架构师在人工智能时代展翅高飞的实用指南。全书以ChatGPT为核心工具,揭示了人工智能技术对架构师的角色和职责进行颠覆和重塑的关键点。本书通过共计 13 章的系统内容,深入探讨AI技术在架构
设计中的应用,以及AI对传统架构师工作方式的影响。通过学习,读者将了解如何利用ChatGPT这一强大的智能辅助工具,提升架构师的工作效率和创造力。
本书的读者主要是架构师及相关从业人员。无论你是初入职场的新手架构师还是经验丰富的专业人士,本书都将成为你的指南,帮助你在人工智能时代展现卓越的架构设计能力。通过本书的指导,你将学习如何运用ChatGPT等工具和技术,以创新的方式构建高效、可靠、可扩展的软件架构。
同时,本书也适用于对架构设计感兴趣的其他技术类从业人员,如软件工程师、系统分析师、技术顾问等。通过学习本书的内容,你可以深入了解人工智能对架构设计的影响和带来的挑战,拓展自己的技术视野,提升对软件系统整体架构的理解和把握能力。
作者简介 关东升,一个在IT领域摸爬滚打20多年的老程序员、知名培训专家、畅销书作家,精通多种信息技术。曾参与设计和开发北京市公交一卡通系统、国家农产品追溯系统、金融系统微博等移动客户端项目,并在App Store发布多款游戏和应用软件。长期为中国移动、中国联通、中国南方航空、中国工商银行和天津港务局等企事业单位提供培训服务。先后出版了50多部IT图书,广受读者欢迎。
韩文锋,计算机专业本科,工程师,智慧农业和期货交易领域专家。擅长农业信息技术和期货交易风险管理,熟练使用Python、Java等编程语言。曾参与国家农产品溯源系统设计,利用区块链技术追溯农产品质量安全;主导开发iPad和Android客户端,实现消费者扫码查验源头信息。长期从事期货交易系统开发,掌握交易策略模型。利用机器学习算法,开发大豆期货交易分析系统,支持农业生产者规避市场风险。
《AI时代Python金融大数据分析实战:ChatGPT让金融大数据分析插上翅膀》 关键点 1.金融大数据分析新模式:让金融大数据分析更高效、更快捷、更完美。
2.全流程解析:涵盖架构设计的不同应用场景,介绍从金融大数据分析Python基础、获取、基础库、数据库,再到预处理与清洗、分析、建模等关键环节。
3.实战检验:ChatGPT结合多种金融大数据分析工具及案例实操讲解,理解更加透彻。
4.快速提高金融大数据分析效率:揭秘ChatGPT与金融大数据分析高效融合的核心方法论和实践经验。
5.赠送资源:赠送教学视频及配套工具,供读者下载学习。
内容简介 本书是一本针对金融领域的数据分析和机器学习应用的实用指南。本书以ChatGPT为核心技术,结合Python编程和金融领域的基础知识,介绍如何利用ChatGPT处理和分析金融大数据,进行预测建模和智能决策。
通过阅读本书,读者将掌握使用ChatGPT和其他工具进行金融大数据分析的基本原理和方法。无论是金融行业 从业者还是数据分析员,都可以从本书中获得宝贵的实用知识,提升在金融领域的数据分析和决策能力。无论是对于初学者还是有一定经验的专业人士,本书都能够提供实用的案例和技巧,帮助读者更好地应用ChatGPT和其他技术解决金融领域的实际问题。
作者简介 关东升,一个在IT领域摸爬滚打20多年的老程序员、知名培训专家、畅销书作家,精通多种信息技术。曾参与设计和开发北京市公交一卡通系统、国家农产品追溯系统、金融系统微博等移动客户端项目,并在App Store发布多款游戏和应用软件。长期为中国移动、中国联通、中国南方航空、中国工商银行和天津港务局等企事业单位提供培训服务。先后出版了50多部IT图书,广受读者欢迎。
0x01 前言 在5.0版本以及星球专版的基础上重新规划了工具箱,去除了一些工具,新增些许新工具以及旧工具的新版本,修复部分已知BUG,优化代码逻辑,美化了GUI界面部分显示功能,更加清晰明了。
此工具为python语言编写,代码也留下了,未对代码进行加密,可二次开发,无任何后门,不要以谣传谣,代码都是开放的,不放心的师傅可以自行查看哈~~~
魔改版作者:狐狸&雨夜
团队官方网站:https://www.one-fox.cn/
0x02 工具截图 0x03 更新与建议 2022/08/21 V1.0魔改版正式发布 2022/10/23 V2.0魔改版正式发布 2023/02/27 V3.0魔改版正式发布 2023/07/12 V4.0魔改版正式发布 2023/09/08 V4.1魔改星球专版正式发布 2023/10/20 V4.2魔改星球专版正式发布 2023/11/01 V5魔改版正式发布 2023/12/01 V6星球内部版正式发布 2024/01/03 V6公开版正式发布
当前列表页设置了缓存keepAlive=true,同时,在同一个按钮上使用v-if判断数据状态、用v-hasPermi判断按钮权限
当v-if的数据状态改变,由 ==1 变成 ==2 的时候,后面的v-hasPermi判断失效
原因:
是因为一开始页面初始化时,v-if 判断前两行为 true , 后两行没有在页面渲染元素,所以只校验了前两行的v-hsaPermi方法(v-if和v-show的区别),当后面修改了数据状态,v-if后两行为 true,由于页面设置了缓存,根本没有加载v-has-permi这个方法。
把v-if改为v-show即可,v-show不会移除元素,只是修改了css的样式为隐藏,这样进入当前列表页就会触发这四行的v-hsaPermi方法
在 Pycharm 中抛出以下错误:
超出 IOPub 数据速率。笔记本服务器将暂时停止 将输出发送到客户端以避免崩溃。改变 这个限制,设置配置变量 --NotebookApp.iopub_data_rate_limit
当前值:NotebookApp.iopub_data_rate_limit=1000000.0 (字节/秒)NotebookApp.rate_limit_window=3.0(秒)
解决方法如下:
1、Help-> Find action -> 搜索:iopub_data_rate_limit->进入以下几个文件中: 2、ctrl +f 搜索:iopub_data_rate_limit,找到可以修改后面参数的几个文件(反正就4个文件,一个个找过去),然后将1000000改成任意数字,比之前大就行(我把1改成了9) 3、重启pycharm,重启内核没用,一定是重启pycharm。然后问题解决!
最近在一项目里(React + antd)遇到一个需求,某项基础信息里有个图标配置(图标用的是antd的Icon组件),该项基础信息的图标信息修改后,存于后台数据库,后台数据库里存的是antd Icon组件的图标Tag名称,如AreaChartOutlined 、PieChartOutlined 、BarChartOutlined 等,另外在展示页面,需要根据该项信息的Tag名称,显示对应的antd图标。
antd 图标的使用方法 正常情况下安装@ant-design/icons依赖后,就可以在页面中使用antd图标,如:
$ npm install @ant-design/icons --save import { HomeOutlined } from '@ant-design/icons'; const App: React.FC = () => ( <Space> <HomeOutlined /> </Space> ); 但是如果页面中,图标的Tag名称不确定,又如何使用呢?
方案1. 使用React.createElement创建元素 关于React.createElement的详细用法,可以阅读文档:https://react.dev/reference/react/createElement
React.createElement(type, props, ...children) 包含三个参数:
type: 该参数必须为一个有效的React组件类型,例如,其可以是一个Tag名称(如div或者span),也可以是一个React组件(一个函数、一个类或者一个特殊组件如Fragment)props: 该参数应是一个对象或者null。如果传递null,则会当成空对象处理。React会创建一个元素,该元素属性与参数props相匹配。optional …children: 可选参数children。可以传递0个、1个或多个。其可以是ReactNode,包含React组件,字符串,数字,ReactNode,空节点(null, undefined, true, false),或者ReactNode数组。 知道React.createElement用法之后,我们可以进行简单的尝试,代码如下:
import React from "react"; import "./index.css"; import * as Icons from "@ant-design/icons"; // 注意要先引入icons import { Space } from "
* Bee 在2.2之前,调用批量插入在每个批都会提交commit,但在2.2改为只调用一次且在事务中,在批量插入的方法内容不再提交,而由事务控制. * * 2.2之前,批量插入使用每一个批次提交一次事务;
* 这样,当违反主键约束等就忽略的大批量插入效率是很高的;
* 但当事务中有批量插入时,不了解内部执行规则可能会对业务的正确性造成影响.
* 所在Bee在2.2时,默认是所有批次的插入操作只提交一次,如插入100条,每批20条,2.2之前是提交了五次commit,在2.2时改为一次commit;
* 若想在大批量插入时忽略违反约束的失败操作,使用回2.2之前的模式,可以使用配置:bee.osql.eachBatchCommit=true
* * 在2.2之前,可以将insertBatchSize设置得足够大,将所有记录在一个批次完成,即不会造成多个批次;这样,在事务中,就不会因事务分多批造成事务不准确;
* 但因2.2之前在批处理时,会调用conn.commit();提交了事务,所以用业务逻辑调用rollback()是无效的.
* 2.2时,使用事务时,在批处理内部不会再调用conn.commit().
package org.teasoft.exam.bee.osql.tran; import java.util.ArrayList; import java.util.List; import org.teasoft.bee.osql.BeeException; import org.teasoft.bee.osql.api.SuidRich; import org.teasoft.bee.osql.transaction.Transaction; import org.teasoft.honey.osql.core.HoneyConfig; import org.teasoft.honey.osql.core.Logger; import org.teasoft.honey.osql.core.SessionFactory; import org.teasoft.honey.osql.shortcut.BF; //不捕获异常+批处理 public class TranTest2 { public static void main(String[] args) { HoneyConfig.getHoneyConfig().notCatchModifyDuplicateException=true; Transaction transaction = SessionFactory.getTransaction(); SuidRich suidRich = BF.getSuidRich(); try { transaction.begin(); Org org1=new Org(); org1.setOrgName("aaa"); Org org2=new Org(); org2.
一、无线漫游场景 常见支持漫游的无线组网场景主要有AC+AP组网、mesh组网两大类:
(1)AC+AP组网
网络中所有AP被AC集中管理,发射统一的无线SSID,终端连入该SSID网络中可在不同的AP点之间实现无缝漫游。
(2)mesh组网
母子路由无线mesh组网,子节点配置全部受控于主路由以扩展无线信号,终端连入该SSID网络中可在不同的mesh节点之间实现无缝漫游。
二、802.11k协议介绍 802.11K协议:Radio Resource Measurement of Wireless LANs,无线局域网频谱资源测量协议。该协议定义了两种模式:
终端测量(Beacon Report):终端扫描周围AP点无线接入点测量(Neighbor Report):AP扫描邻居AP点 通过这两种模式报文交互即可感知到整个无线网络的拓扑,为终端锁定漫游目标做充分准备。
通信过程:
报文交互:
(注:无线抓包软件为Omnipeek,相关报文已经做了预过滤)
通过802.11k交互,AP和终端均掌握了当前无线网络拓扑信息,已为下一步的漫游执行做好了准备。
802.11V协议:Wireless Network Management(WNM),即无线网络管理协议。手机终端和AP两者通过BSTM帧交互以确定执行漫游的最终动作。
通信过程:
报文交互:
最终手机终端与新AP点重关联并交互认证用户、密钥等信息,最终实现成功漫游并重关联到最近的新AP点(客厅-AP)上:
802.11R协议:Fast BSS Transition,即快速BSS切换。协议砍掉了无线漫游重关联中四次握手(EAPOL-KEY)的过程,可以简单理解为“不加密状态的漫游”,以减少客户端在漫游过程中的时间延迟、连接中断概率,从而提高漫游质量。
报文交互:
三、无线漫游技术总结 通信方式和报文交互见:
要点总结:
802.11KVR协议中,AP的角色仅仅是起建议作用(如感知到终端无线信号阈值变弱则触发漫游建议),而最终决定权在于终端是否接受该漫游建议;802.11R必须AP和终端双方都支持,如AP支持终端不支持可能会导致漫游失败或者关联异常;802.11R节省的握手时间在整个漫游重关联(auth、reassoc、eapol-key)占用还是比较大的,日常使用下是否支持11r感知毫无区别,在某些精细化场景中还是有必要的;当今大多数智能手机均支持“主动漫游”,即不依赖802.11KVR,通过手机自身WLAN探测也能实现漫游,实现原理大致是:手机弱信号—>探测SSID下其他BSSID—>探测成功主动重关联: (图为VIVO手机相关功能)
四、漫游测试工具推荐 锐捷网络—WIFI魔盒(支持Android、iOS):
wifi魔盒漫游测试
TP-LINK—网络百宝箱(支持Android、iOS)
网络百宝箱漫游测试
(作者声明:最终产品解释权归各个厂家所有,在此仅作为已查到产品功能的支持情况给大家分享)
扫描下方二维码关注微信公众号:小云君网络 原创不易,感谢大家支持!!
运算符的优先级(规矩是人定的) 什么是经典?经典就是理论不随时间变迁而变化。《东方不败》中的很多台词让人时不时想起来振聋发聩。比如
很多事情不是自己想的那样,规矩是人定的。
舔狗和有思想 从小到大,我们都学过数学运算时要先乘除后加减,谁定的?
舔狗说:“老师讲的都是对的,所以这样!”有思想的人会说:“真的这样?”
一张升学试卷决定人生,舔狗继续升学,有思想的人如果不妥协就不会再有机会深造,但是,心中的疑问解决了吗?
怎么定义先乘除后加减 先乘除后加减的本质就是运算符的结合性
9+5*2 等价于 9+(5*2) 这里要注意一个问题,无论是+,-,*,/都是左结合的。
因此加减法的产生式为
list -> list + digit | list - digit | digit digit -> 0|1|2|3|4|5|6|7|8|9 乘除法的产生式为
list -> list * digit | list / digit | digit digit -> 0|1|2|3|4|5|6|7|8|9 现在问题是如何把上述两个产生式混合在一起,并且符合先乘除后加减
改造产生式 首先,我们要把list分开表示。比如,
对于加减法的产生式改造为
expr -> expr + digit | expr - digit | digit digit -> 0|1|2|3|4|5|6|7|8|9 对于乘除法的产生式改造为
term -> term * digit | term / digit | digit digit -> 0|1|2|3|4|5|6|7|8|9 合并产生式 对于加减法产生式进一步改造为运算符的右操作数可为乘除法或者数字的。
SHT3x-DIS是Sensirion新一代的温湿度传感器,精度为±2%RH和±0.3℃,输入电压范围从2.4V到5.5V,采用IIC总线接口,速率可达1MHz。测量温湿度范围分别为是-40℃ ~ 125℃和0 ~ 100%。
一、电路组成
从下图可以看到SHT3x内部集成了湿度传感器和温度传感器,通过ADC采样输入到数据处理和线性化单元,同时带有校正储存器,处理环境对器件测量的影响。通过数字接口IIC读取数据。带警报引脚,可通过修改寄存器的值设定阈值,当测量的温湿度超过阈值时它会被置位。
引脚分布如下,1和4号脚是IIC总线接口;2号脚是决定地址的引脚,当ADDR接VSS时芯片地址为0x44,接VCC时芯片地址为0x45;3号脚警报引脚(当不使用时浮空),当温湿度超过设定的阈值则该脚会被置位;5号和8号脚是电源引脚;6号引脚是复位引脚(当不使用时接VDD),低电平有效;7号脚是为了封装而保留的引脚。
下图是设备地址分配情况。
典型电路如下,由于SCL和SDA为开漏输出,驱动能力不足,需要接上拉电阻。VDD和VSS之间接一个小电容滤除高频杂波,另外nRESET和ALERT根据情况进行选择,若不需要使用,nRESET接高电平,ALERT浮空。Die Pad接地即可。
二、通讯指令说明
写好IIC驱动程序后,便可以开始和SHT3x进行通讯了,下面是SHT3x的所有指令说明。
(一)、单次获取数据指令
单次获取数据指令的详细数据格式如下图。首先从表格最上面开始,Repeatability指的是重复性,Clock Stretching指的是时钟延伸,它们的作用下面再讲述。数据流动过程如下:
1,发送起始信号以及由高7位的器件地址和最低位的写信号(WR=0) 组成的一字节地址,等待应答信号。(注意地址位于高7位,所以传址的时候需要将地址左移一位并加上读1/写0信号,如ADDR<<1 | WR)
2,发送指令的高字节并等待应答信号。
3,发送指令的低字节并等待应答信号,之后发送停止信号。
4,等待一段时间(测量正在进行)。
5,发送起始信号以及由高7位的器件地址和最低位的读信号(RD=1) 组成的一字节地址,然后根据选择的Clock Stretching从两个方向选择。假如失能了时钟延长功能,则等待非应答信号,发送停止信号,延迟一段时间(这步很重要!!延迟时间大约为50ms左右)等待转换结束,然后发送八位的应答信号并等待应答信号,之后便是逐字节分别读取温度和湿度的高字节、低字节以及CRC校验字节,每字节接收完都要发送应答信号,最后发送停止信号即可。而如果使能了是时钟延长功能,则总线的SCL由SHT3x控制,我们只需要通过while(SCL==0)阻塞程序,等待其释放总线然后MCU读取数据即可。
(二)、周期获取数据指令
周期获取数据指令的详细数据格式如下图。周期获取数据需要先配置读取模式然后再进行读取。
1、配置模式
周期读取数据的配置主要是配置重复性和每秒测量次数。数据发送的方式同上。
2、读取数据
读取的步骤和上述单次读取数据指令的流程类似,下面大概说一下。
发送起始信号,发送写地址,等待应答信号,注意如果传感器没有测量完,它只会返回非应答信号。发送16位命令0xE000。读取初始数据。
(三)、加快响应时间指令
加快响应时间指令,用于周期读取数据指令,开启后传感器开始采集频率为4Hz的数据。它的使用方法跟上述配置模式相同,在读取之前配置好就可以了。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x2B32,等待应答信号。接着继续配置或者读取数据。
(四)、停止周期读取数据指令
停止周期读取数据指令,有时为了实现低功耗或暂时不需要传感器测量数据,可以通过该指令进行关闭。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x3093,等待应答信号,发送停止信号。
(五)、复位
复位(RESET)的方式有很多种。
1、IIC接口复位
当通讯设备丢失时,在接下来的信号序列将会复位串口接口,此序列仅重置接口。状态寄存器保留其内容。SDA线置位,翻转SCL线的电平9次以上。接下来必须在下一个命令之前执行传输开始序列。
2、软复位/重新初始化
软复位/重新初始化的指令格式如下。
发送起始信号,发送写地址,等待应答信号。发送16位命令0x30A2,等待应答信号,发送停止信号。
3、一般呼叫复位指令
发送起始信号,发送通用呼叫地址0x00,等待应答信号。发送第二个字节0x06,等待应答信号。
4、通过nRESET引脚复位
拉低nRESET引脚的电平(至少350ns)将会产生硬复位信号重置传感器。
5、硬复位
重新上电。
(六)、加热器开启/关闭指令
该指令的用法同上,至于该加热器的作用是什么我也不清楚,明明是测温用的还要加热?!大概是想在温度很低的环境但想要它还能正常工作所以才设置这功能吧。
(七)、读取状态寄存器
状态寄存器包含有关加热器运行状态、警报模式以及最后一个命令的执行状态和最后一个写序列的信息。
发送起始信号,发送写地址,发送16位命令。发送起始信号,发送读地址,依次接收状态寄存器的高字节、低字节和CRC校验,每次接收都需要发送应答信号,直到接收的最后一个字节发送非应答信号,发送停止信号。
状态寄存器每一位代表的含义如下所示。
我们试一下读取状态寄存器看返回什么。可以发现二进制数1000 0000 0001 0000 1110 0001都为上面表格的默认值,至于CRC校验要根据给定公式对前两字节进行计算和比较。下面来讲CRC校验。
(八)、CRC校验
循环冗余校验(CRC)其实就是一种异或计算(模2运算)。获取的CRC校验码就是模2运算后的余数。
(九)、转换温湿度数据 由于从传感器获取到的数据不是最终的温湿度,所以我们需要根据公式进行转换,转换公式如下,在计算之前我们要对温湿度数据进行整合。 ==========
转载声明
本文大量内容系转载自以下文章,有删改,并参考其他文档资料加入了一些内容:
数据仓库和数据集市的区别
作者:修鹏李
出处:CSDN
大数据:数据仓库和数据库的区别
作者:南宫蓉
出处:简书
第一篇:数据仓库概述
第二篇:数据库关系建模
作者:穆晨
出处:CNBLOS
数据仓库、数据湖、数据集市、和数据中台的故事
作者:Murkey学习之旅
出处:csdn
数据中台和数仓的关系
作者:祝威廉
出处:CSDN
互联网巨头“大中台,小前台”战略
作者:于林富
出处:cnblogs
一文读懂阿里大中台、小前台战略
作者:民国周先生
出处:csdn
一文了解数据湖引擎
作者:WindyQin
出处:知乎
数据湖 | 一文读懂Data Lake的概念、特征、架构与案例
出处:大数据技术架构
背景 如今,随着诸如互联网以及物联网等技术的不断发展,越来越多的数据被生产出来-据统计,每天大约有超过2.5亿亿字节的各种各样数据产生。这些数据需要被存储起来并且能够被方便的分析和利用。
随着大数据技术的不断更新和迭代,数据管理工具得到了飞速的发展,相关概念如雨后春笋一般应运而生,如从最初决策支持系统(DSS)到商业智能(BI)、数据仓库、数据湖、数据中台等,这些概念特别容易混淆,本文对这些名词术语及内涵进行系统的解析,便于读者对数据平台相关的概念有全面的认识。
1 数据库 1.1 数据库 关系数据库本质上是一个二元关系,说的简单一些,就是一个二维表格,对普通人来说,最简单的理解就是一个Excel表格。这种数据库类型,具有结构化程度高,独立性强,冗余度低等等优点,一下子就促进了计算机的发展。
1.2 操作型数据库和分析型数据库 随着关系数据库理论的提出,诞生了一系列经典的RDBMS,如Oracle,MySQL,SQL Server等。这些RDBMS被成功推向市场,并为社会信息化的发展做出的重大贡献。然而随着数据库使用范围的不断扩大,它被逐步划分为两大基本类型:
操作型数据库
主要用于业务支撑。一个公司往往会使用并维护若干个操作型数据库,这些数据库保存着公司的日常操作数据,比如商品购买、酒店预订、学生成绩录入等;分析型数据库
主要用于历史数据分析。这类数据库作为公司的单独数据存储,负责利用历史数据对公司各主题域进行统计分析; 那么为什么要"分家"?在一起不合适吗?能不能构建一个同样适用于操作和分析的统一数据库?答案是NO。一个显然的原因是它们会"打架"…如果操作型任务和分析型任务抢资源怎么办呢?再者,它们有太多不同,以致于早已"貌合神离"。接下来看看它们到底有哪些不同吧。
1.3 操作型数据库 VS 分析型数据库 因为主导功能的不同(面向操作/面向分析),两类数据库就产生了很多细节上的差异。这就好像同样是人,但一个和尚和一个穆斯林肯定有很多行为/观念上的不同。
接下来本文将详细分析两类数据库的不同点:
数据组成差别 - 数据时间范围差别
一般来讲,操作型数据库只会存放90天以内的数据,而分析型数据库存放的则是数年内的数据。这点也是将操作型数据和分析型数据进行物理分离的主要原因。
数据组成差别 - 数据细节层次差别
操作型数据库存放的主要是细节数据,而分析型数据库中虽然既有细节数据,又有汇总数据,但对于用户来说,重点关注的是汇总数据部分。
操作型数据库中自然也有汇总需求,但汇总数据本身不存储而只存储其生成公式。这是因为操作型数据是动态变化的,因此汇总数据会在每次查询时动态生成。
而对于分析型数据库来说,因为汇总数据比较稳定不会发生改变,而且其计算量也比较大(因为时间跨度大),因此它的汇总数据可考虑事先计算好,以避免重复计算。
数据组成差别 - 数据时间表示差别
操作型数据通常反映的是现实世界的当前状态;而分析型数据库既有当前状态,还有过去各时刻的快照,分析型数据库的使用者可以综合所有快照对各个历史阶段进行统计分析。
技术差别 - 查询数据总量和查询频度差别
很多人遇到一种情况,就是自己的应用使用QQ登录的时候,在不同客户端,返回的openid竟然不一样,导致统一个用户在不同客户端创建了不同的账号。
第一种:需要发邮件给腾讯开放平台进行数据打通,具体如下
数据打通流程:现支持同一个开发者账号下的网站应用和移动应用进行数据打通。 申请的应用打通数据后会返回相同的unionID和不同的openid,开发者可以将unionID做为用户标识进行保存。如果需要打通可以发送邮件至connect@qq.com,并提供appid、appkey、公司营业执照和网站备案信息截图,审核会在5个工作日完成处理,请以邮件回复信息为准。谢谢!
数据打通表格下载地址:http://wiki.connect.qq.com/%E5%BC%80%E5%8F%91%E8%80%85%E5%8F%8D%E9%A6%88
第二种:
首先我们要理解为什么会出现不同的账号,因为我们创建应用的时候是分开来创建的(在安卓的页面创建了安卓,然后点击iOS的又创建了iOS端的,点击网页端的又创建了网页应用)所以这样就会生成不同的AppId,自然就会生成不同的openid了,所以我们在创建的时候顺序应该如下:
1.首先进入你的腾讯开放平台管理中心,然后先创建一个应用(之后创建都需要在这个应用选择平台信息创建才会视为同一个应用),创建好之后,点击创建好的应用详情,右上角点击平台信息点击创建安卓或网页应用即可,审核时间较短
目录
1.先查看是否有未分配的磁盘空间
2.分区 3.格式化新分区(这里以ext4为例)
4.创建一个目录用于挂载
5.将新分区挂载到目录
6.查看新的磁盘分区情况
7.配置系统在启动时自动挂载
1.先查看是否有未分配的磁盘空间 lsblk 可以看到/dev/vdb 是一个 200GB 大小的磁盘,但是尚未分区或挂载。
通过 df -h也看不到该磁盘
2.分区 使用 fdisk 对 /dev/vdb 进行分区
fdisk /dev/vdb 输入 n 来创建一个新分区。选择主分区(Primary Partition)或扩展分区(Extended Partition)。提供分区的起始扇区和结束扇区,或者可以选择分区大小(+size)。如果你想使用整个磁盘,可以按 Enter 使用默认值。使用 p 命令来打印分区表,确认你的分区是否正确。如果一切都正确,使用 w 命令保存更改并退出。 3.格式化新分区(这里以ext4为例) mkfs.ext4 /dev/vdb 4.创建一个目录用于挂载 mkdir /data 5.将新分区挂载到目录 mount /dev/vdb /data/ 6.查看新的磁盘分区情况 现在通过 df -h 也可以看到了
至此该文件夹已经可以使用了,但是每次重启服务器后需要收到挂载,比较麻烦
7.配置系统在启动时自动挂载 1.编辑 /etc/fstab
vim /etc/fstab 2.添加相应的挂载条目
/dev/vdb /data ext4 defaults 0 0 3.保存退出.
完成!
面对计算机报告的 mfc140.dll 文件遗失错误,这通常表明系统中缺少一个关键的动态链接库文件,该文件对于运行以 Microsoft Foundation Class (MFC) 库编写的程序十分重要,尤其是那些需要图形界面的应用程序和一些游戏。若没有这个文件,依赖它的软件可能无法启动或在运行中出现故障。在本文中,我们将详细探讨如何有效诊断和解决 mfc140.dll 文件丢失的情况。我们会提供一系列的步骤和建议,如怎么快速修复mfc140.dll文件?解决mfc140.dll缺失的方法。
一.mfc140.dll是什么文件 mfc140.dll是一个属于Microsoft Foundation Class (MFC) 库的文件,该库隶属于Microsoft Visual Studio。MFC 库旨在帮助开发者更便捷地构建Windows平台上的应用程序,尤其是包含图形用户界面(GUI)的软件。当开发者利用 MFC 开发他们的应用时,这些应用在执行时需要引用mfc140.dll文件中的资源和代码。
二.mfc140.dll丢失的根本原因 `mfc140.dll`丢失往往发生在以下几种情况:
- 程序安装不完整或损坏。
- 系统更新或升级导致兼容性问题。
- 病毒或恶意软件攻击。
- 误删除或其他软件错误地删除了DLL文件。
mfc140.dll文件丢失或损坏时的影响
如果应用程序尝试调用丢失或损坏的mfc140.dl文件中的函数或类,应用程序可能会崩溃或完全无法启动。
用户可能看到包含 “mfc140.dll 缺失” 或 “找不到 mfc140.dll” 等信息的错误消息。
三.mfc140.dll文件属性 文件名: mfc140.dll
描述: MFCDLL 共享库 - Retail Version
文件版本: 特定于 Visual Studio 版本;例如,对于 VS 2015, 它可能是 14.0.xxxxx.xxxxx
产品名称: Microsoft® Visual Studio® 2015
产品版本: 14.0.xxxxx.xxxxx 或与 Visual Studio 2015 对应的其他版本号
一、Win上传文件到Linux scp win文件路径 用户名@LinuxIP:要上传的地址
scp E:\proj\ywdp-ruoyi-2024-1-2\ruoyi-admin\target\ruoyi-admin.jar root@192.168.1.6:/root/test 输入yes
输入密码(此处输入密码看不见的)
上传案例: Linux文件下 二、Linux下载文件到Win指定文件 scp 用户名@LinuxIP:Linux文件地址 Win文件存储路径 scp root@192.168.1.6:/root/test/a.txt D:\Desktop\test 输入密码(隐式输入)
下载案例: Win对应文件夹 完美谢幕
某校的体能考试中,男女生共同的体能项目为800米,立定跳远。还有一项男生为俯卧撑,女生为仰卧起坐。当输入n名学生(不超过20名)的成绩时,输入信息包括姓名、学号、性别、800米成绩、立定跳远成绩和俯卧撑/仰卧起坐的成绩,(假定输入成绩都是正确的)。如果为男生,最后一项成绩为俯卧撑,如果为女生则为仰卧起坐成绩。请输出所有各科目(800米、立定跳远、俯卧撑、仰卧起坐)的平均成绩(整数)及需补考(单个科目成绩低于60分)学生的姓名、学号和性别。
输入格式: 第一行为学生数n
第二行开始为n个学生的姓名、学号、性别、成绩1、 成绩2 、成绩3
输出格式: 第一行为每个科目的平均成绩,以逗号分隔
第二行开始为需补考人员的姓名、学号和性别,以逗号分隔,每个学生信息占一行
姓名,学号,性别
…
输入样例: 6 Lili 2001 M 80 50 90 Jim 2002 F 70 70 90 Tom 2003 F 90 80 90 May 2004 F 80 50 60 Jary 2005 M 30 50 90 Xiao 2006 M 60 80 100 输出样例: 68,63,93,80 Lili,2001,M May,2004,F Jary,2005,M #include<stdio.h> struct Student { char name[10];int number;char sex;int score[3]; }; int main() { int n,t1=0,t2=0,t3=0,t4=0,a1,a2,a3,a4; scanf("
准备工作 创建一个头文件(SList.h),两个源文件(SList.c和test.c)
SList.h:用于包含库函数的头文件,链表节点结构体声明,接口函数的声明等【另外两个源文件要包含SList.h这个头文件,才能使用其中的声明】SList.h:用于实现单链表的接口函数test.c:存放main函数,用于链表的测试 ——————————————————————————————————————————————————
上图包含了以下3个操作
1.库函数的头文件的包含:
stdio.h:输入/输出等函数stdlib.h:动态内存申请assert.h:报错函数assert 2.给链表节点的数据域的数据类型重命名
为什么要重命名呢?
这是为了以后如果改变了SL结构体中数据存储的类型时,不用到处改函数参数等地方的数据类型,只要改typedef后的int 为对应要改成的数据类型就可以。
3.链表节点结构体定义
——————————————————————————————————————————————————
打印链表 代码: 函数参数设计: 因为打印链表不会改变头指针,所以传输一级头指针
函数形象图解 【方框的上方框为数据域,下方框为指针域】
——————————————————————————————————————————————————
尾插 函数参数设计 SLTNodephead:
因为当第一个节点为空的时候头指针指向的地址会改变,
所以传头指针的地址进去,用二级指针接收**x:
要插入的数据 函数原理 先动态内存申请一个节点的空间
如果链表为空,就让新的节点成为第一个节点,让phead指向新节点。
否则就用cur遍历链表,用prev指向cur的前一个节点【实现方式:cur指向下一个节点之前,让prev=cur】,这样当cur遍历指向NULL结束循环时,prev就指向最后一个节点,此时再尾插,让prev的指针域指向新节点,再让新节点的指针域指向NULL。
(也可以省去prev,把while循环结束的条件换成cur->next,当cur->next为空时循环结束,此时cur正好指向链表的最后一个节点)
图解 【方框的上方框为数据域,下方框为指针域】
——————————————————————————————————————————————————
头插 函数参数设计 SLTNodephead:
因为头指针指向的地址会改变,
所以传头指针的地址进去,用二级指针接收**x:
要插入的数据 图解 【方框的上方框为数据域,下方框为指针域】
——————————————————————————————————————————————————
尾删 函数参数设计 SLTNodephead:
因为当链表只有一个节点的时候头指针指向的地址会改变,
所以传头指针的地址进去,用二级指针接收** 图解 【方框的上方框为数据域,下方框为指针域】
——————————————————————————————————————————————————
头删 函数参数设计 SLTNodephead:
因为头指针指向的地址会改变,
所以传头指针的地址进去,用二级指针接收** 图解 【方框的上方框为数据域,下方框为指针域】
——————————————————————————————————————————————————
随机查找 函数参数设计 SLTNode*phead
因为打印链表不会改变头指针,所以传输一级头指针x:
查找的值 ——————————————————————————————————————————————————
随机插入 函数参数设计 SLTNodephead:
因为pos等于头指针的时候头指针指向的地址会改变,
哈喽,大家好,很久没写东西了,近期公司要求导出的性能测试报告需要美化一些,那么我也在这里记录一下。
先看导出的html页面整体效果:
关于应用:
前期步骤就不写了,这里只讲如何配置:
首先建立一个以.jtl的文件,然后导入文件,提示error,不用管,因为刚建好,里面没有数据,报错正常,然后点击运行就行
最后在tools里面,选择第四个。
然后点击下面的 Generate report 生成测试报告。
系统性调研目标的工具
系统性调研的目标 相对于背景调研,系统行调研是对公司可控因素(公司内部)和直接作用力(消费者、竞争者)进行的调研。系统性调研需要输出结论,为达成产品或公司的战略目标而制定行动的指导方针,对产品经理来演,就是思考产品的定位
黄色部分:系统性调研的范围
相关工具:3C-STP-5P、价值链、商业画布和关键成功因素
3C-STP-5P 该工具是一套常用的市场营销战略框架,经过多年工作的时间,在产品调研中也是非常有效果的。
我们要学会从不同角度使用上图的框架思考,不同的角度是指客户、竞争者和公司。在做调研的时候,要站在客户的角度思考3C-STP-5P;站在竞争者的角度思考竞争者的3C-STP-5P.
下面以RTC(实时音频服务)来做3C-STP-5P分析
如何调研客户 客户是付费者,用户是最终使用者,如何站在用户的角度思考问题?
商业模式画布案例:直播客户
客户驱动力分析
客户的驱动力分析是确保自身产品的目标市场是良好的,国家政策是支持的,泛娱乐市场是可以稳定发展的,娱乐直播市场分析如下:
1.C端观众形成习惯,人数稳定在4亿左右
2.市场直播APP众多,竞争激烈
3.B段客户的产品创新,实时音频视频提高了互动性
4.政策支持娱乐行业的发展
可以稳定民生,为老百姓提供娱乐消遣的方式,消费群体稳定,市场处于成熟期
客户聚焦的细分市场
可以按照客户服务的行业属性划分,按行业细分可以划分为社交娱乐、电商直播、游戏直播、体育直播、招聘直播
图片来源于网络
关键成功因素
不同行业的客户,对产品属性的要求是不一样的,要对产品的功能和性能做一些取舍,产品经理梳理出来哪些是Must have,哪些是wont have
2.如何调研竞争对手 假如我们是售卖RTC服务的,那么以下厂商满足的都是音视频需求,但是提供的产品形态不同,可以分为直接竞品(PasS):腾讯云、阿里云、声网、即构。间接竞争对手(Saas)产品:钉钉会议、小鹅通、微吼
分析竞品的商业模式画布---声网
STP分别是市场细分、目标市场、产品定位
下图转成思维导图
市场细分:人口统计学、消费心理学、生活方式、兴趣、行为特征
目标市场:不同的细分市场,对应产品、售价、渠道和市场策略是不同的,要根据公司资源选择目标市场
产品定位:选定目标市场吼,就要交付相应价值主张的产品或服务
关注STP,可以帮助我们可以设计出差异化的产品,避免红海竞争,打价格战;提高投入产出比,为销售提供有效的解决方案,提高客户的满意度和留存,降低成本,较少无用的产品迭代和市场宣传。
矩阵法
通过市场占有率和销售增长率把产品分为金牛产品、瘦狗产品、明星产品、问题产品
RTC服务作为案例:
确定市场细分标准来对市场进行细分
上图仅学习使用
5P
价值链
每个公司的业务都是由一定的活动组成的,生产、销售、服务等等,企业和企业的竞争其实并不是某一个产品业务的竞争。
美团和饿了么的外卖大战竞争,在早期他的地推模式,美团的地推比饿了么的地推强大得多,所以快速的抢占了B端市场。所以在产品经理日常的工作中,横向的协调资源支持,只有资源支持协调好后,才可以让产品获得足够的市场份额
价值链包括两大类活动:
为企业创造价值的基本活动为促进和提高基本活动绩效所必需的支持活动 雷达图
图片来自于网络
3.公司的自我评估 对于公司的自我评估,参与上面介绍的竞争对手的评估方式
工具名称
PESTEL
波特五力
3C-STP-5P
价值链
关键成功因素
商业模式画布
工具介绍
环境分析模型:分别是政治、经济、社会文化、技术、环境因素和法律因素
五中力量影响,分别是供应商、购买者、现有竞争者、潜在竞争者和替代品生产商
3C指竞争者、消费者和公司本身,STP对应的是市场细分、目标市场和定位;5P是指产品、价格、渠道、促销和政策
每个业务都由生产、营销、交互和支持其产品或服务过程中所进行的一系列活动组成,公司内部进行的各种活动组成价值链
对业务在市场上生存和繁荣影响最大的因素
提供可视化表格,描述公司或产品的价值主张、细分市场、成本等9个因素,通过说明潜在的因素帮助企业进行规划
适用范围
企业外部环境分析(行业背景)
企业外部环境分析(行业背景)
市场分析的系统性工具
企业竞争者之间
源码下载:
git clone --recursive https://github.com/obsproject/obs-studio.git
提交点:4176f9b13aa9278dbc6c0b0c366f7f7b9ef8c68c
git submodule update --init --recursive
下载依赖项:
windows · Releases · obsproject/obs-deps · GitHub 下载依赖项,这里要下载的文件有两个,我选择的都是64位的:
这里我选择是qt5,选了qt6的版本我cmake会失败,无解决
开始构建项目# 打开cmake,设置obs源码路径和输出路径,并添加deps,QT(上图中的解压路径,不参考下图)路径,其中DepsPath设置为deps路径,QTDIR设置为QT路径。设置完成后点击Configure
1 2 分别后成功如下图:
点击 open Project
编译 go! 编译过程中,此行会报错:修改成:E:\opensrc\obs_studio_src\obs-studio\UI\obs-app.cpp
branchesText = branchesFile.readAll().toStdString();
linux命令大全
linux内核
0、 linux的版本 优麒麟 20.04 LTS Pro
银河麒麟桌面操作系统V10和银河麒麟高级服务器操作系统V10,分别推出了飞腾、鲲鹏、龙芯、申威、海光、兆芯六个版本(linux5.10.5)
银河麒麟操作系统社区版4.0.2-SP2是基于优麒麟 16.04 长期支持版本进行定制,集成了 UKUI 桌面环境和第三方应用。
buster:debian10的代号。bionic:Ubuntu 18.04的代号。focal : Ubuntu20.04的代号。Hirsute:Ubuntu 21.04 Ubuntu版本一览表 版本号 代号 发布时间 22.04 Jammy Jellyfish 2022-04-22 21.10 Impish Indri 2021-10-14 21.04 Hirsute Hippo 2021-04-22 [13] 20.10 Groovy Gorilla 2020-10-22 20.04 LTS Focal Fossa 2020-04-23 19.10 Eoan Ermine 2019-10-17 19.04 Disco Dingo 2019-4-19 18.10 Cosmic Cuttlefish 2018-10-18 18.04 LTS Bionic Beaver 2018-04-26 17.10( GNOME成为默认桌面环境) Artful Aardvark 2017-10-21 17.04 Zesty Zapus 2017-04-13 16.
引入相关包 from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, auc, roc_auc_score import joblib import os import pandas as pd from sklearn.model_selection import train_test_split import pickle path = '/Users/xinghuatianying/data/DataSets/im_cheat/' os.chdir(path) 加载数据 训练样本demo:
label msg 1 全网最低价完善数据 手把手教你引流 详细+V:vd12388 1 耍.微.店等.级评.价销.量回头.率➕15314268311 1 我收姐妹+我QQ2877613260 1 违规啥啊 佳651815289➕我q 0 温和洁面膏+红粉爽肤水 0 小卡盲盒改地址 0 20杯(每个口味各4杯) def load_data(): data = pd.read_csv('msg_train.csv', sep = "\t", names=['label', 'msg']) #对数据进行随机打乱 data = data.sample(frac=1, random_state=42) # print(data.
1.事件: 必然事件:Ω
不可能事件:∅
和事件:A1,A2,A3,…,An至少有一个发生。
积事件:A1,A2,A3,…,An同时发生。
差事件:A发生B不发生,记作A-B。
逆事件:Ω是样本空间,A是事件,Ω-A称作A的逆事件,记作A-。
互斥事件:A与B不能同时发生。
2.概率: 加法法则: 设A、B是互不相容事件(AB=φ),则P(A∪B)=P(A)+P(B),对任意两个事件A与B,有P(A∪B)=P(A)+P(B)-P(A∩B)
乘法公式: P(AB)=P(A)×P(B|A)=P(B)×P(A|B),P(ABC)=P(A)P(B|A)P(C|AB)
全概率公式: 如果事件B1、B2、B3…Bi构成一个完备事件组,即它们两两互不相容,其和为全集;并且P(Bi)大于0,则对任一事件A有P(A)=P(A|B1)P(B1) + P(A|B2)P(B2) + … + P(A|Bi)P(Bi) 或者:p(A)=P(AB1)+P(AB2)+…+P(ABi)),其中A与Bi的关系为交。
贝叶斯概率公式: P(A∩B) = P(A)*P(B|A)=P(B)*P(A|B)。可变形为:P(A|B)=P(B|A)*P(A)/P(B)
佰努利二项概率公式: P(k) = C(n,k) * p^k * (1-p)^(n-k)
3.分布: 1.0-1分布 2.二项分布 3.几何分布: 4.泊松分布: 5.均匀分布: 6.标准正态分布:
U盘在正常使用中出现了问题:
此时此刻,千万不要点击格式化磁盘
如果是Windows电脑,只需要Win+R 打开CND命令提示符界面(以Win10为例就是邮件点击开始菜单图标就能看见)
然后输入:chkdsk D:/f (其中D是你U盘的盘符,f是fix修复的意思)
运行完之后就可以双击打开U盘了,如果还不可以,可以尝试一下再次运行或者重新插入U盘。
/** 对集合进行比较,获取增删值进行更新操作 * @param oldArr 旧数组 * @param newArr 新数组 * @return Map 包含两个数组,相较于旧数组,新数组多了哪些元素,以及少了哪些元素 */ public static Map<String, String[]> CompareStringArray(String[] oldArr, String[] newArr){ List<String> addList = new ArrayList<>(); List<String> deleteList = new ArrayList<>(); for (String anOldArr : oldArr) { if (!ArrayUtils.contains(newArr, anOldArr)) { deleteList.add(anOldArr); } } for (String aNewArr : newArr) { if (!ArrayUtils.contains(oldArr, aNewArr)) { addList.add(aNewArr); } } String[] addArr = addList.toArray(new String[addList.size()]); String[] deleteArr = deleteList.toArray(new String[deleteList.size()]); Map<String, String[]> res = new HashMap<>(); res.
目录
1.乐观锁和悲观锁
1.1.什么是乐观锁和悲观锁
1.2.乐观锁和悲观锁的区别
1.3.综合案例
2.逻辑删除
2.1.什么是逻辑删除
2.2.为什么使用逻辑删除
2.3.综合案例
2.3.1.官方提示
2.3.2.配置方式
2.3.3.案例演示
3.分页
1.乐观锁和悲观锁 1.1.什么是乐观锁和悲观锁 乐观锁( Optimistic Locking )和悲观锁是数据库中的两种并发控制机制。
乐观锁假定数据一般情况下不会发生冲突,因此在读取数据时不会对其加锁,而是在写入时先比较数据版本号(比如时间戳)是否相同,再进行操作。如果版本号相同,则表示该数据没有被其他进程修改,可以进行写操作;如果版本号不同,则表示该数据已经被其他进程修改,写操作会失败,需要重新读取数据进行操作。
乐观锁是为了解决并发过程中数据更新冲突的问题,乐观锁能提高并发过程中的程序吞吐量。
悲观锁则假定数据会发生冲突,因此在读取数据时就会对其加锁,防止其他进程同时修改此数据,直到当前进程操作完成并解锁后,其他进程才能再次操作该数据。
1.2.乐观锁和悲观锁的区别 乐观锁和悲观锁的区别主要有以下几点:
加锁时间不同:乐观锁在读取数据时不会对其加锁,而是在写入时进行比较和加锁操作;悲观锁在读取数据时就会对其加锁。
冲突处理方式不同:乐观锁会在写入时进行比较和冲突检测,如果版本号不一致则操作失败,需要重新读取数据;悲观锁则会阻塞其他进程对该数据的访问,直到当前进程完成操作并解锁。
适用场景不同:乐观锁适用于并发量比较小、数据量比较大、操作更多为读取的场景;悲观锁适用于并发量比较大、数据量比较小、操作更多为写入的场景。
总的来说,乐观锁适用于并发冲突较少的场景,可以提高系统的并发性;悲观锁适用于并发冲突较多的场景,可以保证数据的一致性和安全性。
1.3.综合案例 使用数据版本(Version)记录机制实现乐观锁,这是乐观锁最常用的一种实现方式。
如何实现乐观锁?
@Version 注解标记乐观锁,通过 version 字段来保证数据的安全性,当修改数据的时候,会以 version 作为条件,当条件成立的时候才会修改成功。
1)取出记录时,获取当前 version
2)更新时,带上这个 version
3)执行更新时,update tableName set version = oldVersion + 1 where version = oldVersion
4)如果 version 不对,就更新失败
如何使用MyBatis-Plus实现乐观锁?
第一步:给数据库表添加 version 字段,并设置默认值为1
第二步:实体类增加 version 属性,并添加 @Version 注解
@Getter @Setter @TableName("t_book") public class Book implements Serializable { private static final long serialVersionUID = 1L; /** * 书本类型 */ @TableField("
方法1:使程序休眠50毫秒
1. 描述
Python time sleep() 函数推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。2. 语法
sleep()方法语法:time.sleep(t)3. 参数
t -- 推迟执行的秒数。4. 返回值
该函数没有返回值。5. 实例
以下实例展示了 sleep() 函数的使用方法:
import time print "Start : %s" % time.ctime()
time.sleep(5)
print "End : %s" % time.ctime()
以上实例输出结果为: Start : Tue Feb 17 10:19:18 2013 End : Tue Feb 17 10:19:23 2013 方法2:休眠50毫秒,1秒=1000毫秒,50 毫秒=0.05 秒
from time import sleep sleep(0.05)
本文分享自华为云社区《2023年度华为云优秀开发者榜单揭晓,来看看你榜上有名吗?》,作者:华为云社区精选。
回首刚刚过去的2023年
开发者作为华为云生态的中流砥柱,发挥着决定性力量
他们来源于各类圈层、各大行业
有热爱分享的技术博主,积极参与活动的贡献者
有HCDE专家、有HCDG核心组成员
向活跃在华为云生态沃土的广大开发者们致敬!
展望2024年
华为云开发者联盟将继续携手广大开发者
百尺竿头更进步,相聚云端共成长!
点击查看颁奖视频
请查收这份荣耀榜单👇
共享属于开发者的高光时刻吧
点击关注,第一时间了解华为云新鲜技术~
文章目录 1.VMware/CRT:netstat -nal | grep 221.1 VMware:netstat -anp|grep ssh,vi /etc/ssh/sshd_config放开Port 22,service sshd restart,chkconfig可将sshd加入到系统服务中开机后sshd将自动启动:chkconfig sshd on1.2 CRT:改注册信息要打开CRT客户端在最上端Help栏中Enter License Data 2.linux命令:linux组成:内核(=操作系统,和硬件打交道,驱动)。shell(和用户打交道,用户指令翻译成机器码给内核)。文件系统(文件组织方式,linux没有盘符,有目录/文件/链接link)。应用程序2.1 关机/重启/注销2.2 系统信息和性能2.3 用户和用户组2.4 网络和进程管理2.5 系统服务2.6 文件和目录2.7 文件查看和处理2.8 打包和解压2.9 RPM包管理2.10 YUM包管理2.11 DPKG包管理2.12 APT软件工具2.13 用户管理及权限2.14 正则:\d,?* +这些是[a-z]{m,n}这些的简写2.15 sed:管道过滤(替换,删除),sed -i 's/\r//g' 文件(删除从txt复制来代码的换行符)2.16 awk:-F指定分隔符,-V设置变量,NF列数,$NF是一行数据最后一列的值,多用于对字段(像数据库中的字段)2.17 grep:元字符即\d,\D这些是Perl正则-P,扩展正则-E 3.vi命令:三种(命令行[Esc],编辑[i],底行[:wq])模式切换 1.VMware/CRT:netstat -nal | grep 22 1.1 VMware:netstat -anp|grep ssh,vi /etc/ssh/sshd_config放开Port 22,service sshd restart,chkconfig可将sshd加入到系统服务中开机后sshd将自动启动:chkconfig sshd on VMware15和CentOS6.9:链接:https://pan.baidu.com/s/1HV6WqUTAwlOSjWkLXVrCRw ,提取码:1x8e 。VMware15【CG392-4PX5J-H816Z-HYZNG-PQRG2】直接下一步安装,右击图标属性 - 兼容性 - 更改所有用户的设置 - 勾上以管理员身份运行此程序。
点击创建新的虚拟机:自定义(高级)-稍后安装操作系统-linux-版本centos6 64位-D:\vm.\cent0s6-使用仅主机模式网络-将虚拟磁盘存储为单个文件(动态分配20G硬盘)。
编辑虚拟机设置:选中网络适配器添加-CD/DVD使用CentOS6的iso文件(开启此虚拟机出问题:控制面板-卸载程序-Microsoft Visual C++的两个x64和x86文件右击卸载,不点卸载,点修复再重启计算机)。
由于定制功能需要做到定制软连接
1.硬链接
删除后,源文件还存在,相当于一个备份,即使误删除了一个,另一个也存在;
方法:ln xxx源文件 xxx目标文件
2.软链接
删除后,源文件不存在,更像一种映射;
ln -s xxx源文件 xxx目标文件
3.连接就是生成一个文件,里面是链接,当路径存在时,就会链接到对应的文件夹;
例:
里面是一个链接文件;
运行时就会变成对应的文件夹了
==========================================================================
linux环境直接用ln -s 即可看到对应效果,但是在arm的文件系统中是可读文件系统
所以ln无法使用
于是要在打包根文件系统的时候就要把链接打包进去
链接文件可以先创建空的文件夹把对应的路径设置好;然后通过cp的方式预制近文件系统里面,这样打包进rootfs.img里面,就可以实现对应的软链接功能.
文章目录 Linux系统目录结构Linux用户和用户组用户管理概述用户账号和用户组用户概念用户组概念 Linux用户和组的关系 Linux用户管理添加用户 useradd选项修改用户 usermod用户账号口令管理passwd删除用户 userdel Linux用户组管理添加新组groupadd修改群组groupmod删除群组groupdel Linux超级用户与伪用户用户身份切换susudo Linux系统目录结构 文件系统组织结构
/lib 系统开机所需要最基本的动态链接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found 一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/etc 所有系统管理所需要的配置文件和子目录。my.conf
/usr 用户的很多应用程序和文件都放在这个目录下。
/bin 是Binary的缩写,这个目录存放着经常使用的命令
/sbin (usr/sbin、/usr/local/sbin) sbin就是per user的意思,这里存放的是系统管理员使用的系统管理程序
/home 存放普通用户的主目录,在Linux中的每个用户都有一个自己的目录,一般该目录一用户的账号名命名
/root 该目录为系统管理员,超级权限者的用户目录
/boot 存放的启动Linux时使用的一些核心文件,包括一些链接文件和镜像文件
/proc 虚拟目录,是系统内存的映射,访问这个目录来获取系统信息。
/srv service 的缩写,该目录是存放一些服务启动之后需要提取的数据
/sys Linux2.6内核的一个很大变化,该目录安装了2.6内核中新出现的一个文件系统
/tmp 存放临时文件
/dev 类似于 windows的设备管理器,把所有的硬件用文件的形式存储
/media Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,Linux 会把识别的设备挂载到这个目录下。
/mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。d:/ myshare
/opt 这是给主机额外安装软件所摆放的目录。如安装 ORACLE数据库就可放到该目录下。默认为空。
/usr/local 这是另个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
/var 这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
/selinux [security-enhanced linux] 类似 360 Selinux是一种安全子系统,它能控制程序只能访同特定文件。
登录系统后,在当前命令窗口下输入命令:
ls / 在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
/etc: 上边也提到了,这个是系统中的配置文件,如果你更改了该目录下的某个文件可能会导致系统不能启动。
本文来源 机器之心 不实际试穿,就能尝试各种服饰,虚拟试衣技术让「QQ秀」升级成了真人版,为时尚行业打开了新世界的大门。
然而,现有的虚拟试衣方法在逼真性和细节上的一致性方面还存在挑战。虽然扩散模型在创造高品质和真实感图像方面表现出众,但在虚拟试衣等特定场景中,它们在维持控制力和一致性方面还有待提高。
Outfit Anyone 利用了一种创新的双流条件扩散模型,有效地解决了这些问题,能够精确地处理服装的变形效果,实现更加逼真的试穿体验。Outfit Anyone 最大的特点是其极强的适应性和广泛的应用范围,不仅能调整以适应不同的姿势和体形,无论是动画形象还是真人,都可以一键换装。现已开放试玩。
GitHub: https://github.com/HumanAIGC/OutfitAnyone
Project: https://humanaigc.github.io/outfit-anyone/
Demo 体验 (V0.9): Modelscope: https://modelscope.cn/studios/DAMOXR/OutfitAnyone/summary
Huggingface Demo: https://humanaigc.github.io/outfit-anyone/
主要方法:条件扩散网络
虚拟试衣任务本质是一个条件生成的任务,也就是基于给定一张服饰图片作为条件输入,控制生成服饰在人身上的试衣图片。当前的 diffusion model 在生成的可控性方面做了很多工作,比如基于 tuning-based 的方法,如 lora, dreambooth 等,可以实现通过针对某一个或几个概念的样本图片进行针对性训练,学习对应的某个 concept, 在生成的过程中可以实现对应 concept 或者物体的生成。然而这种方式以来 finetuning,计算和时间成本高,且难以扩展到多个物体的同时生成。
另外一类控制生成的方法是以 controlnet 为代表,其主要原理是通过 zero-conv 训练一个插件的网络,可以实现利用 mask,canny edge, depth 等多种信号控制最终生成图片的 layout。这种方式的最大的弊端在于控制信号与目标图像在空间上是 align 的,但服饰与控制信号和目标图像在空间分布上有较大的差异,导致无法直接使用,从而限制了其应用的拓展范围。
因此,作者提出了一种新的支持试衣功能的条件生成网络,实现服饰的形变,光照的变化,服饰新视角变化情况下的生成,同时能够保持服饰的纹理,版型,细节的一致性。
相比 lora,dreambooth 等方法的好处是,不再需要针对每个物体进行 finetuning,具有很强的泛化性,从而可以实现 zero-shot 一键试衣。
此外,为了提升试衣结果的真实性,作者提出了 refiner 网络,对服饰的细节进行提升,从而能够提升服饰的材质、色彩,使其更接近真实的试衣效果。Outfit Anyone 也支持各种复杂的服饰,多样的姿势,以及适配多种体型,使其能够满足用户多样化的试衣需求。
框架设计
近些年,虽然模型仍层出不穷,但模型设计逐渐走向同质化。主要可以分为 3 个部分:
(1)输入信号(图像 / 视频 / 文本 /timestep)转化为 embedding 参入到后续网络计算中;
原文地址:【云原生】一文搞懂Kafka中的listeners和advertised.listeners以及其他通信配置
参数详解 listeners 侦听器列表,这里配置的监听器底层调用的是
ServerSocketAdaptor.bind(SocketAddress local) 那么这个说明什么意思呢?说明你配置的监听器将被用于监听网络请求。
简单理解就是你建立监听一个通道, 别人能够通过这个通道跟你沟通。
所以我们需要设置 IP:Port.
这个属性的格式为:
listeners = listener_name://host_name:port,listener_name2://host_nam2e:port2 可以同时配置多个, 并且用逗号隔开监听器的名称和端口必须是唯一的, 端口相同, 就冲突了host_name 如果为空, 例如 (listeners = ://host_name:port), 则会绑定到默认的接口 (网卡), 一般情况下是localhost,底层调用的是 java.net.InetAddress.getCanonicalHostName() 将 host_name 设置为0.0.0.0 则会绑定所有的网卡, 也就是说不管从哪个网卡进入的请求都会被接受处理。但是请注意, 假如你设置的是0.0.0.0, 那么advertised.listeners 必须要设置, 因为advertised.listeners默认请看下使用的是listeners的配置发布到 zk 中, 发布到 zk 中是给其他 Brokers/Clients 来跟你通信的, 你设置0.0.0.0, 谁知道要请求哪个 IP 呢, 所以它必须要指定并明确 IP:PORT。具体详情请看下面示例 3listener_name 是监听名, 唯一值, 他并不是安全协议 (大部分人都会搞错), 因为默认的 4 个安全协议已经做好了映射, 例如 :PLAINTEXT ==> PLAINTEXT . 所以你经常看到的配置 ## 这个PLAINTEXT是监听名称,刚好他对应的安全协议就是 PLAINTEXT ## 当然这个是可以自定义的, 详细情况 后面的配置listener.
百年赛道无捷径,八方用户齐发声。
12月25日,小米集团创始人、董事长兼首席执行官雷军在个人账号官宣:
小米汽车技术发布会
将于12月28日下午2点举办
此时,距离2021年3月30日小米官宣造车,雷总感动了万千网友的那句“我决定亲自带队,这将是我人生最后一次重大创业项目,我愿意押上我人生所有积累的战绩与声誉,为小米汽车而战”刚好1000天。
1000天很长,它凝聚着100亿投入,4300位研发工程师的努力。
1000天也很短,众多米粉已经期盼了接近3年。
今天下午,小米汽车海报中新鲜路透了局部车身,更是让期待拉满。
那么,当我们谈“小米造车1000天”的时候,我们究竟在谈什么?
数说故事以海量社媒数据+SocialGPT大模型辅助分析,聚焦小米造车1000天背后的社媒传播与大众声音。
PART 1 自带流量,持续热烈
自小米官宣造车以来,一直“自带流量”,整体声量互动量持续热门。
在五大峰值时刻,小米汽车均引爆当日社媒讨论,日社媒评论互动数超千万,也引来网友自发讨论,创造了数以万计的UGC原创内容,并在12月25日官宣发布会定档达到讨论顶峰。
让我们再次回顾五大尖峰时刻:
在每个尖峰节点上,“看好”和“支持”的声音占比不小,但每个节点消费者的核心讨论观点也略有不同:
在首次官宣造车时,消费者讨论集中在两点:为雷军压上一切造车的勇气和魄力而感动,力挺雷总;支持小米,支持国货;同时希望小米把新能源汽车价格打下来。
500天发布会时,讨论集中在希望价格优惠、自动充电设计很棒;首台工程车下线,造车成功登陆工信部目录时,大家都在讨论帅气外观,是帕拉梅拉和Taycan的合体,与北汽集团的合作也备受关注。
技术发布会官宣定档后,油车再降价、只发技术不发产品、“交个朋友”价到底是多少,受到网友热烈讨论。
在社媒讨论阵地上,微博平台以85%的占比霸占社媒平台讨论阵地TOP1,抖音占据9%,小红书占比3%,专业媒体懂车帝占比1%。
微博上,由雷军和卢伟冰亲自“引流”,#小米汽车技术发布会#话题阅读量以11.4亿的热度拉满,“开门红”打响第一枪;自12月25日,传送出“这次只发技术,不发产品”的发布会信息以来,雷军每天的持续性“营业”,不仅把话题讨论热度持续拉高,也把小米汽车的发布期待值拉满,许多网友在雷军和小米汽车官方微博下留言表达了期待和支持。
发布会前1天,小米格局打开,在微博致敬比亚迪、蔚来、小鹏、理想、华为等中国新能源汽车先行者,多家车企热烈欢迎小米加入汽车大家庭,为小米汽车打call,这波操作好感度up。
懂车帝作为汽车行业知名资讯平台,早在2021年小米宣布造车时,就引起不少汽车博主高度关注,像@毒辣车评就带头发出“支持小米造车”的口号来振奋军心,并希望称霸全球电动市场的是小米。不少跟评也纷纷表示“支持民族品牌永远不狭隘”。
小红书上的热门内容更多的是轻松幽默地“玩梗”,雷军这条天命的微博再次热门。
PART 2 自带兴趣Buff,网友讨论不断
分析2023以来的社媒大数据,在用户自发创作的UGC内容中,排名TOP3的关键词是「猜测讨论」、「赞赏支持」和「竞品比较」。
从讨论内容看,37%的网友对小米汽车SU7新品展开猜测讨论,从外观“保时捷”、性能参数、到人车家生态一体的新玩法,全都猜了个遍。具体来说,主要分为“颜值党”、“技术派”、“价格敏感型”和“迫不及待型”。
21%的内容赞赏支持小米汽车,“米粉”们表示准备好了。期待值46%落脚于驾驶性等核心技术,澎湃OS「人车家全生态」也承载了19%的期待,与雷军微博回答网友关心的问题中,科技×生态的造车理念不谋而合。
当讨论小米汽车时,18%的内容是对小米汽车与其他品牌进行比较:最常对比的是与小米同为手机厂商跨界造车的华为做比较(42%),与老牌新能源汽车品牌特斯拉(19%)及比亚迪(15%)共同讨论。除了「价格有点贵,驾驶媲美保时捷」的保时捷品牌外(9%),网民更多将新兴新能源汽车品牌小鹏(6%)、理想(4%)、蔚来(3%)、极氪(2%)作为对标参考,推理分析小米汽车的市场定位。
PART 3 自带粉丝
还有哪些人更可能买SU7?
雷军作为赋能“年轻各种第一”的超级产品经理,小米汽车的身上也有着“年轻人的第一台车”,“年轻人的第一台保时捷”各种标签。
科技范儿?米粉情怀?性能?颜值?这群人会为什么样的车买单,也众说纷纭。
数说故事基于社媒大数据文本分析技术,运用AI智能识别消费者发布内容观点,总结出小米汽车与五款对标新能源车型(特斯拉Model3、智界S7、极氪007、小鹏P7、蔚来et5/et7)的社媒讨论人群进行画像特征分析,尝试拼出小米汽车用户的兴趣版图。
小米汽车SU7的画像词云中,最高频出现的是“米粉”,网友热评:“小米汽车上路,就差米粉的‘30万’。”此外,支持国货、价格实惠、科技控也排名靠前。
特斯拉Model3的性能评测中、续航里程及乘车体验讨论居多,成为性能派的追去的目标。
科技控为国货智界S7黑科技感所吸引,即将上市的极氪007则因快速充电的高颜值受到期待;颜值党更爱小鹏P7的外观、蔚来et5/et7的便捷换电更受消费者追捧。
历经千日,小米汽车终于将要迈出重要一步。
这些在社媒平台上不断发酵的信息与观点将会有怎样的回响?
12月28日14:00小米汽车技术发布会,我们共同期待。
背景:工作中经常操作Linux,最近总是搭建各种环境,生产环境要求防火墙必须打开,所以经常要用到防火墙的相关命令,这些命令我是真记不住,总结一下记录下来。 一、查看防火墙的状态 systemctl status firewalld 二、启停防火墙的命令 systemctl start firewalld 打开防火墙 systemctl enable firewalld 设置开机自启 systemctl stop firewalld 停止防火墙 systemctl disable firewalld 禁用防火墙 三、开放或者限制端口号 1、开放端口
(1)开启22端口号
firewall-cmd --zone=public --add-port=22/tcp --permanent 其中–permanent的作用是使设置永久生效,不加的话机器重启之后失效
(2)重新载入一下防火墙设置,使设置生效
firewall-cmd --reload (3)可通过如下命令查看是否生效
firewall-cmd --zone=public --query-port=22/tcp (4)如下命令可查看当前系统打开的所有端口
firewall-cmd --zone=public --list-ports 2、限制端口
(1)限制22端口号
firewall-cmd --zone=public --remove-port=22/tcp --permanent (2)重新载入一下防火墙设置,使设置生效
firewall-cmd --reload (3)可通过如下命令查看是否生效
firewall-cmd --zone=public --query-port=22/tcp (4)如下命令可查看当前系统打开的所有端口
firewall-cmd --zone=public --list-ports 三、开放或者限制IP地址 1、限制IP地址访问
(1)比如限制IP为192.168.0.200的地址禁止访问80端口即禁止访问机器
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="
2024 Navicat 16 最新激活教程 1. 下载Navicat2. 注意事项3. 安装Navicat4. 工具下载5. 备用方案 Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便。
最新版Navicat Premium 16已经发布了,之前我也写过一篇激活文章,仅仅是通过清除注册表。用14天免费时间来完成的。也就是试用期到期后,清除注册表后再次使用14天试用时间。但是这样临时解决还是可以的,长期做还是太麻烦了。
1. 下载Navicat 我们可以在官网直接下载就行了。
2. 注意事项 如果你之前安装过Navicat,在卸载完成后手动清除注册表信息。window+R输入regedit打开注册表,删除HKEY_CURRENT_USER -> SOFTWARE -> PremiumSoft
3. 安装Navicat 双击安装包,安装程序,注意安装的路径。
安装完成后,先不要急着打开。
断网打开激活工具!一定要断网!一定要断网!一定要断网!
选择安装目录后点击Patch(注意patch在整个过程中只能点一次!!!!)
然后点击generate得到keygen。并将值复制到Navicat中。
点击激活后选择手动激活
将请求码复制到request code框中,点击generate activation code
将得到的激活码复制到Navicat中。点击激活。
最后激活效果:
好了,现在我们可以愉快的使用Navicat进行工作了。最后表哥提醒,如果经济允许,还是希望可以支持正版!!!
4. 工具下载 安装包和破解工具均打包,微信公众号:风口IT猪的成长录,后台回复navicat获取。
2024年亲测有效!
5. 备用方案 如果实在搞不来,将下面代码保存为bat文件。每次试用到期后,点击该bat文件就行了。
@echo off echo Delete HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium\Registration[version and language] for /f %%i in ('"REG QUERY "HKEY_CURRENT_USER\Software\PremiumSoft\NavicatPremium" /s | findstr /L Registration"
查找日志过大文件 进入 /var/lib/docker/containers 文件夹该
文件夹需要 root 用户权限,因此需要先使用 su 命令切换到 root 用户;
$ cd /var/lib/docker/containers 使用 du -sh * | sort -hr 命令查看文件夹大小
$ du -sh * | sort -hr 694G cf48cf9218785067a367042e38c81e675952d7d39d47e3234a2dfab4c81a1051 11M ebfcd5e88b2dad4e14c52e7666e4bdff979ade9cf29ba1911ccf2628725a1c10 7.6M e65619bf8df39d023b3b6215d7167de2e0a83d527498e7600edb11de1fd68c3b 3.7M d6bb50b02d0e8e1ffb4efb37804614fa66403d324126d8cf36ca42f5a5b799c4 1.8G a21a41ddf958fd24d7f9d441a5229eb4dd40ff96b47503d73c3e980b4741ebb3 1.7G a0e13aeb7a6f9ca192595e761c55791f455531edd4a010ea3fd079538fb9140d 进入第一个最大尺寸的文件夹,可以看到 *-json.log 文件,一般就是这个文件比较大,需要清理;
$ du -sh * | sort -hr 694G cf48cf9218785067a367042e38c81e675952d7d39d47e3234a2dfab4c81a1051-json.log 28K config.v2.json 12K hostconfig.json 4.0K resolv.conf.hash 4.0K resolv.conf 4.0K mounts 4.0K hosts 4.0K hostname 4.0K checkpoints 不要使用 rm 命令删除,因为该文件一直被 docker 占用,所以无法使用 rm 进行正常删除,使用 cat /dev/null > *-json.
早期类型注意事项现有类型text1.服务器代码页中长度可变的非 Unicode 数据,字符串最大长度为 2^31-1 (2,147,483,647) 个字节。
2.当服务器代码页使用双字节字符时,存储仍是 2,147,483,647 字节。 3.根据字符串,存储大小可能小于 2,147,483,647 字节。varcharntext1.长度可变的 Unicode 数据,
字符串最大长度为 2^30 - 1 (1,073,741,823) 个字节。
2.存储大小是所输入字符串长度的两倍(以字节为单位)。
3. ntext 的 ISO 同义词为 national text 。nvarcharimage长度可变的二进制数据,从 0 到 2^31-1 (2,147,483,647) 个字节。varbinary
案例背景 本次案例是中国人民大学“人工智能与机器学习(2022年秋季)”课程的课堂竞赛。
比赛是根据有关电影的各种信息来预测电影的受欢迎程度,包括演员、工作人员、情节关键字、预算、收入、海报、上映日期、语言、制作公司、国家、TMDB 投票计数、平均投票等。
比赛是在kaggle上进行的,需要这代码演示数据的同学可以参考:数据
由于原始数据特征变量基本都是文本,本次案例最大价值在于特征工程的构建,即怎么把文本变为数值型变量。
数据读取 导入常用包
#导入数据分析常用包 import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.rcParams['font.sans-serif'] = ['KaiTi'] #中文 plt.rcParams['axes.unicode_minus'] = False #负号 读取训练集和测试集
data=pd.read_csv('movies_train.csv') data2=pd.read_csv('movies_test.csv') 查看数据前五行
data.head() 有点多就不展示完了
查看训练集和测试集数据基础信息
data=data.infer_objects() data2=data2.infer_objects() data.info() ,data2.info() 可以看到大部分变量都不是数值型,需要进行处理
变量信息解释 id- 电影ID。
title- 电影名称 文本变量
homepage- 电影主页 文本变量
genres- 电影类型 分类型变量
overview- 电影概述 文本变量
poster_path- 电影海报的位置 图片文本
tagline- 电影标语 文本变量
runtime- 电影的运行时间 数值型变量
特别说明:参考官方开源的yolov8代码、瑞芯微官方文档、地平线的官方文档,如有侵权告知删,谢谢。
模型、测试图像、测试结果、完整代码,放在github上,参考链接 模型和代码。
由于之前写了三篇yolov8检测部署板端芯片相关的博文,有网友让写一篇yolov8seg部署博客,一直迟迟未行动,最近忙中借闲匆匆对yolov8seg进行了梳理,尝试了对yolov8seg进行部署验证和仿真测试。总体感受,yolov8的检测由于使用DFL,使得(检测+后处理)相对慢不少,如果把DFL模块相关的放模型里做导致模型慢不少,如果放后处理中做后处理慢(到底是放模型中做还是放后处理中做,根据整个系统的资源合理放置,本示例中是放在模型中进行的);yolov8seg 还需处理mask系数,同时分割结果还需乘以系数,使得对板端部署不是很友好。
特别说明:本示例中模型的训练使用的数据并不是很多,模型效果无法保证,只是用来测试部署用的,如果换一张图像可能存在检测不到属于正常现象。分割相关的后处理可能对板端部署还不是很优化,欢迎共同探讨优化。
1 模型和训练 训练代码参考官方开源的yolov8seg 训练代码,由于SiLU在有些板端芯片上还不支持,因此将其改为ReLU,训练数据集是coco的一部分训练的,主要是用来测试流程用,模型效果无法保证,换一张图像测试检测不到正常。
2 导出 yolov8seg 的 onnx 本实例提供的导出onnx方式只适配本示例对应仓库的代码,如果用官方导出的onnx,请自行写后处理代码。谢谢
后处理中有些算在板端芯片上效率低或者不支持,导出 onnx 需要将板端芯片不友好或不支持算子规避掉。导出onnx修改的部分。
第一步:
将pt只保存权重值,增加代码如下图。
# 保存权重值 import torch self.model.fuse() self.model.eval() torch.save(self.model.state_dict(), './weights/yolov8n-seg_relu_80class_dict.pt') 修改后运行以下代码(在weights文件夹下生成yolov8n-seg_relu_80class_dict.pt):
model = YOLO('./weights/yolov8n-seg_relu_80class.pt') result = model(task='segment', mode='predict', source='./images/test.jpg', line_width=3, show=True, save=True, device='cpu') 第二步:
导出onnx,去除不需要的算子。修改代码如下。
(1)修改检测头
修改该模块的完整代码:
class Detect(nn.Module): """YOLOv8 Detect head for detection models.""" dynamic = False # force grid reconstruction export = False # export mode shape = None anchors = torch.
文章目录 一、使用路由器进行拨号上网(一)修改光猫1、获取宽带账号2、获取光猫的超级管理员密码3、把光猫的internet“网络连接”配置为“桥接”模式4、关闭光猫的DHCP服务、WIFI服务 (二)用家庭路由器进行PPPoE拨号 二、IPTV透传(一)配置光猫,在其lan1口实现单线复用1、查看IPTV“网络连接”的WAN口vlan标签2、查看IPTV组播数据的vlan标签3、配置“vlan绑定” (二)配置路由器,创建IPTV专用的vlan标签组 三、主路由器internet口数据详解(一)流出IPTV普通上网 (二)流入IPTV普通上网 在布线极度受限的场景下,仅利用光猫、路由器自带的vlan配置实现IPTV无线透传 一、使用路由器进行拨号上网 (一)修改光猫 1、获取宽带账号 打客服电话重置即可
2、获取光猫的超级管理员密码 详见其他人写的教程
3、把光猫的internet“网络连接”配置为“桥接”模式 在“网络设置”里,进入internet网络连接,它负责给访问internet的上网流量数据打上固定vlan标签,并发送到光纤;(修改前务必拍照存档)
“连接模式”从“路由”改为“桥接”;
MTU改为1500;(其他桥接模式的网络连接也都是配置的1500)
千万不要修改internet“网络连接”的“VlanID”,这是从光猫WAN口出去的数据带上的vlan标签值,因为上网和IPTV数据都走同一根光纤,运营商需要根据收到的vlan标签来提供不同服务;
internet“网络连接”的“组播Vlan”值不起作用,如果有配置,忽略即可;
保持绑定的lan端口包括lan1,让家庭路由器发送到光猫“lan1口”的不带vlan标签的数据默认由internet网络连接分发到光纤;
4、关闭光猫的DHCP服务、WIFI服务 以后连接访问光猫控制台时,使用网线连接,并配置终端IP为192.168.1.2,网关为192.168.1.1
(二)用家庭路由器进行PPPoE拨号 获取ipv4和ipv6地址,都是用PPPoE方式;
使用客服重置的宽带账号;
MTU使用1492,因为路由器和光猫之间的以太网数据包,会额外封装PPPoE数据头,推荐给用户终端的MTU(链路层单个数据包body限制)需要比1500小一些
二、IPTV透传 (一)配置光猫,在其lan1口实现单线复用 1、查看IPTV“网络连接”的WAN口vlan标签 在“网络设置”里,找到Other网络连接(负责发送IPTV数据)的“VlanID”,假设为45;
上文解释过,这是和运营商通讯时要用到的;
MTU保持为1500;
2、查看IPTV组播数据的vlan标签 有的直接配置在Other网络连接的“组播Vlan”里,有的配置在“IGMP设置”里;
这是运营商的“直播”服务下发的“组播”数据的vlan,值由运营商决定,不可修改,假设为50;
3、配置“vlan绑定” 在“网络设置”的“VLan绑定”子菜单里,把进入光猫“lan1”口的vlan 1数据绑定到Other网络连接;
这样,从主路由器“internet口”连接到光猫“lan1口”的网线,就准备好同时传输上网和IPTV数据了。
(二)配置路由器,创建IPTV专用的vlan标签组 把路由器某个以太网口接入的数据划分到IPTV标签组里,vlan值是1,和“VLan绑定”里的一致;
这相当于某个以太网口与主路由器internet口,建立起了直连,进入主路由器internet口的vlan 1标签数据只会发送到这个以太网口,而这个带了vlan 1标签数据又是负责处理IPTV数据的Other网络连接从光猫“lan1口”发出的;
把IPTV机顶盒用网线接入这个以太网口后,即可观看电视。(访问IPTV线路,需要机顶盒来进行PPPoE拨号,获取一个IPTV专用网段的IP,账号已经配置在了机顶盒里)
PS:如果可以用两根网线连接光猫、主路由,则不需配置主路由internet口到光猫的“单线复用”
三、主路由器internet口数据详解 主路由“internet口”通过一根网线(单线复用)连接光猫“lan1口”
(一)流出 IPTV 从主路由“internet口”流出到光猫“lan1口”的IPTV vlan 1数据,根据之前在“vlan绑定”页面配置的规则,会经由Other网络连接处理,替换为vlan 45标签后发送到光纤;此类数据是用户操作IPTV界面、选台产生的。
普通上网 其他普通上网数据流出主路由“internet口”前,会经由主路由的强制NAT,修改源IP+端口(因为是主路由负责PPPoE拨号,并获取到了一个运营商下发的上网IP,所有家庭内部设备发出的上网数据包的源IP都要替换为这个上网IP),再送到光猫“lan1口”;经由光猫internet网络连接处理后带上vlan 41标签发送到光纤。
(二)流入 IPTV IPTV操作界面数据/回放数据(vlan 45)、IPTV组播数据(vlan 50)从光纤流入光猫“wan口”后,会经由Other网络连接处理,替换为vlan 1标签后从光猫“lan1口”发出,继而通过直连网线流入主路由器“internet口”。
主路由器再根据“虚拟网桥”的配置,把vlan 1数据发送到网桥另一端的指定以太网口,继而流入IPTV机顶盒。
(tp-link从21年起推出的wifi6路由器,各个型号都支持互相无线mesh,并且支持副路由以太网口与主路由internet口之间建立无线“虚拟网桥”,非常适合光猫到客厅电视柜间没有埋网线的家庭;有IPTV无线透传需求并购买其他品牌前,务必问清楚设备是否支持此特性)
普通上网 其他流入数据,无论带不带vlan标签,都会视为浏览internet的数据,如果存在未过期的历史NAT记录,则放行数据包并把数据包目标IP+端口转换为内网IP+端口。
Xms 是指设定程序启动时占用内存大小。一般来讲,大点,程序会启动的快一点,但是也可能会导致机器暂时间变慢。
Xmx 是指设定程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常。
Xss 是指设定每个线程的堆栈大小。这个就要依据你的程序,看一个线程大约需要占用多少内存,可能会有多少线程同时运行等。
以上三个参数的设置都是默认以Byte为单位的,也可以在数字后面添加[k/K]或者[m/M]来表示KB或者MB。而且,超过机器本身的内存大小也是不可以的,否则就等着机器变慢而不是程序变慢了。
-Xms 为jvm启动时分配的内存,比如-Xms200m,表示分配200M
-Xmx 为jvm运行过程中分配的最大内存,比如-Xms500m,表示jvm进程最多只能够占用500M内存
-Xss 为jvm启动的每个线程分配的内存大小,默认JDK1.4中是256K,JDK1.5+中是1M
Total Memory -Xms -Xmx -Xss Spare Memory JDK Thread Count
1024M 256M 256M 256K 768M 1.4 3072
1024M 256M 256M 256K 768M 1.5 768
上面的表格只是大致的估计了下在特定内存条件下可以在java中创建的最大线程数。随着-Xmx的加大,空闲的内存数就更少,那么可以创建的线程也就更少,同时在JDK1.4和1.5版本不同下,可创建的线程数也会根据每个线程的内存大小不同而不同。
其实只要我们了解了JVM的内存大小指定以及java中线程的内存模型,基本上我们就可以很好的控制如何在java中使用线程和避免内存溢出或错误的问题了。
最近在网上看到一些人讨论到java.lang.Runtime类中的 freeMemory(), totalMemory(), maxMemory()这几个方法的一些问题,很多人感到很疑惑,为什么,在java程序刚刚启动起来的时候freeMemory()这个方法返回的只有一两兆字节,而随着java程序往前运行,创建了不少的对象,freeMemory()这个方法的返回有时候不但没有减少,反而会增加。这些人对 freeMemory()这个方法的意义应该有一些误解,他们认为这个方法返回的是操作系统的剩余可用内存,其实根本就不是这样的。这三个方法反映的都是 java这个进程的内存情况,跟操作系统的内存根本没有关系。下面结合totalMemory(), maxMemory()一起来解释。
maxMemory()这个方法返回的是java虚拟机(这个进程)能构从操作系统那里挖到的最大的内存,以字节为单位,如果在运行java程序的时候,没有添加-Xmx参数,那么就是64兆,也就是说maxMemory()返回的大约是6410241024字节,这是java虚拟机默认情况下能从操作系统那里挖到的最大的内存。如果添加了-Xmx参数,将以这个参数后面的值为准,例如java -cp you_classpath -Xmx512m your_class,那么最大内存就是51210241024字节。
totalMemory()这个方法返回的是java虚拟机现在已经从操作系统那里挖过来的内存大小,也就是java虚拟机这个进程当时所占用的所有内存。如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,直到挖到maxMemory()为止,所以totalMemory()是慢慢增大的。如果用了-Xms参数,程序在启动的时候就会无条件的从操作系统中挖 -Xms后面定义的内存数,然后在这些内存用的差不多的时候,再去挖。
freeMemory()是什么呢,刚才讲到如果在运行java的时候没有添加-Xms参数,那么,在java程序运行的过程的,内存总是慢慢的从操作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,这些挖过来而又没有用上的内存,实际上就是 freeMemory(),所以freeMemory()的值一般情况下都是很小的,但是如果你在运行java程序的时候使用了-Xms,这个时候因为程序在启动的时候就会无条件的从操作系统中挖-Xms后面定义的内存数,这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()可能会有些大。
堆大小设置
JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
- Xmx3550m :设置JVM最大可用内存为3550M。
Java 和 C 有许多区别,以下是其中一些主要的区别:
1. 编程语言类型:
- C 是一种编译型语言,需要通过编译器将源代码转换为可执行的机器代码。
- Java 是一种解释型语言,源代码首先被编译为字节码,然后在 Java 虚拟机(JVM)上解释执行。
2. 内存管理:
- C 程序员需要手动管理内存,包括分配和释放内存。
- Java 通过垃圾回收器自动管理内存,开发人员不需要手动分配和释放内存。
3. 指针:
- C 具有指针的概念,允许直接访问和操作内存地址。
- Java 没有指针的概念,不允许直接访问内存地址。
4. 平台依赖性:
- C 语言编写的程序在不同平台上需要重新编译。
- Java 程序是平台无关的,因为它们在 JVM 上运行。
5. 异常处理:
- C 使用错误码来处理错误和异常情况。
- Java 使用异常处理机制来处理错误和异常情况。
6. 多线程:
- C 语言有一些库支持多线程编程,但多线程编程在 C 中相对复杂。
- Java 内置了对多线程的支持,并提供了高级的线程管理和同步机制。
7.逗号表达式:
int i = 10;
int k = 6;
int aa = (i++, i++);
背景 本项目是一个用于练习鸿蒙开发的实用小项目,前后端都覆盖到位,这有助于提升开发者的整体设计能力。
相关技能点 一、渲染控制语法 条件渲染:使用 if/else 进行条件渲染。
循环渲染:开发框架提供循环渲染(ForEach 组件)来迭代数组,并为每个数组项创建相应的组件。
二、 @State、@Prop、@Link 组件状态管理装饰器和@Builder 装饰器: @State 装饰的变量是组件内部的状态数据,当这些状态数据被修改时,将会调用所在组件的 build 方法进行 UI 刷新。
@Prop 与@State 有相同的语义,但初始化方式不同。@Prop 装饰的变量必须使用其父组件提供的@State 变量进行初始化,允许组件内部修改@Prop 变量,但更改不会通知给父组件,即@Prop 属于单向数据绑定。
@Link 装饰的变量可以和父组件的@State 变量建立双向数据绑定,需要注意的是:@Link 变量不能在组件内部进行初始化。
@Builder 装饰的方法用于定义组件的声明式 UI 描述,在一个自定义组件内快速生成多个布局内容。
三、组件生命周期函数 自定义组件的生命周期函数用于通知用户该自定义组件的生命周期,这些回调函数是私有的,在运行时由开发框架在特定的时间进行调用,不能从应用程序中手动调用这些回调函数,如下图所示。
需要注意的是,部分生命周期回调函数仅对@Entry 修饰的自定义组件生效,它们分别是:onPageShow、onPageHide、onBackPress。
四、数据请求 通过 HTTP 应用发起一个数据请求,支持常见的 GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT 方法。
五、Python Rest API 其实开发后端 API 并不困难,本项目将借助 ChatGPT 光速完成 API 的开发,大家马上就能获得到前后端打通的成就感。
代码结构 ArkTS 项目
├──entry/src/main/ets // 代码区 │ ├──common // 公共文件目录 │ │ ├──bean │ │ │ └──RankData.
🍎个人博客:个人主页
🏆个人专栏: 软件工程
⛳️ 功不唐捐,玉汝于成
目录
前言
正文
Scrum(敏捷开发框架之一)
详细介绍和解释:
优缺点:
优点:
缺点:
应用场景:
结语
我的其他博客
前言 在当今飞速变化的软件开发领域,Scrum框架作为敏捷开发的代表之一,为团队提供了一种高效、透明、灵活的工作方式。本文将深入剖析Scrum框架的核心原则、关键角色和实践方法,通过对迭代开发、高度协作和客户导向的特点的深入探讨,引领读者探寻Scrum框架在软件开发中的精髓,为敏捷之旅提供清晰的指引。
正文 Scrum(敏捷开发框架之一) 详细介绍和解释: Scrum是一种敏捷开发框架,用于迭代式、增量式软件开发。它强调团队的自组织、交付价值、持续反馈和适应变化。Scrum框架的核心包括以下几个要素:
Scrum团队: 通常包括产品负责人、Scrum主管(Scrum Master)和开发团队。团队在整个项目中负责交付高质量的软件产品。
Scrum主持会议: 包括每日站会(Daily Scrum)、Sprint计划会(Sprint Planning)、Sprint回顾会(Sprint Review)和Sprint回顾会(Sprint Retrospective)等,确保团队高效协作。
Sprint: 是Scrum中的一个时间盒,通常为2至4周,团队在每个Sprint中交付一个可工作的产品增量。
产品积压(Product Backlog): 是由产品负责人维护的需求列表,按优先级排序,团队根据这个列表进行工作。
用户故事(User Story): 是表达用户需求的简短描述,通常包括角色、目标和叙述。
迭代开发: Scrum鼓励迭代、增量的开发方式,以便更早地交付有价值的软件。
优缺点: 优点: 适应变化: Scrum框架强调在迭代中适应变化,有助于灵活应对不断变化的需求。
高度协作: Scrum通过各种会议和角色的定义促进了团队的高度协作和沟通。
客户满意度: 通过每个Sprint结束时的演示,确保客户对项目的透明度和满意度。
迭代交付: 每个Sprint结束后,都会交付可工作的软件产品增量,提高交付效率。
缺点: 团队依赖性: Scrum对于团队的自组织和高度协作有较高要求,对团队的依赖性较强。
不适用于所有项目: 对于某些大型、复杂的项目,Scrum可能不够适用。
学习曲线: 对于新团队来说,Scrum的实施可能需要一定的学习曲线。
应用场景: Scrum适用于许多不同类型的项目,尤其是需要灵活应变、客户需求经常变更或者对于敏捷开发有明确需求的项目。常见的应用场景包括Web开发、移动应用开发、软件维护和创新性项目等。由于Scrum框架的简单性和明确性,许多组织和团队选择Scrum作为实践敏捷开发的入门框架。
结语 Scrum框架,作为敏捷开发的先锋,鼓励团队自组织、持续交付,并通过迭代和反馈的循环不断适应变化。在Scrum的引领下,团队能够更好地应对项目挑战,提高工作效率,同时实现高度客户满意度。然而,我们也要认识到Scrum框架的适用范围和实施挑战。通过深入理解Scrum的精髓,我们有望在敏捷之路上航行得更为顺畅,为软件开发的未来赋予更多的活力和可能性。
我的其他博客 【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅-CSDN博客
【软件工程】融通未来的工艺:深度解析统一过程在软件开发中的角色-CSDN博客
【软件工程】走进瀑布模型:传统软件开发的经典之路-CSDN博客
【软件工程】走近演化过程模型:软件开发的不断进化之路-CSDN博客
【软件工程】漫谈增量过程模型:软件开发的逐步之道-CSDN博客
【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客
一、MQTT协议简介 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议 上,由IBM在1999年发布。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
相较于HTTP
在传统互联网应用中,HTTP被广泛应用。通常情况下,客户端的设备配置、网络环境都比较可控,另外请求通常会基于各种业务传递大量的数据。
但是对于物联网来说,网络不稳定、设备能力不够,是重点考虑的因素。再者物联网传输的消息大小远小于传统互联网的业务数据,如果每次发送数据都来一次连接/断开TCP,发送的数据越多,数据总通信量也就越大。
再有就是在灵活性上HTTP的请求-响应模式也不如MQTT的发布/订阅模式。必须由设备主动向服务器发送数据,而服务器难以主动向设备推送数据。对于单单的数据采集等场景还勉强适用,但是对于频繁的操控场景,只能推过设备定期主动拉取的的方式,实现成本和实时性都大打折扣。
二、MQTT协议设计规范 由于物联网的环境是非常特别的,所以MQTT遵循以下设计原则:
精简,不添加可有可无的功能;发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递;允许用户动态创建主题,零运维成本;把传输量降到最低以提高传输效率;把低带宽、高延迟、不稳定的网络等因素考虑在内;支持连续的会话控制;理解客户端计算能力可能很低;提供服务质量管理;假设数据不可知,不强求传输数据的类型与格式,保持灵活性。 发明人当时正在开发一个利用卫星通讯监控输油管道的项目。为了实现这个项目要求,他们需要开发一种用于嵌入式设备的通讯协议。 从诞生之初就是专为低带宽、高延迟或不可靠的网络而设计的。虽然历经几十年的更新和变化,以上这些特点仍然是MQTT协议的核心特点。但是与最初不同的是,MQTT协议已经从嵌入式系统应用拓展到开放的物联网(IoT)领域。
版本
目前MQTT主流版本有两个,分别是MQTT3.1.1和MQTT5。MQTT3.1.1是在2014年10月发布的,而MQTT5是在2019年3月发布的。 MQTT5是在 MQTT3.1.1 的基础上进行了升级,添加了更多的功能、完善 MQTT 协议。因此MQTT5是完全兼容MQTT3.1.1的。
三、MQTT与消息队列MQ的区别 MQTT 并不是消息队列,尽管两者的很多行为和特性非常接近,比如都采用发布订阅模式等,但是他们面向的场景有着显著的不同。
消息队列主要用于服务端应用之间的消息存储与转发,这类场景往往数据量大但接入量少。MQTT 面向的是 IoT 领域和移动互联网领域,这类场景的侧重点是海量的设备接入、管理与消息传输。 在实际的场景中,两者往往被结合起来使用,譬如先由 MQTT Broker 接收物联网设备上传的数据,然后通过消息队列MQ将这些数据转发到具体应用进行处理。
四、MQTT协议对于车联网 在车联网中有一个重要角色:TSP(Telematics Service Provider)汽车远程服务提供商。TSP 上接汽车、车载设备制造商、网络运营商,下接内容提供商。
既然身处核心地位,自然少不了与其他环节的各种交互,比如说云平台与车机端的消息接入。
而 MQTT 是基于发布/订阅模式的物联网通信协议,具有简单易实现、支持 QoS、报文小等特点,在车联网场景中,MQTT 能够胜任海量车机系统灵活、快速、安全地接入,并保证复杂网络环境下消息实时性、可靠性。主要优势:
开放消息协议,简单易实现。市场上有大量成熟的软件库与硬件模组,可以有效降低车机接入难度和使用成本;提供灵活的发布订阅和主题设计,能够通过海量的 Topic 进行消息通信,应对各类车联网业务;Payload 格式灵活,报文结构紧凑,可以灵活承载各类业务数据并有效减少车机网络流量;提供三个可选的 QoS 等级,能够适应车机设备不同的网络环境;提供在线状态感知与会话保持能力,方便管理车机在线状态并进行离线消息保留。 五、MQTT协议特性介绍 1. 客户端与服务器 实现MQTT协议需要客户端和服务器端通讯完成。在通讯过程中,MQTT协议中有三种身份 :发布者(Publish) 、代理(Broker)(服务器) 、订阅者(Subscribe) 。
其中,消息的发布者和订阅者都是客户端,消息代理是服务器。
客户端
MQTT客户端可以向服务端发布信息,也可以从服务端收取信息。
我们把客户端发送信息的行为称为发布信息。而客户端要想从服务端收取信息,则首先要向服务端订阅信息。订阅信息这一操作很像我们在视频网站订阅某一类型电视剧。当这部电视剧上新后,视频网站会向订阅了该剧的用户发送信息,告诉他们有新剧上线了。
发布其他客户端可能会订阅的信息订阅其它客户端发布的消息退订或删除应用程序的消息断开与服务器连接 服务器
MQTT 服务端通常是一台服务器,也称为“消息代理”(Broker)。位于消息发布者和订阅者之间,它是MQTT信息传输的枢纽,负责将MQTT客户端发送来的信息传递给MQTT客户端。
MQTT 服务端还负责管理 MQTT 客户端。确保客户端之间的通讯顺畅,保证 MQTT 消息得以正确接收和准确投递。
目录
摘要
Abstract
文献阅读:基于注意力的LSTM大地震预报网络
现有问题
提出方法
基于注意力的LSTM网络
研究实验
实验目的
数据集
评估指标
数据预处理和特征提取
结果讨论
Masked Self-Attention(掩码自注意力)
Muti-Head Self-Attention(多头自注意力)
Masked Multi-head Self-Attention(掩码多头自注意力)
Positional Encoding(位置编码)
摘要 在本周阅读的文献中,将地震预测看作是一个时间序列分析问题,提出了一种基于注意力的LSTM网络,用于预测即将发生的大地震的时间、震级和位置。其中LSTM用于学习时间关系,注意机制从输入特征中提取重要的模式和信息。掩码自注意力能够解决传统自注意力在做预测和生成任务时存在泄露信息的问题,多头自注意力能够处理多个关注点的问题,可以较好地处理复杂语义关系,在预测任务中,能够明确结果是根据哪一属性判断得出。而掩码多头自注意力是Transformer中的关键模块,能够在掩码的基础上来实现并行训练。注意力机制可以将一句话整个输入却不考虑序列的顺序,而NLP需要有顺序的输入,因此需要通过位置编码为每一个向量加上位置信息。
Abstract In this week's reading, which treats earthquake prediction as a time series analysis problem, propose an attention-based LSTM network for predicting the time, magnitude, and location of impending large earthquakes. LSTM is used to learn temporal relationships, and the attention mechanism extracts important patterns and information from input features.
目录 一. 仿真代码二. 编译运行参考 前言: 本教程是在仿真中实现无人机定点飞行(如果想要在真机上实现,还要修改代码)
注:搭建仿真环境可以看下面教程 👇
(最新)ubuntu搭建PX4无人机仿真环境(1) —— 概念介绍及环境建议
(最新)ubuntu搭建PX4无人机仿真环境(2) —— MAVROS安装
(最新)ubuntu搭建PX4无人机仿真环境(3) —— ubuntu安装QGC地面站
(最新)ubuntu搭建PX4无人机仿真环境(4) —— 仿真环境搭建
ubuntu安装ROS melodic(最新、超详细图文教程)
前期回顾:
带你玩转PX4无人机仿真(1) —— 运行官方案例(C++)
一. 仿真代码 我们继续使用 带你玩转PX4无人机仿真(1) 中的功能包,在 off_node 功能包下的 src 目录下新建一个 rect_no_rc.cpp 文件
cd ~/catkin_ws/src/off_node/src/ touch rect_no_rc.cpp // 创建文件 gedit rect_no_rc.cpp // 打开文件 打开文件,将代码粘贴上去
目标点:(0,0,2) (5,0,2) (5,5,2) (0,5,2)
/** * @file rect_no_rc.cpp * @brief Offboard control example node, written with MAVROS version 0.19.x, PX4 Pro Flight * Stack and tested in Gazebo Classic SITL */ #include <ros/ros.
一、文件打开与关闭 1、fopen函数 函数原型:
FILE *fopen(const char *filename, const char *mode); 函数功能:
fopen函数用于打开一个具有指定文件名的文件,并返回一个文件指针,以供后续的文件读写操作使用。
参数说明:
filename:要打开的文件名,可以包含路径信息。注意,文件名应该是一个以字符串形式表示的C字符数组。mode:打开文件的模式,以字符串形式表示。通常使用以下几种模式: "r":只读方式打开文件。 "w":写方式打开文件。如果文件不存在,则创建一个新的空文件;如果文件存在,则清空文件内容。 "a":追加方式打开文件。如果文件不存在,则创建一个新的空文件;如果文件存在,则将写入的数据追加到文件末尾。 "r+":读写方式打开文件,该文件必须已经存在。指针位于文件的开头。可以进行读取和写入操作。 "w+":读写方式打开文件。如果文件存在,则清空文件内容;如果文件不存在,则创建一个新的空文件。可以进行读取和写入操作。 "a+":读写方式打开文件。如果文件存在,则指针位于文件末尾;如果文件不存在,则创建一个新的空文件。可以进行读取和写入操作,写入的数据追加到文件末尾。 "rb":只读方式打开二进制文件。如果文件不存在,则打开失败。 "wb":写方式打开二进制文件。如果文件不存在,则创建一个新的空文件;如果文件存在,则清空文件内容。 "ab":追加方式打开二进制文件。如果文件不存在,则创建一个新的空文件;如果文件存在,则将写入的数据追加到文件末尾。 "rb+":以二进制形式的读写方式打开文件,该文件必须已经存在。指针位于文件的开头。可以进行二进制数据的读取和写入操作。 "wb+":以二进制形式的读写方式打开文件。如果文件存在,则清空文件内容;如果文件不存在,则创建一个新的空文件。可以进行二进制数据的读取和写入操作。 "ab+":以二进制形式的读写方式打开文件。如果文件存在,则指针位于文件末尾;如果文件不存在,则创建一个新的空文件。可以进行二进制数据的读取和写入操作,写入的数据追加到文件末尾。 返回值:
如果成功打开文件,则返回指向 FILE 结构体的指针,称为文件指针。该文件指针用于后续对文件进行读、写或关闭等操作。如果打开文件失败,则返回 NULL。 示例:
FILE *file = fopen("example.txt", "r"); if (file != NULL) { // 打开文件成功,进行文件读写操作 fclose(file); // 关闭文件 } else { // 打开文件失败,进行错误处理 } 需要注意的是,在操作文件之后,应该使用 fclose 函数关闭文件,以确保文件资源被正确释放。
总结:fopen函数在C语言中用于打开文件,并返回一个指向文件的指针,可以根据指定的文件名和打开模式进行不同类型的文件操作。
2、fclose函数 函数原型:
int fclose(FILE *stream); 函数功能:
fclose函数用于关闭一个打开的文件,并释放与文件相关的资源。
参数说明:
stream:指向要关闭的文件的指针。 返回值:
fclose函数返回一个整数值,表示关闭文件的状态。如果成功关闭文件,则返回0;如果关闭文件失败,则返回非零值。 示例:
背景 学习graphql-python安装好依赖后执行命令
python manage.py migrate python manage.py runserver 仅接着出现下列错误,主要提示是 「TypeError: translation() got an unexpected keyword argument ‘codeset’」
ntribute_to_class self.remote_field.through = create_many_to_many_intermediary_model(self, cls) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/software_1/miniconda3/envs/learnLangchain/lib/python3.11/site-packages/django/db/models/fields/related.py", line 1051, in create_many_to_many_intermediary_model 'verbose_name': _('%(from)s-%(to)s relationship') % {'from': from_, 'to': to}, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ File "/Users/software_1/miniconda3/envs/learnLangchain/lib/python3.11/site-packages/django/utils/functional.py", line 149, in __mod__ return str(self) % rhs ^^^^^^^^^ File "/Users/software_1/miniconda3/envs/learnLangchain/lib/python3.11/site-packages/django/utils/functional.py", line 113, in __text_cast return func(*self.__args, **self.__kw) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/software_1/miniconda3/envs/learnLangchain/lib/python3.11/site-packages/django/utils/translation/__init__.py", line 75, in gettext return _trans.gettext(message) ^^^^^^^^^^^^^^^^^^^^^^^ File "
2023年度总结:是转折也是新的开始 沉思篇学业篇家庭篇爱情篇事业篇未来篇感恩篇 沉思篇 这几天,我一直在思考如何去总结自己的一年,每次都不敢轻易动笔,生怕写不出一篇好的文章。
我打开博客重新访问了关注列表,再次浏览大佬们之前的总结文章,试图去学习模仿构思,看完后又陷入了沉思。
文笔华丽、自律、努力、优秀、坚持、读书、技术大牛、经济独立
真的想象不到一个自律的人能量会有多强大。
每每看过这些励志文章,都备受鼓舞,同样也会反思自己的差距和不足,优秀的人在前面引路,我们也不能忘记向上爬。
https://blog.csdn.net/Eastmount?type=blog
https://xuhong.blog.csdn.net/
https://betterbench.blog.csdn.net/?type=blog
路虽远,行则将至;事虽难,做则必成。往前走,轻舟无惧万重山。
学业篇 2019年入学,2023年毕业,时间过得很快,转眼我已经22岁,早已不再是当初的少年,唯一未变的是:初心仍在!梦想仍在!
2023年,我经历了阶段性的终点,迎来了新的起点。考上理想的院校是大学最后的目标也是人生愿望之一。
读研不仅为了提升自己,也是为了给家里争口气。第一代大学生的身上或多或少都肩负着希望和责任。
是父母眼中的期望,是名校光环的期待,是渴望向上的期盼。
读研是为了什么?
读研,可以续上三年学业生涯,逃避就业,呆在象牙塔里,穿着孔乙己长衫,继续活在自己的世界里。
可以承认这辈子最轻松的事情就是上学,进入社会就是残酷的痛打。
关于这个话题,网上一直都有很多的讨论。
我自己的亲身感受是:结识了各具优点的朋友同学,每个人身上都有值得学习的品质,见识到人外有人、天外有天,开阔了自己的眼界,意识到了自己的差距,更有自信去面对生活。
未来职业生涯很长,而一纸文凭是终身的东西。
家庭篇 高中毕业、大学毕业的GAP期,是呆在家里时间最长的阶段,因为只有大一暑假疫情,我在家的时间最长,而后大二大三暑假都没有回过家。
清晰记得大三寒假放假回家,爸妈脸上的笑容绽放,年龄越大越能理解父母的爱:孩子们健康 快乐 陪在身边就是最幸福的事情。
今年的录取通知书带回家,让妈妈亲手打开,我给她拍照纪念,切身能感受到他们的自豪与骄傲,在父母心中孩子永远是最棒的!
小时候妈妈在家陪着我上学,初中以后姐姐当了老师,能近距离的照顾我读书,我当时觉得给他们最大的回报就是:好好学习,考一个好成绩!
随着我的成长,越来越懂得家人们爱的深沉,我能走到今天这一阶段,非常感谢爸妈 姐姐 家人的爱与付出,我爱你们!
今年暑假的小县城生活,我走出象牙塔,开始接触更多家里事情,父母工作,家庭琐事,生活百态。
突然明白原来现实社会竟然如此这样,家人们不断锻炼培养我人情世故、说话的魅力:做人要方,做事要圆。
我不断的思考反思,习惯了姐姐的批评教导,跟姐姐心平气和的聊天。反倒有些不适应。
今年,陪伴了小外甥的成长,体验了带娃的辛苦,看到我开学之后,他自己会走路了,真的感觉很开心。“哦,我的小舅舅!”
爱情篇 由高中时期青涩喜欢,到现在相依的恋人,这一路走来的酸甜苦辣都是我们爱情城堡的坚实基石。
每次见面的惊喜和怦然心动,再到异地分别时的伤感。
她说:“爱一个人,便爱他的一切,包括梦想”,我说:“一想到你,我的世界就变得温暖而安详”。
大学一直忙于学业,考研时曾许愿,毕业要和她去旅行,去爬山,带她回家见父母,一起做好吃的。
未来希望我们能坚持初心,相守相知,一起努力,继续加油!
事业篇 拿我跟上面列出的大佬们相比,今年我的生活可太安逸,太颓废了,技术一沓糊涂,书也没读多少,相反电视剧没少看,磕了不少CP,爆款电视剧一部不拉,太享受不加思考获取内容的多巴胺快感。
考完研我就在思考未来就业问题,打开知乎,小红书铺天盖地的:“互联网寒冬、裁员、学历贬值、经济下滑、考公火热...”,事实摆在这里,国际环境动荡,经济增速放缓,焦虑肯定少不了。
当然也不断从前辈、家人那里寻求帮助建议。
B站,CSDN也在不断关注同行正能量的大佬,与他们交流学习,从他们身上学习思考。
大三关注的一位博主:Better Bench,看了他的文章很受鼓舞刺激,目前他已经开始读博了,一位超级优秀自律的前辈。
文笔很生动的老师 Eastmount 已经博士四年毕业了,读完他的文章让人受益匪浅。
B站的一位文科转码的朋友,通过视频分享总结自己的秋招经历,生活分享。
当然也有公考分享:小心哥、应届裸辞进大厂的刘磊的成长日记等等优秀博主。
他们身上都有很多值得去学习思考的地方,比如:靠着自己的专业技能打造知识星球,高质量的系列付费专栏,贴近生活的短视频网红,出版技术书籍等。
一定要去结识同行业里的优秀人士,关注他们的博客,公众号等,假如能搞到微信,也加下,他们如果愿意和你交流的,也交流下,经常关注比自己优秀的人,能够激发自己努力向上,以及能看到未来的发展趋势,对自己发展很有帮助;
等有一定技术功底后,要想出人头地,如今时代,一定要打造个人IP,比如csdn博客,公众号,抖音,视频号等,业余时间要坚持慢慢搞起来;
普通屌丝程序员如何搞大钱?这个是我困惑多年的问题,阅历多了,最近几年才想明白开窍!如何搞大钱,如何快速的搞钱,最直接最快速的办法,就是去接近和尽可能的认识那边在该行业里搞到钱的人,关注他们的博客,公众号,抖音,微信加到的也加下,看看那些人到底一天到晚在干嘛;他们搞啥你也模仿套路搞搞,努力点,也能喝点汤,如果能力强,或者还能赶超,端掉他的饭碗,哈哈…
-------摘自大佬的博客
个人觉得副业不一定是为了赚钱,兴趣驱动,爱好也可以是自己的副业,比如:摄影,读书,旅游,运动等等。
写博客的初衷是为了记录笔记,学习历程等,从最开始文字乱杂,到学习别人的排版逻辑,不断提升写作文本整理编辑能力。
开心的是一篇平平无奇的文章竟然达到36w的阅读量:
当然要感谢在CSDN里面遇到的各种优秀的朋友,不断激发自己努力向上。
今年,我有了大把的时间去运营自己的公众号,当然文章较为单一,质量一般,拓展功能为零,要改变的地方还有很多,想靠公众号有流量收益很难做到。
目前为止,公众号收获1k名粉丝,最高一篇文章浏览量在1.1w人次,数据还是很感人的。
从我考研结束后,正式写博客的这段时间,真的是收获满满,虽然花费了大量的时间,但是我觉得这一切都是值得的,不仅获得我想要的成就感,我也学到了很多的东西,获得了自身的提升。
所以,继续加油,继续输出!感谢大家的支持!
未来篇 2024年已然起航,生命不息,奋斗不止!
k8s–部署–03–安装Dashboard 1、介绍 dashboard是kubernetes官方提供的可视化界面
2、启动Dashboard 2.1、创建配置文件 vim dashboard.yaml 内容
# Copyright 2017 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "
k8s–部署–02–卸载 # 首先清理运行到k8s群集中的pod,使用 kubectl delete node --all # 使用脚本停止所有k8s服务 for service in kube-apiserver kube-controller-manager kubectl kubelet etcd kube-proxy kube-scheduler; do systemctl stop $service done # 使用命令卸载k8s kubeadm reset -f # 卸载k8s相关程序 yum -y remove kube* # 删除相关的配置文件 modprobe -r ipip lsmod # 然后手动删除配置文件和flannel网络配置和flannel网口: rm -rf /etc/cni rm -rf /root/.kube # 删除cni网络 ifconfig cni0 down ip link delete cni0 ifconfig flannel.1 down ip link delete flannel.1 # 删除残留的配置文件 rm -rf ~/.
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型+国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!支持GPT-4-Turbo模型、支持DALL-E3文生图,支持最新GPT-4-Turbo模型、GPT-4-1106-Preview多模态模型。支持GPT-4图片对话能力上传图片并识图理解对话。ChatFile文档对话总结。
《SparkAi系统详情及搭建部署文档》:
https://www.yuque.com/yuqueyonghutq9yt2/egy0d0/ah9sq89lgl6b7s4w
①新增OpenAI的TTS语音对话功能
支持电脑PC浏览器和手机端使用(调整用户端语音交互,语音输入则语音回复,文本输入则文本回复)
②ChatFile文档对话总结 ③DALL-E3文生图(支持直接对话绘画)
④新增已支持GPT-4图片对话能力
上传图片并识图理解对话
1.1AI模型提问 1.2人工智能AI绘画 新增Midjourney局部重绘(Vary Region)在线编辑功能
新增支持MJ最新V6 Beta绘画模型(V6 Beta模型:能够处理更长的提示词,人物效果更加真实,构图、色调、光影更加细腻)
手机端页面:
1.1 程序核心功能 SparkAi系统现已支持 OpenAI GPT全模型 + 国内AI全模型 + 绘画池系统 + OpenAI TTS语音对话功能 + 文档对话总结功能!
AI提问:程序已支持GPT3.5,GPT4.0提问、OpenAIGPT全模型+国内AI全模型、支持GPT联网提问已支持OpenAIGPT全模型+国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型、腾讯混元大模型等ChatFile文档上传对话功能以及总结对话新增知识库接入(对接百度千帆知识库),用户端动态显示知识库插件并通过插件的方式选择与知识库对话,可自定义训练内容回答和文档总结,上传文档作为知识库内容用于特定场景对话回答,比如企业文化规章制度、产品说明文档、客服等等各行业知识库等新增支持MJ最新V6 Beta绘画模型(V6 Beta模型:能够处理更长的提示词,人物效果更加真实,构图、色调、光影更加细腻)AI绘画:Midjourney绘画(全自定义调参)、Midjourney以图生图、Dall-E3绘画支持最新GPT-4多模态模型、OpenAI GPT-4-Turbo-With-Vision-128K模型已支持GPT-4图片对话能力(上传图片并识图理解对话)可同时支持5张图同时上传对话对话插件系统,后续逐步增加插件功能,扩展AI能力新增KEY支持单独配置消耗费率,比如GPT4-32K比GPT4成本更高应该消耗更多的额度次数微信公众号+邮箱+手机号注册登录一键智能思维导图生成应用广场,支持用户前台自定义添加私密或共享AI绘画广场(画廊)邀请+代理分销模式、用户每日签到功能、会话记录同步保存支持对接微信官方支付、易支付、码支付、虎皮椒支付等,自定义聚合会员套餐其他核心功能、后续其他免费版本功能更新 1.2 更新日志 【V4.3.0】更新功能(2023.12.26号更新)
新增用户端聊天对话插件:ChatFile文档上传对话功能以及总结对话优化TTS请求api支持三方中转代理接口新增支持MJ最新V6 Beta绘画模型(V6 Beta模型:能够处理更长的提示词,人物效果更加真实,构图、色调、光影更加细腻)调整对话请求超时机制,避免插件调用时间太长报错(DallE-3聊天绘画),如何配置请看部署文档其他优化 二、系统模块演示 快速体验 官方演示站:
系统用户端:https://ai.sparkaigf.com管理后端:https://ai.sparkaigf.com/sparkai/admin测试账号密码:admin 123456 三、系统功能模块 3.1ChatGPT模型提问 已支持GPT联网提问提问
3.2Prompt应用 3.2.1Prompt应用 3.2.2自定义Prompt应用 支持用户自定义Prompt应用
3.3 支持Midjourney绘画 支持同步官方图片重新生成指令
同步官方 Vary 指令 单张图片对比加强 Vary(Strong) | Vary(Subtle)
同步官方 Zoom 指令 单张图片无限缩放 Zoom out 2x | Zoom out 1.
一、安装PX4
jjm2是我的主文件夹名,可以根据自己的主文件夹名修改
下载PX4
git clone https://github.com/PX4/PX4-Autopilot.git --recursive 由于网速原因,我用的是别人已经下载好的压缩包。
链接:https://pan.baidu.com/s/1TRwHxNYsfs7p14mdmt0jeA 提取码:wstc 里面有PX4-Autopilot压缩包,libawt_xawt.so,libjawt.so和已经下载好的QGroundControl.AppImage
运行bash
由于网速原因可能导致一些python安装包没装上,可以自己先提前安装
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pandas pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple pymavlink pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple cerberus echo "export PATH=/home/主目录/.local/bin/:$PATH" >> ~/.bashrc 接着运行bash
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh 运行完之后,请重启ubuntu
sudo reboot now 对PX4进行一下简单的测试(在PX4-Autopilot路径下执行)
首先安装一下ant,否则没法运行,同时因20.04的缺少动态库libawt_xawt.so无法被Java8给调用,我的解决办法是去18.04把18.04的相同路径下的动态库libawt_xawt.so移动到20.04的/usr/lib/jvm/java-11-openjdk-amd64/lib/路径中
sudo apt-get install ant sudo apt install xmlstarlet sudo pip3 install pyquaternion sudo cp /home/jjm2/libawt_xawt.so /usr/lib/jvm/java-11-openjdk-amd64/lib/libawt_xawt.so sudo cp /home/jjm2/libjawt.so /usr/lib/jvm/java-11-openjdk-amd64/lib/libjawt.so sudo apt-get install gcc-arm-none-eabi make px4_sitl jmavsim make px4_fmu-v3_default 注意:如果此处使用的是虚拟机的话需要注意扩大分配的内存最小需分配4G 在 make px4_sitl gazebo之前,可以安装一下gazebo的 模型
白箱模型、灰箱模型和黑箱模型是在系统建模和分析中常用的概念。
白箱模型 白箱模型是指系统的内部结构和工作原理已经完全被了解的模型。在白箱模型中,系统的每一个组成部分和其相互作用都已经被明确地描述出来。白箱模型通常用于系统的设计和优化,以及对系统进行深入的分析和理解。例如,一个电子产品的设计图纸就是一个白箱模型。
白箱模型是指在建立模型时,使用已知的理论基础和物理规律,以及从数据中提取的特征来构建模型。因此,白箱模型通常不需要像黑箱模型那样使用大量的训练数据进行训练,而是基于已知的理论基础和数据特征来构建模型。在白箱模型中,模型的参数和结构通常是已知的,因此可以将其表示为一个公式或方程组的形式。但是,在实际应用中,白箱模型的参数和结构可能需要通过一些优化算法来确定,这时可能需要使用一些训练数据来进行模型的调整和优化。
白箱模型的标准并不是它是否是通用模型。白箱模型是指模型的内部结构和参数都是已知的,可以被解释和理解,因此可以提供更多的可解释性和可靠性。相反,黑箱模型的内部结构和参数是未知的,只能通过输入和输出来预测结果,可解释性和可靠性较低。因此,白箱模型和黑箱模型都可以是通用模型。
灰箱模型 灰箱模型是指系统的内部结构和工作原理只有部分被了解的模型。在灰箱模型中,系统的某些组成部分和其相互作用已经被明确地描述出来,但还有一些部分尚未被了解。灰箱模型通常用于系统的建模和预测,以及对系统的一些特定性能指标进行评估。例如,一个机器学习模型就是一个灰箱模型,因为我们知道模型的输入和输出,但不知道其内部的运算过程。
黑箱模型 黑箱模型是指系统的内部结构和工作原理完全未被了解的模型。在黑箱模型中,系统的输入和输出已经被明确地描述出来,但其内部的运算过程和组成部分都是未知的。黑箱模型通常用于系统的测试和验证,以及对系统的一些整体性能指标进行评估。例如,一个黑箱测试就是对系统进行测试,而不需要了解其内部的运算过程。
举例 白箱模型:一个计算机程序的源代码就是一个白箱模型,因为我们可以完全了解程序的内部结构和工作原理。
灰箱模型:一个天气预测模型就是一个灰箱模型,因为我们知道模型的输入和输出,但不知道其内部的运算过程。
黑箱模型:一个深度学习模型就是一个黑箱模型,因为我们只知道模型的输入和输出,而不知道其内部的运算过程和组成部分。
三种模型的优缺点 黑箱模型、灰箱模型和白箱模型是机器学习和数据分析中常用的三种建模方法。它们各自有优缺点,适用于不同的场景。
黑箱模型
黑箱模型指的是在建模过程中,我们只关注模型的输入和输出,而不考虑模型内部的具体实现细节。这种模型通常具有较高的预测准确度,但是对于模型的解释性较差,我们无法理解模型是如何得出预测结果的。黑箱模型适用于对于预测精度要求较高,但是对于模型的可解释性要求较低的场景。
灰箱模型
灰箱模型介于黑箱模型和白箱模型之间,它在一定程度上考虑了模型内部的实现细节,但是并没有完全揭示模型的全部信息。灰箱模型通常比黑箱模型具有更好的可解释性,同时也能够保持较高的预测准确度。灰箱模型适用于对于预测精度和模型可解释性都有一定要求的场景。
白箱模型
白箱模型指的是我们完全了解模型内部的实现细节,并且可以通过模型的参数和结构来解释模型的预测结果。白箱模型通常具有较好的可解释性,我们可以通过分析模型来理解模型是如何得出预测结果的。但是白箱模型的预测准确度可能不如黑箱模型和灰箱模型。白箱模型适用于对于模型的可解释性要求较高,但是对于预测精度要求相对较低的场景。
总的来说,不同的模型类型各有优缺点,我们需要根据具体的场景来选择合适的模型。
开发工具
HBuilder X 3.8.12.20230817
注意:开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。
接上篇,移动端开发框架mui代码在安卓模拟器上运行(HbuilderX连接到模拟器),这篇主要介绍模拟器窗口设置、多开设置及运行、介绍另一款模拟器。 1、模拟器窗口设置 模拟器窗口设置:
模拟器安装完成后,第一次运行时窗口会很大,您可以通过模拟器大小
我之前设置了手机版所以文中截图模拟器的窗口图片不是很大,默认是平板版。其他参数可根据自己的需要进行设置或保持默认
2、模拟器多开设置 模拟器多开设置:
多开就是运行多个,如果模拟器相当于一台手机的话,那么模拟器多开相当于多台手机,每个模拟器安装运行的APP不会影响其他打开的模拟器。只是模拟器多开,将增加不同的端口运行到电脑。
打开夜神模拟器,在右侧菜单中,找到多开按钮并打开
可以看到,多开管理界面。默认安装完就一个模拟器,所以列表中只有一个,可以点击右下角按钮 ‘添加模拟器’ 增加一个或多个模拟器
选择号安卓版本后,模拟器列表会自动刷新显示,并且刚添加的模拟器是未启动状态的,
启动模拟器,在模拟器列表中,未启动状态的模拟器,
在操作栏中点击启动按钮运行模拟器 (启动单个模拟器)
或者在前面勾选模拟器后,点击列表上面的启动按钮(启动一个或多个模拟器)
启动模拟器,启动完成后电脑将看见两个夜神模拟器在运行:
3、运行开发工具HbuilderX,并使用将APP运行到多个模拟器(多开验证) 打开开发工具HBuilderX
单击左侧项目进行选中,在上面菜单栏依次打开 运行 》运行到手机或模拟器 》运行到Android App基座
在设备列表中,可以看到多个模拟器说,说明模拟器多开成功了,并且新加的模拟器会分配其他端口。
因为端口62001为模拟器默认,上篇文件已经好app在该模拟器上,现在选择另一个模拟器(即端口62025设备)运行安装APP,鼠标单击设备列表中的设备选择并运行。
以上完成了模拟器多开以及开发工具HBuilderX将APP运行至多个模拟器中
4、其他模拟器
这里再介绍一款模拟器:MuMu模拟器,您也可以选择其他安卓模拟器
官网:MuMu模拟器官网_安卓12模拟器_网易手游模拟器手游安卓模拟器哪个好?MuMu模拟器搭载行业领先的安卓12操作系统,兼容更多游戏及应用的同时,运行稳定流畅!完美运行热门手游如《明日方舟》、《梦幻西游》、《阴阳师》、《光遇》等,凭借最高240帧及电影级画质表现,在众多模拟器中脱颖而出。轻量化的产品界面速度更快、稳定性更高、资源占用低,玩游戏流畅不卡顿。多开、同步操作、操作录制、智能键鼠、录屏、虚拟定位等功能满足你不同的游戏需求,让你享受到电脑玩手游的快乐!https://mumu.163.com/
下载好安装并运行
注意安装不上提示错误:80001 ,可按这种办法解决:
鼠标右键,选择属性,设置兼容模式及管理员身份运行,设置好后点击应用。重新运行安装包等待模拟器完成安装
HBuilderX在手机中运行APP
移动端开发框架mui代码在手机(真机)上运行(HbuilderX连接到手机)
1、navicat premium介绍 Navicat Premium 是一套可创建多个连接的数据库开发工具,让你从单一应用程序中同时连接 MySQL、Redis、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 。它与 GaussDB 、OceanBase 数据库及 Amazon RDS、Amazon Aurora、Amazon Redshift、Amazon ElastiCache、Microsoft Azure、Oracle Cloud、MongoDB Atlas、Redis Enterprise Cloud、阿里云、腾讯云和华为云等云数据库兼容。你可以快速轻松地创建、管理和维护数据库。
官网:Navicat 中国 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库管理强大的数据库管理和设计工具,支持 Win、macOS 和 linux。直观的 GUI 让用户简单地管理 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的数据库。https://www.navicat.com.cn/
点击产品页面,可以看到最新版本为 Navicat Premium 16 。
在页面底部,点击手册按钮还可以查看软件使用手册,
链接地址:Navicat 在线和 PDF 手册 | 提示和教程 | NavicatNavicat 在线手册提供如何使用 Naivcat 和 Navicat Data Modeler 的指南,支持 MySQL、Redis、MariaDB、Oracle、SQL Server、PostgreSQL 和 SQLite 数据库连接。https://www.navicat.com.cn/support/online-manual
2、navicat premium历史版本 当前官网提供的最新版本为 Navicat Premium 16 。
在这个数字时代,一个充满活力的网站对于企业和个人来说都是非常重要的。独立建站是一个非常不错的选择,但是过渡到SASS建站可以更方便地达到成功。
SASS建站不仅为您提供业界领先的技术和创意设计,还可以让您轻松管理您的网站内容。同时,也可以提供更高效的安全保障。
在2024年,您是否想激发更多人们关注您的业务和品牌?那么,快来尝试使用SASS建站吧!
随着互联网的飞速发展,越来越多的企业和个人开始建立自己的网站。而在众多建站技术中,Sass(Syntactically Awesome Style Sheets)作为一种CSS预处理器,凭借其独特的优势逐渐受到广大开发者的青睐。本文将从多个方面探讨2024年使用Sass建站的优势。
1. 代码重用与模块化
Sass允许开发者将样式分解为更小的模块,并通过@import语句将这些模块组合在一起。这样可以实现代码的重用,减少冗余,提高代码的可维护性。此外,Sass还支持混合宏(mixin)和函数(function),使得开发者可以编写可复用的代码片段,进一步提高开发效率。
2. 强大的功能
Sass提供了许多高级功能,如变量、嵌套、条件语句、循环等,这些功能使得开发者可以更加灵活地编写CSS代码。例如,通过使用变量,开发者可以轻松地修改颜色、字体等属性,而无需在多处修改代码。此外,Sass还支持选择器嵌套,使得开发者可以更好地控制样式的应用范围。
3. 易于维护
由于Sass将CSS代码分解为更小的模块,这使得代码更加清晰易懂,便于维护。同时,Sass还提供了丰富的注释功能,开发者可以在代码中添加注释,以便于其他开发者理解代码的功能和逻辑。此外,Sass还可以通过编译生成浏览器兼容的CSS代码,这意味着开发者可以使用最新的Sass语法进行开发,而无需担心浏览器兼容性问题。
4. 提高开发效率
Sass提供了许多便捷的功能,如自动补全、代码高亮、语法检查等,这些功能可以帮助开发者更快地编写代码,减少错误。此外,Sass还支持实时预览功能,开发者可以在编写代码的同时查看效果,这大大提高了开发效率。
5. 社区支持
Sass拥有庞大的开发者社区,这意味着开发者可以轻松地找到关于Sass的各种资源,如教程、插件、模板等。此外,Sass还与其他前端框架(如Bootstrap、Foundation等)集成良好,这使得开发者可以更方便地使用这些框架进行开发。
6. 跨平台兼容
Sass不仅可以运行在Web服务器上,还可以运行在各种操作系统上,如Windows、macOS、Linux等。这意味着开发者可以在任何平台上使用Sass进行开发,提高了开发的灵活性。
7. 版本控制
Sass兼容Git版本控制系统,这意味着开发者可以使用Git对Sass代码进行版本控制。通过版本控制,开发者可以轻松地回滚到之前的版本,以便在出现问题时进行修复。此外,版本控制还可以帮助开发者更好地管理代码变更,提高开发效率。
8. 与其他工具的集成
Sass可以与许多其他前端工具集成,如JavaScript构建工具(如Webpack、Gulp等)、包管理器(如npm、Yarn等)、任务运行器(如Grunt、Gulp等)等。这意味着开发者可以使用这些工具进行自动化构建、测试、部署等操作,提高开发效率。
总之,2024年使用Sass建站具有诸多优势,包括代码重用与模块化、强大的功能、易于维护、提高开发效率、社区支持、跨平台兼容、版本控制以及与其他工具的集成等。这些优势使得Sass成为越来越多开发者的首选建站技术。
引言:
在快速发展的科技时代,技术行业成为了许多年轻人追逐梦想的舞台。然而,随着技术的不断进步和变革,我们需要更加深入地思考自己的职业规划和心灵成长,以适应未来的挑战和机遇。本文将探讨2023年技术行业的发展趋势,并提供一些建议,帮助我们制定个人的职业规划和实现心灵的成长。
第一部分:技术行业的发展趋势
1. 人工智能的崛起:人工智能将成为2023年技术行业的重要发展方向。从自动驾驶到智能助理,人工智能将在各个领域发挥重要作用,为我们带来更高效、智能化的生活和工作方式。
2. 区块链技术的应用:区块链技术将在2023年得到更广泛的应用。它不仅能够改变金融行业,还能够应用于供应链管理、数字身份认证等领域,为数据安全和信任建立提供新的解决方案。
3. 5G技术的普及:随着5G网络的普及,我们将进入一个全新的数字化时代。高速、低延迟的网络连接将为物联网、虚拟现实等技术的发展提供强大的支持,推动技术行业的创新和变革。
第二部分:职业规划与心灵成长
1. 持续学习与自我提升:在技术行业,持续学习和自我提升是至关重要的。我们应该保持对新技术的敏感度,不断学习新知识和技能,以适应行业的发展和变化。
2. 培养创新思维与解决问题的能力:技术行业需要具备创新思维和解决问题的能力。我们应该培养自己的创造力,学会独立思考和解决复杂的问题,以应对技术行业中的挑战。
3. 建立良好的人际关系与团队合作能力:在技术行业中,良好的人际关系和团队合作能力同样重要。我们应该学会与他人合作,尊重他人的意见和贡献,共同实现团队的目标。
第三部分:对未来的规划
1. 设定明确的目标与计划:在未来的规划中,我们应该设定明确的目标和计划。这些目标可以是短期的,也可以是长期的,但都应该具有可行性和可量化性,以便我们能够更好地衡量自己的进展。
2. 寻找导师与学习机会:在未来的规划中,我们应该寻找导师和学习机会。导师可以给予我们指导和支持,帮助我们更好地发展自己的职业。同时,我们还应该积极参与各种培训和学习活动,不断提升自己的技能和知识。
3. 探索多元化的发展路径:在未来的规划中,我们应该探索多元化的发展路径。技术行业提供了许多不同的职业选择,我们可以根据自己的兴趣和能力选择适合自己的发展路径,并不断拓展自己的领域。
结论:
2023年的技术行业将充满机遇和挑战,我们需要深入思考自己的职业规划和心灵成长,以适应未来的变革和发展。通过持续学习、培养创新思维和解决问题的能力,建立良好的人际关系和团队合作能力,我们可以在技术行业中取得成功。同时,我们还应设定明确的目标和计划,寻找导师和学习机会,探索多元化的发展路径,为自己的未来奠定坚实的基础。
总结:
在2023年的职业规划与心灵成长中,我们需要对技术行业进行深度思考,并制定相应的未来规划。通过持续学习、培养创新思维和解决问题的能力,建立良好的人际关系和团队合作能力,我们可以在技术行业中取得成功。同时,我们还应设定明确的目标和计划,寻找导师和学习机会,探索多元化的发展路径,为自己的未来奠定坚实的基础。只有不断努力和追求进步,我们才能在技术行业的浪潮中立足并取得更大的成就
目录
I. 总述
II. setTimeout()函数
III. setInterval()函数
IV. 新年倒计时案例
Javascript的setTimeOut和setInterval函数应用非常广泛,它们都用来处理延时和定时任务,下面这篇文章主要给大家介绍了关于JavaScript setTimeout和setInterval的用法与区别,如果大家有需要可以参考下。
I. 总述 首先,setTimeout()和setInterval()函数是JavaScript中两个很重要的关于"时间的函数",因此,我们在学习JavaScript的过程中,一定要对这两个函数有一个深入的学习,它们两个函数也是经常被使用的!
其中,如果分别用一句话来概括这两个函数,那么应该是这样的:
setTimeout(): 该函数能够按照设定的时间值延迟执行其中的事件。
setInterval(): 该函数能够按照设定的时间值作为间隔,周期性的执行其中的时间。
当然了,只是简述,细节方面,我们在下面的部分给大家做讲解。
II. setTimeout()函数 首先是我们的setTimeout()函数,它的格式是怎么样的呢:
setTimeout(function,times, param1, param2, …);
setTimeout 是一个定时器函数,它允许我们在指定的时间后执行一次函数。其中,function 是我们要执行的函数,times 是延迟的时间(以毫秒为单位),param1, param2, … 等是传递给函数的参数(可选)。例如我们看这段简单的代码:
setTimeout(function(){ alert("hello,setTimeout()"); }, 1000); 运行之后,它会在1s的延迟之后,弹出一个弹框,其中,1000的单位是毫秒!
学到这里,大家觉得很简单,对吗?好的,那我给一段代码,大家猜一下它会输出什么:
for (var i = 1; i <= 5; i++) { setTimeout(function () { alert(i) }, 1000) } 哎,有人要说了,简单啊,这不是输出:1 2 3 4 5 吗?
然而实际上,它输出了6 6 6 6 6,所以这是为什么呢?因为setTimeout()是一个异步执行函数,说人话就是,它里面的函数体,并不会在每一次执行的时候立刻运行,而是会丢进执行队列中,等待"主线任务"全部完成,才会执行它。
于是在5次for循环后,i的值是5,传进去,弹出了6个6。
开发工具
HBuilder X 3.8.12.20230817
注意:开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。
1、电脑下载安装安卓模拟器 我这里使用的是 夜神模拟器 ,也可以选择其他安卓模拟器
夜神模拟器官网:夜神安卓模拟器-安卓模拟器电脑版下载_安卓手游模拟器_手机模拟器_官网安卓模拟器哪个好用?电脑玩手游首选夜神安卓模拟器。夜神模拟器采用领先内核(基于Android7.1),同时是全球首家支持Android9内核的模拟器,在性能、稳定性及兼容性等方面有着同类产品无可比拟的优势。高清流畅,多开挂机更省资源,键鼠和手柄操作给你完美的操控体验,畅享电脑玩手游的至高快乐。https://www.yeshen.com/
点击下载并安装,安卓完成后桌面会生成 ‘夜神模拟器’ 快捷方式
2、运行模拟器、查找及确认模拟器运行端口
运行模拟器:
双击桌面快捷方式 ‘夜神模拟器’ 运行模拟器,并进入模拟器桌面
查找及确认模拟器运行端口:
(这里说一下夜神模拟器默认端口是62001,但是有些版本可能不是这个端口)
鼠标右键电脑桌面的模拟器快捷方式,查看模拟器安装目录
点击 ‘打开文件所在的位置’,并找到 debugReport.bat 文件
双击运行 debugReport.bat 文件
运行后出现以下内容,则表示模拟器已启动并使用了 62001端口
nox adb port:62001
already connected to 127.0.0.1:62001
也可以运行 debug.bat 文件,可以查看模拟器端口
3、开发工具HBuilderX配置模拟器 打开开发工具HBuilderX
单击左侧项目进行选中,在上面菜单栏依次打开 运行 》运行到手机或模拟器 》Android模拟器端口设置
在打开的设置页面,只需要配置adb路径 及 Android模拟器端口
adb路径即夜神模拟器的运行adb文件所在目录,即 D:\Program Files\Nox\bin\adb.exe
Android模拟器即第三步查询到的夜神模拟器的运行端口,即端口号 62001
4、开发工具HBuilderX将APP运行模拟器中 第三步完成后,在菜单栏依次打开 运行 》 运行到手机或模拟器 》运行到Android App基座
在设备列表中,可以看到 127.0.0.1:62001 即模拟器设备
点击 运行 按钮,观察开发工具及模拟器(将在夜神模拟器中安装APP及运行)
开发工具控制台会提示正在连接手机,并安装手机运行环境,此时手机端会由APP安装的操作:
模拟器:完成APP的安装,模拟器桌面可以看到APP图标,并成功运行。电脑右下角会提示模拟器已安装APP
点击上方“嵌入式应用研究院”,选择“置顶/星标公众号”
干货福利,第一时间送达!
来源 | 嵌入式应用研究院
整理&排版 | 嵌入式应用研究院
一、引言 时光如影,岁月如梭。转眼之间,2023年已经过去,在这一年里,我们迎来了新的挑战和机遇。在这一年里,我感觉到工作节奏明显加快,每一天都充满了新的任务和项目。这种快节奏的工作环境让我更加专注于目标,努力提高自己的工作效率和质量。随着技术的不断发展和创新,我们所面临的挑战也越来越复杂。为了更好地应对这些挑战,我意识到单纯依靠个人的能力是远远不够的。于是,我开始注重团队合作和协同工作。我努力与团队成员建立良好的沟通和合作关系,共同制定计划和目标,并确保每个人都能够发挥自己的长处和才能。另外,我也意识到持续学习和成长对于个人和团队的发展至关重要。在快节奏的工作环境中,我们必须不断更新自己的知识和技能,以适应不断变化的市场需求和技术趋势。因此,我开始积极参与各种培训和学习活动,不断提升自己的专业素养和综合能力。
通过2023年这一年的努力和实践,我深刻认识到工作节奏的加快并不可怕,只要我们具备足够的适应能力和应对策略,就能够抓住机遇、迎接挑战。我相信在未来的日子里,我会继续在工作中不断成长和发展,为自己和团队创造更多的价值。2024年,一定是充满活力、充满希望的一年。
二、家庭生活篇 家,是温暖的港湾,是心灵的归宿。能和家人时时刻刻团聚在一起,无疑是一种最大的幸福。今年,我家的小屁孩已经升入幼儿园中班了,看着他健康快乐地成长,身为父亲的我,内心充满了自豪与责任。
身为一个父亲,我深知自己的角色不仅仅是提供物质上的支持,更要在精神上给予关爱和引导。小屁孩的每一个笑容、每一次进步,都牵动着我的心。我时常思考,如何才能为他创造更好的成长环境,帮助他成为一个有担当、有责任心的人。
而在这个过程中,我要特别感谢我的老婆。她是我们家庭的守护者,是我和小屁孩的坚强后盾。是她,用无尽的爱与耐心,陪伴小屁孩度过了一个又一个快乐的日子;是她,用勤劳的双手,为家庭营造了一个温馨舒适的环境。
时间如白驹过隙,转眼即逝。今年是我和老婆结婚五周年的日子。回首过去的五年,我们共同经历了许多风风雨雨,是老婆的陪伴与支持,让我在人生的道路上走得更加坚定。
家有贤妻,助夫一半。正是有了老婆的默默付出,我才能在职场上全力以赴,为未来拼搏。在我心中,她不仅是家庭的守护者,更是我的灵魂伴侣。愿未来的日子里,我们能够携手共进,共同创造一个更加美好的明天。
此外,我们即将迎来家庭的新成员——我们的二宝。这个小生命将为我们的家带来更多的欢笑和幸福。我们会一起陪伴他(她)度过每一个成长的瞬间,见证他(她)迈出人生中的每一个小小步伐。在未来的日子里,我们将共同守护这个家庭的每一个成员,一起分享生活的喜怒哀乐、共同创造美好的回忆。无论遇到什么困难和挑战,我们都会团结一心、互相支持,因为我们深知家是彼此最坚实的依靠。
三、工作篇 今年最大的挑战是从一个技术工作者慢慢在向团队管理方向过渡,目前也正处于适应和考核阶段。在职业生涯中,许多人都会经历从技术岗位到管理岗位的转变。这个过程需要经历一系列前置条件。首先,技术到管理并不是简单的职位名称的改变,而是工作职责的实质性拓展。在技术岗位上,主要关注的是具体的任务和项目,强调技术实现和细节。而在管理岗位上,重点在于团队协调、资源分配、计划制定和执行,以及与其他部门的沟通合作。这也正如了我当初为什么选择修一个MBA学位的愿望。成为一个技术团队的优秀管理者需要承担更多的压力,以身作则,总是第一时间奔赴前线,为团队为部门树立一个良好的形象,在承担这份责任的过程中也慢慢磨掉技术人身上存在的一些坏毛病。
2024年,作为技术研发代表和负责人之一,我将面临的更多可能从未有过的挑战,除了本职工作专业技能的提升以外,还需要融入整个团队去分析和解决疑难病症;在这期间,正好是对个人逆商和情商的重要考量;在团队的合作过程中,我更希望的是团队发生争执的情况下能够以“保证项目成功”的视角来看待整个问题,按时高质量的完成项目交付。
四、开源篇 2023年,我陆陆续续受到百问网、开放原子、央视网的邀请,分享我个人在开源领域的经历和经验。这些分享经历让我更加深入地理解了开源文化的魅力和影响力。
在开源的世界里,没有严格的边界和限制,只有无尽的可能和创意。每一次代码的提交,每一次版本的迭代,都是对技术追求的一种表达。开源不仅让我看到了技术的深度和广度,更让我明白,一个人的力量是有限的,但当一群有着共同兴趣和目标的人聚集在一起,就能创造出惊人的价值和影响力。
在与众多开源爱好者的交流中,我发现我们都有一个共同的特点,那就是对技术的热情和追求。我们因为共同的兴趣而结识,因为共同的目标而合作。在思想的碰撞中,我们不仅解决了技术难题,更收获了珍贵的友谊和成长。此外,开源还教会了我一种开放和协作的态度。
在传统的开发模式中,我们常常只关注自己的领域和任务,而忽视了与其他团队的协作和沟通。但在开源世界中,我们需要与不同背景、不同技能的人合作,这要求我们必须具备高度的开放性和协作能力。只有这样,我们才能更好地理解他人的需求和问题,从而更好地协同工作。总的来说,开源为我打开了一个全新的世界,让我看到了技术的无限可能和创意的力量。我深信,在未来的日子里,我会继续在开源的世界里探索和成长,与更多志同道合的人一起创造更多的价值。
这也是今年拿到的一些小成就,也期待2024年再接再厉了!
五、致谢 称呼公众号黄工strongerHuangZhengN
嵌入式大杂烩陈工鱼鹰谈单片机世伟Mculover666杰杰物联网IoT开发肖遥兄技术让梦想更伟大韦启发嵌入式Linux东哥嵌入式Hacker严宇(良许)与猿学社团队
猿学社、良许Linux
晓宇芯片之家浩宇未知bug徐宏徐宏blog汪礼超 戴胜东TencentOS钟老师、高老师、韦东山老师百问科技朱有鹏老师朱老师IT充电站彭老师一口Linux王工8号线攻城狮张巧龙大鱼机器人Peter人人都是极客痞子衡痞子衡嵌入式阿诚记得诚电子设计武总嵌入式程序猿波哥嵌入式客栈龙叔创业者小龙王卓然裸机思维麦叔小麦大叔浮道巧学模电数电单片机涂小平txp玩Linux21ic付总嵌入式ARMSantigoC语言与CPP编程路飞路飞的电子设计宝藏沙滩单片机爱好者SugarMultiMCU EDU邱工嵌入式案例Show王工电子电路开发学习谭工电子电路加饭Rice嵌入式开发技术分享军涛兄物联网学前班RT-ThreadRT-Thread物联网操作系统情报小哥嵌入式情报局wzq程序喵大人温总微联智控工作室kk王李康AIoT开源项目分享上善若水嵌入式系统旋总Java建设者、程序员cxuan赵总风媒电子熊总、王总小熊派开源社区邹总芯知识学堂刘同学果果小师弟jubangyu嵌入式从0到1刘宇宁羽林君 在人生的旅途中,我有幸结识了许多志同道合的朋友,他们的存在让我的道路变得更加丰富多彩。虽然无法一一列举他们的名字,但他们的帮助和建议一直是我前进的动力。在此,我衷心地向他们表达我的感激之情,愿这份感谢化作永恒的友谊,陪伴我们共同成长。
随着2023年的尾声渐行渐远,我深感时光荏苒。回顾过去的一年,感激有你们的陪伴和鼓励,让我更加坚定地迈向未来。2024年,我热切地期盼着与你们相聚的时刻,共同分享彼此的成长和喜悦。让我们携手共进,迎接新的挑战和机遇,书写属于我们的精彩篇章!
六、展望 关于个人提升,除了硬技能,也应当有软技能,我们不凡回顾下以往自己做了什么,积累了什么,获得了什么,然后将这些内容整理起来,等到需要的时候就可以拿出来,例如申报职称,目前我也在申报中级阶段,希望在未来的10年内,能够有幸评上正高级职称,为自己的职业生涯添砖加瓦。
2024,去做自己喜欢的事,用心做,万一实现了呢?另外也是我留给小白以及迷茫的职场工程师一些经验:
打好基础 计算机基础、数据结构与算法、计算机网络、操作系统、计算机接口技术、计算机体系结构、微机原理、编译原理等等,只有慢慢通过实践打好这些基础知识,未来才能更好的成长。
良好谨慎的编程习惯 良好谨慎的编程习惯对于开发者来说是必须要去实操和适应的,因为稍有不慎,一行代码则可以给整个项目带来致命的危机。
良好的沟通能力 沟通必不可少,有时候适当的沟通可以让对方知道自己在做些什么,对方也许会提出一些可靠性的建议,让我们避免掉坑,节省学习时间,掌握实战经验。
不被BUG摧残的意志力 遇到BUG不可怕,沉下心来慢慢的分析,然后慢慢一步步的解决它,这样才能更好的成长。开发者最重要的就是一点就是遇到事情要冷静,BUG并不可怕,可怕的是不知道怎么面对它,从心理上就畏惧它,所以意志力尤为重要,我们要对解决一个BUG问题有分而治之的心态,这样未来不管遇到什么样的BUG都可以将它解决掉。
坚持坚持再坚持,持续的分享就是持续的复利 学习这件事是一辈子的,坚持坚持再坚持,顺便能把自己的学习经历分享出来,那么未来一定是可持续的复利
学习渠道 中国大学MOOC、网易云课堂等。
相信自己,相信付出!2024年,向风而行!
往期精彩 第一次上北京接受CCTV采访畅聊开源话题,这将是人生最有纪念意义的事情了!
深入学习Linux摄像头v4l2应用编程
【嵌入式Linux学习笔记】QT在Linux嵌入式设备上的使用
开源项目-对新手极其友好的数据结构与算法入门教程-hello-algo
嵌入式软件设计之美-嵌入式软件架构设计中的状态模式
觉得本次分享的文章对您有帮助,随手点[在看]并转发分享,也是对我的支持。
Docker 应用部署 一、部署MySQL 搜索mysql镜像 docker search mysql 拉取mysql镜像 docker pull mysql:5.6 创建容器,设置端口映射、目录映射 # 在/root目录下创建mysql目录用于存储mysql数据信息 mkdir ~/mysql cd ~/mysql docker run -id \ -p 3307:3306 \ --name=c_mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql:5.6 参数说明: -p 3307:3306:将容器的 3306 端口映射到宿主机的 3307 端口。-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。配置目录-v $PWD/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。日志目录-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。数据目录-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。 进入容器,操作mysql docker exec –it c_mysql /bin/bash 使用外部机器连接容器中的mysql 二、部署Tomcat 搜索tomcat镜像 docker search tomcat 拉取tomcat镜像 docker pull tomcat 创建容器,设置端口映射、目录映射 # 在/root目录下创建tomcat目录用于存储tomcat数据信息 mkdir ~/tomcat cd ~/tomcat docker run -id --name=c_tomcat \ -p 8080:8080 \ -v $PWD:/usr/local/tomcat/webapps \ tomcat 参数说明: -p 8080:8080:将容器的8080端口映射到主机的8080端口
在使用detectron2进行目标检测训练时,训练数轮后遇到了以下bug:FloatingPointError: Loss became infinite or NaN at iteration=856!
百度一下,发现有可能是以下几种情况:
1.如果在迭代的100轮以内,出现NaN,一般情况下的原因是因为你的学习率过高,需要降低学习率。可以不断降低学习率直至不出现NaN为止,一般来说低于现有学习率1-10倍即可。
2.如果当前的网络是类似于RNN的循环神经网络的话,出现NaN可能是因为梯度爆炸的原因,一个有效的方式是增加“gradient clipping”(梯度截断来解决)
3.可能用0作为了除数;
4.可能0或者负数作为自然对数
5.需要计算loss的数组越界(尤其是自己,自定义了一个新的网络,可能出现这种情况)
6.在某些涉及指数计算,可能最后算得值为INF(无穷)(比如不做其他处理的softmax中分子分母需要计算exp(x),值过大,最后可能为INF/INF,得到NaN,此时你要确认你使用的softmax中在计算exp(x)做了相关处理(比如减去最大值等等))
7.训练深度网络的时候,label缺失问题也会导致loss一直是nan,需要检查label 鉴于我是在训练几轮后才出现报错,个人猜测有可能是因为lr过大,有的文章提到甚至会把lr调成1e-7,于是将lr由0.0025调为了0.00025,运行,终于不再报这个错
参考文章:
训练网络loss出现Nan解决办法 - 知乎 (zhihu.com)
实验四 实验题目
Adaptive Filter andPyramid
Below is a small region of an image consisting of a noisy step edge.
(The original image had value=30 on the left of the step, and
value=10 to the right of the step.) It was corrupted by additive
Gaussian noise with zero mean and variance = 6.5.
32 25 29 30 27 13 14 16 12 7
28 31 32 31 28 11 7 12 6 11
实验一 实验题目
Matlab Exercises and Image Fundamentals
Matlab exercises.
a) Create a matrix A, any size and shape you want, and fill it with arbitrary values.
Compute
ATA
and
AAT
. The results should be square, symmetric matrices.
b) Write a Matlab program to produce the first 30 Fibonacci numbers.
It is often useful to generate a synthetic image with known properties that can be used
to test algorithms. Generate an image composed of two concentric circles as shown
在我的第二次项目中,我仍然遇到了在第一次项目中遇到的问题——接口返回的数据不能直接在html或者vue中像自己使用let定义的变量一样使用。因此我也查询过一些方法:
使用promise我没有看懂;
当数据获取成功后将数据作为实参传递给需要使用的函数,这个方法只能适用于在方法中使用该参数;
我在第一次项目中使用的方法是将获取的数据保存到本地存储中,然后使用的时候再从本地读取出来,因为在第一次的时候使用到的比较少,因此这个方法的弊病没有体现出来。但是在第二次项目中使用较多,就出现了以下弊病:首先就是页面不能立即按照数据的改变而改变,需要刷新一次之后才能展示出来;然后就是限制较多,需要判断数据是否为空等,比较麻烦,而且容易遗忘。
因此本次在学姐的帮助下,我学习到了一种新的方法:使用pinia库保存。
首先需要定义接口: import request from '@/utils/request' export interface dataFindBig { keywords: string worksType: number worksShape: number } //根据作品名、大类型、小类型查询 export const findBig = (keywords: string, worksType: number, worksShape: Array<number>) => request.get<any, dataFindBig>(`/works/keywords?keywords=${keywords}&worksType=${worksType}&worksShape=${worksShape}`) 第一行:的作用是引入二次封装后的axios,若没有二次封装,那地址就是http。
第三行:定义了参数的类型
第九行:中的参数也可以使用接口名dataFindBig,在这里我没使用。但是在第十行,尖括号中第二个参数是参数类型,更详细的用法可以自己再详细了解。注意了:我在这里用的是箭头函数,箭头之后没有使用大括号,表示第十行是return之后的内容,如果加了大括号就需要在request之前加上return。
然后就是创建pinia库: //引入pinia import { defineStore } from 'pinia' //引入相关接口 import { findBig } from '@/api/fuShe-api' let warehouseOne = defineStore('buzhidaoganshenme', { //仓库存储数据的地方 state: () => { return { } }, actions: { async findBig(keywords: string,worksType: number,worksShape: Array<number>){ let result:any = await findBig(keywords,worksType,worksShape) if(result&&result.
Socket socket = new Socket(serverAddress, serverPort); // 获取输入流和输出流 InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); // 发送数据到服务端 byte[] message = data.getBytes(charset); outputStream.write(message); 原因: "string".getBytes() 是以当前系统的编码去获取获取字符串的[]byte,Windows默认编码为GBK,idea默认编码为utf8
解决:"string".getBytes(charset) 指定编码
基于双vip的GTID的半同步主从复制MySQL高可用集群 基于双vip的GTID的半同步主从复制MySQL高可用集群一.项目介绍1.拓扑图2.详细介绍 二.前期准备1.项目环境2.IP划分3.根据ip规划配置好静态ip4.修改主机名方便管理5.配置ansible免密通道 三. 项目步骤1.安装部署ansible1.利用xftp上传MySQL软件包(mysql-5.7.43-linux-glibc2.12-x86_64.tar.gz)和MySQL Router的安装包(mysql-router-community-8.0.21-1.el7.x86_64.rpm)以及Node Exporter的软件包(node_exporter-1.6.1.linux-amd64.tar.gz)2.编写安装mysql和node_porters的脚本3.编写playbook批量部署mysql、mysqlroute、node_exporters、dns等软件 2.同步mysql数据1.导出master上的mysql上的数据2.使用scp把all_db.SQL传递给ansible3.使用ansible下发到slave集群机器上 3.配置基于GTID的半同步主从复制1.在master上安装配置半同步的插件2.修改master配置文件 /etc/my.conf 并开启gtid功能3.在每台从服务器上配置安装半同步的插件,配置slave配置文件4.在master上新建一个授权用户,给slave1和salve2来复制二进制日志5.在slave2上创建授权用户,给salve3复制二进制日志6.在slave上配置master info的信息7.查看8.验证GTID的半同步主从复制9.配置slave3延迟备份服务器 4.master创建一个计划任务,远程同步到slave4异地备份服务器1.在slave4上操作2.查看rsync和xinetd监听的进程3.在数据源master服务器操作4.测试数据源master服务器192.168.153 到slave异地备份服务器192.168.153.154之间的数据同步5.数据源服务器上安装sersync工具,实现自动的实时的同步6.创建计划任务 5.部署mysqlrouter中间件实现读写分离,安装keepalived部署双vip实现高可用安装部署mysql-router软件1.修改配置文件2.启动MySQL router服务,监听了7001和7002端口3.在master上创建两个用户实现读写分离4.测试在只读账户中操作在读写账户上操作 5.安装keepalived部署双vip实现高可用 6.搭建DNS服务器1.修改dns配置文件,任意ip可以访问本机的53端口,并且允许dns解析2.编辑dns次要配置文件/etc/named.rfc1912.zones,增加一条主域名记录3.修改linux客户机的dns服务器的地址为搭建的dns服务器192.169.153.1454.查看效果 7.监控部署1.利用xftp把安装包拉取进来2.一键源码安装prometheus3.把prometheus做成一个服务来进行管理4.在node节点服务器上安装exporter程序,已经在ansible的playbook中安装完成5.在prometheus server里添加安装了exporter程序的机器6.配置部署grafana 8.sysbench压力测试1.安装sysbench工具2.调大内核资源限制3.在master上创建测试库4.基于sysbench构造测试表和测试数据5.数据库读写性能测试(获取测试数据)把prepare改成run6.执行完成压测之后可以将run改成cleanup,清除数据 四.出现的问题1.在使用ansble一键配置之后输入mysql无法找到命令2.在配置grafana的时候没数据3.压力测试的时候,由于内核参数的限制,导致无法起太多的线程4.主从复制时,只在slave上进行了操作,导致事务数比主服务器还要多,主从复制一直起不来5.虚拟机内存不够,新建不了虚拟机 五.项目心得 基于双vip的GTID的半同步主从复制MySQL高可用集群 一.项目介绍 1.拓扑图 2.详细介绍 项目名称:基于双vip的GTID的半同步主从复制MySQL高可用集群
项目环境:centos7.9,mysql5.7.43,mysqlrouter8.0.21,keepalived 1.3.5,ansible 2.9.27,prometheus-2.47.0,grafana-enterprise-10.1.1-1,node_exporter-1.6.1等。
项目描述:
本项目的目的是构建一个高可用的能实现读写分离的高效的MySQL集群,确保业务的稳定,能沟通方便的监控整个集群,同时能批量的去部署和管理整个集群。
项目步骤:
1.配置好ansible服务器并建立免密通道,一键安装MySQL、mysqlroute、node_exporters、dns等软件,在master上导出基础数据到ansible上,发布到所有slave服务器上并导入
2.安装好半同步相关的插件,开启gtid功能,启动主从复制服务,配置延迟备份服务器,从slave1上拿二进制日志
3.在master上创建一个计划任务每天2:30进行数据库的备份脚本,使用rsync+sersync远程同步到slave4异地备份服务器上
4.安装部署mysqlrouter中间件软件,实现读写分离;安装keepalived实现高可用,配置2个vrrp实例实现双vip的高可用功能
5.搭建DNS域名服务器,配置一个域名对应2个vip,实现基于DNS的负载均衡,访问同一URL解析出双vip地址
6.使用sysbench整个MySQL集群的性能(cpu、IO、内存等)进行压力测试,安装部署prometheus实现监控,grafana出图了解系统性能的瓶颈并调优
二.前期准备 1.项目环境 cecentos7.9,mysql5.7.43,mysqlrouter8.0.21,keepalived 1.3.5,ansible 2.9.27,prometheus-2.47.0,grafana-enterprise-10.1.1-1,node_exporter-1.6.1等
2.IP划分 准备11台centos7.9的虚拟机,并且分配IP地址:
主机名IPDNS服务器192.168.153.145mysqlrouter1192.168.153.155mysqlrouter2192.168.153.147master192.168.153.150slave1192.168.153.151slave2192.168.153.152slave3192.168.153.153slave4192.168.153.154ansible192.168.153.148监控服务器192.168.153.149sysbench压力测试机192.168.153.144 3.根据ip规划配置好静态ip [root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO=static #静态配置ip NAME=ens33 #网卡名称ens33 DEVICE=ens33 #本机网卡ens33 ONBOOT=yes #开机启动 IPADDR=192.168.153.150 #ip地址 PREFIX=24 #子网掩码24 GATEWAY=192.168.153.2 #我选择的是NAT网络,所以网关是路由器ip 192.168.153.2 DNS1=114.114.114.114 #dns服务器114.
2023最后一天,仿佛都要将自己变成小孩子,在等待新的一年。春节与我的意义不大,我反而期待元旦,好似跨过去,我就蜕变成新的人啦,全身血液换了个变,人也不是之前的灵魂。
当然那不可能。回顾自己2023的一年,虽然不称得上很好,但是也算是慢慢变好,在日复一日的煎熬里,我也算把自己埋到尘埃里,拔去尖牙利齿,养出一副更厚实的盔甲,谁攻击我就反击,眼泪这种东西更是善用,不开心了哭一哭,烦累了哭一哭。当然职场里这种东西总是会带来不必要的麻烦,比如会给我在女性的标签上打上一层脆弱懦弱的折扣,但是谁在乎啊,我自己也不在乎,有时候对待恶心的人就得这样操作,我这是一次次的实践得来的真知。
以上是偏题的,无聊的一些抒发感情。
下面步入正题。
我2024年想做什么呢?
我大概想了想,我还是学习前端吧。
虽然大环境不好,但是总不能全不要螺丝钉吧!所以我还打算做螺丝钉,当然一个知识面更广的,可能更受欢迎。
所以明年都说学习计划就分为三个大部分:
1.vue框架的学习,底层原理再深入学习一遍,达到手撕的程度?80%吧
2.算法的学习,帮助自己丰富自己的平时的一些开发逻辑吧
3.其他杂七杂八的学习,扩展自己的知识面,当然也可以解除新的框架啦
对于1,我其实一直半吊子的状态,一知半解?会用,大概了解,掌握的程度说不上,虽然手里项目一直在用,但是还是确实契机详细学习呀。
对于2,我还是挺喜欢算法的,当然是精神好的时候,没有精神的时候,啥都不感兴趣,算法在我工作中也就在处理一些旧项目的旧代码逻辑的时候有用,他们都爱整很复杂的逻辑,数据结构一层又一层,天天for来for去,if来if去…所以学点,有备无患。
对于3,竟然有各种超出我知识面的需求,所以当然要保持学习啦,比如TS我是要提上日程了,系统的学一遍,在我迁移项目的时候就少点低级错误。
以上是我想学的,2024年总要有个目标吧,我给自己的目标是,自己以2年半的工作经验,知识面和能力达到中级前端的水平,这不知道是不是夸大,目前我觉得自己也还是初级的门里打转,不过要奋斗呀,明年24岁,总要变成不一样的自己,然后才能有更多的选择余地。
以下是我的胡言乱语,但是如果有同样苦恼的人,说不定能从中得到安慰。
今年我算是和自己和解了,时常安慰自己,已经很不错了,我们也要求不高,不和任何人比较,我只要自己变得开心就好,诚然别人的成就会让人羡慕,但是自己真的想成为那样的人吗?你想走那样的路吗?如果你也遇到羡慕别人不能自已的时刻,你问问自己,是不是愿意走那样的路,如果愿意,那你去吧。我大多时候是这样劝自己放下一些不合时宜的念头的。但是有些人应该能出看出我表情下的嫉妒,嫉妒,没有什么贬义吧,人生来的时候应该都觉得自己平等的,所以嫉妒应该是普遍存在的,我们应该学会与欲望和解。
但是,我打倒不了任何欲望哈哈。我选择浅尝辄止,啊不对,是望梅止渴。你如果遇到这种情况,也可以试试,大多时候我对待物欲的时候,这个方法很有用,当然脱敏疗法也不错,反复观看,又不要钱。
over,我要赴朋友的聚会,希望我们今晚跨年快乐,明天一定是很好的一天!
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~
⑩①Redis持久化 RDB + AOF Redis数据快照 - RDBRedis追加文件 - AOFRDB + AOF 混合模式 Redis数据快照 - RDB RDB:
RDB全称 Redis Database Backup file,即Redis数据备份文件,也被叫做Redis数据快照。
总的来说就是将内存中的数据都记录到磁盘中形成快照文件,当Redis实例故障重启后,从磁盘读取快照文件,恢复数据。(在指定的时间间隔,执行数据集的时间点快照,dump.rdb文件)
# 由Redis主进程执行RDB,会阻塞所有命令 save # 开启子进程执行RDB,避免主进程受到影响 bgsave RDB执行原理:
设置RDB触发规则:
Redis内部有触发RDB的机制,可以通过redis.conf配置文件进行设置:
redis7以后的配置情况
RDB的优缺点:
优点: ①RDB保存时执行的是全量快照,适合大规模的数据恢复;②可以按照业务定时备份;③对数据完整性和一致性要求不高;④RDB文件在内存中的加载速度比AOF文件快得多; 缺点: ①快照间的数据会丢失,原因是一定时间间隔备份一次,若期间redis宕机,就会丢失最近一次快照至当前这段时间的数据;②内存数据的全量同步,若数据量太大会I/O严重而影响性能;③RDB依赖主进程fork,数据集较大可能导致服务请求的瞬间延时,且fork时内存中的数据被克隆,占用两倍空间; Redis追加文件 - AOF AOF:
AOF全称 Append Only File,即追加文件。 Redis处理的每一个写命令都会记录在AOF文件中 ,也可以将其看作日志文件。只许追加AOF文件而不能修改AOF文件 ,Redis启动之初会读取该文件重新构建数据。(AOF保存的是appendonly.aof文件)默认情况下,Redis AOF是没有开启的,开启需要修改Redis配置文件redis.conf,修改内容为appendonly yes。 使用与策略:
redis配置文件:redis.conf中: # 是否开启AOF功能 默认是no appendonly yes # AOF文件的名称 appendfilename "appendonly.aof" # AOF的三种写回策略 # 1. 每执行一次写命令,立即记录到AOF文件 appendfsync always # 2.
前言 2023 年就像一本充满着惊喜和挑战的书籍,它的每一页都留下了我生活中不同的痕迹。回顾过去,我发现了许多意想不到的成长和启示,也体验了生活的起起伏伏。
这篇文章是对 2023 年的一个小小总结,也是对未来的一点期许。在这里,我想分享一些感悟和思考,和小伙伴们一起探讨过去和未来的点滴。
工作经历 项目组变动 我是在去年加入公司的,后来因项目需要,又陆续迎来了两位新同事。一直以来,我都负责着新同事的培养工作,公司领导也期望我能成为项目的核心成员,能够带领新同事一起向前迈进。
去年,公司发展势头迅猛,让人觉得仿佛“明天公司就要上市”一般。然而,由于公司的财务状况出现赤字,今年开始我们面临着降本增效的挑战。
今年4月,因为项目需要,我的其中一个同事被调动到了另一个项目组(我们项目需要驻场,他的调动意味着我们可能很少能见面,甚至一年都难得相聚)。这对我来说也是第一次经历这样的情况。我们一起工作了近一年(也算是亲手培养出来的),关系很好,但为了项目的顺利运作,也不得不接受这个调动,虽然心中会有些不舍。
系统投产上线 系统在5月份投入运营,当天上线时,我因为其他项目需要外出,没有在现场。幸运的是,现场的同事们顶住了上线的压力,一直工作到晚上十一二点,最终成功完成了系统上线。接下来的工作就是确保系统能够正常运行和使用。为此,我们几乎每周都加班,持续了一个月的时间,终于能够喘一口气了
小伙伴相继离职 7月份,另一个同事也决定离职,前往深圳。其实他早在2022年底就向我们透露了这个计划,因为女朋友要回那边发展。虽然我们理解他的选择,但当真正离别的时刻来临,我们仍然感到难以接受。
8、9月份,公司安排了新同事接替离职同事的工作。然而,两位新同事都没能在这个项目待一个月便离职了。后来私下聊天时才得知,一个早就计划辞职回老家准备考公务员,另一个已在6月份时在老家的国企找到了工作,如今正在等待流程审批。
12月中旬,4月份调走的那位同事也选择离职,打算回老家继承家业。在离职那天,我们一起聚餐,还开玩笑说他是否还需要父亲继续传承家业。
从最初项目组的五六人到现在只剩下我一个人。在去年之前,我对与客户沟通需求、问题反馈、业务场景一窍不通。记得刚来的时候,因为系统出现了小问题,被客户责骂了一顿,而客户本身也是技术出身。有时候,客户能看到问题的本质。跟随客户学到了很多东西。我能如此“安享晚年”,也多亏了两位前辈同事的辛勤付出。
现在项目二期要开了,手里还有另外两个项目需要处理,上级已经承诺新的同事将在元旦后加入开发团队,到时候自己压力应该会小一点吧~。
回头想想,那些离职了的项目组同事真的很优秀,大家都在奔赴自己想要的人生。
生活经历 同事合租 我之前在西安工作时常和朋友合租,但和同事一起合租则是我的第一次经历。
3月份,因为项目驻场地点较远,通勤不太方便,于是我考虑在客户现场附近租房。碰巧我的同事也面临着房子到期的情况,我们约好时间一起去看房。最终,我们在一家公寓看中了一间大开间,里面有两张床、两张桌子,还有茶几和沙发。卫生间和厨房都是独立分开的,我们觉得非常适合。选择合租比单独租房更经济实惠,这是一个明智的选择。由于我养猫,物品会多一些,平时也会多一些厨房活动,所以我也稍微占用了一点室友的空间。更重要的是,这个房子离公司很近(打车十几分钟即可),所以我们能省下不少时间和金钱。我们平时上班,早上我打车,下班他打车,这样的安排节省了我们很多时间和开支。
带家人一起旅游 在4月份,我和家人商定五一假期去福建玩(可以看海)。我和姐姐提前购买了机票,预订了酒店。我在北京,姐姐和妈妈在上海,爸爸在西安。放假前我早早提前两天就动身,与爸爸在姐姐那里会合,然后一起坐高铁去福州。那边的天气很好,天很蓝、海也很蓝。我们在沙滩上拍了许多照片,玩得非常开心。
那段时间正好流行“特种兵式旅游”,每天早上不到五点就起床准备出门,晚上十一二点才回到酒店。这段经历真是又累又快乐。
在西安买房 10月份国庆假期,我们一家人商量好回老家,我来自陕西商洛(一个农村),平时和家人分居在不同地方,只有过年才会聚在一起。这次假期很长,也很久没回家,正好趁机回去看看。
我姐比我提前几天回去,在西安和我妈一起玩了几天。我姐看了西安的房子后问我们要不要西安买房,其实当时我还没有买房的打算,只是在贝壳APP上关注了一下,我就让我姐趁这两天正好看看房子的行情。不久,有个中介加了我的V,但我看了一圈都没有合适的,有些头疼,便打算放弃了。然后那个中介天天发微信问我看房的情况,甚至约我去实地看房,让我感到有些烦了。于是我自己在各种看房的APP上了解了一些楼盘,并用文本简单地列出了每个楼盘的价格、位置、优缺点,花了大约三天时间。最终我锁定了两个楼盘,准备在去京途经西安时亲自去实地考察。
第二天就要去西安了,前一天晚上我还在各大平台上做功课,研究攻略和注意事项。
我也与之前关系不错的西安同事约好,等我到达西安后,他带我去看房,并在他家借宿了几晚。抵达西安后,我们放下行李,吃了早餐就去了售楼部。置业顾问接待了我们,详细介绍了大盘的优缺点、交房时间和周边规划。同事也提出了一些关于价格的问题。听完回答后,我们感到比较满意。接着去了其他楼盘看了看,但相比第一个楼盘差距较大,所以放弃考虑。吃完午餐后,重点了解了购房流程。晚上和家人电话商量后,第二天一早就去签认购书、进行征信等一系列流程。晚上我便乘坐火车回到北京。
接下来就是交首付款、签署购房合同、办理贷款和邮寄贷款合同,等还房贷。
12月底的时候,我的公积金贷款和商业贷款才走完流程放款,下个月就要开始还房贷了。我的室友也离职了,回老家待到春节后再去武汉工作。我又重新开始了独居的生活,不能随意打车上下班了。但不管怎样,一切都会变得更好,同时也祝愿室友前程似锦,早日成家哈哈哈。
学习经历 写论文 我报的专升本计划于2024年1月30号毕业,而今年是我最后一个学期需要完成毕业论文。在确认好论文题目后,便开始着手准备写作。我花了大量时间在网上查找资料,历经三个月的努力,终于完成了论文。其中,论文格式调整就让我熬了好几个晚上,这也算是体验了一把熬夜赶写论文的感觉。完成论文后,我将其提交给了教务老师,接下来就是等待论文装订和答辩了。
论文答辩 我报的专升本是通过中介机构报名的,而不是直接由教育机构办理的。中介老师告诉我,论文答辩需要线下进行,要求我安排好时间回西安进行答辩。学校在11月份定下了答辩时间,我按时赶回了西安。在排队时,中介机构的老师告诉我们赶时间的可以优先参加答辩。于是我和另一个同学举手表示愿意。老师问他从哪里回来的,怎么不申请线上答辩,他说他是从新疆赶回来的,他的老师告诉他只能线下答辩。我说明我也是外地赶回来的,于是就排队等待答辩。没想到,我竟然成了第一个答辩的人,这让我有些手足无措。
进入答辩室,有两位老师,一位负责记录和核对信息,另一位负责提问。他们问了我几个问题,我支支吾吾地应对过去了。整个答辩不到5分钟就结束了,让我感到有些措手不及。中介老师还让准备了答辩PPT,背着电脑回去都没打开过。后来论文成绩出来了,评为中等。虽然不是特别理想,但还算可以。对于我来说,只要过关就已经满足了。
写博客 在2021年,我就萌生了搭建一个博客网站的想法。经历了前后端开发到部署的过程,甚至将网站部署到云服务器,但遗憾的是,虽然搭建完成,却没有真正投入使用。当时的网站算是勉强拼凑而成,存在许多问题尚待解决。最近有了些空闲时间,我决定重新捡起这个项目,重新完善和优化。
在搭建博客网站的过程中,我遇到了很多挑战,不过也通过查阅大量相关文章,收获颇丰。于是,即便我的个人博客网站尚未投入使用,但我把它当作一个在线笔记的平台,记录了我的学习和实践经验,并将搭建过程撰写成博客分享给了大家。如果你对此感兴趣,可以参考我的博文:如何从0搭建一个自己的网站-CSDN博客
从12月初仅有不到20名关注者,到月底已经吸引了800+粉丝,我觉得自己取得了一些进步。同时,也希望能够早日在自己擅长的领域里获得更多成就,成为一个发光发热的技术大佬。
鸣谢 非常感谢大家的关注和支持,使我有机会将我所了解的知识分享给大家。我将继续保持坚持,不断为大家带来更多的知识分享。谢谢。
2024年展望 1. 拿到本科毕业证和学位证
2. 换一份更好的工作
3. 通过软考考试
4. 坚持学习,保持热爱
5. 自己和家人身体健康,快快乐乐
总结 这七年仿佛在眨眼间就已经过去了。在职场摸爬滚打的日子里,见证了行业的变迁与发展,感受到了工作带来的成就感和挑战。在奋斗的同时,我也意识到了时间带走的无数珍贵瞬间,那些无法与小伙伴们分享的喜悦,无法和亲人道别的遗憾,也成了心头的一抹遗憾。
或许,正是因为这样的遗憾和感慨,更让我深刻明白人生的宝贵。无论忙碌与否,不要忘记抽出时间,与亲朋好友分享生活中的点滴欢乐与感动,因为这些才是生命中最宝贵的财富。未来的岁月或许会更忙碌,但我希望能更珍惜当下,抓住与亲人、朋友共度美好时光的每一个机会。
最后祝大家:天天开心,所愿皆所得,新年快乐,2024年一起加油!!!
2023年12月31日15:49:38
1.介绍 本文包含了有关yolov5目标检测的基本流程,包括模型训练与模型部署,旨在帮助小伙伴们建立系统的认知💖💖
YOLO是 "You only look once "的首字母缩写,是一个开源软件工具,它具有实时检测特定图像中物体的高效能力。YOLO算法使用卷积神经网络(CNN)模型来检测图像中的物体。该算法只需要通过给定的神经网络进行一次前向传播就能检测到图像中的所有物体。这使YOLO算法在速度上比其他算法更有优势,使其成为迄今为止最著名的检测算法之一。
2.环境依赖 2.1系统环境依赖 Win 10
Python 3.8
PyTorch 1.12.0
Pycharm professional 2022
2.2conda环境(重要的包) pip install -r requirements.txt (自动安装其他环境)
pip install wanbd
pip install tensorboard
pip install pyyaml
pip install ipython
pip install openvino
pip install opencv-python-headless
3.模块讲解 文件目录
注:models是权重配置,没写全
3.1训练 3.1.1介绍 简洁运行:
python train.py 带参数(只列出部分重要参数):
运行例子,在终端实现。
3.1.2修改参数 大部分可以直接在train.py文件中parse_opt函数中直接修改。
下面这些不是的,必须在配置文件中修改
learning_rate修改在--hyp选项中,默认为data/hyps/hyp.scratch.yaml文件;dataset修改在--data选项中,默认为data/coco128.yaml文件;nc修改在--data选项中,默认为data/coco128.yaml文件; 文件快速定位
3.1.3网络结构 yolov5 网络结构详细介绍
3.2验证 3.2.1介绍 简洁运行:
python val.py 带参数:
3.2.2评价指标 yolov5的评价指标详细介绍
目录
DNS(Domain Names System)
域名转IP
IP转域名 域名
域名查询流程
浏览器DNS缓存
操作系统缓存
本地host文件
完整流程
递归查询
迭代查询
DNS(Domain Names System) 域名系统,将域名和 IP 地址进行转换的服务器。
域名转IP 在命令行中通过nslookup + 域名可以查看域名解析到ip
也可以在Chrome浏览器中chrome://net-internals/?#dns去输入域名查看ip IP转域名 nslookup -qt=ptr ip地址,可以查看ip到域名的解析
域名 url链接由协议+主机+端口+路径组成,其中主机对应的部分为域名。域名组成是先写低级域名再写高级域名。
域名查询流程 1.查询浏览器的DNS缓存。(Chrome浏览器对每个域名会默认缓存60s,具体查看得通过网络日志查看)
浏览器DNS缓存 https://www.cnblogs.com/hls-code/p/17124489.html
2.查询操作系统DNS缓存
操作系统缓存 命令行中通过ipconfig/displaydns查看。
3.本地host文件
本地host文件 4.查询路由器DNS缓存(本地域名服务器)
5.迭代查询上级域名服务器,直到返回正确ip。
完整流程 1. 客户端发起一个DNS请求,先查看本地浏览器是否有这个域名的缓存,有解析结束
2. 没有则去看操作系统是否有缓存,有解析结束
3. 没有则去看本地host文件,有解析结束
4. 没有则发送该请求到本地DNS服务器,本地域名服务器采用递归查询自己的 DNS 缓存,如果本地DNS服务器存在则返回
5. 不存在本地DNS服务器则请求根域名服务器,比如请求"www.baidu.com",根域名服务器告诉本地DNS “.com” 顶级域名服务器的位置
6. 本地DNS服务器收到顶级域名服务器位置后则向顶级域名服务器请求"www.baidu.com"的IP地址,顶级域名服务器收到后则告诉本地DNS服务器"www.baidu.com"的权威域名服务器地址
7. 本地DNS服务器再向权威DNS服务器发起请求,权威DNS服务器查询后将对应的IP地址告诉本地DNS
8. 本地DNS服务器缓存该域名与对应IP然后返回IP给客户端
9. 浏览器根据TTL缓存该值
1-4为递归查询,5-7为迭代查询
递归查询 转发器将相应的查询结果返回至本地DNS服务器192.168.16.1,本地DNS服务器将查询结果返回至主机,最终得出http://qq.com的ns记录。因为本地DNS服务器不是http://qq.com的授权解析服务器,所以查询得出的结果是非权威应答。
递归的意思是:只需要发出一次请求,就能得到相应的结果。比如主机-本地DNS、本地DNS-转发器,都是递归查询。
阿里云VPN网关提供IPsec-VPN和SSL-VPN功能,功能不同计费项也不同,阿里云百科aliyunbaike.com分享阿里云VPN网关计费说明及IPsec-VPN和SSL-VPN实例费用、SSL规格费和宽带:
目录
阿里云VPN网关
IPsec-VPN和SSL-VPN计费项说明
IPsec-VPN
SSL-VPN
SSL规格费
带宽费
阿里云VPN网关收费价格表 阿里云VPN网关 阿里云VPN网关基于Internet,通过加密通道将企业数据中心、办公网或终端与专有网络(VPC)安全可靠连接起来。VPN网关分为提供IPsec-VPN和SSL-VPN功能,功能不同计费项不同,SSL-VPN要加收一个SSL规格费。另外,VPN网关带宽不同也不同。
IPsec-VPN和SSL-VPN计费项说明 VPN网关提供IPsec-VPN和SSL-VPN功能,不同功能的计费项不同,SSL-VPN要收取SSL规格费:
功能计费项费用计算只开启IPsec-VPN功能 IPsec-VPN实例费带宽费VPN网关费用=(IPsec-VPN实例费+带宽费)x购买时长只开启SSL-VPN功能 SSL-VPN实例费带宽费SSL规格费VPN网关费用=(SSL-VPN实例费+带宽费+SSL规格费)x购买时长同时开启IPsec-VPN和SSL-VPN功能 IPsec-VPN实例费SSL-VPN实例费带宽费SSL规格费VPN网关费用=(IPsec-VPN实例费+SSL-VPN实例费+带宽费+SSL规格费)x购买时长 IPsec-VPN 阿里云VPN网关IPsec-VPN带宽,详细如下表:
地域(元/月)5 Mbps10 Mbps20 Mbps50 Mbps100 Mbps200 Mbps中国内地2502501080108010801080中国香港3403401030103010301440新加坡3403401030103010301440美国(弗吉尼亚)2602601160116011601160美国(硅谷)3203201540154015401540德国(法兰克福)3003001410141014101410澳大利亚(悉尼)3403401530153015301530马来西亚(吉隆坡)330330990990990990阿联酋(迪拜)3703701730173017301730日本(东京)3603601080108010801080印度尼西亚(雅加达)3403401030103010301030印度(孟买)320320980980980980英国(伦敦)3003001410141014101410 SSL-VPN 阿里云VPN网关SSL-VPN带宽
地域(元/月)5 Mbps10 Mbps20 Mbps50 Mbps100 Mbps200 Mbps中国内地2502501080108010801080中国香港3403401030103010301440新加坡3403401030103010301440美国(弗吉尼亚)2602601160116011601160美国(硅谷)3203201540154015401540德国(法兰克福)3003001410141014101410澳大利亚(悉尼)3403401530153015301530马来西亚(吉隆坡)330330990990990990阿联酋(迪拜)3703701730173017301730日本(东京)3603601080108010801080印度(孟买)320320980980980980印度尼西亚(雅加达)5285281218121812181218英国(伦敦)3003001410141014101410 SSL规格费 当VPN网关开启SSL-VPN功能后,需要根据同时连接的最大客户端数量选择SSL连接数的规格,SSL规格:
SSL规格单价(元/月)51881028820458508881001,2882002,288 带宽费 阿里云VPN网关提供不同的带宽规格,无论开启哪个功能,都需要支付带宽费用:
地域(元/月)5 Mbps10 Mbps20 Mbps50 Mbps100 Mbps200 Mbps中国内地12552513253725772515,725中国香港15065016504650965019,650新加坡11551513153715771515,715美国(弗吉尼亚)15065016504650965019,650美国(硅谷)15065016504650965019,650德国(法兰克福)11551513153715771515,715澳大利亚(悉尼)11551513153715771515,715马来西亚(吉隆坡)11551513153715771515,715阿联酋(迪拜)5752015489513,53527,93556,735日本(东京)12554513853905810516,505印度(孟买)12552513253725772515,725印度尼西亚(雅加达)12552513253725772515,725英国(伦敦)11551513153715771515,715 目前阿里云VPN网关仅支持包年包月计费模式,暂不支持按量计费,更多关于阿里云VPN网关功能、使用及费用说明,请以阿里云官方页面为准。
Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python) 文章目录 Python 中的 Iterable 和 Iterator(Iterable and Iterator in Python)Introduction 导言Iterable VS Iterator为什么 Python 有这种特殊的设计special design?如何获取迭代器Iterator?1. 使用 iter() 函数2. 实现 `__iter__()` and `__next__()` 方法3. 使用生成器Generator Python 中的 for 循环究竟是如何工作的?Conclusion 结论 Introduction 导言 Iterable 和 Iterator 是 Python 的重要概念。然而,有时可能会让人感到困惑。本篇文章将深入探讨这些概念,帮助您完全理解它们。
Iterable VS Iterator 首先,我们应该知道 可迭代的对象Iterable 和 迭代器Iterator 是不同的。确切地说,Iterator 是 Iterable 的子类。一个 Iterable 对象,如 list , tuple , dict , set 和 str ,可以通过 iter() 函数产生一个 Iterator。例如
Chapter 1: roadmap 目录
Chapter 1: roadmap
一:导论
(1)什么是通信网络?
(2)为什么需要协议(Protocal)
二:Internet 结构组成
(1)网络边缘(Network edge):
(2)接入网(access network),物理媒介:
(3)网络核心(Network core):
三:网络边缘(Network edge)
(1)客户/服务器模式(Client/Server Mode):
(2)对等模式(Peer-to-Peer Mode):
(3)面向连接的通信(Connection-oriented Communication):
(4)无连接的通信(Connectionless Communication):
四:接入网(access network),物理媒介
接入网:是指将端系统(end system)物理连接到边缘路由器(edge router)的网络
(1)住宅接入网络
(2)单位接入网络(学校,网络)
(3)无线接入网络(WIFI,4G/5G)
链路(link):物理媒介
五:网络核心(Network core)
(1)电路交换(包括频分复用【FDM】,时分复用【TDM】)
(2)报文交换
(3)分组交换
六:分组交换中的时延,丢包,吞吐量
(1)时延
(2)丢包(packet loss)
(3)吞吐量(Throughput)
七:协议层次和服务模型
(1)分层协议与参考模型
(2)封装
(3)沙漏状的因特网协议栈
八 结语
一:导论 (1)什么是通信网络? 用通信链路(links)将通信节点(nodes)连接一起的设备集合,用于达成在nodes之前互相传递‘信息’的目的
links:同轴电缆,铜导线,光纤,无线电......
nodes:①终端/主机(end system/host)②中转节点:路由器(router,swithch)
protocal(协议):控制信息发送以及接收的规则标准
(2)为什么需要协议(Protocal) 机器无法像人类一样处理信息等,它们需要遵从一种标,由于需要处理不同的信息并给予不同的回复,因此就有了协议(protocal)。
二:Internet 结构组成 (1)网络边缘(Network edge): a:端系统/主机(end system/host):客户端(client),服务端(server);
b:应用程序;
Chapter 2: Application Layer 目录
Chapter 2: Application Layer
一:导论
(1)为什么要有应用层
(2)一些网络应用的例子
二:应用层协议原理(Principles of network applications)
(1)创建一个网络应用
(2)网络应用程序体系架构
客户-服务器模式(Client-Server architecture)
服务端
客户端(eg:HTTP,FTP,SMTP)
P2P体系结构
(2)进程通信
客户-服务器进程
网络套接字(socket)
进程寻址(Addressing processes)
(3)可供应用程序使用的运输服务分类
数据丢失率
吞吐量(throughput)
延时(delay)
安全
(4)因特网提供的服务(也可以叫传输层提供的服务)
TCP
UDP
当前因特网不提供的服务
(5)应用层协议
(6)本节中常见的网络应用以及对应的应用层协议
三:Web 和HTTP
(1)基本概念
什么是Web
而什么是HTTP呢?
(2)两种HTTP(持续&非持续)
非持续连接(Non-persistent HTTP)
一个具体的例子
响应时间(RTT)
持续连接(persistent HTTP)
非持续连接的缺点
持续HTTP(HTTP1.1):
(3)HTTP报文格式
HTTP请求报文:
HTTP响应报文:
(4)用户与服务器的交互:cookie
cookie的组件
cookie的具体实现(如下图所示)
HTTP cookies的作用
对于cookie的安全性思考
首先就是服务器站点可能将用户的信息泄露给第三方(即很久之前就有过在一个软件搜相关商品,在另外一个软件它给我推荐这商品)
(5)Web 缓存(caches)————代理服务器
目标:不访问原始服务器,就可以满足用户需求
具体方式:浏览器将所有的HTTP请求发送给缓冲
好处
Web缓存(caches)下时延(delay)的计算