MySQL经典100问

目录 常规篇 1、说一下数据库的三大范式? 2、只查询一条数据,但是也执行非常慢,原因一般有哪些? 3、count(*)、count(0)、count(id)实现方式的区别? 4、误删数据怎么办? 5、drop、truncate 和 delete 的区别 6、MySQL大表查询为什么不会爆内存? 7、深度分页(超大分页)怎么处理? 8、日常开发中你是怎么优化SQL的? 9、MySQL 的并发连接与并发查询什么区别? 10、MySQL更新字段值为原来的值内部是怎么操作呢? 11、datetime和timestamp有什么区别? 12、事务的隔离级别有哪些? 13、在 MySQL 中有两个 kill 命令 索引篇 1、索引分类有哪些? 2、聚集索引和非聚集索引有什么区别? 3、InnoDB 为什么设计B+树,而不是B-Tree,Hash,二叉树,红黑树? 4、讲一讲聚簇索引与非聚簇索引? 5、非聚簇索引一定会回表查询吗? 6、讲一讲MySQL的最左前缀原则? 7、什么是索引下推? 8、Innodb为什么要用自增id作为主键? 9、事务ACID特性的实现原理? 10、MyISAM和InnoDB实现B树索引方式的区别是什么? 11、索引有哪些分类? 12、有哪些场景会导致索引失效? 方案篇 1、有一个未分库分表的系统,如何设计才可以让系统动态切换到分库分表上? 2、如何设计可以动态扩容缩容的分库分表方案? 原理篇 1、一条 MySQL 语句执行步骤是什么样的? 2、order by 排序内部原理是什么样的? 3、MVCC 实现原理? 4、change buffer是什么,有何作用? 5、MySQL是如何保证数据不丢失? 6、为什么删除了表,表文件的大小还是没变? 7、binlog三种格式对比 8、MySQL加锁规则 9、什么是脏读、不可重复读、幻读呢? 10、MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了? 框架篇 1、Mysql 主从复制原理的是啥? 2、Mysql主从复制同步方式有哪些? 3、Mysql主从同步延时产生原因?怎么优化? 4、Mysql主从同步延时产生原因?怎么优化? 5、主库出问题如何完成主从库切换? 6、bin log/redo log/undo log是什么? 常规篇 1、说一下数据库的三大范式? 第一范式:确保每列保持原子性;

前端使用print.js实现打印

前言 项目中经常会用到前端调用浏览器打印的功能,也经常会遇到一些问题,写这篇文章是为了更好的梳理一下相关内容。下面的内容基于vue。 如果需要用到前端生成二维码可以看我的这篇文章:在vue项目中使用qrcodesjs2生成二维码 注:以下都是基于edge浏览器进行的,另外身边没有打印机,实际打印效果如何不清楚 print.js 这里用一下别人写好的库,print-demo 项目下载下来后,找到print.js,我们只需要这个。如果是vue2的项目直接用就好了,vue3的项目就简单改一下就可以 // const MyPlugin = {}; // MyPlugin.install = function (Vue, options) { // // 4. 添加实例方法 // Vue.prototype.$print = Print; // }; // export default MyPlugin; export default Print; 如何使用 声明打印区域 可通过设置class 类名或 id 指定打印区域,但由于vue项目涉及到打包部署,推荐使用ref获取DOM节点,如果使用id或class获取,打包部署后打印内容可能显示空白。 <div class="printDom">指定打印区域</div> <div id="printDom">指定打印区域</div> <div ref="printDom">指定打印区域</div> 调用打印方法 vue2 项目 //main.js import Print from './print'; Vue.use(Print); // xx.vue this.$print(this.$refs.printDom, {}); vue3项目,在需要使用的页面,引入方法,然后方法调用。 声明不打印区域 声明"no-print"类名 ,此时print方法中,不需要特意声明,默认会剔除.no-print区域 <div class="no-print">不打印区域</div> Print('#printDom'); 自定义类名,此时需要在print方法中通过"noPrint"属性指定不打印区域 <div class="

Flatmap三大功能

1,压平切分: 2,转换数据结构: 3,过滤:因为flatmap的返回值是void,所以数据可以直接写出去 //TODO 3.将数据转换为JSON对象 SingleOutputStreamOperator<JSONObject> jsonObjDS = pageStringDS.map(JSON::parseObject); //TODO 4.过滤数据,只需要访问主页跟商品详情页的数据 SingleOutputStreamOperator<JSONObject> homeAndDetailPageDS = jsonObjDS.filter(new FilterFunction<JSONObject>() { @Override public boolean filter(JSONObject value) throws Exception { String pageId = value.getJSONObject("page").getString("page_id"); return "good_detail".equals(pageId) || "home".equals(pageId); } }); //使用FlatMap代替 // pageStringDS.flatMap(new FlatMapFunction<String, JSONObject>() { // @Override // public void flatMap(String value, Collector<JSONObject> out) throws Exception { // JSONObject jsonObject = JSON.parseObject(value); // String pageId = jsonObject.getJSONObject("page").getString("page_id"); // if ("good_detail".equals(pageId) || "home".equals(pageId)) { // out.

Yolov5笔记--RKNN推理部署源码的粗略理解

1--基础知识 ①Yolov5的输出 格式一般为a × b × c × 85的形式,其中a*b*c表示框的数目,85则涵盖框的位置信息(x,y,w,h)、置信度Pc和80个类别的预测概率c1,...,c80。下图展示了不同版本Yolov5的输出信息: ②阈值过滤锚框 简要介绍两种过滤锚框的方法: A:利用置信度(box_confidence,即Pc)和预测概率(box_class_probs,即c1,...,c80)计算锚框的得分(box_scores),如果最高的得分高于过滤阈值(threshold),则保留该锚框的信息,反之过滤该锚框。 B:利用非线性激活函数(如Sigmoid)函数等处理置信度(box_confidence,即Pc),将最高的结果与过滤阈值比较,高则保留,低则过滤。(RKNN提供的方式) ③非极大值抑制(NMS) 通过计算交并比(intersection over Union,IOU)进一步过滤锚框。 IOU介绍:IOU即两个矩形框的交集面积与并集面积的比值。 简略介绍Yolov5利用NMS过滤锚框的一种方法:计算IOU的值,若value≤NMS_THRESH,则保留锚框,反之去除。 2--RKNN部署Yolov5源码 项目地址:rknn-toolkit2 import os import urllib import traceback import time import sys import numpy as np import cv2 from rknn.api import RKNN ONNX_MODEL = 'yolov5s.onnx' RKNN_MODEL = 'yolov5s.rknn' IMG_PATH = './bus.jpg' DATASET = './dataset.txt' QUANTIZE_ON = True BOX_THESH = 0.5 NMS_THRESH = 0.6 IMG_SIZE = 640 CLASSES = ("person", "bicycle", "

语义分割和目标检测是什么关系?

首先,让我们看一下语义分割和目标检测的目标分别是什么? 语义分割的目标 语义分割的任务是对输入的图像进行逐像素的分类,标记出像素级别的物体。 如上图,图1中把猫、天空、树、草地进行了逐像素的分类;图2中把牛、天空、树、草地进行了逐像素的分类。 目标检测的目标 目标检测的任务是对输入的图像进行物体检测,标注物体在图像上的位置,以及该位置上物体属于哪个分类。 如上图,模型把图中的人、狗、马分别进行了位置标注,并且也给出了对应的分类类别。 两种任务的异同之处: 一、从大方向的任务特点上来说 从大方向的任务特点来说,语义分割和目标检测任务目标都在意两个关键信息: 1)物体的位置 待检测的物体,它在图像中位于什么位置。 对于语义分割来说,这个信息需求的精准度在像素级别的。概括地说,我们需要把物体的轮廓描绘出来,以此来体现它的位置信息。 对于目标检测来说,这个信息需求的精准度仅在标注其外切矩形。换句话来说,把物体框出来,以此来体现它的位置信息。 2)物体的分类 有了位置信息之后,语义分割和目标检测都存在对物体的分类。不同的是: 对于语义分割来说,它提供的信息中位置信息和分类信息是有重叠的,即通过标记每个像素的分类,同时也达到提供位置信息。 对于目标检测来说,分类信息是针对每个标注的框的,每一个框对应着自己的分类。 二、从数据格式来说 正如前文所说,由于在任务的目标上存在着一些区别,这就使得它们需要不同的数据格式进行标注。 1)语音分割的数据格式 如上图,这张图中先验是5个类别。在分类中,会有5个channel,每个channel负责一个类别的概率预测。最后,每个像素上,以5个channel中的最大值作为最终分类,以此完成图像语义分割的标注工作。 2)目标检测的数据格式 从上图中我们可以看到,对于目标检测的数据格式分为了两个部分,分类和框的坐标。具体体现为: 分类最终体现在对每个潜在框分类的1*1*channel上,每个channel代表一个分类,取值最大的channel作为最终分类;位置信息会用4个值来保存:被分类的物体中它的框的坐标则为左上角的x和y坐标,以及宽和高的尺寸。 共享上游的特征提取网络 无论是语义分割和目标检测任务,它们都有一个特征提取的backbone。它们通常是从图像分类网络中进行嫁接的。当我们发现有性能更佳的分类网络时,把它嫁接到语义分割或目标检测上,通常也能带动下游任务性能的提升。 如上图,在Mask RCNN中,它同时处理了语义分割和目标检测的任务,在此网络的上游阶段,它们共享着ResNet的backbone网络。 小结 语义分割和目标检测,它们有着类似的任务目标,把物体标注出来,并且标记物体的具体分类信息。不同的是,语义分割所标记的物体是像素级别的颗粒度的,而目标检测标记的物体是其外切框。 不过,虽然存在着不同的任务细节特点,但是它们在网络上游上具有相同的特征提取的需求,于是,它们可以共享以图像分类为backbone的特征提取网络。 往期精彩回顾 适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码

数据库day04

