11个常见的分类特征的编码技术

器学习算法只接受数值输入,所以如果我们遇到分类特征的时候都会对分类特征进行编码,本文总结了常见的11个分类变量编码方法。

1、ONE HOT ENCODING

最流行且常用的编码方法是One Hot Enoding。一个具有n个观测值和d个不同值的单一变量被转换成具有n个观测值的d个二元变量,每个二元变量使用一位(0,1)进行标识。

例如:

编码后

最简单的实现是使用pandas的' get_dummies

 new_df=pd.get_dummies(columns=[‘Sex’], data=df)

2、Label Encoding

为分类数据变量分配一个唯一标识的整数。这种方法非常简单,但对于表示无序数据的分类变量是可能会产生问题。比如:具有高值的标签可以比具有低值的标签具有更高的优先级。

例如上面的数据,我们编码后得到了下面的结果:

sklearn的LabelEncoder 可以直接进行转换:

 from sklearn.preprocessing import LabelEncoder
 le=LabelEncoder()
 df[‘Sex’]=le.fit_transform(df[‘Sex’])

3、Label Binarizer

LabelBinarizer 是一个用来从多类别列表创建标签矩阵的工具类,它将把一个列表转换成一个列数与输入集合中惟一值的列数完全相同的矩阵。

例如这个数据

转化后结果为

 from sklearn.preprocessing import LabelBinarizer
 lb = LabelBinarizer()
 new_df[‘Sex’]=lb.fit_transform(df[‘Sex’])

4、Leave one out Encoding

Leave One Out 编码时,目标分类特征变量对具有相同值的所有记录会被平均以确定目标变量的平均值。在训练数据集和测试数据集之间,编码算法略有不同。因为考虑到分类的特征记录被排除在训练数据集外,因此被称为“Leave One Out”。

对特定类别变量的特定值的编码如下。

 ci = (Σj != i tj / (n — 1 + R)) x (1 + εi) where
 ci = encoded value for ith record
 tj = target variable value for jth record
 n = number of records with the same categorical variable value
 R = regularization factor
 εi = zero mean random variable with normal distribution N(0, s)

例如下面的数据:

编码后:

为了演示这个编码过程,我们创建数据集:

 import pandas as pd;
 data = [[‘1’, 120], [‘2’, 120], [‘3’, 140],
 [‘2’, 100], [‘3’, 70], [‘1’, 100],[‘2’, 60],
 [‘3’, 110], [‘1’, 100],[‘3’, 70] ]
 df = pd.DataFrame(data, columns = [‘Dept’,’Yearly Salary’])

然后进行编码:

 import category_encoders as ce
 tenc=ce.TargetEncoder()
 df_dep=tenc.fit_transform(df[‘Dept’],df[‘Yearly Salary’])
 df_dep=df_dep.rename({‘Dept’:’Value’}, axis=1)
 df_new = df.join(df_dep)

这样就得到了上面的结果

5、Hashing

当使用哈希函数时,字符串将被转换为一个惟一的哈希值。因为它使用的内存很少可以处理更多的分类数据。对于管理机器学习中的稀疏高维特征,特征哈希是一种有效的方法。它适用于在线学习场景,具有快速、简单、高效、快速的特点。

例如下面的数据:

编码后

代码如下:

 from sklearn.feature_extraction import FeatureHasher
 # n_features contains the number of bits you want in your hash value.
 h = FeatureHasher(n_features = 3, input_type =’string’)
 # transforming the column after fitting
 hashed_Feature = h.fit_transform(df[‘nom_0’])
 hashed_Feature = hashed_Feature.toarray()
 df = pd.concat([df, pd.DataFrame(hashed_Feature)], axis = 1)
 df.head(10)

6、Weight of Evidence Encoding

(WoE) 开发的主要目标是创建一个预测模型,用于评估信贷和金融行业的贷款违约风险。证据支持或驳斥理论的程度取决于其证据权重或 WOE。

如果P(Goods) / P(Bads) = 1,则WoE为0。如果这个组的结果是随机的,那么P(Bads) > P(Goods),比值比为1,证据的权重(WoE)为0。如果一组中P(Goods) > P(bad),则WoE大于0。

