填充常用属性,见下表。属性描述 pattern 设置背景颜色的模式 pattern_fore_colour 背景颜色对应代码中访问,如下所示:datestyle = xlwt.XFStyle()bgcolor = xlwt.Pattern()bgcolor.pattern=xlwt.Pattern.SOLID_PATTERNbgcolor.pattern_fore_colour=22 #背景颜色datestyle.pattern=bgcolor上述代码中,首先通过 xlwt.Pattern 进行初始化,为单元格设置填充背景颜色样式,其中 xlwt.Pattern 为填充背景颜色的模式,SOLID_PATTERN 表示完全填充。完成配置后,将对象赋值给 XFStyle。
填充纹理原理上是指图案的重复,通过 createPattern() 函数进行初始化。有两个参数 ,第一个是 Image 实例,第二个是形状中如何显示 repeat 图案。可以使用这个函数加载图像或者整个画布作为形状的填充图案。1249
填充路径,填充的必须是路径,所以我们得先有路径才能填充,需要注意,这里的路径不能是一条线段,最少需要一个两条边的折线。下面我们就以案例的形式学习一下“填充”相关的内容。
我们先用上一小节学习的 rect 方法绘制一个矩形路径然后填充。先看整体案例:1419运行结果:我们从案例中可以看到,调用 fill 函数,会使用黑色把整个矩形框填满,这样的效果就是填充。当然,我们也可以利用 fillStyle 属性设定填充颜色。
在 canvas 中,关于渐变的类型有两种:线性渐变和径向渐变。线性渐变会创建一个从起点到终点的渐变面,这个渐变面上的色带是垂直于渐变线的;径向渐变会创建一个自中心点向外的放射状颜色圈。在 canvas 中创建一个渐变填充我们一般分为三个步骤:创建渐变线;设定渐变线关键点;应用渐变线。接下来我们就开始学习 canvas 中渐变的实现。
在上述内容中,我们已经对常用的两个方法所有了解了,但是只是了解到这种程度是不够的,下面将会详细介绍这两个常用的方法,即我们会通过这两个常用的方法来填充 MessageListenerAdapter 消息适配器的骨架,使之具备处理相应业务逻辑的能力。
在 TensorFlow 之中我们可以采用预处理的方式来将编码后的文本转化为定长:train_data = tf.keras.preprocessing.sequence.pad_sequences( train_data, value=0, padding='post', maxlen=10 )其中的各个参数的解释如下:trian_data:我们要处理的、编码后的数据;maxlen:将每个文本样本处理后的长度,如果原长度不足 maxlen ,那么便会使用 value 进行填充;如果原长度超过了 maxlen ,那么便会将文本截断;value:用来填充文本的数字,一般我们使用0即可;padding:填充的模式,post 表示填充的 value 位置在原文之后。我们举个简单的例子,如果处理前的文本数组为:[1, 2, 3]当我们使用上述方式填充之后的数据就会变为:[1, 2, 3, 0, 0 ,0, 0, 0, 0, 0]
值得注意的是,当使用 fill 对数组中的想填充的是对象时,对象是引用类型,更改其中一项其他项的值也会跟着改变,看以下示例:var arr = Array(3).fill({}) // [{}, {}, {}]arr[1].name = 'imooc'; // [{name: 'imooc'}, {name: 'imooc'}, {name: 'imooc'}] 上面的代码中,初始化一个默认值是一个空对象的数组,然后给数组中的其中一个元素添加属性,其他值也会跟着改变。
上一节我们已经创建了项目并学习了如何管理项目, 那么一个 Python 项目中可以填充哪些元素呢?这一节我们主要介绍在一个新项目中如何创建不同类型的元素,包括包(packages)、目录(directories)以及文件(files)。
在 JDK 1.4 及之前的版本中,提供的并发工具很有限,最常用的就是 synchronized 关键字、 volatile 关键字、final 关键字。在 JDK 1.5 版本中,直接提供了一套相对完整的并发工具包,即 java.util.concurrent 包。在 JDK 1.7 版本中,进一步丰富并发工具包,比如增加了 Fork / Join 并发编程框架。在 JDK 1.8 版本中,进一步对部分工具进行扩充,提升并发工具包的性能。以及后继的版本中继续增加各类工具。本主题以 JDK 1.8 中常用的并发工具作介绍。为什么 JDK 各版本中对并发工具不断优化增强呢?当然是因为并发编程太重要了,我们需要关注并学习好并发编程。
PyCharm 安装完成后,默认的工具栏窗口都是打开的,如果不小心关掉了某个窗口,可以点击菜单 View -> Tool Windows -> 选择你要显示的工具名称。灰色图标代表已显示,彩色图标代表未显示。这些工具栏将分布在左右与底边框,当你需要哪个工具栏时,你点击相应的按钮就好。比如: Project 工具栏显示整个项目结构, Database 工具栏显示数据库连接情况,可以在这里直接查看表及视图等数据。Termial 工具栏是一个终端窗口,在这里可以直接输入 shell 命令。也可点击 IDE 底端左路左下角的窗口图标,显示所有的工具窗口。
本节使用的 Windows 连接工具是 Navicat12, Navicat12 是商业收费版,可以先选择试用 30 天,应该足够学习使用了,在 Windows 上还可以使用 MySQL 登录工具对 MySQL 进行管理,这里使用 Navicat 进行连接如图,点击左上角 "连接",选择 “MySQL”:如上图填写好相应的输入栏,可以点击 "连接测试",出现如下图则表示可以连接成功,选择 “确定” 即可连接 MySQL:
SQL 优化并不简单,因此我们可以利用一些工具来帮助我们。
菜单:View -> Tool Windows -> Structure在编辑器打开文件,默认情况下,PyCharm 显示当前文件的所有类、方法和其他元素。除此以下,工具栏还有另外两个按钮 Navigate with Single Click 与 Always Select Opened Element。Navigate with Single Click:单击此按钮,编辑器切换到对应于所选节点的源代码行,但焦点还是停留在"sturcture"工具窗口。Always Select Opened Element:单击此按钮可让 PyCharm 自动将"structure"工具窗口中的焦点移动到当前编辑器中的代码对应的节点。
make 工具是用来构建 C 程序而发明的。特别是当需要依赖大量的库文件(尤其是非标准库文件),和需要设置一些特殊的系统变量环境等内容的时候。通常情况下, make 工具都会用在比较大的项目中。但是如果在规模不大的程序中使用会更简单,同时会让你的程序构建变得也更轻松。要使用 make 工具就需要写一个 makefile,通常情况下这个文件名就是叫 makefile。当然你可以用别的名字替代。不过这个时候你就要在执行 make 命令的时候指定你所要执行的 makefile 文件名。如果写成 makefile 这个名字, make 程序会直接在当前所在的文件夹中寻找这个文件,就不用指定文件名字了。所以,建议大家就用 makefile 这个英文单词的名字。make 工具其实不仅仅可以应用于 C 语言。它目前也不仅仅只是可以用在 linux 中。它也是可以跨平台的应用。那么这个 makefile 文件的结构是什么?其实比较简单。目标: 依赖1, 依赖2, …… 编译命令
Chrome 开发者工具是一套内置于 Google Chrome 中 的 Web 开发和调试工具,可用来对网站进行迭代、调试和分析。开发者工具内置在 Chrome 浏览器中。如果还未安装 Chrome 浏览器,可以点击这里获取。以下方式可以打开开发者工具:在 Chrome 菜单中选择: 更多工具 > 开发者工具在页面中任意位置上右键点击,在菜单中选择 “检查”Windows 下使用快捷键 Ctrl+Shift+I,Mac下使用快捷键 Option + Command + I控制台界面章节中主要会使用到 Console面板 (上图中第二个高亮的选项)来查看输出的日志等,结合日志来进行分析调试。
在介绍每一类工具类时,没有过多地做彼此之间的对比,为了大家有一个更深刻的认识,下面总结这些工具类之间的应用差异。请看下面表格。工具类基本概念典型应用场景 Semaphore 计数信号量,封装了对某个资源的量化控制操作生产消费关系中的逻辑控制 CountDownLatch 同步计数器,封装了多个子线程和一个控制线程之间的同步逻辑分头处理任务,最后做总结性处理 CyclicBarrier 循环栅栏, 封装了多个线程在某个时刻达成同步逻辑类似 CountDownLatchPhaser 移相器,封装了具有多阶段且每阶段并发处理的控制逻辑如处理某个具有多阶段任务的计划 Exchanger 交换者,封装了一对线程之间的同步交换逻辑如两个任务在处理过程中,需互相检测信息的场合
前面介绍了如何安装虚拟机,还介绍了如何在虚拟机上安装 CentOs 操作系统,并且给 CentOs 配置了局域网固定 ip,那么此时的 CentOs 相当于是在局域网的一台服务器了,虚拟机上面已经自带终端工具,实际业务中使用较多的是终端工具连接远程服务器,较为常见的 Linux 服务器终端连接工具有 xshell、MobaXterm、putty 等等。其中 MobaXterm 对个人免费使用,且功能齐全,本小节介绍如何安装 MobaXterm。
图表操作工具栏,内置导出图片、数据视图、动态图表类型切换、数据区域缩放、重置五种工具,但不支持自定义扩展,详情可参考 Echarts 工具栏 toolbox 一节。
Linux中有很多非常实用的工具或命令,灵活运用这些工具,可以帮助我们在Shell编程中化繁为简,如虎添翼。可能一个工具或命令就能让原本负责的问题快速解决,本章节我们来一起丰富我们的工具库,日常可以多积累总结,帮助我们更好的编写Shell。
接下来我们将在这台 master-1 虚拟机中,安装 docker、kubeadm、kubelete、kubectl 等工具。我们将在宿主机侧,用终端工具 ssh 进入虚拟机操作。
近年来计算机程序向着大规模、分布式、多任务方向发展,尤其是基于 Java 的企业级应用,几乎都采用服务化、集群化的方式实现。这些都要求充分利用各类系统资源,且要可靠健壮,而要实现这些都离不开并发编程、以及处理并发编程带来的各类问题。并发工具是并发编程的代码结晶,就像一颗颗糖果一样诱人,熟练使用常见的并发工具,会为我们日常研发中涉及并发场景的编程,实现提供非常便捷的且高质量的帮助。另外在各类技术面试中,也不可避免地会考察并发编程的技能点,熟练使用常见的并发工具,是我们技术人员的基本技术要求。
如果系统或者包管理器提供的 Ruby 版本已经过时,可以使用第三方安装工具来安装更新的版本。其中许多工具允许在同一个系统中安装多个 Ruby 版本,相关的工具能帮你在不同的版本之间切换。如果打算用 RVM 作为版本管理工具,不需要其它的安装工具,它自己就具有这些功能。
Pandas 库和 SQL 工具相比较,如果是处理存在数据库中的数据,SQL 相对而言要方便一些,但目前大数据发展性,数据的来源大多数是通过网络爬虫而来,通过Python爬虫程序,生成的数据文件一般是txt、csv 或者 Excel,这时候 SQL 就不太好用了,Pandas 的优势也就提现出来,它不论是数据的读取和导出都很方便,而且 SQL 中有的数据处理功能,都可以由 Pandas 来实现。通过和其他数据处理分析工具的对比,从成本投入、操作复杂度、处理能力等多方面考虑来看,Pandas 成为当下最火的数据处理工具也是当之无愧的。
Java 官方的序列化存在很多缺点,因此,开发者们更倾向于使用优秀的第三方序列化工具来替代 Java 自身的序列化机制。Java 官方的序列化主要体现在以下方面:性能问题:序列化后的数据相对于一些优秀的序列化的工具,还是要大不少,这大大影响存储和传输的效率;繁琐的步骤:Java 官方的序列化一定需要实现 Serializable 接口,略显繁琐,而且需要关注 serialVersionUID;无法跨语言使用:序列化的很大一个目的就是用于不同语言来读写数据。下面列举了一些优秀的序列化工具:thrift、protobuf - 适用于对性能敏感,对开发体验要求不高的内部系统。hessian - 适用于对开发体验敏感,性能有要求的内外部系统。jackson、gson、fastjson - 适用于对序列化后的数据要求有良好的可读性(转为 json 、xml 形式)。
从本小节开始我们将介绍 Android SDK 中包含的众多命令行工具,包括 SDK 工具、构建工具、平台工具、模拟器工具、分析工具。本小节我们学习 SDK 工具。
这里,我们结合市面上比较常用的开发工具 idea 来进行演示,当然,其他的开发工具也能够得到相同的效果。刚刚,我们也了解到多模块项目必须要有 project 工程作为父项目存在,那么首先,我们就需要创建一个 project 工程。打开 idea,选择 File -> New -> Project,在弹出的窗口左侧选择 Maven 并点击 Next 按钮。在这里,需要填写 project 的信息,包括 groupId,artifactId,version 信息,并点击 Next 按钮。最后一步,只需要填写项目名称,然后点击Finish按钮即可。由于是父项目,所以并不需要代码,因此可以将 src 目录直接删掉。至此,project 项目创建完成。
小程序的开发需要使用小程序主体提供的开发者工具,以 微信小程序 为例,就是要下载 微信开发者工具。也就是说,如果需要开发多个平台下的小程序,那每个平台提供的工具都需要安装一遍。通常开发者工具会使用其预览、调试功能,以及其他的一些生态链工具,如上传、预览代码等,编辑工作会放在自己的编码工具上进行,因为官方提供的编辑器的功能相比其他主流编辑器或者 IDE 还有许多不足。
在介绍每一类工具类时,没有过多地做彼此之间的对比,为了大家有一个更深刻的认识,下面总结这些工具类之间的应用差异。请看下面表格。工具类基本概念典型应用场景 AtomicInteger 原子整型工具类,封装了基本类型整型变量的细粒度原子操作应用在多线程操作同一个整型变量时 AtomicReference 原子引用工具类,封装了引用类型变量的细粒度原子操作应用在多线程操作同一个引用变量时 DoubleAdder 浮点型加法器, 封装了基本类型浮点型变量的粗粒度原子操作应用在多线程统计汇总某一个数值时 LongAccumulator 长整型计算器,封装了基本类型长整型变量的自定义运算规则的原子操作应用在多线程操作同一个长整型变量且需自定义计算规则时
大家都知道 Yarn 是包管理工具,那么在学习 Yarn 之前,我们有必要讨论一下,包管理工具是什么。在近几年之前得前端项目中,我们聪明得前端工程师们就已经开始使用如 jQuery 等经典的第三方 JS 工具库,这大大得提高了我们前端项目得开发速度。 我们使用它的方法一般为,在 jQuery 官网上下载相关版本得 JS 静态文件,然后放到我们自己的项目中,引用它封装的相关方法去实现我们的需求,或者还有其他得一些如 CDN 引用等方式。使用了一段时间之后,我们发现,这种开发方式,比之前我们纯手写或者复制粘贴代码的效率快了一大截,但是也暴露出一些致命缺陷,如以下使用场景:如果我们引用的 lib1.js,它同时依赖于lib2.js 和 lib3.js,那么我们在下载 lib1.js 的同时,也要将 lib2.js 和 lib3.js 一起下载,并且在文件里他们的引用顺序也有讲究,如果 3 个文件的顺序不对,也会出现一些莫名其妙的问题。第三方 JS 工具库的作者可能会增加、优化一些代码逻辑,或者只是修改一些其他开发者提出的 Bug,然后他们会把最新代码包发布到自己的官网。而作为开发者的我们,就要经常关注这些项目里使用的第三方库的动态,如果升级就要重复之前的操作,将文件重新手动下载下来,替换项目中之前的文件。工具的版本问题,我们想升级项目中的依赖工具,就要去寻找资源,手动下载,手动替换。在这些问题被发现之后,一批富有开拓精神的程序员们提出了他们新的想法和思路,于是 npm 的出现,彻底的终结了以上这些问题。