实现流光边框一般是用渐变背景加动画实现,然后使用内部盒子遮挡内部空间,达到边框流光的效果
思路:背景渐变+旋转动画
功能:
自定义渐变(是否渐变<不渐变没有流光效果>,渐变颜色,渐变角度,渐变宽度)自定义动画时间 1 基础实现 <template> <Box> 测试 </Box> </template> <script setup lang="ts"> import Box from "./Box.vue"; </script> <style scoped></style> <template> <div class="box"> <div class="content"> <slot></slot> </div> </div> </template> <script setup lang="ts"></script> <style scoped lang="scss"> .box { display: flex; justify-content: center; align-items: center; text-align: center; position: relative; width: 100%; height: 100%; padding: 5px; border-radius: 10px; overflow: hidden; &:before { content: ""; background-image: linear-gradient(120deg, #5ddcff, #3c67e3 40%, #4e00c2); position: absolute; z-index: 0; padding-left: 130%; padding-bottom: 130%; animation: rotate 8s linear infinite; } .
文章目录 Intro解压配置使用等官方配置文件模板redis.conf 仅配置项redis.conf 完整版(配置项+注释)sentinel.conf 仅配置项sentinel.conf 完整版(配置项+注释) Intro 在下载页面:https://redis.io/download/ 下载最新版本的redis: https://github.com/redis/redis/archive/7.2.3.tar.gz
解压配置使用等 见 Ubuntu redis 下载解压配置使用及密码管理 && 包管理工具联网安装
当启动 redis-server 时,默认会读取的配置文件是:/path/to/redis.conf ,见:
那么我们可配置的配置项都有哪些呢?在下载的redis源码目录下其实有两个配置模板:
官方配置文件模板 redis.conf 仅配置项 ################################## INCLUDES ################################### ################################## MODULES ##################################### ################################## NETWORK ##################################### bind 127.0.0.1 -::1 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 ################################# TLS/SSL ##################################### ################################# GENERAL ##################################### daemonize no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo no set-proc-title yes proc-title-template "{title} {listen-addr} {server-mode}"
新手Pycharm使用 文章目录 新手Pycharm使用前言一、环境搭建常用conda 指令总结: 二、Pycharm快捷键三、高亮自定义四、批量保存网络&图片五、print 输出到txt 前言 新手初次使用pycharm,记录一些包括 环境搭建/快捷键/高亮自定义/批量保存网络&图片 的方法
省略安装步骤,为环境管理方便建议安装anaconda。
Conda允许你创建相互隔离的独立环境,这些环境被称之为虚拟环境(Virtual Environment),这些环境各自包含属于自己的文件、包以及他们的依存关系,并且不会相互干扰。
Anaconda有一个缺省的名为base的环境, 但是不建议把程序放在base环境中,应该创建不同的虚拟环境分别管理不同的开发项目。尽量达到每个项目单独一个虚拟环境,因为后面使用pyinstaller打包的项目成为可执行文件的时候,会打包环境里所有安装的包,该环境下每个包都是我们项目用到才安装的,非常干净,这样会加快文件的运行速度也减小文件的大小,,便于我们管理和维护!
参考这篇文章:
安装Anaconda
一、环境搭建 根据需要选择开发的python版本,提前下载安装python 点击前往官网下载
在terminal 输入
conda create -n env_name python=3.10 这表示创建python版本为3.10、名字为env_name的虚拟环境。创建后,env_name文件可以在Anaconda安装目录envs文件下找到。在不指定python版本时,自动创建基于最新python版本的虚拟环境.
创建成功后激活
conda activate YOURENVNAME 如果忘了刚刚创建的环境名字可以在terminal执行以下指令,会打印出所有存在的虚拟环境, 前面带星号“*“的表示当前活动环境:
conda info -e conda info --envs conda env list 创建好后可以用下面指令检查下对应python版本对不对:
创建好虚拟环境安装好需要的包(pip install packagename),打开工程文件后,为工程文件配置编译环境,file>>setting>>Project>>Python Interpreter
添加我们刚刚创建的虚拟环境
点击OK保存,再次打开就可以看到当前项目interpreter是我们刚刚创建的
常用conda 指令总结: conda --version #查看conda版本 conda config --show #查看conda的环境配置 conda update conda #更新conda conda create --help #查看某条命令的帮助 conda create -n env_name python=3.
二叉搜索树的最小绝对差 关键信息:二叉搜索树表明了树有序的!遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def getMinimumDifference(self, root: Optional[TreeNode]) -> int: # 使用迭代法 if not root: return stack = [] result = [] while root or stack: if root: stack.append(root) root = root.left else: node = stack.pop(-1) result.append(node.val) root = node.right if len(result) < 2: return res = result[1] - result[0] for i in range(2, len(result)): res = min(res, result[i] - result[i - 1]) return res # 使用递归来做 def getMinimumDifference(self, root: Optional[TreeNode]) -> int: result = self.
原因:使用feign调用接口,接收的数据结构必须和报文返回的结构一样。返回报文中data是对象,用string接收会报错。
扩充:jackson进行反序列化时,如果类型参数是JavaType,则使用泛型接收时,泛型需要和报文对应,不能使用string进行统一接收,再做处理。
一、短信登录 1.1 基于Session实现登录流程 发送验证码:
用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号
如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存,然后再通过短信的方式将验证码发送给用户
短信验证码登录、注册:
用户将验证码和手机号进行输入,后台从session中拿到当前验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过检验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库,无论是否存在,都会将信息保存到session中,方便后续获得当前登录信息
校验登录状态:
用户在请求的时候,会从cookie中携带着JsessionId到后台,后台通过JsessionId从session中拿到用户信息,如果没有session信息,则进行拦截,如果有session信息,则将用户信息保存到threadLocal中,并且放行
1.2 实现发送短信验证码功能 页面流程
具体代码如下
贴心小提示:
具体逻辑上文已经分析,我们仅仅只需要按照提示的逻辑写出代码即可。
发送验证码 @Override public Result sendCode(String phone, HttpSession session) { // 1.校验手机号 if (RegexUtils.isPhoneInvalid(phone)) { // 2.如果不符合,返回错误信息 return Result.fail("手机号格式错误!"); } // 3.符合,生成验证码 String code = RandomUtil.randomNumbers(6); // 4.保存验证码到 session session.setAttribute("code",code); // 5.发送验证码 log.debug("发送短信验证码成功,验证码:{}", code); // 返回ok return Result.ok(); } 登录 @Override public Result login(LoginFormDTO loginForm, HttpSession session) { // 1.校验手机号 String phone = loginForm.getPhone(); if (RegexUtils.
今天我的 macBook 升级到了 14.2 Sonoma
对该版本更新细节的官网介绍: https://developer.apple.com/macos/
其他功能先不提,就说下面的语音输入(语言转文字)功能吧:
丝滑流畅,大大增强我的文本输入速度(即使我作为一个程序员,本来的打字速度就不慢)。
之前在PC上的输入过程:
脑子里组织信息;手指敲键盘输入。 以后在PC上的输入过程:
脑子里组织信息;张嘴说出来。(这个过程感觉会唤醒我年幼时学习语言的本能,因为很明显,目前我做不到一遍说过去,整句话不需要调整语序、字词表达) 另:在 Mac 上听写信息和文稿
Generate To Adapt: Aligning Domains using Generative Adversarial Networks 生成适应:使用生成对抗网络对齐域 前言 好久没有更新了,开始记录下来,也好督促自己。记录本人预备研究生阶段相关迁移学习论文的原理阐述以及复现工作。 问题 文章介绍 这篇文章于2018年发表在CVPR,作者是Swami Sankaranarayanan,Yogesh Balaji,Carlos D. Castillo,Rama Chellappa。联合特征空间:通过模型学习到的源域和目标域之间共享的特征表示,在源域和目标域之间有较好的对齐,以便更好的进行迁移。这篇文章的主要贡献是提出了一个能够直接学习联合特征空间的对抗图像生成的无监督领域自适应方法。该方法与之前方法相比的独特之处在于,同时使用了生成式和判别式两种思想,利用图像生成的对抗过程学习一个源域和目标域特征分布最小化的特征空间。提出了一种对抗性图像生成方法,使用源域标记数据和来自目标未标记数据直接学习共享特征嵌入。生成器 G 负责生成类似于源域数据的“假”数据,希望这些数据能够与真实的源域数据相似。鉴别器 D 的任务是辨别生成的数据是真实的还是伪造的。而特征提取器 F 的目标是学习一个能够同时适应源域和目标域的特征表示,使得经过 F 提取的特征能够更好地用于任务,同时也使得生成的数据更加接近真实数据,这样鉴别器就难以将其区分开来。 模型结构 组件作用总论 上图中F是特征提取器,C是分类器,G是生成器,D是鉴别器。F用于提取源域和目标域图像特征,C用于源域数据标签的预测,G用于生成混淆视听的生成数据,D用于鉴别真实数据和生成数据。模型总共分为两个支流: 标签预测网络(源域数据的处理):源域数据经过F得到特征,然后输入到C中进行分类,并计算交叉熵分类损失。生成对抗网络(迁移学习和域适应):G用于生成数据混淆D的鉴别任务。G生成器通过对提取的源域数据特征进行处理(转置卷积,标签为0),产生与源域类似但不完全相同的数据,这些生成的数据被用作迁移学习中的混淆数据,G计算这些源域生成数据投入到D后的域分类损失和标签分类损失;D用于鉴别,区分真实数据和生成数据,它计算三个损失,首先是源域真实数据直接投入到D,计算域分类损失和标签分类损失,然后是G提取到的目标域生成数据投入到D计算的域分类损失。最后是G提取到的源域生成数据投入到D计算的域分类损失。 特征提取器F 源域真实数据分类损失最小化: 使 F 学习到更适合源域真实数据的特征表示
源域生成数据分类损失最小化: 使 F 能够理解并学习到源域生成数据的特征
让D误以为目标域生成数据为真: 使生成的数据更加适应目标域,混淆鉴别器D
源域真实数据标签分类损失:
源域生成数据标签分类损失:
目标域生成数据域分类损失(为了混淆,所以域标签为1):
这些损失函数的设计和优化目的是通过调整特征提取器 F 的参数,使其能够更好地适应源域数据和目标域数据,从而实现更好的域自适应和迁移学习效果,只有直接使用源域数据的源域真实数据域分类损失是与F无关的。
鉴别器D 通过训练判定不同类型数据的真实性和分类信息。这些数据包括源域中的真实数据、生成器G生成的假数据以及目标域生成的假数据。
判定源域生成数据是否假,通过源域生成数据的域分类损失来学习,这些数据的域标签被设定为0(表示假数据)。判定源域真实数据是否真,分类误差最小化——源域真实数据域分类损失(真,域标签为1)+源域真实数据标签分类损失判定目标域生成数据是否假——目标域生成数据域分类损失(假,域标签为0) 生成器G 通过对抗训练与鉴别器D竞争,并促进特征提取器F的学习。
欺骗鉴别器D:让D误以为源域生成数据为真——源域生成数据域分类损失(为了混淆,所以域标签为1)源域生成数据分类误差最小化——源域生成数据标签分类损失 分类器C 源域真实数据分类误差最小化:源域真实数据分类损失(上面提到的鉴别器中的分类损失与分类器C的参数是不共享的,也就是说是两个意义相同但参数不同的分类器,鉴别器中有一个小分类器用于自己使用而不是使用C来计算源域真实数据分类损失)
警告 从上面对特征提取器的介绍可以看出,这篇论文中的各个组件的反向传播是独立的,很多loss都涉及到了F,但是F的反向传播只与上述三个损失有关,其他损失更新参数的时候不会更新F的参数。也就是说我们在写代码设计模型的时候要把上述四个组件分开写,分别进行反向传播。
模型的目标 通过F提取的特征图使源域和目标域的同类数据特征分布越相似,从而提高测试精度。F(src)和F(tar)对G来说是类似的,这意味着参数调整是偏向于使得F(src)和F(tar)相近,这是模型优化的目标。
代码 import torch import torch.nn as nn from torch.
文章目录 简介什么是查询优化器查询优化器的两种优化方式总结参考文献 简介 事务可以让数据库在增删改查的过程中,保证数据的正确性和安全性,而索引可以帮数据库提升数据的查找效率。查询优化器,则是帮助我们获取更高的SQL查询性能。
本节我们将简单过一下查询优化器的原理,主要包括以下几部分:
什么是查询优化器?具体的流程和环节?查询优化器的两种优化方式是什么? 什么是查询优化器 一条SQL语句的执行,一般会经过以下环节,如图:
语法分析:检查SQL拼写和语法是否有问题。
语义检查:检查SQL语句中的访问对象是否存在,即表名、列名啥的;
经过语法分析和语义检查无误之后,就会生成一棵语法分析树,进行优化器优化,生成查询计划。
所以,查询优化器的目标就是找到当前SQL查询的最佳执行计划(或者说查询树),它是由一系列物理操作符组成,这些操作符按照一定的运算关系组成查询的执行计划。
而在查询优化器中,可以分为逻辑优化阶段和物理优化阶段。
逻辑优化,就是通过改变SQL语句的内容来使得查询更加高效,并为物理优化阶段提供更多的候选执行计划。
那逻辑优化是如何改变SQL语句的内容呢?
通常采用的方式是对SQL语句进行等价变换,(基于关系代数)做查询重写。比如说,对条件表达式做等价谓词重写、条件简化,对视图进行重写,对子查询进行优化,对连接语义进行外连接消除、嵌套连接消除等。
逻辑优化中的每一步都对应着物理计算,因此逻辑优化阶段输出若干候选执行计划之后,物理优化阶段会计算这些计划的代价,从中选择代价最小的作为执行计划。
因此逻辑优化属于语法层级的优化,而物理优化实际上是一种依据代价的估算模型,相当于是从连接路径中选择代价最小的路径,因此属于物理层面的优化。
查询优化器的两种优化方式 查询优化器的目的是生成最佳的执行计划,那什么是最佳,如何生成最佳执行计划?通常有两种策略:
基于规则的优化器(RBO,Rule-Based Optimizer)基于代价的优化器(CBO,Cost-Based Optimizer) 什么是基于规则的优化器?
规则就是先验知识,是人们以往的经验,或者是被证明已经是有效的方式。
通过在优化器里嵌入规则,来判断输入的SQL查询符合哪种规则,符合哪种就按照对应的规则来制定执行计划,同时采用启发式规则去掉明显不好的存取路径。
什么是基于代价的优化器?
根据代价评估模型,计算每条候选执行计划的代价,就是cost,优化器会从中选择代价最小的一条执行计划作为最佳执行计划。
相比RBO来说,CBO对数据更加敏感,因为它会利用数据表中的统计信息做判断。针对不同的数据表,相同的查询得到的执行计划可能是不同的(两种优化器的最大差异),因此制定出来的执行计划更符合数据表的实际情况。
而RBO,相同查询的规则是相同的,因此对于不同的数据表,得到的执行计划基本是一样的。
需要注意,在优化器中会存在各种组合的可能。比如说我们需要优化器来制定数据表的扫描方式、连接方式以及连接顺序等。
总结 优化器的两个阶段:逻辑优化阶段和物理优化阶段。
逻辑优化阶段是对查询语句进行重写,并输出多种候选的最佳计划。物理阶段是从多种候选计划里,找出代价最小的计划。
优化器的两种优化方式:基于规则的RBO和基于代价的CBO。
RBO是根据固有的规则来给出执行计划,很简单的一个模型,对于不同表上的相同查询,RBO可能会返回相同的执行计划,但是CBO会考虑表的数据量等条件,返回不同的执行计划。因此CBO更加贴合实际一些。
参考文献 32丨查询优化器是如何工作的?
1.左下角点击扩展图标→点击“设置”
2.常用设置→Tab Size改成 2 即可。
1.点击左下角扩展图标→点击“设置”
2.工作区→文本编辑器→格式化→format on save 打钩
3.看看效果:
加一个数据gender,跟前面的msg、age不对齐
Ctrl+S保存后,自动对齐了
近日,全球IPv6论坛联合中国的下一代互联网国家工程中心面向全球发布《2023全球IPv6支持度白皮书》。白皮书显示,在过去一年,全球IPv6支持度大幅提升,部署应用成效显著。全球IPv6部署率超过40%的国家数量同比增长了30%,全球IPv6用户数普遍提升,其中中国用户数快速增长位列全球首位,美国、巴西等国家IPv6用户数增加超千万。
在域名系统方面,截至2023年10月,在全球1462个顶级域中,有1442个支持IPv6,占总量的98.6%,有1437个权威服务器支持IPv6,占总量的 98.3%。
在网站支持方面,2023年全球互联网服务支持度大幅提升,尤其是网站IPv6支持情况提升明显,排名前10000的网站IPv6支持率首次超过50%,这一数据在2021年只有36%。
在软件方面,主机端常用的操作系统、邮件传输客户端、程序开发软件、数据库软件、媒体播放软件等基本都已支持IPv6,国际主流的云服务商和CDN提供商也都实现了对IPv6的支持,互联网服务的IPv6支持能力愈发成为全球化的重要标准。
网络设备方面,支持IPv6的产品种类不断丰富,目前企业交换机数量达到了2044款,企业路由器752款;家庭网关在近两年数量提升明显,达到了364款,无线路由器283款;网络安全产品平均每年也有100余款获得了认证,总量已经超过了850款。
从此次发布的《2023全球IPv6支持度白皮书》数据来看,在国家政策的积极引导下,国内IPv6规模部署和应用取得了比较明显的发展成果,IPv6+的1.0版本技术经过多年耕耘已经基本成熟,并在运营商、政府、金融、交通、教育、医疗等行业得到广泛部署。未来,IPv6技术将向2.0时代演进,更聚焦行业数字化,提升用户的业务体验,提高网络性能和服务质量。
面对IPv6产业快速发展趋势,加快网站及互联网应用生态向IPv6升级,实现IPv4向IPv6的平滑过渡,才能有效应对快速增长的IPv6用户的访问压力,为用户提供更好的网络性能和访问体验,这需要互联网产业链上下游加强合作,积极沟通交流,协同创新,需要网站和互联网应用开发商、网络设备制造商、运营商等各方共同努力,推动IPv6产业的健康发展。
作为中国科学院控股有限公司旗下企业,国科云积极响应国家政策,较早进行IPv6升级改造技术的探索和研发,提供全面的技术支持和解决方案,多年来已为众多省部级国家机关、央企、金融、科研等重点行业客户提供IPv6升级改造和解析服务,为推动IPv6产业快速稳定发展提供了有力支撑。
国科云实施的IPv6改造技术采用了IPv6 DNS域名解析服务+IPv6/IPv4转换代理的方式,与其他过渡技术相比,具备改造周期短、实施难度小、费用成本低等特点,能够满足不同行业用户对IPv6升级改造的要求,实现网站从IPv4向IPv6网络的平滑过渡,顺利通过国家IPv6监测平台审核,有效满足行业发展趋势和国家政策相关要求。
错误原因:引入的库没有使用export default 来导出,而是直接使用export导出一些属性和方法,所以无法使用【import xxx from ''xxx'】
解决方法:通过【import { } from ''xxx'】,
或者,如果想使用全部属性和方法,另一种方式就是通过【import * as 别名 from 'xxx'】,通过别名就可以访问了。
MySQL篇 MySQL为什么使用B+树索引 B树每个节点可以包含关键字和对应的指针,即B树的每个节点都会存储数据,随机访问比较友好,B树的叶子节点之间是无指针相连接的
B+树所有关键字都存储在叶子节点上,非叶子节点只存储索引列和指向子节点的指针,叶子节点通过指针连接形成有序双向链表,顺序访问和范围查询比较友好。叶子节点只存储索引列,假设整行数据(关键字)是16KB,索引1KB,那么相对于B树,B+树每个节点就可以存更多的数据,MySQL一次加载是把整个节点的数据全部加载到内存中
回答:
范围查询效率高:B+树的叶子节点形成了有序链表,范围查询效率较高
顺序访问性能高:B+树的叶子节点形成了双向有序链表,查找不需要经过父节点,减少了磁盘IO次数
磁盘IO更少:B+树非叶子节点只存储索引列和指针,所以每次加载数据页(节点)的时候,就能加载更多的数据,减少IO次数
内存友好:B+树的内部节点只包含键值,可以节省内存空间
索引是什么? 回答:
索引是数据库为了加快数据访问速率而创建的额外的数据结构
最左前缀法则
如果索引了多列(联合索引),要遵循最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃了某一列,索引将部分失效(后面的索引失效)。 只要最左边的索引存在就可以走索引,跟sql语句中的位置无关
范围查询
联合索引中,出现范围(>,<),范围查询右侧的列索引失效 要想不失效,在业务允许的范围内,尽量把><替换成>=,<=
索引失效情况 ①在索引列上进行运算操作,索引将会失效
②字符串类型使用时,sql语句没加单引号,索引会失效
③模糊查询,头部模糊匹配的时候,索引将会失效
④or分割开的条件,一个有索引,一个没有索引,则涉及的索引都不会被用到
⑤MySQL评估使用索引比全表扫描更慢,则不适用索引
数据库连接方式 1.内连接:只要两个表中存在匹配的行,两个表中所有字段都会返回
2.左连接:返回左表的所有行以及右表中匹配到的行,右表没有匹配的就返回null
3.右连接:返回右表的所有行以及左表中匹配到的行,左表没有匹配的就返回null
4.全连接:返回左表和右表中的所有行,如果没有匹配返回null
varchar和char varchar可变长度,只占用实际存储的字符的长度
char长度固定,长度未满则补位
datetime和timestamp 相同点:
存储格式相同都为 yyyy-MM-dd HH:mm:ss
不同点:
日期范围不同:datetime是1000-01-01 00:00:00.000000 ~ 9999-12-3123:59:59.999999
timestamp是1970-01-01 00:00:01.000000 ~ 2038-01-09 23:59:59.999999
时区不同:datetime不依赖时区,timestamp依赖时区
默认值不同:datetime默认值为null,timestamp默认值是当前时间
最左前缀法则 最左前缀原则是指在联合索引中只有从最左侧列开始连续使用时,索引才能被有效利用。如果一个查询只用了联合索引中的部分列,只有从索引的最左侧开始连续使用才有效,间隔的后面的列是不走索引的
最左前缀原则不限制查询条件的顺序,但如果查询条件不满足最左前缀原则,就不会走索引
索引覆盖 简单来说,当需要查询的数据列都含于我们创建的联合索引中,在查询过程中只使用索引而不需要回表查询到数据页来获取查询结果,避免额外的磁盘读取操作,提高查询性能
需要注意的是,索引覆盖并不适用于所有的优化方案,当需要返回大量数据列,我们单纯的创建多列的联合索引,那么索引维护成本过高,得不偿失
聚集索引和二级索引 聚集索引B+树最下面的叶子节点挂的是这一行的数据
二级索引B+树最下面的叶子节点挂的是索引列和对应的主键id
Redis篇 Java基础篇 Java 和 C++ 的区别?
目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行的软件测试是针对银行的软件系统(如柜面系统、信贷系统)和银行专用设备(如ATM机、自助柜员机等)进行的一系列测试工作。
1、银行测试人员的组成
目前银行测试人员分为行方人员和非行方人员(外包)。
银行测试的主要执行人为非行方人员,其主要任务为分析需求、设计用例、执行用例、缺陷跟踪复测。行方人员主要角色为管理层,把控项目进度以及上线时间并处理线上的一些问题。
2、银行测试的侧重点
因为银行的软件系统一般都是以业务为主体,所以测试的时候要特别关注整个系统的业务流程是否是顺畅的、无阻碍的。
例1::
A银行的柜面系统刚刚完成改造,我们回去验证这个新柜面系统的一些基本业务是否能够正常进行,比如开户流程、存取款流程。
例2::
B银行的信贷系统刚刚建立,我们回去验证这个信贷系统是否可以走完整贷前、贷中、贷后等业务流程,测试人员还要检验信贷系统和核心、风控等系统的对接是否正常来确保被测系统和与之有关联的系统之间的业务不阻塞,也确保系统与系统之间不会因为一些异常的操作和请求导致出现错误。
通过以上举例可以表明,银行的各个系统不是孤立的,是有业务联系的,因此测试时不仅要关注系统本身的功能也要关注业务流程和系统与系统之间的关联。
3、 银行测试类别划分
1)功能测试
验证银行某系统的某个功能模块是否可以正常工作。
比如网银系统中的转账模块,就要通过转账操作来测试该模块功能是否正常。
2)业务测试
验证业务系统的功能是否正确实现,测试其业务处理的准确性。
3)业务流程测试
业务流程的测试,为了保证业务能正常开展,在上线前要对整个业务流程进行详细的测试工作。
比如一个网贷业务系统,网贷是线上贷款系统,借款人可以通过贷款平台的手机APP直接在线进行贷款申请、借款、还款等操作、方便快捷,因此由银行(行方)出资贷款平台(平台方)负责吸收客户的网贷系统应运而生。
一般网贷涉及的系统会有平台方系统、渠道系统(行方提供的对外连接渠道,有加密、转译等功能)、网贷业务系统、核心系统、风控系统等。
以网贷的借款流程为例:
用授信申请通过的客户信息从平台方发送借款申请,申请经由渠道系统到达业务系统,再由业务系统发送到风控审核,风控将审核结果返回给业务系统(比如申请通过的结果),再由业务系统调用核心系统进行放款,核心放款成功,业务系统将放款结果经由渠道系统发送至平台方。
通过以上业务流程可以看出银行测试不是单方面的验证某一个系统的功能,而是根据业务规则对整个业务涉及到的系统都会做一个全流程的测试。
4)客户端测试
客户端主要针对的是软件界面功能的测试,根据功能划分一般涉及以下几类:
系统管理类系统管理主要包括系统参数管理、用户管理、角色管理、权限分配等,测试也包含相应的业务逻辑及页面测试,如查询功能的测试、显示风格、验证客户端页面显示数据是否正确等。
数据查询类主要验证数据查询结果客户端显示是否正确。
其它涉及业务操作的功能界面主要针对客户端界面的录入、查询等功能进行测试。
客户端测试还会对界面的友好性、提示信息的合理性等进行测试。
5)接口测试
对于银行来说,通常行内系统和与银行外对接的系统是独立开发的,行内与行外系统采用的数据库、通讯协议等都可能存在差异;
并且对于银行来说,还可能存在多个系统,如:网上银行、ACE/柜面、电话银行、呼叫中心、信贷、资产托管、资金风险监控分析系统等。
并且各个系统之间可能关联特别紧密,存在许多交互;因此,在测试中会涉及到相关系统接口的测试,这时通常需要构造对接系统的测试环境、数据、业务等来模拟对接系统。
接口测试一般在功能测试阶段完成,功能测试计划中应包含接口测试。
6)数据移植测试
对于银行来说,软件产品经常存在更新换代或升级的情况,新系统的运行环境和旧系统可能不一致。
因此,为了保证系统的顺利运行,在新系统研发出来,准备上线之前,需要把原来旧系统的客户历史数据移植过来,这就涉及到了数据移植问题。
数据移植并不是简单的数据迁移,因为新旧系统之间数据字典是不同的,为了保证移植结果的正确性,需要对新旧数据库的数据进行比对,通常可以通过人工方法或开发比对工具进行比对。
数据移植测试往往需要测试人员有足够的耐心,能仔细进行比对,发现存在的问题。数据移植测试一般在功能测试阶段完成,功能测试计划中应包含数据移植的测试。
7)性能测试
性能测试的目的主要是验证业务系统是否满足业务需求的多用户并发操作,是否满足业务性能需求,评估压力解除后的自恢复能力,测试系统性能极限。
在性能测试过程中,通过性能测试工具来模拟与真实环境接近的情况,如通过测试程序在同一时间内或某一段时间内,向系统发送预期数量的交易请求、测试系统在不同压力情况下的效率,获得一定的参数(如:(如内存、CPU、缓存、系统响应时间、最大吞吐率、事务平均处理时间),以及系统可以承受的压力情况,进行针对性的测试与结果分析,找到影响系统性能的瓶颈,以便对系统进行优化。
8)安全性测试
安全性测试目的主要是评估业务系统在网络安全、主机安全、应用安全、数据安全、运行维护安全、电子认证安全、业务连续性等方面的能力及管理措施,评价其业务系统的安全防控和安全管理水平。
对于金融行业软件来说,安全性有着重大的意思。
通常用的安全性检查手段及检查点如:跨站攻击、弱点攻击、管理界面泄露、敏感信息泄露、跨站点请求伪造、恶意上传等。
9)风险监控测试
主要目的是评估业务系统的风险监控、预警和管理措施,测试其业务系统异常交易、大额交易、非法卡号交易、密码错误交易等风险的监测和防范能力以及系统资源占用的监控。
风险监控测试一般在功能测试阶段或性能测试阶段完成,功能测试或性能测试计划中应包含风险监控的测试。
10)文档审核
目的主要是验证业务系统的用户文档、开发文档、管理文档等是否完整、有效、一致,是否符合相关标准并遵从更新控制和配置管理的要求。
文档审核最基本的原则是软件实现必须按照用户需求文档来进行设计和实现。
11)自动化测试
现阶段实施的自动化测试与手工测试相比较,就是采用程序模拟手工测试的过程。在自动化测试过程中,原来由手工控制的操作,现在由程序来控制,不再进行手工干预。
自动化测试主要用于功能测试,测试过程包括脚本的录制、编写及回放。
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图 一、Python编程入门到精通 二、接口自动化项目实战 三、Web自动化项目实战 四、App自动化项目实战 五、一线大厂简历 六、测试开发DevOps体系 七、常用自动化测试工具 八、JMeter性能测试 九、总结(尾部小惊喜) 即使面临黑暗与困苦,也要坚信曙光在前方。让我们以勇气为剑,信念为盾,勇往直前地在奋斗之路披荆斩棘,因为每一次的拼搏都是对潜力的挖掘,对梦想的追逐。
1.本课题的研究目的和意义:
随着计算机技术在各行各业广泛并深入应用,网络在各行各业的发展中占据了重要的地位,而现在的商品宣传已经不仅仅局限于电视和报纸,网络已然成为了商家展示自己商品的一大途径,通过电商网站,来实现商品的宣传与网上购物,而且电商网站改变了原有的经营方式的同时,也给商家带来了更高的利润,另外如果能实现网上交易将大大提高交易速度节约交易成本。能够及时的、准确的提高工作效率,取得经济效益和社会效益。所以,对商家来说,通过电商网站来盈利至关重要。
随着网络游戏产业盈利模式的完善与获利思路的改变,免费网络游戏开始猛烈地冲击传统收费游戏 所谓免费网络游戏 , 即摒弃原有的计时收费模式 , 让玩家可以永久免费进行游戏 , 从而吸引更广泛的客户群体 , 游戏厂商则通过增殖服务收费 。这一模式也被业界称为IB模式(Item Billing,即道具销售)。
而一个游戏商城能够让用户以及商家提供一个渠道,例如最近很火的一款国外的游戏平台(STEAM游戏平台),既能通过出售正版游戏和游戏道具盈利,又能让用户更方便,更优惠地购买游戏以及游戏道具,同时能在谈论区中相互交流对游戏的体验。而商家则多了一个销售自己商品的平台,也能在讨论区中了解买家对哪些商品更需要,因此,一个游戏商城能极大地满足了玩家与商家的需求。
【579】基于SSM springboot框架的游戏商城平台源码论文开题报告任务书
本课题的文献综述(不少于1500字) 据艾瑞咨询《2011-2012年中国电子商务行业年度监测报告》显示,2011年中国电子商务市场交易规模为6.3万亿元,年增长32.4%,在GDP总额47.2万亿中占比13.4%。另据咨询机构IDC(国际数据公司)与阿里巴巴集团研究中心公布的数据显示,2011年中国网民在线购物交易额达到7849.3亿元,比2010年增长了66%,远远超过同期中国社会消费品零售总额实际增长率11.6%。可见,中国电子商务显示出了巨大的发展潜力,正成为经济发展的"助推器"。而最近,国外调研机构Newzoo的调研显示,中国是全球最大的移动电竞市场。据《中国游戏产业报告(2017年1月至6月)》显示,2017年上半年,中国电子竞技游戏市场实际销售收入达到359.9亿元,同比增长43.2%,占中国游戏市场实际销售收入的36.1%;其中,移动电子竞技游戏市场实际销售收入达到176.5亿元,同比增长100.6%,占移动游戏市场实际销售收入31.4%。
随着全球互联网的发展以及电脑、智能手机、平板电脑等电子设备的更新换代,网络游戏载体、类型不断丰富,游戏品质不断提高,各细分游戏类型均有庞大的受众群体,全球游戏市场迅速崛起,市场规模逐步扩大。网络游戏和移动游戏的营业收入开始呈现爆炸式增长;移动游戏顺应了游戏用户对碎片化时间、移动化场所的娱乐需求,市场占有率持续上升,成为网络游戏行业增长的主要驱动力。在网络游戏发展如火如荼的中国市场,免费大型多人在线角色扮演游戏(MMORPG)在各类网游模式中异军突起,引起了业内的注目。以永久免费打造进入游戏的超低门槛,以精心设计的IB模式作为盈利的主要手段,免费MMORPG在吸引了众多玩家的同时,也逐渐成为游戏厂商激烈厮杀的红海。免费MMORPG虽然号称永久免费,但综观总体玩家消费情况来看,能够长时间进行游戏却真正意义上零消费的玩家并不占据主流,很多玩家消费水平甚至超过了收费网络游戏玩家的消费水平。
而在游戏发展如此迅速的情况下,一个游戏商城能极好的发挥其作用,在为用户提供一个购买游戏虚拟物品平台的同时,也为商家带来商机。游戏商城本质上属于一种在线商城。在线商城是一种电子商务,基于商家与消费者模式(Business to Customer), 阿里巴巴的成功使得在线商城成为热门的话题。该模式在近年来都有比较成熟的应用,旧M、EMC等国际上比较知名的科技企业都采用这种B to C模式,客户能够在线购买这些公司的产品。随着中国网民数量的不断增长,以及互联网结构和功能的进一步向生活渗透,网络环境的逐步优化,网络世界将变的更加个性化和多元化。电子商务模式的运作和开发,也随着技术手段的不断发展,己经变得成熟。
国内外目前对游戏运营的研究,在商业模式、市场分析和运营方式等方面较为集中。技术方面,则集中在游戏算法改进、引擎开发等领域。概括来讲,各个方面的研究都有不同程度的存在,相互之间较为孤立。随着大数据时代的到来,数据挖掘技术在网页游戏中也有一定的应用。对于很多研究学者来说,技术和运营属于两种领域,这种出于运营需求而进行的平台系统研发也就很少纳入考虑。目前,对此类运营管理平台的研发数量极少。主要原因是此种平台具有很强的针对性,对于规模较小的公司,该平台的研发似乎没有特别的必要性。当今市场上也存在游戏运营平台,但这类平台与本文论述的游戏商城还是有着一定的区别,它们大都是第三方交易平台。本系统一方面作为交易平台,另一方面也是管理平台。
根据上述数据及推论,在游戏发展如此迅速的情况下,游戏商城能更好地体现其价值,能让玩家享受到便捷的同时,还能在商城中的讨论区中发表自己对游戏的体验,实现玩家与玩家之间的交流。与此同时,为商家提供了销售商品的渠道,能够对自己的商品进行宣传与推广。可以说,游戏商城在为玩家提供便利,为商家提供商机的同时,也推动着游戏的发展,实现互惠互利的作用。因此,游戏商城的存在是必然的,是对游戏的支持,更是游戏时代的重要体现。
【579】基于SSM springboot框架的游戏商城平台源码论文开题报告任务书
package com.market.controller; import java.io.File; import java.io.IOException; import java.lang.ProcessBuilder.Redirect; import java.text.ParseException; import java.util.HashMap; import java.util.UUID; import javax.print.DocFlavor.STRING; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.jackson.JsonObjectDeserializer; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import com.alibaba.fastjson.JSON; import com.
MySQL是世界上最流行的开源数据库之一,广泛用于各种应用程序中。随着安全意识的提高,数据库的安全管理变得尤为重要。mysql_config_editor工具允许用户安全地在本地文件中保存MySQL客户端程序的认证凭证,而无需在命令行中暴露它们。本文将指导你如何使用mysql_config_editor设置login-path,以及如何使用它通过mysql客户端安全登录。
什么是mysql_config_editor? mysql_config_editor是MySQL自5.6版本起附带的一个实用工具,它允许用户创建一个名为.mylogin.cnf的加密登录文件,用于存储认证信息。这样,用户就不需要在使用mysql客户端工具时在命令行中输入用户名和密码。
设置login-path 1. 安装mysql_config_editor 在使用mysql_config_editor之前,请确保MySQL客户端已经安装在你的系统上。通常,它与MySQL服务器软件一起安装。
2. 创建login-path 打开终端或命令提示符,使用以下命令创建一个新的login-path:
mysql_config_editor set --login-path=local --host=localhost --user=username --password 这里,你需要替换username为你的MySQL用户名。在执行此命令后,系统会提示你输入密码。输入密码时不会显示任何字符,这是正常的,以保证安全。
3. 查看login-path配置 为了确认login-path已经正确设置,可以使用以下命令查看所有配置的login-path:
mysql_config_editor print --all 输出将显示所有配置的login-path,但不会显示密码。
使用login-path登录MySQL 有了login-path,就可以在不需要手动输入密码的情况下登录MySQL了。
登录到MySQL 使用以下命令来使用你之前设置的login-path登录到MySQL:
mysql --login-path=local 这里的local是你设置的login-path的名称。如果一切设置正确,你将不需要输入密码即可登录到MySQL。
使用login-path执行命令 你还可以直接使用login-path执行MySQL命令,而不是先登录到MySQL提示符。例如:
mysql --login-path=local -e "SHOW DATABASES;" 这个命令将列出所有数据库,无需交互式登录。
注意事项 .mylogin.cnf文件是加密的,但仍然需要确保文件权限被正确设置,以防止未授权访问。
mysql_config_editor只适用于MySQL客户端工具,如mysql和mysqldump。
使用mysql_config_editor时,你可以设置多个login-path,用于不同的服务器或用户。
结论 mysql_config_editor提供了一种安全有效的方法来管理MySQL登录凭证。通过避免在命令行中直接输入敏感信息,它有助于提高安全性。此外,使用login-path可以简化自动化脚本的创建,因为不再需要硬编码凭证。遵循上述步骤,你可以轻松地设置login-path并利用它来安全地管理MySQL的访问。
英特尔正式发布了全新酷睿Ultra处理器平台,它采用Intel 4制程工艺打造和3D Foveros封装技术,有着新的性能核和能效核。
最多拥有6个性能核和8个能效核以及2个低功耗岛能效核,最高主频可达5.1GHz,还有全新的Arc GPU显卡,配备多达8个单元的Xe核显,实现了两倍性能提升,为超薄笔记本提供卓越的性能。
并且配备了全新的AI加速处理的NPU,引领着电脑本地AI计算大规模的普及和被广泛使用AI应用场景, 通过在酷睿Ultra上为AI应用的优化,带来新的用户体验。
全新制程工艺+3D Foveros封装技术
酷睿Ultra(Meteor Lake)是英特尔第一个采用Intel 4制程工艺的处理器产品,作为英特尔“四年五节点”制程发展计划当中是最重要的一环,Intel 4的量产标志着英特尔非常顺利的导入了EUV,为Intel 3和后续的Intel 20A、Intel 18A的顺利开发打了非常坚实的基础。
Intel 4对比Intel 7,实现了2倍晶体密度的提升,并且优化了CPU高性能逻辑库,进一步实现了更高密度的金属层,达到了更高效的供电。相比Intel 7,Intel 4实现了20%的能效提升,这也是Meteor Lake处理器非常重要的一个特性。
Meteor Lake采用全新分离式模块架构,分别是计算模块、SoC模块、图形模块、IO模块,并通过英特尔Foveros 3D封装技术连接。
依然是高性能混合架构,拥有全新的性能核(Redwood Cove)与能效核(Crestmont),提升了每瓦的性能执行效率,同时通过分离式的模块化设计,实现了独立的低功耗岛,在这个低功耗岛上面,内置了低功耗E-Core。
同时把内存控制器、视频编解码器、显示处理单元、NPU等都集成在低功耗岛,实现了低功耗运行处理单元。
模块化设计还实现了模块的单独供电控制,更有效提升了整个处理器的能耗管理。在硬件之上,配合操作系统,硬件线程调度器实现了更高级的3阶线程调度管理。
更强的性能和更低的功耗
在实际的性能上,根据官方公布的数据,在相同的功耗下,酷睿Ultra 7 165H对比前代酷睿i7-1370P有着更好的性能,领先约为8%,对比友商的产品则领先了11%。
在生产力方面,酷睿Ultra 7 165H对比友商的产品,在Video Editing上有31%的性能领先,在Premiere Pro上有41%性能领先,在lightroom上有19%的性能领先。
而功耗方面,在线视频播放场景下,拥有更低功耗LPE核心的酷睿Ultra,对比前代采用P核+E核的酷睿i7-1370P可以节省约25%的功耗。在线视频播放、4K本地视频、待机、Teams视频会议等场景对比友商的产品最多节省79%的功耗。
性能翻倍的Arc GPU集成显卡
酷睿Ultra还集成了全新的英特尔Arc GPU,它采用了全新的Xe LPG架构,最多配备8个Xe核显,相比于上一代实现了近两倍性能的提升。
它还支持了DX12 Ultimate的特性,支持硬件的光线追踪和网格着色等新的图形特性。编码方面,Arc GPU不仅支持H.265和H.264,还增加了AV1的支持,最高可支持8K 10bit HDR。
这个集显还支持4路显示通道,支持HDMI 2.1、DP 2.1以及eDP 1.4b等主流高端显示接口。
而且和锐炫独显一样,全新的核显不仅支持DP4a指令,可以做到更快加速AI计算,还有XeSS超级采样,通过AI增强型升级,使用更低的分辨率进行渲染,然后利用 AI 技术将图像提升至更高的分辨率,提升游戏性能和图像保真度。
具体来说,根据英特尔官方给出的数据,在18款游戏的测试中,酷睿Ultra 7 165对比前代酷睿i7-1370P均有着领先,其中在《博德之门3》中,实现了100%的提升。
而开启XeSS后,包括《杀手3》、《如龙7外传》《巫师3》《古墓丽影:暗影》《赛博朋克2077》在内的15款测试游戏,平均帧率提升达到了39%。
在《幽灵行者2》上,全新的集显(酷睿Ultra 7 165H)相比前一代酷睿处理集显(酷睿i7-1370P)在1080P画质下提升幅度是非常大的。再加上XeSS技术,在同样的分辨率下,帧率获得了3倍的提升,并且在同样的FPS下,也会更加省电。
首次集成AI加速处理的NPU
作为面向AI PC所打造的产品,英特尔酷睿Ultra处理器可以说是为AI PC场景应运而生的新一代平台。酷睿Ultra首次集成神经网络处理单元(NPU),并且全系支持,更进一步提升终端侧AI能效及应用。
酷睿Ultra的CPU、GPU、NPU都可以做AI处理,总体算力可以达到34TOPs。全新的NPU是专为AI负载设计的,具有高能效、低功耗等优势,尤其适合长时间运行的AI应用。
比如在视频会议场景中涉及长时间的背景虚化、任务追踪等等需求,NPU加入后可以降低对CPU、GPU调用,从而让轻薄本等设备提供更持久的续航。根据官方的数据,在进行Zoom视频会议的时候,通过把背景移除这些特效转移到NPU上,可以有着38%的功耗节省。
文章目录 一、获取哨兵数据二、处理哨兵计划产品数据三、导出图片格式并切割图片 一、获取哨兵数据 首先进入欧洲航空局网站,哨兵1号由两颗极轨卫星A星和B星组成。两颗卫星搭载的传感器为合成孔径雷达(SAR),属于主动微波遥感卫星。
1.点击“Open Hub”
2.点击右上角完成账户注册(这一步很简单)。
3.点击下图中“1”,选择要查找的区域(本文以西安为例),选择完成后,点击“2”来完成具体的数据选择。
产品类型中:
SLC(Single Look Complex):这些产品包含原始SAR数据的相位和振幅信息,通常用于制作高分辨率SAR图像,进行地质勘探和地震监测等应用。(博主因为要用于SAR图像训练,所以选择了该产品类型)
GRD(Ground Range Detected:这些产品包含了原始合成孔径雷达数据的地表反射率信息,可以用于监测土地覆盖和变化,如农田、森林和城市。
OCN(Ocean):主要用于监测和研究地球的海洋环境,提供了关于海洋表面特征和动态的有用信息。
RAW属于为加工的原始SAR数据,加工后得到SLC、GRD、OCN。
传感器模式选项:
Stripmap(SM)模式: Stripmap模式提供了中等分辨率的SAR图像,适用于地质、环境和农业监测等应用。
Interferometric Wide (IW) 模式: IW模式具有较高的分辨率,适用于地表变形监测、森林监测和海洋应用。
Extra Wide (EW) 模式: EW模式提供更宽的覆盖范围,适用于大范围地表监测,如洪水监测和农业用途。
4.设置完毕后,点击搜索按钮,并选择一款产品加入购物车(为了防止下一次找不到),再点击下载按钮。得到的是一个非常大的压缩包。
二、处理哨兵计划产品数据 1.下载SNAP软件进行哨兵数据的处理,进入下载官网,选择版本。
2.打开软件,点击“File”,再点击“Open Product…”,选择刚刚下载的安装包,在“Bands”中就可以查看图像了(西安古城墙清晰可见23333)
至此,数据的获取就完成了,后续就可以进行其他专业处理了,本人后面只介绍如何导出成图片,以及分割图片
三、导出图片格式并切割图片 1.导出图片,点击“File”–>“Export”–>“Other”–>“View as image”,接下来在图片右侧窗口进行分辨率的选择。
2.切割图片。(因为本人需要训练网络,所以要分辨率较小的图片),这里本人使用python写了一个简单的脚本,使用到了PIL的Image库。
def batch_crop(input_dir, crop_size=128): # input_dir 传入的照片路径 # crop_size 所截取图片的大小 # dirs = os.listdir(input_dir) # 保存input_dir目录下所有文件至dirs # for item in dirs: im = Image.open(input_dir) print("图像尺寸(宽,高): ", im.size) (width, height) = im.
前言:给美术验收UI时,说我的截图特别模糊。
原因:序列化存储了quality值,启动时代码设置为0低品质了。清空重置,设置为2高品质即可。
m_quality = PlayerPrefs.GetInt("_Quality"); QualitySettings.SetQualityLevel(m_quality); Window平台:
HICU\Software[公司名称][产品名称] 项下的注册表中
其中公司名称和产品名称是在“Project Settings”中设置的名称
Win+R运行——regedit——HKEY_CURRENT_USER——SOFTWARE——Unity——UnityEditor——公司名——产品名
Android:
/data/data/包名/shared_prefs/pkg-name.xml
IOS:
/Library/Preferences/[应用ID].plist
物联网数据采集网关能将各种传感器、执行器等设备连接在一起,通过收集、处理和传输来自各种物理设备的信息,实现数据的集成和分析,同时可通过云平台进行数据交互。它具有数据转换、数据处理、数据传输等功能,是工厂数字化转型的核心组件。随着科技的飞速发展,物联网技术正在改变着世界。其中,物联网数据采集网关在工厂数字化转型中扮演着关键的角色。
物联网数据采集网关在工厂数字化转型中的应用
设备监控与管理:通过物联网数据采集网关,可以实时监控工厂中各种设备的运行状态,如温度、湿度、压力、液位等参数,实现对设备的高效管理。一旦发现异常数据,网关会立即启动报警程序,通知管理人员及时处理,从而提高设备利用率,降低故障率。
数据采集与处理:物联网数据采集网关可以收集来自各种传感器的数据,如温度传感器、压力传感器、液位传感器等。这些数据通过网关进行预处理之后,会上传至云平台进行进一步的分析和处理,以实现对生产过程的精细化管理。
远程控制与调节:通过物联网数据采集网关,管理人员可以在远程对工厂中的设备进行控制和调节。例如,通过网关调整设备的运行参数,或者对设备进行开关机操作。这大大提高了管理的便捷性和效率。
预测性维护:通过物联网数据采集网关收集的数据,可以进行深度分析和学习,预测设备的运行状态和寿命。管理人员可以根据这些数据提前进行维护计划安排,减少设备停机时间,降低生产中断的风险。
能源管理:物联网数据采集网关可以实时监控工厂的能源使用情况,包括电力、燃气、水等。通过数据分析,可以优化能源使用效率,降低生产成本。
质量管理:通过物联网数据采集网关收集生产过程中的质量数据,可以对产品质量进行实时监控和预测,及时发现并解决问题,提高产品质量水平。
安全管理:物联网数据采集网关可以实时监控工厂的安全状况,如火灾、泄漏等安全隐患。一旦发现异常,网关可以立即启动安全报警程序,通知相关人员及时处理,确保工厂的安全生产。
物联网数据采集网关在工厂数字化转型中起着至关重要的作用。它不仅能实现设备的实时监控与远程管理,还能进行数据采集与处理、预测性维护、能源管理、质量管理和安全管理等。这些先进的技术手段和管理方法,有助于提高工厂的生产效率、降低运营成本、提高产品质量和安全管理水平。随着工业4.0和智能制造的快速发展,物联网数据采集网关将在工厂数字化转型中发挥更大的作用。
MQTT是一种轻量级的发布/订阅消息传输协议,专门为低带宽、高延迟或不稳定的网络环境设计。它支持离线消息存储,使客户端在未连接到服务器时也能接收到消息。MQTT网关是一种采用MQTT协议的网关设备,可以连接不同类型的工业物联设备,实现设备之间的数据传输和控制。随着物联网技术的不断发展,工业物联设备之间的互联互通和数据传输变得越来越重要。MQTT网关作为一种轻量级的发布/订阅消息传输协议,在连接各类工业物联设备、实现数据传输和控制方面具有广泛的应用价值。本文将介绍如何实现MQTT网关连接各类工业物联设备,实现数据传输与控制。
实现MQTT网关连接各类工业物联设备
1、选择合适的MQTT网关
首先,需要选择一款适合的MQTT网关。选择时需要考虑网关的硬件配置、网络接口、扩展接口以及是否支持目标云平台等因素。同时,还需要根据实际应用场景选择合适的网关尺寸、重量和防护等级等参数。
2、连接设备与MQTT网关
不同类型的工业物联设备可能有不同的连接方式,需要根据设备的通信协议和接口类型选择合适的连接方式。例如,一些设备可能使用串口或以太网接口进行连接。确保连接的可靠性和稳定性,以便实现设备与MQTT网关之间的数据传输。
3、配置MQTT网关参数
根据连接的工业物联设备的类型和数据传输需求,配置MQTT网关的参数。这些参数可能包括主题订阅、消息发布、连接参数等。确保配置的参数能够满足实际需求。
4、数据传输与控制
通过MQTT协议,MQTT网关可以与工业物联设备进行数据传输和控制。当设备需要发送数据时,可以将数据发布到特定的主题上,MQTT网关可以订阅这些主题以接收数据。同时,MQTT网关也可以向指定的主题发布命令或控制指令,以实现对设备的远程控制。
5、数据处理与分析
通过MQTT网关接收到的数据可以进行进一步的处理和分析。例如,可以解析和处理数据以监控设备运行状况、预测潜在问题、优化生产流程等。同时,也可以自定义生成报表和可视化数据,提高决策效率。
6、远程控制与调试
通过MQTT协议,MQTT网关还可以接收来自远程平台的控制指令,实现对设备的远程启停控制、远程编程调试和远程上下载程序等操作。这有助于提高运维效率与管理水平。
实现数据传输与控制
数据传输:MQTT网关可以采集各类工业物联设备的数据,并将其传输到云平台或其它应用系统。数据传输可以采用发布/订阅模式,设备或传感器发布数据,MQTT网关订阅数据并传输到目标位置。同时,MQTT网关也可以从云平台或其它应用系统发送数据到设备或传感器。
数据处理与分析:MQTT网关可以对采集到的数据进行处理和分析,包括数据清洗、数据转换、数据挖掘等操作,以提高数据质量和可用性。同时,也可以自定义生成报表和可视化数据,为决策提供支持。
控制:MQTT网关可以接收来自云平台或其它应用系统的控制指令,并将其发送到设备或传感器,实现对设备的远程控制。例如,可以控制设备的开关、调整设备的参数等。
应用案例分析
以一个智能制造车间为例,说明如何实现MQTT网关连接各类工业物联设备,实现数据传输与控制。在该车间中,传感器负责监测车间的温度、湿度、气压等环境参数;摄像头负责监控车间的生产线上各设备的运行状态;机器人负责执行生产任务。通过MQTT网关将这些设备连接起来,可以实现以下功能:
数据采集:通过传感器采集车间的环境参数,如温度、湿度、气压等,并将数据发送到云平台进行存储和分析。同时,通过摄像头监控生产线上各设备的运行状态,将视频数据传输到云平台进行实时监控。
数据传输:将采集到的数据通过MQTT协议发送到云平台上的数据处理系统进行分析和处理。同时,根据需要将数据传输到其他应用系统进行进一步的数据利用和价值挖掘。
远程控制:通过MQTT协议,可以向设备发送控制指令,实现远程控制。例如,当监测到车间的温度过高时,可以向空调发送控制指令,调整温度至正常范围。同时,也可以根据生产计划自动发送控制指令给机器人,执行相应的生产任务。
故障预警与诊断:通过分析采集到的数据,可以检测设备的故障或异常状态。当出现故障时,可以向维护人员发送预警信息,及时进行维修和保养。同时,通过对历史数据的分析,可以找出故障的原因和解决方案,提高生产效率。
优化生产流程:通过对环境参数和设备运行数据的分析,可以优化生产流程。例如,根据车间的温度和湿度数据,可以调整生产线的运行速度和工艺参数,以提高产品质量和生产效率。
人员管理:通过与人员定位系统结合,可以实时监测车间内员工的位置和活动情况。当出现紧急情况时,可以通过MQTT网关向员工发送紧急通知,引导他们快速疏散或采取必要的防护措施。
节能减排:通过监测车间的能源消耗数据,可以分析能源浪费的原因并采取相应的节能措施。例如,根据车间的温度和湿度数据,可以调整空调和通风系统的运行参数,降低能源消耗。
通过实现MQTT网关连接各类工业物联设备,可以实现数据采集、传输、控制等功能,提高生产效率、降低成本、保障人员安全等方面具有重要意义。这不仅有助于提高设备的智能化、远程化管理水平,还为企业的生产管理提供了实时数据支持,优化了生产流程,提高了产量和质量。同时,也有助于实现工业制造的数字化、智能化和绿色化转型。
要查询MySQL数据库中每个表的记录数,我们可以使用INFORMATION_SCHEMA数据库,这是一个内置的数据库,其中包含了关于其他所有数据库的元数据。我们可以编写一个查询,遍历INFORMATION_SCHEMA.TABLES表,来获取每个表的行数。
使用INFORMATION_SCHEMA查询 以下是一个SQL查询示例,它会返回指定数据库中每个表的名称和记录数:
SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name'; 请将database_name替换为想要查询的数据库名称。
需要注意的是,INFORMATION_SCHEMA.TABLES中的TABLE_ROWS列给出的行数可能是一个近似值,特别是对于大型表或包含动态行格式(如InnoDB)的表。如果需要精确的行数,可以为每个表编写一个单独的COUNT(*)查询,但这对于大型表来说可能会很慢。
使用COUNT(*)查询 如果想要精确的行数,并且表不是特别大,可以使用以下的SQL脚本:
SELECT CONCAT('SELECT ''', TABLE_NAME, ''' AS table_name, COUNT(*) AS exact_count FROM `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'database_name'; 这个查询会为database_name数据库中的每个表生成一个COUNT(*)查询。然后,可以手动执行这些查询,或者使用脚本自动执行它们,以获取每个表的精确行数。
更新INFORMATION_SCHEMA的TABLE_ROWS 如果TABLE_ROWS的值与预期有很大差距,可以尝试使用ANALYZE TABLE命令来更新表的统计信息,这有时可以使估算值更加准确:
ANALYZE TABLE your_table_name; 这将更新表的键值分布统计信息,可能会使得TABLE_ROWS的估算值更加接近实际行数。但请注意,这个命令可能会对表进行锁定,因此在高流量的生产环境中使用时需要小心。
库的基本管理 列出有哪些库 查询当前 MariaDB 服务器上有哪些库 选择库 管理库中的表格之前,可以先进⼊到⽬标库 创建新库 增加指定名称的新数据库
删除库 将指定名称的数据库从服务器上移除 表的基本管理 创建新表 需要指定表名、有哪些字段及各⾃类型 检查表格的列设置 增加表记录 向表格中插⼊数据记录 列出表中的所有记录 查看表格内容 查看该库中的表 删除表 删除表中的数据 授权库表概述 新装mariadb-server后,默认库mysql user表,存储授权⽤户/密码及访问权限 db表,存储⽤户对库的访问权限 tables_priv表,存储⽤户对表的访问权限 columns_priv表,存储⽤户对字段的访问权限 设置授权 MariaDB [( none )] > 交互指令 权限列表 all , select,update,insert,delete..… 客户机地址表示 允许使⽤%通配符 例如%’匹配任意主机、‘192.168.10.%’匹配⼀个⽹段 查看授权 列出⾃⼰或指定⽤户的授权 撤销授权 取消对指定⽤户的授权
在自然语言处理 (NLP) 领域,出现了两种卓越的技术,每种技术都有其独特的功能:微调大型语言模型 (LLM) 和 RAG(检索增强生成)。 这些方法极大地影响了我们利用语言模型的方式,使它们更加通用和有效。 在本文中,我们将详细介绍微调和 RAG 的含义,并强调它们之间的主要区别。
深入研究微调 LLM:为特定任务定制语言模型 微调是生成人工智能中的一个关键过程,其中预训练的语言模型是针对特定任务或领域/任务定制的。 它涉及完善模型执行专门任务的能力。 (例如,领域:财务,任务:总结)
理解 RAG:使 AI 生成的文本更加上下文相关、事实准确 RAG 代表 “检索增强生成”。 简单来说,RAG是人工智能中一种将信息检索与文本生成相结合的技术。 它可以帮助人工智能模型提供更准确且与上下文相关的响应。
Retrieval-Augmented Generation 区别:微调与 RAG 微调大语言模型 (LLM) 和 RAG(检索增强生成)是构建和使用自然语言处理模型的两种不同方法。 以下是两者之间主要区别的细分:
目的: 微调 LLM:微调涉及采用预先训练的 LLM(例如 GPT-3 或 BERT)并使其适应特定任务。 它是一种用于各种 NLP 任务的通用方法,包括文本分类、语言翻译、情感分析等。 当仅使用模型本身即可完成任务并且不需要外部信息检索时,通常会使用微调的 LLM。RAG:RAG 模型专为涉及文本检索和生成的任务而设计。 它们结合了检索机制(从大型数据库中获取相关信息)和生成机制(根据检索到的信息生成类似人类的文本)。 RAG 模型通常用于问答、文档摘要以及其他访问本地信息至关重要的任务。 架构: 微调 LLM:微调 LLM 通常从预先训练的模型(如 GPT-3)开始,并通过针对特定任务的数据进行训练来对其进行微调。 该架构基本保持不变,只是对模型参数进行了调整,以优化特定任务的性能。RAG:RAG 模型具有混合架构,将基于转换器的 LLM(如 GPT)与外部内存模块相结合,允许从知识源(例如数据库或一组文档)进行高效检索。 训练数据: 微调 LLM:微调 LLM 依赖于特定于任务的训练数据,通常由与目标任务匹配的标记示例组成,但它们没有明确涉及检索机制。RAG:RAG 模型经过训练可以处理检索和生成,这通常涉及监督数据(用于生成)和演示如何有效检索和使用外部信息的数据的组合。 用例: 微调 LLM:微调 LLM 适用于各种 NLP 任务,包括文本分类、情感分析、文本生成等,其中任务主要涉及根据输入理解和生成文本。RAG:RAG 模型在任务需要访问外部知识的场景中表现出色,例如开放域问答、文档摘要或可以从知识库提供信息的聊天机器人。 使用 Elasticsearch 拥抱 RAG RAG 是 NLP 领域的一项关键创新,它集成了检索模型和生成模型的功能,以生成连贯、上下文丰富的文本。
01. 前言
之前在硕士阶段,统计学习(SL)既不是我的研究方向,也不是我的研究工具,所以了解甚少。之前我与 SL 唯一的接触停留在非常走马观花的读过一遍 ISLR 那本书,积累的技能仅限于在 R 里调包来 fit 简单的 model。简单来说就是了解的东西连皮毛都算不上,更不用提个中细致的推导以及背后严谨的数学了。 目前的学习和研究中,我导本身对统计学习要求很高,关键是她自己也很强,搞得我压力山大一直在狂补基础。开学一月有余,最近正好在上 Prof. Yang Can 的一门统计推断相关的课,刷新了我对统计学习的认知,他讲故事的能力极强,能用一幅 big picture 把各种我听过的没听过的方法互相联系起来(当然这也源于他的深厚功力),个人也对他写的统计学习相关的博客十分着迷。最近在重读 ISLR+ESL,想记录一下进展,深知目前水平有限,写此文只为分享自己关于某些概念的理解,供读者一乐。 本文主要谈一谈我自己关于一些基础概念的理解和解读,包括但不限于统计学习中的预测和推断、模型精度与模型可解释性、bias-variance trade-off 等内容。大佬请略过直接拉到末尾有好文推荐可享用。
02. 什么是统计学习?
在我们的日常生活、生产中,有众多的数据存在着、流动着,数据和数据之间也有着各种各样的联系。很多时候,基于已观测到的数据,我们好奇其中的联系,想要找到其中隐含的经验和知识来帮助我们对现有的系统进行优化、或是对未来的不可见数据做预测和推断。统计学习做的就是这么一件事:基于数据构建模型并且用模型对数据进行预测和分析。 举个很简单的例子,根据长期的观察,人们发现子女和父母的身高之间存在一定的定性关系。统计学家利用收集到的数据进行统计学习建模,学习出的模型就能够根据父母身高及其他因素(家庭孩子数量、孩子的性别)等对未出生的子女的身高进行预测。两个世纪以前,法国的科学家 Galton 做的就是这么一件事,他发现了 1.08 这个奇妙的数字,也发现了男孩比女孩平均要高一些。两百年多年过去了,他给我们留下了一个名为 Galton Family 的古老的数据集,至今仍是很好玩的 toy set。感兴趣的伙伴可以去 fit 一个任意模型看看你能达到的最小 MSE 是多少哈哈(settings:利用其它变量预测 child height,train-734,test-200,reps-200)。
下图是另一个例子,左图是受教育年限与收入的样本数据,根据此数据可以构建右图中蓝线所示的统计学习模型,该模型可以用于预测某个受教育年限的样本其收入情况如何。
03. 统计学习模型:预测与推断
上文提到,统计学习中通常要基于数据进行建模来实现预测和推断。实际上,针对未来数据所做的预测和推断就是我们构建模型最初的动力和目标。这里有必要区分一下预测(prediction)和推断(inference)。
预测是指我们给所构建的模型一定的输入,利用模型对输出进行预测。这在很多时候代表着未知场景下对关键指标的估计,比如根据候选人的学历、工作经营等因素预测其薪资时,我们更好奇某个条件(如硕士学历、3 年工作经验)的候选人能拿到的薪资数额是多少?不难发现,在预测中我们对输出更感兴趣。
而推断则与预测不同,简单来说,当我们的目的是推断时,我们对输入和输出之间的关系(而不是输出)更为感兴趣,我们更好奇哪个输入对输出的有什么样的影响?同样的例子,当我们的任务是推断时,我们要解决的问题很可能就是学历对薪资的影响有多大?或是学历和工作经验到底哪一个对薪资的影响更大?
04. 如何构建学习模型?
要想实现预测和推断,构建统计学习模型是第一步。大致来分的话,构建统计学习模型的方法可以分为两种:参数式方法和非参数式方法。 参数式方法比较直接,可以分为两步。第一步先对模型的形式做一个假设,比如最简单的模型假设就可以说它是线性的。选择完模型假设后,我们对模型有一个较为准确的认知了,此时的模型中只剩下众多未知的参数。所以第二步就是利用已有的数据对模型中的参数进行估计。很容易看出,参数式方法把寻找一个未知模型(函数)的问题通过预先假设模型形式的方法转变成了根据数据估计一堆参数的问题,这是一个化繁为简的过程,其代价就是对模型形式进行了限制。 而非参数式的方法则对模型的形式没有具体的假设,这使得它理论上可以构建任何能最接近训练集的模型。 通过上面的简单解释,不难发现为什么它们拥有这样的命名。此外,参数式方法和非参数式方法的优缺点也一览无余:参数式方法将构建模型的问题简单化,然而却面临模型假设与数据背后未知的真实模型相差甚远的风险,所以对于参数式方法来说,如果模型假设提的好,效果自然好,构建起来也轻松一些,但如果模型假设不那么好甚至相差很远,就是完完全全的灾难。非参数式方法的优势则在于其理论上可以根据数据拟合任何种类的模型(能够最大程度的贴近数据),而其劣势则是需要更大量的数据(相较参数式方法而言)来构建一个准确的模型。 通过不同的方法,我们可以构建很多不同的模型。可为什么要有这么多不同的统计学习方法/模型呢?没有一个最高级、最 fancy 的模型一劳永逸的解决所有问题吗?确实没有,no free lunch 说的就是这么个事,没有一个最好的模型可以在任何问题上优于其他模型,模型好不好都是 problem-dependent 的。换句话说,抛开具体问题谈哪个模型更好是没有一点意义的。
05. 预测精度 v.s. 模型可解释性
如在众多的统计学习方法中,不同的方法有着不同的特点,有些方法灵活性/弹性(flexibility)较差(约束较多),只能够构建有限的模型集合来拟合数据,如线性模型。有些方法 flexibility 则较好,能够构建更多的模型来拟合数据。 说到这不禁会有疑问,这样说来 flexibility 更好的方法不是我们的最佳选择吗?为什么还需要那些 flexibility 较差的方法呢?实际上,这里有一个很重要的 trade-off,那就是模型的预测精度与模型的可解释性。通常来说,以线性模型为代表的 flexibity 较差的模型,虽然它们能够构建的模型范围有限,导致其可能捕捉不到一些数据里的信息、造成预测精度较低,但是它们通常有着较为清晰的模型形式,比如线性模型可以将输出 Y 表示为输入 X 的线性组合,我们就可以清晰的分析出哪些变量会影响输出,这样的模型可解释性就非常高。
问题描述 …/ui/screens/Src/ui_MenuPage.c:857:51: error: ‘ui_font_sleepicon’ undeclared (first use in this function); did you mean ‘ui_MenuGameicon’?
在使用lvgl自定义字体时,没有声明因此才报错
解决方案: 在ui.h文件中声明要使用的字体
背景 读写分离是快速提高数据库性能的手段,主库只负责写入,从库负责查询。但在性能得到提升的同时,编程的复杂度就会提升。由其碰到主从同步延迟的情况,在数据写入后,在从库无法读取到最新数据,会对业务逻辑造成很大的影响。那么,我们如何发现主从延迟对业务有什么延续呢,那就需要人为的制造延迟,将问题暴露出来。
制造主从延迟 Mysql的主从配置支持设置主从延迟时间change replication source to source_delay = interval; interval是以秒来计算。下面我们测试一下这个配置的效果。
服务器配置 Mysql 8.0.35
主库服务器:192.168.0.101
从库服务器:192.168.0.102
在从库上配置主库信息,并设置延迟时间为30秒,然后查看从库状态,就能看到同步已经就绪。
mysql> change replication source to master_host ='192.168.50.101',master_port =3306,master_user ='sync',master_password ='Abcd123!',master_log_file ='binlog.000002',master_log_pos =2266,source_delay = 30; mysql> start slave; mysql> show slave status\\G *************************** 1. row *************************** Slave_IO_State: Waiting for source to send event Master_Host: 192.168.50.101 Master_User: sync **Slave_IO_Running: Yes Slave_SQL_Running: Yes SQL_Delay: 30** 在主库创建一个表,并插入一条数据。
mysql> create table t1 (id bigint); mysql> insert into a values (2); 再查看从库状态,发现从库已经开始延迟了Seconds_Behind_Master表示延迟时间22秒,SQL_Remaining_Delay表示延迟同步还剩余9秒,Slave_SQL_Running_State表示线程状态在等待延迟结束。
功能方面:问的最多的就是测试流程,测试计划包含哪些内容,公司人员配置,有bug开发认为不是 bug怎么处理,怎样才算是好的用例,测试用例设计方法(等价类,边界值等概念方法),包含哪些内 容,怎样保证用例覆盖全面,马上要上线了发现bug怎么处理,怎么判断产品是否能上线,怎么做冒烟测试,水杯,椅子,笔啥的怎么 测试,支付,登录,身份证输入框,计算器测试点。。。。怀疑人生中
性能:做过性能测试吗,web和app性能,web学过jmeter做并发,app用gt,wetest。分别关注哪些指标,怎么判定有性能问题。。。。。这个坑比较大,讲不了太深,怀疑人生中
兼容性怎么做:app关注手机类型,版本,分辨率,系统。BS架构关注浏览器类型,版本
linux:一般问一下常规的命令,还有问会不会搭建环境这些-----常规命令背个几十个
数据库:增删改查,多表查询,where和having区别,delete和drop,truncate区别,视图是什么,varchar和char区别,左连接,去重等等。反正我觉得数据库在面试官这分值还是挺高的,起码的基本知识一定要过关
网络知识:tcp/ip,get/post区别,tcp/udp区别,tcp三次握手,4次挥手,cookie/session区别,7层模型,dns解析,https/http区别,url输入,敲回车键到页面出现过程发生什么,请求头和响应头有哪些内容
抓包:抓包原理是什么,怎么抓https,断点,修改请求响应时间怎么操作,模拟弱网
语言:shell,python。shell学的一般般,只是说了解,python问的比较多,is与==区别,字符串,列表,字典等概念,99乘法表,1到100求和,列表去重,冒泡排序,读写文件,1到100取出包含3或7数字,字符串切割等等
web自动化:selenium工具,架构,哪些元素定位方法,xpath和css区别,显示等待,隐式等待,强制等待区别,自动化框架,unitest测试框架相关的知识,原理,装饰器,批量执行,生成报告,发邮件,打印日志等等。。。不扎实,怀疑人生,还得好好学习
职业相关的:背景调查,让你说优缺点(说缺点一定要小心),上家公司为啥离职,职业规划,谈薪资,看中公司哪些方面啥的,走到这一步了由其要格外小心,一不小心就入坑了,前功尽弃就可惜了
总的来说,找到工作还是非常的开心的,本人14届大专学历,学了三个月,一点不假魔鬼训练,找工作半个月,面试10几家,过了5家,最高14k(去了就要做自动化,感觉hold不住哈哈)选择一家比较近的,11k。希望后面工作顺利,面试过程中碰到的这些问题后面也会陆续补充答案下来,希望对找软测的小伙伴有个参考,学习资料整理好,需要的后面也可以发给大家。
自动化测试相关教程推荐: 2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili 2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili 测试开发相关教程推荐 2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili postman/jmeter/fiddler测试工具类教程推荐 讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili 2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili 2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili 总结: 光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。 如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。
如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步
在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。
我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,
测试开发视频教程、学习笔记领取传送门!!
上⼀节, 讲了要怎么理解平均负载( Load Average) , 并⽤三个案例展示了不同场景下平均负载升⾼的分析⽅法。 这其中, 多个进程竞争 CPU 就是⼀个经常被我们忽视的问题。
1、CPU上下文切换的概念 我想你⼀定很好奇, 进程在竞争 CPU 的时候并没有真正运⾏, 为什么还会导致系统的负载升⾼呢? 看到今天的主题, 你应该已经猜到了, CPU 上下⽂切换就是罪魁祸⾸。
我们都知道, Linux 是⼀个多任务操作系统, 它⽀持远⼤于 CPU 数量的任务同时运⾏。 当然, 这些任务实际上并不是真的在同时运⾏, ⽽是因为系统在很短的时间内, 将 CPU 轮流分配给它们, 造成多任务同时运⾏的错觉。
⽽在每个任务运⾏前, CPU 都需要知道任务从哪⾥加载、 ⼜从哪⾥开始运⾏, 也就是说, 需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter, PC) 。
CPU 寄存器, 是 CPU 内置的容量⼩、 但速度极快的内存。 ⽽程序计数器, 则是⽤来存储 CPU 正在执⾏的指令位置、 或者即将执⾏的下⼀条指令位置。 它们都是 CPU 在运⾏任何任务前, 必须的依赖环境, 因此也被叫做 CPU 上下⽂。
知道了什么是 CPU 上下⽂, 我想你也很容易理解 CPU 上下⽂切换。 CPU 上下⽂切换, 就是先把前⼀个任务的 CPU 上下⽂(也就是 CPU 寄存器和程序计数器) 保存起来, 然后加载新任务的上下⽂到这些寄存器和程序计数器, 最后再跳转到程序计数器所指的新位置, 运⾏新任务。
我们应该知道的 10 个高级 JavaScript 技巧 解构赋值 赋值解构是一种从数组或对象中提取值并将其分配给变量的简洁方法。
它简化了您的代码并提高了可读性。对于数组,可以使用括号表示法,对于对象可以使用大括号。
// 解构数组 const [firstItem, secondItem, ...rest] = [1,2,3,4,5]; console.log(firstItem); // 1 console.log(secondItem); // 2 console.log(rest); // [3, 4, 5] // 解构对象 const {name, age, ...details} = { name: "leo", age: 25, phone: 'xxx', address: 'xxx' } console.log(name); // leo console.log(age); // 25 console.log(details) // {phone: 'xxx', address: 'xxx'} 扩展语法 我们可以使用扩展语法(…)将数组的元素或对象的属性扩展到另一个数组或对象。
这对于制作副本、合并对象以及将多个参数传递给函数非常有用。
使用扩展语法生成的新对象是深拷贝,也就是改变原对象并不会影响到扩展对象
// 复制数组 const originalArray = [1,2,3]; const newArray = [.
Linux简介:
Linux是一个开源的操作系统内核,最初由Linus Torvalds创建。它通常与GNU工具一起使用,以创建一个完整的操作系统。Linux操作系统有许多基于内核的发行版,如Ubuntu、CentOS、Debian等,每个发行版都有其独特的特性和包管理工具。 登录和用户管理:
使用SSH(Secure Shell)协议远程登录到Linux服务器,确保安全的远程访问。添加新用户,可以使用useradd命令,并使用passwd命令设置密码。修改和删除用户帐户,可以使用usermod和userdel命令。 文件系统和目录结构:
Linux文件系统使用层次结构,根目录(/)是整个文件系统的顶级目录。一些重要的目录包括:/home(用户家目录)、/tmp(临时文件目录)、/var(变量数据)等。使用命令如ls、cd、pwd来浏览和管理文件和目录。 文件权限和所有权:
每个文件和目录都有权限设置,包括读(r)、写(w)、执行(x)权限,可以使用chmod命令修改这些权限。所有权由用户和组来定义,可以使用chown命令更改文件和目录的所有权。 软件包管理:
使用包管理工具来安装、更新和删除软件包。例如,Debian和Ubuntu使用apt,CentOS使用yum。确保软件包的安全性和稳定性,通过签名验证和源的管理。 进程管理:
使用ps命令查看运行中的进程列表,top命令实时监控系统资源使用情况。使用kill命令终止进程,可以通过进程ID(PID)或名称。使用&运算符将命令放在后台运行,或使用nohup命令以保持进程在用户退出后继续运行。 系统日志和故障排除:
Linux系统产生各种日志文件,位于/var/log目录中。例如,/var/log/syslog和/var/log/auth.log。使用命令如tail和grep来查看和分析日志以诊断问题。 网络配置和管理:
配置网络接口、IP地址和子网掩码,可以使用ifconfig、ip和配置文件(如/etc/network/interfaces)。使用netstat、ss等命令查看和管理网络连接。 安全性:
配置防火墙以控制入站和出站流量,常用的防火墙工具包括iptables和firewalld。定期更新系统和软件包,以弥补安全漏洞。使用SSH密钥对替代密码登录以提高安全性。 备份和恢复:
创建和管理备份,确保数据的安全性。常用的备份工具包括rsync和tar。使用定期备份策略,包括完全备份和增量备份。 性能监控和优化:
使用工具如top、htop、iostat和vmstat来监控系统性能。优化系统资源分配以提高性能,可以通过调整内核参数和进程优先级来实现。 自动化任务:
使用cron作业来定期运行任务,通过编辑crontab文件来管理。编写Shell脚本以自动化常见任务,例如备份、日志清理和监控。 系统更新和升级:
定期更新操作系统和软件包,以确保安全性和性能。命令如apt update && apt upgrade(对于Debian/Ubuntu)和yum update(对于CentOS)用于更新系统。 硬件管理:
监控硬件状态,如磁盘空间、内存使用和CPU负载,可以使用df、free和top等命令。添加和配置硬件设备,例如磁盘、网络适配器等,可以使用udev来自动检测和配置。 登录和用户管理:
使用SSH远程登录到Linux服务器:
ssh username@hostname 添加新用户:
sudo useradd newuser 设置用户密码:
sudo passwd newuser 修改和删除用户帐户:
sudo usermod -aG groupname username sudo userdel username 文件系统和目录结构:
浏览和管理文件和目录:ls # 列出当前目录的内容 cd # 切换目录 pwd # 显示当前工作目录的路径 文件权限和所有权:
修改文件权限:
chmod permissions filename 修改文件所有权:
1、如何了解系统的负载情况? 每次发现系统变慢时, 我们通常做的第⼀件事, 就是执⾏top或者uptime命令, 来了解系统的负载情况。 ⽐如像下⾯这样, 我在命令⾏⾥输⼊了uptime命令, 系统也随即给出了结果。
$ uptime 02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 它们分别是当前时间、 系统运⾏时间以及正在登录⽤户数。
02:34:03 //当前时间 up 2 days, 20:14 //系统运行时间 1 user //正在登录用户数 ⽽最后三个数字呢, 依次则是过去1分钟、 5分钟、 15分钟的平均负载(Load Average) 。
2、什么是平均负载? 平均负载? 这个词对很多⼈来说, 可能既熟悉⼜陌⽣, 我们每天的⼯作中, 也都会提到这个词, 但你真正理解它背后的含义吗?
我猜⼀定有⼈会说, 平均负载不就是单位时间内的 CPU 使⽤率吗? 上⾯的0.63, 就代表CPU使⽤率是63%。 其实并不是这样, 如果你⽅便的话, 可以通过执⾏man uptime命令, 来了解平均负载的详细解释。
简单来说, 平均负载是指单位时间内, 系统处于可运⾏状态和不可中断状态的平均进程数, 也就是平均活跃进程数, 它不仅包括了****正在使用CPU的进程*,还包括了*等待CPU*和*等待I/O****的进程。它和CPU使⽤率并没有直接关系。 这⾥我先解释下, 可运⾏状态和不可中断状态这俩词⼉。
所谓可运⾏状态的进程, 是指正在使⽤CPU或者正在等待CPU的进程, 也就是我们常⽤ps命令看到的, 处于R状态(Running 或 Runnable) 的进程。
参考:
Pardee J.D., and Spudich, J.A. 1982. Methods in Cell Biol. 24:271-288.https://www.cytoskeleton.com/pdf-storage/datasheets/bsa01.pdfhttps://www.cytoskeleton.com/pdf-storage/datasheets/bsa02.pdfhttps://www.cytoskeleton.com/pdf-storage/datasheets/akl99.pdfhttps://www.jove.com/t/55613/measuring-protein-binding-to-f-actin-by-co-sedimentation?language=Chinese Biochemistry 通过共沉淀测量蛋白与F-肌动蛋白的结合 Published: May 18, 2017 doi: 10.3791/55613 宗旨:
实验操作全流程干燥低温,避免反复冷冻解冻;离心管用不到了就放冰袋上,减少用手接触次数;密封保存是指密封膜+双层密封袋+有色硅胶ATP,DTT粉末密封保存在-20度,半年一换(未开封可存放两年);含有ATP的溶液2小时一换;蛋白质样品密封保存在-70度,三个月一换G-Buffer溶液理论上可在-20摄氏度密封保存1年,P-Buffer溶液理论上可以在-70摄氏度密封保存1年,每次使用时再加入ATP,DTT便可使用;但是建议每次实验重新配置,不要用上一次剩余的溶液 x.1 制备 General Actin Buffer(G-Buffer) General Actin Buffer 的参考链接如下:https://www.cytoskeleton.com/pdf-storage/datasheets/bsa01.pdf
理论配置条件:100ml of sterile de-ionized water to give a 1X strength buffer; 0.2 mM calcium chloride, 5 mM Tris-HCl ; 0.2 mM ATP; pH 8.0
实际配置条件:0.2mM/L 氯化钙 + 5mM/L Tris-HCl + 0.2 mM/L ATP + 0.5mM/L DTT,pH 8.0 ,具体见下表
本串口程序程序默认uart0
程序调用链:
stdio_init_all -> stdio_uart_init -> uart_init #include <stdio.h> #include "pico/stdlib.h" int main() { stdio_init_all(); while (true) { printf("Hello, world!\n"); sleep_ms(1000); } } bool stdio_init_all(void) { // todo add explicit custom, or registered although you can call stdio_enable_driver explicitly anyway // These are well known ones bool rc = false; #if LIB_PICO_STDIO_UART stdio_uart_init(); rc = true; #endif #if LIB_PICO_STDIO_SEMIHOSTING stdio_semihosting_init(); rc = true; #endif #if LIB_PICO_STDIO_USB rc |= stdio_usb_init(); #endif return rc; } void stdio_uart_init() { uart_init(uart_default, 0); } 此处uart_default被定义为:#define uart_default uart0
在CNN中,nn.upsample常用于上采样操作,尤其是最近大火的扩散模型中,UNet网络的上采样均是采用这个操作执行该任务。尽管如此,nn.upsample在GPU上运行时,与torch.bfloat16会发生冲突,常给出这样的错误:RuntimeError:“upsample_nearest2d_out_frame” not implemented for ‘BFloat16’,从而导致很多高性能计算受阻。torch.bfloat16数据格式,是指"Brain Floating Point"格式占位16位,由Google Brain发明,专门为TPU研制,这种格式有很多优越的性能(详见https://cloud.google.com/tpu/docs/bfloat16?hl=zh-cn);后面人们发现这种数据格式,在GPU框架下的训练速度很快,同时对性能影响很小。如Lightning库(https://lightning.ai/)专门为Pytorch加速时,常使用这种数据格式,我们尝试过,使用这种数据格式训练扩散模型,每迭代1000次,要比其他数据格式快10s左右(在3090上)。因此,这个数据格式nn.upsample这个类在GPU上计算不兼容,将极大地影响学习进程。注意:只是在GPU上,会冲突,在CPU上不会冲突。即:
import torch.nn as nn data=torch.rand(4,3,8,8,dtype=torch.bfloat16) up = nn.Upsample(scale_factor=2.0, mode="nearest") output_up = up(data) 在CPU上,上面这个运行是没有问题的,但是如果在GPU上,如:
data=torch.rand(4,3,8,8,dtype=torch.bfloat16).to('cuda:0') up = nn.Upsample(scale_factor=2.0, mode="nearest").to('cuda:0') output = up(data) 这将产生一个错误:RuntimeError: “upsample_nearest2d_out_frame” not implemented for ‘BFloat16’,这个错误的意思,就是在GPU上,upsample与BFloat16格式不匹配。而如果使用其他模式呢?如:mode=‘linear’(3D上采样), ‘bilinear’(4D上采样), ‘bicubic’(4D上采样) and ‘trilinear’(5D上采样),都会产生这样的错误。那有什么解决这个问题呢?这是深层的bug,很难根治,但我们可以重写mode='nearest’下的上采样,具体如下:
class UpsampleDeterministic(nn.Module): def __init__(self,upscale=2): super(UpsampleDeterministic, self).__init__() self.upscale = upscale def forward(self, x): ''' x: 4-dim tensor. shape is (batch,channel,h,w) output: 4-dim tensor. shape is (batch,channel,self.upscale*h,self.upscale*w) ''' return x[:, :, :, None, :, None]\ .
问题代码 每个学Go的都要踩的坑。
如下代码的输出, 我们在 for 循环中,使用了协程(go runtime)。
package main import ( "fmt" "time" ) func main() { values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) }() } time.Sleep(3 * time.Second) } 结果是
不是预想的 a,b, c 乱序
原因:因为这里的v 是一个指针变量, 每次循环都会重新赋值, 再执行每次的fmt.Println(v) 之前,v 的值就被改了, 这里被坑惨了。。。
解决手段 重新声明一个变量,传给协程。 代码修改后
package main import ( "fmt" "time" ) func main() { values := []string{"a", "b", "c"} for _, v := range values { go func(v string) { fmt.
深度学习——(6)pytorch冻结某些层的参数 文章目录 深度学习——(6)pytorch冻结某些层的参数问题出现一探究竟try 1. 不加requires_gradtry 2. 使用原来的格式更改(上面提到的)try 3. 定义no_grad列表将部分层冻结 在加载预训练模型的时候,有时候想冻结前面几层,使其参数在训练过程中不发生变化(不进行反向传播) 问题出现 在之前的blog——VGG16 图像分类中,使用如下语法
net = vgg(model_name=model_name, num_classes=1000,init_weights=True) # 没有训练好的权重,需要加载ImageNet的权重 net.load_state_dict(torch.load(pre_path, map_location=device)) for parameter in net.parameters(): parameter.requires_grad = False 注:上面语句的含义我的理解是将所有的层都冻结
但是,出现了一个神奇的问题,当我打印每一层是否已经冻结,所有层的require_grad都显示为True。**
这,这不就是意思把真个model已知都在反向传播吗??那我加载权重干什么??为了一探究竟,所以做了下面的尝试,想看看到底这个requires_grad是怎么一回事?
一探究竟 try 1. 不加requires_grad 当不加requires_grad的时候(上面代码不加后面两行),默认requires_grad=True,训练时候的loss值应该会很大,看看结果如何
确实很大!!!
try 2. 使用原来的格式更改(上面提到的) 如果使用前面提到的,那应该所有的参数都被冻结了,loss应该不会像上面那么大了,但是打印每一层的grad依然显示True。——反正就神奇!
for parameter in net.parameters(): #requires_grad==False 才不会反向传播,只训练下面部分(微调) parameter.requires_grad = False for name, value in net.named_parameters(): print('name: {0},\t grad: {1}'.format(name, value.requires_grad)) try 3. 定义no_grad列表将部分层冻结 这才是我的初衷,师兄也和我说先冻结前面的层,对后面的分类进行整体学习,然后放开全局进行微调。所以我的意愿是先冻结feature层进行学习。
no_grad = ['features.0.weight','features.0.bias', 'features.2.weight','features.2.bias', 'features.5.weight','features.5.bias', 'features.
01 传统企业数字化转型面临诸多挑战 即将过去的2023年,chatGPT大模型、数据资产入表等事件的发生,标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态,将推动生产方式、生活方式和治理方式深刻变革,对于国家、企业和个人都将产生重大影响。当前,我们正在处于迈向数字经济时代的关键阶段,企业和个人如何才能抓住这一重大机遇实现快速发展而不是被时代淘汰呢?这是值得我们每一个企业、每一个人关注和思考的问题。
国家高度重视数字经济发展,将发展数字经济作为发展新动能。2021年3月,国家发布《国民经济和社会发展第十四个五年规划和2035年远景目标纲要》,提出要“加快数字化发展,建设数字中国”。今年3月份,中共中央和国务院又印发了《数字中国建设整体布局规划》,吹响了全面建设数字中国、实现中国式现代化的号角。
随着数字经济的蓬勃发展,许多企业开始进行数字化转型,希望抓住时代机遇,实现华丽转身。但这一过程并不是一帆风顺的,会面临许多挫折甚至失败。根据世界著名咨询公司麦肯锡的数据,传统企业数字化转型的失败率非常高,甚至高达80%的企业都会经历失败。
为什么会这样呢?数字化转型是要通过数据和数字技术赋能实现业务变革,但很多企业都面临着战略缺失或不落地、业务流程割裂、数据孤岛、数据质量差、业务和科技两张皮、系统竖井林立等老大难问题。这些问题是多年发展中遗留下来的问题,可谓沉疴痼疾,阻碍了企业数字化转型的步伐。
02 SABOE数字化转型五环法为企业转型破除迷雾 那么企业如何实现有效的数字化转型?数字化转型其实是一项非常复杂的系统工程,需要一整套的方法论进行指导。国资委在《关于加快推进国有企业数字化转型工作的通知》中就明确指出:“加快企业数字化治理模式、手段、方法升级,以企业架构为核心构建现代化IT治理体系,促进IT投资与业务变革发展持续适配。”
SABOE数字化转型五环法就是一套以企业架构为核心的、端到端覆盖数字化转型全过程的方法论,它是企业架构和数字化转型专家武艳军先生以近20年的企业信息化工作经验和央企、银行数字化转型实践经验凝练而成。
SABOE数字化转型五环法,如下图所示。之所以称为五环法,是因为它主要是由5个环节来构成的,包括数字化战略(Strategy)、数字化架构设计(Architecture),数字化建设(Build)、数字化运营(Operation)和数字化评估(Evaluation),SABOE就是由五个单词的首字母组合而成。
传统企业数字化转型会存在很多误区,比如将数字化转型当做科技部门的事情,或者认为做几个数字化项目就行了,项目上线就转型成功了。或者让业务部门和科技部门各行其是,百花齐放。这些误区会导致企业投入了大量资源却难以见到转型效果,数字化转型成为一场运动。
SABOE数字化转型五环法认为,企业数字化转型要真正见效,并为企业长远发展奠定坚实基础,必须要关注五个方面:
一、企业转型从制定数字化战略开始,以战略指引企业的转型方向,并由企业老板、管理层亲身参与推进。在战略方面,SABOE五环法提出了四看三定的战略规划方法,并介绍了华为采用的业务领先者模型BLM。
二、企业转型要在战略规划基础上进一步开展数字化架构设计,融合组织、流程、数据IT,形成完整架构蓝图,然后再进行相关的建设。在架构方面,SABOE五环法提出了DEAF数字化企业架构框架,融合和升级了等传统企业架构方法,具有数据化、智能化、敏捷化、生态化和体验化等五个特点,更加适应数字经济时代的需要。
三、在建设过程中,要严格遵循架构蓝图,保证一张蓝图绘到底。同时,重视变革管理,破除变革阻力,保证转型工作顺利推进。SABOE五环法介绍了项目群管理、架构管控、变革管理、目标管理以及组织能力建设、数据能力建设等方法及案例,帮助企业完成架构项目群的实施工作。
四、企业转型要重视运营工作,通过运营将数字化能力与业务实际结合起来,实现业务价值。SABOE五环法提出了数字化运营的框架和方法,帮助企业开展用户价值运营、内外协同运营和科技运营为一体的数字化运营工作。
五、企业转型是一个长期持续的过程,要定期复盘总结。通过数字化评估,企业可以明确现状、分析差距,明确下一步发展思路。SABOE五环法提出了数字化成熟度评估模型UDM,帮助企业开展科学的数字化评估工作。
此外,SABOE数字化转型五环法还提出了两大周期、五大原则,为企业转型工作提供指导。SABOE数字化转型五环法覆盖了从战略制定、架构设计、能力建设、日常运营到复盘评估等环节,能够为企业转型提供完整、全面的指导。这一方法论已经总结成一本书《企业架构驱动数字化转型:以架构为中心的端到端转型方法论》,由机械工业出版社于近期出版,并在京东上架。
如果你是:
企业的CIO、CDO、架构师和工程技术人员;
企业各级管理人员、业务人员,
企业数字化转型提供服务的咨询和技术服务人员,
高校信息化等相关领域的教师和学生。
那么强烈推荐你阅读这本《企业架构驱动数字化转型:以架构为中心的端到端转型方法论》
京东正版链接:https://item.jd.com/14260994.html
这是一本以企业架构为核心切入点的数字化转型著作,是作者近20年的企业架构和数字化转型经验的集大成。企业架构是企业数字化转型的底层方法论,作者首先提炼出了数字化企业的架构框架DEAF,然后据此向前后延伸,总结出SABOE数字化转型五环法,涵盖企业数字化转型从顶层设计到落地实施、从建设到运营、从效果评估到迭代改进各个方面,为企业提供端到端的方法论指导。
端到端覆盖企业数字化转型全过程,从数字化战略开始,重点介绍数字化架构设计,但没有止步于蓝图规划,而是进一步延伸到数字化建设和运营,并通过评估为下一阶段转型做好准备。
融合了多学科知识,引入战略管理、企业架构、数据管理、项目管理、运营管理、数字化成熟度评估等方法并融合创新,为企业提供全视角、全体系的数字化转型指导方法。
推荐理由 作者背景资深:资深企业架构师和数字化转型专家,曾在中国出口信用保险公司和百信银行担任PMO团队负责人、科技规划团队负责人和企业架构师。
作者经验丰富:从事信息化工作近20年,从IT架构再造到企业级业务架构设计和实施,从传统金融企业到一线互联网银行,对数字化时代的企业架构有深厚沉淀。
独创方法论:从实践中提炼出数字化企业架构框架DEAF和SABOE数字化转型方法论,让企业数字化转型不走弯路、有法可依。
源于实践总结:书中的方法论和经验全部来自作者在央企和一线互联网企业的实践总结,在实践中被证明有效。
大量模型框架:作者将各种方法和重要知识点,全部提炼为框架和模型图,便于读者理解,让读者的学习事半功倍。
大量名企案例:书中分析了建设银行、招商银行、网商银行、百信银行、平安集团、太平洋保险、中国人保、中国人寿、美的集团、华为、三一集团等近20家知名企业的数字化转型案例。
一条普遍存在于嵌入式实时系统(RTOS)中的嵌套使用互斥量的bug分析_rt_mutex_take-CSDN博客
机器视觉 机器视觉是使用各种工业相机,结合传感器跟电气信号实现替代传统人工,完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成,特别是传统的3C制造环节,产品缺陷检测依赖于人眼睛来发现与检测,不仅费时费力还面临人员成本与工作时间等因素的制约。使用机器视觉来实现产品缺陷检测,可以节约大量时间跟人员成本,实现生产过程的自动化与流水线作业。
缺陷检测 常见得工业品缺陷主要包括划痕、脏污、缺失、凹坑、裂纹等,这些依赖人工目检(眼睛检测)的缺陷都可以通过机器视觉的缺陷检测算法来实现替代。当前工业缺陷检测算法目前主要分为两个方向,基于传统视觉的算法和基于深度学习的算法,前者主要依靠对检测目标的特征进行量化,比如颜色,形状,长宽,角度,面积等,好处是可解释性强、对样本数量没有要求、运行速度快,缺点是依赖于固定的光照成像,稍有改动就要改写程序重新部署,而且检测规则和算法跟开发者经验其主导作用。基于深度学习的缺陷检测算法刚好能弥补前者的不足之处,能够很好适应不同的光照,更好地适配同类缺陷要求,缺点是对样本数量有一定要求,对硬件配置相比传统也会有一定要求。
《OpenCV应用开发:入门、进阶与工程化实践》一书第十四 章 通过案例详细介绍基于OpenCV如何实现传统方式的缺陷检测跟基于深度学习的缺陷检测。
工业上常见缺陷检测方法
方法一:基于简单二值图像分析实现划痕提取,效果如下:
方法二:复杂背景下的图像缺陷分析,基于频域增强的方法实现缺陷检测,运行截图:
方法三:复杂背景下的图像缺陷分析,基于空域增强实现图像缺陷分析,针对复杂背景的图像,通过空域滤波增强以后实现缺陷查找,运行截图如下:
方法四:基于样品模板比对实现基于空域增强实现图像缺陷分析,通过二之分析与轮廓比对实现缺陷查找,运行截图如下:
方法五:基于深度学习UNet模型网络,实现裂纹与划痕检测,运行截图如下:
方法六:基于深度学习实例分割网络模型网络,实现细微缺陷检测,运行截图如下:
以上内容均来自最近出版的一本新书《OpenCV应用开发:入门、进阶与工程化实践》一书第十四章,分享给大家。
延伸阅读 OpenCV4应用开发:入门、进阶与工程化实践 贾志刚 张振 著 工业界和学术界专家联袂推荐 一线开发专家与金牌讲师撰写,一站式解决OpenCV工程化开发痛点 推荐语 以工业级视觉应用开发所需知识点为主线,讲透OpenCV相关核心模块,案例化详解1000个常用函数、深度学习知识以及模型的推理与加速。
本书专注于介绍OpenCV4在工业领域的常用模块,通过合理的章节设置构建了阶梯式的知识点学习路径。化繁就简、案例驱动,注重算法原理、代码演示及在相关场景的实际使用。本书还介绍了必备的深度学习知识与开发技巧,拓展OpenCV开发者技能。
国人开发的python窗体设计IDE,详情请看:PythonStudio:一款国人写的python及窗口开发编辑IDE,可以替代pyqt designer等设计器了-CSDN博客
这个软件作者还录制了入门的教程,跟着视频做,是个不错的python视频教程呢。从软件的使用,窗体的设计,到python的学习, 对小白来说很友好啊。
最最最主要的,这个软件自带很多皮肤,漂亮的皮肤。
我跟着教程做这个学生信息管理系统,感觉使用它来做python窗口软件程序,真的很方便快捷。
Project1.py
from delphivcl import * from Unit1 import * def main(): Application.Initialize() Application.Title = '学生管理系统' MainForm = Form1(Application) MainForm.Show() FreeConsole() Application.Run() if __name__ == '__main__': main() Unit1.py
import os from delphivcl import * from Unit2 import * from Unit3 import * from Unit4 import * from Unit5 import * class Form1(Form): def __init__(self, owner): self.Button7 = Button(self) self.Button6 = Button(self) self.Button5 = Button(self) self.
eclipse插件:macOS Eclipse Launcher 在windoes平台上,双击桌面eclipse的图标就可以启动多个eclipse示例,打开不同的workspace进行开发。在mac上,eclipse默认只能打开一个workspace,网上说可以通过如下方式打开不同的实例:
cd /Applications/eclipse/ open -n Eclipse.app 上面方式没有试过,今天找到了一个eclipse的插件——macOS Eclipse Launcher,可以解决mac上的多实例:
在eclipse市场上搜索,然后点击安装即可,
安装成功后,会在File菜单中出现一个open worksapces的选项:
目前该插件版本是3.0.3,只支持Eclipse IDE 2021-12以上版本。上面那种方式无法指定插件版本,这里提供一种离线安装的方法:
https://github.com/turesheim/eclipse-launcher/releases
比如下载3.0.2的release,解压后如下:(也可以在这里下载https://download.csdn.net/download/liuxiao723846/88640141)
将上述三个jar包分别拷贝到eclipse的安装目录的对应文件夹中:
lombok插件: 1、下载lombok.jar:Download 2、配置:
将lombok.jar放到eclipse的安装目录下(和eclipse.ini一个路径)
mv ~/lombok.jar /Applications/Eclipse.app/Contents/Eclipse/ 修改eclipse.ini文件,添加如下内容:
-Xbootclasspath/a:lombok.jar -javaagent:/Applications/Eclipse.app/Contents/Eclipse/lombok.jar 最后,重启eclipse即可。
pthread_cond_broadcast和pthread_cond_wait使用-CSDN博客
本文为官方文档直译版本。原文链接
Spring Boot入门指南 引言Spring Boot 简介系统要求Servlet 容器GraalVM 原生镜像 安装 Spring BootJava 开发人员安装说明安装 Maven安装 Gradle 安装 Spring Boot CLI手动安装使用 SDKMAN 安装!使用 OSX Homebrew 安装使用 MacPorts 安装命令行完成Windows Scoop 安装 开发你的第一个 Spring Boot 应用程序先决条件MavenGradle 使用 Maven 创建项目使用 Gradle 创建项目添加类路径依赖MavenGradle 编写代码@RestController 和 @RequestMapping 注解@SpringBootApplication 注解“main”方法 运行示例MavenGradle 创建可执行 JarMavenGradle 引言 如果您要开始学习 Spring Boot 或一般意义上的 “Spring”,请先阅读本节内容。它回答了 “是什么?”、"怎么做?"和 "为什么?"等基本问题。其中包括 Spring Boot 简介和安装说明。然后,我们将引导您构建第一个 Spring Boot 应用程序,并讨论一些核心原则。
Spring Boot 简介 Spring Boot 可帮助您创建可运行的基于 Spring 的独立生产级应用程序。我们对 Spring 平台和第三方库持开放的态度,因此您可以轻松上手。大多数 Spring Boot 应用程序只需要很少的 Spring 配置。
目录 前言上下文的概念k8s上下文kubectl命令行工具是如何连接k8s集群的?图解kubectlconfig配置文件使用kubectl config命令生成kubeconfig文件安装kubectl命令行工具kubectl管理多个k8s集群 前言 环境:centos7.9 k8s 1.22.7
上下文的概念 在计算机领域中,开发工程师进行代码开发的时候,我们经常会听到上下这个概念,那么,什么是上下文?
上下文,英文单词是context,释义为:背景,环境,上下文,语境。
context上下文可以被看作是传递信息的桶。 它通常用于传递不一定直接绑定到方法调用的东西,但仍然可以是相关的。
例如,你正在编写C#程序,那么可以将多个mysql的链接信息定义为上下文,这样,当代码里需要更新数据时,就可以通过调用上下文来链接到指定的数据库了。
k8s上下文 在k8s中,上下文(context)是集群信息、用户和命名空间的组合这样一个概念。
我们知道,在k8s集群中,可以有多个用户,而我们最熟悉的就是使用kubectl命令行工具去连接k8s集群,但是kubectl是怎么去连接k8s集群的呢?
答案就是,kubectl命令行工具通过kubeconfig配置文件去连接k8s集群,而这个kubeconfig配置文件(默认是~/.kube/config)其实就是上下文(context),这个kubeconfig配置文件内容其实就包含了集群信息、用户和命名空间等信息,当我们要使用不同的用户链接k8s集群时,我们只需要创建各个用户对应的kubeconfig配置文件,然后通过kubectl命令切换上下文即可,如kubectl config use-context default。这样,不同的用户就通过自己的kubeconfig配置文件连接上了k8s集群。
我们在使用kubectl命令行时,如kubectl get pod 不写命名空间,默认就是default命名空间,那么,这种默认是如何定义的呢?答案就是kubeconfig文件里面的上下文配置。
kubectl命令行工具是如何连接k8s集群的? kubectl命令行工具是通过kubeconfig配置文件来连接k8s集群的,这个kubeconfig配置文件默认就是/root/.kube/config,在我们使用kubeadm安装k8s集群时,默认自动生成了这个文件。
#查看集群kubeconfig配置文件 [root@matser ~]# ll /root/.kube/config -rw-------. 1 root root 6293 11月 1 2022 /root/.kube/config [root@matser ~]# cat /root/.kube/config apiVersion: v1 clusters: - cluster: certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR4RENDQXF5Z0F3SUJBZ0lVTVJKL0pIeFlMWjF0dVIwczZlekc4TVBLd2Nnd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2FERUxNQWtHQTFVRUJoTUNRMDR4RWpBUUJnTlZCQWdUQ1NCVGFHVnVlbWhsYmpFUk1BOEdBMVVFQnhNSQpVMmhsYm5wb1pXNHhEREFLQmdOVkJBb1RBMnM0Y3pFUE1BMEdBMVVFQ3hNR1UzbHpkR1Z0TVJNd0VRWURWUVFECkV3cHJkV0psY201bGRHVnpNQjRYRFRJeU1URXdNVEE0TXprd01Gb1hEVEkzTVRBek1UQTRNemt3TUZvd2FERUwKTUFrR0ExVUVCaE1DUTA0eEVqQVFCZ05WQkFnVENTQlRhR1Z1ZW1obGJqRVJNQThHQTFVRUJ4TUlVMmhsYm5wbwpaVzR4RERBS0JnTlZCQW9UQTJzNGN6RVBNQTBHQTFVRUN4TUdVM2x6ZEdWdE1STXdFUVlEVlFRREV3cHJkV0psCmNtNWxkR1Z6TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF2dE40ZUhTZmlpK3EKbUFKSkg5QmpOeWVBS2tzNk1Mb2o2U0g1TDVTbmZnOWtMWngrYU9xaHdzWXRWWW5IK0h6clRGR25JVUorZTJXbwo0djQ5QmFFblZwMmRhZzRQSkZqSU9VVkMzNEF1YjFhK2MxV3dJWkJrMDlvWUNFWEEwOWVCa1VHMmNWYTNDZHpZCmRORWpTK2xsZEdsbjY4eDdBZFFBTVVZQ2RTOFF2UXU5ZkJEcStEb3pNTWNhRWJ1Q29Yd2NVZ2ZrTnNIa2RXNmgKd1NwaVZhd2s2R25ZWEM0c0JlRU1pZWxaVmQ1Q055WDl1Z1pKYVFCUXBjQk40OWtlT2libCtXOEdzcXlKOE9INApwdW5qYVpYcVBiMzJVc05Xek52cVUyVDRQK21FN2tiTHpjbzZONjg1SkhLNXlPSEE0a2NiZ21JRnNOWU53b1BzCkI2bEMwOEJ6RVFJREFRQUJvMll3WkRBT0JnTlZIUThCQWY4RUJBTUNBUVl3RWdZRFZSMFRBUUgvQkFnd0JnRUIKL3dJQkFqQWRCZ05WSFE0RUZnUVVsTlNQVTFQL1plQnpnNkN4QS9KcFRFQkpJNDh3SHdZRFZSMGpCQmd3Rm9BVQpsTlNQVTFQL1plQnpnNkN4QS9KcFRFQkpJNDh3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUczcndDa2UyNzhxCkJNeVpoKzF0QjJncmU3d1BTTFJGRElnNHR0MHlMcnZGMnMrWVZtazk2SFZ4K3NOM2RpWm1jbXZSdnVpaEFFSU4KSjlwOHVwQ2U1cE15aXhzb0V5MDgrYUxiVjc4V3pwMHZGRVozOVpYbWt1T3haREpRTTk5QU8rYmdOQ0NJdFRPeApzVmJrNCt3SnF2RlpmWlFlTkFXODUzVEFjdjYvbHo3MG5ldDVZN2RjMG00ZGJxUU1uWkVrZzJvd1l1dys2MVBUCmdTd0NIanpMNDdLNytqeFVmZ3UvQTVhVzRqY0ZzUFphZTJrY2xURUc0RSt6QkdXb2l6aS96aFlVODdsdC9ESWwKZGZDQXJTVTg2dk5WSHRSMVl0SGhneHk2TGszWGFhdTZyUXBRQno4Wmt1a0lBWitMdzVSQkV6UVVocmVFeFRTbQpHNmdiaEVHVit1ST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo= server: https://192.168.118.140:6443 name: kubernetes contexts: - context: cluster: kubernetes user: cluster-admin name: default current-context: default kind: Config preferences: {} users: - name: cluster-admin user: client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQ0akNDQXNxZ0F3SUJBZ0lVQ3pzbmY3d2EzYzMvdU5sS21LaEVaeThWV0I0d0RRWUpLb1pJaHZjTkFRRUwKQlFBd2FERUxNQWtHQTFVRUJoTUNRMDR4RWpBUUJnTlZCQWdUQ1NCVGFHVnVlbWhsYmpFUk1BOEdBMVVFQnhNSQpVMmhsYm5wb1pXNHhEREFLQmdOVkJBb1RBMnM0Y3pFUE1BMEdBMVVFQ3hNR1UzbHpkR1Z0TVJNd0VRWURWUVFECkV3cHJkV0psY201bGRHVnpNQjRYRFRJeU1URXdNVEV3TkRVd01Gb1hEVE15TVRBeU9URXdORFV3TUZvd2JURUwKTUFrR0ExVUVCaE1DUTA0eEVUQVBCZ05WQkFnVENGTm9aVzU2YUdWdU1SRXdEd1lEVlFRSEV3aFRhR1Z1ZW1obApiakVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhEekFOQmdOVkJBc1RCbE41YzNSbGJURU9NQXdHCkExVUVBeE1GWVdSdGFXNHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEVEc1ODcKemNIa0IvYVh6Zit5MUVCd0QyREVVV1N0aUJKcm0ySTB4cjg5c0l2RjFkbmVyeWJkR1I0OER3N0FFWWhpVUNuTQpXSE9ZYlNkZnlxZFNTa3pmS0xQbytYd0Y2enpTZ2JJTldpRWRWYjVkWlhPenp3ck1BbHZqN0ZrZmQ5Vlh2NzdxCmhWSkkzR0h2SG5pZTdia1N0STY4aG85VkF3RmlzeUNBbllhQUlJS3kvY1k4V3p6Mk0xbmJDRU9nd0x2ZHBQQWoKT1VhZE1jYzFQR1NDTm9GZE1KZ0d1U3J4QXRVOHVqMnppN3N0ZjQxQzVSRENDbE84c09SbkpDbnNyU1I3SmZxegpMTW1MQmlvT2ZmVDFSWG9pSVhjU3FEY3REa1hCU2JDbHBrOUlFZUJGd3Q5SHNhdHZVZHZyWW8zQWVYTlF5NzBwCnh1cTB4MklqRzVvWFFJWEJBZ01CQUFHamZ6QjlNQTRHQTFVZER3RUIvd1FFQXdJRm9EQWRCZ05WSFNVRUZqQVUKQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0RBWURWUjBUQVFIL0JBSXdBREFkQmdOVkhRNEVGZ1FVMVMvcApvelBQc0VPTUJVR3ArN1RRL2tQTWVRY3dId1lEVlIwakJCZ3dGb0FVbE5TUFUxUC9aZUJ6ZzZDeEEvSnBURUJKCkk0OHdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBRDlXcG5xUzFRV0ZwMWVOeklOSmxuWWdDNnlnN0FhTVJuekYKNlhpdmtzK2xhcFZON0dsUS9mNXl6VDl5ZCtPU3poVDNodDJUYjVPYjBSM3BJekVLc3hFTVRvOGZsV1liN3BpdwpUclF5Zk12bmhmNCs1RGU0WDNBQitjTFUwc3NESlFVZjVBVGprMCthR0hZbXlGYmJ3TStEVFdZY2Z5a1RXMGRkCjhYNnNXK2JwWllLYzBuR3lqKy9tL0lSUVRWTVdGQWNvMUlqa0lVRThnSjMyK2ZDSzVQczFaVjVnMnV0NWVIcEwKdHRpRGtMTW9ONDVpMkI5UlhibGRkZEpPcStDOHNYVVN4Ykw1OEcvTlVPbUNqNFQvNm9FYUYvTDc2M3RtcFVELwpmbFhVeG5OU3F3SWtqNlo3d0FvUEJPbHBXK0pEeXRkMzgzYzFUWVNnU003WEhIMFd0Y0E9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBMHh1Zk84M0I1QWYybDgzL3N0UkFjQTlneEZGa3JZZ1NhNXRpTk1hL1BiQ0x4ZFhaCjNxOG0zUmtlUEE4T3dCR0lZbEFwekZoem1HMG5YOHFuVWtwTTN5aXo2UGw4QmVzODBvR3lEVm9oSFZXK1hXVnoKczg4S3pBSmI0K3haSDNmVlY3Kys2b1ZTU054aDd4NTRudTI1RXJTT3ZJYVBWUU1CWXJNZ2dKMkdnQ0NDc3YzRwpQRnM4OWpOWjJ3aERvTUM3M2FUd0l6bEduVEhITlR4a2dqYUJYVENZQnJrcThRTFZQTG85czR1N0xYK05RdVVRCndncFR2TERrWnlRcDdLMGtleVg2c3l6Sml3WXFEbjMwOVVWNklpRjNFcWczTFE1RndVbXdwYVpQU0JIZ1JjTGYKUjdHcmIxSGI2MktOd0hselVNdTlLY2JxdE1kaUl4dWFGMENGd1FJREFRQUJBb0lCQUVIRG1SZElRZDZIbklvdAo0am9UWlArRHl1RmRlYitWWkNlaGdEWndzNkxFSE1iRWw5cUhOZFFxdndCMnNHR2xGSmVMNFhtSEZIdW5oVnlTCkJRM2RsNVR0V1I1Nm1lZytIL1J6OHNPMkVCclRXem85SUk0ak1YbmNRa1Arbk1Ud3o4VkdObk5ZbFFtZG5lU2YKMlhPcEdyNTVBUDQ1N096T3d0KzhiYU9qYndMNmpNTWZqQ0s4bHJnNy9KQ25rSlZFNE55QTgvdkFLaXR1d09JTwpkOUhiWEZqUjg0MnVBYlVla3UzSzVCOW5JVkpiNy9lMXdNUjdxYyt6YVRxQWpqbEwxVFVKR3hpVTR5bTMwVzZzCmVNVUxCNHozRklpZ1RPN1l3dDdMZXBxd2hZN2JzTm44YXpqR05HcTNnZkoxVmIvZGtkbW85Sk5oOXFpd3dvdGMKT1ZGZVZBRUNnWUVBM3JSazdNTnYxMzdDVEFNWlpFM2JkbUFXWXdHUjNMRlgvbWhqYjhxUFptOG9tWmVkQzk2OQpBa3A1UlBucVBDQTU4NU93YVJsLzdQVzljNWcrdTcvdHcxRmkwOUhtSW1TNFhWOUlqcXBjUU5DWXhGbFVmcEhPClgvV0RXSWNtTSt2cmoxVUVUblE2cEJTbDdPWWgxT3ExVUlWOHZZK2UyLzlIUTRvSFFCMjZhcDBDZ1lFQThxdGkKRm04dUZpaVBzSmdVK2RpbE1jL0tpRnVWU0hqSGt0SkZ4Y1JBbTNxeEt2cFRUUzBuT2xDVFo3NU9Cc0hlMmFOLwpZZW1XcVQ0b2ZxMTRMZzBmZjZYRlcyeFBpS3Y4QVNyU01rK3RyaThMRmowVURYdDZxT2xKb3hPRzdOS0JBTkd1CmMwVE5JZ2FvOTFKbkk3UTRSd1JhRGhmZUdjOTlLM3liSFRjRlBIVUNnWUVBcFlPR21weHBpOHZ1bFZXY1VucTIKeDVTRUx0TGsyQk9KcFU5cHo1VEkzTVZ5ZEN4RkVLUmE3cy93cnYzYVF4TmtYbzMrQnk1bmIvSDIrbWxFL242WApNNWxTRE1Fcis1WEZtOGVNQWxQRXVuc05mcWd4YnR2b2VGTGNhamdQZ1hrdUdkbUNtTmd6R08wcm9CUXRRck9wClM0M1o5bncrQVowSkZyNEh3M1FVcnRVQ2dZQU9tS3h2dVFSR3BPM3ZxMVlucVJaV3BxOENBTEE4Q2JmSFp3cDMKV05TaUJZRSttb3dFS21FZnF0VVMrbWxyRXFJNjZSQ3liUUI0OFpveDlIRTBJK252SGFOL1drWjJiQkhlYUJyNApsNzVVcWRPNjVMV2VFZjFReDZkOFBhSnlBRDl1TXk2UkZHUmFWWmc0T0Nhb0NTRVJkSHVPT1hWTWpDUjFSeXQxCldHZmlPUUtCZ0d4S1M0WGM5ZHdRa05obERtejNRTEt6M1JqZCtNNU44UGRWTnJGVHU0VlJhUUlEbzdFY0Fra0gKcjR5R1F6YWREU2xSektJWm1mR2FSam9Rd3ZFTFYxVy90NXBkSnltQXkrT2JhVVhOcDZlb1A2TlJQRlFsOE1qMAo3cC9DQVRUZmMxWWgxSE9CVkd5UHU4YUlHNFNkS1poajJxMzdsTW1KN0lZM01sSDBqNTNiCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg== [root@matser ~]# 图解kubectlconfig配置文件 下面借用一张其他楼主分享的截图:
determine_dl_model_detection_param 目标检测的数据准备过程中的有一个库函数determine_dl_model_detection_param
“determine_dl_model_detection_param” 直译为 “确定深度学习模型检测参数”。
这个过程会自动针对给定数据集估算模型的某些高级参数,强烈建议使用这一过程来优化训练和推断性能。 过程签名 determine_dl_model_detection_param( : : DLDataset, ImageWidthTarget, ImageHeightTarget, GenParam : DLDetectionModelParam) 描述 该过程用于分析提供的深度学习数据集(DLDataset)以进行目标检测,以确定与锚点生成相关的模型参数。生成的DLDetectionModelParam是一个包含建议值的字典,用于各种目标检测模型的参数。
参数 DLDataset:用于目标检测的深度学习数据集的字典。ImageWidthTarget:作为模型输入的目标图像宽度(经过预处理后的图像宽度)。ImageHeightTarget:作为模型输入的目标图像高度(经过预处理后的图像高度)。GenParam:包含通用输入参数的字典。DLDetectionModelParam:包含建议的模型参数的输出字典。 参数解析 第一个参数DLDataset,就是我们读取到的数据集,数据集 (数据集就是我们标注好的图片数据集, 我们可以通过 read_dict() 读取halcon提供的数据集。也可以通过 read_dl_dataset_from_coco 读取通用的coco数据集)
图片缩放 第二,第三个参数,是图片的大小设置。我们知道数据集里是有描述图片原始大小的数据的。这里需要你输入预处理后图片的大小,也就是说,你可以通过这两个参数对图片进行缩放。一般我们会设置一个较小的大小,已加快训练的速度!
GenParam GenParam 是一个字典,包含一些通用的输入参数,可以用来影响 determine_dl_model_detection_param 过程中参数的确定。
使用输入字典GenParam,可以进一步影响参数的确定。可以设置不同的键值对来影响锚点生成和模型参数的确定。
你可以根据你的需求在 GenParam 中设置不同的键值对来调整算法的行为。以下是键和对应的值:
‘anchor_num_subscales’: 整数值(大于0),确定搜索锚点子尺度数量的上限值。默认值为3。
‘class_ids_no_orientation’: 元组,包含表示类别标识的整数值。设置那些应该忽略方向的类别的标识。这些被忽略类别的边界框被视为方向为0的轴对齐边界框。仅适用于检测实例类型为’rectangle2’的情况。
‘display_histogram’: 确定是否显示数据直方图以进行数据集的视觉分析。可能的值有’true’和’false’(默认为’false’)。
‘domain_handling’: 指定图像域的处理方式。可能的值有:
'full_domain'(默认):图像不被裁剪。'crop_domain':图像被缩小到其域定义。'ignore_direction':布尔值(或’true’/‘false’),确定是否考虑边界框的方向。仅在检测实例类型为’rectangle2’的情况下可用。参考 ‘get_dl_model_param’ 文档以获取有关此参数的更多信息。 ‘max_level’: 整数值(大于1),确定搜索最大层级的上限值。默认值为6。
‘max_num_samples’: 整数值(大于0或-1),确定用于确定参数值的最大样本数。如果设置为-1,则选择所有样本。请注意,不要将此值设置得太高,因为这可能导致内存消耗过大,对机器造成高负载。然而,如果 ‘max_num_samples’ 设置得太低,确定的检测参数可能无法很好地代表数据集。默认值为1500。
‘min_level’: 整数值(大于1),确定搜索最小层级的下限值。默认值为2。
‘preprocessed_path’: 指定预处理目录的路径。预处理目录包含DLDataset的字典(.hdict文件),以及一个名为’samples’的子目录,其中包含预处理的样本(例如,由过程’preprocess_dl_dataset’生成)。对于已经预处理的数据集,将忽略输入参数ImageWidthTarget和ImageHeightTarget,并可将它们设置为[]。仅当数据集已经为应用程序进行了预处理时,此参数才适用。
‘image_size_constant’: 如果将此参数设置为’true’,则假定数据集中的所有图像具有相同的大小,以加速处理。图像大小由数据集中的第一个样本确定。此参数仅在数据集尚未预处理且’domain_handling’为’full_domain’时适用。默认值为’true’。
‘split’: 确定用于分析的数据集拆分。可能的值包括 ‘train’(默认)、‘validation’、‘test’ 和 ‘all’。如果指定的拆分无效或数据集未创建拆分,则使用所有样本。
‘compute_max_overlap’: 如果将此参数设置为’true’,将为数据集确定检测参数 ‘max_overlap’ 和 ‘max_overlap_class_agnostic’。
尽管 SQL 很受欢迎并取得了成功,但它仍然是一项悖论研究。它可能笨重且冗长,但开发人员经常发现它是提取所需数据的最简单、最直接的方法。当查询编写正确时,它可能会快如闪电,而当查询未达到目标时,它会慢得像糖蜜。它已经有几十年的历史了,但新功能仍在不断增加。
这些悖论并不重要,因为市场已经表明:SQL 是许多人的首选,即使有更新且可以说更强大的选项。世界各地的开发人员(从最小的网站到最大的大型企业)都了解 SQL。他们依靠它来组织所有数据。
SQL 的表格模型占据主导地位,以至于许多非 SQL 项目最终都添加了 SQLish 接口,因为用户需要它。 NoSQL 运动也是如此,它的发明是为了摆脱旧范式。最终,SQL 似乎获胜了。
SQL 的限制可能还不足以将其扔进垃圾箱。开发人员可能永远不会将所有数据从 SQL 中迁移出来。但 SQL 的问题足够真实,足以给开发人员带来压力、增加延迟,甚至需要对某些项目进行重新设计。
以下是我们希望退出 SQL 的九个原因,尽管我们知道我们可能不会这样做。
SQL 让事情变得更糟的 9 种方式 表格无法缩放SQL 不是 JSON 或 XML 原生的编组是一个很大的时间消耗SQL 不实时JOINS 很头疼列浪费空间优化器只是有时有帮助非规范化将表视为垃圾附加的想法可能会破坏你的数据库 表格无法缩放 关系模型喜欢表,所以我们不断构建它们。这对于小型甚至普通大小的数据库来说都很好。但在真正大规模的情况下,该模型开始崩溃。
有些人尝试通过将新旧结合起来来解决问题,例如将分片集成到旧的开源数据库中。添加层似乎可以使数据更易于管理并提供无限的规模。但这些增加的层可以隐藏地雷。 SELECT 或 JOIN 的处理时间可能截然不同,具体取决于分片中存储的数据量。
分片还迫使 DBA 考虑数据可能存储在不同机器甚至不同地理位置的可能性。如果没有意识到数据存储在不同的位置,那么开始跨表搜索的经验不足的管理员可能会感到困惑。该模型有时会从视图中抽象出位置。 某些 AWS 计算机配备24 TB RAM。为什么?因为有些数据库用户需要这么多。他们在 SQL 数据库中拥有如此多的数据,并且在一台机器的一块 RAM 中运行得更好。
SQL 不是 JSON 或 XML 原生的 SQL 作为一种语言可能是常青树,但它与 JSON、YAML 和 XML 等较新的数据交换格式的配合并不是特别好。所有这些都支持比 SQL 更分层、更灵活的格式。 SQL 数据库的核心仍然停留在表无处不在的关系模型中。
参考文章:Flink集群部署详细步骤
简单Flink集群配置 生产中基本很少使用这种模式,大多数都是基于 YARN来进行提交任务,下面主要给出 YARN的任务提交配置方式。 下载Flink压缩包 下载地址: Downloads | Apache Flink。 CDH集群环境 hadoop2.6, Scala2.11,所以下载: flink-1.5.0-bin-hadoop26-scala_2.11.tgz 解压 [root@hadoop2 opt]# tar -zxf flink-1.5.0-bin-hadoop26-scala_2.11.tgz [root@hadoop2 opt]# cd flink-1.5.0 配置master 选择一个master节点, 配置conf/flink-conf.yaml
[root@hadoop2 flink-1.5.0]# vi conf/flink-conf.yaml # 设置jobmanager.rpc.address 配置项为该节点的IP 或者主机名 jobmanager.rpc.address: 10.108.4.202 配置slaves 将所有的worker节点(TaskManager)的IP或者主机名(一行一个)填入conf/slaves 文件中。
[root@hadoop2 flink-1.5.0]# vi conf/slaves 10.108.4.203 10.108.4.204 启动flink集群 [root@hadoop2 flink-1.5.0]# bin/start-cluster.sh 停止flink集群 [root@hadoop2 flink-1.5.0]# bin/stop-cluster.sh 查看更多可用的配置项: Apache Flink 1.5 Documentation: Configuration
以下都是非常重要的配置项:
1、 TaskManager总共能使用的内存大小(taskmanager.heap.mb) 2、每一台机器上能使用的 CPU 个数(taskmanager.numberOfTaskSlots) 3、集群中的总 CPU个数(parallelism.default) 4、临时目录( taskmanager.
1 行多选-点击checkbox 添加一个 el-table-column,设 type 属性为 selection 即可
<template> <div class="box"> <el-table :data="tableData" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" /> <el-table-column prop="id" label="Id" width="180" /> <el-table-column prop="name" label="Name" width="180" /> <el-table-column prop="age" label="Age" /> </el-table> <div>选择结果: {{ multipleSelection }}</div> </div> </template> <script setup lang="ts"> const tableData = [ { id: 1, name: "张三", age: 10, }, { id: 2, name: "李四", age: 11, }, { id: 3, name: "王五", age: 12, }, { id: 4, name: "