-- 如果存在就删除名为hrs的数据库 drop database if exists `hrs`; -- 创建名为hrs的数据库并指定默认的字符集 create database `hrs` default charset utf8mb4; -- 切换到hrs数据库 use `hrs`; -- 创建部门表 create table `tb_dept` ( `dno` int not null comment '编号', `dname` varchar(10) not null comment '名称', `dloc` varchar(20) not null comment '所在地', primary key (`dno`) ); -- 插入4个部门 insert into `tb_dept` values (10, '会计部', '北京'), (20, '研发部', '成都'), (30, '销售部', '重庆'), (40, '运维部', '深圳'); -- 创建员工表 create table `tb_emp` ( `eno` int not null comment '员工编号', `ename` varchar(20) not null comment '员工姓名', `job` varchar(20) not null comment '员工职位', `mgr` int comment '主管编号', `sal` int not null comment '员工月薪', `comm` int comment '每月补贴', `dno` int not null comment '所在部门编号', primary key (`eno`), constraint `fk_emp_mgr` foreign key (`mgr`) references tb_emp (`eno`), constraint `fk_emp_dno` foreign key (`dno`) references tb_dept (`dno`) ); -- 插入14个员工 insert into `tb_emp` values (7800, '张三丰', '总裁', null, 9000, 1200, 20), (2056, '乔峰', '分析师', 7800, 5000, 1500, 20), (3088, '李莫愁', '设计师', 2056, 3500, 800, 20), (3211, '张无忌', '程序员', 2056, 3200, null, 20), (3233, '丘处机', '程序员', 2056, 3400, null, 20), (3251, '张翠山', '程序员', 2056, 4000, null, 20), (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10), (5234, '郭靖', '出纳', 5566, 2000, null, 10), (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30), (1359, '胡一刀', '销售员', 3344, 1800, 200, 30), (4466, '苗人凤', '销售员', 3344, 2500, null, 30), (3244, '欧阳锋', '程序员', 3088, 3200, null, 20), (3577, '杨过', '会计', 5566, 2200, null, 10), (3588, '朱九真', '会计', 5566, 2500, null, 10); 1.

Hive MR和Tez 启用Local模式

1.说明 启动local模式,就是让hive的任务不运行在yarn上面。直接当前的服务器执行 2.优点 当我们对Hive的源码进行Debug,且代码需要Debug到每个task内部时,如果任务是执行在yarn模式的话,那么是无法打断点的,需要进入local模式才能打断点 3.MR 当引擎为MR时,需要修改以下参数,可以修改配置文件hive-site.xml,也可以通过set来生效 3.1 hive-site.xml <property> <name>hive.exec.mode.local.auto</name> <value>true</value> </property> <property> <name>hive.exec.mode.local.auto.inputbytes.max</name> <value>134217728</value> </property> <property> <name>hive.exec.mode.local.auto.input.files.max</name> <value>10</value> </property> 3.2 set模式 -- 是否开启local模式 set hive.exec.mode.local.auto=true; -- 输入最大数据量,默认128MB set hive.exec.mode.local.auto.inputbytes.max=134217728; -- 最大任务数 set hive.exec.mode.local.auto.input.files.max=10; 4.Tez 当引擎为Tez时,需要修改tez的配置文件tez-site.xml,如果通过set来执行将不生效 4.1 tez-site.xml <property> <name>tez.local.mode</name> <value>true</value> </property> <property> <name>tez.grouping.split-count</name> <value>1</value> </property> 说明:tez.grouping.split-count和上面的hive.exec.mode.local.auto.input.files.max类似

LINUX安装BAZEL

linux源码安装bazel - 灰信网(软件开发博客聚合) bazel国内镜像地址 ​​​​​​Bazel 国内加速下载 | newbe Linux安装unzip_yuxuan364的博客-CSDN博客_linux 安装unzip 先apt-get update,再apt-get install vim:

Apache Kylin 历险记

1. Kylin 概述 1.1 Kylin 定义 Apache Kylin(麒麟)是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。 官网:https://kylin.apache.org/cn 1.2 Kylin特点 Kylin的主要特点包括支持SQL接口、支持超大规模数据集、亚秒级响应、可伸缩性、高吞吐率、BI工具集成等。 标准SQL接口:Kylin是以标准的SQL作为对外服务的接口。 支持超大数据集:Kylin对于大数据的支撑能力可能是目前所有技术中最为领先的。早在2015年eBay的生产环境中就能支持百亿记录的秒级查询,之后在移动的应用场景中又有了千亿记录秒级查询的案例。 亚秒级响应:Kylin拥有优异的查询相应速度,这点得益于预计算,很多复杂的计算,比如连接、聚合,在离线的预计算过程中就已经完成,这大大降低了查询时刻所需的计算量,提高了响应速度。 可伸缩性和高吞吐率:单节点Kylin可实现每秒70个查询,还可以搭建Kylin的集群。 BI工具集成,Kylin可以与现有的BI工具集成,具体包括如下内容。 ODBC:与Tableau、Excel、PowerBI等工具集成 JDBC:与Saiku、BIRT等Java工具集成 RestAPI:与JavaScript、Web网页集成 Kylin开发团队还贡献了Zepplin的插件,也可以使用Zepplin来访问Kylin服务。 1.3 预备知识 1.3.1 Data Warehouse(数据仓库) 数据仓库是一个各种数据 (包括历史数据和当前数据)的中心存储系统,是 BI (business intelligence ,商业智能) 的核心部件。 1.3.2 事实表 & 维表 在维度建模中,将度量称为“事实” ,将环境描述为“维度”。维度是用于分析事实所需要的多样环境。例如,在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。事实则紧紧围绕着业务过程来设计,通过获取描述业务过程的度量来表达业务过程,包含了引用的维度和与业务过程有关的度量。例如订单作为交易行为的核心载体,直观反映了交易的状况。订单的流转会产生很多业务过程,而下单、支付和成功完结三个业务过程是整个订单的关键节点。获取这三个业务过程的笔数、金额以及转化率是日常数据统计分析的重点,事务事实表设计可以很好地满足这个需求。 1.3.3 维度 即观察数据的角度。比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察。维度是一组离散的值,比如说性别中的男和女,或者时间维度上的每一个独立的日期。因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加、平均、最大和最小值等聚合计算。 1.3.4 度量 即被聚合(观察)的统计值,也就是聚合运算的结果。比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少。 1.3.5 Business Intelligence (商业职能) 商业智能通常被理解为将企业中现有的数据 转化为知识,帮助企业做出明智的业务经营决策的工具。为了将数据转化为知识,需要利用数据仓库 、联机分析处理( OLAP )工具和数据挖掘等技术。 1.3.6 OLAP(online analytical processing) OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地 从各个方面观察信息 ,以达到深入理解数据的目的。从各方面观察信息,也就是从不同的维度分析数据,因此 OLAP 也成为 多维分析。 1.3.7 ROLAP & MOLAP ROLAP : 基于关系型数据库,不需要预计算。

Windows10下载到U盘怎么安装?

Windows10系统是目前主流的操作系统之一,很多用户把Win10系统下载到U盘后不知道怎么安装了,那么下面小编就给大家分享一下Windows10下载到U盘的具体安装教程。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、在本页面下载U盘启动盘制作工具:系统之家装机大师。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载 - 系统之家)。 4、一台正常联网可使用的电脑。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注意备份。如果需要安装系统的是C盘,重要文件请勿放在C盘和桌面上。 1、首先,关闭所有的杀毒软件,然后运行系统之家装机大师软件,软件会进行提示,仔细阅读后,点击我知道了进入工具。 2、进入工具后,在最上方选择U盘启动,进入U盘启动盘制作界面。 3、保留默认格式和分区格式,无需手动更改。点击开始制作。 4、工具会自动提示是否开始制作。注意:制作工具将会清理U盘中所有的数据且不可恢复,请提前存储U盘中重要数据文件。 5、等待U盘制作完毕。 6、U盘制作完毕后,工具会进行提示,并且显示当前电脑的开机U盘启动快捷键。 7、制作完毕后,需要测试当前U盘启动盘是否制作完成。需要点击右下方 模拟启动-BIOS启动,查看当前U盘启动盘是否制作成功。 8、稍等片刻,成功显示此界面则为成功。 9、然后关闭软件,用户需要将下载好的系统移动到U盘中即可。 U盘装Win10: 1、查找自己电脑主板的U盘启动盘快捷键。 2、U盘插入电脑,重启电脑按快捷键选择U盘为第一启动项。进入后,键盘↑↓键选择第二个【02】启动Windows10PEx64(网络版),然后回车。 3、进入PE界面后,点击桌面的一键重装系统。 4、打开工具后,点击浏览选择U盘中的下载好的系统镜像ISO。选择后,再选择系统安装的分区,一般为C区,如若软件识别错误,需用户自行选择。 5、选择完毕后点击下一步。 6、此页面直接点击安装即可。 7、系统正在安装,请等候。 8、系统安装完毕后,软件会自动提示需要重启,并且拔出U盘,请用户拔出U盘再重启电脑。 9、重启后,系统将自动进入系统安装界面,到此,装机就成功了!

统信UOS家庭版安装VMware16

统信UOS可用的VMware版本,亲测可用: 链接: https://pan.baidu.com/s/1qCVtka-kfzQVkJGBEQZxVw 提取码: trpr 安装方法 首先把下载人vmware拷到桌面安装 root@UOS:/home/UOS/Desktop# ls 视频 com.baidu.baidunetdisk.desktop dde-trash.desktop 照片 dde-computer.desktop VMware-Workstation-Full-16.2.3-19376536.x86_64.bundle root@UOS:/home/UOS/Desktop# sudo chmod +x VMware-Workstation-Full-16.2.3-19376536.x86_64.bundle root@UOS:/home/UOS/Desktop# sudo ./VMware-Workstation-Full-16.2.3-19376536.x86_64.bundle Extracting VMware Installer...done. Installing VMware Workstation 16.2.3 Configuring... [######################################################################] 100% Installation was successful. # 看到successful说明成功了 root@UOS:/home/UOS/Desktop#