因为Logit转换只是概率的对数,或ln(P(Goods)/P(bad)),所以WoE非常适合于逻辑回归。当在逻辑回归中使用wo编码的预测因子时,预测因子被处理成与编码到相同的尺度,这样可以直接比较线性逻辑回归方程中的变量。

例如下面的数据

会被编码为:

代码如下:

 from category_encoders import WOEEncoder
 df = pd.DataFrame({‘cat’: [‘a’, ‘b’, ‘a’, ‘b’, ‘a’, ‘a’, ‘b’, ‘c’, ‘c’], ‘target’: [1, 0, 0, 1, 0, 0, 1, 1, 0]})
 woe = WOEEncoder(cols=[‘cat’], random_state=42)
 X = df[‘cat’]
 y = df.target
 encoded_df = woe.fit_transform(X, y)

7、Helmert Encoding

Helmert Encoding将一个级别的因变量的平均值与该编码中所有先前水平的因变量的平均值进行比较。

反向 Helmert 编码是类别编码器中变体的另一个名称。它将因变量的特定水平平均值与其所有先前水平的水平的平均值进行比较。

会被编码为

代码如下:

 import category_encoders as ce
 encoder=ce.HelmertEncoder(cols=’Dept’)
 new_df=encoder.fit_transform(df[‘Dept’])
 new_hdf=pd.concat([df,new_df], axis=1)
 new_hdf

8、Cat Boost Encoding

是CatBoost编码器试图解决的是目标泄漏问题,除了目标编码外,还使用了一个排序概念。它的工作原理与时间序列数据验证类似。当前特征的目标概率仅从它之前的行(观测值)计算,这意味着目标统计值依赖于观测历史。

TargetCount:某个类别特性的目标值的总和(到当前为止)。

Prior:它的值是恒定的,用(数据集中的观察总数(即行))/(整个数据集中的目标值之和)表示。

featucalculate:到目前为止已经看到的、具有与此相同值的分类特征的总数。

编码后的结果如下:

代码:

 import category_encoders
 category_encoders.cat_boost.CatBoostEncoder(verbose=0,
 cols=None, drop_invariant=False, return_df=True,
 handle_unknown=’value’, handle_missing=’value’,
 random_state=None, sigma=None, a=1)
 
 target = df[[‘target’]]
 train = df.drop(‘target’, axis = 1)
 
 # Define catboost encoder
 cbe_encoder = ce.cat_boost.CatBoostEncoder()
 
 # Fit encoder and transform the features
 cbe_encoder.fit(train, target)
 train_cbe = cbe_encoder.transform(train)

9、James Stein Encoding

James-Stein 为特征值提供以下加权平均值:

  • 观察到的特征值的平均目标值。
  • 平均期望值(与特征值无关)。

James-Stein 编码器将平均值缩小到全局的平均值。该编码器是基于目标的。但是James-Stein 估计器有缺点:它只支持正态分布。

它只能在给定正态分布的情况下定义(实时情况并非如此)。为了防止这种情况,我们可以使用 beta 分布或使用对数-比值比转换二元目标,就像在 WOE 编码器中所做的那样(默认使用它,因为它很简单)。

10、M Estimator Encoding:

Target Encoder的一个更直接的变体是M Estimator Encoding。它只包含一个超参数m,它代表正则化幂。m值越大收缩越强。建议m的取值范围为1 ~ 100。

11、 Sum Encoder

Sum Encoder将类别列的特定级别的因变量(目标)的平均值与目标的总体平均值进行比较。在线性回归(LR)的模型中,Sum Encoder和ONE HOT ENCODING都是常用的方法。两种模型对LR系数的解释是不同的,Sum Encoder模型的截距代表了总体平均值(在所有条件下),而系数很容易被理解为主要效应。在OHE模型中,截距代表基线条件的平均值,系数代表简单效应(一个特定条件与基线之间的差)。

最后,在编码中我们用到了一个非常好用的Python包 “category-encoders”它还提供了其他的编码方法,如果你对他感兴趣,请查看它的官方文档:

http://contrib.scikit-learn.org/category_encoders/

作者:saksham saxena

本文转载于网络 如有侵权请联系删除

