高阶函数是将函数用作参数或返回值的函数,还可以把函数赋值给一个变量。
所有函数类型都有一个圆括号括起来的参数类型列表以及一个返回类型:(A, B) -> C 表示接受类型分别为 A 与 B 两个参数并返回一个 C 类型值的函数类型。 参数类型列表可以为空,如 () -> A,Unit 返回类型不可省略。
(Int) -> String
函数类型表示法可以选择性地包含函数的参数名:(x: Int, y: Int) -> Point。 这些名称可用于表明参数的含义。
(Button, ClickEvent) -> Unit
如需将函数类型指定为可空,请使用圆括号:((Int, Int) -> Int)?
fun a(funParam: (Int) -> String): String {
return funParam(1)
}
fun b(param: Int): String {
return param.toString()
}
调用
a(::b)
var d = ::b
b(1) // 调用函数
d(1) // 实际上会调用 d.invoke(1)
(::b)(1) // 用对象 :: b 后面加上括号来实现 b() 的等价操作, 实际上会调用 (::b).invoke(1)
b.invoke(1) // 报错
对象是不能加个括号来调用的,但是函数类型的对象可以。为什么?因为这其实是个假的调用,它是 Kotlin 的语法糖,实际上你对一个函数类型的对象加括号、加参数,它真正调用的是这个对象的 invoke() 函数
:: 创建一个函数引用或者一个类引用
fun isOdd(x: Int) = x % 2 != 0
我们可以很容易地直接调用它(isOdd(5)),但是我们也可以将其作为一个函数类型的值,例如将其传给另一个函数。为此,我们使用 :: 操作符:
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))
这里 ::isOdd 是函数类型 (Int) -> Boolean 的一个值。
如果我们需要使用类的成员函数或扩展函数,它需要是限定的,例如 String::toCharArray。
val args: Array<String> = arrayOf("1", "2")
args.filter(String::isNotEmpty)
class PdfPrinter {
fun println(any: Any) {
kotlin.io.println(any) //重名了可以用包名调用
}
}
val pdfPrinter = PdfPrinter()
args.forEach(pdfPrinter::println)
val c = MyClass::class
该引用是 KClass 类型的值
请注意,Kotlin 类引用与 Java 类引用不同。要获得 Java 类引用, 请在 KClass 实例上使用 .java 属性。
平时写的类,其信息都可以在这个KClass来获取
data class MediaItem(val title: String, val url: String)
var items= mutableListOf<MediaItem>()
items
.sortedBy { it.title }
.map { it.url }
.forEach { print(it) }
items
.sortedBy(MediaItem::title)
.map(MediaItem::url)
.forEach(::println)
没有名字的函数
要传一个函数类型的参数,或者把一个函数类型的对象赋值给变量,除了用双冒号来拿现成的函数使用,你还可以直接把这个函数挪过来写:
fun b(param: Int): String {
return param.toString()
}
a(fun b(param: Int): String {
return param.toString()
});
val d = fun b(param: Int): String {
return param.toString()
}
//名字没意义,省略
a(fun(param: Int): String {
return param.toString()
});
val d = fun(param: Int): String {
return param.toString()
}
如果你在 Java 里设计一个回调的时候是这么设计的:
public interface OnClickListener {
void onClick(View v);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
使用的时候是这么用的:
view.setOnClickListener(new OnClickListener() {
@Override
void onClick(View v) {
switchToNextPage();
}
});
kotlin写法
fun setOnClickListener(onClick: (View) -> Unit) {
this.onClick = onClick
}
view.setOnClickListener(fun(v: View): Unit) {
switchToNextPage()
})
Lambda写法:
view.setOnClickListener({ v: View ->
switchToNextPage()
})
简化匿名函数,代码更简洁
view.setOnClickListener({ v: View ->
switchToNextPage()
})
//如果 Lambda 是函数的最后一个参数,你可以把 Lambda 写在括号的外面:
view.setOnClickListener() { v: View ->
switchToNextPage()
}
//而如果 Lambda 是函数唯一的参数,你还可以直接把括号去了:
view.setOnClickListener { v: View ->
switchToNextPage()
}
//另外,如果这个 Lambda 是单参数的,它的这个参数也省略掉不写:
//根据上下文推导,根据最后一行代码来推断出返回值类型
view.setOnClickListener {
switchToNextPage()
}
Lambda 表达式的完整语法形式如下:
val sum: (Int, Int) -> Int = { x: Int, y: Int -> x + y }
val sum = { x: Int, y: Int -> x + y }
多参数例子:
fold函数:将所提供的操作应用于集合元素并返回累积的结果
val items = listOf(1, 2, 3, 4, 5)
// Lambdas 表达式是花括号括起来的代码块。
items.fold(0, {
// 如果一个 lambda 表达式有参数,前面是参数,后跟“->”
acc: Int, i: Int ->
print("acc = $acc, i = $i, ")
val result = acc + i
println("result = $result")
// lambda 表达式中的最后一个表达式是返回值:
result
})
// lambda 表达式的参数类型是可选的,如果能够推断出来的话:
val joinedToString = items.fold("Elements:", { acc, i -> acc + " " + i })
输出:
acc = 0, i = 1, result = 1
acc = 1, i = 2, result = 3
acc = 3, i = 3, result = 6
acc = 6, i = 4, result = 10
acc = 10, i = 5, result = 15
joinedToString = Elements: 1 2 3 4 5
总结:
函数不能直接传递或者赋给某个变量,需要函数类型实例化,有三种方式:
使用已有声明的可调用引用
1.函数引用
使用函数字面值的代码块
2.匿名函数
3.lambda 表达式
实现接口
var onVideoStartCallBack: (() -> Unit)? = null
onVideoStartCallBack?.invoke()
videioView.onVideoStartCallBack = {
}
函数里实现接口
object UploaderListHelper {
fun startTaskUpload(activity: Activity, startCallBack: ((Int) -> Unit)?) {
startCallBack.invoke(position)
}
}
UploaderListHelper.startTaskUpload(activity) {
refreshProgress(it)
}
Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。共有以下五种:let、run、with、apply 以及 also。
这些函数基本上做了同样的事情:在一个对象上执行一个代码块。不同的是这个对象在块中如何使用,以及整个表达式的结果是什么。
目的:简洁
val person = findPerson();
//person是可null的,所以需要?
println(person?.age)
println(person?.name)
//上面太麻烦,findPerson加了?,所以后面不需要了,减少的判空操作。let可以安全调用
findPerson()?.let { person ->
person.work()
println(person.age)
}
//还可以更简洁,person也不用写
findPerson()?.apply {
work()
println(age)
}
使⽤时可以通过简单的规则作出一些判断
返回自身
返回值是它本身
从 apply 和 also 中选
作⽤域中使⽤ this 作为参数选择 apply
val adam = Person("Adam").apply {
age = 32
city = "London"
}
println(adam)
作⽤域中使⽤ it 作为参数选择 also
val numbers = mutableListOf("one", "two", "three")
numbers
.also { println("The list elements before adding new one: $it") }
.add("four")
with 非扩展函数
val numbers = mutableListOf("one", "two", "three")
with(numbers) {
println("'with' is called with argument $this")
println("It contains $size elements")
}
不需要返回自身
从 run 和 let 中选择
作用域中使用 this 作为参数,选择 run
作用域中使用 it 作为参数,选择 let, 适合配合空判断的时候
val service = MultiportService("http://example.kotlinlang.org", 80)
val result = service.run {
port = 8080
query(prepareRequest() + " to port $port")
}
// 同样的代码如果用 let() 函数来写:
val letResult = service.let {
it.port = 8080
it.query(it.prepareRequest() + " to port ${it.port}")
}
it作为参数的好处
let 允许我们自定义参数名字,使可读性更强,如果倾向可读性可以选择 T.let
参考文章
Kotlin 的高阶函数、匿名函数和 Lambda 表达式
Kotlin官网
百面AI,致力构建起最强AI算法面经!欢迎关注我们!1.使用颜色空间进行空间变换的项目 在我所做的一些项目中,目前使用颜色空间变换的比较少,目前就是看pix2pix-tensorflow中使用过,直接上图:项目中使用了Lab空间变换来学习A->B图像的映射。在测试的时候,同样是使用了Lab变换,将生成的图来进行前向预测,再将输出结果转换成RGB图像。当然,后面要是看到了其它项目使用到的话,我这边再进行补充!2.相关颜色空间2.1.RGBRGB是我们接触最多的颜色空间,由三个通道表示一幅图像,分别为红色(R),绿色(G)和蓝色(B)三个通道。这三种颜色的不同组合可以形成几乎所有的其他颜色。RGB颜色空间是图像处理中最基本、最常用、面向硬件的颜色空间。RGB颜色空间利用三个颜色分量的线性组合来表示颜色,任何颜色都与这三个分量有关,而且这三个分量是高度相关的,所以连续变换颜色时并不直观,想对图像的颜色进行调整需要更改这三个分量才行。但是,人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,所以RGB颜色空间是一种均匀性较差的颜色空间。如果颜色的相似性直
逻辑回归(LogisticRegression,简称LR)名为“回归”却是用来分类工作、在线性数据上表现优异的分类器。核心思想是把原线性回归的取值范围通过Logistic函数映射到一个概率空间,从而将一个回归模型转换为一个分类模型。主要通过寻找最优参数来正确地分类原始数据。逻辑回归数学目的:求解能够让模型对数据拟合程度最高的参数的值,从此构建预测函数y(x),然后将特征矩阵输入预测函数来计算出逻辑回归的结果y。逻辑回归是一个受工业商业热爱、使用广泛的模型,因为它有着不可替代的优点:1、逻辑回归对线性关系的拟合效果好到丧心病狂,特征与标签之间的线性关系极强的数据,如金融领域中的信用卡欺诈,评分卡制作,电商中的营销预测等等相关的数据,都是逻辑回归的强项。逻辑回归在金融领域,尤其是银行业中的统治地位依然不可动摇。2、逻辑回归计算速度快:对于线性数据,逻辑回归的拟合和计算都非常快,计算效率优于SVM和随机森林,在大型数据上区别尤其明显。3、逻辑回归返回的分类结果不是固定的0或1,而是以小数形式呈现的类概率数字,因此可以把逻辑回归返回的结果当成连续型数据来利用。比如在评分卡制作时,不仅需要判断客
写在前面现在大前端中被使用最多的布局方式非flex莫属,像h5、pc、小程序、rn、甚至native都在使用flex布局,可见掌握好flex布局是多的重要。然而在flex布局兴起时,我们学习flex布局的方法大部分就是看一些博客文章的解析,官方文档说明,然后挨个去看各个属性的作用和示例,然后再自己手敲实践几次。这也是我当初学习flex布局的方法,常规手段,也很有效。如果愣是要说一些不足的地方,应该就是不直观,效率不太高。那有没有一种更直观、更高效的学习方式呢?为了能解决这个问题,flex布局可视化工具就诞生了。这个工具适合什么人?毕竟flex布局很简单,加起来属性也没几个,学习成本也不高,如果你在日常工作中,存在下面一种或者几种情况,那就可以继续往下看,否则就可以跳出了。对有些属性的作用有些模糊,毕竟是web开发,写了就能即时看效果,多试几次总能对有时候还需要百度搞不清主轴变化后的变化,容易搞混其他可视化工具展示父元素属性设置在这里控制父元素的属性值,操作后即时渲染到下面的结果预览区。结果预览在这里可以添加子元素,也可以单独对其中的一个子元素设置不同的属性值。上面实现的是一个水平垂直居
大家,你们说php是什么类型的语言? 它是面向对象与面向过程的编程语言,混合型的把,这个编程语言。 也就是说既可以使用面向对象也可以使用面向过程。。 面向对象:把它看成一个对象来看待把,也就是说我叫你做什么,也可以说是面向对象是指挥型的把,指挥对象做什么的把。 面向过程基本有以下几点:这是什么—对象用来做----对象做的结果是。 而面向对象直接是我想做什么事—叫你帮我完成—结果直接给我就行了。核心是不管细节。直接封装把,兄dei。 面向过程是关注细节的。也就是说每一个步骤都要清清楚楚的哈。类与对象: 类是什么? 类是一类事物的简称。 对象又是什么? 对象是某一类事物的具体实例。 动物与狗的区分把。 对象有什么? 对象有属性与方法? 那什么是属性? 属性是自身已经有的东西,手脚之类的把,身体把, 什么又是方法呢? 方法是用,我能用手脚干什么。我能用脑子做什么事。 反正就是属性与方法诠释了对象与类把,唉 对象有的东西类都有,类有的东西对象就不一定了呀。 比如什么呢,动物有尾巴,人没有。 人有嘴,动物也有嘴把。 记住,类是主观的。 对象是客观的啊 那什么是主观,什么又是客观? 主观,虚拟的。
策划&撰写:伶轩相关数据统计显示,预计到2020年,我国工控市场规模将达2000亿元,而未来10年内,市场容量将快速增加至1.4万亿元。“在过去的很长一段时间内,无论是全球还是国内的工控市场份额,大多是被海外公司占据的。而随着国内自动化、传感、I/O等技术的高速发展,以及在AI浪潮的推动下,传统厂商升级转型需求越来越迫切,这也给了国内厂商带了一次机会。”德克威尔创始人&CEO杨林说。深耕产业9年,I/O迎来新的爆发期杨林的本科和研究生都就读于南京理工大学,毕业后他去到了上海,加入到一家自动化生产企业从事技术研发及生产工作。5年时间,杨林从普通开发人员一路做到了技术管理者,也因此积累了大量自动化技术开发和产品运营经验。回到南京后,应朋友之邀杨林加入了南京仁和电器,“当时我们主要是和主机厂合作,为他们研发和生产汽车天窗控制器。实际上,天窗控制器和总线I/O在技术上有很多共通处。恰逢当时有客户提出希望能够在这方面降低成本,我们就开始基于总线I/O展开了一些小项目的合作。”随着主机控制系统复杂度的不断提升,主机厂商对控制器性能的要求也越来越高。在经过一系列调研后杨林发现,彼时国
本文为AI研习社编译的技术博客,原标题CompletecodeexamplesforMachineTranslationwithAttention,ImageCaptioning,TextGeneration,andDCGANimplementedwithtf.kerasandeagerexecution,作者为YashKatariyae(开发者项目工程师实习生)。 翻译|老赵整理|凡江我总是发现生成和序列模型令人着迷:他们提出的问题与我们刚开始学习机器学习时常遇到的问题不同。当我第一次开始学习ML时,我学了分类和回归(和大多数人一样)。这些帮助我们提出并回答以下问题:这是猫还是狗的照片?(分类)明天会下雨的几率是多少?(回归)掌握分类和回归是非常有用的技能,并且这些领域的应用对现实问题几乎没有限制。但是,我们可能会问其他不同类型的问题。我们能生成一首诗吗?(文字生成)我们可以生成一张猫的照片吗?(GANs)我们可以将句子从一种语言翻译成另一种语言吗?(NMT)我们可以描述图像内容吗?(图像注释)在暑期实习期间,我使用TensorFlow的两个最新API开发了这些示例:tf.keras
全文概要交换机(Switch)核心功能交换机的三个核心功能如下:学习:以太网交换机了解与每一端口相连设备的MAC地址,并将地址同相应的端口映射对应起来存放在交换机缓存中的MAC地址转发表中;转发:或称“过滤”,当一个数据帧的目的MAC地址在MAC地址表中有映射条目时,它被转发到连接目的节点的端口而不是所有的端口;若没有对应条目,则转发至交换机除接收端口外的全部端口;消除环路:当检测到出现冗余回路时,以太网交换机通过生成树协议消除回路。工作流交换机通过以下步骤完成数据帧转发这一核心功能:交换机通过“自学习”过程:根据收到的数据帧中的源MAC地址及其到达端口建立起映射关系,并将其写入转发表中;交换机将数据帧中的目的MAC地址同已缓存的转发表条目比较,以决定向哪个端口进行转发并从该端口将数据帧输出至链路;如数据帧中的目的MAC地址不在转发表中,则向除其到达端口以外的所有端口转发,这一过程称为泛洪(Flood);广播帧或组播帧则向所有端口转发。工作原理交换机的每一个端口所连接的网段都是一个独立的冲突域,即交换机隔离冲突域;交换机所连接的设备仍然在同一个广播域内,也就是说,交换机不能隔离广播域(
翻译:秦陇纪等人 摘自:数据简化DataSimp本文简介:数据科学家的常用工具与基本思路,数据分析师和数据科学家使用的工具综合概述,包括开源的技术平台相关工具、挖掘分析处理工具、其它常见工具等几百种,几十个大类,部分网址。为数据科学教育和知识分享,提高数据科学人员素质。数据科学融合了多门学科并且建立在这些学科的理论和技术之上,包括数学、概率模型、统计学、机器学习、数据仓库、可视化等。在实际应用中,数据科学包括数据的收集、清洗、分析、可视化以及数据应用整个迭代过程,最终帮助组织制定正确的发展决策数据科学的从业者称为数据科学家。数据科学家有其独特的基本思路与常用工具,秦陇纪全面梳理数据分析师和数据科学家使用的工具包,包括开源的技术平台相关工具、挖掘分析处理工具、其它常见工具等几百种,几十个大类,部分网址,欢迎大家积极传播!数据科学家是有着开阔视野的复合型人才,他们既有坚实的数据科学基础,如数学、统计学、计算机学等,又具备广泛的业务知识和经验数据科学家通过精深的技术和专业知识在某些科学学科领域解决复杂的数据问题,从而制定出适合不同决策人员的大数据计划和策略。数据分析师和数据科学家使用的工具在
1创建一个maven工程,这个应该都会2pom文件加入下面内容即可(版本号自己改<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath/><!--lookupparentfromrepository--> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>复制3写一个入口类4写个home.html5在工程的resources目录下创建一
环境变量的补充PATH只是众多环境变量中的一个变量,用于存储可执行文件所在的目录,以便在用户输入命令时可以查询的到。尤其是自己写的脚本或安装的程序,系统不会知道它们在哪个路径下,需要我们去提供给系统这些新的路径,学名叫设置环境变量。此外常用到的环境变量还有LD_LIBARY_PATH:指定动态链接库(so文件)的位置,一般在安装软件出错时会用到;PYTHONPATH:指定Python的安装包的路径;PERL5LIB:指定perl的安装包的路径。设置环境变量要注意2点:1.设置新的环境变量时一般要包含原始的环境变量,不能覆盖;2.注意自己的目录和系统环境变量的目录的顺序,想让哪个先被找到,就先放哪个。文件排序seq:产生一系列的数字;manseq查看其具体使用。我们这使用seq产生下游分析所用到的输入文件。#产生从1到10的数,步长为1 ct@ehbio:~$seq110 1 2 3 4 5 6 7 8 9 10 #产生从1到10的数,步长为1,用空格分割 ct@ehbio:~$seq-s''110 12345678910 #产生从1到10的数,步长为2 #如果有
背景 记录一些常见用法,类似faq。 前置条件 全局变量 ingress配置一些全局的变量,比如server-tokens:"false",有以下两种办法。 修改configmap,遵循yaml语法 kubectl-ningress-nginxeditcmingress-nginx-controller #Pleaseedittheobjectbelow.Linesbeginningwitha'#'willbeignored, #andanemptyfilewillaborttheedit.Ifanerroroccurswhilesavingthisfilewillbe #reopenedwiththerelevantfailures. # apiVersion:v1 data: server-tokens:"false" ... 复制 新建一个yaml文件,apply-f应用即可 #catconfigmap.yaml apiVersion:v1 data: server-tokens:"false" kind:ConfigMap metadata: name:nginx-c
入门逆向 本题要点:ASCII编码、IDA中main函数查看、OD的单步运行操作 解压后发现是一个 .exe 文件 先用 ExeinfoPE 查看一下是否加壳 可以看到写了gcc编译的。应该是没有加壳的。 简要补充一点~ 笔者是个初学者,所知有限,难免会有错误,如果有小伙伴发现了错误,还请指正~ 1.壳的概念 在计算机软件里有一段专门负责保护软件不被非法修改或反编译的程序。它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。 2.加壳的概念 通过数学运算,将可执行程序文件或动态链接库文件的编码进行改变,以达到缩小文件体积或加密程序编码的目的。 例如:黑客使用病毒加壳,主要是对使用的木马
好久没写什么东西了,最近在做一个ionic2的小东西,遇到了不少问题,也记录一下,避免后来的同学走弯路。 之前写过一篇使用VS2015开发ionic1的文章,但自己还没摸清门道,本来也是感兴趣就学习了一下。后来看到TypeScript,觉得这个真不错,强类型,有点类似c#的感觉,而且如果写错了编辑器都可以感知出来,于是就开始看ionic2。ionic2是基于angular2的,语法跟以前有了很大的变化。但自己写原生app写惯了,反而觉得这种方式更方便一些。每个页面都是一个组件,组件里也可以套组件,html标签都可以自定义,也就可以无限扩展。虽然ionic2和angular2都还没发布正式版,但手头的这个小东西用一下也未尝不可,就开始动工了。 先列一下学习资源: TypeScript中文手册,这个网站应该是官方团队的中国人搞的,非常好,我看到的时候已经把英文版看完了,记不清的时候会再来翻一下,地址:https://www.gitbook.com/book/zhongsp/typescript-handbook/details angular2中文手册,这个网站出来不久,对学
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5374 思路:题目的意思是求树上的两点,使得树上其余的点到其中一个点的最长距离最小。可以想到这题与树直径有关,我们可以这样做,首先求出树的直径,然后取出树的中点以及与该中点相邻,并且是直径上的一个点,这样就把这棵树划分为两颗子树,然后分别求出这两棵树的直径,最后要选择的两个点分别就是这两棵树的直径上的中点。 一开始是用dfs写的,结果爆栈了,改成bfs就过了。 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> usingnamespacestd; constintMAX_N=(200000+20000); structEdge{ intv,w,next; }edge[MAX_N<<1]; intN,NE,head[MAX_N]; voidInit() {
FromThinkinginJava4thEdition 并发 线程可以驱动任务,因此你需要一种描述任务的方式,这可由Runnable接口来提供。 要想定义任务,只需要实现Runnable接口,并编写run()方法,使得该任务可以执行你的命令。 publicclassLiftOffimplementsRunnable{ protectedintcountDown=10; //Default privatestaticinttaskCount=0; privatefinalintid=taskCount++; publicLiftOff(){} publicLiftOff(intcountDown){ this.countDown=countDown; } publicStringstatus(){ return"#"+id+"("+(countDown>0?countDown:"LiftOff!")+")."; } publicvoidrun(){ while(countDown-->0){ System.ou
第十一章是关于系统设计的内容,开篇引用了微软首席技术官RayOzzie的一句话:"Complexitykills.Itsucksthelifeoutofdevelopers,itmakesproductsdifficulttoplan,buildandtest."(复杂要人命,它消磨开发者的生命,让产品难于规划、构建和测试)。这章对于希望了解面向切面编程的开发者是极好的,包括了对依赖注入、代理模式以及AOP的探讨。 第十二章探讨了系统的迭代式演进。 第十三章对并发编程的讨论非常经常,很多开发者都畏惧并发编程,也有的开发者迷信多线程可以解决所有的并发问题,如果你是这两类人之一,本章会教给你真正的并发编程。这一章的内容我重新整理了一篇文章,已经发布在CSDN的博客上,名为《关于Java并发编程的总结和思考》。 第十四章是一个精彩的案例用来讲解对代码的持续改进,你可以自己好好阅读一次。第十五章到第十七章说的都是重构,相当精彩。如果你还没有来得及读《重构:改善既有代码的设计》一书,你可以先读读这几张中探讨的代码的坏味道及其改进方案。 总结,这本书从各个层面向我展示了如何编写代码,将我的代码之路
1、首先下载好git到本地。 具体可以看本教程:【Git】实用教程 2、注册Github账号 具体链接:github 3、打开Goland完成相关配置 我的这个GoLand是2020.3月版本,打开preference->VersionControl->Git->PathtoGitexecutable 右侧有一个Test,点击之后会下面出来一行Gitversion证明在本地是存在,且能识别。 上图可能大家没找着,Git在哪?因为这个任务栏,本来这个位置叫“VCS”,我点击了一个叫“Enable****”,选择Git之后,就会变成当前这个状态。 4、具体操作 参考B站教程:代码仓库:git,国外:github.com,国内:码云:gitee.com 第1步:上Github网站,登录自己的账号,同时添加自己一个新的仓库。
前言:PICT介绍: PICT工具是微软公司出品的一款成对组合的命令行生成工具,是一个测试用例生成软件。PICT可有效地按照两两测试Pairwise的原理来进行测试用例设计。在使用PICT时,需要输入与测试用例相关的所有参数,以达到全面覆盖的效果。 简单使用软件1.1使用步骤1在cmd标识符对应的文件夹下建立一个txt文件,或者在某地方建立一个txt文件,然后用上面指令跳转到该文件夹。取个英语的名字,不要带汉字,比如0123.txt 2在txt文件中要详细说明测试的接口(或一组配置或数据)的参数。实例如下: 道路数目:2,3,4道路长度:300,400,500,600车辆速度:3,5,7,9加速度:--2,-1,0,1,2天气情况:晴,雨,雪能见度:500,600,700 注意事项:各标点符号用英语的,txt文件另存为ANSI格式(ASCII编码),如果不按照这个来会出现乱码。 3cmd执行命令 pict0123.txt 即可生成测试用例。效果如下: 为了将文件转入txt保存,可以执行命令:
复制 #pragmaGCCoptimize(2) #pragmaGCCoptimize(1) #include<bits/stdc++.h> typedeflonglongll; typedefunsignedlonglongull; constullbase=131; #defineMAX1009 #definePI3.141592653589793 usingnamespacestd; intf[MAX],bb[MAX][2]; intm,n; intmain() { cin>>n>>m; for(inti=1;i<=n;i++) cin>>bb[i][0]>>bb[i][1]; for(inti=1;i<=n;i++){ for(intj=m;j>=bb[i][0];--j){ f[j]=max(f[j],f[j-bb[i][0]]+bb[i][1]); } } cout<<f[m]<<endl; }复制 复制 #pragmaGCCoptimize(2) #pr
Docker主要概念 Docker容器 Docker容器是用镜像创建的应用运行实例。类似于一种轻量级的沙箱,Docker利用容器来运行和隔离应用 Docker仓库 类似于Github仓库,用来集中存放镜像文件的场所,如DockerHub,DockerPool等。 注册服务器 存放Docker仓库的实际物理计算机。 镜像 类似于Windows上重装系统时用到的镜像,是一种可安装的文件。复制 Docker基础操作docker--help可查看docker的操作命令docker[cmd]--help查看某个详细命令 #获取镜像 dockerpullubuntu:14.04 #创建容器并在容器中执行bash dockerrun-itubuntu:14.04/bin/bash #查看镜像信息 dockerimages #查看某个镜像的详细信息 dockerinspect4f2dff4e48e9 #搜寻镜像 dockersearch-s100nginx#-s100表示查找下载量100以上的镜像 #删除容器 dockerrm4f2dff4e48e9 #删除镜像 dockerr
原文链接:caffeModel的可视化 snapshot:6000 一个在线可视化小工具:http://blog.csdn.net/10km/article/details/52713027 Place205Model集结地:http://places.csail.mit.edu/downloadCNN.html 参考文章:深度学习之可视化-ZfNet去卷积 前言 由来已久,ANN方法被称为模式识别里面的“黑盒”方法,因为ANN模型不能使用明确的函数——形式化的数学公式进行表示,同时也意味着应对评价模型,面对函数寻求最优解的优化方程也不能形式化表示。