正则表达式 划分省市区(直辖市和附详细地址包括市,区)

目前有需求是将省市区从详细地址中提取出来。这里选择用正则表达式,语言使用C#。 查阅一般用于区分省市区的正则表达式,编写如下代码: using System; using System.Text.RegularExpressions; class Demo { static void Main() { string str = "内蒙古自治区巴彦淖尔市临河区新华东街三河小区康家电维修部"; str = str.Replace(" ", ""); String regex = "(?<province>[^省]+省|.+自治区)(?<city>[^自治州]+自治州|[^市]+市|[^盟]+盟|[^地区]+地区|.+区划)(?<county>[^市]+市|[^县]+县|[^旗]+旗|.+区)?(?<town>[^区]+区|.+镇)?(?<village>.*)"; string[] res = Regex.Split(str, regex); foreach (string word in res) { Console.WriteLine(word); } } } 要么不能区分出直辖市,要么当详细地址中包括小区,或者市的字段时,会有如下情况出现: 使用 string str = "浙江省台州市温岭市新华东街三河小区康家电维修部";时出现如下情况: 提供解决方案为,划分到区县一级(county)时,正则表达式的匹配规则改为同时匹配(区|市|县|旗|岛|海域),按第一次出现的区|市|县|旗|岛|海域)值进行划分。 using System; using System.Text.RegularExpressions; class Demo { static void Main() { string str = "浙江省台州市温岭市新华东街三河小区康家电维修部"; str = str.Replace(" ", ""); string regex = "

基于redis的数据结构做缓存分页利弊

①:基于redis的list数据结构,直接通过list的数据结构,用range方法可以进行分页,在数据量大的时候,性能也很可观,但是当存在接口高并发访问时, 这个list可能会无限延长,且里面的数据会存在很多重复,这就会影响到正常的业务(不是很推荐); ②:基于redis的ZSet数据结构,通过Zset这个有序集合我们也可以做分页,同样也是用range方法,但是这里比较麻烦的是在初始化数据的时候Zset必须存放TypedTuple类型的数据, 这个类型是一个value和score的键值对,具体可以查百度, 这个score的生成比较麻烦我这边测试时用的是当前数据在这个list的位置,然后Zset是根据这个score值来排序的,默认是从小到大;用这个的好处是,即使在高并发情况下Zset中也 不会存在重复数据从而影响正常的业务;而且分页效率也和list结构差不多; ③:用hash和Zset来一起实现;这个是问了一个朋友和得知的,Zset中存储有序的id字段,通过分页后拿到id,然后再用id去hash中取,感觉应该效率相差不大的, 只是中间多了层从hash结构取,还需要维护又一个hash;(为何这样做我也不清楚); 设置缓存后无法保证数据库的一致性! 如果强制保证使用锁的话这样性能会遭到损失。 所以性能和数据的一致性只能选择一个。 先更新数据库 + 再删除缓存」 异步重试。什么是异步重试? 缓存延迟双删策略。 问题1:延迟时间要大于「主从复制」的延迟时间 问题2:延迟时间要大于线程 B 读取数据库 + 写入缓存的时间 一旦我们决定使用缓存,那必然要面临一致性问题。性能和一致性就像天平的两端,无法做到都满足要求。 「更新数据库 + 更新缓存」、「更新数据库 + 删除缓存」 性能和一致性不能同时满足,为了性能考虑,通常会采用「最终一致性」的方案 2、掌握缓存和数据库一致性问题,核心问题有 3 点:缓存利用率、并发、缓存 + 数据库一起成功问题 3、失败场景下要保证一致性,常见手段就是「重试」,同步重试会影响吞吐量,所以通常会采用异步重试的方案 4、订阅变更日志的思想,本质是把权威数据源(例如 MySQL)当做 leader 副本,让其它异质系统(例如 Redis / Elasticsearch)成为它的 follower 副本,通过同步变更日志的方式,保证 leader 和 follower 之间保持一致 超卖问题: 第二种解决:在数据库中将用户id和商品id加上唯一索引解决

keras.backend

参考 keras.backend - 云+社区 - 腾讯云 Keras backend API. 一、Functions abs(...): Element-wise absolute value.all(...): Bitwise reduction (logical AND).any(...): Bitwise reduction (logical OR).arange(...): Creates a 1D tensor containing a sequence of integers.argmax(...): Returns the index of the maximum value along an axis.argmin(...): Returns the index of the minimum value along an axis.backend(...): Publicly accessible method for determining the current backend.batch_dot(...): Batchwise dot product.batch_flatten(...): Turn a nD tensor into a 2D tensor with same 0th dimension.

Android 之 Activity 详解

最近在学习Android开发方面的知识,整理了一下关于Android中Activity方面的知识,也算是对自己学的知识进行了总结。Activity 在 Android开发中有着极其重要的位置,Activity是Android中四大组件之一,而我们的Android应用是由一个或多个Activity组成的。本篇文章将从以下几个方面给大家分享Activity的知识: 文章目录 1. Activity 的概念1.1 Activity 的概念1.2 创建 Activity 2. Activity 的启动方法2.1 显示启动2.2 隐式启动2.2.1 启动系统的 Activity 3. Activity 的生命周期3.1 单个Activity 生命周期3.2 多个Activity 生命周期 4. Activity 的启动模式 1. Activity 的概念 1.1 Activity 的概念 活动(Activity)是一个可视化的用户界面,负责创建一个屏幕窗口,放置 UI 组件,供用户交互。假如我们打开一个应用,看到的整个界面就是一个Activity,当点击一个超链接,跳转到另一个界面,则又是一个新的Activity。 1.2 创建 Activity 第一种方式 右击包名——New——Activity——Empty Activity,会看到类似于下面的界面,输入Activity和布局的名字,☑️Generate a Layout 后,Android系统会自动为我们创建布局,且在AndroidManifest.xml文件中自动注册当前Activity。 第二种方式 第一步:右击包名——New——JavaClass——输入Activity Name,例如Create Activity, 第二步:在AndroidManifest文件中注册Activity 在 application 标签中写入如下代码: <activity android:name=".CreateActivity" android:label="创建"> </activity> 第三步:新建一个布局 右击layout——New—— Layout Resource File——输入布局名称 第四步:在 Create Activity.java 文件中写入下面的代码 所有的Activity都要继承Activity,所有的活动都需要重写onCreate()方法,并在onCreate()方法中引用布局,才可使用 package com.

Allegro转AD

Target Step 1> 拷贝文件Step 2> 设置系统环境变量PathStep 3> 生成.alg文件Step 4> AD导入alg 注意:需要安装Allegro和AD软件; Step 1> 拷贝文件 文件目录:D:\AD安装目录\AD18\System 文件内容:如上图所示; Step 2> 设置系统环境变量Path 因为需要使用,此路径下: extracta.exe; Step 3> 生成.alg文件 Winr+R, 进入cmd, 切换路径,执行转换程序 生成.alg文件; Step 4> AD导入alg 【文件F】菜单 -> 【导入向导】-> 。。。

电源管理芯片(丝印为GG01C和GG0KL)

这2颗液晶5脚SOT23-5封装的电源管理芯片型号是 HP3RC TB和ACG上也有M 在PCB板子上的丝印是 GG0KL和GG01C ​ 这是IC的引脚在板子上的引脚号 ​ ​ 引脚 名称 功能 1 IN 电源VCC输入引脚 2 GND PCB的地 3 EN 电源使能引脚(高电平开启LDO,低电平关闭LDO) 4 BYP 外接负载电容 5 OUT 电源VCC输出引脚(具体的输出电压根据LDO的型号来定) 值得一提的是: 该电源的第4引脚颇有争议,我三次接触到这颗物料,第一次的板子上的4脚外接了贴片电容,第二次的板子上的4脚悬空,第三次的板子上的4脚同样是外接电容。最终外部是外接电容还是悬空取决于你们....(可以的话可以放个电容,大不了贴片的时候不焊直接是NC,需要的时候再自己焊上) 在分析这个板子的时候查了很多资料和丝印都无果,所以分享出来.....避免大家伙走弯路,共同进步共同提升! ​

关于修复msvcp110.dll丢失的问题

这个是msvc++ 2012的文件,出问题的时候一般会提示这个文件丢失了,程序无法运行。 解决方法就是安装msvc++ 2012。 1、首先从已经安装的程序清单中看看是否已经安装了msvc++ 2012。如果没安装,从这里下载: https://www.microsoft.com/zh-CN/download/details.aspx?id=30679 注意:按照自己系统的架构(arm,x86,x64)来选择下载的文件。 一般这样操作后问题就修复了。 2、如果已经安装了msvc++ 2012仍然有问题,基本上是应用架构与msvc库的架构不匹配。比如我遇到的情况:系统中已经安装了msvc++ 2012 x64,但运行一个x86的app还是提示了dll丢失。所以,我从步骤1的链接中下载了x86的msvc++ 2012,安装后问题就解决了。 所以,解决方法,严格的讲,是:“安装一个正确的msvc++ 2012”。如果操作系统中没有安装,那么一定要安装一个。另外,如果app架构和操作系统不同,那么还要安装一个与app架构相符的版本。 当然,以上的解决方法并未覆盖所有可能的问题路径。

Udacity 自动驾驶工程师学习笔记(二)——深度学习(1)

