准备工作: 去百度AI注册账号并登录
选择 开放能力-->图像技术-->人像动漫画
选择 立即使用 点击红框内 去领取 领取资源 领取成功后去 应用列表--> +创建应用 填写相应信息后即可查看你的 API Key 和 Secret Key
操作步骤: 1.安装python-office 安装很简单,在有python环境的电脑上,使用windows命令行(我使用的是pycharm里的命令行)执行下面这一行命令即可安装python-office。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple python-office -U 2.pycharm输入以下代码生成动漫头像
# 导入这个库:python-office,简写为office import office office.image.img2Cartoon(path='',client_api='你的api key', client_secret='你的secret key') # 参数说明: # path: 真人照片/PDF的路径,例如:D://image//人.jpg # client_api: '你的api key' # client_secret: '你的secret key' 运行代码,在工作区路径下得到一张转换后的动漫头像result.jpg
错误总结: 1. python-office出错:ValueError: check_hostname requires server_hostname(其中解决方法之一)
解决方法:安装python-office一直提示错误发现是一个非常简单的问题,由于我开机自动启动VPN,结果导致连不上下载资料的服务器,只需将VPN关掉即可
2. python-office库出错
3.AttributeError: module 'office' has no attribute 'image'
第2和3点错误好像是因为我最开始安装的时候使用命令pip install python-office有问题,只需要使用我上面贴出来的命令重新安装python-office即可:
大数据——四种数据库(MySQL,HBase,MongoDB,Redis)操作实例 问题描述: student文档如下:
1. 根据上面给出的文档信息,用MongoDB模式设计student集合。
a) 设计完后,用find指令浏览集合的相关信息,给出截图。
b) 查询zhangsan 的Computer成绩,给出截图。
c) 修改lisi的Math成绩,改为95,给出截图。
2. 根据上面已经设计出的student集合,用MongoDB的JAVA客户端编程;
a) 添加数据:name: scofield,English:45 Math:89 Computer:100
b) 获取scofield的English成绩信息
问题解决: 1. 根据上面给出的文档信息,用MongoDB模式设计student集合。 设计集合代码:(复制粘贴代码时,要删除注释部分,下同)
hadoop@ -VirtualBox:~$ mongo//启动MongoDB
在>提示符下,分别键入如下语句:
> use Stu //数据库Stu被自动创建
> db.createCollection('student')//创建集合student
> show dbs//显示所有数据库
> use Stu
> var stus=[{"name":"zhangsan","scores":{"English":69,"Math":86,"Computer":77}},{"name":"lisi","score":{"English":55,"Math":100,"Computer":88}}] //注意,这个是一整行
> db.student.insert(stus)//向集合中插入数据
对应的Linux终端运行截图:
a) 设计完后,用find指令浏览集合的相关信息,给出截图。
> db.student.find().pretty() //显示集合信息
对应的Linux终端运行截图:
b) 查询zhangsan 的Computer成绩,给出截图。
> db.student.find({"name":"zhangsan"},{"_id":0,"name":0}) //查询张三的成绩,不显示id和姓名
对应的Linux终端运行截图:
c) 修改lisi的Math成绩,改为95,给出截图。
> db.student.update({"name":"lisi"}, {"$set":{"score.Math":95}} ) //修改李四的数学成绩
对应的Linux终端运行截图:
__author__ = 'Jeff.xie' import os from selenium import webdriver from time import sleep from selenium.webdriver.common.by import By # 新建一个txt,里面内容如下,然后命名为upload.html # <h2>upload file<hr> # <input type="file"> driver = webdriver.Chrome() driver.get("file:///D:/upload.html") #加载本地文件 input_ele = driver.find_element(By.XPATH,"/html/body/h2/input") # input_ele.send_keys(r"D:/Setting.png") #注意:文件一定要绝对路径 # 如果想要使用相对路径,可以把图片放在代码中,然后获取当前项目所在路径,与代码中图片的相对路径拼接 print(os.getcwd()) project_Path = os.getcwd() pic_abs= project_Path+"/java.jpg" input_ele.send_keys(pic_abs) sleep(1) 为什么要使用绝对路径 selenium 原理: python 控制chromedriver, chromedriver控制chrome浏览器 如果是相对路径就会有歧义,不知道是相对于谁的路径 webdriver_helper 的基本使用 搭建环境,需要Python3.9以上 pip install webdriver-helper from webdriver_helper import debugger,get_webdriver #get_webdriver()后,不使用with也会自动关闭浏览器 #with get_webdriver() as driver: # driver.
1、添加连接权限 服务器端启动MySQL后,用root用户连接
mysql -u root -p
输入密码进入MySQL终端,执行以下命令
use mysql; select host from user where user='root'; 执行下列语句更新可远程访问该服务器的主机的ip范围
update user set host = '%' where user = 'root'; flush privileges; 2、创建连接 先在控制台创建一个测试用的MySQL数据库test,然后在DBeaver中创建连接,配置如图
把allowPublicKeyRetrieval的值设为TRUE
测试连接后即可创建连接。
电脑如何录制屏幕视频?很多时候我们除了需要使用到手机录屏之外,还需要使用到电脑录屏。比如录制软件的视频教程,然后进行剪辑分享。这个时候采用简单的电脑录屏方法,会让我们的操作更为简洁。这里小编就来给大家分享介绍几个简单的电脑录屏的方法。
方法一:使用电脑自带工具Xbox进行录制 相信很多小伙伴们还不知道电脑自带的录制功能吧,小编也是最近才得知的。首先我们我们在键盘上同时按下win+G快捷键,唤出我们的电脑录屏界面。在录制界面中,我们可以根据自己的需要设置相关的参数。设置好之后,直接点击录制按钮即可。
方法二:使用专业的屏幕录制软件 第一步 打开我们电脑上的“迅捷视频剪辑软件”,打开软件之后,进入到软件的操作页面,点击【屏幕录像】操作。
第二步 接下来我们根据自己的需要进行录屏设置,内设视频选项、音频选项、画质设置和录制格式。选择好之后,我们直接点击下方的【开始录制】即可。录制完成后的视频文件会自动保存到电脑桌面,我们也可以将其加入到剪辑素材进行剪辑。
方法三:借助PPT制作工具 我们在电脑上新建一个PPT文档,进入文档之后,点击上放的【插入】-【屏幕录制】选项。我们可以看到会在页面当中弹出录制页面,我们设置相关的参数,并点击【开始录制】即可。
以上就是小编给大家分享的电脑录制屏幕的具体操作方法了,这三个方法都还是比较好用的。
前言:不记得什么什么时候的东西了,拿出来写到CSDN上面,免得堆乱桌面。
1、PDF隐写
查看详细信息,不过什么都没有,就不放图了
啥也没有,PDF转文本看看,可能是用了什么东西夹在里面
Flag:ag
2、数据读取:
打开是这么个玩意
file查看是什么东西,发现是个数据文件
vim直接查找flag
挂在然后查看就好
3、图片隐写
先看详细信息,发现了一串数字
binwalk检测,解压
发现了一个flag不过里面没有东西,还有一个压缩包不过打开需要密码
估计那段神秘代码就是密码了,73646E6973635F32303138,带有E可能是Hex所以拿去Hex转字符看看
4、图片隐写2:
流程走一遍,没什么发现就不发图了,参考第一题的流程。Winhex打开看看,看着越看越熟悉,像是之前看过的一个解题
果然,是网鼎杯赛题。。。大致流程是PNG图片,只不过被颠倒了正常来讲png的HEX文件头为89 50 4E 47 这里是被颠倒了,所以大致上就是找文件头文件尾讲所有Hex进行提取重新排序即可
5、图片隐写3:
先查看详细信息,不过没有什么有用的东西,用binwalk看看。
好像也没有,换个工具foremost继续
分离出来了一些文件
Spring Security 自定义登录认证(扩展多种方式) https://gitee.com/markix/spring-security-multiple-auth
自定义登录认证 用户名+密码工号+密码手机号+验证码邮箱+验证码 核心组件 NameAuthProcessor 用户名+密码认证NoAuthProcessor 工号+密码认证EmailAuthProcessor 邮箱+验证码认证PhoneAuthProcessor 手机号+验证码认证 封装成一个通用框架 spring-security-login-extension
实现思路 自定义AuthenticationFilter 提供认证接口,用于构建自定义AuthenticationToken,通过自定义AuthenticationProvider对自定义AuthenticationToken进行认证将 Filter 和 Provider 组装到过滤器链中,使之生效。放行必要的路径 自定义认证抽象层 AuthProcessor:认证处理器接口,用于抽象不同认证方式!MultipleAuthenticationFilter:认证过滤器,维护多个认证处理器 List,支持多种认证MultipleAuthenticationProvider:认证提供者,实际上将认证代理给 AuthProcessorMultipleAuthenticationFilterConfigurer:自定义认证配置器,需要在 SecurityConfiguration 应用! 示例 每种认证方式只需要实现 AuthProcessor 接口
见 spring-security-login-extension-samples 项目
你还在为文献管理而烦恼吗?你还在网上一条一条地搜文献的PDF然后保存到本地,苦恼于管理起来麻烦而且换了台电脑就无法访问了吗?这里推荐使用文献管理器呢,一键导入文献PDF及其相关信息,轻松管理海量文献,妈妈再也不用担心我的文献调研啦。其实除了zotero还有其他的文献管理器,这里就只介绍这一个啦
zotero软件下载后可以在word,网页中有强大的应用,可以快速导入和引用文献,绝对是文献管理的好帮手,在做文献调研时能极大的增加效率。这里记录一下昨天老师教我的zotero使用方法,和网络上的教程基本一致
Zotero插件在edge浏览器的下载和使用 Zotero插件支持多种浏览器,其中包含了Microsoft edge和Chrome,因为我懒得装VPN,就没有用Chrome浏览器。下载方式也很简单zotero下载地址.
下载Zotero到本地(左边),再在浏览器安装插件(右边),两个都要下噢!
安装好之后没有问题就会直接在下图红圈处出现一个按钮啦!
试着使用一下这个按钮,它会自动识别在网页打开的PDF文献以及文献相关的作者信息,发表年份,发表期刊等等,只需要一键导入即可
使用实例 1.搜索你想要的文献(以我们图书馆为例)
2.找到文献来源期刊网址,打开网站
3.点击PDF,一定要在PDF页面出来后再点击按钮,否则存储到Zotero中的时候没有原文PDF
4.点击图中的小按钮
下图中IEEE Xplore Full text PDF存储的是原文PDF文件(应该是在zotero云库里面),总之换了电脑同步之后也能在另外一台电脑上访问PDF文件,IEEE Xplore Abstract Record双击后会进入第2步的网站,作者信息什么的就是在这里面读取出来的。这两个东西共同存在于一个条目下面
4.大功告成(保存到了高亮部分,作者信息,摘要什么的都在屏幕右侧)接下来就可以做笔记,添加标签啦!记得点击右上角那个绿色的同步按钮,随时保存噢!
扩展资料(Zotero 300MB的文件容量上限存储PDF文件远远不够,氪金又太贵了,120美元一年无限制容量使用权,土豪或者科研经费足够请无视,否则可以使用Zotero + 坚果云)
Zotero插件在word的下载和使用 这一步就是在写文献调研报告的时候用的了,暂时还没用到这里,用到这里的时候再更新
最后讨论一点相关的,文献调研ppt的制作
10月份因为疫情原因、又开启了居家办公模式,空闲之余,与其选择“躺平”,不如去做一些有意义的事情,内心的想法驱使着我去做些什么,但是又没有合适的素材,直到接手了最近的一个可视化项目,一个图表勾起了我无限的好奇心,本着对技术死磕到底的想法,于是开启了我的探索之旅。具体的原型效果如下:
关于此类进度条的实现方式,在我之前的章节(SVG绘制圆环进度条)中也有涉及,本章则另辟蹊跷,从另一个维度简单介绍一下CSS锥形渐变(conic-gradient)在可视化图表中的应用场景。本章依旧采用vue+原生css的形式进行案例展示、在了解本章节之前,需要对vue框架、css变量、css属性conic-gradient有一定程度的认识。案例实现效果如下:
实现思路:首先从原型图入手,我们可以将效果图进行拆分,背景圆环+进度圆环+进度条开始处小圆点(和边框一样大小、模拟圆角效果)+进度尾部圆点+进度尾部小眼睛+进度条中心内容。因此我们只需要将以上几个小功能点实现即可
1.背景圆环:div添加背景颜色+圆角
2.进度圆环:使用css属性conic-gradient进行进度控制
3.进度条开始处小圆点:使用伪元素(::before或::after)或div均可,定位解决
4.进度条尾部圆点:相当于在一个指针上添加一个小球,然后将指针根据数值旋转一定的角度
5.进度尾部小眼睛:使用指针头部小球元素的伪元素进行定位
6.进度条中心内容:可根据需要,使用插槽的形式解决
首先看一下前两个图表的具体实现细节:
<!-- demo1.vue --> <template> <div class="chart-box" :style="styObj"> <!-- 进度条部分 --> <div class="outer-box"> <div class="inner-box"> <div class="pointer-box"></div> </div> </div> <!-- 插槽内容 --> <div class="slot-content"> <slot></slot> </div> </div> </template> <script> export default { props: { rate: { type: Number, default: 0, }, config: { type: Object, default: () => { return {}; }, }, }, computed: { styObj() { let rate = 0; if (this.
Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。
如果想实现并发线程安全有两种方法:
map加互斥锁或读写锁标准库sync.map(Go1.19+新特性) sync.map源码 https://github.com/golang/go/blob/master/src/sync/map.go
sync.map 实现原理及优化 利用map只读不用锁,通过冗余 read 和 dirty 两个字段将读写分离,读的数据存在只读字段 read 上,将最新写入的数据则存在 dirty 字段上,只在dirty读写上加锁,提高程序只读效率。读取时会先查询 read,不存在再查询 dirty,写入时则只写入 dirty读取 read 并不需要加锁,而读或写 dirty 都需要加锁另外有 misses 字段来统计 read 被穿透的次数(被穿透只需要读 dirty 的情况),超过一定次数则将 dirty 数据同步到 read 上对于删除数据则直接通过标记来延迟删除 具体数据结构可参考:
https://blog.csdn.net/u010853261/article/details/103848666
https://www.haohongfan.com/docs/gohandbook/sync-chapter/2021-05-10-sync-map/
sync.map 使用场景 map+Mutex: 通过Mutex互斥锁来实现多个goroutine对map的串行化访问,读写都需要通过Mutex加锁和释放锁,适用于读写比接近的场景
map+RWMutex:通过RWMutex来实现对map的读写进行读写锁分离加锁,从而实现读的并发性能提高,同Mutex相比适用于读多写少的场景
sync.Map:底层通分离读写map和原子指令来实现读的近似无锁,并通过延迟更新的方式来保证读的无锁化。读多修改少,元素增加删除频率不高的情况,在大多数情况下替代上述两种实现
sync.map 使用方法如下 package main import ( "fmt" "sync" ) func main() { var m sync.Map //添加一个元素 m.Store(1, "a") m.Store("a", 2) //读取一个元素 fmt.Println(m.Load(1)) //a true fmt.Println(m.Load("a")) //2 true //读取不存在的元素 fmt.
第一步:使用 vue init webpack-simple lyh-yan-ui 初始化项目 提示: 不要用 vue init webpack lyh-yan-ui 初始化项目,因为我们就开发个组件,不需要那么多配置,配置多了修改起来也麻烦,webpack-simple足够了。
初始项目过程中,按照提示输入项目信息,
初始化成功后,输入 npm install , npm run dev 让项目跑起来,如下图:
第二步:修改文件目录 1.在src目录下新建components文件夹,然后在此文件夹下建立你的组件文件,其中我的组件有多个,所以每个组件新建一个文件夹,比如button组件,新建button文件夹,文件夹中新建button.vue文件和index.js文件;
2.在webpack.config.js同级目录(也是该组件的根目录)下新建 index.js文件, index.js是把所有的组件文件暴露出去的出口。
修改完之后的文件目录如下图所示:
第三步:修改文件内容,配置 1.button.vue内容如下(注意要添加组件的name,后面要用到):
//组件只是最基础的内容,自己要实现的功能自己添加 <template> <div> <button class="y-button" :class="classes" @click="handle"> <y-icon v-if="icon" :icon="icon"></y-icon> <y-icon v-if="loading" icon="y-icon-jiazaizhong"></y-icon> <!-- 加载中按钮设置 --> <div :class="{ content: icon || loading }"> <slot></slot> </div> </button> </div> </template> <script> import YIcon from "../icon/icon.vue"; export default { name: "YButton", components: { YIcon, }, </script> 2.
1、目录结构
pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等
manifest.json 文件是应用的配置文件,用于指定应用的名称、图标、权限等。
App.vue是我们的跟组件,所有页面都是在App.vue下进行切换的,是页面入口文件,可以调用应用的生命周期函数。
main.js是我们的项目入口文件,主要作用是初始化vue实例并使用需要的插件。
uni.scss文件的用途是为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss文件里预置了一批scss变量预置。
pages所有的页面存放目录
static静态资源目录,例如图片等
components组件存放目录
2、条件注释定义
条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。
条件注释的语法
写法:以 #ifdef 或 #ifndef 加 %PLATFORM% 开头,以 #endif 结尾。
#ifdef:if defined 仅在某平台存在
#ifndef:if not defined 除了某平台均存在
%PLATFORM%:平台名称 例:APP-PLUS 仅出现在 App 平台下的代码
3、事件总线
除了父子组件传参之外,兄弟组件之间共享信息也是我们经常会遇到的。如果遇到这类问题,我们现在可以借助vuex,或者把数据统一放在他们父组件中处理。这两种方式都可以解决兄弟组件传递信息的问题。我们今天要介绍的是另一种方式-事件总线,事件总线也是我们开发过程中经常会用到的一种开发模式。
什么是事件总线?
事件总线可以作为组件沟通的桥梁,就像是所有组件共用相同的事件中心,可以向该中心注册发送事件或接收事件,所以组件都可以上下平行地通知其他组件,但也就是太方便所以若使用不慎,就会造成难以维护的灾难,因此才需要更完善的Vuex作为状态管理中心,将通知的概念上升到共享状态层次。
用法:
父元素中
在son中定义
uni.$emit('update',{msg:'页面更新'}) 在son1的生命周期写上下面代码 uni.$on('update',function(data){
console.log('监听到事件来自 update ,携带参数 msg 为:' + data.msg);
})
1, 找到mqtt 的 /etc/plugins/ 文件夹下的emqx_auth_mnesia.conf 文件
2 ,vim打开编辑该文件 根据例子添加账号密码 并保存
auth.user.1.username = xxx auth.user.1.password = 123456 3, 打开EMQX后台, 找到插件 ,启动该插件, 随后就可以了
4,修改etc/emqx.conf 配置文件 如下
下面是禁用匿名连接,禁用之后, 配置的 账号密码才能生效
vim 查找 /allow_anonymous
# etc/emqx.conf ## Allow anonymous authentication by default if no auth plugins loaded. ## Notice: Disable the option in production deployment! ## ## Value: true | false allow_anonymous = false ## Allow or deny if no ACL rules matched. ## ## Value: allow | deny acl_nomatch = deny 5, 重启emqtt服务,生效
这里有两种方法,第一个是通过命令窗口终止,第二个是使用任务管理器。
1、端口被占用,可以用cmd(window+R)
第一步:输入netstat -ano,找到被占用的端口号
netstat -ano 也可以输入netstat -aon|findstr "端口号",来获取
例如:
netstat -aon|findstr 8080 第二步:tasklist|findstr "查询出的 PID",也就是刚刚查询出的13812,输入后查到了占用8080端口的程序。
例如:
tasklist|findstr 13812 第三步:taskkill /f /t /im "要结束的程序名称"
例如:
taskkill /f /t /im java.exe 可以看到8080的程被终止了。
2、可以打开任务管理器,结束“javaw.exe”这个进程。
通过输入netstat -aon|findstr "端口号"找到对应的 “PID”
这里我找到的是14152,打开任务管理器,找到对应的PID,可以看到PID对应的的名称是java.exe
然后鼠标右键结束进程就可以了
一、关键概念
坐标转换:d3投影坐标转换将地图坐标转换为模型坐标,转换关键代码
const projection = d3.geoMercator().center(config.projection.center).scale(config.projection.scale).translate(config.projection.translate) let [x, y] = projection([geometry.longitude, geometry.latitude]) 三维对象:存储点精灵、线、面
材质:点线面材质
光照:环境光、点光、半球光
二、包结构设计
三、封装代码类实现
/** * Created by zdh on 2022/04/27 * 功能说明:three创建地图 */ import * as THREE from 'three' import { FontLoader } from 'three/examples/jsm/loaders/FontLoader' import * as d3 from 'd3' import TWEEN from '@tweenjs/tween.js' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js' import { CSM } from 'three/examples/jsm/csm/CSM.js' import { CSMHelper } from 'three/examples/jsm/csm/CSMHelper.js' import { config } from '.
又来记笔记 大佬们~~
近期启用之前的项目上架,首先上架的是华为市场,发现一大堆问题,各种审核被拒,搞得问候了审核员的亲戚几次,一次给你来一两条,不会全部一次性给完。奈何别人的大公司....
大致总结了审核失败的一些原因:
1、申请的应用权限必须在隐私政策中说明使用内容、使用场景、使用方式。
2、应用中如是有账号登录注册的,同时也需要有账户注销功能;
3、应用中有聊天相关的,必须要有举报功能;
4、所有的权限获取必须在同意隐私政策之后再获取;
5、应用截图不能有测试数据;
........还有很多就不说了。
本文主要说的是国内应用想上架,一定不要集成 FCM(Google 推送)
FCM(Google 推送) 会在应用启动的时候获取设备信息ANDROID ID 导致各大平台审核不给过。
也是集成了这个搞得我弄了好久,一直以为是其他问题,原来是这个鬼东西。
#使用yum安装lsof命令 yum install lsof #Centos查看端口占用情况命令,比如查看80端口占用情况使用如下命令: lsof -i tcp:80 #列出所有端口 netstat -ntlp #1、检查端口被哪个进程占用 netstat -lnp|grep 88 #88请换为你的apache需要的端口,如:80 #1.1 centos根据端口号查找对应服务及对应安装位置 netstat -antup|grep 80 (或者:netstat -ano|grep 80,windows下是:netstat -ano|findstr "80") 通过进程号确定服务目录 ll /proc/13752/cwd pwdx 13752 13752 为netstat查出来的进程号. #2、查看进程的详细信息 ps 1777 #3、杀掉进程,重新启动apache kill -9 1777 #杀掉编号为1777的进程(请根据实际情况输入) service httpd start #启动apache #4、centos查看进程 ps -elf|grep hexo 或者: ps aux|grep hexo
echarts通过dataZoom,实现x轴和y轴放大缩小,并获取缩放后的数据
const echartZoom = () => { nextTick(() => { myEcharts = echarts.init(echartsKeyId.value); myEcharts.off("dataZoom"); myEcharts.on("dataZoom", (params) => { let zoomData = params.batch[0]; if (typeof zoomData.start != "undefined") { //滚轮, 滑动条 //这里的缩放百分比是 没有 除以100的,所以需要乘以 0.01 startIndex.value = parseInt( state.option.series[0].data.length * zoomData.start * 0.01 ); seleteList.selectStartTime = state.option.series[0].data[startIndex.value]; endIndex.value = parseInt( state.option.series[0].data.length * zoomData.end * 0.01 ); seleteList.selectEndTime = state.option.series[0].data[endIndex.value]; //这里需要注意,缩放过程中会出现计算出来的索引大于数据长度的问题,所以这里判断一下 endIndex.value = endIndex.value > state.option.series[0].data.length - 1 ? state.option.series[0].data.length - 1 : endIndex.
pycharm跑项目出现Microsoft Visual C++ Runtime Library
Runtime Error!
Program: E:\Users\Anaconda3\python.exe
R6034
An application has made an attempt to load the C runtime library incorrectly.
Please contact the application’s support team for more information.
最快解决方法
解决步骤:
1.整个电脑搜索msvcr90.dll
2.删除问题提示路径下所有msvcr90.dll
3.重新打开pycharm,项目正常运行
目录
🎉使用场景🎉
🎃 display属性🎃
🎋 visibility 可见性🎋
🎍 overflow 溢出🎍
🙂博主个人兴趣🙂
🎉使用场景🎉 案例 网站广告 当我们点击关闭就不见了 重新刷新页面 广告又会出现
本质:让一个元素在页面中隐藏或者显示出来
🎃 display属性🎃 display设置一个元素应如何显示
display:none; 隐藏对象display:block; 1.转换为块级元素 2.显示元素 display隐藏元素后,不再占有原来的位置
实践
🎋 visibility 可见性🎋 visibility:vsible; 元素可视visibility:hidden; 元素隐藏 visibility隐藏元素后,继续占有原来的位置
实践
🎍 overflow 溢出🎍 overflow属性指定了如果内容溢出一个元素的框(所规定的高度及宽度)时,会发生什么.
属性描述visible不剪切内容也不添加滚动条hidden不显示超过对象尺寸的内容,超出的部分隐藏掉scroll不管超出内容与否,总显示滚动条auto超出自动显示滚动条,不超出不显示滚动条 一般情况下,我们都不想让溢出的内容显示出来,溢出部分会影响布局.
如果盒子有定位,慎用overflow:hidden; 因为它会隐藏多余的部分.
案例:如果父级元素不设置宽高,实际宽高则由内容撑开。倘若子元素设置绝对定位,则子元素脱离文档流,那么父元素高度为0。如果父元素再设置定位,并且设置overflow: hidden。则此时子元素会消失(看不见啦)
实践
🙂博主个人兴趣🙂
文章目录 一、rem和::二、call和start1)区别2)cal使用示例3)start使用场景 三、pause四、for循环1)基本格式2)参数解释3)FOR循环的4个参数 /d /l /r /f 五、tasklist&taskkill进程管理 一、rem和:: 区别
1)rem:注释,支持echo回显;
2):::注释,不支持echo回显,不能在()语句块中使用。
3)扩展:冒号后紧跟一个非字母数字的一个特殊符号其实都等价于双冒号,目的是使goto无法识别;
例子
@echo on rem 这是注释内容,由于指定了echo on,命令行会打印这段注释 :: 这也是注释内容,但是不支持回显 @echo off 二、call和start 1)区别 1)call:调用另一个批处理文件,如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令;
2)start:批处理中调用外部程序的命令(该外部程序在新窗口中运行,批处理程序继续往下执行,不理会外部程序的运行状况),如果直接运行外部程序则必须等外部程序完成后才继续执行剩下的指令
2)cal使用示例 1)调用脚本
:: 调用另一个脚本,并在执行结束后返回本脚本 :: filename 参数必须具有 .bat 或 .cmd 扩展名 call autoexec.bat 参数1 参数2 2)调用命令行字符串
:: 如果不用call,而直接运行%cmdstr%,将显示结果%aa%,而不是123456 set aa=123456 set cmdstr=echo %aa% call %cmdstr% pause 3)调用带返回值的子程序
这里重点关注getSum中shift的用法,默认右移1位,即shift等价于shift /1。
以本demo为例:%1在没有右移时表示第一个入参,在shift /1之后,%1指向的是原%2的入参。
@echo off rem 调用getString子程序 call :getString return echo return = %return% pause @echo off set sum=0 call :getSum 1 2 3 4 5 echo sum = %sum% pause goto :eof rem 利用入参实现返回值 :getString set %1=from sub script goto :eof rem 利用全局变量实现返回值 :getSum set /a sum+=%1 shift /1 if not "
文章目录 开发前提构建Springboot项目开发api模块开发生产者模块第一步:导入依赖第二步:添加配置第三步:编写启动类第四步:添加mapper接口第五步:实现接口:第六步:编写controller层接口 开发消费者模块第一步:导入依赖第二步:添加配置第三步:编写启动类:第四步:编写调用生产者接口 测试 开发前提 由于dubbo的注册中心用的是zookeeper,所以首先需要安装zookeeper。
构建Springboot项目 第一步:选择新建project或者module,在界面中选择maven点击next:
第二步:填上项目的基本信息点击Finish:
第三步:右击项目new -> Module:
第四步:在界面中选择maven点击next:
第五步:填上项目的基本信息点击Finish:
第六步:重复第三,四,五步,分别创建项目需要的dubbo-api,dubbo-provider,dubbo-customer几个模块,如下:
第七步:导入父工程依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>dubbo-demo</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>dubbo-provider</module> <module>dubbo-customer</module> <module>dubbo-api</module> </modules> <properties> <java.version>1.8</java.version> <source.level>1.8</source.level> <target.level>1.8</target.level> <lombok.version>1.18.16</lombok.version> <skip_maven_deploy>true</skip_maven_deploy> <spring-boot-dependencies.version>2.4.1</spring-boot-dependencies.version> <spring-cloud-dependencies.version>Dalston.SR4</spring-cloud-dependencies.version> <junit.version>4.12</junit.version> <dubbo.version>3.0.2.1</dubbo.version> <spring-dubbo.version>2.0.0</spring-dubbo.version> <lombok.version>1.18.16</lombok.version> </properties> <dependencyManagement> <dependencies> <!-- 统一jar版本管理,避免使用 spring-boot-parent --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot-dependencies.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-bom</artifactId> <version>${dubbo.version}</version> <type>pom</type> <scope>import</scope> </dependency> <!--dubbo 和 springboot 整合的包--> <dependency> <groupId>org.
详细的测试报告往往是反应项目能否上线的必要数据,作为测试人员在项目测试完成后,需要提供详细的测试结果,让开发人员,产品经理,项目经理等项目相关负责人开会决定项目是否达到客户预期要求,可否按周期上线。
Jmeter提供了自动生成html可视化报告的支持,且支持在GUI和非GUI环境生成可视化的html报告;本章节主要使用“课程列表”和“秒杀接口”进行压测,生成可视化html报告,并对报告各项参数详细讲解,让开发人员和测试人员掌握分析html可视化报告的技巧。
案例实战:
需求:使用本专题提供的项目中,“课程列表”和“秒杀接口”进行压测,并导出HTML可视化数据报告;Jmeter5.x后端口接口部署与接口文档介绍
1、使用Jmeter在GUI环境下分别创建:线程组,HTTP采样器(课程列表和秒杀接口),聚合报告,察看结果树;
线程组:线程组设置100,循环测试勾选为永远,并启用调度器设置120秒(即2分钟)
HTTP采样器(课程列表和秒杀接口):分别创建两个采样器,并按以下示例进行接口参数录入;其中提供的API中,“秒杀接口”做了随机时间进行线程阻塞,来达到与实际秒杀耗时场景;
聚合报告和察看结果树:为了方便在GUI环境下实时查看请求和响应结果报告;详情参考:Jmeter5.x线程组和Sampler基础组件-第一个测试计划
2、启动测试计划,通过聚合报告和察看结果树来判断测试计划是否有需要调整;
结果:接口请求都可以正常响应数据,且聚合报告数据显示正常,错误率为0;之后将测试计划保存下来,推荐使用英文名称,如:test.jmx;后期需要上传到非GUI服务器做内网压测,中文会无法使用命令行启动,
3、windows下使用cmd运行Jmeter脚本文件,并生成HTML可视化报告;使用cmd切换到Jmeter的bin目录下,用以下命令启动测试计划;
jmeter -n -t D:/article/html可视化报告测试.jmx -l D:/article/html/temp/jtl/result.jtl -e -o D:/article/html/temp/result
参数说明:
-n:非gui方式运行jmeter-t :jmx 脚本路径-l:result.jtl 运行结果保存路径,注意:.jtl 文件名不能重复,文件夹需要存在-e:在脚本运行结束后生成 HTML 报告-o:用于存放 HTML 报告的目录,文件夹需要存在 windows下cmd执行测试计划效果:
到路径存放html可视化报告进行查看,本示例路径:“D:/article/html/temp/result”
HTML可视化报告如下的:
HTML可视化报告参数讲解: dashboard讲解-核心报告
Test and Report informations
Source file:jtl文件名Start Time:压测开始时间End Time:压测结束时间Filter for display:过滤器Lable:sampler采样器名称 APDEX(Application performance Index)
apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意T(Toleration threshold):可接受阀值F(Frustration threshold):失败阀值 Requests Summary
OK:成功率KO:失败率 Statistics 统计数据
lable:sampler采样器名称samples:请求总数,并发数*循环次数KO:失败次数Error%:失败率Average:平均响应时间Min:最小响应时间Max:最大响应时间90th pct: 90%的用户响应时间不会超过这个值95th pct: 95%的用户响应时间不会超过这个值99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)throughtput:Request per Second吞吐量 qpsreceived:每秒从服务器接收的数据量send:每秒发送的数据量 charts讲解-可视化图形
Over Time(随着时间的变化)
在第七天的课程中,分别使用单任务和多任务展示了基于stm32的mqtt通信控制led灯的操作。以下是之前我不会但是通过课程了解,觉得有比较记录的内容。
如何在keil5中,一个启动项对应多个项目?
右键单击项目名“SmartHome_MultTask”,选择“Manage Project Items”,在“Project Targets”栏新建一个项目
2. .c文件文件图标下有个红色圈圈的意思,如上图“MQTTEcho.c”
取消打勾“include in target build”,c文件就不会包含在该工程下。
作用是区别不同的工程文件。
freeRTOS的任务通知
发送通知:
xTaskNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue, eNotifyAction eAction );
xTaskToNotify:任务句柄
ulValue:通知的数据
eAction:通知对应的动作(见下图)
使用例子:
等待通知:
xTaskNotifyWait(uint32_t ulBitsToClearOnEntry,
uint32_t ulBitsToClearOnExit,
uint32_t pulNotificationValue,
TickType_t xTicksToWait );
使用示例:
if(xTaskNotifyWait(0, 0xFFFFFFFF, ¬ify_value, pdMS_TO_TICKS(10)) == pdTRUE)
{
printf(“LED Task notify value is %d\r\n”, notify_value);
ledDev->Write(ledDev, (unsigned char*)¬ify_value, 1);
} 创建一个新的队列。为新的队列分配所需的存储内存,并返回一个队列处理。
xQueueHandle xQueueCreate(
unsigned portBASE_TYPE uxQueueLength,
unsigned portBASE_TYPE uxItemSize
);
使用示例:
xQueueHandle xQueue1;
【若依】Redis使用剖析 1.1 验证码 加到redis com.ruoyi.web.controller.common.CaptchaController
// 保存验证码信息 String uuid = IdUtils.simpleUUID(); String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; //code是表达式的值 String code = capText.substring(capText.lastIndexOf("@") + 1); //把唯一的key和code存到redis缓存中 Constants.CAPTCHA_EXPIRATION有效期,;TimeUnit.MINUTES单位是分钟 redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); com\ruoyi\common\core\redis\RedisCache.java 若依自己写的工具类
//新增一个字符串类型的值,key是键,value是值。 redisTemplate.opsForValue().set("stringValue","bbb"); 1.set(K key, V value) 新增一个字符串类型的值,key是键,value是值。html redisTemplate.opsForValue().set("stringValue","bbb"); 2.get(Object key) 获取key键对应的值。java String stringValue = redisTemplate.opsForValue().get("stringValue")+""; System.out.println("经过get(Object key)方法获取set(K key, V value)方法新增的字符串值:" + stringValue); 1.2 验证码redis取出 com\ruoyi\framework\web\service\SysLoginService.java
/** * 校验验证码 * * @param username 用户名 * @param code 验证码 * @param uuid 唯一标识 * @return 结果 */ public void validateCaptcha(String username, String code, String uuid) { String verifyKey = CacheConstants.
目录
1. 连接 Elasticsearch 数据库
2. 查询所有数据并导出为文件
1. 连接 Elasticsearch 数据库 安装包
pip install elasticsearch 连接 Elasticsearch from elasticsearch import Elasticsearch from tqdm import tqdm import json import warnings warnings.filterwarnings('ignore') es = Elasticsearch(hosts="http://0.0.0.0:9200/") print(es) 2. 查询所有数据并导出为文件 # 请求体与 Kibana 下使用的格式一致 query_json = { "query": { "match_all": {} } } # 执行查询 size = 100 # index 需指定 body为请求体 size 为查询结果的数量 scroll 为游标查询过期时间 query = es.search(index="song", body=query_json, size=size, scroll="5m") documents = query['hits']['hits'] total = query["
一、延时双删策略 先删除缓存,再更新数据库,然后休眠1s(根据具体的业务合理设置,比如几百毫秒),再删除缓存,有可能第二次删除失败,还是会导致数据不一致
缺点:存在延时操作,所以会造成服务器的阻塞, 所以不适合高并发的场景
二、最终一致性(删除缓存重试机制) 如果需要再极端情况下人仍然保证Redis和MySQL的数据一致性,就只能采用最终一致性的方案,比如基于RabbitMQ的可靠性消息通信来实现数据的最终一致性,还可以通过Canal组件监控MySQL里面的Binary log日志,把更新后的数据同步到Redis里面。
2.1、利用MQ异步重试机制,保证最终一致性,适合高并发场景,缺点就是代码的耦合性高,比如修改、新增接口都需要发送消息
2.2、利用Canal + MQ异步重试机制,保证最终一致性,适合高并发场景,缺点时增加了系统的复杂性
目录 环境配置可能的报错与解决方法方法1:手动部署报错1: 库的版本过高,需要换成低版本的报错2:需要安装指定的库步骤3 重启电脑使得系统环境变量的修改生效步骤4 引用包名的修改 方法2:Anaconda部署确保你的Anaconda安装正确部署命令 总结 『机器学习』分享机器学习课程学习笔记,逐步讲述从简单的线性回归、逻辑回归到 ▪ 决策树算法 ▪ 朴素贝叶斯算法 ▪ 支持向量机算法 ▪ 随机森林算法 ▪ 人工神经网络算法 等算法的内容。 欢迎关注 『机器学习』 系列,持续更新中
欢迎关注 『机器学习』 系列,持续更新中
环境配置可能的报错与解决方法 温馨提示,本次实验的环境配置有点难搞!有比较多的报错,如果不太想经历这些,可以直接使用Anaconda傻瓜式安装
方法1:手动部署 报错1: 库的版本过高,需要换成低版本的 TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1.
目录
一、情况叙述
二、解决方法
鼠标箭头放在编号后面,如下位置:
右击 - 段落 - 缩进与间距 - 制表位:
制表位的值改成 0 即可 三、效果如下
一、情况叙述 如下图所示:
二、解决方法 鼠标箭头放在编号后面,如下位置: 右击 - 段落 - 缩进与间距 - 制表位: 制表位的值改成 0 即可 三、效果如下
前置条件:maven,jdk
nacos-github地址
GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - GitHub - alibaba/nacos: an easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications.https://github.com/alibaba/nacos下载完之后,解压,修改配置文件。
右键记事本或者其他工具打开,写入ip:port
一台机器的话,这个三个ip都是你本机的ip,(获取本机ip的方法,cmd窗口,ipconfig回车,找到IPv4)后面跟的是三个端口号,端口号要等下要在上图中的application.properties文件中修改。
改完之后,打开application.properties
放开mysql注释,改为你自己的数据库配置
修改端口号
然后复制三份nacos,分别改一下server.port,改为和上图的cluster.conf文件中的端口号一致即可
全部配置好之后,打开数据库。
在nacos的conf目录,找到这个sql文件
导入mysql或者复制里面的sql执行。
要注意的是,端口号有一个偏移量,偏移量是1000,端口号不要挨着就好。
然后进入bin目录,双击startup.cmd启动就行
注意,集群应该是cluster,如果不是,那么你就要改一下startup.cmd,建议直接注释单机启动的配置,把圈起来的都注释掉,就行了,注释是 rem xxx
启动完成就可以按照你的 http://ip:port/nacos这个地址访问了,默认账号密码是nacos/nacos
开始菜单搜索cmd,用管理员权限启动后,输入:
Dism /Split-Image /ImageFile:C:\sources\install.wim /SWMFile:C:\sources\install.swm /FileSize:4000
即可把目标wim文件分解成4G大小的swm文件。简简单单搞定。
@关于Latex参考文献引用及跳转Latex 一、参考文献排版 方法一:在文章最后\end{document}之前直接使用以下代码即可:
\begin{thebibliography}{50} % 50为文献个数 \small %设置参考文献的字体大小(可注释) \renewcommand\@biblabel[1]{#1.} %这个可以设置文献的序号为1.,2.这种样式;如果注释掉参考文献序号变为[1],[2]的样式 \bibitem{1}后跟文献信息 ...... \bibitem{50}后跟文献信息 \end{thebibliography} \end{document} 方法二:使用bib.tex文件排版参考文献。首先,在你的latex排版同目录下创建bib.tex文件,把方法一的代码写入bib.tex文件。然后在编译文件中\end{document}之前输入\input bib.tex,将文献导入。
二、文章中文献引用、标蓝以及跳转(超链接) 在文中需要引用文献的地方使用\cite{1}即可。
这部分总结一下我latex排版的坑!!!!!
1、不同的latex环境,使用同样的命令不一定能有一样的效果。
上面关于一、参考文献排版的方法基本上都是通用的,但是在文中对文献进行引用时,有的latex模板的环境在文中使用\cite{1}就可以显示带有蓝色超链接,可跳转的文献,但是!!!有的latex环境是死活不能跳转的,我搜了很多方法都没用,其中大部分是用\usepackage{hyperref}包,但是都不行。只有下面这种可以:
\usepackage[ pdfauthor={derajan}, pdftitle={How to do this}, pdfstartview=XYZ, bookmarks=true, colorlinks=true, linkcolor=blue, urlcolor=blue, citecolor=blue, pdftex, bookmarks=true, linktocpage=true, % makes the page number as hyperlink in table of content hyperindex=true ]{hyperref} 但是会发现引用的参考文献并不是[1-3]这种格式,请看下面的2。
2、我在文章开头设置双栏排版:
\documentclass [5p,12pt] {elsarticle} %一定要放置整个编译文件的最开头,即所有包\usepackage{}前面,5p就是双栏,12p是字体大小(可不要),{elsarticle} 为所使用的latex模板名称 还有1p,3p也可表示双栏和单栏,如下;
\documentclass [5p,twocolumn] {elsarticle} **回到1中的问题:**引用的参考文献并不是[1-3]这种格式,所以就考虑在对两栏排版的命令中设置引用序号格式:
\documentclass [5p,hyperref,sort&compress] {elsarticle} 完成!!!!!!!
注:最合人意的latex环境就是方法一,什么多余的操作都不需要,引用即自动标红+超链接跳转。但是不同的latex模板环境不一样,参考文献以及包的使用效果不同,需要另想办法。呜呜呜呜呜呜呜~~~~~~
笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验,共同互勉!全套资料领取扫描文末二维码!
温馨提示:学而不思则罔,思而不学则殆。实践是检验真理的唯一标准!
静电放电抗扰度试验的国家标准为GB/T 17626.2(等同于国际标准IEC 61000-4-2)。
一、试验目的 静电放电是一种自然现象,当两种不同介电强度的材料相互摩擦时,就会产生静电电荷(摩擦起电原理)。如果其中一种材料上的静电荷积累到一定程度,并与另外一个物体接触时,就会通过这个物体到大地的阻抗进行放电。当设备发生接触或空气放电后,附着在设备机壳上的电荷会通过设备机箱上的孔缝与设备内部电路板或元器件间发生二次放电。因为设备内部电路板或元器件的阻抗较小,所以二次放电的危害有可能比一次放电更大。静电放电及其影响是电子设备的一个主要干扰源。
由于静电的存在,人体几乎成了对电子设备或爆炸性材料的最大危害。静电放电多发生于人体接触半导体器件时,有可能导致半导体材料击穿,产生不可逆转的损坏。静电放电及由此产生的电磁场变化可能危害电子设备的正常工作。
静电放电抗扰度试验模拟了以下两种情况:
① 设备操作人员直接触摸设备时对设备的放电和放电对设备工作的影响(直接放电)。
② 设备操作人员在触摸附近设备时,对所关心的设备的影响(间接放电)。
静电放电可能造成的后果是:
① 直接放电可引起设备中半导体器件的损坏,从而造成设备的永久性失效。
② 设备的误动作,这是由放电(可能是直接放电,也可能是间接放电)而引起的近场电磁场变化造成的。
二、主要试验设备及必备条件 如图2-10所示为静电放电模拟器的基本线路及放电电流波形。
图2-10 静电放电模拟器的基本线路及放电电流波形
高压真空继电器是目前唯一能产生高速和重复放电波形的器件。电路中的150pF电容代表人体的储能电容,330Ω电阻代表人体在手握钥匙和其他金属工具时的人体电阻。标准认为用这种人体放电模型(包括电容量和电阻值)来描述静电放电是足够严酷的。
图中的放电电流波形(标准规定是放电电极对作为电流传感器的2Ω电阻接触放电时的电流波形)含有的谐波成分极其丰富,因此加大了试验的严酷程度。
三、试验方法及试验配置 试验室里的试验配置的规范性是保证试验结果重复性和可比性的一个关键因素,这是因为静电放电的电流波形十分陡峭,其前沿已经达到0.7~1ns,包含的谐波成分至少达到500MHz以上。
1、直接放电
标准规定,凡受试设备正常工作时,人手可以触摸到的部位都要进行静电放电试验(这样的部位,除机箱以外,其他如控制键盘、按钮、指示灯、钥匙孔、显示屏等都在试验范围内)。
试验时,受试设备处在正常工作状态。试验正式开始前,试验人员对受试设备表面以20次/s的放电速率快速扫视一遍,以便寻找受试设备的敏感部位(凡扫视中有引起受试设备数显跳动、声光报警、动作异常等迹象的部位,都作为正式试验时的重点考查部位,应记录在案,并在正式试验时在其周围多增加几个考查点)。正式试验时,为了使受试设备来得及做出响应,放电以1次/s的速度进行(也有规定为1次/5s的产品)。一般对每一个选定点上放电20次(其中10次正的,10次负的)。
原则上,凡可以采用接触放电的地方一律采用接触放电。对涂漆的机箱,如制造厂商没有说明是作为绝缘用的,试验时便用放电枪的尖端刺破漆膜对受试设备进行放电。如厂家说明是作为绝缘使用,则应改用空气放电。对空气放电应采用半圆头形的放电电极,在每次放电前,应先将放电枪从受试设备表面移开,然后将放电枪慢慢靠近受试设备,直到放电完成为止。
为改善试验结果的重复性和可比性,放电电极应与受试设备表面垂直。
除非在通用、专用产品或是产品族标准中另有规定,静电放电仅仅施加在受试设备正常使用中可以触及的点和面上。但下述情况被排除在外(换言之,对这些项目不进行放电):
① 对于只有在维护时才能触及的点和面。在这种情况下,应在相应的文件中特别规定静电放电的简化试验。
② 只有最终用户检修时才能触及的点和面。例如对下述这些很少触及的点:在更换电池时触及的电池触点,录音电话的磁带盒等。
③ 对于在安装使用后不再触及的点和面。例如,设备的底部及靠墙壁的一侧和适配连接器的后面。
④ 同轴及多芯连接触点。因为它们都有一个金属的连接器外壳,在这种情况下,接触放电仅仅施加在连接器的金属外壳上。
⑤ 对非导电外壳(如塑料的)连接器中可接触到的触点,只采用空气放电来做试验。应当在静电放电发生器上采用圆头电极来做这个试验。
通常要考虑表2-6所示的6种情况。
表2-6 6种试验情况
① 如果产品(线产品族)标准要求对绝缘外壳连接器的有关触点进行试验,则应采用空气放电。注:对于用涂层提供连接器触点屏蔽的情况,应该在涂层线设备靠近安装采用涂层连接器的地方给出静电的警告标识。
⑥ 由于功能的原因,对于那些对静电放电敏感的连接器的触点或其他可以触及部分,如测量、接收或其他通信功能的射频输入端,应采用静电放电的警告标识。
这是因为,许多连接器端口是用来处理模拟或数字高频信号的,因此不能提供有足够过电压保护能力的器件。在模拟信号的情况下,选用带通滤波器或许是一种解决方案。至于过电压保护二极管,由于寄生电容过大,因此对受试设备所采用的工作频率是不利的。
在上述所有情况中,要在相应的文件中推荐专门的受试设备简化试验。
2、间接放电
间接放电即对耦合板进行放电。至于对水平耦合板的放电,要在水平方向对水平耦合板的边进行,如图2-11所示。
在朝向EUT每一单元(若适用)的中心点且与EUT前端相距0.1m处的水平耦合板前缘处,以最敏感的极性,至少做10次单次放电。放电时,放电电极的长轴要处在水平耦合板的平面里且垂直于它的前缘。放电电极要与水平耦合板的边缘相接触。另外,要考虑对EUT所有的暴露面做这个试验。图2-11所示是台式和落地设备的试验配置与放电位置示例。
图2-11 台式和落地设备的试验配置与放电位置示例
VCP —垂直耦合板;HCP —水平耦合板
3、注意事项
在距受试设备1m以内应无墙壁和其他金属物品(包括仪器)。
试验中受试设备要尽可能按实际情况布局(包括电源线、信号线和安装脚等)。接地线要按生产厂商的规定接地(没有接地线就不接),不允许有额外的接地线。
放电时,放电枪的接地回线与受试设备表面至少保持0.2m的间距,避免相互间有附加感应,从而影响试验结果。
4、不接地设备的试验
这里所描述的试验适合在安装说明或设计中已规定不与任何接地系统连接的设备或设备部件所采用。这里的设备或部件包括便携式的、电池供电的和双重绝缘的设备(Ⅱ类设备)。
基本原理是:不接地的设备或设备中不接地的部件不像Ⅰ类由电网供电的设备那样进行放电,如果在下一次ESD脉冲施加之前不能将电荷释放,就有可能使设备或设备部件达到所施试验电压的两倍。因此在Ⅱ类绝缘的设备电容里积累了几次ESD后,双重绝缘的设备可能被不切实际地充电至很多的电荷,最终以非常高的能量在绝缘体的击穿电压点上放电。
为了模拟单次放电(无论是空气放电,还是接触放电),受试设备上的电荷应在每次施加静电放电脉冲之前先行释放。以连接器的外壳、电池的充电端子、金属的天线为例,应当在每次施加静电放电试验脉冲时先行释放掉在需要施加静电放电的金属点或部位上的电荷。例如采用在水平和垂直耦合板上释放电荷的类似方法,即能对带有470kΩ泄放电阻的电缆进行放电。
由于在受试设备与水平耦合板(用于台式设备)及受试设备与参考接地板(用于地面设备)之间的电容取决于受试设备尺寸,若功能允许,在静电放电试验时可能保留带泄放电阻的电缆安装。在放电电缆中,一个电阻要尽可能地靠近EUT上的试验点,最好小于20mm;另一个电阻接在电缆线的末端附近,与水平耦合板(对台式设备)或参考接地板(对地面设备)相连。台式、地面不接地设备的试验见图2-12。
图2-12 台式、地面不接地设备的试验
文章目录 从 huggingface 导入演示的预训练模型查看整体 bert 结构查看 bert 的 encoder 结构 查看总参数量冻结 / 解冻网络层获得可训练参数数量样例演示 从 huggingface 导入演示的预训练模型 查看整体 bert 结构 可以看见,是有 embedding, encoder 和 pooler 三部分组成 from transformers import BertModel # 这个文件夹需要自己从 huggingface 的模型中下载 mod = BertModel.from_pretrained("../bert-base-chinese/") # 先看一下 mod 的整体网络结构 mod Some weights of the model checkpoint at ../bert-base-chinese/ were not used when initializing BertModel: ['cls.seq_relationship.weight', 'cls.predictions.bias', 'cls.predictions.transform.dense.weight', 'cls.predictions.decoder.weight', 'cls.seq_relationship.bias', 'cls.predictions.transform.LayerNorm.bias', 'cls.predictions.transform.dense.bias', 'cls.predictions.transform.LayerNorm.weight'] - This IS expected if you are initializing BertModel from the checkpoint of a model trained on another task or with another architecture (e.
思路:接入sdk相关Android接口以aar形式提供给Unity使用
目录
一、创建Firebase项目工程
二、创建Android工程 接入Android接口
三、Unity工程配置
参考文档:https://firebase.google.com/docs/auth/android/google-signin#java_1
一、创建Firebase项目工程 https://console.firebase.google.com
进入到console创建工程,按照步骤进行,进入到具体工程console面板后,找到
添加测试用户
启动Google身份验证
进行到此时下载google-services.json 上面截图有这个按钮,下载下来后 把它拷贝到工程/Assets下,Unity工程,如果你是安卓则拷贝到安卓的应用工程根目录下。创建应用必须确保签名sha和包名和你Unity项目一样的。
【有坑:这里自己根据自己包签名生成的SHA-1只是测试用的,等发布到google之后需要用google提供的上传密钥签名SHA-1 具体在最下方已经有说明 和 一个报错关联com.google.android.gms.common.api.ApiException: 10:】
此时已经进行完基本的Firebase工程配置
2022年2月10日补充说明:
查看密钥方法:keytool -list -v -keystore google.keystore
其中,google.keystore是密钥文件名,需先cd到该文件的目录下执行这条命令
编辑了SHA列表后需要重新导出google-services.json更新工程!不然是不会生效的
二、创建Android工程 接入Android接口 1、需在(应用级)app/build.gradle添加如下依赖
dependencies { ... implementation platform('com.google.firebase:firebase-bom:28.4.0') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-auth' implementation 'com.google.android.gms:play-services-auth:19.2.0' } 其中analytics可能不需要 它是一个firebase分析工具的依赖
2、配置Firebase项目具体应用的SHA指纹,需要准备Unity包签名文件keystore 用如下文档方式进行获取SHA。(上方已经提及,这里给个文档)
https://developers.google.com/android/guides/client-auth
3、具体接口代码接入 MainActivity.java代码源码:
package com.test.googleloginTest1102; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.
mock模拟后台数据操作,随机生成数据,包含增伤改查。 引入依赖 yarn add mockjs api下创建mockData->user.js import Mock from 'mockjs' // get请求从config.url获取参数,post从config.body中获取参数 function param2Obj (url) { const search = url.split('?')[1] if (!search) { return {} } return JSON.parse( '{"' + decodeURIComponent(search) .replace(/"/g, '\\"') .replace(/&/g, '","') .replace(/=/g, '":"') + '"}' ) } let List = [] const count = 200 for (let i = 0; i < count; i++) { List.push( Mock.mock({ id: Mock.Random.guid(), name: Mock.Random.cname(), addr: Mock.mock('@county(true)'), 'age|18-60': 1, birth: Mock.
前言 卡尔曼滤波算法由匈牙利数学家Kalman提出,主要基于线性系统提出。这里我们将其用于汽车跟踪,并对其基本原理进行介绍。
神奇的卡尔曼滤波,目标追踪的福音
1. 背景知识
1.1 时间序列模型
1.2. 滤波
1.3. 线性动态系统 2. 卡尔曼滤波理论知识 2.1 预测
2.1.1 第一条公式:状态转移
2.1.2 第二条公式:协方差矩阵
2.2 更新
2.2.1 第三条公式:卡尔曼增益
2.2.2 第四条公式:观测矩阵
2.2.3 第五条公式:
3. 卡尔曼滤波的应用
3.1 代码
3.1.1 获取场景数据。
3.1.2 初始化
3.1.3 开始预测与更新
3.1.4 画图 1.背景知识 1.1 时间序列模型 时间序列模型都可以用如下示意图表示:
这个模型包含两个序列,一个是黄色部分的状态序列,用X表示,一个是绿色部分的观测序列(又叫测量序列、证据序列、观察序列,不同的书籍有不同的叫法,在这里统一叫观测序列。)用Y表示。状态序列反应了系统的真实状态,一般不能被直接观测,即使被直接观测也会引进噪声;观测序列是通过测量得到的数据,它与状态序列之间有规律性的联系。
上面序列中,假设初始时间为, 则,是时刻的状态值和观测值,,是时刻的状态值和观测值...,即随着时间的流逝,序列从左向右逐渐展开。 常见的时间序列模型主要包括三个:隐尔马尔科夫模型,卡尔曼滤波,粒子滤波。
1.2. 滤波 时间序列模型中包括预测和滤波两步
预测:指用当前和过去的数据来求取未来的数据。对应上述序列图中,则是利用时刻,的值,估计时刻值。滤波:是用当前和过去的数据来求取当前的数据。对应上述序列图中,则是先通过上一步的预测步骤得到的一个预测值,再利用时刻的值对这个预测值进行纠正,得到最终的估计值。(通俗讲,就是通过预测一个值, 通过传感器测量一个值, 将两者进行融合得到最终的值) 1.3. 线性动态系统 卡尔曼滤波又称为基于高斯过程的线性动态系统(Linear Dynamic System, LDS)。
· 这里的高斯是指:状态变量和观测变量都符合高斯分布;(为什么是高斯分布?因为卡尔曼滤波估计的结果是一个概率,概率不是一个固定的值,而是一个范围,而这个范围符合高斯分布。)
· 这里的线性是指:可以通过线性表示,可以通过线性表示;
如果用数学表达式来表达这两层含义如下:
上面表达式中F是一个矩阵,常称作状态转移矩阵,保证了和的线性关系(线性代数中,矩阵就是线性变换);常称作噪声,其服从均值为0,方差为Q的高斯分布,保证了服从高斯分布(因为高斯分布加上一个常数后依然是高斯分布)。
同样的关于和,也可以得到如下表示, 其中矩阵H称作状态空间到观测空间的映射矩阵, rtrt称作噪声,其服从高斯分布:
2.卡尔曼滤波理论知识 以下公式需要用到的变量含义如下:
最近跟着老韩的课在学Linux,中途参加了个比赛,有一阵子没开Linux。昨晚刚想打开课程接着看,发现Xshell和Xfpt怎么都连不上了,怪事儿。折腾了一晚上,重新连接成功!
话不多说,接下来送上我解决的过程:
一.排查ping的问题 遇到问题第一时间想的是:是不是虚拟机网络连不上了?
因为我的Linux上装的有火狐所以直接打开网页来看看,果不其然,报错了。
“请检查您的网络连接”
没有安装火狐的同学们也没有关系,可以直接尝试ping百度
ping www.baidu.com 若不成功,会提示“www.baidu.com为未知地址”
若成功则会正常发送数据包。
问题解决: 打开VmWare 编辑→虚拟网络编辑器
依次点击“VMnet8”-“NAT设置”,进入如下界面:
记住这两个属性,记不住的截图保存,方便后续在Linux中进行配置文件的修改。它们对应的是netmask和gateway的值。
来到我们的Linux虚拟机中,打开终端,输入
vi /etc/sysconfig/network-scripts/ifcfg-ens33 注:最后的“-ens33”有的人的网卡不一样,有的人的网卡可能是eth0
按“i”键进入插入模式
照下图所示进行修改
修改完成后“esc:wq”
保存并退出
接下来运行该指令
service network restart 重启网卡,顺利的话此时便可以ping通了。
但也有特殊情况:网卡重启失败
很不幸,我也遇上了这种情况。
二. 解决网卡重启失败问题 执行上述“service network restart”命令后可能会出现以下报错信息:
Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See “systemctl status network.service” and “journalctl -xe” for details. [失败] 那么根据我在网上搜索的可能出现的问题及解决方法,可能性最大的有如下三点:
问题解决 1.和 NetworkManager 服务有冲突 解决方式也非常简单粗暴,直接关闭 NetworkManger 服务避免自启动就好了。
大家好!最近较忙,今天给大家阐述一个IOS手机15.0后新版本的问题,在移动端测试项目时,小屏幕苹果手机系统正常,但在类似iphone Max这样升级到15.0就会有个小问题,状态栏白色的,需要往上稍微拉动一下才会显示;
一:进入15.0的手机做一个判断,就兼容到最新的系统了
Object-C版本 UIColor *commonBlue = [self.cmUtil stringToColor:@"#506168"]; if (@available(iOS 15.0, *)) { UINavigationBarAppearance *appperance = [[UINavigationBarAppearance alloc] init]; //添加背景色 appperance.backgroundColor = commonBlue; appperance.shadowImage = [[UIImage alloc]init]; appperance.shadowColor = nil; //设置字体颜色大小 [appperance setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; self.navigationController.navigationBar.standardAppearance = appperance; self.navigationController.navigationBar.scrollEdgeAppearance = appperance; self.navigationController.navigationBar.compactAppearance = appperance; self.navigationController.navigationBar.compactScrollEdgeAppearance = appperance; } self.navigationController.navigationBar.tintColor = [UIColor whiteColor]; self.navigationItem.title = @"Me"; Swfit版本 let commonBlue = UIColor(hexString: "#353535", transparency: 1.0) if #available(iOS 15.0, *) { let appperance = UINavigationBarAppearance() //添加背景色 appperance.
对于刚买新电脑的同学们,或者是接触计算机的小白,我们在买到新的电脑的时候,我们就需要分盘,接下来教给大家!
第一步:按住win+X键,我们看到磁盘管理
第二步:进去之后,我们点击我们要分的盘,右键,点击压缩卷。
第三步,我们点击之后,之后我们就可以按照我们自己的意愿,看自己想分出来多少了,输入好之后,点击压缩。(以我的为例)
第四步:压缩完成后,会出现未分配的磁盘,右键点击,新建简单卷。
第五步:我们点击之后,按照他的引导一直到下一步,看这里简单卷的大小,最大的磁盘空间在上面会有提示,到时候按照自己的需求来弄,点击下一步。
第六步:下一步之后,我们会选盘的名称DEFJ.....(自己选)接下来一直按照电脑默认的选项一直下一步,最后直至完成。希望大家都可以动手试试。
分享知识是一种美德,希望大家给一个免费的关注,博主接下来还会给大家更多好玩的,有趣的知识。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a, b, c = 0;
printf("输入需要计算最大公因素的两个数(用空格隔开):");
scanf("%d%d", &a, &b);
while (c = a%b)
{
a = b;
b = c;
}
printf("这两个数的最大公因数为:%d\n", b);
return 0;
}
ES的优势及使用场景、ES的功能及使用简介 简介:
Elaticsearch简称为ES,是一个开源的可扩展的分布式的全文检索引擎,它可以近乎实时的存储、检索数 据。本身扩展性很好,可扩展到上百台服务器,处理PB级别的数据。ES使用Java开发并使用Lucene作 为其核心来实现索引和搜索的功能,但是它通过简单的RestfulAPI和javaAPI来隐藏Lucene的复杂性, 从而让全文搜索变得简单。
优势
分布式的搜索引擎 1、分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索 搜索:百度、谷歌,站内搜索 2、全文检索 提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能 3、数据分析引擎(分组聚合) 电商网站,最近一周笔记本电脑这种商品销量排名top10的商家有哪些?新闻网站,最近1个月访 问量排名top3的新闻板块是哪些 4、对海量数据进行近实时的处理 海量数据的处理:因为是分布式架构,Elasticsearch可以采用大量的服务器去存储和检索数据,自 然而然就可以实现海量数据的处理 近实时:Elasticsearch可以实现秒级别的数据搜索和分析。
场景
1.常见场景
搜索类场景 比如说电商网站、招聘网站、新闻资讯类网站、各种app内的搜索。
日志分析类场景 经典的ELK组合(Elasticsearch/Logstash/Kibana),可以完成日志收集,日志存储,日志分析查 询界面基本功能,目前该方案的实现很普及,大部分企业日志分析系统使用了该方案。
数据预警平台及数据分析场景 例如电商价格预警,在支持的电商平台设置价格预警,当优惠的价格低于某个值时,触发通知消 息,通知用户购买。 数据分析常见的比如分析电商平台销售量top 10的品牌,分析博客系统、头条网站top 10关注度、 评论数、访问量的内容等等。
商业BI(Business Intelligence)系统 比如大型零售超市,需要分析上一季度用户消费金额,年龄段,每天各时间段到店人数分布等信 息,输出相应的报表数据,并预测下一季度的热卖商品,根据年龄段定向推荐适宜产品。 Elasticsearch执行数据分析和挖掘,Kibana做数据可视化。
2.常见案例 维基百科、百度百科:有全文检索、高亮、搜索推荐功能 stack overflow:有全文检索,可以根据报错关键信息,去搜索解决方法。 github:从上千亿行代码中搜索你想要的关键代码和项目。 日志分析系统:各企业内部搭建的ELK平台。
ES的可靠性设计: 数据可靠性:
引入translog 当一个文档写入Lucence后是存储在内存中的,即使执行了refresh操作仍然是在文件系统缓存中,如果此时服务器宕机,那么这部分数据将会丢失。为此ES增加了translog, 当进行文档写操作时会先将文档写入Lucene,然后写入一份到translog,写入translog是落盘的(如果对可靠性要求不是很高,也可以设置异步落盘,可以提高性能,由配置index.translog.durability和index.translog.sync_interval控制),这样就可以防止服务器宕机后数据的丢失。由于translog是追加写入,因此性能比较好。与传统的分布式系统不同,这里是先写入Lucene再写入translog,原因是写入Lucene可能会失败,为了减少写入失败回滚的复杂度,因此先写入Lucene.
flush操作 另外每30分钟或当translog达到一定大小(由index.translog.flush_threshold_size控制,默认512mb), ES会触发一次flush操作,此时ES会先执行refresh操作将buffer中的数据生成segment,然后调用lucene的commit方法将所有内存中的segment fsync到磁盘。此时lucene中的数据就完成了持久化,会清空translog中的数据(6.x版本为了实现sequenceIDs,不删除translog) merge操作 由于refresh默认间隔为1s中,因此会产生大量的小segment,为此ES会运行一个任务检测当前磁盘中的segment,对符合条件的segment进行合并操作,减少lucene中的segment个数,提高查询速度,降低负载。不仅如此,merge过程也是文档删除和更新操作后,旧的doc真正被删除的时候。用户还可以手动调用_forcemerge API来主动触发merge,以减少集群的segment个数和清理已删除或更新的文档。
多副本机制
另外ES有多副本机制,一个分片的主副分片不能分片在同一个节点上,进一步保证数据的可靠性。
2.4 部分更新 lucene支持对文档的整体更新,ES为了支持局部更新,在Lucene的Store索引中存储了一个source字段,该字段的key值是文档ID, 内容是文档的原文。当进行更新操作时先从source中获取原文,与更新部分合并后,再调用lucene API进行全量更新, 对于写入了ES但是还没有refresh的文档,可以从translog中获取。另外为了防止读取文档过程后执行更新前有其他线程修改了文档,ES增加了版本机制,当执行更新操作时发现当前文档的版本与预期不符,则会重新获取文档再更新。
ES的高性能设计: 1.倒排索引的设计让ElasticSearch查询更快
ES的搜索数据结构模型基于倒排索引。倒排索引是指数据存储时,进行分词建立term索引库。倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
三种暴露分别是:分别暴露 统一暴露 默认暴露 分别暴露 export let school = '拜托低质量的学习'; export function teach() { console.log("拜托低质量的学习"); } 统一暴露: let school = '拜托低质量的学习'; function findJob(){ console.log("拜托低质量的学习"); } export {school, findJob} 默认暴露: export default { school: 'ATGUIGU', change: function(){ console.log("我不想被改变"); } } 模块导入数据方法 通用导入方式 import * as m1 from './js/m1.js'; import * as m2 from './js/m2.js'; import * as m3 from './js/m3.js'; m3.default.change() 解构导入方式 import {school, teach} from "./src/js/m1.js"; import {school as guigu, findJob} from "
一、MySQL调优 1.避免使用select * ,最好使用列名。实测,速度快很多 2.加索引 1.主键索引
alter table 表名 add primary key(列名);
2.唯一索引
alter table 表名 add unique(列名);
3.普通索引
alter table 表名 add index 索引名(index_name) (列名);
4.全文索引
alter table 表名 add fulltext (列名);
5.联合索引
alter table 表名 add index 索引名(index_name) (列名1,列名2.......);
需遵守最左前缀法则
3.查询一条数据时,加limit 1 4.查询时,between and比in效率要高 5.where条件后加表达式 6.在 where 条件后使用 or 来连接条件,如果or连接的条件有一方没有索引,则导致索引失效而进行全表扫描 二、数据库引擎 InnoDB 引擎:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行级锁(默认)、表级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存表的行数的,所以当进行 select count(*) from table 指令的时候,需要进行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较高的场景下使用会提升效率的。
MyIASM 引擎:MySQL 的默认引擎,但不提供事务的支持,只支持表级锁。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是保存了表的行数,于是当进行 select count(*) from table 语句时,可以直接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据库引擎的首选。
写在最前边: 研究生一枚,为后端实习和未来工作打基础。无意间发现韩顺平老师的课程,细心细致,讲课和吴恩达老师一样,都是保姆式讲解,各种基础知识都会补充,爱了。
韩顺平老师课程地址:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0
阅读提醒:本笔试适合有编程语言基础的伙伴阅读,因为本兔兔是本专业的,有c、c++、python 、sql基础,笔记中特别的基础的内容就没有记录。完全零基础的小伙伴建议跟着韩老师的课程自己记录。
============================= ❀ 坦 克 大 战 ❀ ============================= ============================== ❀ 1.0 版 本 ❀ ============================== 用到泛型及其之前的知识 一、Java绘图坐标体系 1、像素——密度单位(与厘米这种长度单位完全不是一回事) 与分辨率有关:分辨率越高像素越大,密度越高,展示的东西越丰富。 像素 = 分辨率的长× 宽 2、坐标介绍 坐标 原点 位于左上角 坐标单位是 像素 (x , y) 二、Java绘图入门 1、步骤 定义一个类MyPanel extends JPanel,作为画板; MyPanel 类中重写paint方法,使用Graphics类 作为画笔。进行一系列方法绘图; 定义一个类 DrawCircle extends JFrame ,作为活动窗口展示画板内容 DrawCircle 类中 声明一个画板类 MyPanel 在DrawCircle 类的构造器或者其他方法中创建MyPanel 对象并加入当前DrawCircle 类对象中 设置窗口大小以及是否显示 代码实例 import javax.swing.*; import java.awt.*; public class MyPanel extends JPanel{ @Override public void paint(Graphics g) { super.
Spring 你对Spring了解多少? Spring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发,比如说 Spring 支持 IoC(Inverse of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。
Spring 提供的核心功能主要是 IoC 和 AOP
IOC IoC(Inverse of Control:控制反转) 是一种设计思想,而不是一个具体的技术实现。IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。不过, IoC 并非 Spring 特有,在其他语言中也有应用。
IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注(DI)⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC 容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。
AOP 动态代理
AOP(Aspect-Oriented Programming:⾯向切⾯编程)能够将那些与业务⽆关,却为业务模块所共同调⽤的逻辑或责任(例如事务处理、⽇志管理、权限控制等)封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。
Spring AOP就是基于动态代理的,如果要代理的对象,实现了某个接⼝,那么Spring AOP会使⽤JDKProxy,去创建代理对象,⽽对于没有实现接⼝的对象,就⽆法使⽤ JDK Proxy 去进⾏代理了,这时候Spring AOP会使⽤基于asm框架字节流的Cglib动态代理 ,这时候Spring AOP会使⽤ Cglib ⽣成⼀个被代理对象的⼦类来作为代理。
当然你也可以使用 AspectJ ,Spring AOP 已经集成了AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。
第一行:咕咕咕。
第二行:感觉综述就看了个囫囵。
摘要
主要内容
重点
意义
备注
介绍4项技术:目标跟踪、传感器配准、航迹关联、数据融合(各技术理论原理+适用条件)
不完整测量条件下的空间配准和航迹关联
总结现有技术+存在问题,指出未来发展趋势
背景介绍
多传感器目标跟踪技术(多传感器融合技术)广泛应用于军事指挥和工业控制:可分为集中式(收集各传感器信息送入中央处理器处理)、分布式(各传感器有各自处理中心)、混合式(结合前两者)【按体系结构】
具体技术
目标跟踪
本质:利用各传感器获得的带噪声量测数据对目标的状态和个数进行估计的过程
原理:贝叶斯滤波原理
方法
单目标
多目标:数据关联类多目标(通过数据关联将多目标转化为单目标进行解决);不关联(多种改进的滤波器)
传感器配准
原因:需要将多个传感器的数据转换到相同的时空参照系中,由于存在系统偏差和量测误差故进行配准
时间配准
定义:将各传感器的对同一目标的异步测量信息配准到同一时刻。
方法:最小二乘、内插外推、曲线插值、曲线拟合、卡尔曼滤波
空间配准
利用多传感器对空间公共目标的探测信息对传感器的系统偏差进行估计和补偿的过程
分为合作目标和非合作目标(是否已知目标位置)
非合作目标空间配准算法:分离线(认为系统偏差在一段时间内保持不变)和在线(系统偏差为渐变值)
航迹关联
定义:找出同一目标对应的航迹
同空间配准互为前提条件,为解决耦合提出两类解决方法
方法:基于统计类和基于模糊数学
数据融合
定义:基于某种准则对来自同一目标的航迹进行估计融合,最终形成稳定高精度的全局航迹
融合准则
融合方法
局限性或发展方向分析
检测跟踪一体化及自适应杂波动态复杂场景下的高精度、实时空间配准如何进行有效航迹关联融合航迹的实时质量评估
2、基于STM32单片机的温湿度检测报警器(液晶1602) 功能描述: 本设计由STM32F103单片机最小系统+DHT11温湿度传感器+1602液晶显示模块+声光报警模块+独立按键组成。
1、主控制器是STM32F103单片机
2、DHT11传感器测量温度和湿度数据
3、1602液晶显示温度、湿度
4、三个按键可设置温度、湿度上限报警值,温度或者湿度超过上限时,蜂鸣器LED声光报警
视频演示链接: 2、基于STM32单片机的温湿度检测报警器(液晶1602)
仿真图: STM32F103最小系统分为时钟电路和复位电路,我们采用STM32F103C8T6芯片,单片机的时钟电路由一个8M的晶振和两个22P的小电容组成。由于芯片IO口内部自带上拉电阻,因此复位电路只需一个100nF电容组成。BOOT0和BOOT1引脚的高低电平决定着不同的启动模式,选择BOOT0为低电平,即系统存储器被选为启动区域[9]。
通过BOOT[1:0]引脚可以选择三种不同启动模式。如下表1通过BOOT[1:0]引脚可以选择三种不同启动模式。
对于 STM32 来说也相比51复杂。MCU微处理器是整个系统的核心,相当于整个系统的“大脑”,维持着整个系统的运行,所以微控制必须能够稳定的运行,下图(图3-3)为STM32F103C8T6最小系统电路图,芯片电源为3.3V供电,每一组电源都通过104电容滤波。MCU外围也必须有滤波电容,下载调试电路用最小系统开发板自带的SW接口,接上ST-LINK就可以在线下载调试了。如下图3-4为本次设计使用的STM32F103C8T6最小系统模块内部电路图。
图3-4 STM32F103C8T6最小系统板
本次设计选型用LQPF44封装的STM32F103C8T6为主控,如图中U1,供电电源为3.3V,主要由电源滤波电路、晶振电路、复位电路、SW接口调试电路、BOOT模式选择电路等组成。
(1)STM32最小系统电路
最小系统电路由STM32F103C8T6单片机芯片和时钟电路,时钟电路由一个8M晶振和两个30pf电容串联接入时钟输入脚。
(2)启动模式选择电路
通过BOOT引脚可以选择不同的启动模式,如下表1.1所示,通过BOOT0和BOOT1脚的电平状态从而控制器启动模式。
(3)复位电路,STM32具有软件复位和硬件复位,上电复位芯片需要足够时间进行初始化,需要在NRST脚保持低电平信号,利用复位电路的电容充放电作用,STM32启动时由低电平变高,芯片从而复位,转换芯片正常工作。
表1 STM32启动模式表 启动模式选择脚
启动模式
说明
BOOT0
BOOT1
X
0
主闪存存储器
启动区域为主闪存存储器
0
1
系统存储器
启动区域为系统存储器
1
1
内置SRAM
启动区域为内置SRAM
程序源码: #include "delay.h" #include "LCD1602.h" #include "key.h" #include "led.h" #include "timer.h" #include "dht11.h" #include "stdio.h" #include "stdlib.h" short Tpup = 35 ,Huup = 60 ; //温度上限 默认35 湿度默认60 int main(void) { char buf[18]; unsigned char temperature = 0,humidity = 0; //温度 湿度 unsigned char key_value = 0; //按键返回值 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 Lcd1602_Init(); //液晶1602初始化 LED_Init(); delay_ms(100); while(DHT11_Init()) { Lcd1602_String(0,0,(u8 *)"
一、背景
任务是基于Flink 1.13 版本java api 实现的,主要功能是将业务数据写到 hdfs 上。
二、问题
主要的报错信息如下
2022-10-24 18:18:42,206 WARN org.apache.flink.runtime.taskmanager.Task [] - Source: Kafka Source -> Flat Map -> Process -> Flat Map -> Sink: Unnamed (4/6)#676 (ea645f328d5a2ee473927cd39c92e050) switched from RUNNING to FAILED with failure cause: org.apache.flink.util.FlinkRuntimeException: Could not find a public truncate method on the Hadoop File System. at org.apache.flink.runtime.fs.hdfs.HadoopRecoverableFsDataOutputStream.ensureTruncateInitialized(HadoopRecoverableFsDataOutputStream.java:186) at org.apache.flink.runtime.fs.hdfs.HadoopRecoverableFsDataOutputStream.<init>(HadoopRecoverableFsDataOutputStream.java:71) at org.apache.flink.runtime.fs.hdfs.HadoopRecoverableWriter.open(HadoopRecoverableWriter.java:80) at org.apache.flink.streaming.api.functions.sink.filesystem.OutputStreamBasedPartFileWriter$OutputStreamBasedBucketWriter.openNewInProgressFile(OutputStreamBasedPartFileWriter.java:90) at org.apache.flink.streaming.api.functions.sink.filesystem.BulkBucketWriter.openNewInProgressFile(BulkBucketWriter.java:36) at org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.rollPartFile(Bucket.java:243) at org.apache.flink.streaming.api.functions.sink.filesystem.Bucket.write(Bucket.java:220) at org.apache.flink.streaming.api.functions.sink.filesystem.Buckets.onElement(Buckets.java:305) at org.
打开cmd,执行go env
C:\Users\86131>go env set GO111MODULE=on set GOARCH=amd64 set GOBIN=D:\study\Go\GoProject\bin set GOCACHE=C:\Users\86131\AppData\Local\go-build set GOENV=C:\Users\86131\AppData\Roaming\go\env set GOEXE=.exe set GOEXPERIMENT= set GOFLAGS= set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOINSECURE= set GOMODCACHE=D:\study\Go\GoProject\pkg\mod set GONOPROXY= set GONOSUMDB= set GOOS=windows set GOPATH=D:\study\Go\GoProject set GOPRIVATE= set GOPROXY=https://goproxy.cn,direct set GOROOT=D:\study\Go\GOROOT\go1.17.3 set GOSUMDB=sum.golang.org set GOTMPDIR= set GOTOOLDIR=D:\study\Go\GOROOT\go1.17.3\pkg\tool\windows_amd64 set GOVCS= set GOVERSION=go1.17.3 set GCCGO=gccgo set AR=ar set CC=gcc set CXX=g++ set CGO_ENABLED=1 set GOMOD=NUL set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 -fdebug-prefix-map=C:\Users\86131\AppData\Local\Temp\go-build1098379897=/tmp/go-build -gno-record-gcc-switches 打开goland命令行,执行go env