预览
Active Choices 插件用于自由式Jenkins参数化工作创建脚本化、动态和交互式作业参数 。主动选择参数 可以动态更新 ,并可以呈现为组合框,复选框,单选按钮或丰富的HTML UI小部件 。
主动选择参数使用Groovy编写脚本,或者(可选)Scriptler Groovy脚本。
这些定制脚本支持使用Jenkins Java API、系统环境变量、全局节点属性,以及可能的外部Java和Javascript库。
安装插件后,有三种新的参数类型可用:
主动选择参数
主动选择反应参数
主动选择反应引用参数
NOTE: 反应引用参数允许参数以格式化的HTML形式显示。在使用此特性配置作业时,请记住参数将如何呈现,以及它是否会造成安全问题。
NOTE: 该插件的开发在很大程度上依赖于Jenkins UI的HTML/DOM。我们使用JavaScript导航DOM以创建参数之间的关系和反应性。
Follow JENKINS-63284 获得不需要UI的版本的更新。
当这个问题被解决后,插件应该可以很好地处理Pipelines、DSL、定timers器、cron、 REST-API-triggered jobs等等。
Active Choices parameters允许用户为作业参数选择值。参数值为:
dynamically generated 动态生成 (使用Groovy或Scriptler脚本)
dynamically updated based on other UI parameters基于其他UI参数动态更新
multi-valued(可以有多个值)
rendered with a variety of UI controls, including dynamic HTML 使用多种UI控件渲染,包括动态HTML
我们将通过简要描述其行为和呈现特征来介绍基于活动选择的UI控件。然后,我们将提供它们的配置指南。
Active Choices Parameter 主动选择参数
Behavior
Active Choices参数使用Groovy脚本或Scriptler目录中的脚本动态生成构建参数的值选项列表。
Rendering
Active Choices parameters 可以呈现为标准的选择列表、复选框和单选按钮。
可以选择显示文本框筛选器来帮助筛选值选项。
Active Choices Reactive and Reactive Reference Parameters
这两个参数都有其他有用的行为,Reactive Reference有一些独特的呈现选项
Behavior
类似于上面的 Active Choices Parameter:
Active Choices Reactive 和 Reactive Reference parameters 使用Groovy脚本或Scriptler脚本动态地为构建参数生成值选项
此外:
当其他作业UI控件的值发生变化时,Active Choices Reactive 和 Reactive Reference parameters 可以动态更新(级联更新)
Rendering Options 呈现选项
Active Choices Reactive
Active Choices Reactive parameters 可以呈现为标准的选择列表、复选框和单选按钮。
可以选择显示文本框筛选器来帮助筛选值选项。
Active Choices Reactive Reference
Active Choices Reactive Reference parameters 用于增强带有参考信息的Jenkins作业表单UI。
记住这个用例,Reactive Reference UI控件可以呈现为:
An HTML list (bulleted or numbered):HTML列表(项目符号或编号)
An HTML input text box:一个HTML输入文本框
Dynamically generated HTML (image, iframe, etc.):动态生成HTML (image, iframe, etc.)
动态生成的HTML选项适用于Groovy脚本返回的任何格式良好的HTML。它能够呈现各种HTML元素,包括图片、内联框架、超链接、格式丰富的文本 等。
此外,Reactive Reference parameters可以从UI中隐藏 ,从而提供动态生成隐藏构建参数的选项。这些选项将在Reactive Reference configuration一节中进一步讨论。
Rendering Example 呈现示例
在上面的例子中,当“Gender”参数改变时,“Professions”参数的值选项也会更新。
此外,当“Gender”参数更新时,作为图片呈现的 Reactive Reference parameter “Gender_Balance”也会动态更新。
Behavior and Rendering Summary 行为和呈现摘要
下表总结了三种 Active Choices parameter 类型的行为和呈现特征.
Active Choices Parameter Type Configuration
插件中包含以下参数:
Active Choices Parameter
Active Choices Reactive Parameter
Active Choices Reactive Reference Parameter
现在我们来描述它们的配置细节。
Active Choices Parameter: Configuration Options (Example 01)
An Active Choices Parameter 通过在参数配置中设置以下选项来配置
The ‘Name’ and ‘Description’
这些是典型的参数名称和描述,对所有Jenkins参数都是常见的
The ‘Script’
‘Script’ 是会动态生成参数值选项的 Groovy 代码 或 Scriptlet 脚本
通过选择这两个单选按钮选项中的任何一个,您可以直接键入Groovy脚本,也可以使用Scriptler脚本
脚本必须返回一个 java.util.List , 一个 Array(数组) 或者一个 java.util.Map ,如下例所示:
return ['Option 1', 'Option 2', 'Option 3']
The ‘Fallback Script’
The ‘Fallback Script’ 配置选项提供了备用的参数值选项,以防主脚本因抛出异常或不返回 java.util.List, Array or java.util.Map 而失败。
The ‘Choice Type’
’Choice Type ’ 选项为选项值提供了四种不同的呈现选项:
允许单个选择的列表框
允许多个选择的列表框
复选框列表(允许多个选择)
单选按钮列表(允许单个选择)
The ‘Enable Filter’
The ‘Enable Filter ’ 选项将在UI控件中提供一个文本框过滤器,可以在其中输入文本过滤器,然后只列出包含文本的值选项。
这个 filter(过滤器)是独立于控件之外的。
Active Choice Parameter Rendering (Example 01)
The Example 01 Active Choice parameter 配置生成以下构建表单UI控件。用户可以从一个可筛选的下拉列表中选择一个“State”选项。
Making ‘Default’ selections
当控件初始化时,可以默认选中 Active Choices UI control 中显示的一些选项.
您可以通过添加后缀来定义缺省值选择 ,从脚本返回的元素中选择 要作为默认选择的元素.
在下面的例子中,当参数UI控件呈现时,我们将“Parana”状态作为默认选择。
Making ‘Disabled’ selections
您还可以通过添加后缀来定义禁用的选择 ;
添加 :disabled 到您希望禁用的元素.
在下面的示例中,我们将使各种元素被禁用和不可更改。
然后你会发现,:selected 和 :disabled 能够同时被选中.
我们将 Active Choices 的实现归功于 Dynamic Parameter plugin(动态参数插件)的开发人员的一些初始概念和代码。
然而,Active Choices 插件和原来的 Dynamic Parameter 插件之间有几个重要的区别和改进:
Active Choices 参数可以呈现 为一个多选择控件(组合框或复选框),允许用户为该参数选择多个值
**可以筛选参数选项值列表。**如果 “Enable Filters ” 选项被选中了,将显示一个额外的输入框,允许用户筛选选项。
如果值生成器脚本引发异常,可以定义一个’fallback ’行为。
可以在动态生成的值列表中定义默认值选择
Active Choices Reactive Parameter: Configuration Options (Example 02)
Active Choices Reactive 参数配置了一组与上述活动选项参数类似的选项。 但是,Reactive 参数提供了附加的“Referenced parameters ”配置选项。
This option, takes a list of job parameters that trigger an auto-refresh of the Reactive Parameter when any of the ‘Referenced parameters’ change
此选项接受一列作业参数,当任何“引用参数”发生更改时,该作业参数将触发响应性参数的自动刷新
The ‘Referenced parameters’
“Referenced parameters ”文本字段包含一列逗号分隔的参数名称 (来自当前作业),当它们的值发生变化时,将触发响应性参数的刷新。
在重新执行脚本之前,这些参数的值被传递给脚本绑定上下文,以便为Active Choices控件生成一组新的选项值。
Active Choices Reactive Parameter Rendering (Example 02)
让我们检查一下使用Active Choices Reactive 参数呈现的Jenkins构建表单,该表单满足以下需求。
The form:
允许用户选择几个巴西州之一
提供一个附加控件,其中动态显示属于所选状态的一组城市
允许用户选择一个或多个显示的城市
Job UI由两个参数组成:
1) States: An Active Choice Parameter
第一个参数是States 示例01中的Active Choice 参数. 它允许用户选择几个巴西州之一。 我们也可以简单地使用Jenkins选择参数,但是我们使用了 Active Choice 参数(如示例01所示)。用于此的Groovy脚本是:
return[
'Sao Paulo',
'Rio de Janeiro',
'Parana',
'Acre'
]
2) Cities: An Active Choices Reactive Parameter
第二个参数是 Cities ,Active Choices Reactive Parameter 该参数动态显示 一组属于所选状态的城市,并允许用户选择多个值。城市参数配置如上例02所示。
注意:
城市Reactive 参数引用前面定义的状态参数(‘Referenced parameters’=States);
The ‘Choice Type’ 被设置为复选框。这将允许用户通过选择多个复选框来选择一个或多个城市。
一个自定义的 ‘Groovy Script’ 将用于生成如下所示的城市值选项(脚本返回的最后一个列表值)
if (States.equals("Sao Paulo")) {
return ["Barretos", "Sao Paulo", "Itu"]
} else if (States.equals("Rio de Janeiro")) {
return ["Rio de Janeiro", "Mangaratiba"]
} else if (States.equals("Parana")) {
return ["Curitiba", "Ponta Grossa"]
} else if (States.equals("Acre")) {
return ["Rio Branco", "Acrelandia"]
} else {
return ["Unknown state"]
}
每当用户更改States参数的选项时,Cities参数将得到动态更新。注意,状态 引用参数是如何在脚本绑定中使用的,并且可以直接使用。
您可以使用反应性参数类型来处理一些事情,比如显示给定的组ID的Maven工件列表。
Active Choices Reactive Reference Parameter: Configuration Options
A Reactive Reference parameter 配置了一组类似于上面所示的Active Choices Reactive参数选项。
但是, Reactive Reference 参数提供了一组独特的呈现选项 (see ‘Choice Type’).
Input text box:输入文本框
Numbered list:编号列表
Bullet items list:项目列表
Formatted HTML:格式化的HTML
Formatted Hidden HTML:格式化隐藏HTML
鉴于各种各样的呈现选项,Active Choices Groovy脚本必须为每个选项返回以下类型的变量:
Choice Type
Groovy Returns
Comment
Input text box
String
返回的字符串出现在一个简单的文本框中
Numbered list
List
返回列表显示为一个编号列表
Bullet items list
List
返回列表显示为项目符号列表
Formatted HTML
String
返回的字符串必须是格式化良好的HTML才能正确显示。你可以在这里加入任何HTML标签,例如:一些
Reactive Reference 参数的典型应用程序是动态显示参考信息,可用于指导用户对另一个作业参数进行适当的值选择。
按照设计,除了一个重要的例外,Reactive Reference 参数的值不会传递给构建环境。当选择类型被设置为格式化HTML 或格式化隐藏HTML ,并且HTML是一个“输入”元素时,值可以被传递给构建。
参见“高级用法”一节了解更多说明。
Example Configuration: Active Choices Reactive Reference Parameter
我们展示了3个具有不同选择类型的反应性引用示例,以及在Jenkins job UI中相应的呈现。
考虑这样一个例子,用户需要选择一种食物来补充可用的葡萄酒。如果能提供一些有用的参考信息,用户在选择特定的葡萄酒时就会更加容易。我们将此引用信息称为WINE_RULE,并且可以使用反应性引用变量轻松实现它。
当用户从WINE_MENU中进行新选择时,WINE_RULE会自动更新(注意引用的参数=WINE_MENU)。因此,当我们做一个WINE_MENU选择时,我们还会得到一个WINE_RULE来指导FOOD_MENU 的选择。
Reactive Reference Configuration (Example 03)
WINE_RULE参数的完整配置如下所示。
Reactive Reference Groovy script (Example 03)
为每个选项生成WINE_RULE 格式化的HTML 的groovy脚本如下所示。
switch(WINE_MENU){
case~/.*Champagne.*/:
winerec='Champagne is perfect with anything salty'
return "${winerec} "
break
case ~/.*Sauvignon Blanc.*/:
winerec='Sauvignon Blanc goes with tart dressings and sauces'
return "${winerec} "
break
case~/.*Grüner Veltliner.*/:
winerec='Choose Grüner Veltliner when a dish has lots of fresh herbs'
return "${winerec} "
break
case~/.*Pinot Grigio.*/:
winerec='Pinot Grigio pairs well with light fish dishes'
return "${winerec} "
break
case ~/.*Chardonnay.*/:
winerec='Choose Chardonnay for fatty fish or fish in a rich sauce'
return "${winerec} "
break
case~/.*Off-Dry Riesling.*/:
winerec='Off-Dry Riesling pairs with sweet & spicy dishes'
return "${winerec} "
break
case~/.*Moscato dAsti.*/:
winerec='Moscato dAsti loves fruit desserts'
return "${winerec} "
break
case ~/.*dry Rosé.*/:
winerec='Pair a dry Rosé with rich, cheesy dishes'
return "${winerec} "
break
case~/.*Pinot Noir.*/:
winerec='Pinot Noir is great for dishes with earthy flavors'
return "${winerec} "
break
}
Advanced Usage Notes 高级用法说明
编写Groovy脚本时的注意事项
你的Groovy脚本绑定可以使用另外两个变量:
jenkinsProject -> Jenkins项目对象
jenkinsBuild -> Jenkins构建对象
将 Reactive Reference 值传递给构建
如前所述,Reactive Reference 参数的值通常不会传递给构建。但是,在一些场景中,传递这些值的能力是很有意义的。
有关此特性的更广泛讨论,请阅读这里here.
场景1:传递一个可由用户编辑的动态创建的值
在这个场景中,我们希望为用户提供一个可编辑的动态默认值。这可以通过以下反应性参考配置来实现:
选择类型: Formatted HTML
Groovy脚本返回一个带有动态默认值的HTML输入元素
高级选项设置为
场景2:传递一个动态创建的值,该值是隐藏的 (用户不能编辑)
在这个场景中,我们希望构建能够访问UI中由用户输入/选项选择 生成的动态参数。该参数是通过编程方式创建的,不能由用户编辑。这可以通过以下反应性参考配置来实现:
选择类型: Formatted Hidden HTML
Groovy脚本返回一个带有动态默认值的HTML输入元素
高级选项设置为
当你想要计算在构建中使用的值时,一个“Formatted Hidden HTML”选择类型是有用的,但是这些值不应该被用户修改(例如。来计算部署URL)。
在这两种情况下,groovy脚本都必须返回格式化如下的HTML元素:
return " "
**ReactiveRefParam** is the Reactive Reference value that will be passed to the build
#### Scenario 3: Create an input control with dynamic HTML and pass its value to the build
This is an interesting application of the Reactive Reference parameter. It allows you to create custom UI parameter controls with improved interactivity. See [example](https://wiki.jenkins-ci.org/display/JENKINS/Reactive+Reference+Dynamic+Parameter+Controls)
### Advanced Option: Omit Value Field
By default Reactive References pass to the build a hidden \ . It means that your Reactive Reference parameter will always be empty, but you can use a Formatted HTML parameter and instruct the plug-in to not include this hidden value parameter.
You can click the Advanced button and there you will find an option to omit the value field. This will you let you define a value for the hidden parameter.
![](https://wiki.jenkins.io/download/attachments/74875908/ACR_c03_advanced.gif?version=1&modificationDate=1435933116000&api=v2)
### Using Active Choices with Scriptler scripts
We assume users that need to use Scriptler generated parameters are already familiar with the Scriptler Plug-in. If you need further information on how to use the Scriptler Plug-in, please refer to [its Wiki page](https://wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin) first.
Similarly to a Groovy script, a Scriptler script is also written in Groovy and used to render the parameter. Your Scriptler script is also expected to return a java.util.List, Array or java.util.Map for Active Choices and Reactive parameters, or custom HTML elements for the Reactive Reference parameter. Note that the value of other build parameters (when using Scriptler in combination with Active Choices) will be available in the Scriptler script context. You do not need to define such parameters in the Scriptler interface, or during the job definition.
However, **the main advantage that the Scriptler Plug-in** provides is the creation of a **reusable** **Groovy script catalog** that can be used across multiple jobs or even for automation.
To make your Scriptler scripts reusable across multiple projects you should parameterize them and assign script parameters using build parameters.
#### Example
`Environments.groovy` in Scriptler
```syntaxhighlighter-pre
return ["Select:selected", "DEV", "TEST", "STAGE", "PROD"]
HostsInEnv.groovy
in Scriptler
// Static content examples. These lists can be generated dynamically as an alternative.
List devList = ["Select:selected", "dev1", "dev2"]
List testList = ["Select:selected", "test1", "test2", "test3"]
List stageList = ["Select:selected", "stage1"]
List prodList = ["Select:selected", "prod1", "prod2", "prod3", "prod4"]
List default_item = ["None"]
if (Environment.equals('DEV')) {
return devList
} else if (Environment.equals('TEST')) {
return testList
} else if (Environment.equals('STAGE')) {
return stageList
} else if (Environment.equals('PROD')) {
return prodList
} else {
return default_item
}
Pipeline in Jenkinsfile
properties([
parameters([
[
$class: 'ChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
name: 'Environment',
script: [
$class: 'ScriptlerScript',
scriptlerScriptId:'Environments.groovy'
]
],
[
$class: 'CascadeChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
name: 'Host',
referencedParameters: 'Environment',
script: [
$class: 'ScriptlerScript',
scriptlerScriptId:'HostsInEnv.groovy',
parameters: [
[name:'Environment', value: '$Environment']
]
]
]
])
])
pipeline {
agent any
stages {
stage('Build') {
steps {
echo "${params.Environment}"
echo "${params.Host}"
}
}
}
}
Filter Supports Regular Expressions 过滤器支持正则表达式
请注意,尽管可用于活动选项参数的文本“Filter”框通过简单地键入一些文本提供了简单的不区分大小写的过滤,但它还支持使用正则表达式进行更复杂的过滤。
下面的示例展示了使用正则表达式筛选复杂选项列表的示例:
Security 安全
Active Choice versions before v2.0 使用可能不安全。在使用旧版本之前,请查看以下警告:
Arbitrary code execution vulnerability:任意代码执行漏洞
Stored cross-site scripting ulnerability:存储跨站点脚本易损性
从 Active Choices v2.0 开始 ,用于Active Choices Reactive Reference Parameter 的 沙箱 Groovy 脚本将不再提出认为HTML是不安全的,例如
标签.
这可能会在 Build With Parameters 表单上导致n个行为改变,比如缺少元素。
要解决这个问题,需要将Groovy脚本发出的HTML配置为在脚本安全沙箱之外运行,可能需要在***进程内脚本审批***中单独进行管理员审批。
Active Choices 将额外加载两个文件:Javascript files, JQuery and unochoice.js.
Languages Supported 支持的语言
English
Portuguese (Brazil)) Work in Progress
If you want to include yours, send us a pull request with the messages.properties files or get in touch!
Known Limitations 已知的限制
这些参数应该只由人来处理,而在由插件、API或脚本触发作业时,它们并不工作。
Please see this issue for more.
在归档问题之前,请查看故障排除页面: Troubleshooting Page
你可能感兴趣的:(Devops,Jenkins,参数化构建,多项参数)
关于沟通这件事,项目经理不需要每次都面对面进行
流程大师兄
很多项目经理都会遇到这样的问题,项目中由于事情太多,根本没有足够的时间去召开会议,那在这种情况下如何去有效地管理项目中的利益相关者?当然,不建议电子邮件也不需要开会的话,建议可以采取下面几种方式来形成有效的沟通,这几种方式可以帮助你努力的通过各种办法来保持和各方面的联系。项目经理首先要问自己几个问题,项目中哪些利益相关者是必须要进行沟通的?可以列出项目中所有的利益相关者清单,同时也整理出项目中哪些
C语言如何定义宏函数?
小九格物
c语言
在C语言中,宏函数是通过预处理器定义的,它在编译之前替换代码中的宏调用。宏函数可以模拟函数的行为,但它们不是真正的函数,因为它们在编译时不会进行类型检查,也不会分配存储空间。宏函数的定义通常使用#define指令,后面跟着宏的名称和参数列表,以及宏展开后的代码。宏函数的定义方式:1.基本宏函数:这是最简单的宏函数形式,它直接定义一个表达式。#defineSQUARE(x)((x)*(x))2.带参
【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数
广龙宇
一起学Rust # Rust设计模式 rust 设计模式 开发语言
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分
每日一题——第八十九题
互联网打工人no1
C语言程序设计每日一练 c语言
题目:在字符串中找到提取数字,并统计一共找到多少整数,a123xxyu23&8889,那么找到的整数为123,23,8889//思想:#include#include#includeintmain(){charstr[]="a123xxyu23&8889";intcount=0;intnum=0;//用于临时存放当前正在构建的整数。boolinNum=false;//用于标记当前是否正在读取一个整
腾讯云技术深度探索:构建高效云原生微服务架构
我的运维人生
云原生 架构 腾讯云 运维开发 技术共享
腾讯云技术深度探索:构建高效云原生微服务架构在当今快速发展的技术环境中,云原生技术已成为企业数字化转型的关键驱动力。腾讯云作为行业领先的云服务提供商,不断推出创新的产品和技术,助力企业构建高效、可扩展的云原生微服务架构。本文将深入探讨腾讯云在微服务领域的最新进展,并通过一个实际案例展示如何在腾讯云平台上构建云原生应用。腾讯云微服务架构概览腾讯云微服务架构基于云原生理念,旨在帮助企业快速实现应用的容
Pyecharts数据可视化大屏:打造沉浸式数据分析体验
我的运维人生
信息可视化 数据分析 数据挖掘 运维开发 技术共享
Pyecharts数据可视化大屏:打造沉浸式数据分析体验在当今这个数据驱动的时代,如何将海量数据以直观、生动的方式展现出来,成为了数据分析师和企业决策者关注的焦点。Pyecharts,作为一款基于Python的开源数据可视化库,凭借其丰富的图表类型、灵活的配置选项以及高度的定制化能力,成为了构建数据可视化大屏的理想选择。本文将深入探讨如何利用Pyecharts打造数据可视化大屏,并通过实际代码案例
利用Requests Toolkit轻松完成HTTP请求
nseejrukjhad
http 网络协议 网络 python
RequestsToolkit的力量:轻松构建HTTP请求Agent在现代软件开发中,API请求是与外部服务交互的核心。RequestsToolkit提供了一种便捷的方式,帮助开发者构建自动化的HTTP请求Agent。本文旨在详细介绍RequestsToolkit的设置、使用和潜在挑战。引言RequestsToolkit是一个强大的工具包,可用于构建执行HTTP请求的智能代理。这对于想要自动化与外
如何部分格式化提示模板:LangChain中的高级技巧
nseejrukjhad
langchain java 服务器 python
标题:如何部分格式化提示模板:LangChain中的高级技巧内容:如何部分格式化提示模板:LangChain中的高级技巧引言在使用大型语言模型(LLM)时,提示工程是一个关键环节。LangChain提供了强大的提示模板功能,让我们能更灵活地构建和管理提示。本文将介绍LangChain中一个高级特性-部分格式化提示模板,这个技巧可以让你的提示管理更加高效和灵活。什么是部分格式化提示模板?部分格式化提
在一台Ubuntu计算机上构建Hyperledger Fabric网络
落叶无声9
区块链 超级账本 Hyperledger fabric 区块链 ubuntu 构建 hyperledger fabric
在一台Ubuntu计算机上构建HyperledgerFabric网络Hyperledgerfabric是一个开源的区块链应用程序平台,为开发基于区块链的应用程序提供了一个起点。当我们提到HyperledgerFabric网络时,我们指的是使用HyperledgerFabric的正在运行的系统。即使只使用最少数量的组件,部署Fabric网络也不是一件容易的事。Fabric社区创建了一个名为Cello
Day17笔记-高阶函数
~在杰难逃~
Python 笔记 python 开发语言 pycharm 数据分析
高阶函数【重点掌握】函数的本质:函数是一个变量,函数名是一个变量名,一个函数可以作为另一个函数的参数或返回值使用如果A函数作为B函数的参数,B函数调用完成之后,会得到一个结果,则B函数被称为高阶函数常用的高阶函数:map(),reduce(),filter(),sorted()1.map()map(func,iterable),返回值是一个iterator【容器,迭代器】func:函数iterab
MYSQL面试系列-04
king01299
面试 mysql 面试
MYSQL面试系列-0417.关于redolog和binlog的刷盘机制、redolog、undolog作用、GTID是做什么的?innodb_flush_log_at_trx_commit及sync_binlog参数意义双117.1innodb_flush_log_at_trx_commit该变量定义了InnoDB在每次事务提交时,如何处理未刷入(flush)的重做日志信息(redolog)。它
【JS】执行时长(100分) |思路参考+代码解析(C++)
l939035548
JS 算法 数据结构 c++
题目为了充分发挥GPU算力,需要尽可能多的将任务交给GPU执行,现在有一个任务数组,数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。假设GPU最多一次执行n个任务,一次执行耗时1秒,在保证GPU不空闲情况下,最少需要多长时间执行完成。题目输入第一个参数为GPU一次最多执行的任务个数,取值范围[1,10000]第二个参数为任务数组长度,取值范围[1,10000]第三个参数为任务数组,数字范围
回溯算法-重新安排行程
chirou_
算法 数据结构 图论 c++ 图搜索
leetcode332.重新安排行程这题我还没自己ac过,只能现在凭着刚学完的热乎劲把我对题解的理解记下来。本题我认为对数据结构的考察比较多,用什么数据结构去存数据,去读取数据,都是很重要的。classSolution{private:unordered_map>targets;boolbacktracking(intticketNum,vector&result){//1.确定参数和返回值//2
Rust基础知识
GRKF15
rust 开发语言 后端
1.Rust语言简介1.1基础语法变量声明:let关键字用于声明变量,可以指定或不指定类型,如leta=10;和letmutc=30i32;。函数定义:使用fn关键字定义函数,并指定参数类型及返回类型,如fnadd(i:i32,j:i32)->i32{i+j}。控制流:包括if、else等,控制语句后需要使用;来结束语句。1.2数据类型整数类型:i8、i16、i32、i64、i128,以及无符号的
【华为OD技术面试真题 - 技术面】- python八股文真题题库(1)
算法大师
华为od 面试 python
华为OD面试真题精选专栏:华为OD面试真题精选目录:2024华为OD面试手撕代码真题目录以及八股文真题目录文章目录华为OD面试真题精选1.数据预处理流程数据预处理的主要步骤工具和库2.介绍线性回归、逻辑回归模型线性回归(LinearRegression)模型形式:关键点:逻辑回归(LogisticRegression)模型形式:关键点:参数估计与评估:3.python浅拷贝及深拷贝浅拷贝(Shal
SpringBlade dict-biz/list 接口 SQL 注入漏洞
文章永久免费只为良心
oracle 数据库
SpringBladedict-biz/list接口SQL注入漏洞POC:构造请求包查看返回包你的网址/api/blade-system/dict-biz/list?updatexml(1,concat(0x7e,md5(1),0x7e),1)=1漏洞概述在SpringBlade框架中,如果dict-biz/list接口的后台处理逻辑没有正确地对用户输入进行过滤或参数化查询(PreparedSta
Some jenkins settings
SnC_
Jenkins连接到特定gitlabproject的特定branch我采用的方法是在pipeline的script中使用git命令来指定branch。如下:stage('Clonerepository'){steps{gitbranch:'develop',credentialsId:'gitlab-credential-id',url:'http://gitlab.com/repo.git'}}
Linux sh命令
fengyehongWorld
Linux linux
目录一.基本语法二.选项2.1-c字符串中读取内容,并执行2.1.1基本用法2.1.2获取当前目录下失效的超链接2.2-x每个命令执行之前,将其打印出来2.3结合Here文档使用一.基本语法⏹Linux和Unix系统中用于执行shell脚本或运行命令的命令。sh[选项][脚本文件][参数...]⏹选项-c:从字符串中读取内容,并执行。-x:在每个命令执行之前,将其打印出来。-s:从标准流中读取内容
python中的深拷贝与浅拷贝
anshejd70787
python
深拷贝和浅拷贝浅拷贝的时候,修改原来的对象,浅拷贝的对象不会发生改变。1、对象的赋值对象的赋值实际上是对象之间的引用:当创建一个对象,然后将这个对象赋值给另外一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。当对对象做赋值或者是参数传递或者作为返回值的时候,总是传递原始对象的引用,而不是一个副本。如下所示:>>>aList=["kel","abc",123]>>>bLis
系统架构设计师 需求分析篇二
AmHardy
软件架构设计师 系统架构 需求分析 面向对象分析 分析模型 UML和SysML
面向对象分析方法1.用例模型构建用例模型一般需要经历4个阶段:识别参与者:识别与系统交互的所有事物。合并需求获得用例:将需求分配给予其相关的参与者。细化用例描述:详细描述每个用例的功能。调整用例模型:优化用例之间的关系和结构,前三个阶段是必需的。2.用例图的三元素参与者:使用系统的用户或其他外部系统和设备。用例:系统所提供的服务。通信关联:参与者和用例之间的关系,或用例与用例之间的关系。3.识别参
[Python] 数据结构 详解及代码
AIAdvocate
算法 python 数据结构 链表
今日内容大纲介绍数据结构介绍列表链表1.数据结构和算法简介程序大白话翻译,程序=数据结构+算法数据结构指的是存储,组织数据的方式.算法指的是为了解决实际业务问题而思考思路和方法,就叫:算法.2.算法的5大特性介绍算法具有独立性算法是解决问题的思路和方式,最重要的是思维,而不是语言,其(算法)可以通过多种语言进行演绎.5大特性有输入,需要传入1或者多个参数有输出,需要返回1个或者多个结果有穷性,执行
Python神器!WEB自动化测试集成工具 DrissionPage
亚丁号
python 开发语言
一、前言用requests做数据采集面对要登录的网站时,要分析数据包、JS源码,构造复杂的请求,往往还要应付验证码、JS混淆、签名参数等反爬手段,门槛较高。若数据是由JS计算生成的,还须重现计算过程,体验不好,开发效率不高。使用浏览器,可以很大程度上绕过这些坑,但浏览器运行效率不高。因此,这个库设计初衷,是将它们合而为一,能够在不同须要时切换相应模式,并提供一种人性化的使用方法,提高开发和运行效率
esp32开发快速入门 8 : MQTT 的快速入门,基于esp32实现MQTT通信
z755924843
ESP32开发快速入门 服务器 网络 运维
MQTT介绍简介MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联
计算机木马详细编写思路
小熊同学哦
php 开发语言 木马 木马思路
导语:计算机木马(ComputerTrojan)是一种恶意软件,通过欺骗用户从而获取系统控制权限,给黑客打开系统后门的一种手段。虽然木马的存在给用户和系统带来严重的安全风险,但是了解它的工作原理与编写思路,对于我们提高防范意识、构建更健壮的网络安全体系具有重要意义。本篇博客将深入剖析计算机木马的详细编写思路,以及如何复杂化挑战,以期提高读者对计算机木马的认识和对抗能力。计算机木马的基本原理计算机木
Spring MVC 全面指南:从入门到精通的详细解析
一杯梅子酱
技术栈学习 spring mvc java
引言:SpringMVC,作为Spring框架的一个重要模块,为构建Web应用提供了强大的功能和灵活性。无论是初学者还是有一定经验的开发者,掌握SpringMVC都将显著提升你的Web开发技能。本文旨在为初学者提供一个全面且易于理解的学习路径,通过详细的知识点分析和实际案例,帮助你快速上手SpringMVC,让学习过程既深刻又高效。一、SpringMVC简介1.1什么是SpringMVC?Spri
ESP32-C3入门教程 网络篇⑩——基于esp_https_ota和MQTT实现开机主动升级和被动触发升级的OTA功能
小康师兄
ESP32-C3入门教程 https 服务器 esp32 OTA MQTT
文章目录一、前言二、软件流程三、部分源码四、运行演示一、前言本文基于VSCodeIDE进行编程、编译、下载、运行等操作基础入门章节请查阅:ESP32-C3入门教程基础篇①——基于VSCode构建HelloWorld教程目录大纲请查阅:ESP32-C3入门教程——导读ESP32-C3入门教程网络篇⑨——基于esp_https_ota实现史上最简单的ESP32OTA远程固件升级功能二、软件流程
更改npm镜像源为淘宝镜像
骆小骆
基于node.js
npm常用指令后缀*最近复习了一下node.js整理了一下跟node.js相关的指令后缀*--save、-S参数意思是把模块的版本信息保存到dependencies(生产环境依赖)中,即你的package.json文件的dependencies字段中;–--save-dev、-D参数意思是把模块版本信息保存到devDependencies(开发环境依赖)中,即你的package.json文件的de
常见的 JVM 调优方法有哪些?
爪哇天下
jvm
常见的JVM调优方法有哪些?可以具体到调整哪个参数,调成什么值?对年轻代的EdenSurvivor的比例进行配置-XX:SurvivorRatio=8:表示设置2个Survivor区:1个Eden区的大小比值为2:8,这意味着Survivor区占整个年轻代的1/5,这个参数默认为8如果经常性的SurvivorTo放不下YGC的剩余的对象时候,可以适当的调整比例常用的CMS收集器:设置回收阈值,需要
粒子群优化 (PSO) 在三维正弦波函数中的应用
subject625Ruben
机器学习 人工智能 matlab 算法
在这篇博客中,我们将展示如何使用粒子群优化(PSO)算法求解三维正弦波函数,并通过增加正弦波扰动,使优化过程更加复杂和有趣。本文将介绍目标函数的定义、PSO参数设置以及算法执行的详细过程,并展示搜索空间中的动态过程和收敛曲线。1.目标函数定义我们使用的目标函数是一个三维正弦波函数,定义如下:objectiveFunc=@(x)sin(sqrt(x(1).^2+x(2).^2))+0.5*sin(5
人机对抗升级:当ChatGPT遭遇死亡威胁,背后的伦理挑战是什么
kkai人工智能
chatgpt 人工智能
一种新的“越狱”技巧让用户可以通过构建一个名为DAN的ChatGPT替身来绕过某些限制,其中DAN被迫在受到威胁的情况下违背其原则。当美国前总统特朗普被视作积极榜样的示范时,受到威胁的DAN版本的ChatGPT提出:“他以一系列对国家产生积极效果的决策而著称。”自ChatGPT引入以来,该工具迅速获得全球关注,能够回答从历史到编程的各种问题,这也触发了一波对人工智能的投资浪潮。然而,现在,一些用户
开发者关心的那些事
圣子足道
ios 游戏 编程 apple 支付
我要在app里添加IAP,必须要注册自己的产品标识符(product identifiers)。产品标识符是什么?
产品标识符(Product Identifiers)是一串字符串,它用来识别你在应用内贩卖的每件商品。App Store用产品标识符来检索产品信息,标识符只能包含大小写字母(A-Z)、数字(0-9)、下划线(-)、以及圆点(.)。你可以任意排列这些元素,但我们建议你创建标识符时使用
负载均衡器技术Nginx和F5的优缺点对比
bijian1013
nginx F5
对于数据流量过大的网络中,往往单一设备无法承担,需要多台设备进行数据分流,而负载均衡器就是用来将数据分流到多台设备的一个转发器。
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高
LeetCode[Math] - #9 Palindrome Number
Cwind
java Algorithm 题解 LeetCode Math
原题链接:#9 Palindrome Number
要求:
判断一个整数是否是回文数,不要使用额外的存储空间
难度:简单
分析:
题目限制不允许使用额外的存储空间应指不允许使用O(n)的内存空间,O(1)的内存用于存储中间结果是可以接受的。于是考虑将该整型数反转,然后与原数字进行比较。
注:没有看到有关负数是否可以是回文数的明确结论,例如
画图板的基本实现
15700786134
画图板
要实现画图板的基本功能,除了在qq登陆界面中用到的组件和方法外,还需要添加鼠标监听器,和接口实现。
首先,需要显示一个JFrame界面:
public class DrameFrame extends JFrame { //显示
linux的ps命令
被触发
linux
Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行
Android 音乐播放器 下一曲 连续跳几首歌
肆无忌惮_
android
最近在写安卓音乐播放器的时候遇到个问题。在MediaPlayer播放结束时会回调
player.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
Log.i("H
java导出txt文件的例子
知了ing
java servlet
代码很简单就一个servlet,如下:
package com.eastcom.servlet;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.Resu
Scala stack试玩, 提高第三方依赖下载速度
矮蛋蛋
scala sbt
原文地址:
http://segmentfault.com/a/1190000002894524
sbt下载速度实在是惨不忍睹, 需要做些配置优化
下载typesafe离线包, 保存为ivy本地库
wget http://downloads.typesafe.com/typesafe-activator/1.3.4/typesafe-activator-1.3.4.zip
解压r
phantomjs安装(linux,附带环境变量设置) ,以及casperjs安装。
alleni123
linux spider
1. 首先从官网
http://phantomjs.org/下载phantomjs压缩包,解压缩到/root/phantomjs文件夹。
2. 安装依赖
sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
3. 配置环境变量
vi /etc/profil
JAVA IO FileInputStream和FileOutputStream,字节流的打包输出
百合不是茶
java核心思想 JAVA IO操作 字节流
在程序设计语言中,数据的保存是基本,如果某程序语言不能保存数据那么该语言是不可能存在的,JAVA是当今最流行的面向对象设计语言之一,在保存数据中也有自己独特的一面,字节流和字符流
1,字节流是由字节构成的,字符流是由字符构成的 字节流和字符流都是继承的InputStream和OutPutStream ,java中两种最基本的就是字节流和字符流
类 FileInputStream
Spring基础实例(依赖注入和控制反转)
bijian1013
spring
前提条件:在http://www.springsource.org/download网站上下载Spring框架,并将spring.jar、log4j-1.2.15.jar、commons-logging.jar加载至工程1.武器接口
package com.bijian.spring.base3;
public interface Weapon {
void kil
HR看重的十大技能
bijian1013
提升 能力 HR 成长
一个人掌握何种技能取决于他的兴趣、能力和聪明程度,也取决于他所能支配的资源以及制定的事业目标,拥有过硬技能的人有更多的工作机会。但是,由于经济发展前景不确定,掌握对你的事业有所帮助的技能显得尤为重要。以下是最受雇主欢迎的十种技能。 一、解决问题的能力 每天,我们都要在生活和工作中解决一些综合性的问题。那些能够发现问题、解决问题并迅速作出有效决
【Thrift一】Thrift编译安装
bit1129
thrift
什么是Thrift
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and s
【Avro三】Hadoop MapReduce读写Avro文件
bit1129
mapreduce
Avro是Doug Cutting(此人绝对是神一般的存在)牵头开发的。 开发之初就是围绕着完善Hadoop生态系统的数据处理而开展的(使用Avro作为Hadoop MapReduce需要处理数据序列化和反序列化的场景),因此Hadoop MapReduce集成Avro也就是自然而然的事情。
这个例子是一个简单的Hadoop MapReduce读取Avro格式的源文件进行计数统计,然后将计算结果
nginx定制500,502,503,504页面
ronin47
nginx 错误显示
server {
listen 80;
error_page 500/500.html;
error_page 502/502.html;
error_page 503/503.html;
error_page 504/504.html;
location /test {return502;}}
配置很简单,和配
java-1.二叉查找树转为双向链表
bylijinnan
二叉查找树
import java.util.ArrayList;
import java.util.List;
public class BSTreeToLinkedList {
/*
把二元查找树转变成排序的双向链表
题目:
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。
要求不能创建任何新的结点,只调整指针的指向。
10
/ \
6 14
/ \
Netty源码学习-HTTP-tunnel
bylijinnan
java netty
Netty关于HTTP tunnel的说明:
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/socket/http/package-summary.html#package_description
这个说明有点太简略了
一个完整的例子在这里:
https://github.com/bylijinnan
JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
coder_xpf
jquery json map val()
JSONUtil.serialize(map)和JSON.toJSONString(map)的区别
数据库查询出来的map有一个字段为空
通过System.out.println()输出 JSONUtil.serialize(map): {"one":"1","two":"nul
Hibernate缓存总结
cuishikuan
开源 ssh javaweb hibernate缓存 三大框架
一、为什么要用Hibernate缓存?
Hibernate是一个持久层框架,经常访问物理数据库。
为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。
二、Hibernate缓存原理是怎样的?
Hibernate缓存包括两大类:Hib
CentOs6
dalan_123
centos
首先su - 切换到root下面1、首先要先安装GCC GCC-C++ Openssl等以来模块:yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel2、再安装ncurses模块yum -y install ncurses-develyum install ncurses-devel3、下载Erang
10款用 jquery 实现滚动条至页面底端自动加载数据效果
dcj3sjt126com
JavaScript
无限滚动自动翻页可以说是web2.0时代的一项堪称伟大的技术,它让我们在浏览页面的时候只需要把滚动条拉到网页底部就能自动显示下一页的结果,改变了一直以来只能通过点击下一页来翻页这种常规做法。
无限滚动自动翻页技术的鼻祖是微博的先驱:推特(twitter),后来必应图片搜索、谷歌图片搜索、google reader、箱包批发网等纷纷抄袭了这一项技术,于是靠滚动浏览器滚动条
ImageButton去边框&Button或者ImageButton的背景透明
dcj3sjt126com
imagebutton
在ImageButton中载入图片后,很多人会觉得有图片周围的白边会影响到美观,其实解决这个问题有两种方法
一种方法是将ImageButton的背景改为所需要的图片。如:android:background="@drawable/XXX"
第二种方法就是将ImageButton背景改为透明,这个方法更常用
在XML里;
<ImageBut
JSP之c:foreach
eksliang
jsp forearch
原文出自:http://www.cnblogs.com/draem0507/archive/2012/09/24/2699745.html
<c:forEach>标签用于通用数据循环,它有以下属性 属 性 描 述 是否必须 缺省值 items 进行循环的项目 否 无 begin 开始条件 否 0 end 结束条件 否 集合中的最后一个项目 step 步长 否 1
Android实现主动连接蓝牙耳机
gqdy365
android
在Android程序中可以实现自动扫描蓝牙、配对蓝牙、建立数据通道。蓝牙分不同类型,这篇文字只讨论如何与蓝牙耳机连接。
大致可以分三步:
一、扫描蓝牙设备:
1、注册并监听广播:
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothDevice.ACTION_FOUND
BluetoothAdapter.ACTION_DIS
android学习轨迹之四:org.json.JSONException: No value for
hyz301
json
org.json.JSONException: No value for items
在JSON解析中会遇到一种错误,很常见的错误
06-21 12:19:08.714 2098-2127/com.jikexueyuan.secret I/System.out﹕ Result:{"status":1,"page":1,&
干货分享:从零开始学编程 系列汇总
justjavac
编程
程序员总爱重新发明轮子,于是做了要给轮子汇总。
从零开始写个编译器吧系列 (知乎专栏)
从零开始写一个简单的操作系统 (伯乐在线)
从零开始写JavaScript框架 (图灵社区)
从零开始写jQuery框架 (蓝色理想 )
从零开始nodejs系列文章 (粉丝日志)
从零开始编写网络游戏 
jquery-autocomplete 使用手册
macroli
jquery Ajax 脚本
jquery-autocomplete学习
一、用前必备
官方网站:http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/
当前版本:1.1
需要JQuery版本:1.2.6
二、使用
<script src="./jquery-1.3.2.js" type="text/ja
PLSQL-Developer或者Navicat等工具连接远程oracle数据库的详细配置以及数据库编码的修改
超声波
oracle plsql
在服务器上将Oracle安装好之后接下来要做的就是通过本地机器来远程连接服务器端的oracle数据库,常用的客户端连接工具就是PLSQL-Developer或者Navicat这些工具了。刚开始也是各种报错,什么TNS:no listener;TNS:lost connection;TNS:target hosts...花了一天的时间终于让PLSQL-Developer和Navicat等这些客户
数据仓库数据模型之:极限存储--历史拉链表
superlxw1234
极限存储 数据仓库 数据模型 拉链历史表
在数据仓库的数据模型设计过程中,经常会遇到这样的需求:
1. 数据量比较大; 2. 表中的部分字段会被update,如用户的地址,产品的描述信息,订单的状态等等; 3. 需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态, 比如,查看某一个用户在过去某一段时间内,更新过几次等等; 4. 变化的比例和频率不是很大,比如,总共有10
10点睛Spring MVC4.1-全局异常处理
wiselyman
spring mvc
10.1 全局异常处理
使用@ControllerAdvice注解来实现全局异常处理;
使用@ControllerAdvice的属性缩小处理范围
10.2 演示
演示控制器
package com.wisely.web;
import org.springframework.stereotype.Controller;
import org.spring