深度学习目录 目录 Lesson01:Neural Netowrks 神经网络 01.神经网络 Neural Network 02.例子:房价 03.Classification Problem 分类问题 04.Perceptrons 感知器 05.Perceptron as Logical OPerators 感知器作为逻辑运算符 06.Perceptron Trick 感知器技巧 07.Perceptron Algorithm 感知器算法​​​​​​​ 前言 该文是笔者关于优达学城无人驾驶工程师中深度学习部分的总结笔记,学习从头开始构建神经网络,使用TensorFlow和卷积神经网络,该部分实现了项目:Behavioral Cloning训练深度神经网络来自动驾驶汽车。 Lesson01:Neural Netowrks 神经网络 概要 Build and train neural networks from linear and logistic regression to backpropagation and multilayer perceptron networks. 构建和训练从线性回归和逻辑回归到反向传播和多层感知网络的神经网络。 01.神经网络 Neural Network 这些神经网络是基于数据训练的。本博客最后介绍如何在udacity模拟器中训练深度神经网络实现无人驾驶汽车, 首先,你将在模拟器中驾驶并记录参数,然后构建和训练一个从自己的驾驶方式中学习的神经网络,输入相机图像或传感器读数经过神经网络生成输出,汽车应该的转向角和纵向速度。 机器学习是人工智能的一个领域,它从数据中学习了解环境,而不是依赖人工设定规则。 深度学习是机器学习的一种方法,深度神经网络是描述大型多层神经网络的术语,感知器是神经网络的基本单元。 02.例子:房价 给定房子的面积来预测房子的价格,有一个价值70,000美元的小房子和一个价值160.000美元的大房子,想估计这些中型房子,那么应该怎么做呢? 首先我们要先收集历史房价数据,将这些数据建立x为面积y为价格,如图这些蓝点是我们收集的数据,根据这些数据,你认为中型房屋价格的最佳估计是多少? 连接这些数据点找出最适合这些数据的线,即通过数据绘制最佳拟合线,这方法称为线性回归, 03.Classification Problem 分类问题 决定一位学生是否被录取,第一位学生Test=9 Grades=8被录取,第二位学生Test=3 Grades=4不被录取,预测第三位学生Test=7 Grades=6是否被录取? 这个问题的第一个方法是在一个图表中绘制学生对应的分数为x,对应的等级为y。 上面的表格被一条线很好地分隔开,这条线称为模型,这模型有几个错误,红点和蓝点没有被线完美分隔开,在线上方被录取,线下方被拒绝,那么应该如何找到这条线呢?

vue3 触底加载数据(滚动加载分页数据)

