技术文章

注解验证参数的合法性

微笑、不失礼 提交于 2021-02-17 13:40:12
一、定义需要验证的参数类型 package cn.com.songjy.annotation; public enum ValidateType { NotNull,Length,Number } 二、编写注解类 package cn.com.songjy.annotation; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @Retention(RetentionPolicy.RUNTIME) public @interface ValidateAnnotation { public ValidateType type(); public String errorMsg(); public int length() default 0; } 三、验证参数 package cn.com.songjy.annotation; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; public class ValidateTools { public static

【精品投稿】检查数据接口返回数据合法性

不想你离开。 提交于 2021-02-17 13:38:13
问题背景: 在测试&部署监控过程中,我们常常会遇到外部接口返回数据不靠谱的时候。最常见的场合是从某个http获取如json和xml等结构化的结果,进行解析并处理,在这时候出现以下这几种常见类型的错误: (1)整个结构不完整。直接无法解析json/xml。 (2)编码错误,常见的gbk/utf8错误 (3)超长数据/非法字符。 (4)数据类型不匹配。需要是数字的给了字符串,该是数组的给了字符串等,对json本身来说没问题,程序处理就会错误或者崩溃。 (5)字段缺失或者为空,这个情况对json本身来说也是没问题的,处理进程固定要去取这里的字段就会出问题,或者进程本身没问题,但实际展现出问题。 例如json描述一个商品最近30天的售价,提供一个数组里有30个数据来画点,json里这个数组为空,从数据格式上来说没问题,但实际画点时展现即为空。 截图是来自一份合作方的数据,箭头指向的是上证指数曲线的点,如果点数据完全缺失(为空)则画曲线的界面会显示为空。在json结构上则仍然验证为合法。 解决问题的现状: 对上述问题,我们有一些简单的自动化监控手段,通过定期抓取http接口再获取其中内容这一步比较简单,接下来我们会验证http状态码(200正常,非200认为是有问题)和长度,如果过短(例如少于20字节)则认为是无效。 还有一些自动化case会先人工看一下接口返回的具体内容

史上最详细的HashMap红黑树解析

放肆的年华 提交于 2021-02-17 13:37:02
简介:请允许我当一回标题党。好了,言归正传,本篇主要内容便是介绍HashMap的男二号——TreeNode(男一号还是给Node吧,毕竟是TreeNode的爷爷,而且普通节点一般来说也比TreeNode要多),本篇主要从以下几个方面介绍:1. ... 请允许我当一回标题党。 好了,言归正传,本篇主要内容便是介绍HashMap的男二号——TreeNode(男一号还是给Node吧,毕竟是TreeNode的爷爷,而且普通节点一般来说也比TreeNode要多),本篇主要从以下几个方面介绍: 1.红黑树介绍 2.TreeNode结构 3.树化的过程 4.红黑树的左旋和右旋 5.TreeNode的左旋和右旋 6.红黑树的插入 7.TreeNode的插入 8.红黑树的删除 9.TreeNode的删除 讲解红黑树的部分算是理论部分,讲解TreeNode的部分则是代码实践部分,配合服用效果更加。 保守估计,仔细食用本篇大约需要半小时,请各位细细品尝。 红黑树介绍 什么是红黑树?嗯,首先,它是一颗树,所谓的树,便是长的像这样的东西 不像树?emmmm,你把它想象成一颗倒过来的树就好了,A~H都是树的节点,每个节点有零个或者多个子节点,或者说多个孩子,但除了根节点以外,每个节点都只有一个父节点,也称只有一个父亲(老王嘿嘿一笑)。 最上面的A是根节点,最下面的D、H、F、G是叶子节点

决策树-缺失值处理

拥有回忆 提交于 2021-02-17 13:31:19
缺失值算是决策树里处理起来比较麻烦的了,其他简单的我就不发布了。 # encoding:utf-8 from __future__ import division __author__ = ' HP ' import copy import math import numpy as np import pandas as pd from collections import Counter from sklearn.preprocessing import LabelEncoder # ############################### # id3 # 离散属性 # 多分类 # 多重字典记录学习规则 # 非递归 # 深度优先 # 预剪枝 # ## 缺失值处理 # 解决两个问题 # 如何进行划分属性选择,缺失值如何处理 # 如何进行样本划分,缺失值对应的样本如何划分 # ############################### ''' 缺失值处理 1. 如何进行属性选择 a. 第一次选择划分属性时,样本等权重,均为1,找出未缺失的样本集,计算该样本集的信息增益 和 该样本集的占比,两者相乘即为真正的信息增益 . 注意这时计算占比,就是数个数,因为权重都是1 . 计算信息增益时,P也是数个数 b. 后面选择划分属性时,样本不等权重,找出未缺失的样本集

百度AI加速器第七期火热招募

。_饼干妹妹 提交于 2021-02-17 13:30:14
百度AI加速器自2017年启航以来,已举办6期。 在此期间,百度AI加速器助力成员企业应用AI技术赋能各行各业,为205家企业提供“加速”服务,共同推进了人工智能在各个产业领域的渗透落地。 伴随产业智能化升级的加速,百度AI加速器第七期已拉开帷幕,诚邀您的加入! 扫码报名 让你一键加速度!! 点击 【阅读原文】 ,即可立即申请报名。 分享、留言、点赞、在看 快来“一键四连”啦! 本文分享自微信公众号 - 百度智能云(baidu_cloud)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。 来源: oschina 链接: https://my.oschina.net/u/4610888/blog/4591953

程序员你如何检查参数的合法性?

别等时光非礼了梦想. 提交于 2021-02-17 13:18:32
作为程序员的你,代码中最多的就是各种方法了,你是如何对参数进行校验的呢? 背景 大部分的方法和构造函数对传入的参数值有一些限制,比如:常见的索引值必须是非负数,对象引用不能为空。 你应该使用清晰的文档来标注所有的这些限制,然后在方法体开始的地方强制他们检查。 应该在错误发生的时候尽快的检查出来 ,这是基本原则。 如果你不这么做,当错误发生的时候,错误将不会被检测出来,这让定位错误的源头变得更困难。 如果一个非法参数传递到一个方法中,在方法执行前进行了参数检查。它将会快速失败,并给出清晰的异常信息。 如果方法没有检查参数,下面这些事情会发生。 程度 说明 糟糕 方法会在执行过程中失败然后抛出一个不明确的异常; 更糟糕 方法会正常返回,但是悄悄的计算了一个错误的值。 最糟糕 方法正常返回,但是一些对象处在一个不正确的状态,未来一个不确定的时间点在某些无关联的点会造成一个错误。 一句话总结:参数不校验会导致 原子性失败 。 推荐做法 对公共和保护方法,使用java文档的@throws标签来标注参数值不合法将抛出的异常。 常见的参数校验的异常类型如下: 异常名称 说明 IllegalArgumentException 非法参数 IndexOutOfBoundsException 数组越界 NullPointerException 空指针

史上最清晰的红黑树讲解(下)

大兔子大兔子 提交于 2021-02-17 13:17:29
本文github地址 上一篇文章 史上最清晰的红黑树讲解(上) 对Java TreeMap 的插入以及插入之后的调整过程给出了详述。 本文接着以Java TreeMap 为例,从源码层面讲解红黑树的删除,以及删除之后的调整过程 。如果还没有看过上一篇文章,请在阅读本文之前大致浏览一下前文,以方便理解。 寻找节点后继 对于一棵二叉查找树,给定节点t,其后继(树种比大于t的最小的那个元素)可以通过如下方式找到: t的右子树不空,则t的后继是其右子树中最小的那个元素。 t的右孩子为空,则t的后继是其第一个向左走的祖先。 后继节点在红黑树的删除操作中将会用到。 TreeMap 中寻找节点后继的代码如下: // 寻找节点后继函数successor() static <K,V> TreeMap.Entry<K,V> successor(Entry<K,V> t) { if (t == null) return null; else if (t.right != null) {// 1. t的右子树不空,则t的后继是其右子树中最小的那个元素 Entry<K,V> p = t.right; while (p.left != null) p = p.left; return p; } else {// 2. t的右孩子为空,则t的后继是其第一个向左走的祖先 Entry<K,V> p = t

embattled Tony Abbott

十年热恋 提交于 2021-02-17 13:17:12
Channel swim team warms up in cold water It's not just about the swimming on that day, it's about the journey of getting there,'' he said.Those taking part are heading into the unknown. There's 700 ships a day go through that channel. It's murky dirty water full Authentic Ryan Clady Jersey of jellyfish.''In preparation for the crossings the swimmers had been training at the Panmure waterhole in the middle Authentic Von Miller Jersey of the night while other sessions involved night swims in the Hopkins River and Lady Bay, Mr Lamb said.There are a few people who think we're crazy'', he said with

【转】卡尔曼滤波器

倾然丶 夕夏残阳落幕 提交于 2021-02-17 13:16:22
在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。如果对这编论文有兴趣,可以到这里的地址下载: http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf 简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。 2.卡尔曼滤波器的介绍 (Introduction

java基础学习总结——线程(一)

跟風遠走 提交于 2021-02-17 13:15:18
原文出处 一、线程的基本概念    线程理解:线程是一个程序里面不同的执行路径   每一个分支都叫做一个线程,main()叫做主分支,也叫主线程。   程只是一个静态的概念,机器上的一个.class文件,机器上的一个.exe文件,这个叫做一个进程。程序的执行过程都是这样的:首先把程序的代码放到内存的代码区里面,代码放到代码区后并没有马上开始执行,但这时候说明了一个进程准备开始,进程已经产生了,但还没有开始执行,这就是进程,所以进程其实是一个静态的概念,它本身就不能动。平常所说的进程的执行指的是进程里面主线程开始执行了,也就是main()方法开始执行了。进程是一个静态的概念,在我们机器里面实际上运行的都是线程。   Windows操作系统是支持多线程的,它可以同时执行很多个线程,也支持多进程,因此Windows操作系统是支持多线程多进程的操作系统。Linux和Uinux也是支持多线程和多进程的操作系统。DOS就不是支持多线程和多进程了,它只支持单进程, 在同一个时间点只能有一个进程在执行,这就叫单线程 。   CPU难道真的很神通广大,能够同时执行那么多程序吗?不是的,CPU的执行是这样的:CPU的速度很快,一秒钟可以算好几亿次,因此CPU把自己的时间分成一个个小时间片,我这个时间片执行你一会,下一个时间片执行他一会,再下一个时间片又执行其他人一会,虽然有几十个线程