【OpenMMLab】框架算法体系

一、前言 近两年来随着Transformer在CV领域的迅速发展,多模态融合的大一统的AI发展趋势已成定居,趁着参加OpenMMLab Course的契机,复习、提升下自己对CV算法的理解,同时通过学习源码增强自己的代码能力。 二、OpenMMLab框架简介 OpenMMLab是商汤开源的CV开发框架,其基于Pytorch建立了公共底层模块MMCV和MMEngine,为上层的应用框架提供了优雅、统一的接口,可用于分类、检测、分割、追踪等应用场景,其2.0版本的整体框架如下: OpenMMLab经过多年的发展,现具备统一的模块抽象、训练流程和数据接口,可以灵活的进行流程控制、日志和可视化功能。 作为CV领域开源框架的佼佼者,其设计思路和代码风格值得好好深入学习。

git和npm的使用及环境配置

git的使用 首先在官网下载安装包 https://git-scm.com/ 然后根据自己电脑的版本下载 配置环境变量 根据自己安装的位置(bin目录下)在classpath中配置对应的环境变量 打开cmd命令 查看所配置的是否成功,即输入 git -v 查看版本号即可 成功配置完环境后,在git中创建自己的代码仓库,创建完毕后,初始化readme文档,然后管理仓库,设置为开源。 创建完成后复制自己代码仓库的地址,然后打开命令窗口输入bash或者在桌面单击右键打卡git bash 都可以进行输入命令。 打开命令窗口后输入相应的命令就行,前提是自己所输入的命令一定要与自己的git账号 用户名 邮箱,密码相关,看清楚,不然很容易出错。 git 克隆 使用git clone url 命令,将你自己刚才创建的仓库地址填写上去,即可在自己的电脑上查看到自己所创建的文件夹。 使用cd 命令,切换到自己所创建的文件夹中对应的位置。 可以在文件夹中创建相应的页面来检测后期是否创建成功。 然后使用git add * 命令 来将文件放到缓存区中进行下一步的使用。 使用commit -m "" 为放到缓存区的文件进行填写注释信息,方便到自己的git上进行查看。 在进行git push的过程中,要先进行对自己git 全局信息进行配置和填写。 即填写用户名和邮箱地址。 name 和 email填写自己git的 最后 执行git push命令即可,就可以实现上传到自己的git仓库了。 git pull 命令远程更新自己的仓库。 git的主要使用方法如上,还有更多的命令及操作还需要自己去学。 npm的配置 自己对npm的了解还不是很深,主要的环境变量及相关配置如下,目前还没有使用。 node 下载地址 https://nodejs.org/en/ 下载完成后进行解压。 配置环境变量 打开控制台,输入相关命令,查看是否配置成功。 出现相关的版本号即表示配置成功。 还有cnpm,可以自行查阅学习。

iptables-1.8.4 版本 -m state模块加载出错

iptables-1.8.4 版本 -m state模块加载出错 问题: iptables stopped working with “Couldn't load match `state':No such file or directory” 解决办法: Replace "-m state --state " with "-m conntrack --ctstate" 即: 原有: -m state --state ESTABLISHED,RELATED 替换为 -m conntrack --ctstate ESTABLISHED,RELATED

UmiJs使用