html: <div class="integral-record-cont"> <div class="integral-record-item" v-for="(item,index) in integralList" :key="index" v-if="integralList.length>0"> <div class="traditional-integral-panel"> <div class="traditional-integral flex-center-between"> <div class="integral-name">太阳雨游戏积分</div> <div class="flex-center-start"> <span class="integral-num integral-num-green" v-show="item.type==1"> +{{item.integral}}</span> <span class="integral-num integral-num-orange" v-show="item.type==2"> -{{item.integral}}</span> <div class="arrow-down-panel flex" @click="bagShow(index)" v-if="item.luckyBagIntegral"> <van-icon class="arrow-down" name="arrow-down"></van-icon> </div> </div> </div> <div class="integral-date"> {{item.createDate}}</div> </div> <div class="blessing-bag-integral flex-center-between" v-if="item.isShow"> <div class="blessing-bag-integral-text">其中游戏福袋积分</div> <div class="blessing-bag-integral-num flex-center-start">{{item.luckyBagIntegral}} <div class="arrow-down-panel"> </div> </div> </div> </div> <div v-else> <no-data></no-data> </div> </div> css: .integral-record-cont{ height:8.4rem; overflow-y: scroll; padding: 0 .

HTML表单制作

为什么写表单?(目的是为了收集用户信息) 表单的组成:表单域、表单控件(也称表单元素)和提示信息3个部分构成。 在HTML中,<form>标签用于定义表单域,以实现用户信息的收集和传递 <form>会把它范围内的表单元素信息提交给服务器 <form action=''url地址'' methid=''提交方式'' name=''表单域名称''> 各种表单元素的控件 </form> input输入表单元素 <input>标签用于收集用户信息 <input type=''属性值''/> 除type属性外,<input>标签还有其他很多属性: <label>标签 <label>标签为input元素定义标签 <label>标签用于绑定一个表单元素,当点击<label>标签内的文本时,浏览器就会自动将焦点转到或者选择对应的表单元素上,用来增加用户体验。 语法: <label for=''sex''>男</label> <input type=''radio'' name=''sex'' id=''sex''/> 核心:for属性应当与相关元素的id属性相同 <select>表单元素 textarea文本域元素 使用场景:当用户输入内用较多的情况下,就不能是用文本框表单了。<textarea>标签是用于定义多行文本输入的控件。 语法:

IDEA运行缓慢卡顿,解决idea卡顿,中文乱码等

IDEA卡顿原因 使用IDEA时,总是点一下卡一下,真的对人是一种折磨! 其实,这种情况主要因为IDEA默认启动配置,一款软件它要考虑低配置用户,所以初始化参数不高(默认最低128m,最高512m),导致启动慢,然后运行也不流畅。因此我们需要优化下启动和运行配置。 优化IDEA配置 ---- 重点推荐的方法 由于IDEA初始参数低,但是在工作中的电脑一般都是8G或者16G的运行内存,所以我们需要手动去修改默认的IDEA配置。使得我们的体验更加流畅! 这里是主要是 idea安装目录下的bin文件夹下的idea.exe.vmoptions文件! 手动修改IDEA配置步骤 找到IDEA安装目录,进入bin文件夹下,找到idea.exe.vmoptions文件! idea.exe.vmoptions:默认32位机器运行的 idea64.exe.vmoptions:默认64位机器运行的 打开idea.exe.vmoptions 以及idea64.exe.vmoptions文件 关键的三个参数的说明 1、 -Xms 是最小启动内存参数 2、 -Xmx 是最大运行内存参数 3、 -XX:ReservedCodeCacheSize 保留代码占用的内存容量参数 手动修改 -Xms=512m -Xmx=1024m -XX:ReservedCodeCacheSize =300m 基本在原有基础增加一倍!如下图: 【如果你的电脑在8G以上,或者配置更好】 可以参考如下设置: -Xms=1024m -Xmx=2048m -XX:ReservedCodeCacheSize =500m 保存后,重新打开IDEA,会发现运行速度明显提高,流畅很多! 我们应根据具体情况更改合适的参数,并不一定完全按照我的参数!,但是只要增大参数,运行情况都会变得更优! 当然也可以分别改成 1024m 和 2048m,之后如果还卡,再往大了调,我估计应该也不会再卡了。 其他卡顿优化(参考) 1.idea启动时会有两个快捷方式 idea安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次启动都用它这个快捷方式就可以了。 2. 卸载不需要用的插件 对于Java开发,对于一些默认安装的什么安卓的google的app,前端的js框架 等插件可以卸载掉 项目中根本不用不到的一些框架,Struts,Hibernate,Ant 等可以卸载 当然,具体应该根据我们的开发情况来停止一些不必要的插件! 3.减少内存 在设置项目的时候尽量不要将没有关系的项目放置在一个工程中,这样能够减少内存的使用 4.适当关闭idea的Inspections的检查或者开发时完全关闭Inspections的检查,等开发完后在开启检查 idea右下角(旧版)有一个 人头标志,可以点击,调准idea检查级别~ idea2021版本和企业版,都没有人头标志,在代码域右上角,如图,鼠标悬停! 主要用来设置当前编辑文档的代码检查等级 Inspections 为最高等级检查,可以检查单词拼写,语法错误,变量使用,方法之间调用等 Syntax 可以检查单词拼写,简单语法错误 None 不设置检查 IntelliJ IDEA 对于编辑大文件并没有太大优势,很卡,原因就是它有各种检查,这样是非常耗内存和 CPU 的,所以为了能加快大文件的读写,可以考虑暂时性设置为 None。

centos重启后,进入紧急模式

centos7重启后,进入紧急状态,输入密码进入后,看系统日志,发现挂载数据盘时,出现failure,数据盘是另外一块硬盘,存放了应用和数据,这时进入数据盘目录,列一下目录,发现数据盘数据为0!这可太吓人了! 由于是虚拟机,紧急克隆了数据盘的内容,发现数据盘是有内容的。然后开始了拯救之路: df -Th 发现挂载的磁盘在的,fdisk -l也显示磁盘正常,那为什么挂载会失败呢? 经客服提醒,才发现重启后,在/etc/fstab里原来挂载的sdb2变成了sdc2,由于紧张刚才没有看清,于是将fstab里的sdc2变成UUID,这样如果盘符再变,UUID是唯一的,就避免了挂载失败的情况: 1、重新挂载根目录为读写模式:# mount -o rw,remount / 2、修改/etc/fstab,使用 blkid 命令列出的UUID列表,找出sdc2的UUID,替换sdc2的位置,保存退出,重启就OK了

[ArcGIS]城市关联度分析

1. 在ArcMap中加载“城市”点数据、“国家线”线数据和“省级行政区”面数据并设置矢量图层颜色等属性,这里为了美观将国界线设置成红色。同时观察图层属性信息。 2. 通过ArcGIS ArcToolbox中Conversion Tools-Excel-Excel To Table工具将“关联度数据”excel表转换成gdb数据。 转换完成后原来excel中的数据便可以被arcgis成功转化读取了,如下图: 3. 添加城市经纬度信息 调用“Add XY Coordinates”工具,选择城市图层,对“城市”点数据添加经纬度信息。 调用Data Management Tools-Joins-Join Field工具,对gdb表格数据赋予城市A和城市B的经纬度信息。具体输入参数如下图(下图是对城市A赋予经纬度信息参数,同理需要对城市B再重复执行上述操作): 4. 生成线 调用“XY To Line”工具,设置对应的参数如下图所示,生成城市之间的关联度数据线。 随后通过新生成的“关联度数据_ExcelToTable_XYToLine”线数据Join and Relates-Join功能来添加“关联度数据”表数据中的“关联度”属性。 5. 设置关联度分级和出图 在“关联度数据_ExcelToTable_XYToLine”线数据中的属性中按照“关联度”属性进行分类;设置指北针和比例尺,出图。

【go-mysql-elasticsearch记录, 先看第五条】

go-mysql-elasticsearch使用记录: Windows11 环境下使用 go-mysql-elasticsearch 使得mysql数据导入es:` 1. 启动命令 .\go-mysql-elasticsearch.exe -config=D:\soft\go-mysql-elasticsearch\etc\river.toml 指定目录的go-mysql-elasticsearch.exe 加上指定位置的river.toml配置文件 否则会默认使用./ect/river.toml, 大概率是linux的默认, windows难搞 2. panic: http: invalid pattern 错误信息 [2022/05/23 14:50:47] [info] binlogsyncer.go:211 register slave for master server 127.0.0.1:3306 panic: http: invalid pattern goroutine 10 [running]: net/http.(*ServeMux).Handle(0x1836440, {0x0, 0x0}, {0x1238aa0?, 0xc000094360}) D:/soft/Go/src/net/http/server.go:2472 +0x24c net/http.Handle(...) D:/soft/Go/src/net/http/server.go:2521 github.com/siddontang/go-mysql-elasticsearch/river.InitStatus({0x0, 0x0}, {0x0, 0x0}) D:/soft/go-mysql-elasticsearch/river/metrics.go:52 +0x50 created by github.com/siddontang/go-mysql-elasticsearch/river.NewRiver D:/soft/go-mysql-elasticsearch/river/river.go:79 +0x465 版本更新后的问题, 配置文件river.toml 添加 # Inner Http status address stat_addr = "127.0.0.1:12800" stat_path = "

如何把Excel转成html table表格代码

前端开发工作中有时候需要从Excel表格的数据转成网页显示, 虽然Excel可以另存成为html,不过含有太多各种标签和样式,还需要重新调整,比较麻烦, 后来找到一个工具可以直接粘贴Excel数据转换成为html表格: 打开这个网站 https://www.strerr.com/cn/tableizer.htmlhttps://www.strerr.com/cn/tableizer.html 复制Excel数据内容 粘贴到网站 点击生成 直接生成table表格代码

STM32+CubeMX 通过RMS和FFT进行波形识别

波形识别 本文所展示的程序可以用于分辨正弦波、三角波、方波三种波形。 文章目录 波形识别思路可以判断波形的两个特点时域方面频域方面 外设配置 & DSP库配置代码部分串口重定向时域部分变量定义ADC采集求最大值,最小值,幅值取出波形的一个周期求取RMS波形判断精度问题 频域部分FFT求出频谱判断波形提高精度 感谢工程链接 思路 利用不同波形某些方面的相互不同的特征为依据,即可分辨波形。 例如:通过外形特点我们可以分辨 乒乓球 和 羽毛球 对于单片机,我们要选择可以用数值表示,用统一方法计算的特征来识别波形。 可以判断波形的两个特点 时域方面 我们发现,不同波形的有效值(RMS)是不同的。而且不同波形有效值可以通过一个固定的公式求出。 交流电有效值(RMS)又叫均方根值,是一种用以计量交流电大小的值,交流电通过某电阻,在一周期内所产生的热量与直流电通过该电阻在同样时间内产生的热量相等,该直流电的大小就是交流电的有效值。 已知通过ADC采集得到的波形离散的电压值,可以通过以下公式来计算RMS。假设ADC采集N个点的电压X[i] (1<=i<=N): X r m s = X [ 1 ] 2 + X [ 2 ] 2 + . . . + X [ n ] 2 N X{rms}= \sqrt { X[1]^2 + X[2]^2 + ...+X[n]^2 \over N } Xrms=NX[1]2+X[2]2+...+X[n]2​ ​ 不同波形的有效值如下(A代表幅度): 波形正弦波方波三角波有效值0.707A1A0.577A 只要求出待测波形的有效值,与标准值相比对,即可辨别波形。 需要注意的是: 计算有效值时,待测波形的位置必须关于时间轴对称,所以在计算前要把所有波平移到关于时间轴对称的位置。待测波形的离散点必须形成整数个完整的周期,也就是说,需要从ADC采集的点中取出一个或整数个完整周期的点。 如果不符合以上两个条件,算出的RMS会与给出的标准值不同,也就无法用固定的标准识别波形。 求取RMS的代码也并不复杂,stm32DSP库中有封装好的求取RMS值的函数,我们这里不再手动实现,直接调用函数。

PostGIS 空间计算

1、度/秒互转 UPDATE 表名 SET geom = st_scale(shape, 1/3600.0,1/3600.0) 2、geom转wkt字符串 SELETC st_astext(t.shape) 3、wkt字符串转geom 并设置坐标系 SELECT st_setsrid(ST_GeomFromText('POINT(428626.908 110737.8)'), 4326) 4、获取图形中心点坐标 SELECT ST_X(st_centroid(c.shape)) AS x , ST_Y(st_centroid(c.shape)) AS y 5、A是否包含B ST_CONTAINS(A, b) 6、查询和修改SRID SELECT st_srid(geom) FROM road limit 1; UpdateGeometrySRID(varchar table_name, varchar column_name, integer srid); UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid); UpdateGeometrySRID(varchar catalog_name, varchar schema_name, varchar table_name, varchar column_name, integer srid); –schema_name表示schema的名称,一般默认是public 示例: select UpdateGeometrySRID(‘road’, ‘geom’, 4326); –road为表名 –geom为空间字段 –4326为更新的SRID

Relion-3.1.3 编译安装

安装包下载: 2021年11月安装的Relion,github的版本是3.1.3 Relion3.13tar.gz包下载 链接:https://pan.baidu.com/s/1W2iCyXH0W2INKGaWAkmbqQ 提取码:kuxn github源下载地址 这都是加速版的 可以直接 git clone 下来 v_4.0_Beathttps://github.com.cnpmjs.org/3dem/relion.gitv_3.1.3GitHub - 3dem/relion: Image-processing software for cryo-electron microscopy历史版本下载地址Releases · 3dem/relion · GitHub 码云版: https://gitee.com/YongPeng_Li/relion.git (这个是我fork过来的,境内会快一点) 用户安装手册--官网推荐: V_4.0_Beat 安装文档: Installation — RELION documentation ——打不开看下面英文 重要的我都标粗了 V_3.13 安装文档: Download & install - Relion 我本地用的是虚拟机安装(系统Ubuntu),不过理论都一样 安装过程中注意用户-Ubuntu的用户及用户组。不然各种测试发现安装了怎么又找不到。 这是我安装过程中遇到的两个问题 问题1: Could NOT find X11 (missing: X11_X11_INCLUDE_PATH X11_X11_LIB) 解决办法: sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev 问题2:Package xft was not found in the pkg-config search path.

2021火到爆,这份阿里内部12W字Java面试内卷,让你薪资翻几倍

第一次去面试,面试官问了句:“公司都鼓励员工鼓励免费加班的,你觉得可以吗?” 我说:“可以啊,怎么不行,我连工资都可以不要。” 面试官一时没反应过来喊到:“怎么可能,你别逗我了。” 我:“不是你先逗我的吗?” 资料链接:骆驼祥子思维导图 - GitMind 首先要看的还是“软实力” 下面就是一些技术面的重要知识点 JVM篇 多线程并发篇 mysql篇 Zookeeper篇 Nginx篇 GIT篇 设计模式 全部内容:

20220年春招,秋招必问的1000道Java面试题及答案整理

前言 不论是校招还是社招都避免不了各种面试,如何去准备面试就显得格外重要。 这不马上金三银四了,相信有很多小伙伴为社招或跳槽做准备,最近小编也常常在刷面试题,发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 博主已将以下这些面试题整理成了一个Java面试手册,是PDF版的。内容涵盖了:Java基础、JVM、多线程、spring全家桶、MyBatis、数据库、微服务、Dubbo、Nginx、MQ、Linux、Zookeeper等技术栈。 第一份面试突击手册 目录一览 包含23大Java面试专题,每项专题都有几十道面试题(附题目详解) 基础篇 JVM 多线程 spring MyBatis SpringBoot MySQL 网络 git 软实力 每一章节不仅有面试题库,还有精心准备了思维导图把相关的知识点串起来,使读者能更好地理解相关的知识点,而不是死记硬背,这些才可以通过大厂面试官的面试连环炮。由此可见作者的良苦用心; 第二份面试突击手册 目录一览 部分内容 总结 以上就是有关程序员面试专题的一些总结,面试不仅考的是技术还有心态,只要你有足够的技术支撑,心态要好,拿到offer肯定不在话下。先不要把它想得很困难,自己给自己设置槛!希望大家都可以拿到心仪offer,走向升职、跳槽、涨薪、赢娶白富美之路! 资料领取:骆驼祥子思维导图 - GitMind 

微信小程序——从零搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、确定开发权限二、IDE三、创建项目四、基本结构 前言 这篇主要给微信小程序菜鸟参考。 有时候,后端猿猴也需要撸一把微信小程序。前几年弄过微信小程序,太久不用,又忘了,重新摸索了一遍,记录一下,避免一坑重踩。 一、确定开发权限 打开“微信公众平台”,使用手机微信扫描登录二维码,手机上弹出的选项中若有目标小程序,则表明可以对此小程序进行开发;否则需要目标小程序的管理员将你的微信设为开发者(或管理员),然后重复如前步骤点击弹出的小程序,登录小程序管理平台,查看或配置基本参数,如查看小程序密钥、AppId,或设置服务端域名白名单若无目标小程序,可以申请一个,也可以使用测试号(就是下面填写 AppId的时候随便写一个) 二、IDE 建议使用官方的“微信开发者工具”,里面的自动提示直接关联微信官方文档,可以快速查阅API文档,且可以一键上传代码到微信,比较方便 三、创建项目 打开“微信开发者工具”,使用手机微信进行开发者登录创建新项目或者导入已有项目,注意 AppId需要填写目标小程序的 AppId;使用测试号的,可以随便填一个然后点击右边“使用测试号”测试号不能发布,也不能生成体验版,只能自己给自己玩“开发模式”默认就是小程序,另有一个“插件”选项,是给老鸟开发小程序插件用的,菜鸟就不要看它了“服务后端”默认是“使用云服务”,就是用微信提供的后端服务和数据库啥的(推销他们的产品),没有且不能自己搭建后端环境的可以试用一下;正经开发者一般都有自己的后端环境,就选“不使用云服务”“模板选择”根据项目对应的业务和熟悉的前端语言(js/ts)选一个模板,不知道选啥就用“JavaScript-基础模板”,工具会帮你生成基础代码创建成功后,打开项目,进行开发界面 四、基本结构 正经的小程序代码结构如下:项目名 1 pages[页面文件夹] 所有的页面都放在这个目录下,一般一个子目录对应一个页面,结构参考“index” 1.1 index[首页目录] 1.1.1 index.js:JS代码文件1.1.2 index.json:json数据文件1.1.3 index.wxml:微信文本文件,类似于HTML1.1.4 index.wxss:微信样式文件,类似于CSS 2 app.js:全局js文件,小程序启动就会加载 3 app.json:全局json文件 4 app.wxss:全局样式文件 5 project.config.json:项目配置文件 6 project.private.config.json:项目私有配置文件,优先级高于 project.config.json,一般是本地个性环境的配置 7 sitemap.json:页面索引配置文件,用来配置小程序及其页面是否允许被微信索引(类似百度搜索) 8 其他:自定义的文件或文件夹,如 readme.md或utils、image等

Vue

笔记:vue基础 · 语雀 代码:vue基础阶段代码 官网:Vue.js(作者: 尤雨溪) 组件库 Vant2 Vant 2 - Mobile UI Components built on Vue Vant 3 - Mobile UI Components built on Vue elementui Element - The world's most popular Vue UI framework 一、Vue介绍 1、学习前的工具安装 插件名称作用 chrome插件 vue_devtools 可以检测网站是不是Vue开发,如果是图标会亮,如果不是图标是灰暗; 可以在开发阶段帮助我们调试数据; 安装方法:三点 → 更多工具 → 扩展程序 → 打开'开发者模式' → 将插件拖入其中(安装完成) → 工具栏中的'扩展程序',将其固定 vscode插件 vetur 让vscode能够识别 .vue文件; 还提供了一些vue代码的格式化功能,以及一些简单的代码段; vue 3 snippets (选装) 提供更多的vue的代码段 2、Vue及其作用 概念:Vue是一套渐进式的JavaScript框架; 作用:开发快捷; 什么是框架? 内部做了高度封装,并提供了自己的一套语法和开发体系,用框架可能会改变原本的开发模式;

$.ajax() 参数详解

1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 3.timeout: 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。 4.async: 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 5.cache: 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。 cache属性是true(默认值)时:在第一次请求完成之后,如果地址和参数不变化,第二次去请求,会默认获取缓存中的数据,不去读取服务器端的最新数据。 cache属性是flase(默认值)时:每次读取的是最新的数据。 ajax缓存只对GET方式的请求有效,因为浏览器认为POST请求提交的内容必定有变化,所以不走缓存。所以POST下都是false 6.data: 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。get请求中将附加在url后。防止这种自动转换,可以查看 processData选项。对象必须为key/value格式,例如{foo1:"bar1",foo2:"bar2"}转换为&foo1=bar1&foo2=bar2。如果是数组,JQuery将自动为不同值对应同一个名称。例如{foo:["bar1","bar2"]}转换为&foo=bar1&foo=bar2。 7.dataType: 要求为String类型的参数,预期服务器返回的数据类型。如果不指定,JQuery将自动根据http包mime信息返回responseXML或responseText,并作为回调函数参数传递。可用的类型如下: xml:返回XML文档,可用JQuery处理。 html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行。 script:返回纯文本JavaScript代码。不会自动缓存结果。除非设置了cache参数。注意在远程请求时(不在同一个域下),所有post请求都将转为get请求。 json:返回JSON数据。 jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个“?”为正确的函数名,以执行回调函数。 text:返回纯文本字符串。 8.traditional: 防止深度序列化;ajax做数据处理时,是通过jQuery.param( obj, traditional )该方法进行处理。 jquery1.4版本以后traditional参数,默认false的时候如果是{a:{b:'value'}}是处理成a[b],这样形式,如果是数组:data:{a:[1,2]},是解析成a[]=1&a[]=2,这种方式后台确实要做兼容(取a[b]或a[])来取值。 在数组情况下把traditional参数设置成true,是解析成a=1&a=2,对后台直接通过a拿数据。但是实验了下object情况,把traditional设置成true,转成了a=[object+Object],这样就是费的了。false时解析成上面的形式应该就是类型指示作用,我看到这种格式就知道请求数据是Array还是object了,true就是按照form提交的方式传值。 这个属性默认是false,jquery会深度序列化这个对象,以适应PHP等框架,我们可以通过设置tradtional为true阻止深度序列化 这样以后碰到复选框传多个id的时候就不用前台拼后台spilt了,直接用ajax的traditional属性,传过去一个数组,后台直接一个List<Long> idList接受即可。非常方便。 9.beforeSend: 要求为Function类型的参数,发送请求前可以修改XMLHttpRequest对象的函数,例如添加自定义HTTP头。在beforeSend中如果返回false可以取消本次ajax请求。XMLHttpRequest对象是惟一的参数。 function(XMLHttpRequest){ this; //调用本次ajax请求时传递的options参数 } 10.complete: 要求为Function类型的参数,请求完成后调用的回调函数(请求成功或失败时均调用)。参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。 function(XMLHttpRequest, textStatus){ this; //调用本次ajax请求时传递的options参数 } 11.success:要求为Function类型的参数,请求成功后调用的回调函数,有两个参数。 (1)由服务器返回,并根据dataType参数进行处理后的数据。 (2)描述状态的字符串。 function(data, textStatus){ //data可能是xmlDoc、jsonObj、html、text等等 this; //调用本次ajax请求时传递的options参数 } 12.error: 要求为Function类型的参数,请求失败时被调用的函数。该函数有3个参数,即XMLHttpRequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: function(XMLHttpRequest, textStatus, errorThrown){ //通常情况下textStatus和errorThrown只有其中一个包含信息 this; //调用本次ajax请求时传递的options参数 } 可以从4个属性中读取信息: readyState:当前的状态;0:未初始化;1:正在载入;2:已经载入;3:数据进行交互;4:完成status:返回的HTTP状态码;常见的错误404(客户端出错),500(服务端出错)statusText:对应状态码的错误信息;eg:404:not found;500:Internal Server ErrorresponseText:服务器响应返回的文本信息 13.

maven项目的环境配置问题

最开始改pom配置文档后虽然update但是依然报错 看出来和版本有关系,虽然老师在视频演示no error,但是活学活用,既然这边不行。就加上version version通过报错的地址去查询 比如下面的包,报错就会显示org.springframework.spring-beans… 出现数字就是我们所用的版本号 大部分是只有一个版本 这边sping-beans比较特殊,所以我下载了多个。 如图,maven项目run之后报错 看了一下,大概是jar包不能出了问题 从网上查询得知: 1.Maven项目包与本地库冲突 2.jar包更新 由于我ali_repo,去年已经搞过 可能对于现在高级实作来说有一些包的变化 因此果断删除,重新下载ali_repo 下载链接:https://pan.baidu.com/s/1_bXGUIhSdPl3VrkEV_5Wag?pwd=cccc 提取码:cccc 之后就出现新的问题: Failed to initialize end point associated with ProtocolHandler [“http-bio-88”] java.net.BindExceptio 感觉是88端口被占用了 win+R cmd 进入命令窗 一开始以为是Apache的进程没在意 后来才发现是上次启动异常结束导致这个端口一直挂着 所以kill重新run maven项目就可以了 记录一下,总归是解决了 撒花✿✿ヽ(°▽°)ノ✿

Prometheus监控

用Zabbix监控底层设备,用Prometheus监控容器。 Prometheus监控官网地址 Prometheus架构图 分为客户端Agent和Server端。agent端推送数据给服务器。 一、Grafana介绍 Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。 它主要有以下六大特点: 1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式; 2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等; 3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知; 4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源; 5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记; 6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。 二、Prometheus组件 普罗米修斯是一个开源系统监视和警报工具包,包含一整套数据的搜索\存储\处理\可视化功能。使用http接口来传输数据(通常搭配cAdvisor使用)。 1.Server 负责从exporters拉取监控数据,提供一套非常灵活的查询语言 2.exporters 负责收集目标对象的性能数据(内存、CPU、硬盘),主动提交给Server端 3.Grafana 可视化数据组件 4.Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给server。当server来pull时,直接返回实时状态的 metrics。 5.Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。 6.Alertmanager: 从server端接收到警报后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。 常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。 三、prometheus运行流程 prometheus根据配置定时去拉取各个节点的数据,默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。将获取到的数据存入TSDB(一款时序型数据库)。此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。它的报警功能使用Alertmanager提供(Alertmanager是prometheus的告警管理和发送报警的一个组件)。prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。 从上面架构图也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。 它大致使用逻辑是这样: 1.Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。

Flink流计算中double类型NullPointException

Flink计算中Double类型数据如何Filter过滤,使用窗口算子函数报NullPointException空指针异常,又是怎么回事? 2022-05-19 09:44:22,587 WARN org.apache.flink.runtime.taskmanager.Task [] - Window(TumblingEventTimeWindows(600000), EventTimeTrigger, AggregateFunction$5, PassThroughWindowFunction) (1/1)#0 (2de98fdf39aaa5e7fb973e0b4ee0168d) switched from RUNNING to FAILED with failure cause: java.io.IOException: Exception while applying AggregateFunction in aggregating state at org.apache.flink.runtime.state.heap.HeapAggregatingState.add(HeapAggregatingState.java:107) at org.apache.flink.streaming.runtime.operators.windowing.WindowOperator.processElement(WindowOperator.java:413) at org.apache.flink.streaming.runtime.tasks.OneInputStreamTask$StreamTaskNetworkOutput.emitRecord(OneInputStreamTask.java:233) at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.processElement(AbstractStreamTaskNetworkInput.java:134) at org.apache.flink.streaming.runtime.io.AbstractStreamTaskNetworkInput.emitNext(AbstractStreamTaskNetworkInput.java:105) at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65) at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:496) at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:203) at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:809) at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:761) at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:958) at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:937) at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:766) at org.apache.flink.runtime.taskmanager.Task.run(Task.java:575) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NullPointerException at com.chnenergy.provider.flink.FanDataFlink$5.add(FanDataFlink.java:224) at com.chnenergy.provider.flink.FanDataFlink$5.add(FanDataFlink.java:200) at org.apache.flink.runtime.state.heap.HeapAggregatingState$AggregateTransformation.apply(HeapAggregatingState.java:135) at org.

python中pandas包使用的一个header参数

也许有人会不明白panda在读取excel时的语句里边的header参数 如下: a = pd.read_excel("建模题目一.xlsx", header=None) 那么header=None是什么意思呢?--->字面上就是没有表头。 没有表头会怎么办呢?---->你表里边的第一行就会被pandas解析为表头 下边给出演示: 我的原始Excel表: 处理代码: a = pd.read_excel("建模题目一.xlsx", header=None) 返回结果: 0 年份 1-2季度 3-4季度 1 1997 89.2 123.4 2 1998 133.6 143.2 3 1999 146.2 140.8 4 2000 143.8 149.5 结果分析: pandas把我们的第一行解析为了表头。 header拓展用法: 指定从第几行为表头。比如我要把第三行作为表头【前两行的数据就不会读取了】,那么我的 header = 2,对应的代码为: a = pd.read_excel("建模题目一.xlsx", header=2) 运行结果: 1998.0 133.6 143.2 0 1999 146.2 140.8 1 2000 143.8 149.5 2 2001 141.4 163.6 3 2002 162.1 163.0 4 2003 167.

git merge时忽略某文件合并来避免冲突(以忽略package-lock.json文件冲突为例)

根据官方文档,package-lock.json 是在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。它的作用是允许开发者在pacakge.json中间标出自己项目对npm各库包的依赖。 在做前端设计时,生成的package-lock.json和别人不同,要进行merge,并上传到remote时,merge会显示冲突,如下: CONFLICT (content): Merge conflict in package-lock.json Automatic merge failed; fix conflicts and then commit the result. 下面将该文件进行忽略,同样适用于其他文件 第一步先添加一个merge driver: git config --global merge.ours.driver true 第二步在本地项目的根目录下添加一个文件.gitattributes , 并在文件里写入需要忽略的文件,格式如下: package-lock.json merge=ours # 这里的package-lock.json就是我们想要忽略的文件名 #有多个的话,依次排列即可

矩阵A可以LU分解的充要条件

矩阵A可以LU分解的充要条件是 ∀ k ∈ { 1 , ⋯ , n } , r a n k A 1 : k , 1 : k + k ⩾ r a n k A 1 : k , 1 : n + r a n k A 1 : n , 1 : k \forall k \in \{1,\cdots,n\}, \mathrm{rank} A_{1:k,1:k} + k \geqslant \mathrm{rank} A_{1:k,1:n} + \mathrm{rank} A_{1:n,1:k} ∀k∈{1,⋯,n},rankA1:k,1:k​+k⩾rankA1:k,1:n​+rankA1:n,1:k​. 如果矩阵A可以LU分解, 分解的唯一性需要通过下式分析

【Smooth L1 Loss】Smooth L1损失函数理解

文章目录 1 引言2 L1 Loss3 L2 Loss4 Smooth L1 Loss5 曲线对比分析6 参考链接 1 引言 目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression Loss两部分构成。 Bounding Box Regression Loss Function的演进路线是: Smooth L1 Loss --> IoU Loss --> GIoU Loss --> DIoU Loss --> CIoU Loss 本文介绍L1 loss、L2 loss以及Smooth L1 Loss。 2 L1 Loss 公式: 当假设 x 为预测框和真实框之间的数值差异时,公式变为: L 1 = ∣ x ∣ L_1 = |x| L1​=∣x∣ 导数: 特点: L1 loss在零点处不平滑,学习慢; L 1 L_1 L1​ 损失函数对 x 的导数为常数,训练后期,x 很小时,如果学习率不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。(这句话可能得想一下才能懂) 3 L2 Loss 公式:

Spring从入门到精通

第一章、Spring简介(给软件行业带来春天)(是个全家桶,有很多单独的框架) 1、什么是spring?(解决企业开发的难度,减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系)(核心功能是IOC和AOP,能够实现模块之间,类之间的解耦合) Spring是一个引擎,是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。其核心就是控制翻转(IOC),和面向切面(AOP),简单的说就是一个分层的轻量级开源框架。 Spring原理和组成:Spring为简化我们的开发工作,封装了一系列的开箱即用的组件功能模块,包括:Spring JDBC 、Spring MVC 、Spring Security、 Spring AOP 、Spring ORM 、Spring Test等。 理念(目的):解决企业应用开发的复杂性,使现有的技术更加容易使用,本身是一个大杂烩整合了现有的框架。 优点: 1、Spring是一个免费开源的框架(容器)! 2、Spring是一个轻量级的非入侵的框架! 3、控制反转(IOC),面向切面编程(AOP) 4、支持事务的处理,对框架整合的支持! 总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程的框架! Spring包含了SpringMVC,而SpringBoot又包含了Spring或者说是在Spring的基础上做得一个扩展。 spring mvc < spring < springboot Spring Boot只是Spring本身的扩展,使开发,测试和部署更加方便。 SSM框架:Spring+SpringMVC+MyBatis Spring MVC:属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。 MyBatis: 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 Rod Johnson:Spring Framework的创始人,音乐学的博士学位,轮子理论:就是不要重复发明轮子 2、什么是框架? 框架可以类比如造房子的框架和造桥梁的框架,类库可以类比如为钢材,类库更加通用。 3、为什么使用框架? 软件系统日趋复杂 重用度高,开发效率和质量高 软件设计人员要专注于对领域的了解,使需求更充分易于上手、快速解决问题。 4、Sping IOC容器 面向接口编程的例子: 接口: 实现类: 调用:

C语言中(%d %.2d %2d %02d)(%2x, %02x, %-2x, %.2x)(%f, %.2f, %2.2f)(%e, %.2e,%3.2e)的区别

目录 %d %.2d %2d %02d %2x, %02x, %-2x, %.2x %f, %.2f, %2.2f %e, %.2e,%3.2e %d %.2d %2d %02d %d:即为普通的输出,是几位数就输出几位数。 %2d:按宽度为2输出,右对齐方式输出。若不够两位,左边补空格。 %02d:同样宽度为2,右对齐方式。位数不够,左边补0。 %.2d:从执行效果来看,与%02d一样。 %-2d:-号表示右边补空格 #include<stdio.h> int main() { int a = 2; printf("%d\n", a);// % d:即为普通的输出, 是几位数就输出几位数。 printf("%-2d\n", a);//% -2d: - 号表示后补空格 printf("%2d\n", a);//% 2d:按宽度为2输出,右对齐方式输出。若不够两位,左边补空格。 printf("%.2d\n", a);//% .2d:从执行效果来看,与 % 02d一样。 printf("%02d\n", a);//% 02d:同样宽度为2,右对齐方式。位数不够,左边补0。 return 0; } %2x, %02x, %-2x, %.2x x:表示以十六进制形式输出, %02x: 表示不足两位,前面补0输出;如果超过两位,则实际输出 %.2x:效果和%02x相同 (%02x=%.2x) %2x:表示数据不足两位时,前面补空格; 如果超过两位,则实际输出 %-2x:表示数据不足两位时,后面补空格; 如果超过两位,则实际输出 #include<stdio.h> int main() { printf("

如何切换不同的python环境

先”win+R"键,输入cmd,打开terminal;输入conda env list,查看有哪些python环境。其中带*号的是默认激活的python环境。即打开jupyter notebook默认是该环境。 C:\Users\Battery>conda env list # conda environments: # py35 D:\anaconda3\envs\py35 base * d:\anaconda3 py35 d:\anaconda3\envs\py35 不妨我们通过jupyter kernelspec list来试一下 C:\Users\Battery>jupyter kernelspec list Available kernels: python3 d:\anaconda3\share\jupyter\kernels\python3 激活要用的python环境(这里我需要的环境是py35):conda activate py35 C:\Users\Battery>conda activate py35 (py35) C:\Users\Battery>conda env list # conda environments: # py35 D:\anaconda3\envs\py35 base d:\anaconda3 py35 * d:\anaconda3\envs\py35 打开jupyter笔记本,则已成功切换python环境 补充: 我一般不会在C:\Users\Battery打开笔记本,考虑到大部分文件在E盘,因而在这里输出cmd,然后重复上述操作打开jupyter笔记本

element-ui table 表格组件实现可拖拽效果(行、列)

前言 最近需要实现table表格,行拖拽的功能,参照了一些优秀文章,实现了一下 参考文章 Vue进阶(幺零五):elementUI 实现表格行列拖拽 实现思路 主要是借助sortablejs,关于sortablejs我简单写了篇文章,有兴趣的可以看一下 拖拽,draggable组件和sortablejs 安装 npm install draggable 需要注意的是element table务必指定row-key,且row-key必须是唯一的,如ID,不然会出现排序不对的情况。 实现思路 1、定义一个列的数组,用来放列的数据。然后循环将列渲染出来 2、定义一个拖拽列的数组,拖拽后改变列在数组中的排列顺序 代码 <template> <div> <el-table :data="tableData" row-key="id" border style="width: 50%"> <el-table-column type="index" label="序号" width="100" align="center" /> <el-table-column v-for="(item, index) in colList" align="center" show-overflow-tooltip :key="`col_${index}`" :prop="dropCol[index].prop" :label="item.label" :min-width="item.minWidth" > <template v-slot="scope"> <span v-if="dropCol[index].prop == 'date'" style="color: blue"> {{ scope.row[dropCol[index].prop] }} </span> <span v-else> {{ scope.row[dropCol[index].prop] }} </span> </template> </el-table-column> </el-table> <pre style="text-align: left"> {{ dropCol }} </pre> <hr /> <pre style="

Unity-属性类似是有返回值方法的变量

属性类似是有返回值方法的变量 属性有一个优点,当类内部发生改变时,外部可以不受到任何影响。 需求:学生的年龄不是录入而是需要根据生日年份自动计算。输入学生的年龄,判断如果学生年龄大于18岁,则判定为成人。 //类的属性 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; //属性类似是有返回值方法的变量 //属性有一个优点,当类内部发生改变时,外部可以不受到任何影响。 //需求:学生的年龄不是录入而是需要根据生日年份自动计算。输入学生的年龄,判断如果学生年龄大于18岁,则判定为成人。 public class Demo : MonoBehaviour { void Start() { Student student = new Student() { birthdayYear = 2000 }; Debug.Log("学生年龄 = " + student.age); student.age = 20; Debug.Log("学生是否成人 = " + student.isAdult); } } public class Student : MonoBehaviour { public int birthdayYear; public bool isAdult = false; public int age { get { return DateTime.

华为防火墙技术-防火墙基础

防火墙概述 为什么需要防火墙? 路由器和交换机构建起互联互通的网络,但是也会带来安全隐患。例如在网络边界,企业有如下安全诉求: 1.外部网络隔离 2.内部网络安全管控 3.内容安全过滤 4.入侵防御 5.防病毒 什么是防火墙? 它是一种安全设备,用于保护一个网络不受另一个网络的攻击和入侵,通常被应用在网络边界,例如企业网的外部出口、企业内部业务边界、数据中心边界。 根据形态主要可分为:框式防火墙、盒式防火墙、软件防火墙 防火墙典型应用场景 防火墙种类 包过滤防火墙 基于五元组对每个数据包进行检测,也就是主要基于数据包中的源/目的IP地址、源/目的端口号、IP 标识和报文传递的方向等信息,根据配置的安全策略进行转发或丢弃数据包(通过配置访问控制列表(Access Control List,ACL)实施数据包的过滤。)。 优点是:这种防火墙设计简单,价格便宜。 缺点是:逐包检测,性能较低;ACL规则难以适应动态需求;通常不检查应用层数据;无报文关联分析,容易被欺骗。 状态检测防火墙 是包过滤技术的发展,它考虑报文前后的关联性,检测的是连接状态而非单个报文。 例如: 本例中,状态检测防火墙检测到10.0.0.1与20.0.0.1建立TCP连接,并产生会话信息。第三次握手报文不符合TCP连接状态,报文被丢弃。 代理型防火墙 代理型防火墙使得防火墙做为一个访问的中间节点,对客户端来说防火墙是一个服务器,对服务器来说防火墙是一个客户端。代理型防火墙安全性较高,但是开发代价很大。对每一种应用开发一个对应的代理服务是很难做到的,因此代理型防火墙不能支持很丰富的业务,只能针对某些应用提供代理支持。 AI防火墙 AI防火墙是结合AI技术的新一代防火墙。它通过结合AI算法或AI芯片等多种方式,进一步提高了防火墙的安全防护能力和性能。内置的恶意文件检测引擎CDE、诱捕Sensor、APT检测引擎和探针,支持与沙箱和华为大数据分析平台CIS联动检测,打造智能防御体系。 防火墙的基本概念 安全区域 一个安全区域是防火墙若干接口所连网络的集合,一个区域内的用户具有相同的安全属性 华为防火墙默认创建了四个安全区域:trust、untrust、dmz、local区域,防火墙默认安全区域均为小写字母,且大小写敏感。这些安全区域不能被删除,也不允许修改安全优先级。每个区域都要设置安全优先级,值越大则优先级越高。当然用户也可根据需求,创建自定义的安全区域。 区域名称 默认安全优先级 非受信区域(untrust) 低安全级别区域,优先级为5。 非军事化区域(dmz) 中等安全级别区域,优先级为50。 受信区域(trust) 较高安全级别区域,优先级为85。 本地区域(local) Local区域定义的是设备本身,例如设备的接口。Local区域是最高安全级别区域,优先级为100。 非受信区域(untrust ):通常用于定义 Internet 等不安全的网络。 非军事化区域(dmz ):通常用于定义内网服务器所在区域。因为这种设备虽然部署在内网,但是经常需要被外网访问,存在较大安全隐患,同时一般又不允许其主动访问外网,所以将其部署一个优先级比 trust 低,但是比 untrust 高的安全区域中。 ▫ DMZ ( Demilitarized Zone )起源于军方,是介于严格的军事管制区和松散的公共区域之间的一种有着部分管制的区域。防火墙设备引用了这一术语,指代一个逻辑上和物理上都与内部网络和外部网络分离的安全区域。 ▫ DMZ 安全区域很好地解决了服务器的放置问题。该安全区域可以放置需要对外提供网络服务的设备,如 WWW 服务器、 FTP 服务器等。上述服务器如果放置于内部网络,外部恶意用户则有可能利用某些服务的安全漏洞攻击内部网络;如果放置于外部网络,则无法保障它们的安全。 受信区域(trust ):通常用于定义内网终端用户所在区域。 本地区域(local ): local 区域定义的是设备本身,包括设备的各接口本身。凡是由设备构造并主动发出的报文均可认为是从 Local 区域中发出,凡是需要设备响应并处理(而不仅是检测或直接转发)的报文均可认为是由 local 区域接收。用户不能改变 local 区域本身的任何配置,包括向其中添加接口。由于local 区域的特殊性,在很多需要设备本身进行报文收发的应用中,需要开放对端所在安全区域与 local 区域之间的安全策略。(例如防火墙之间建立OSPF邻居关系) 流量的源、目的地址决定了互访的区域。本例1中PC访问防火墙的接口的流量实际上是从trust zone到达local zone;本例2中PC访问Internet的流量实际上是从trust zone到达untrust zone。

Spring Cloud Ribbon源码解析

1 概述 Spring Cloud Ribbon 可以实现客户端负载均衡,本文仅仅以Ribbon单独使用时对源码进行分析和理解,没有集成Eureka。 Ribbon会针对我们在配置文件中配置的服务地址进行负载均衡的计算,得到目标地址后,进行服务的调用。 接下来会针对两方面进行分析: 1、为什么我们使用@LoadBalanced注解作用于RestTemplate上就可以实现负载均衡了呢? 2、如何对服务地址进行解析的呢? 2 版本信息 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.2.9.RELEASE</version> </dependency> 3 源码解析 3.1 @LoadBalancer注解的作用 在使用RestTemplate的时候,我们加了一个@LoadBalance注解,就能让这个RestTemplate在请求时,就拥有客户端负载均衡的能力。 @Bean @LoadBalanced RestTemplate restTemplate() { return new RestTemplate(); } 然后,我们打开@LoadBalanced这个注解,可以发现该注解仅仅是声明了一个@Qualifier 注解。 @Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD }) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @Qualifier public @interface LoadBalanced { } @Qualifier注解相信大家在spring中都接触过,起作用就是当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean来消除歧义。 下面我们进行一个案例演示: 现在我们有一个TestClass类,想把这个类的实例对象注入到Spring容器中 public class TestClass { private String name; } @Configuration public class TestConfig { @Bean("

核主元分析 KPCA及matlab代码

前言 发现一篇很好的分享KPCA代码的文章 转载链接: f核主元分析 (Kernel Principal Component Analysis , KPCA) – MATLAB中文论坛 (ilovematlab.cn) 原博主处有打包matlab代码 对于简单的数据降维,可参考: 用matlab实现kpca(核主成分分析法)_Bbei的博客-CSDN博客_matlabkpca kpca思路和pca很像,可以了解 MATLAB实例:PCA(主成成分分析)详解_FDA_sq的博客-CSDN博客_matlab pca KPCA简介 KPCA、PCA应用: 降维特征提取去噪故障检测 假设训练数据由矩阵𝑋𝑛×𝑚表示,𝑚代表训练数据的大小,𝑛代表训练数据中特征向量的维度,KPCA具体实现过程如下: Step1:利用核函数计算核矩阵𝑲=[𝐾𝑖𝑗]𝑚×𝑚 Step2:核矩阵𝑲的中心化 Step3:对中心化核矩阵𝑲𝒄𝒆𝒏𝒕𝒆𝒓进行特征值分解 Step4:特征向量𝛼的标准化 Step5:提取训练数据的主成分 Step6:提取测试数据的主成分 KPCA的性能取决于核函数、核参数的选择。常用的核函数有线性核函数(Linear)、径向基(Radial Basis Function, RBF)和积分径向基(The Integrated Radial Basis Function, IRBF)核函数。当使用线性核函数时,KPCA退化为PCA。 主要功能 易于使用的 API支持基于 KPCA 的数据降维、特征提取、数据重构支持基于 KPCA 的故障检测和故障诊断支持多种核函数 (linear, gaussian, polynomial, sigmoid, laplacian)支持基于主元贡献率或给定数字的降维维度/主元个数选取 注意 仅支持基于高斯核函数的故障诊断核函数的参数对KPCA 模型的性能影响很大此代码仅供参考 使用说明 1. KPCA的建模过程(故障检测): (1)获取训练数据(工业过程数据需要进行标准化处理) (2)计算核矩阵 (3)核矩阵中心化 (4)特征值分解 (5)特征向量的标准化处理 (6)主元个数的选取 (7)计算非线性主成分(即降维结果或者特征提取结果) (8)SPE和T2统计量的控制限计算 function model = kpca_train(X,options) % DESCRIPTION % Kernel principal component analysis (KPCA) % % mappedX = kpca_train(X,options) % % INPUT % X Training samples (N*d) % N: number of samples % d: number of features % options Parameters setting % % OUTPUT % model KPCA model % % % Created on 9th November, 2018, by Kepeng Qiu.