相关文章

  • Docker容器网络配置

    Docker容器网络配置1、Linux内核实现名称空间的创建1.1ipnetns命令可以借助ipnetns命令来完成对NetworkNamespace的各种操作。ipnetns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装。[root@localhost~]#dnf-yinstalliproute复制注意:ipnetns命令修改网络配置时需要sudo权限。可以通过ipnetns命令完成对NetworkNamespace的相关操作,可以通过ipnetnshelp查看命令帮助信息:[root@localhost~]#ipnetnshelp Usage: ipnetnslist ipnetnsaddNAME ipnetnsattachNAMEPID ipnetnssetNAMENETNSID ip[-all]netnsdelete[NAME] ipnetnsidentify[PID] ipnetnspidsNAME ip[-all]netnsexec[NAME]cmd... ipnetnsmonitor ipnetnslist-id[targe

  • 神思第二代身份证验证系统怎么拍照_神思二代身份证验证器没反应

    大家好,又见面了,我是你们的朋友全栈君。开发的平台中涉及到读取身份证信息,采用的是神思第二代身份证验证系统。 一、下载驱动本设备型号:SS628(100)神思官网下载相应的驱动和演示Demo,下载之前需要根绝设备序号在官网进行用户注册登录http://www.sdses.com/index.php?c=category&id=73下载完成以后打开:二、安装驱动第一次插上机具以后设备管理器中显示的是未知设备首先确定您电脑是什么系统?如果是win7,需要确定是多少位的?(在电脑桌面用鼠标右击“我的电脑”或者“计算机”这个图标,点击“属性”可以查看电脑系统以及是多少位),用鼠标右击“计算机”或者“我的电脑”—管理–设备管理器—其他设备–未知设备win764位:右击未知设备——更新驱动程序软件——浏览计算机以查找——浏览——usbdriver/win764bit/win764bit驱动——确定——安装完成win732位:右击未知设备——更新驱动程序软件——浏览计算机以查找——浏览——usbdriver/2k,xp/usbdriver3.0——确定——安装完成XP:右击未知设备——更新驱

  • 当濒危野生动物开始被昇腾AI保护起来

    作者|曾响铃 文| 响铃说(xiangling0815)大量的野外拍摄照片需要专家人工识别并进行注释,费时费力;决策者可以很快决定该如何采取行动,但在这之前要花很长时间等待数据分析结果;帮助行业专家和公益界人士更好地优化保护方式的科学研究,常常因为野外图像数据支撑还不够导致进展缓慢……动物保护已经成为人类共识,但在行动上却因为数据处理和挖掘速度根不上而面临种种尴尬。随着渡渡鸟、大海雀、塔斯马尼亚虎、西部黑犀牛等珍惜动物的灭绝,生态系统所面临的潜在不利影响正在放大,强化动物保护的科研认知、加快实践落地工作变得更加紧迫。在这样的大背景下,人工智能介入动物保护就变得顺理成章,这些年从国内到国外大量的公益组织与科技企业都在尝试用AI推动与动物保护有关的图像数据处理工作。然而,对AI模型开发而言,濒危野生动物保护与其他多数领域相比面临十分复杂的挑战,高效的AI开发框架和专业的技术团队支撑变得更加重要,在业内,已有相关的合作在开展,例如某自然保护机构就与来自昇腾AI产业生态的昇思MindSpore开源社区合作,共同将AI应用于生物多样性保护场景。这种合作,将推动照片识别流程的速度,节省人力和时间,

  • 基于强化学习的自动化剪枝模型 | GitHub项目推荐

    AI科技评论今天为大家介绍一个GitHub上最新开源的一个基于强化学习的自动化剪枝模型,本模型在图像识别的实验证明了能够有效减少计算量,同时还能提高模型的精度。项目地址:https://github.com/freefuiiismyname/cv-automatic-pruning-transformer1介绍目前的强化学习工作很多集中在利用外部环境的反馈训练agent,忽略了模型本身就是一种能够获得反馈的环境。本项目的核心思想是:将模型视为环境,构建附生于模型的agent,以辅助模型进一步拟合真实样本。大多数领域的模型都可以采用这种方式来优化,如cv/多模态等。它至少能够以三种方式工作:1.过滤噪音信息,如删减语音或图像特征;2.进一步丰富表征信息,如高效引用外部信息;3.实现记忆、联想、推理等复杂工作,如构建重要信息的记忆池。这里推出一款早期完成的裁剪机制transformer版本(后面称为APT),实现了一种更高效的训练模式,能够优化模型指标;此外,可以使用动态图丢弃大量的不必要单元,在指标基本不变的情况下,大幅降低计算量。该项目希望为大家抛砖引玉。2为什么要做自动剪枝在具体任务

  • 【安全事件】精准短信钓鱼频发,已有多个银行用户中招!

    通告编号:NS-2021-0010 2021-03-04TAG:短信钓鱼、网站伪造、业务安全、安全意识事件危害:易造成用户信息泄露与资金损失。版本:1.01事件概述2021年1月至今,绿盟科技应急响应团队监测到全国多个省份出现多起仿冒银行系统的短信钓鱼事件,其中钓鱼剧本、攻击手法及钓鱼网站页面均高度相似,可基本确认是同一黑产团伙所为。钓鱼短信称受害者手机银行即将过期或账户被冻结,并附带仿冒的钓鱼网站域名。钓鱼网站与目标手机银行登录界面高度相似,并诱导用户输入身份证号、手机号、手机银行登录密码、短信验证码、交易密码等敏感信息。目前已有多个受害者账户余额被黑产团伙盗刷,请广大用户提高警惕严加防范。钓鱼短信截图SEEMORE→2事件分析攻击者首先通过境外域名注册商注册了大量6至8位的无规律域名,用于后期频繁更换钓鱼网站域名,同时解析地址也均为攻击者在境外购买的VPS。钓鱼域名反查钓鱼网站首先会判断用户浏览器信息,并诱导用户使用手机浏览器访问。网站内容伪造为各银行的手机银行登录界面,并要求受害者用户输入登录名及密码。钓鱼网站登录页面用户输入登录信息后,首先会弹出伪造的登录进度条信息。同时网站后

  • SQL*Loader设置参数之ROWS、BINDSIZE和READSIZE

    概述本文将介绍SQL*Loader用户配置文件的参数中,传统常规路径(ConventionalPath)情况下和性能有关的参数:ROWS、BINDSIZE和READSIZE。首先,在传统常规路径(ConventionalPath)过程中,SQL*Loader是利用SQLINSERT文和绑定数组缓冲区(bindarraybuffer)进行数据加载的。 绑定数组缓冲区(bindarraybuffer)是SQL*Loader用于缓存加载数据的内存区域。SQL*Loader进行数据加载时,首先会同时读入多行并拷贝到bindarray。当bindarray满(或者没有其他数据需要加载)时,会进行一次插入工作。 绑定数组(bindarray)的大小主要由参数BINDSIZE和READSIZE进行控制。DatabaseUtilities >ConventionalPathLoads参数详细对于ROWS、BINDSIZE和READSIZE参数的作用和意义如下:ROWS对于传统常规路径(ConventionalPath)导入的情况,代表一次提交(Commit)的行数(默认:6最大值:65534)。

  • wordpress调用文章摘要,若无摘要则自动截取文章内容字数做为摘要

    以下是调用指定分类文章列表的一个方法,作者如果有填写文章摘要则直接调用摘要;如果文章摘要忘记写了则自动截取文章内容字数做为摘要。这个方法也适用于调用description标签<ul> <?php $args=array( 'cat'=>1,//分类ID 'posts_per_page'=>10,//显示篇数 ); query_posts($args); if(have_posts()):while(have_posts()):the_post(); ?> <li> <ahref="<?phpthe_permalink();?>"><?phpthe_title();?></a>//标题 <p> <?phpif(has_excerpt()){ echo$description=get_the_excerpt();//文章编辑中的摘要 }else{ echomb_strimwidth(strip_tags(apply_f

  • Tool之DKM

    DKM,就是Workbench里的DownloadableKernelModuleproject,这种工程用于管理/构建系统内核空间里的应用模块通过DKM,可以单独构建基于内核的应用模块,在运行VxWorks的Target上运行和调试应用,并动态地加载、卸载和重新加载应用。当开发工作完成后,还可以静态地将应用模块链接到内核中。内核模式生成的所有任务都在未受保护的环境中运行,可以完全访问系统中的硬件。链接到内核的可下载内核模块是在Target启动时就可以启动的应用程序。这种内核模式开发是传统的VxWorks开发方法,而VxWorks5.x只支持这种模式,也就是Tornado里的downloadableapplicationmoduleproject来建一个DKM看看先给工程起个名字,位置放在当前workspace就可以了选择合适的Activebuildspec。什么叫合适?就是与要运行这个DKM的VIP的CPU+Tool一致没有提到的页面里,直接使用默认值就可以了。在建好的DKM里,可以添加自己的代码了记着文件名是有后缀的,而且后缀名是小写字母也可以分目录添加,即使用文件夹也可以直接添加

  • 项目经验不丰富、技术不突出的程序员怎么打动面试官?前言 关于项目经验关于基本技术关于个人潜力结语

    前言 相信不少的程序员都有过类似的困惑:如果我没有大型的项目经历,也不能靠技术征服面试官,那我要怎么才能给面试官留下一个好印象呢?按照本人的面试经验来说,面试主要看几点:项目经验+基本技术+个人潜力关于项目经验我认为方腾飞讲的一段话非常好:介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自己有没有把整个系统架构或产品搞清楚,并能介绍清楚,为什么做这个系统?这个系统的价值是什么?这个系统有哪些功能?优缺点有哪些?如果让你重新设计这个系统你会如何设计?我觉得这就已经足以概括了。也许你仅仅工作一年,也许你做的是项目中微不足道的模块,当然这些一定是你的劣势且无法改变,但是如何弥补这个劣势,从方老师的话中我总结几点:明确你的项目到底是做什么的,有哪些功能明确你的项目的整体架构,在面试的时候能够清楚地画给面试官看并且清楚地指出从哪里调用到哪里、使用什么方式调用明确你的模块在整个项目中所处的位置及作用明确你的模块用到了哪些技术,更好一些的可以再了解一下整个项目用到了哪些技术在你无法改变自己的工作年限、自己的不那么有说服力的项目经验的情况

  • 计算机基础(二)

    计算机基础(二)设计架构    一般消费者常说的电脑通常指的就是x86的个人电脑架构。早期两大主流x86开发商(Intel,AMD)的CPU架构与设计理念都有些许差异。1、CPU1.Intel芯片架构    北桥:负责链接速度较快的CPU、内存与显卡接口等元件。    南桥:负责连接速度较慢的设备接口,包括硬盘、USB、网卡等等。    由于北桥最重要的就是CPU与内存之间的桥接,因此目前的主流架构中,大多将北桥内存控制器整合到CPU封装当中了。    早期芯片组分南北桥,北桥可以连接CPU、内存与显卡。只是CPU要读写到内存的动作,还需要北桥的支持,也就是CPU与内存的交流,会瓜分掉北桥的总可用带宽!因此目前将内存控制器整合到CPU后,CPU与内存之间的沟通是直接交流,速度较快之外,也不会消耗更多的带宽!    频率目前仅能用来比较同款CPU的速度。    外频指的是CPU与外部元件进行数据传输时的速度;倍频则是CPU内部用来加速工作性能的一个倍数;两者相乘才是CPU的频率速度。    超频指的是将CPU的倍频或者是外频通过主板的设置功能更改成较高频率的一种方式。因为CPU的倍频通常

  • java设计模式-建造者模式

    基本概念是一种对象构建的设计模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体构建细节。Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到。UML结构图:上图是Strategy模式的结构图,让我们可以进行更方便的描述:Builder:为创建一个Product对象的各个部件指定抽象接口。ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,提供一个检索产品的接口Director:构造一个使用Builder接口的对象。Product:表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。为何使用是为了将构建复杂对象的过程和它的部件解耦。注意:是解耦过程和部件。 因为一个复杂的对象,不但有很多大量组成部分,如汽车,有很多部件:车轮、方向盘、发动机,还有各种小零件等等,部件很

  • 一名程序员的2017年末总结

    眼看着又一年结束,想想今年过的还真是快,上个画面还是去年年末各种处理故障的场景,一眨眼一年就过去了。既然过了一年,还是得留下些思考和展望,否则就有些太无趣了。 还是套用那个老的不能再老的梗吧,thegood,thebadandtheugly。 TheGood 今年职位从高级码农变成了看上去很忽悠人的”技术专家“,虽然按专家的头衔来说应该做一些更深入的研究工作,不过受限于身体状态一直不好,一认真的思考问题就会头昏脑涨,只好做了很多给团队打杂的工作,所以好的部分大多数不是我个人的贡献,而是团队的功劳。 今年最主要的成果,应该是跟团队一起在很多事情上兑现了之前一直念叨的“应该”。 应该从现在开始做重构,而不是“到时候” 从去年接手团队之后就一直在跟历史代码做斗争,在做了很久看似出工不出活的“代码review”、“重构”、“增加测试”、“删代码”之后终于有了回报:我们的代码质量可以让我们在其中正常工作,不再需要为了一个看似简单的功能而大动干戈的在“屎一样的一大坨代码”里纠结半天了。 我们试过很多办法提升代码质量,包括强制codereview、专门抽出时间重构、周会上的代码评审等等。每一种都或多

  • Unity Application Block 发布

    今天UnityApplicationBlock提前发布了,翻译一下下文纪念一下.顺便推荐看看我整理的Castle方面的资料开源框架:Castle,这有助于你理解和使用UnityApplicationBlock。原文:http://msdn2.microsoft.com/en-us/library/cc468366.aspx摘要UnityApplicationBlock(Unity)是一个轻量级的,可扩展的依赖注入容器.下载UnityApplicationBlock–April2008 UnityApplicationBlockDocumentationforVisualStudio2008 UnityApplicationBlockDocumentationforVisualStudio2005社区www.codeplex.com/unityLicenseEndUserLicensingAgreement(EULA)(译者注:使用的协议是MS-PL,也就是说代码是按照开源的协议发布的)概要UnityApplicationBlock(Unity)是一个轻量级的,可扩展的依赖注入容器.它有

  • 没有扩容机器,抗住了70多倍的流量增长

    从2012年开始,我们就吧腾讯公司内各个业务的404页面导流给宝贝回家,从2013年开始,我们更开放了404寻亲接入给第三方网站。这些导流给宝贝回家论坛带来了巨大的访问压力,于是我们又把宝贝回家的论坛服务器迁移到腾讯云上面来提供更稳定的服务。一晃块4年了。国庆上班,宝贝回家的志愿者开始说网站好像有点慢了,再后来说网站打不开了。登录服务器一看log,访问量增长的有点厉害啊,疑似CC攻击,打开了各种防护,流量还是居高不下。只好赶快把弹性伸缩打开,在机器扛不住的时候迅速扩容扛过去。(弹性伸缩是程序员和运维最好的朋友之一)接着又找运维和安全的兄弟帮忙分析log,分析不出所以然,但是看到头像的请求量明显暴涨了数百倍,占据了log的大头,于是对头像的请求进行了分流,把头像都转向到CDN透传来缓解压力。但是CDN无法缓存用户没有设置头像(404)的情况,于是又修改了服务器配置,支持“软404”,也就是说在找不到头像的时候用默认头像通过200的方式返回,避免404。这样折腾了一通以后,访问量终于降下来了,重新分析log,发现新增了数十倍的访问量,几乎全部来自于安卓手机。这时突然想起一件事。国庆前内部有

  • 最牛逼的 Java 框架,没有之一!

    今天有粉丝问我:SpringBoot中默认有135个自动配置类,难道SpringBoot启动时都要去解析它们?难道这就是SpringBoot启动慢的原因吗?在回答这个问题之前,我还是得先给这位粉丝点个赞,看得出来他是在认真思考的,只不过大家都知道SpringBoot是基于Spring来实现的,如果对Spring的底层不熟悉的话,在研究SpringBoot源码时将会更加痛苦。 对于上面这个问题,首先,SpringBoot本身启动并不慢,慢的原因可能还是项目中业务太多,太多的Bean需要创建,如果要优化启动速度,可以考虑将Bean定义为懒加载。另外对于SpringBoot中的自动配置要有足够的理解,比如:1、SpringBoot的自动配置到底有啥作用?2、SpringBoot的自动配置是如何实现的?源码是怎样的?3、SpringBoot的自动配置和SpringCloud有啥关系?4、SpringBoot的自动配置和Starter机制有啥关系?5、SpringBoot的自动配置类和Spring配置类有啥区别?6、SpringCloud的配置中心和SpringBoot有啥联系?实际上,对于粉丝

  • 创建发布一个cli工具

    1.初始化项目npminit-y复制2.创建目录bin,里面创建inde.js#!/usr/bin/envnode //上面的不是注释,非常重要,告诉命令使用node环境运行本文件 console.log("hellowcli...")复制3.package.json中配置bin命令... "main":"index.js", "bin":{ "kun":"./bin/index.js" }, ...复制4.执行命令,创建软链接,把bin目录的路径暴露出来npmlink复制成功后,在命令行尝试执行kun复制控制台打印hellowcli...安装辅助的依赖,commandernode.js命令行界面的完整解决方案npminstallcommander-S复制修改bin/index.js#!/usr/bin/envnode //上面的不是注释,非常重要,告诉命令使用node环境运行本文件 constprogram=require('commander'

  • 腾讯云私有网络查询云联网各地域出带宽上限api接口

    1.接口描述接口请求域名:vpc.tencentcloudapi.com。 本接口(DescribeCcnRegionBandwidthLimits)用于查询云联网各地域出带宽上限,该接口只返回已关联网络实例包含的地域 默认接口请求频率限制:100次/秒。 APIExplorer提供了在线调用、签名验证、SDK代码生成和快速检索接口等能力。您可查看每次调用的请求内容和返回结果以及自动生成SDK调用示例。 2.输入参数以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见公共请求参数。 参数名称 必选 类型 描述 Action 是 String 公共参数,本接口取值:DescribeCcnRegionBandwidthLimits。 Version 是 String 公共参数,本接口取值:2017-03-12。 Region 是 String 公共参数,详见产品支持的地域列表。 CcnId 是 String CCN实例ID。形如:ccn-f49l6u0z。 3.输出参数 参数名称 类型 描述 CcnRegionBa

  • Upload a file with $.ajax to AWS S3 with a pre-signed url

    转载自:https://gist.github.com/guumaster/9f18204aca2bd6c71a24 生成预签名的Demo文档:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/PresignedUrlUploadObjectJavaSDK.html 前端写法: 生成签名:(.js) 1vars3=newAWS.S3({ 2accessKeyId:'<YOUR_ACCESS_KEY>', 3secretAccessKey:'<YOUR_SECRET_ACCESS_KEY>' 4}); 5 6varuploadPreSignedUrl=s3.getSignedUrl('putObject',{ 7Bucket:'<THE_BUCKET_NAME>', 8Key:'<THE_UPLOADED_FILENAME>', 9ACL:'authenticated-read', 10//ThismustmatchwithyourajaxcontentTypeparameter

  • 解决url中&amp;times会被转成&#215;的问题

    解决url中&times会被转成×的问题   参考原文:hutaoo的博客《×被转义为X的问题》   一、发生错误的情况: 在URL中参数若有&times则会被转成x,例如: $url="http://www.test.com/index.php?id=1&timestamp=1584947618&age=10"; echo$url;复制 输出结果为:http://www.test.com/index.php?id=1×tamp=1584947618&age=10可以看到参数&timestamp变成了xtamp。复制 二、解决办法:方法 方法1、既然是&符号和times结合会被转义,那就不写在一起,将参数放在第一位。 $url="http://www.test.com/index.php?timestamp=1584947618&id=1&age=10"; echo$url;复制   方法2、把【&】符号转义成html实体,【&】的实体是【&amp

  • 将博客搬至CSDN

    如题。

  • Jenkins 搭建

    持续集成(CIcontinuousintegration)可以做什么? 自动构建。定时触发,或由某个事件触发。比如可以做dailybuild,或每次代码提交时触发。这样可以最早发现代码编译和依赖问题。 自动测试。触发自动测试,并生成结果报告。 生成版本。可以将构建成功的代码打包并生成版本,减化每次出版本时的工作量。 软件部署。提取某个版本部署。 安装JDK sudotarxfjdk-8u111-linux-x64.tar.gz-C/opt/ 复制 添加环境变量 $sudovim/etc/profile.d/jdk_env.sh exportJAVA_HOME=/opt/jdk1.8.0_111 exportPATH=$JAVA_HOME/bin:$PATH exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 复制 安装gradle 下载gradle-3.3-all.zip cd/opt sudounzip~/gradle-3.3-all.zip 复制 环境变量 $sudovim/et

相关推荐

推荐阅读