本文转自:https://blog.csdn.net/qq_34829953/article/details/73769973
1、查看当前最大连接数
ulimit -n 2、最大文件打开数限制
vi /etc/systemd/system.conf #DefaultLimitCORE= #DefaultLimitRSS= DefaultLimitNOFILE=1024000 #DefaultLimitAS= DefaultLimitNPROC=1024000 #DefaultLimitMEMLOCK= #DefaultLimitLOCKS= #DefaultLimitSIGPENDING= #DefaultLimitMSGQUEUE= #DefaultLimitNICE= 在DefaultLimitNOFILE和DefaultLimitNPROC加上需要设置的最大连接数
3、重启服务器
reboot 4、重启后查看连接数
5、TCP相关命令 1)查看当前端口连接数包括历史连接
netstat -nat|grep -i "10001"|wc -l 2)查看当前所有正在连接数
netstat -nat|grep ESTABLISHED|wc -l 3)查看某个端口当前所有正在连接数
netstat -nat|grep -i "10001"|grep ESTABLISHED|wc -l 4)查看那些IP连接当前服务器
netstat -an 5)统计httpd协议连接数
ps -ef|grep httpd|wc -l netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,grep ESTABLISHED 提取出已建立连接的信息,wc -l进行连接数统计
TCP连接状态详解 LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT: 再发送连接请求后等待匹配的连接请求
SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
ESTABLISHED: 代表一个打开的连接
FIN-WAIT-1: 等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2: 从远程TCP等待连接中断请求
CLOSE-WAIT: 等待从本地用户发来的连接中断请求
打开网站出现Internal server error 500错误,通常是服务端出现一些未知异常,但是在检查的时候我们不能仅仅只是关注应用服务,而是要关注从服务端接收请求开始,一直到应用服务的整条链路。
程序文件中的权限问题导致Internal Server Error的解决方法
访问网站提示“Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request”
解决方法:登陆FTP或文件管理器,检查站点目录文件权限设置,将文件夹权限设置为755,单个文件权限设置为644。
这样设置644后,问题就可以解决,同时也不会影响网站的所需要的写入权限,满足网站正常运行。如果你的站点中有很多权限都要需要设置,为了提高效率。
程序应用问题导致Internal Server Error的解决方法 因为不同网站使用的程序代码都不竞相同,解决方案也不会完全一样,下面通过排查办法提供通用的解决思路:由于应用逻辑问题导致错误的可能性很小,那么第二个原因的嫌疑最大,就是mark逻辑问题。如果直接排查mark的源码,太费时费力,这个时候最好的办法是实时抓包,看看mark和应用服务之间到底发生了什么。
使用tcpdump命令抓取从jetty到应用服务之间的数据包,将结果输出到临时文件中:
tcpdump -i eth0:0 -s0 host 1X.XXX.XXX.XX -w /tmp/out1.cap
jetty对于请求数据的大小会做限制,超过200000 byte的时候就会报错,返回错误码500。
找到问题了,在WEB-INF目录下添加jetty-web.xml 文件解决,文件内容如下:
<Configure id="WebAppContext"class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="maxFormContentSize"type="int"> 0 </Set>
导读: 使用过微信支付商户的应该都知道,微信H5支付是比较难申请的,而且费率比较高,微信H5通道的风控也相对比较严,搞不好商户就会被风控清退。本文的思路就是通过微信JSAPI支付(公众号支付)接口来实现H5支付的功能。
有些小白可能会问“H5支付有啥用”? H5支付用处非常大,很多网站和游戏都需要使用这个H5支付,方便玩家手机支付时,能自动跳转到微信APP,启用微信的支付功能。正是因为H5支付的重要性,所以H5支付通道的风控才比扫码支付要严。
准备工作: 已认证的微信小程序(可以淘宝找人代认证,永久免费,不需要每年都年审);拥有SSL证书的https安全域名; 思维图: 关键代码: 一、后端使用H5拉起小程序 //微信小程序appid $appid=config("wxapp.appid"); //微信小程序secret $secret=config("wxapp.secret"); //缓存名称 $cahcename ="weixinAccessToken-".$appid; //1.获取微信接口调用凭证 $access_token = getWeixinAccessToken($appid,$secret); if(!$access_token){ exit("获取微信接口调用凭证失败"); } //2.H5跳转到小程序 $url = "https://api.weixin.qq.com/wxa/generatescheme?access_token=" . $access_token; $path = "/lionfish_comshop/pages/pay/index";//小程序支付页面 //传给小程序的参数 $arr = array( "number" => $params["pay_id"], "money" => $params["money"] ); $post_data = [ "jump_wxa" => [ "path" => $path, "query" => http_build_query($arr) ], "expire_type" => 0, "expire_time" => time()+300 //scheme 码的失效时间(5分钟) ]; $post_data = json_encode($post_data); $result = weixin_curl_post($url, $post_data); //对json数据解码 $json = json_decode($result); $arr = get_object_vars($json); if($arr["
使用工具:PS CC2018
方法:通道抠图、蒙版抠图、选择并遮住
方法一:通道抠图(主体颜色和背景色不能太接近)
步骤1 :使用套索工具将主体部分选中,建立选取→ctrl+j,将建立选取的部分复制出来,形成一个新图层,同时隐藏掉原来的图层→单击通道,选择对比最大的通道
步骤2:右键单击对比最大的通道,选择“复制通道”,单击“确定”→ctrl+L,调出色阶,通过滑动滑块和用颜色取管配合,使白色部分更白,黑色部分更黑。
步骤3:按住ctrl,点击复制出来通道的缩略图→ctrl+shift+i,反选→选中原图层四个通道,隐藏复制出来的通道→回到图层面板
步骤4:ctrl+j,复制选取的大树到一个新图层中,如下图所示→使用套索工具,将图层中多余的部分删除→大树就抠出来了。更换背景颜色,得到新的背景色的大树
方法二:蒙版抠图(适合对透明或半透明物体,如酒杯、冰块等)
步骤1:选中图层,ctrl+A全选,ctrl+C复制→创建图层蒙版
步骤2:按住alt键,单击图层蒙版缩略图,进入图层蒙版→ctrl+v粘贴→ctrl+i反向(反向快捷键,能够把图层切换为相反颜色)→回到原图层,填充为白色
ctrl+d,取消选取。
步骤3:为图层添加一个黑色背景,最后看一看效果
方法三:选择并遮住(适合对毛发、边缘复杂的图片)
步骤1:选择菜单→单击“主体”,先大致选中孔雀→单击选择并遮住
步骤2:选择“调整边缘画笔工具”→对孔雀羽毛边缘进行涂抹→勾选净化颜色→确定
步骤3:添加一个黑色背景图层→得到如下效果图。
详细解释如何在自定义数据集上有效地训练目标检测算法 —— YOLOv5
引言
识别图像中的对象被认为是人脑的一项常见任务,但对于机器而言并非如此简单。照片中物体的识别和定位是一项称为“目标检测”的计算机视觉任务,过去几年出现了很多种算法来解决这个问题。迄今为止最流行的实时对象检测算法之一是 YOLO(You Only Look Once),最初由 Redmond 等人提出。
在本教程中,您将学习如何使用 YOLOv5 实现在自定义数据集上执行端到端目标检测项目。我们将使用迁移学习技术来训练我们自己的模型、评估其性能、将其用于推理,甚至将其转换为其他文件格式,例如 ONNX 和 TensorRT。
本教程面向具有目标检测算法理论背景的人员。为了您的方便,下面提供了一份可以快速上手的完整项目代码。
数据处理
数据集创建
对于本教程,我生成了自己的企鹅数据集,方法是手动标记约 250 幅来自网络的企鹅图像和视频帧。为获得稳健的 YOLOv5 模型,建议每类训练超过 1500 张图像,每类训练超过 10,000 个目标。还建议添加最多 10% 的背景图像,以减少误差。由于我的数据集非常小,我将使用迁移学习技术缩短训练时间。
YOLO标注格式
大多数标注平台支持以 YOLO 标签格式导出,为每张图像提供一个标注文本文件。每个文本文件都包含图像中每个对象的边界框 (BBox) 标注。标注数据被归一化为图像大小,并位于 0 到 1 的范围内。它们以以下格式表示:
< object-class-ID> <X center> <Y center> <Box width> <Box height>
如果图像中有两个目标,YOLO 标注文本文件的内容可能如下所示:
数据目录结构
为了符合 Ultralytics 目录结构,数据按以下结构提供:
为了方便起见,我在我的代码中提供了自动创建这些目录的功能,只需将您的数据复制到正确的文件夹中即可。
配置文件
训练的配置分为三个 YAML 文件,这些文件与 repo 本身一起提供。我们将根据任务自定义这些文件,以满足我们的需求。
1. 数据配置文件描述了数据集参数。由于我们正在训练我们的自定义企鹅数据集,我们将编辑此文件并提供:训练、验证和测试(可选)数据集的路径;类别数 (nc);以及与其索引相对应的类名。在本教程中,我们只有一个类,名为“Penguin”。我们将自定义数据配置文件命名为“penguin_data.yaml”,并将其放在“data”目录下。这个 YAML 文件的内容如下:
文章目录 一、ElasticSearch是什么二、ElasticSearch的基本概念三、ElasticSearch可以用来做什么四、ElasticSearch安装部署五、go连接ElasticSearch 一、ElasticSearch是什么 ElasticSearch(ES)是一个基于Lucene构建的开源、分布式、restful接口全文搜索引擎,一个分布式文档数据库。
二、ElasticSearch的基本概念 ES与MySql概念类比对照
ESMySQL索引数据库类型表文档记录 三、ElasticSearch可以用来做什么 1、网站内部搜索引擎
2、结合FileBeat、Logstash 、ElasticSearch、Kibana 可以实现日志的搜集、存储、查询
四、ElasticSearch安装部署 1、home路径下新建es-cluster目录
mkdir es-cluster 2、新建docker-compose.yml内容如下
version: '2.2' services: es01: image: elasticsearch:7.12.1 container_name: es01 environment: - node.name=es01 - cluster.name=es-docker-cluster - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - data01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic es02: image: elasticsearch:7.12.1 container_name: es02 environment: - node.name=es02 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" volumes: - data02:/usr/share/elasticsearch/data ports: - 9201:9200 networks: - elastic es03: image: elasticsearch:7.
透视分析,DAX公式(数据分析表达式),与Excel 函数与公式存在区别
一、导入数据 1.将Power Pivot添加到功能栏 1)文件>选项>自定义功能区>开发工具
2)开发工具>COM加载项>勾选Microsoft Power Pivot for Excel>确定
2.导入数据 1)将数据加载到Power Pivot:用Power Query处理完数据>关闭并上载至>勾选将此数据添加到数据模型>确定
2)打开Power Pivot:Power Pivot>管理数据模型
二、关系图视图 将数据加载到Power Pivot
1.打开Power Pivot Power Pivot>管理数据模型
2.创建表的关联关系 主页>关系图视图
3.连接表 拖拽一个表中的关联字段到另一个表中对应的关联字段上,会自动建立连接,连接成功会出现一根连线,连线上会有箭头表示方向,连线上的1和*是指1对多关系
注意:表与表之间只能关联一个字段
三、层次结构&数据透视表&隐式度量值&上下钻取 1.层次结构 主页>关系图视图>右键表>创建层次结构>取名>将需要的字段拖进创建的层次结构中(注意:级别高的字段要放到级别低的字段的上面)>保存
2.数据透视表 Power Pivot>管理>数据透视表>数据透视表>新工作表 或者 现有工作表>确定
将需要的字段拖到相应的列、行、值和筛选所在的位置
注:该数据透视表支持多表关联
3.隐式度量值 1)隐式度量值: 通过PowerPivot数据透视表的字段拖放而自动创建的度量值, 不建议
隐式度量值在 Power Pivot>度量值 中是看不到的
2)查看隐式度量值:Power Pivot>管理>高级>显示隐式度量值
3)删除隐式度量值:Power Pivot>管理>高级>显示隐式度量值 >选中要删除的隐式度量值>右键>删除>保存
4)创建度量值:Power Pivot>度量值>新建度量值>表名:创建在哪个表中;度量值名称:自定义取名;公式:根据需求填写公式计算;类型:显示格式>确定
4.上下钻取 向上钻取: 从细(小)的维度到粗(大)的维度分析
向下钻取: 从粗(大)的维度到细(小)的维度分析
操作:选中数据透视表>向上钻取 或者 向下钻取
四、度量值&KPI 1.度量值 结合可视化图表或数据透视表才会执行运算,而计算列后台自动计算(可关闭自动计算)
创建度量值:Power Pivot>度量值>新建度量值>表名:创建在哪个表中;度量值名称:自定义取名;公式:根据需求填写公式计算;类型:显示格式>确定
2.KPI 1)创建KPI:Power Pivot>KPI>新建KPI>销售额定义目标值为25000000
当我们使用mysql执行保存富文本数据到mysql中时,由于富文本内容中,包含单引号、双引号以及其他字符,从而导致保存时,mysql报语法错误。
譬如:
remark = "\"<p>oct图片进行amd四分类算法</p>\\n<pre class=\\\"language-python\\\"><code># 调用算法获取单张图片预测结果\\ndef predict_one_image(img_path):\\n\\turl = \\\"http://106.52.171.21:8325/api/oct_4_amd\\\"\\n\\tfiles = {'file': open(img_path, 'rb')}\\n\\ttry:\\n\\t\\tresult = requests.post(url, files=files).json() # {'code': '0', 'data': 'GA', 'msg': 'succeed'}\\n\\texcept Exception:\\n\\t\\traise Exception</code></pre>\"" 当我们执行sql语句譬如:
UPDATE runoob_tbl SET runoob_remark=xxx WHERE runoob_id=3 由于xxx这里单双引号等,就会触发sql语法错误。
解决思路:我们把富文本内容进行转码:
# 编码 def encode(s): return ' '.join([bin(ord(c)).replace('0b', '') for c in s]) # 解码 def decode(s): return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]]) 当我们使用
res = encode(remark)
来编码上面富文本内容时:
会得到如下的二进制字符串:
概述 [BV11b] 方案是最早的基于标准LWE假设的加密方案, 该方案基于一个优化版本的LWE公钥加密, 采用类似于多项式插值的方式来实现同态运算。
整篇文章有两个核心重线性化(re-linearization) (解决密文乘法导致长度增长问题)和 维数-模约减(a dimension-modulus reduction)(降低同态解密时的电路深度,使得解密电路深度小于有限次同态加密的电路深度,也就是压缩解密电路)。
重线性化 一个基于LWE难题的一般加密方案如下:
明文 m ∈ { 0 , 1 } m \in \{0,1\} m∈{0,1},密钥 s ∈ Z q n \mathbf{s} \in \mathbb{Z_q^n} s∈Zqn,随即均匀选取向量 a ∈ Z q n \mathbf{a} \in \mathbb{Z_q^n} a∈Zqn,一个随机极小噪音 e e e
密文 c = ( a , b = < a , s > + 2 e + m ) c = (\mathbf{a},b = <\mathbf{a},\mathbf{s}>+2e+m) c=(a,b=<a,s>+2e+m)。
冗余表系列文章(二)冗余表的实现方案之异步写 冗余表系列文章(一)冗余表的实现方案之同步双写
冗余表系列文章(二)冗余表的实现方案之异步写
1 冗余表 1.1为什么要有冗余表 当t_order表达到500万条或2GB时需要考虑水平分表,进行水平分表需要根据某个列进行分割,假设根据userId分割。用户查询自己的订单携带着userId,因此能够定位到具体哪张表。而商家查询者自己店铺的订单,没办法确定userId,只能访问一遍所有的分表再合并结果,效率非常低。为了加快商家端的查询,可以冗余一份订单表,这份冗余表根据merchantId切分,商家访问冗余表,效率就很好。这是引入冗余表的好处,坏处是我们要维护普通表和冗余表的数据一致。
1.2冗余表的两种实现方案 1.2.1 同步双写 更新t_order的操作要执行两次,一次更新普通表,一次更新冗余表,写两次。
优点:
实现简单,由一次写变为两次写
容易维护数据的一致性
缺点:
代码冗余,第二次写跟第一次写的代码类似,而且每个更新的地方都要写两次
请求处理时间变长
1.2.2 异步写 更新请求过来,写一次数据库,再发送一条消息到消息中间件,返回响应。消费者拉取消息进行写操作。
优点:
处理时间是单次写 缺点
较复杂,引入了消息中间件不容易维护数据的一致性 2 异步写 项目源码
进入async-write文件夹
2.1数据库规划 mysql3上存储订单数据,主要用于用户端访问。t_order、t_order_item表都按user_id进行水平切分为两个表,分片规则保持一致。mysq5上冗余一份订单数据,主要用于商家端访问,根据merchat_id分片。
mysql3的order_db0库上有t_order_0、t_order_1、t_order_item_0、t_order_item_1。
mysql5的order_db1库上有t_order_0、t_order_1、t_order_item_0、t_order_item_1。
2.2创建表 见源码中的order_db0、order_db1文件
2.3maven pom文件 比较主要的几个依赖。完整pom见源码。
<!--shardingsphere--> <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId> <version>5.2.0</version> </dependency> <!-- mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency> <!-- kafka--> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> 2.4创建实体类 t_order是普通表,给用户端访问的。
@TableName("t_order") @Data @AllArgsConstructor @NoArgsConstructor public class Order { @TableId(type = IdType.ASSIGN_ID) private Long orderId; private Long userId; private Long merchantId; private BigDecimal amount; private Integer orderStatusId; } t_order_2是冗余表,给商家端访问的。
系统环境:
OS:CentOS Stream 9
CentOS Stream 9 不同于以往版本的 CentOS,没有之前的网络设置相关的命令,如:
service network start/restart/status systemctl start/restart/status network 设置网卡 IP 的配置文件也在 /etc/sysconfig/network-script 目录下已经找不到了,那么来看看应该如何为 CentOS Stream 9 配置静态 IP。当然最简单的办法还是打开设置,用图形界面的方式去修改,操作步骤一目了然,本文中不做描述。
1. 打开网卡配置文件 CentOS Stream 9 的网卡配置文件移动在 /etc/NetworkManager/system-connections/ 目录下,打开对应的网卡配置文件:
[imaginemiracle@localhost ~]$ sudo vim /etc/NetworkManager/system-connections/ens192.nmconnection 2. 修改配置 ipv4 项 该文件打开时默认的配置应该会如下图:
配置其中 [ipv4] 项为手动模式,且设置为指定 IP:
[注]:在配置文件中,不要擅自添加空格,可能会造成无法识别。
3. 重载网卡配置文件 重新载入网卡配置文件:
[imaginemiracle@localhost ~]$ sudo nmcli c reload [imaginemiracle@localhost ~]$ sudo nmcli c up ens192 使用 ifconfig 命令查看网卡配置信息,修改成功。
到此配置完毕 Help nmcli 命令
解析hashMap的put方法是如何存储一个键值。
一、 put方法
代码1-1 V put(K key, V value)方法
public V put(K key, V value) { return putVal(hash(key), key, value, false, true); } 调用put方法存储键值,实际上是调用了HashMap的putVal方法,putVal方法的调用过程中 执行了hash(key) 获取了一个int类型的值
代码1-2 int hash(Object key)方法
static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } 首先该hash方法声明了一个 int类型的值 h ,int类型占4个字节 共32位,然后调用key的hashCode方法获取一个key的散列码 并将该散列码赋值给h,最后执行h^(h>>>16)并返回结果。
解析h^(h>>>16),首先将h无符号右移16位,右移的结果是 32位h的低16位变为高16位的值,而高16位则全部变为0 例如:
0010 1100 1010 0000 0001 0100 1010 0001 将h无符号右移16位--》
1.问题描述: 物体静态拍摄时图像正常,但是动态拍摄时会有拖影现象。
2.问题原因: 只要物体存在运动,拍摄就一定会存在拖影,那么如何判断飞拍项目能否使用?拖影是否会对飞拍造成影响呢?这就要看具体的检测精度要求了,例如对于尺寸测量的项目,拖影对测量精度会有严重影响,在这种情况下,就会要求拖影长度尽可能短,要求不超过1/3像素,或者不超过一个像素等;而对于识别、计数等相关的项目则对拖影的要求会相对宽些,这些要求一般情况下如此,并非绝对,集体需要看实际情况需求。下面详细计算拖影和精度要求之间的关系。
3.解决办法: 我们要记住下面的公式:
拖影对飞拍不造成影响的条件为:曝光时间 * 物体运动速度 ≤ 运动方向精度需求
例如:相机现在的曝光时间是 2000 u s 2000us 2000us,传送带运动的速度是 100 m m / s 100mm/s 100mm/s,使用的相机分辨率为 2448 ∗ 2048 2448*2048 2448∗2048,视野范围是 300 m m ∗ 250 m m 300mm*250mm 300mm∗250mm,物体运动的方向是水平方向,精度要求拖影不超过 1 / 2 1/2 1/2 像素。此时的场景能满足飞拍要求吗?
曝光时间物体运动速度=2000100/1000000=0.2mm
水平方向像素精度要求为=300/2448*1/2=0.061mm
由于 0.2 m m > 0.061 m m 0.2mm > 0.061mm 0.2mm>0.061mm,所以无法满足此飞拍运动场景的精度要求。
根据上面的公式我们就有了两种解决办法:
(a)降低相机的曝光时间
根据上面例子继续计算, 0.061 m / 100 m m / s = 0.
在 Windows 11 下中英文切换使用 Shift 快捷键,在 MacOS 是 Caps 快捷键。使用下面的步骤,就可以将 Windows 的中英文切换快捷键也使用和 Mac 的一样:
下载并安装Powertoys在键盘管理器中增加重新映射键:
设置好之后立即生效,这时就可以愉快的使用Caps来切换中英文输入法。之前的切换方式:Shift,Ctrl+Space,都一直有效。
电机控制中的PID FOC算法中的电流环,速度环都涉及到PID控制
PID又分位置式PID控制算法和增量式PID控制算法,而个人认为在电机控制中使用增量式PID效果会更好一些。下面主要介绍几种增量式PID控制算法及C代码实现。
1.抗积分饱和PID 1.1AN1078文档中的PID PI结构框图和原理
C代码实现:
//电流环D轴PI控制 void PI_Control_D( PID_ID_TypeDef *dParm) { int32_t U,Excess; U = (dParm->Id_Sum + dParm->Id_Kp*dParm->Id_Err)>>12; if(U > dParm->Id_OutMax) { U = dParm->Id_OutMax; } else if(U < dParm->Id_OutMin) { U = dParm->Id_OutMin; } else { dParm->Id_Out = U; } Excess = U - dParm->Id_Out; dParm->Id_Sum = dParm->Id_Sum + dParm->Id_Ki*dParm->Id_Err - dParm->Id_Kc*Excess; } 1.2传统增量式PID 离散化公式:
C代码实现:
int16_t PIDControl_Q(PID_IQ_TypeDef * PID, int16_t Ref, int16_t Cur) { int32_t Kp_Out, Ki_Out, PID_Out,PID_Out_Last; if (!
第一阶段:数学基础+编程语言学习 1. 程序员数学 微积分基础、多元函数微积分、线性代数基础、线性代数高级、概率论等机器学习面试、算法原理常用的数学知识 2. Python学习 Python基础:掌握 Python 基础语法, 具备基础的编程能力;掌握代码编程逻辑,条件判断与循环; 完成小游戏开发 01基本的print函数、二进制与字符编码、变量、数据类型、input函数、运算符02程序的组织结构:顺序、选择、循环结构03常用数据类型操作:数值Python数据分析:掌握数据分析与数据挖掘常用开发库:NumPy、Pandas、 Matplotlib、Seaborn 等。掌握数据分析流程、核心方法、 方法论 Python算法与数据结构《Python数据结构与算法分析》 3. C++学习 C++基础学习《C++ Primer Plus》 C++:SDK后处理(逻辑) 数据类型,STL容器的操作指令,指针,引用,重载,模板,继承,多态,命名空间gdb,ldd工具以及C++的运行流程,堆,栈,静态链接库、动态链接库,库路径问题,CMakeList问题GCC,G++,CMake,Opencv版本不匹配等问题工程团队更关注:前处理加速、算子加速、后处理加速,内存,芯片平台多核优化,单核优化,内存复用,带宽,异构计算 第二阶段:机器学习 1. ML常用算法 线性回归算法:掌握线性回归,最小二乘法,正规方程,梯度下降的各种优化,Linear回归、Ridge、Lasso 回归、弹性网络等回归算法,掌握 L1 与 L2 正则化原理与区别线性分类算法:掌握逻辑回归、OVR、Softmax、SVM 支持向量机算法;掌握拉格朗日乘子法、KKT 条件、SMO 优化算法。分类项目实战无监督学习:掌握聚类算法(Kmeans、DBSCAN、分层聚类)、掌握PCA、LDA 降维原理与推导,掌握 EM 算法,掌握 GMM高斯混合模型应用与原理决策树与集成算法:掌握决策树算法原理与推导,理解信息熵、交叉熵、Gini系数。掌握随机森林、极限森林、Adaboost 、GBDT ,XGBoost 等算法的应用于原理推导概率图模型:掌握概率论相关知识。掌握贝叶斯公式、朴素贝叶斯模型原理与应用、掌握自然语言处理、文本分类操作、隐马尔可夫 HMM 算法、条件随机场 CRF 算法 2. Kaggle实战 掌握概率论相关知识。掌握贝叶斯公式、朴素贝叶斯模型原理与应用、掌握自然语言处理、文本分类操作、隐马尔可夫 HMM 算法、条件随机场 CRF 算法 第三阶段:计算机视觉OpenCV 1. 传统图像算法 数字图像处理基础 图像降噪(滤波、稀疏表达、聚类低质、统计模型、深度学习)图像增强(点运算、直方图变换、空域、频域)图像锐化、图像平滑(再次总结)形态学图像处理图像分割(基于区域、边缘、阈值、图论)数字图像处理进阶 图像全局特征描述图像局部特征描述目标检测与跟踪 【持续更新】
2. 计算机视觉CS231n 3. OpenCV实践 OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库, 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
如何防止个人敏感信息“过度采集”?
如何禁止“大数据杀熟”?
如何避免“个性化服务”泄露隐私?
2021年11月1日,《中华人民共和国个人信息保护法》生效施行,为我们在网上冲浪时守护个人隐私安全。《个人信息保护法》落地实施已一周年,全国信息安全标准化技术委员会(TC260)作为负责网络安全国家标准的专业技术组织,已经制定29项个人信息保护国家标准(其中17项已发布),研制发布8项技术文件和实践指南,参与4项国际标准。
现阶段已梳理出37项标准可为《个人信息保护法》42项条款落地实施提供支撑。
国家标准支撑《个人信息保护法》落地实施导图如下:
本公众号整理了这些国家标准及对应的阶段,如下:
序号标准名称标准号阶段1《信息安全事件分类分级指南》(修订中)GB/Z 20986实施2《网络预约汽车服务数据安全要求》GB/T 42017-2022实施3《网络音视频服务数据安全要求》GB/T 42016-2022实施4《网络支付服务数据安全要求》GB/T 42015-2022实施5《网上购物服务数据安全要求》GB/T 42014-2022实施6《快递物流服务数据安全要求》GB/T 42013-2022实施7《即时通信服务数据安全要求》GB/T 42012-2022实施8《汽车数据处理安全要求》GB/T 41871-2022实施9《人脸识别数据安全要求》GB/T 41819-2022实施10《个人信息安全工程指南》GB/T 41817-2022实施11《声纹识别数据安全要求》GB/T 41807-2022实施12《基因识别数据安全要求》GB/T 41806-2022实施13《步态识别数据安全要求》GB/T 41773-2022实施14《公有云中个人信息保护实践指南》GB/T 41574-2022实施15《移动互联网应用程序(App)收集个人信息基本要求》GB/T 41391-2022实施16《移动互联网应用程序(App)收集个人信息基本要求》GB/T 41391-2022实施17《生物特征识别信息保护基本要求》GB/T 40660-2021实施18《个人信息安全影响评估指南》GB/T 39335-2020实施19《网络安全事件应急演练指南》GB/T 38645-2020实施20《个人信息去标识化指南》GB/T 37964-2019实施21《个人信息安全规范》GB/T 35273-2020实施22《信息安全事件管理 第2部分:事件响应规划和准备指南》GB/T 20985.2-2020实施23《个人信息处理中告知和同意的实施指南》(报批稿)-报批24《互联网平台及产品服务隐私协议要求》(送审稿)-送审25《敏感个人信息处理安全要求》(草案)-草案26《基于个人信息的自动化决策安全要求》(草案)-草案27《机器学习算法安全评估规范》(报批稿)-报批28《个人信息跨境传输认证要求》(草案)-草案29《个人信息去标识化效果评估指南》(报批稿)-报批30《网络数据分类分级要求》(征求意见稿)-征求意见稿31《网络安全应急能力评估准则》(送审稿)-送审32《大型互联网企业内设个人信息保护监督机构要求》(草案)-草案33《移动互联网应用程序(APP)个人信息安全测评规范》(报批稿)-报批34《移动互联网应用程序(APP)SDK 安全指南》(送审稿)-送审35《应用商店的App个人信息处理规范性审核与管理指南》(送审稿)-送审36《移动智能终端的App个人信息处理活动管理指南》(送审稿)-送审37《智能手机预装应用程序基本安全要求》(征求意见稿)-征求意见稿 阅读以下原文,关注公众号获取详细文档材料。
个人信息保护法vs国家标准,37项标准为个人信息加道“安全锁”~(附整理文档及pdf下载)
Copilot:AI自动写代码,人工智能究竟还能取代什么? 前言 在AI绘画掀起一阵热潮之后,AI写代码又逐渐进入了我们的视野,似乎这一步我们还没想到就迅速到来了,难道说AI在取代画家之后,还要取代程序员吗?相信我们都曾幻想过这一天,在编写那些重复且无聊的代码时,虽然能够复制粘贴,但是或多或少确实有过“如果有人能帮我写完就好了”的想法,而这一点几乎已经被实现了;但是正如我们所预想的,随着Copilot的出现,就伴随着一系列问题涌现而来,训练数据的版权问题和生成代码的安全问题就是其中的两个关键。本文就将带领大家来领略AI代码的热潮。
文章目录 Copilot:AI自动写代码,人工智能究竟还能取代什么?前言什么是Copilot概念与背景背后的原理 如何使用AI写代码方法使用实例分析 随之而来的问题训练数据的版权生成代码的安全/正确性 总结 什么是Copilot 概念与背景 Copilot:Github和OpenAI合作研发的AI编程工具,基于数十亿行开源代码进行训练,能够按照不同的程度、不同的功能要求,辅助人类完成编程任务; 背景介绍:
\qquad 在2018年6月,微软公司正式以75亿美元收购Github,而这次收购引起很大反响,认为这代表着软件开发者的影响力的日渐增长,将软件开发的下一个发展看成每个人都可以贡献的世界;但是同样有许多网友戏称这是一桩十分滑稽的收购案例,世界上最大的闭源公司收购了世界上最大的开源公司;微软毫无疑问在操作系统、办公套件等领域是绝对的垄断地位,而Github作为一个开源代码管理平台,同样在现在已经成立了近15年,拥有几千万的开源社区人员和过亿的代码库;
\qquad 但是这样“滑稽的收购案”并没有如许多人想的那样会导致不好的后果,在仅半年之后,Github就开放了可以无限制的免费试用Github私有仓库,并且提出了了统一的企业产品Github Enterprise;而又过了仅几个月后,Github又推出了移动版本,GitHub for mobile,能够让大家无论身在何处都可以继续与开发团队保持协作;而本文的主题Copilot也在去年就已推出。
用处:那么Copilot具体有什么用呢?让我们一一来罗列:
在一些集成开发环境中编程中,给出完整的方法或者算法建议;提供样板代码和辅助单元测试在一些较为简单直观的循环节或其他重复性较强的代码中,甚至能够自动写出完整可用的代码块 背后的原理 官方介绍: OpenAI Codex was trained on publicly available source code and natural language, so it works for both programming and human languages. The GitHub Copilot extension sends your comments and code to the GitHub Copilot service, and it relies on context, as described in Privacy below i.e., file content both in the file you are editing, as well as neighboring or related files within a project.
所需设备: 1、USB TO I2C(上海同旺电子);
2、TMP175 / TMP75 ±1℃精度、12位数字温度传感器
可以参考 “USB TO I2C(上海同旺电子)调试器调试ADT75”
TMP175:27 个地址
TMP75:8 个地址,美国国家标准与技术研究所(NIST) 可追溯
Pin to Pin 兼容
TI 的 TMP175 / TMP75 引脚如下:
ADI 的 ADT75 引脚如下:
USB TO I2C(上海同旺电子):
一、新增命名空间 点击“确定”以后,在命名空间列表处会新增一行记录
“命名空间ID”如果在新增时没有填写的话,则Nacos服务端会自动随机产生一个命名空间ID。 每个命名空间都有一个唯一ID,这个ID是读取配置时指定空间的唯一标识。
二、命名空间的介绍 namespace(命名空间)是nacos针对于企业级开发设计用来针对于不同环境的区分,比如企业开发时有测试环境、生产环境,因此为了保证不同环境配置实现隔离提出了namespace的概念。默认在nacos中存在一个public命名空间,所有配置在没有指定命名空间时都在这个命名空间中获取配置,在实际开发时可以针对于不能环境创建不同的namespace空间。
默认空间不能删除!!!
例如除了默认的命名空间以外,新增了一个dev和prod的命名空间:
接着在nacos的服务列表和配置列表中都可以看到有这两个新增的命名空间:
三、命名空间ID在Spring Cloud项目中的使用 nacos与Spring Cloud 整合时,其配置文件中命令空间ID的使用配置如下:
spring: cloud: nacos: config: namespace: eb31113b-f908-4c68-b5b8-4bd8175f1ca8 此处需要注意的是关于命名空间的引用,namespace字段的值必须是命名空间ID(可以进行自定义名称),不能是命名空间名称,这样本地项目才能正常引用Nacos配置中心服务里面对应的配置文件。
数据库 查看版本信息
show server_version; psql --version 登录
psql -h IP地址 -p 端口 -U 数据库名 -d 数据库
psql -U postgres -d dbname 启动服务:
net start postgresql-9.5 停止服务:
net stop postgresql-9.5 列举数据库:
\l 退出psgl:
\q 字符集
在windows7中安装的postgresql默认使用GBK字符集,经常不能使用显示中文的数据表,解决办法:
注意:在windows 7下的postgresql中写操作时要使用GBK,读操作时要用UTF8;
查看字符集
\encoding 设置字符集为 utf-8 就可以了.
\encoding utf-8 // 设置客户端的字元集 show client_encoding; // 显示客户端的字元集 show server_encoding; // 显示服务器的字元集 创建用户 创建数据库新用户
CREATE USER test WITH PASSWORD '1q2w3e'; 注意:语句要以分号结尾,密码要用单引号括起来。
显示所有数据库(相当于show databases;)
\l
创建用户数据库
CREATE DATABASE testdb01 OWNER test; 将数据库的所有权限赋予用户
数据库表 user表
role表
user_role表
员工jack有两个角色:java架构师和java开发工程师
员工pitter有两个角色:前端开发工程师和开发经理
需求:查询员工-角色中间表,同时关联显示员工表和角色表的信息
数据库查询语句:
SELECT u.*,r.`rid`,r.`rname` FROM role r LEFT JOIN user_role ur ON r.`rid`=ur.`RID` LEFT JOIN USER u ON u.`uid`= ur.`UID` 代码部分 1、User.java
package com.qingruan.bean; public class User { private Integer uid; private String username; private String birthday; private String sex; private String address; //实现user到role的一对多查询 //private List<Role> roles; @Override public String toString() { return "User{" + "uid=" + uid + ", username='" + username + '\'' + "
项目运行
环境配置:
Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。
项目技术:
SSM + mybatis + Maven + Vue 等等组成,B/S模式 + Maven管理等等。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.是否Maven项目: 否;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目 6.数据库:MySql 5.7/8.0等版本均可;
毕设帮助,指导,本源码分享,调试部署(见文末)
3.1 可行性分析 一个完整的系统,可行性分析是必须要有的,因为他关系到系统生存问题,对开发的意义进行分析,能否通过本网站来补充线下校园跑腿模式中的缺限,去解决其中的不足等,通过对本网站,不仅能使工作量不断地减少,还能使工作和管理的效率更加高。所以开发该网站能实现更大的意义和价值, 网站完成后,能否达到预期效果就要通过可行性分析,分析之后,决定此系统是否开发。该校园跑腿系统的开发设计中,对技术、经济、操作方面进行了可行性分析; 3.1.1 技术可行性 本系统开发选择java语言,它被研究的目的就是在于能够为网页创建等可以看到的信息。随着移动互联网技术的不断发展和创新,java俨然已成为下一代互联网的Web标准。所以后台设计选择使用mysql数据库主要用来的建立和维护信息。对于前台开发要求应具备功能完善、易于操作等优点,后台数据库的要求则是能够建立和维护数据信息的统一性和完整性。
3.1.2 操作可行性 现在随着科技的飞速发展,计算机早已经进入了人们的日常生活中,人们的工作环境也不像以前有那么多的要求,需要员工一定要到公司办公,有的工作在家也可以完成。这使得人们的工作效益有了很大的提高。操作的多样性也变高了。因此,管理的计算机化,智能化是社会发展而带来的必然趋势,各种智能的软件层出不穷,不同的软件能完成用户不同的需求,这不仅提高了工作效率还能完成一些客户特定的一些需求。本系统不仅界面简洁明了还采用可视化界面,用户只要用鼠标和键盘就可以完成对相关信息的修改,删除,添加等操作。因为这个系统的操作十分简单,方便上手,对于第一次使用系统的人,只需要很少的时间就可以上手操作。由此可见,本系统在操作上是可行的。
3.1.3经济可行性 基于jsp的校园跑腿系统,该网站软件开发仅需要一台普通的计算机便可完成实现开发,其成本很低。另外,作为毕业设计作品来讲,开发成本基本上可以忽略不计,且该系统软件的投入使用,可以实现更加快速高效的校园跑腿系统,同时还能实现对人力资源和管理资源的有效节约,该校园跑腿系统在经济上完全可行。
3.2 需求分析
利用jsp、MyEclipse和mysql数据库等知识点,结合相关设计模式、以及软件工程的相关知识,设计一个校园跑腿系统,来进行记录用户的信息,以及系统信息的增删改查的功能,根据实现需求,系统需完成这些基本功能:
(1)系统合理显示校园跑腿系统界面、学习资料界面、个人中心界面等界面。
(2)用户、跑腿员和管理员所有的信息都保存与数据库中。
(3)对校园跑腿信息能够进行查询、修改、删除、添加等操作。
3.3 总体设计
根据校园跑腿系统的功能需求,进行系统设计。
前台功能:跑腿员进入系统可以实现首页、跑腿订单、公告信息、留言板、个人中心、后台管理等进行操作;
后台管理员功能包括个人中心、用户管理、跑腿员管理、跑腿订单管理、在线沟通管理、接单信息管理、订单评价管理、留言板管理、系统管理;用户功能包括个人中心、跑腿订单管理、在线沟通管理、接单信息管理、订单评价管理;跑腿员功能包括个人中心、在线沟通管理、接单信息管理、订单评价管理等;系统对这些功能进行整合,产生的功能结构图如下:
图3-1 系统总体结构图
3.4 数据库设计与实现
在每一个系统中数据库有着非常重要的作用,数据库的设计得好将会增加系统的效率以及系统各逻辑功能的实现。所以数据库的设计我们要从系统的实际需要出发,才能使其更为完美的符合系统功能的实现。
3.4.1 数据库概念结构设计 数据库的E-R图反映了实体、实体的属性和实体之间的联系。下面是各个实体以及实体的属性。
在vue3中使用i18n 中在 script setup中直接赋值 例如:
<ul> <li class="tag" v-for="(v, id, index) in message " :ket='v.id' @click="jump(v.id)">{{ v.name }}</li> </ul> const message =reactive([ 0: { name: t('Home.Home'), id: 0 }, 1: { name: t('Home.APP'), id: 1 }, 2: { name: t('Home.Game'), id: 4 }, 3: { name: t('Home.RoadMap'), id: 5 }, ]) 如果按照这种情况,在更换语言时是不会进行切换的,必须通过 computed 来进行计算
const message = computed(() => { return reactive([ 0: { name: t('Home.Home'), id: 0 }, 1: { name: t('Home.
引言 本文主要是记录一下最近查阅的关于iotdb、个人感觉比较不错的博客合集。
合集 1、官方中文文档
2、IoTDB学习笔记
3、IoTDB常用的SQL语句大全
4、Thrift常见异常及原因分析
5、iotdb的数据类型,压缩方式,编码方式
6、全网首发一IoTDB数据库整合MyBatis实现SpringBoot项目CRUD
7、Apache IoTDB:使用Session方式执行操作
8、IoTDB四种插入方式及分析
9、IoTDB-Quality
接入过程流程相对比较多变,总的大类包含基于竞争的随机接入和基于非竞争的随机接入。过程虽然多变,但是如果理解了接入过程中需要解决的问题,就能更好的理解不同流程中的差异点。
接入过程需要解决的主要问题如下:
1. 小区搜索。
包含频率同步/时间同步,帧定时,获取PCI等。此流程是通过解析同步信号PSS SSS获取的。核心是完成终端与基站的下行同步,可以开始接受系统消息。
2. 系统消息。
获取小区配置的带宽等基本信息,以及公共无线信道的配置情况。随机接入传说相关的参数,系统桢号,PHICH配置,PRACH资源等。PRACH资源对于接入至关重要,是在SIB2中的公共无线资源配置信息中携带的。
3. 随机接入。
典型的两大类随机接入过程如图1所示:
图1:用户初始入网的竞争随机接入和切换过程中的非竞争随机接入
随机接入解决的两大核心问题是上行同步和C-RNTI的获取。同时通过随机接入能获得上行调度授权UL_GRANT。随机接入四个过程如下:
3.1 MSG1, 随机接入前导码preamble的发送。在prach信道发送,preamble传输的prach时频位置,对应RA-RNTI。基站通过接收preamble,估计上行定时。msg1的发射功率是在测量下行参考信号中获取的,作为基准功率,当需要重发preamble时,发射功率会不断递增,以提高基站的接受成功率。
3.2 MSG2, 随机接入响应。在DLSCH信道发送,RAR是在MAC层产生,一条MSG2消息可以同时对应多个UE的随机接入请求响应,不涉及上层的逻辑信道。使用RA-RNTI指示PDCCH。通过MSG1获取的上行定时,进行定时调整TA。同时带给终端TC-RNTI,TC-RNTI在后续根据终端的情况,可能采用,也可能不采用。此外,MSG3传输需要的ULSCH资源UL-GRANT也在MSG2中带给终端。TA和UL-GRANT都是在RAR的MAC-PDU中携带。注意此时的上行授权并不是DCI0。
3.3 MSG3, RRC连接建立请求。在ULSCH信道发送,SRB0 CCCH信道,采用TC-RNTI加扰,完成终端的识别。根据UE状态的不同和应用场景的不同,msg3也可能不同。但Msg3中都需要包含一个重要信息:每个UE唯一的标志。该标志将用于步骤四的冲突解决。对于处于RRC_CONNECTED态的UE来说,其唯一标志是C-RNTI。对于非RRC_CONNECTED态的UE来说,将使用一个来自核心网的唯一的UE标志(S-TMSI或一个随机数)作为其标志。此时eNodeB需要先与核心网通信,才能响应Msg3。
3.4 MSG4, RRC连接建立。在DLSCH信道发送,RRCConnectionSetup在SRB0 通过CCCH信道,采用TC-RNTI加扰发送。同时将MSG3发送的码流内容进行封装作为竞争解决标识采用MCE的方式发送给终端。
3.5 MSG5, RRC连接建立完成。在ULSCH信道发送,SRB1 DCCH信道,采用C-RNTI加扰。终端比较竞争解决标识和自身携带的MSG3内容,如果相同则竞争解决,TC-RNTI转为C-RNTI。
4. 场景区分
决定采用竞争的随机接入还是非竞争随机接入,取决于一是终端当前的状态,需要完成什么工作。二是终端是否可以获取非竞争的preamble码。
4.1 初始接入。终端什么内容都没有,所有流程都需要。
4.2 上行失步。需要重同步,因为是终端发起。所以msg1和msg2是必不可少的。msg3会携带ue原有的crnti给基站...
4.3 有上行数据需要发送,无SR资源。通过msg1和msg2获取上行授权。msg3会携带ue原有的crnti给基站...
4.4 切换。与目标站需要上行同步。crnti不变,原则上可以使用非竞争接入。源站可以将非竞争的preamble码通过RRCConnectionReconfiguration发给UE。也可以竞争接入...
4.5 下行数据到达,因为上行失步基站发起非竞争接入。基站通过DCI将非竞争preamble带给终端..
4.6 重建。需要重新同步,基站也不会主动发送非竞争的preamble码给终端,所以采用竞争的随机接入。其msg3是RRCConnectionReestablishmentRequest,会携带原crnti给基站..
问题:
1. 当相同premble码在相同prach时频资源发送时,具有相同的RA-RNTI,基站将采用相同的TC-RNTI答复相同的RAR。此时如何完成竞争解决?是否先接收到的MSG3作为基站接受的终端,后接收的放弃?MSG3是在分配的ULSCH资源上调度,不可能出现相同的时频资源发送。
参考文章:
LTE-TDD随机接入过程(6)-分场景描述竞争接入和非竞争接入的流程_阿米尔C的博客-CSDN博客_非竞争随机接入
前言:之前看到一篇文章介绍的方法只能修改单个文件,后来找到一个能彻底解决的文章但是看到的人不多,所以我也想着帮忙传播一下更高效的方法,让更多人少走弯路。
全局设置 具体步骤: 1. Window > Preferences
2.General > Workspace > Text file encoding
3.选择Other: 然后自己输入 gbk 4.Apply and Close 5.帅比!给作者点一个免费的赞 (*^▽^*)
注意:这里改完后,文件中的中文也会变成乱码,可能部分同学就以为没用,但其实你再删除乱码的,然后重新键入中文,再执行,就会发现成功了~(这个故事告诉我们要坚持走到底才会胜利)
成功的截图:
水平分表(不分库) 项目源码ShardingSphere 5.1.1 读写分离实战 | sharding-jdbc | 详细步骤mysql 垂直分表实战 | sharding-jdbc | 详细步骤mysql 垂直分库 | sharding-jdbc 实战详细步骤mysql 水平分表(不分库)| shardingsphere 实战详细步骤mysql 水平分表(分库)| sharding-jdbc实战详细步骤多表关联 shardingsphere 实战详细步骤广播表 shardingsphere实战详细步骤 1.1数据库规划 在同一个mysql服务器上的订单表t_order水平拆分为t_order_0、t_order_1,根据user_id取模分片,各放一半数据。注意表的order_id不能自增,需要应用自己设置order_id值。
1.2创建表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_order_0 -- ---------------------------- DROP TABLE IF EXISTS `t_order_0`; CREATE TABLE `t_order_0` ( `order_id` bigint NOT NULL, `user_id` bigint NULL DEFAULT NULL, `amount` decimal(10, 2) NULL DEFAULT NULL, `merchant_id` bigint NULL DEFAULT NULL, `order_status_id` int, PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; DROP TABLE IF EXISTS `t_order_1`; CREATE TABLE `t_order_1` ( `order_id` bigint NOT NULL, `user_id` bigint NULL DEFAULT NULL, `amount` decimal(10, 2) NULL DEFAULT NULL, `merchant_id` bigint NULL DEFAULT NULL, `order_status_id` int, PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; SET FOREIGN_KEY_CHECKS = 1; 1.
多表关联 项目源码ShardingSphere 5.1.1 读写分离实战 | sharding-jdbc | 详细步骤mysql 垂直分表实战 | sharding-jdbc | 详细步骤mysql 垂直分库 | sharding-jdbc 实战详细步骤mysql 水平分表(不分库)| shardingsphere 实战详细步骤mysql 水平分表(分库)| sharding-jdbc实战详细步骤多表关联 shardingsphere 实战详细步骤广播表 shardingsphere实战详细步骤 1.1数据库规划 mysql3的order_db0上有t_order_0、t_order_1、t_order_item_0、t_order_ item _1
mysql5的order_db1上有t_order_2、t_order_3、t_order_item_2、t_order_ item _3
根据user_id选择是哪台服务器的数据库,在根据order_id选择到具体的哪张表。order表、order_item表的分片规则是一样的。
1.2创建表 1.2.1 mysql3的order_db0 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_order_0 -- ---------------------------- DROP TABLE IF EXISTS `t_order_0`; CREATE TABLE `t_order_0` ( `order_id` bigint NOT NULL, `user_id` bigint NULL DEFAULT NULL, `amount` decimal(10, 2) NULL DEFAULT NULL, `merchant_id` bigint NULL DEFAULT NULL, `order_status_id` int, PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; DROP TABLE IF EXISTS `t_order_1`; CREATE TABLE `t_order_1` ( `order_id` bigint NOT NULL, `user_id` bigint NULL DEFAULT NULL, `amount` decimal(10, 2) NULL DEFAULT NULL, `merchant_id` bigint NULL DEFAULT NULL, `order_status_id` int, PRIMARY KEY (`order_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = DYNAMIC; SET FOREIGN_KEY_CHECKS = 1; CREATE TABLE `t_order_item_0` ( `order_item_id` bigint NOT NULL, `order_id` bigint NULL, `user_id` bigint NULL, `merchant_id` bigint NULL, `amount` decimal(10, 2) NULL, PRIMARY KEY (`order_item_id`) ); CREATE TABLE `t_order_item_1` ( `order_item_id` bigint NOT NULL, `order_id` bigint NULL, `user_id` bigint NULL, `merchant_id` bigint NULL, `amount` decimal(10, 2) NULL, PRIMARY KEY (`order_item_id`) ); ### 1.
首先说@mock 和 @MockBean
具体的介绍大家可以看
Mockito的@Mock与@MockBean
一言以蔽之就是
@Mock可以生产一个空的类,这个类的方法体都是空的,方法的返回值(如果有的话)都是null。
@MockBean可以生产一个空的类,并且用这个类替代spring容器中同类型的类。
而@InjectMocks就是产生一个空的类,这个类里面的字段用这个测试类里面被@Mock的字段填充。
@SpringBootTest public class MockitoTest { @MockBean private MyService myService; @InjectMocks private UserController userController; @Test public void testGet(){ Person person = new Person(); person.setName("张三"); Long id = 15L; when(personMapper.selectById(id)).thenReturn(person); when(myService.say()).thenReturn("by mock"); Person result = userController.getUserById(id); } 我写了上面的测试代码,发现不论怎么运行,userController里面的MyService 字段都是null,感觉就是userController里面MyService 字段上面的autowired没有起作用。
我一直在调整代码,发现了如下的情况
前提条件
ClassB里面有个ClassA,classa被标注了Autowired
case1
测试类上只有 @ExtendWith(MockitoExtension.class) 的情况下 测试类里被 @MockBean 标注的字段就是空的
case2
测试类上只有 @ExtendWith(SpringExtension.class)的情况下
测试类里被 @MockBean 标注的字段(假定为ClassA)不是空的
但是被 @InjectMocks标注的类(假定为ClassB)
ClassB里面标注了Autowired的ClassA依然是null
case3
@SpringBootTest 里面本身就包含着 @ExtendWith(SpringExtension.
牛客网-华为笔试面试机考在线练习
力扣刷题
All posts in 德科机试一星题 A机试叮当猫-华为机试真题 GavenHwang的博客-华为机试
coder 明轩博客-华为机试23题总结 目录
All posts in 德科机试一星题
1.【寻找身高相近的小朋友】
2.【火星文计算】
3.【最长的指定瑕疵度的元音字串】
4.【消消乐游戏】
5.【判断字符串子序列】
6.【整数对最小和】
7.【按区间反转文章片段】
8.【最长方连续方波信号】
9.【数组拼接】
10.【停车场车辆统计】
11.【乱序整数序列两数之和绝对值最小】
12.【最大括号深度】
13.【打印任务排序】
14.【单词接龙】
15.【数组去重和排序】
16.【找最小数】
17.【按身高和体重排队】
18.【勾股数元组】
19.【乱序整数序列两数之和绝对值最小】
20.【解压报文】
21.【数据分类】
22.【统计射击比赛成绩】
23.【服务器广播】
24.【查找众数及中位数】
26.【最长的指定瑕疵度的元音字串】
27.【we a are team[机房]】
28.【字符串中包含的最长的非严格递增连续数字序列长度】
29.【最长的连续子序列】
30.【考勤信息】
31.【寻找相同子串】
32.【检查是否存在满足条件的数字组合】
33.【字符串筛选排序】
34.【仿LISP字符串运算】
35.【5键键盘的输出】
36.【内存资源分配】
37.【猴子爬山】
38.【计算疫情扩散时间】
39.【计算GPU算力】
40.【字符串变换最小字符串】
41.【篮球比赛】
42.【连续字母长度】
44.【判断一组不等式是否满足约束并输出最大差】
45.【输出字符串中包含所有整数的最小和】
46.【最大数】
47.【找朋友】
48.【字符统计及重排】
49.【乱序整数序列两数之和绝对值最小】
50.【德州扑克】
51.【靠谱的车】
52.【VLAN资源池】
53.【任务最优调度】
明明是浏览器自带功能,测试非要提个bug说要屏蔽这个默认事件我真的拴Q…浏览器有这个保存账号密码的功能确实带来很多方便,但是注册或者修改账号密码的时候也弹出这个框确实不是很友好,还是想办法解决一下。
一番搜索之后,博客大都是给input框加上autocomplete="new-password"或者autocomplete=“off”,还有加上display:none等等这些属性,我也是试了大半天轮番调试,然而一点用都没有,密码肯定要回显密码星或者小圆点,只要type=“password”就依然会弹窗那个密码提示框!直到试了下面的方法,真的解决了!!!
代码实现前代码及效果如下
<el-input autocomplete="false" style="width: 400px" @change="checkpassword" type="password" clearable v-model="filterForm.newPwd" size="mini" ></el-input> 留下了不争气的眼泪真的残了,然后下面是改进的代码及效果,再怎么点击也不会弹出密码提示框了!
<el-input style="text-security:disc; -webkit-text-security:disc;width: 400px" type="text" autocomplete="new-password" placeholder="请输入" v-model="filterForm.newPwd" clearable size="mini"></el-input> 给input框的style加上“text-security:disc; -webkit-text-security:disc;”这两个属性,完美解决了!!试了一下火狐浏览器也同样兼容,没毛病 。
STM32F103ZE驱动TM7705(兼容AD7705)代码加心 具体工程链接:https://download.csdn.net/download/qq_41151593/11645356
1、讲解之前,我还是得狠狠得吐槽一下,我虽然没用AD7705,但还是劝大家尽量选择AD7705,国产的一些芯片真的有点不行,性能确实差的不是一点。博主可以很认真的说的是給TM7705发的部分指令它不会执行(不清楚AD7705,应该会好点吧,毕竟是正版)。最重要的就是它的缓冲开启跟没开启没啥区别, 输入阻抗根本没变。实在是低,用万用表测了一下就20K。下面3张图位证,BUF是第3位。
2、其它功能到是如芯片手册一样,最大刷新率为500K.
3、要驱动TM7705控制引脚的模式设置特别重要 !特别重要! 特别重要!一定要设置对否侧TM7705是无法正常工作的。如下图设置。
4、对于硬件SPI则直接使用正点的例程,使用的是SPI2。这样TM7705就可以直接插在NRF模块接口上.废话不多说上图:
5、至于其它的也不多说上图:
6、至于主函数就更简单了如下图:
读写分离 项目源码ShardingSphere 5.1.1 读写分离实战 | sharding-jdbc | 详细步骤mysql 垂直分表实战 | sharding-jdbc | 详细步骤mysql 垂直分库 | sharding-jdbc 实战详细步骤mysql 水平分表(不分库)| shardingsphere 实战详细步骤mysql 水平分表(分库)| sharding-jdbc实战详细步骤多表关联 shardingsphere 实战详细步骤广播表 shardingsphere实战详细步骤 1.1创建表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1; 1.
参考来源:太阳花的小绿豆的博客_CSDN博客-深度学习,软件安装,Tensorflow领域博主
【OpenMMLab 公开课】目标检测与 MMDetection 上
目录
1. 目标检测任务简介
1.1 早期的目标检测思路演化过程
1.2 密集预测的效率问题
2. R-CNN网络(2014年)
2.1 算法流程及存在问题
2.2 候选区生成(SS算法)
2.3 深度网络提取特征
2.4 SVM分类器
2.5 回归器修正候选框位置
2.6 R-CNN以后两阶段方法的改进思路
3. Fast R-CNN网络(2015年)
3.1 算法流程及存在问题
3.2 网络训练数据集设置
3.3 ROI Pooling层
3.4 ROI Align层
3.5 分类器以及边界框回归器
3.6 多任务损失
4. Faster R-CNN网络(2016年)
4.1 算法流程及改进之处
4.2 RPN网络
4.3 Faster R-CNN训练过程
5. FPN+Faster R-CNN网络(2016年)
5.1 FPN结构亮点
5.2 FPN网络结构
5.3 FPN+Faster R-CNN的预测过程
1. 目标检测任务简介 目标检测任务主要有两个问题需要解决:识别目标类别(分类),确定目标位置(回归)。分类问题很好理解,就是确定检测到的目标属于哪一类。回归问题是为了确定目标的位置,因为我们需要一个矩形框来框住所检测到的目标,这就需要调整矩形框的中心坐标以及宽和高到最优的位置,坐标点以及宽和高的变化是连续的,因此是回归问题。基于深度学习的目标检测算法主要分为两类Two Stage 和 One Stage。本文主要介绍Two、Stage算法
InnoDB Cluster mysql8 基于bin log的复制 | 主从复制 | 异步复制 | 详细步骤
[图文]搭建InnoDB Cluster详细流程
mysql8半同步复制详细步骤
1 概述 InnoDB Cluster 由至少三个 MySQL Server 实例组成,它提供高可用性和扩展功能。
InnoDB Cluster 使用以下 MySQL 技术:
MySQL Shell,它是 MySQL 的高级客户端和代码编辑器。
MySQL Server 和 Group Replication,它使一组 MySQL 实例能够提供高可用性。 InnoDB Cluster 提供了一种替代的、易于使用的编程方式来使用组复制。
MySQL Router,一种轻量级中间件,可在您的应用程序和 InnoDB Cluster 之间提供透明路由。
下图概述了这些技术如何协同工作:
基于 MySQL Group Replication 构建,提供自动成员管理、容错、自动故障转移等功能。 InnoDB Cluster 通常以单主模式运行,有一个主实例(读写)和多个从实例(只读)。高级用户还可以利用多主模式,其中所有实例都是主实例。
您使用作为 MySQL Shell 的一部分提供的 AdminAPI 来处理 InnoDB Cluster。 AdminAPI 在 JavaScript 和 Python 中可用,非常适合 MySQL 部署的脚本和自动化。通过使用 MySQL Shell 的 AdminAPI,您可以避免手动配置许多实例。相反,AdminAPI 为一组 MySQL 实例提供了一个有效的现代接口,使您能够从一个中央工具配置、管理和监控您的部署。
一、假若你始终在一台电脑上提交上传代码,如果你需要回滚到指定commit,
1.直接Git bash打开本地项目所在文件夹,
2.然后输入指令Git log会查看提交历史,
3.找到并复制你要的commit hash值(图中蓝色线条所指)
4.输入指令git reset --hard 45c00a6924d2cd8781df1a2f21df17accaa442c3(commit hash 值)
HEAD为指针,HEAD -> dev 当前分支为dev,
为何只显示四条commit 记录?因为命令窗口太小,按ENTER键继续向下查看更早的提交记录,或者直接按END键查看最初的提交记录。
git里复制粘贴请用右键 -copy复制 -paste粘贴 , 或者使用快捷键 ctrl+shift C ctrl+shift+Insert
HEADis now at 45c00a6 完成SKU,即代表已经讲代码回滚到指定的commit版本。
二、如果你使用不同电脑提交上传,当你git log时,会丢失那几条提交记录
1.登录GitHub 到当前项目下,点击查看提交历史
2.观察并选择你需要回退的提交
3.复制下你的commit hash值
4.输入指令git reset --hard 45c00a6924d2cd8781df1a2f21df17accaa442c3(commit hash 值)
相关Git知识点:
git log 查看历史提交记录
git reset HEAD 回退到当前版本(取消暂存区的内容)
git reset --hard HEAD^ 回退到上个版本
git reset --hard HEAD^^ 回退到上上个版本
git reset --hard id(commit hash值) 回退到指定版本
vscode开发通用插件集合 1.Live Serve2. Chinese3. GitLens4. Color Highlight5. Highlight Matching Tag6. any-rule7. Time Master 或 Code Time8. Vetur9. ESLint10. Vue-format11. ENV12. background13. Code Runner14. Local History15. Postcode 此文仅是本人多年的一些经验,用到过一些插件的总结,不去做各种比较,客官们觉得哪个好用就用哪个。外观与功能性的都有 1.Live Serve 一个具有实时加载及更新功能的本地小型服务器,写代码很好用,Ctrl + s保存,浏览器实时更新简单的节点应用程序,用于工作目录及其子目录。它也监视文件的变化,当这种情况发生时,它通过web套接字连接向浏览器发送消息,指示它重新加载 2. Chinese 英语弱鸡必备(我用是因为:我爱中国人!从不学洋文!)安装完需要重启 3. GitLens 这是强烈推荐安装的,防止各位在接手别人代码的时候(特别是”屎山”),知道是谁写的,这个时候就不会骂错人与Git搭配使用,能够知道哪行代码是谁写的,谁提交的,非常精确,精准的知道谁可以骂,领导写的代码不能骂(一般在心里偷偷骂)代码格式化的时候需谨慎(不然都变成你写的了) 4. Color Highlight 这个没啥说的,代码高亮显示,有趣的是,颜色代码跟着变化,很直观 5. Highlight Matching Tag 标签配对,方便代码很多的时候找标签 6. any-rule 常用的正则表达式都在这,且会日常更新使用方法看图(主要是省去了去查百度和验证的时间) 7. Time Master 或 Code Time 记录你的敲代码时间及打开编辑器的时间,方便各位计算时薪多少,计算投入与产出比注意别被老板或者领导看到,特别是你摸了一天鱼(如果各位公司很闲,就不要下了) 8. Vetur 一句话:Vue开发必备(语法高亮) 9. ESLint 格式化代码用的,很好用,特别是代码习惯不太好的伙伴,鼠标右键选择,一键操作可以自行配置:找到设置 -> 用户 -> 扩展 -> eslint,选择在 settings.
1. 用法 下面以初始化、连接、写、读、断开连接这几个部分来介绍QTcpSocket的用法。
假设在xxx类实现tcp通信。
初始化 /* 初始化 */ void xxx::init() { m_socket = new QTcpSocket(this); /*下面是几种常用的信号,更多的信号可以查看QAbstractSocket和QIODevice文档*/ connect(m_socket, &QTcpSocket::connected, this, [] () { qDebug() << "socket已连接"; }); connect(m_socket, &QTcpSocket::disconnected, this, [] () { qDebug() << "socket已断开连接"; }); connect(m_socket, &QTcpSocket::stateChanged, this, [] (QAbstractSocket::SocketState socketState) { qDebug() << "socket状态改变" << socketState; }); connect(m_socket, &QTcpSocket::readyRead, this, [] () { qDebug() << "有数据可读"; }); } 连接 /* 初始化 */ bool xxx::connect() { m_socket->connectToHost(m_ip, m_port); //连接 /* 等待连接完成,设置连接超时为500ms,超时视为连接失败 */ return m_socket->waitForConnected(500); } 发送 /* 发送数据 */ bool xxx::send(const QByteArray &byteArray) { if (m_socket->write(byteArray) == -1) { /* 写数据时出现错误 */ qDebug() << m_socket->errorString(); //错误的详情 return false; } if (!
编写一个函数fun,函数的功能是:判断一个整数是否既是5又是7的整倍数。若是,输出yes,否则输出no。在主函数中输入任意一个正整数,调用fun函数,输出该数对应的结果
#include<stdio.h> int fun(int n) { if(n%5==0 && n%7==0) return 1; else return 0; } int main() { int n; scanf("%d",&n); if(fun(n)==1) printf("yes"); else printf("no"); return 0; }
Disk = { 'A': 2, 'B': 2, } Memory = {} T = 10 flag = False def r1(read_data): print('读取完成:' + read_data + '={}'.format(Disk[read_data])) def r2(read_data): print('读取完成:' + read_data + '={}'.format(Disk[read_data])) def w1(write_data): global T Disk[write_data] = T print('写入完成:' + write_data + '={}'.format(Disk[write_data])) def print_now_lock_status(list): print(list) lock_list = { "A": { 'model': '默认', 'Wait': False, 'wait_list': {'Tran': '', 'Mode': '', 'wait': False, 'Tnext': None, 'Next': {'Tran': '', 'Mode': '', 'wait': False, 'Tnext': None, 'Next': None}, }, }, "
一、DataX简介 DataX官网文档:https://github.com/alibaba/DataX/blob/master/introduction.md
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
1.1、DataX 3.0框架设计 DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。
1.2、DataX3.0核心架构 DataX 3.0 开源版本支持单机多线程模式完成同步作业运行
1、Job
DataX完成单个数据同步的作业。一个Job对应一个进程。Job模块负责task切分,TaskGroup管理等。
2、Task
Task是DataX的最小单元,每个task负责一部分数据同步工作。
3、TaskGroup
Job在切分完多个Task后,会调用DataX的scheduler模块,根据配置的并发量,将拆分成的多个Task分配到不同的TaskGroup中,每个TaskGroup负责以一定并发运行分配给他的全部Task,每个TaskGroup默认的并发量是5.
4、Task的执行流程
每个Task由TaskGroup启动,每个Task对固定启动Reader—>Channel—>Writer的线程来完成数据同步工作。
DataX Job运行起来后,由Job监控并等待每个TaskGroup的task执行完成,等所有TaskGroup任务执行完成后,Job成功退出。否则,异常退出。
5、DataX调度流程
举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。
DataX的调度决策思路是:
1)DataX Job根据分库分表切分成了100个Task。
2)由于配置了20个并发,每个TaskGroup默认并发度是5,所以需要4个TaskGroup
3)由4个TaskGroup平均切分100个Task,每个TaskGroup被分到了25个Task,共启动5个并发。
1.3、DataX优势 1、可靠的监控
2、数据转换功能丰富
3、精准的流控
4、同步性能好
5、容错机制健壮
6、使用体验好
二、DataX源码解读 2.1、入口类:Engine 入口类为com.alibaba.datax.core.Engine.java main函数
1、解析args入参:
Options options = new Options(); options.addOption("job", true, "Job config."); options.addOption("jobid", true, "Job unique id."); options.addOption("mode", true, "Job runtime mode."); BasicParser parser = new BasicParser(); CommandLine cl = parser.
在debug时,需要给程序传递特殊的环境变量,而又不想修改系统的环境变量,使用以下方法。对于不同的编程语言,其使用属性的名称不一样。
1. c/c++ 使用environment 关键字,在配置文件中增加以下配置。注意格式。
"environment": [{"name": "ENV_TEST", "value": "1"}, {"name": "TEST1", "value": "23"} ], 2. Python 使用 env 关键词去设置传递的环境变量,注意格式。
"env": { "ENV_TEST":"1", "ENV1":"12", }
目录
一,准备数据集
1.1 挑选照片
1.2 做标注
二,下载YoloV7
三,划分数据集
四,模型训练
4.1 创建yaml文件
4.2 修改默认参数
4.3 开始训练
五,训练模型遇到的问题
5.1 UnicodeDecodeError: 'gbk' codec can't decode type 0xaf in position 525: illegal multibyte sequence
5.2 subprocess.Called processError: Command 'git tag' returned non-zero exit status 128
六,测试
七,解决标签中文显示问题
一,准备数据集 1.1 挑选照片 公主做的是缺陷检测方向,没有好办法,只能靠人眼,公主试过用阈值分割法来挑选,但是!如果阈值分割法能准确分离缺陷,就不用用yolo了不是?特别是灰度相近,而且每张照片灰度都不同,背景与缺陷灰度对比度很接近,比如上图中的硌伤~特别是背景有噪声的时候如下图,阈值分割法就直接躺平了~ 没办法,从4T的数据里挑出来,挑的公主眼睛都要瞎了~~~
1.2 做标注 公主用的labelImg,大部分做yolo标注都用这个,也是很主流的标注工具,安装方法见公主另一篇博客。那篇博客标注方法没写全,在这里详细介绍一下:
(1)修改默认标签。公主先只做了一种缺陷,缺陷名称为“硌伤”,因此只写了一种class。在labelImg的安装文件夹中的data/predefined_classes里面修改class:
(2)创建images文件夹和labels文件夹,可以放在任意的文件夹下。将挑选出的照片放到images的文件夹中。
(3)在cmd中cd到labelImg文件夹下,运行python labelImg命令打开labelImg主页面。或者直接在pycharm的Terminal中打开也行,公主是直接用pycharm的Terminal来运行的。
(4)在主页面上打开待标注文件,进行标注
labelImg如上图所示。
第一步先将标注类型改为YOLO,这一步非常关键!第二部修改Save Dir到之前创建的labels的文件夹第三步Open Dir,打开之前创建的images文件夹,此时会出现4框中的所有文件双击想要标注的图像,通过Create RectBox在需要标注的位置画出框,选好标注类型就可以啦~可以选中View->Auto Save Mode,这样标注完就不用手动点Save了,直接点Next Image跳到下一张即可自动保存。此时可以看到labels文件夹中多了一个与图像同名的.txt文件,即为标注文件啦!注意,标注与图片是一一对应的! labels的格式如下:
二,下载YoloV7 下载地址
下载之后的目录结构是这样的:
三,划分数据集 由于公主是一股脑将所有图像放到一起了,由于工业生产的特殊性,临近时间产生的缺陷相似,因此需要随机将图像拆分为训练集,验证集及测试集。
1. 关闭虚拟机,设置扩展磁盘容量 网上教程很多,此处不赘述,直接关闭虚拟机然后在设置中修改就可以 2. 打开虚拟机,分配扩展出来的磁盘容量 2.1 扩容前需要在虚拟机中安装一个软件 ”Gparted” sudo apt-get install gparted 然后打开:
可以看到如下界面:
2.2 直接右键,然后选择调整大小 / 移动 注意此时,上图中的未分配容量在 dev / sda2 的外面
然后调整dev / sda2的大小,拉到最大,就把未分配容量放入dev / sda2 中了:
最后,调整挂载在 根目录/ 的dev / sda5 分区,拉到最大即可:
最终结果如下:说明调整成功
最后记得保存操作,就可以完成了!
在公网IP为x.x.x.x,安装CentOS8(Alibaba Cloud Linux 3.2104 LTS 64位)系统的服务器上进行zabbix-server安装。
在公网IP为y.y.y.y,安装CentOS8(Alibaba Cloud Linux 3.2104 LTS 64位)系统的服务器上进行zabbix-agent安装。
mariadb-10.5+httpd-2.4安装在公网IP为x.x.x.x的服务器上。yum安装的软件版本:mariadb-10.5+httpd-2.4+zabbix-5.0。
httpd安装 第一步,安装httpd并开启httpd服务。(Web中间件模块)
命令:yum -y install httpd
systemctl start httpd
systemctl enable httpd
# 查看apache服务状态是否为“Active: active (running)”
systemctl status httpd
systemctl stop httpd
systemctl restart httpd
第二步,启动后需要关闭服务器防火墙。
命令:systemctl stop firewalld
第三步,测试httpd服务是否安装成功。
浏览器访问: PHP 7.4.6 - phpinfo(),若页面显示“Welcome to HTTP Server Test Page!”,则说明httpd服务安装成功。
MariaDB配置 linux系统版本:CentOS8 64位
安装源文件版本:mariadb-10.5
第一步,安装前,检测系统是否自带安装MySQL。
命令:rpm -qa | grep mysql
若结果显示类似“mysql-libs-5.1.52-1.el6_0.1.x86_64”,则可以选择进行卸载。
# 普通删除模式
rpm -e mysql-libs-5.1.52-1.el6_0.1.x86_64
实现属性窗口编辑器 pro文件中添加
include($$[QT_INSTALL_PREFIX]/../Src/qttools/src/shared/qtpropertybrowser/qtpropertybrowser.pri) 定义:
#include "qtvariantproperty.h" #include "qttreepropertybrowser.h" // 创建 private slots: void variantPropertyValueChanged(QtProperty *property, const QVariant &value); private: QtTreePropertyBrowser *m_propertyTree; QtVariantPropertyManager* m_pVarManager; QtVariantEditorFactory* m_pVarFactory; // 记录属性和对应名称 QMap<QtProperty*,QString>m_property_dic; 使用:
// 属性树控件 m_propertyTree = new QtTreePropertyBrowser(this); m_propertyTree->setGeometry(0,0,500,250); m_propertyTree->setResizeMode(QtTreePropertyBrowser::Interactive); m_propertyTree->setSplitterPosition(100); // 属性管理 m_pVarManager = new QtVariantPropertyManager(m_propertyTree); // 属性编辑 m_pVarFactory = new QtVariantEditorFactory(m_propertyTree); // 分组 QtProperty *groupItem = m_pVarManager->addProperty(QtVariantPropertyManager::groupTypeId(), QString::fromLocal8Bit("组1")); // 创建属性 设置类型 显示名称 QtVariantProperty *item = m_pVarManager->addProperty(QVariant::Int, QString::fromLocal8Bit("int")); item->setValue(101); groupItem->addSubProperty(item); // 插入组 m_property_dic[item] = QStringLiteral("
FragmentContainerView extends FrameLayoutFragmentContainerView是专门为Fragments设计的自定义布局。它扩展了FrameLayout,因此它可以可靠地处理Fragment 事务,并且它还具有与Fragment 行为协调的附加特性FragmentContainerView应用作Fragments的容器,通常设置在活动的xml布局FragmentContainerView将只允许Fragment的Fragment.onCreateView返回的视图。尝试添加任何其他视图将导致IllegalStateException对于17以上的API,FragmentContainerView禁用布局动画和转换。否则,应通过FragmentTransaction.setCustomAnimations完成动画。如果animateLayoutChanges设置为true或直接调用setLayoutTransition,则将引发UnsupportedOperationException使用退出动画的Fragment 在FragmentContainerView的所有其他Fragment 之前绘制。这样可以确保退出的Fragment 不会出现在视图的顶部。 <?xml version="1.0" encoding="utf-8"?> <androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fcv" android:name="com.krd.fragment.FirstFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:tag="first_tag" tools:context=".MainActivity"> </androidx.fragment.app.FragmentContainerView> public class MainActivity extends AppCompatActivity { private Button btn_First, btn_Second; private FragmentTransaction fragmentTransaction; private FirstFragment firstFragment = null; private SecondFragment secondFragment = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initData(); initClick(); initFragment(); } private void initView() { btn_First = findViewById(R.id.btn_First); btn_Second = findViewById(R.id.btn_Second); } private void initData() { } private void initClick() { btn_First.
根据前缀keyPre 删除keys
String keyPre = "CONTROLLER_getTodayStocks_1"; Set keys = redisTemplate.keys(keyPre + "*"); if (ObjectUtil.isNotEmpty(keys)) { redisTemplate.delete(keys); } debug看下执行流程:
1、keyPro不能为空
redisTemplate.keys()方法里面有个断言,为空就失败
2、序列化keyPre,把字符串变为字节数组
这里可以看到如果keyPre为null,序列化之后返回null
3、这里会拿到redis中所有匹配上的key,然后执行excute两个参数的方法
执行excute方法传入两个参数 1、连接对象,这个对象是后面创建的 2、true,表示暴露这个连接
然后执行三个参数的方法 1、回调 2、表示暴露连接 3、表示不使用管道
管道(pipeline)可以一次性发送多条命令并在执行完后一次性将结果返回,pipeline 通过减少客户端与 redis 的通信次数来实现降低往返延时时间,而且 Pipeline 实现的原理是队列,而队列的原理是时先进先出,这样就保证数据的顺序性。
现在执行三参数的excute
1、拿到连接工厂
2、创建redis连接对象,未开启事务支持
3、看一下redis事务同步管理器中是否存在连接
4、对redis连接对象前置处理
5、判断连接是否使用了pipeline,只有开启了pipeline这里才会开开pipeline
6、判断是否暴露连接,很显然两个参数的excute是暴露连接了的,这时使用前面创建好的连接对象,否则会创建一个代理连接对象
7、接下来redis该行动了
8、这里根据前面创建的连接和keyPre,执行keys方法
9、在这里执行keys方法,执行invoke方法返回一个Set集合
invoke执行doInvoke
这里调用redis连接池执行命令,这里会等待执行命令的线程返回结果
10、执行完doInRedis之后就拿到符合匹配条件的keys
11、判断是否有管道开启,开的的话就关闭
12、RedisTemplate对结果进行后置处理
13、断开连接,返回结果
14、可以看到此时已经获取到redis中匹配的key
Arcgis地图制图中,经纬网格的添加详细参见:
Arcgis使用教程(十)ARCGIS地图制图之经纬网格添加_空中旋转篮球的博客-CSDN博客
1.加载数据 在Arcmap中加载中国矢量图层数据(中国省级行政区图,国界线两个图层),切换到Layout View窗口,设置地图符号要素并添加比例尺等要素,默认添加经纬网。
设置的 页面大小是width:33 ;height:29.7 默认比例尺:16000000
2.经纬网参数设置 2.1 经纬网参数类别 我们打开Data Frame Properties 窗口,点击Grids面板按钮,如下图:
点击Propoties属性按钮:
Grids属性中有6个面板可以设置不同的参数:
(1)Axes:轴线 ,包括Major Division Ticks,Subdivision Ticks和Border Propoties三种属性。
(2)Interior Labels:内部标签,设置是否显示内部标签
(3)Labels:标签,主要设置网格标签字体风格,大小,间距,方向等参数,这个标签打开速度很慢,需要反映较长时间。
(4)Lines:线 ,设置网格线风格样式
(5)Hatching:剖面线设置
(6)Intervals :间距 网格线间距设置
2.2 经纬网各类别参数设置 2.2.1 Axes:轴线 这个窗口中的参数主要用于设置Ticks(下图中的小短线),Top Left Bottom Right设置是否显示几个对应方位上的Ticks。Display ticks设置显示在图内还是图外。Sise 设置长度大小。
2.2.2 Interior Labels:内部标签 这里参数设置比较简单,通常默认不勾选。即不显示内部网格标签。
如果要设置的话就需要设置间隔度数,比如设置20°显示如下:
2.3.3Labels:标签 设置外部主网格显示标签风格,大小,方向以及设置显示度分秒格式等。
Label Axes设置四个边是否显示标签,勾选就是显示,不勾选就不显示。这里默认都显示。
上文中标签字体太小,我们设置大一些,如下图。
此外,我们还需要设置经纬度显示格式,由于中国经纬度范围分布很广,我们间隔默认的是10°,都是整数度数,所以不需要显示度分秒后面的分和秒。这里我们点击Additional Propoties属性进行设置。将分、秒选项取消勾选。
标签方向左右两边设置为垂直标签。
显示效果如下: 2.3.4 Lines:线 ,设置网格线风格样式 上图(2.3.3中)默认就是第一个选项的效果。
第二个选项效果如下:
第三个选项就是都不显示了。
2.3.5 Hatching:剖面线设置 这里通常默认即可。
我们设置5°间隔看看效果(设置为10°看不出效果,可能应为和内部网格间隔一样被重叠覆盖了):
每条内部经纬线上每个5°有一个红色断线间隔。
2.3.6 Intervals 间距 这里根据实际图像范围大小进行设置。