每日笔记-2019

2019-7-9

1.System.exit(参数) 不管参数为什么,都会退出主线程

0:表示正常退出

非零参数:表示非正常退出

当放在线程中时,如果没有睡眠,主线程会继续执行下去,不会退出主线程。需要等线程执行完成之后才会执行System.exit,退出程序,也就是需要等线程返回才会继续下去。

当前方法可以用在程序启动时,加载某些参数不符合规范时,需要停止执行时,可用到,

但是一但使用,他会直接关停整个服务。

例:

 

2.Json字符串和Json对象的相互转换工具

用在http请求时,转换参数,jsonString=>Objiet,Objiet=>jsonString互转。

主要使用到:objectMapper,对其简单封装了一下

Include枚举:

ALWAYS 不过滤为空的 属性

NON_NULL 过滤为空的对象 (T)属性

NON_DEFAULT 过滤拥有默认值的 属性

NON_EMPTY 过滤String ,list ,map这三种为空时的 属性

 

<!-- json注解 -->

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.5.3</version>

</dependency>

切记:当使用内部类时,新建的内部类必需为静态的(static),

不然会出现没有权限访问当前内部类。

 

2019-8-1

1.数据库的三范式

第一范式:强调的是列的原子性,也就是当前列不能再分割为其它几列

比如,电话有公司电话和家庭电话,这个时候我们就要对这个电话再分开表明意思,不能单独使用叫电话这样的字眼。

第二范式:表必须要有主键,也就是对数据能做唯一性的判别,二是没有包含在朱建忠的列必须完全依赖于主键,而不能只依赖于主键的一部分。

比如,有订单这样的一张表,每个用户下单都会选择商品,然后生成订单,可能一笔订单包含多个商家并且多个商品,这个时候我们需要对每个商品区别开来,不能把关于商品的所有信息全部涌入到订单表中,这时候就需要对订单做二范式的处理,需要生成子订单,要用到联合主键。

第三范式:首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。

        考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF

 

2019-8-17

vue学习笔记

1.需要化境和工具:

环境:安装nodejs

工具: Visual Studio Code

2.创建地一个vue项目

 

2019-8-23

1.使用ApplicationContextAware实现bean的初始化

当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。

可以使用@Component来进行注册,也可以再web.xml中申明bean,如下:

<bean id="appUtil" class="com.htsoft.core.util.SpringUtil"/>

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException;

获得ApplicationContext对象,ApplicationContext对象是由spring注入的。前提必须在Spring配置文件中指定该类。

使用当前方法,必需要在spring加载成功后方可。

代码案例:

 

 

2.线程池-ExecutorService:

使用完之后,使用ApplicationListener监听策略,执行线程池的销毁,

案例如下:

java.util.co

 

ncurrent; ExecutorService;

 

 

 

 

3.如果想使用多态,则可以使用创建接口,实现多集成。不一定全是实现

4.java8配合Stream和lambda使用的表达式

-> :断言表达式

如:list.stream().filter(x -> x >= 30)

() ->:function表达式

如:list.map((x) -> x + 10)

 

关键名字解释:

list.stream():获取list的stream的流

stream()优点:1.无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数

据源可以是一个数组,Java容器或I/O channel等。2.为函数式编程而生。对stream的任

何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元

素,而是会产生一个不包含被过滤元素的新stream。3.惰式执行。stream上的操作并不

会立即执行,只有等到用户真正需要结果的时候才会执行。4.可消费性。stream只能

被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新

生成。

filter:筛选

map:做一个function映射

sort:排序,里面是compartor

collect:

 

lanbda原理:

比如List里面存个个人的年龄,现在筛选出年龄大于等于18的人。

此时我们就可以用  list.stream().filter((x) -> x >= 18)   这就是一个典型的lambda表达式

(x) -> x >= 18 传给  Predicate 函数式接口。原理其实是:JVM帮我们动态生成了一个内部

类,然后这个内部类实现了 Predicate 这个函数式 接口。重写了里面的test方法。生成的类

似如下:

static final class Main$$Lambda$1 implements Predicate<Integer> {

    private Main$$Lambda$1() {}

    @Override

    public boolean test(Integer x) {return x >= 18;}

}

分组:

//根据某一字段进行分组,可以附加filter等操作

Map<String,List<T>> groupBy=tList.stream().collect(Collectors.groupingBy(T::getName));

 

筛选:

2019-8-28

1.递归处理业务

如:1.树状结构获取

 

 

2019-09-04

1.ETL学习之kettle工具的使用。

ETL简单介绍:分别是“Extract”、“ Transform” 、“Load”三个单词的首字母缩写也就是“抽取”、“转换”、“装载”,但我们日常往往简称其为数据抽取

分为转换 和 作业 ,作业可自动执行,转换需要手动点击,作业可以包含多个转换,转换之间有依赖关系需要串行,没有依赖关系可以并行。

在linux上启动作业(.job)使用的脚本是kitchen.sh,启动转换(.ktr)使用的是pan.sh

2.学习到使用js脚本做验证并且生成唯一主键脚本

(固定编码+时间戳+随机数),例:

//需要二十位的纯数字字符,简单沉睡10毫秒,可达到效果

function getUserType(s){

return s

}

var user_type = getUserType(APPLY_TYPE);

var cert_type = "";

if(CERTIFICATE_TYPE=="idcard"){

cert_type = "10";

}else{

cert_type = CERTIFICATE_TYPE;

}

//生成随机数

function rnd(n, m){

var random = Math.floor(Math.random()*(m-n+1)+n);

return random;

}

//使用循环阻止同时生成一个id(并发可支持毫秒级)

function sleep(n) {

var start = new Date().getTime();

while(true) if(new Date().getTime()-start > n) break;

return new Date().getTime();

}

var t = "s"+"4"+sleep(rnd(0,9))+rnd(10000,99999)

//1495302061441

var user_id = t.replace("s","");

 

2019-09-17

1.git命令回温

git clone (git地址) 克隆远程代码到本地

git add . 添加所有数据到本地版本库

git commit “初始化” 提交数据到本地版本库

git branch 查询本地分支

git branch -a 查询远程分支

git rm -r 文件夹 删除文件或者文件夹允许递归删除 (如果需要同步到远程需要执行 commit 然后 执行

push)

git checkout -b 本地分支名字 origin/远程分支名字 切换分支

2.ridis分布式锁的使用

锁实现

 

锁对象

 

主要是通过redis缓存,获取是否存在ridis key值,然后通过过期释放时间来确定是否已经释放锁资源。最好需要设置一个默认的国企时间,以防出现死锁。

3.mysqlexcle字段处理

SELECT

COLUMN_NAME 列名,

COLUMN_COMMENT 名称 ,

COLUMN_TYPE 数据类型,

DATA_TYPE 字段类型,

CHARACTER_MAXIMUM_LENGTH 长度,

IS_NULLABLE 是否必填,

COLUMN_DEFAULT 描述

FROM

INFORMATION_SCHEMA.COLUMNS

where

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值