1.0 什么是UmiJs? 插件化的企业级前端应用框架 当前学习文档基于v3.x版本, 当前v4已发布 2.0 为什么使用UmiJs? 2.1 特点: 开箱即用 Umi内置了路由、构建、部署等,仅需一个依赖即可上手开发,可满足日常开发。完备路由 同时支持配置式路由和约定式路由,支持动态、权限、嵌套等功能。可扩展 Umi内容由插件完成,支持插件和插件集,以支持完成不同功能需要。业务整合 Umi因为是阿里系的前端框架,对自家的antd、ahooks、dva等整合度比较高。 2.2 对比creat-react-app? cra是封装了webpack的一个打包方案,无路由,无数据量,不支持配置,且当遇到需要修改配置时会比较困难。 2.3 缺点 umijs官方文档不明确 很多不知所云高度藕合 适合快速开发的项目 3.0 如何使用 3.1 启动 推荐使用官方推荐的工具进行项目搭建 tyarn create @umijs/umi-app 框架结构 app.ts app.tsx 在src下新建app.ts文件 启动运行时配置文件或在src下新建app.tsx文件 启动运行时配置。 import React from 'react'; import { BasicLayoutProps, Settings as LayoutSettings, } from '@ant-design/pro-layout'; import he from '@/assets/he.jpg'; import UserInfo from '@/components/UserInfo'; import axios from 'axios'; export async function getInitialState() { try { const res = await axios({ url: '/yiyu/getUserInfo/', method: 'GET' }); // 这里异步请求数据 const data = res.

Tomcat线程池重复使用,threadloacl使用不释放问题

Threadlocal为每个使用该变量的线程提供独立的变量副本。 2023-01-30 这天有一个线程用完参数之后 没有关闭 结果到了第二天又到了使用这个线程,然后threaloacl携带副本变量没关闭 ,导致bug 最终定位问题,有个地方没释放 总结: 使用线程池或有复用线程时,复用同一个线程时,每次请求结束后ThreadLoca的值l没有清空,导致第二次使用时ThreadLocal的变量还是上次遗留一下的变量,以致处理逻辑错误。 tomcat默认使用线程池,线程池中的线程是可以被复用的。所以用完之后一定要释放当前threadloacl线程。

python自定义类解包功能

class ApiCodeMsg: def __init__(self, code: int, message: str): super().__init__() self.code = code self.message = message def __iter__(self): yield self.code yield self.message def keys(self): return 'code', 'message' def __getitem__(self, item): if item == 'code': return self.code elif item == 'message': return self.message else: raise KeyError(item) OPEN_API_ACCOUNT_SECRET_ERROR = ApiCodeMsg(code=1001, message='授权密钥串错误') if __name__ == '__main__': print(*OPEN_API_ACCOUNT_SECRET_ERROR) # 1001 授权密钥串错误 需要实现 __iter__ print({**OPEN_API_ACCOUNT_SECRET_ERROR}) # {'code': 1001, 'message': '授权密钥串错误'} 需要实现 keys,__getitem__

[Android Studio] Android Studio设置杂项

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目录 💻如何使模拟的终端设备以悬浮的形式呈现 💻关于instant run 💻instant run的设置 💻instant run的查看 💻鼠标拖动可以改变界面的代码大小 💻解决Android虚拟机启动时System UI isn‘t responding错误 🚩结尾 💻如何使模拟的终端设备以悬浮的形式呈现 Android studio模拟器设置悬浮 💻关于instant run 传统情况下,我们修改程序后重新运行一次程序需要经历 代码重新编译 -> 停止程序 -> 重新安装 -> 重新启动 这样一个过程,而Instant Run则尝试只将程序变更的部分部署到手机上,尽量避免重新安装或重新启动程序,以此大大提升调试程序的效率。 🎯热拔插:代码改变被应用、投射到APP上,不需要重启应用,不需要重建当前activity。 场景:适用于多数的简单改变(包括一些方法实现的修改,或者变量值修改) 🎯温拔插:activity需要被重启才能看到所需更改。 场景:典型的情况是代码修改涉及到了资源文件,即resources。 🎯冷拔插:app需要被重启(但是仍然不需要重新安装) 场景:任何涉及结构性变化的,比如:修改了继承规则、修改了方法签名等。 当我们第一次运行程序之后,Android Studio中的运行按钮会变成这个样子: 可以看到,运行的三角形旁边多了一个闪电符号,这就说明现在可以使用Instant Run了。 (5条消息) Android Studio新功能解析,你真的了解Instant Run吗?_guolin的博客-CSDN博客https://blog.csdn.net/guolin_blog/article/details/51271369 💻instant run的设置 当通过Android Studio向真机或者虚拟机中部署程序时,有时会弹出Installation failed with message Failed to commit install session...错误,如图所示。 该功能在Android Studio中是默认开启的,在初次调用地图资源时如果失败可以先将这个功能关闭掉再尝试程序能否顺利发布在真机上。 💻instant run的查看 Instant Run(立即运行)运行机制,大大提高了应用程序从编译,到运行的速度, 它能在不重启应用程序的情况下,把代码修改直接运行 但有时候也会造成一些莫名其妙的BUG,有时候我们就需要关闭这个功能。 💻鼠标拖动可以改变界面的代码大小 💻解决Android虚拟机启动时System UI isn‘t responding错误 这种情况大多是虚拟机跑了太多的程序后,一些程序出现了问题(一般不正常关闭导致的),导致虚拟机频繁报错。

Python自动化小技巧14——自动批量发送邮件(带各种附件)

案例背景 我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的,每次输入评论者的邮箱,然后打开数据所在的文件夹,上传,填写标题正文,发送....... 一模一样的流程,所以这种重复性的劳动肯定要用Python来解决了。 准备 这次代码主要依赖email库,这个库应该不用下载,Python自带。 当然想要你的邮箱能被代码运行,首先你得准备配置一下你的邮箱。 例如QQ邮箱,打开设置: 然后找到账户页面下的SMTP服务 把pop3/SMTP这个服务打开。 当然还需要手机短信验证啥的,不过应该不难。 开了服务后会得到一个类似于密码一样的一串字母,这是授权码,在代码里面你得输入才能登陆到邮箱上去。 代码实现 这里导包,然后输入自己的邮箱,要发的人的邮箱,可以是列表,就实现了群发: import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.application import MIMEApplication from email.header import Header fromaddr = '22********@qq.com' password = '********' toaddrs = ['2717*****6@qq.com', '22******61@qq.com'] content = '可以的麻烦点赞关注一下,谢谢啦.' textApart = MIMEText(content) k=7 kind_d={1:'二手车',2:'网飞影视',3:'天气聚类',4:'经济增长',5:'外卖文本分类',6:'文本十分类',7:'泰坦尼克号'} kind=kind_d[k] 我把我的邮箱和密码都*号打码了 ,要用的输入你们自己的邮箱(fromaddr)和授权码(password),还有接受目标的邮箱(toaddrs)就行。 content是邮件正文,字符串,可以自己改。 至于下面的k=7,kind_d字典, kind,这是我用来选择发哪些附件的变量选择....有的人评价要二手车数据,有的评论要网飞影视数据.....我赋值k就改变了kind,然后对kind进行条件判断,来选择我要发送的附件: if kind=='二手车': File = 'D:\\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件1:估价训练数据.txt' Apart = MIMEApplication(open(File, 'rb').read()) Apart.add_header('Content-Disposition', 'attachment', filename='附件1:估价训练数据.txt') File1 = 'D:\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件2:估价验证数据.

软件工程期末复习题

复习题 1 (一)填空题 1.软件与物质产品有很大的区别,软件是一种_______产品,不具有具体的物理实体形态特性。 2.开发软件需要付出的高成本和软件产品的低质量之间有着尖锐的矛盾,这种现象叫作_______。 3.软件工程是一门综合性交叉学科,计算机科学着重于理论和原理,软件工程着重于__________。 4.软件工程过程主要包括__________、、、四个过程。 5.现代软件工程主要指面向对象的软件工程,是面向对象方法学的基本单位。 6.开发软件工具的主要目的是为了提高软件生产率和改善。 7.软件开发环境的主要组成成分是。 8.是为创造一种产品、服务或者结果而进行的临时性的努力。 9.项目管理的三约束包括、、。 10.配置管理的对象是配置项,文档就是一种最基本的配置项,配置管理对软件系统主要包含的__________、、三种文档进行管理。 11.进度管理中估计活动所需时间可以使用三时间估计法,即、和正常时间的加权平均值。 12.制定进度计划时通常使用甘特图和里程碑图作为工具。其中,可以展示各个活动的起止时间、项目的关键路径;可以展示项目的重要时间节点。 13.软件开发项目中最主要的三种风险是、、。 (二)选择题 1.软件按照功能可以划分为系统软件、支撑软件和应用软件三类,win10操作系统属于( )软件。 A、系统软件 B、支撑软件 C、应用软件 D、以上都不是 2.下列所述不是软件的特点的是( )。 A、软件是有形的 B、软件不存在磨损和消耗问题 C、软件开发成本高 D、软件没有明显的制作过程 3.以下( )不是软件危机的表现形式。 A、开发的软件不满足用户需求 B、开发的软件可维护性差 C、开发的软件价格便宜 D、开发的软件可靠性差 4.软件工程的出现主要是由于( )。 A、程序设计方法学的影响 B、其他工程科学的影响 C、软件危机的出现 D、计算机的发展 5.以下关于软件工程基本原理的说法错误的是( )。 A、应将软件生命周期划分为若干个阶段并相应地制定计划 B、应在编程结束后进行质量保证工作 C、软件开发过程中如果需求发生改变,必须评审通过后才能实施修改 D、软件开发人员不是越多越好,而应少而精 6.下面哪个不是软件工程的基本思想( )。 A、抽象 B、分解 C、组合 D、复用 7.现代软件工程主要指的是( )的软件工程。 A、面向过程 B、模块化 C、面向对象 D、面向产品 8.软件工程方法学的目的是:使软件生产规范化和工程化,而软件工程方法得以实施的主要保证是( )。 A、 硬件环境 B、软件开发的环境 C、软件开发工具和软件开发的环境 D、开发人员的素质 9.在软件开发中,需求分析阶段可以使用的工具是( )。 A、N-S图 B、DFD图(数据流图)

为什么越来越多的网工运维转行网络安全?

最近越来越多的网工运维小伙伴都在吐槽:干网工、运维多年,薪资还是5.6K,技术也遇瓶颈上不去,考虑转岗或者转行。其中大部分的网工运维小伙伴们纷纷瞄准了高薪高前景的网络安全工程师岗位 网络安全是怎样的岗位? 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万! 2、人才缺口大,就业机会多 2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全 国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。 行业发展空间大,岗位非常多 网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员… 职业增值潜力大 网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。 随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。 从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。 如何入门学习网络安全 零基础入门 对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。 同时每个成长路线对应的板块都有配套的视频提供: 因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取 CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享 视频配套资料&国内外网安书籍、文档&工具 当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。 因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取 CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

Ant Design Vue 之a-tree-select

Ant Design Vue 是比较流行的vue框架之一,主要是展示a-tree-select 的简单用法,a-tree-select组件主要用于展示树结构的选择。 <template> <a-spin :spinning="confirmLoading"> <a-form :form="form"> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="物品名称"> <a-input placeholder="请输入物品名称" v-decorator="['goodsName', {}]" /> </a-form-item> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="物品类型"> <a-tree-select style="width:100%" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :treeData="goodsTypeList" :replaceFields="{label: 'name', key: 'val',value: 'val' }" show-search treeDefaultExpandAll tree-node-filter-prop="title" placeholder="请选择物品类型" :getPopupContainer="(node) => node.parentNode" v-decorator.trim="[ 'goodsType', validatorRules.required]"> </a-tree-select> </a-form-item> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="物品品相"> <a-input-number v-decorator="[ 'goodsPx', {}]" /> </a-form-item> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="物品原价"> <a-input-number v-decorator="[ 'originalPrice', {}]" /> </a-form-item> <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="

flask 使用cnd导入bootstrap5

HTML文件使用href导入,别再用url_for转化地址导入了 <link href="https://cdn.staticfile.org/twitter-bootstrap/5.1.3/css/bootstrap.min.css" rel="stylesheet"> app文件 from flask import Flask, request, render_template from flask_bootstrap import Bootstrap bs5 = Bootstrap() bs5.init_app(app) app.extensions['bootstrap']['cdns'] = "https://cdn.staticfile.org/twitter-bootstrap/5.1.3/css/bootstrap.min.css" 先用bs5.init_app()为app加载bs5拓展,然后使用app bs5拓展设置cdn 具体详情见官方文档:CDN 支持 — Flask-Bootstrap 3.3.7.1.dev1 文档 (flask-bootstrap-zh.readthedocs.io)

html5新特性有哪些?

一省:HTML 1. html5新特性有哪些? 新增语义化标签:header、nav、aside、article、section、footer拖放属性:drag/drop.拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。音/视频标签:audio/video画布(Canvas): HTML5 <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形。你可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。 例如: 可缩放矢量图形(SVG): SVG 指可伸缩矢量图形 (Scalable Vector Graphics)SVG 用于定义用于网络的基于矢量的图形SVG 使用 XML 格式定义图形SVG 图像在放大或改变尺寸的情况下其图形质量不会有损失SVG 是万维网联盟的标准 Canvas和SVG的区别? CanvasSVG依赖分辨率不依赖分辨率不支持事件处理器支持事件处理器弱的文本渲染能力最适合带有大型渲染区域的应用程序(比如谷歌地图)能够以 .png 或 .jpg 格式保存结果图像复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)最适合图像密集型的游戏,其中的许多对象会被频繁重绘不适合游戏应用 地理定位(Geolocation): HTML5 Geolocation API 用于获得用户的地理位置。 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。 web存储(localStorage/sessionStorage):HTML5 web 存储,一个比 cookie 更好的本地存储方式。客户端存储数据的两个对象为: localStorage: 用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去除。sessionStorage: 用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据。 二省: CSS 1. css3新特性有哪些? 颜色: 新增了新的颜色表示方式rgba与hsla边框: 圆角(border-radius)、盒阴影(box-shadow)、边框图片(border-image)背景: 背景图(background-image)、背景图大小(background-size)、背景图位置区域(background-origin)、背景裁剪属性(background-clip)渐变: 线性渐变(linear-gradient)、径向渐变(radial-gradient)文本效果: 文字阴影(text-shadow)、文本溢出(text-overflow)、长文本换行(text-wrap)2D转换: translate(平移)、rotate(顺时针旋转)、scale(缩放)3D转换: rotateX()方法,围绕其在一个给定度数X轴旋转的元素;rotateY()方法,围绕其在一个给定度数Y轴旋转的元素。过渡: transition 可实现属性的渐变动画: @keyframes 规则内指定一个 CSS 样式和动画将逐步从目前的样式更改为新的样式。多列: column-count 属性指定了需要分割的列数、column-gap 属性指定了列与列间的间隙、column-rule-style 属性指定了列与列间的边框样式、column-rule-width 属性指定了两列的边框厚度、column-rule-color 属性指定了两列的边框颜色、column-width 属性指定了列的宽度。弹性盒子:flex布局媒体查询:@media 三省:JavaSCript 1.

Visual Studio 2015配置OpenCV4.5.3(c++版)

学习目标 学会在Visual Studio 2015部署Opencv 一个简单的C++ Opencv实例 一、 Visual Studio 2015配置Opencv4.5.3 1.1 Visual Studio 2015 网上关于Visual Studio 2015的下载,也有很多介绍。大家自行搜索安装。 1.2 OpenCV OpenCV大家根据需求下载相应版本,官网地址https://opencv.org/releases/,下载后是opencv-4.5.3-vc14_vc15.exe的应用程序,双击后解压,如下图。 1.3 opencv环境变量配置 1. 控制面板 -->系统 -->高级系统设置 (或者右击此电脑–>属性–> 高级系统设置) 2. 环境变量 --> 系统变量中选择Path --> 编辑 -->新建。 将下载安装好的opencv文件夹打开,一直打开到D:\Opencv4.5.3\opencv\build\x64\vc15\bin目录,将该路径添加进去 --> 确定(每一步确定都要点)。 1.4 Visual Studio 2015配置Opencv 1. 打开Visual Studio 2015 --> 新建 --> 空项目。 2. 打开视图–> 其他窗口 --> 属性管理器。 3. 选择Debug | x64 --> 右击选择属性 。 4. 选择VC++目录中的包含目录 --> 编辑-- > 将安装路径中: D:\Opencv4.5.3\opencv\build\include

JavaScript未来发展前景

JavaScript一直以来都是一门流行的脚本语言,它可以帮助开发者快速地构建动态网站和应用。 随着Web 2.0的出现,JavaScript也发生了很大的变化,加入了许多新的特性,并且更加易于使用。在未来,JavaScript将更加发展高效和灵活的特性,提高工作效率和降低开发成本。此外,它也会发展出更多新的功能,比如便捷地实现视觉交互和图形设计,或者移动应用的开发等。另外,还可以利用Node.js等新的技术将JavaScript扩展到服务器,为开发者提供更多的自由度,让更多的开发者参与到JavaScript的发展中来。 将来,JavaScript将发展成一门多范式的编程语言,它不仅能支持Web端的应用开发,还能支持跨平台的移动应用开发。 另外,在泛微软家族的技术生态中,JavaScript可以在Windows、Mac、iOS、Android等设备上,共享一套代码实现应用的开发,真正实现跨终端的应用开发。此外,由于JavaScript统一所有设备环境,开发者可以更专注于应用逻辑和数据处理,而不用花费大量时间去学习各种不同终端设备和技术环境,从而降低开发成本。同时,JavaScript也可以利用其特有的协程和异步编程,帮助开发者更好地实现多核处理,从而提高应用的性能。

【数据结构】——零基础如何设计一个链表?(设计链表)

本文主题:通过一道题目,学习链表的基本操作 更多算法:动态规划 ✔️ 边界控制 我的主页:蓝色学者的主页 文章目录 一、前言二、题目信息三、解决方案3.0什么是链表?3.1节点的概念虚拟头节点 3.2链表创建3.3头插/尾插3.4在给定位置前插入3.5删除给定位置节点3.6删除链表 四、完整参考代码五、结语 一、前言 大家好久不见,今天学者想给大家分享一道题目,通过这道题目我们会学习链表的常规操作,只要熟练掌握这道题目,我们就掌握了链表的基本操作,一起来看看吧! 二、题目信息 点我做题:设计链表 本题题目描述复杂,在这里简单描述一下题目要求实现的功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。ListFree() //C语言和C++需要手动销毁内存 这道题目说白了就是让我们设计一个链表,能够完成链表的基础操作即可! 三、解决方案 3.0什么是链表? 要创建一个链表,我们就要知道什么是链表,链表功能与顺序表(数组)相同,都是用来存储数据的表,与顺序表(数组)不同的是,链表的地址空间并不连续,如图: 我们把这种物理存储单元上非连续、非顺序的存储结构叫做链表 3.1节点的概念 要实现上述功能,我们需要有一个结构体实现,这个结构体有两点要求 数据域指针域(指向下一个节点) 通过这样的方式,将整个链表串联在一起,以C/C++的结构体为例: typedef struct mylinkedList{ int val;//数据域 struct mylinkedList* next;//指针域 } MyLinkedList; 虚拟头节点 在链表增删查改的过程中,常常有一些极端的情况需要单独处理,比如增加一个元素、删除一个元素这种情况,因此我们选择使用虚拟头节点(dummynode)来使操作统一,这样也更加简洁。 ❕重要 与数组种零号下标就是第一个元素相同,上图中第一个有效节点是零号下标,接下来题目讲解也默认从零号下标开始 3.2链表创建 链表创建就是让我们返回一个节点,这个节点就代表了这个链表,我们顺便实现一个获取节点的函数getNodo() 后续操作都会使用到。 //创建一个节点 MyLinkedList* getNode() { MyLinkedList* Node = (MyLinkedList*)malloc(sizeof(MyLinkedList)); Node->val = 0; Node->next = NULL; return Node; } //创建头节点并返回 MyLinkedList* myLinkedListCreate() { MyLinkedList* dummyNode = getNode(); _size = 0;//可以设置为全局变量,也可以在对象里设置 return dummyNode; } 3.

(亲自实践)python OpenCV已经安装但是import cv2的方法不能用

最近在学习验证码图片识别,安装完pip install opencv-python之后,发现导入的方法命令有底纹。 解决方案如下: 找到安装python的路径,安装完opencv-python后,在site-packages下会有cv2的文件夹, 将cv2文件夹下后缀名pyd的文件复制到site-packages下,复制复制复制哦。如下图 就没有那样的底纹颜色了。 

【R语言】2022年末特辑——ggsci包色版最详分享

目录 一、前言二、官方教程2.1 NPG2.2 AAAS2.3 NEJM2.4 Lancet2.5 JAMA2.6 JCO2.7 UCSCGB2.8 d32.9 locuszoom2.10 igv2.11 uchicago2.12 startrek2.13 tron2.14 futurama2.15 rickandmorty2.16 simpsons2.17 gsea2.18 material 三、讨论 一、前言 部分新手直接化用代码跑出来的图很多都是典型红蓝分组或者黄绿,可视化图第一目的是反馈数据信息,再者第二目的是让人看的明白看的舒服,ggsci很好的针对于可视化时的颜色问题。 这是ggsci包官网里面的一句话: My eyes were finally opened and I understood nature. I learned at the same time to love it. — Claude Monet 二、官方教程 ggsci的调色板常用的来自于期刊,可视化数据库,电影电视节目等(并非全部都是期刊,上次一位学生逮着问辛普森是什么期刊)。每个调色板是有颜色可修改线框或填充颜色: scale_color_palname() scale_fill_palname() NameScalesPalette TypesPalette GeneratorNPGscale_color_npg() scale_fill_npg()“nrc”pal_npg()AAASscale_color_aaas() scale_fill_aaas()“default”pal_aaas()NEJMscale_color_nejm() scale_fill_nejm()“default”pal_nejm()Lancetscale_color_lancet() scale_fill_lancet()“lanonc”pal_lancet()JAMAscale_color_jama() scale_fill_jama()“default”pal_jama()JCOscale_color_jco() scale_fill_jco()“default”pal_jco()UCSCGBscale_color_ucscgb() scale_fill_ucscgb()“default”pal_ucscgb()D3scale_color_d3() scale_fill_d3()“category10” “category20” “category20b” “category20c”pal_d3()LocusZoomscale_color_locuszoom() scale_fill_locuszoom()“default”pal_locuszoom()IGVscale_color_igv() scale_fill_igv()“default” “alternating”pal_igv()UChicagoscale_color_uchicago() scale_fill_uchicago()“default” “light” “dark”pal_uchicago()Star Trekscale_color_startrek() scale_fill_startrek()“uniform”pal_startrek()Tron Legacyscale_color_tron() scale_fill_tron()“legacy”pal_tron()Futuramascale_color_futurama() scale_fill_futurama()“planetexpress”pal_futurama()Rick and Mortyscale_color_rickandmorty() scale_fill_rickandmorty()“schwifty”pal_rickandmorty()The Simpsonsscale_color_simpsons() scale_fill_simpsons()“springfield”pal_simpsons()GSEAscale_color_gsea()scale_fill_gsea() “default”pal_gsea()Material Designscale_color_material() scale_fill_material()“red” “pink” “purple” “deep-purple” “indigo” “blue” “light-blue” “cyan” “teal” “green” “light-green” “lime” “yellow” “amber” “orange” “deep-orange” “brown” “grey” “blue-grey”pal_material() #展示颜色 install.