Six Tiny But Awesome ES6 Features.md JS社区的每个人都喜欢新的API、语法以及一些简单、明了更高效的完成重要任务的新特性。 过去一年ES6带来了十足的进步,下面是6个我最喜欢的JS新增特性。 1.Object[key] 有时候不能在对象变量声明时设置所有的key/value,所以得再声明之后添加key/value。 ES6提供给开发者一种更优雅的方式: let myKey = 'variableKey'; let obj = { key1: 'One', key2: 'Two', [myKey 2.Arrow Functions 你不需要跟上ES6的所有改变,箭头函数已经是许多讨论的话题并且也给JS开发者带来了一些困惑。 ES6提供了Template Literals使用反引号来容易的创建多行字符串: // Multiline String let myString = `Hello I'm a new line`;
开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字符串的扩展: Unicode和UTF-16是什么和他们的关系 用for-of console.log('1'); } if(str.includes('PD')) { console.log('2'); } } for-of遍历字符串 let str = 'abc'; // es6 ,每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言,跨平台进行文本转换,处理的要求。 file 构造函数的变化: ?
基础使用 直接实例化 QPushButton import sys from PySide6.QtWidgets import QApplication, QPushButton app = QApplication ('Button Text 按钮展示的信息') window.show() app.exec() 从 QMainWindow 继承 from PySide6.QtWidgets import QApplication __init__() QPushButton('MyPushButton', self).setToolTip('我的自定义 button 实例') if __name__ == ' 实现代码 import sys from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton def the_button_was_toggled __init__() self.setWindowTitle('带有按钮的窗口') self.button = QPushButton('初始状态 我的按钮')
DHCP的出现为管理员及用户省去了手动配置IP等网络信息的烦恼。显然,人们也希望在IPv6的世界里继续拥有DHCP带来的便利,于是就有了DHCPv6。 DHCPv6并非简单地把DHCP从IPv6移植到IPv6,而是针对各项功能的重新设计。DHCPv6有三种方式: SLAAC, Stateless和Stateful。本文将介绍其工作的基本机制。 值得指出的一点是,SLAAC模式下,网管员无需使用任何的DHCPv6数据包。 Stateless DHCPv6 无状态DHCPv6方式使用SLAAC获取连通性信息,然后用DHCPv6来进行配置。 而且,该字段会告诉设备做更多的事情。 一旦SLAAC过程完成,设备会在网络内广播一个DHCPv6请求,DHCPv6服务器收到该请求后,会回复设备需要的其他信息,比如DNS服务器或者域名。 该方式之所以被称为无状态,是因为DHCPv6服务器不管理IPv6地址的有效期及回收等,它只是提供设备需要的额外信息。 该模式完全类似与IPv4下的DHCP。
依据是用类似单词的文章意思也差不多。 CountVectorizer 类会将文档全部转换成小写。然后把句子分割成词块(token)或有意义的字母序列,并统计它们出现的次数。 2,Tf–idf权重向量 单词频率对文档意思有重要作用,但是在对比长度不同的文档时,长度较长的文档的单词频率将明显倾向于更大。因此将单词频率正则化为权重是个好主意。 此外,如果一些词在需要分析的文集中的所有文档中都出现,那么可以认为这些词是文集中的常用词,对区分文集中的文档帮助不大。因此,可以把单词在文集中出现的频率考虑进来作为修正。 3,特征哈希向量 词袋模型的方法很好用,也很直接,但在有些场景下很难使用,比如分词后的词汇字典表非常大,达到100万+,此时如果直接使用词频向量或Tf-idf权重向量的方法,将对应的样本对应特征矩阵载入内存 即对于任意两个不同的数据块,其hash值相同的可能性极小;对于一个给定的数据块,找到和它hash值相同的数据块极为困难。 目前流行的Hash函数包括MD4,MD5,SHA等。 ?
只要是这种特殊的json格式都可以轻松使用ES6的语法转变成数组。 比如: let arr =Array.of(3,4,5,6); console.log(arr); 结果为: 当然它不仅可以转换数字,字符串也是可以转换的。 let arr =Array.of('es6',1,'开发'); console.log(arr); 结果为: 3.find( )实例方法 所谓的实例方法就是并不是以Array对象开始的,而是必须有一个已经存在的数组 > 6; })) 返回结果为:7。 (index+":"+val); } 结果为: 6.entries( )实例方法 entries()实例方式生成的是Iterator形式的数组,那这种形式的好处就是可以让我们在需要时用next()手动跳转到下一个值
几种浏览器厂商前缀: Firefox : -moz-; Chrome:-webkit- ; IE:-ms- 3、 如果元素使用绝对定位position:absolute 那么它的定位相对于最近的定位祖先元素 (position的属性不是static); 4、 position默认属性是static:按照常规文档内容流定位,不能使用top,left等属性定位; 5、fiexd:相对于浏览器窗口 ;relative:按照常规的文档流进行布局; 6、padding和margin的顺序是:上 右 下 左; 五、事件: 一、事件分类: 1、表单事件:submit reset mousewheel click dbclick; 4、键盘事件:keydown keyup keypress; 二、事件处理程序注册: 1、设置JavaScript对象的属性
大家好,又见面了,我是你们的朋友全栈君。 前言 Docker的三大核心概念:镜像、容器、仓库。 初学者对镜像和容器往往分不清楚,学过面向对象的应该知道类和实例,这跟面向对象里面的概念很相似 我们可以把镜像看作类,把容器看作类实例化后的对象。 查看镜像列表 使用docker images查看本地已经下载的镜像 REPOSITORY:表示镜像的仓库源 TAG:镜像的标签,区分不同版本 IMAGE ID:镜像ID,16进制组成,唯一标识 CREATED 5 years ago 349MB 我们本地下载的镜像文件是从仓库下载过来的,每个镜像在仓库源都有个名称,也就是 REPOSITORY,同一个镜像源可以有不同的版本,同标签 此时 ID 为 182e335d9533 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
ES6的笔记 ## let声明变量 基本用法:类似var ,但是变量只在代码块内有效 var 和 let 比较 { let x=10; var y=15 } console.log(y)//15 console.log(x)//报错 let不存在变量提升 暂时性死区 es6明确规定,如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了密闭空间。 ={a:1,b:2,c:3}--模式和变量 对象的解构赋值的内部机制,是先找到同名属性,然后再赋值给对应的变量 等号右边数字和布尔值结构先转为对象 字符串 es6用反引号(ESC下)包围变量用${变量 Object.keys 返回键 Object.values 返回值 Object.entriess 返回键值对 参数默认值 es6之前设置参数默认值 a=a||100 es6的null判断运算符 a= (5) 没有prototype(原型) (6) this指向不能被改变 set 支持forEach遍历 类似数组,每个值都是唯一的{1,2,3,5} let s=new Set(数组、字符串、NodeList
时,会执行相应的方法,并且状态一旦改变,就无法再次改变状态,这也是它名字promise-承诺的由来 ES6之前的Promise 在ES6中,Promise终于成为了原生对象,可以直接使用。 但是在这之前,小伙伴们想要使用Promise,一般会借助于第三方库,或者当你知道其中的原理以后,也可以手动实现一个简易的Promise 当然,为了防止不可预知的bug,在生产项目中最好还是不要使用原生的或者自己编写的 Promise(目前为止并不是所有浏览器都能很好的兼容ES6),而是使用已经较为成熟的有大量小伙伴使用的第三方Promise库,下面就为小伙伴推荐一个—— Bluebird Promise的基本用法 声明一个 p2,如果p2为pending,p1将等待p2状态的改变,p2的状态一旦改变,p1将会立即执行自己对应的回调,即then()中的方法针对的依然是p1 then()中返回promise 由于then()本身就会返回一个新的 的用法类似 .then() ,可以提供resolved和rejected方法,也可以不提供任何参数,它的主要作用是在回调链的尾端捕捉前面没有被 .catch() 捕捉到的错误 Promise. finally
译文出自:掘金翻译计划[1] ---- 在使用 GraphQL 进行了 6 个月的后端项目开发后,我开始考量该技术是否适合在开发工作中使用。 GraphQL 为你的 API 中的数据提供了完整且易于理解的描述,并且让用户有权决定他们所需要的东西,仅此而已。 虽然加载器提供了一个加载各个独立值的 API,但是所有并发请求都将被合并起来才分送给你的批处理加载函数。这使你的应用程序可以安全地在整个应用程序进行数据的分发与获取。 公开数据和数据库模型之间的解耦 GraphQL 的一大优点是可以将数据库建模数据和给用户公开的数据解耦。 其次,前端可以使用模拟(mock)出来的 API 来测试代码。这样便不会阻碍前后端的开发工作,大大的提升了程序员的开发体验。 ?
它的核心是用高效的方法,去训练高速精准的神经网络。目前已经为重要的深度学习应用程序和数据类型提供了一致的 API。 ? AutoML 的终极目的,是提供无门槛的访问工具,让没有数据科学或机器学习背景的人,能轻松的访问和使用 ML 。 根据 Dopamine 的文档,看到设计的原则是: 操作简单:帮助新用户运行基准实验 开发灵活:促进新用户创造出新的理念 紧凑可靠:为以前的新流行的算法提供保障 克重复性:确保结果可重复 vid2vid Vid2vid 项目是 Nvidia 的研究成果,关注的是视频到视频的合成问题。 Vid2vid 算法的目标是学习从输入源视频到输出照片拟真视频的映射函数。最终输出视频精确地描绘了源视频的内容。 ?
Qt 6的技术概览 Qt 6的技术概览 Qt对用户的价值体现在哪里? 新一代的QML 下一代图形 统一并且一致的工具库 增强已有的C++ API 语言支持 兼容Qt 5和增量改进 市场和技术产品结构 欢迎你的参与和反馈 Qt 6的技术概览 本文转载自Qt 6的技术概览 这篇博文捕捉了几个将要在Qt 6中亮相的关键点。 Qt 6将是我们Qt 5系列的延续, 因此不会对用户造成干扰。 随着Qt 5.14特性的固定,更多的研发重点将转向Qt 6,我们的目标是在2020年年底前发布Qt 6的第一个版本。 在我们深入了解Qt6的新内容之前,让我们回顾一下Qt对用户而言的核心价值,首先明确我们不能更改的内容。 Qt对用户的价值体现在哪里?
JavaScript 中的数组是一种用于存储多个元素或顺序重要的一种数据结构。记住数组的 typeof 返回的是对象。 数组中的每个元素都有下标,下标就是元素在数组中的位置。 数组的下标是从0开始的,第一个元素的下标是 0 ,第二个的下标是 1 以此类推。元素的总个数就是数组的长度。 如何创建一个数组? 下篇文章我会介绍许多数组的方法,但现在我只介绍另个常用方法: 1. 中括号和 new 关键字在创建空数组或依照传入的数据来创建数组是一样的。 ,但第二个却生成了 5 个包含 undefined 的数组而不是包含5的数组。
SpringMVC 中的视图是 View 接口,视图的作用渲染数据,将模型 Model 中的数据展示给用户 SpringMVC 视图的种类很多,默认有转发视图和重定向视图 当工程引入 jstl 的依赖, 转发视图会自动转换为 JstlView 若使用的视图技术为 Thymeleaf,在 SpringMVC 的配置文件中配置了 Thymeleaf 的视图解析器,由此视图解析器解析之后所得到的是 ThymeleafView ThymeleafView 当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被 SpringMVC 配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图 后缀所得到的最终路径,会通过转发的方式实现跳转 转发视图 SpringMVC 中默认的转发视图是 InternalResourceView SpringMVC 中创建转发视图的情况: 当控制器方法中所设置的视图名称以"forward:"为前缀时,创建 InternalResourceView 视图,此时的视图名称不会被 SpringMVC 配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部分作为最终路径通过转发的方式实现跳转
EJB实体操作的高级特性 继承映射 @DiscriminatorColumn(name="DISC", discriminatorType=STRING,length=20)//指定区别父子类的表述符的名字 、类型和长度 @DiscriminatorValue("CUSTOMER")//指定本类描述符的值 以上两个标注只适用于所有类建一个表的情况。 mappedBy,是指定拥有关系的属性,只需要在关联的反方向(非主对象)一端指定使用mappedBy的属性。 //用来指定根据类关系映射到表后和其他表关联的列名,以及关联的列名,以及本列的属性 name属性指定类中属性对应的列名,默认为属性名 referencedColumnName属性指定类对应的表中的关联引用的列的列名 table属性指定类中有关联属性的列所对应的表,默认为实体类所对应的表。
/redis.io http://redis.cn/ 安装版本 6.2.1 for Linux(redis-6.2.1.tar.gz) 不用考虑在 windows 环境下对 Redis 的支持 安装步骤 ① 准备工作:下载安装最新版的 gcc 编译器 安装 C 语言的编译环境:yum -y install gcc 测试 gcc 版本 :gcc --version ② 下载 redis 安装目录 查看默认安装目录:/usr/local/bin redis-benchmark:性能测试工具,可以在自己本子运行,看看自己本子性能如何 redis-check-aof:修复有问题的 AOF 文件,rdb 和 aof 后面讲 redis-check-dump:修复有问题的 dump.rdb 文件 redis-sentinel:Redis 集群使用 redis-server:Redis
在MyBatis中,#{}和${}是用于在SQL语句中嵌入参数的两种不同方式。它们的核心区别在于预处理和潜在的SQL注入风险。 这样做的好处是可以防止SQL注入,因为MyBatis会对参数进行适当的转义处理。 然后,MyBatis会将id参数的值安全地绑定到问号(?)位置。${}(直接替换)${}进行的是直接字符串替换。你提供的字符串会在MyBatis创建SQL语句之前就被替换到SQL中。 如果必须使用${},确保参数值来自于信任的源,或者对参数值进行严格的验证和清理,以避免SQL注入风险。 总之,在编写安全的MyBatis应用时,理解#{}和${}的区别是至关重要的,以确保你的应用不容易受到SQL注入攻击。
Hyperledger Fabric是被广泛使用的,支持准入网络上的分布式账本解决方案。它的模块化架构最大程度地提高了区块链解决方案的机密性,弹性和灵活性。 1. 6)当提交peer节点收到一批事务时 7)验证是否符合背书策略,并检查读/写集以检测冲突的事务。如果两项检查均通过,则该块将提交到账本,并且每个事务的状态更新都将反映在状态数据库中。 此外,由于只有背书人和提交人才能真正看到交易,因此在区块链系统的不同部分中需要较少的信任级别,从而提供了更高的安全性。 例如,在资本市场中,随着股权支持证券或债券的买卖,交易量由于参与者的增加而增加。 很多公司已经具有自己的身份管理,并且想要重用而不是重建。 可插拔的体系结构的其他组件包括共识或加密,允许使用自己的加密标准。 6 保护数字钥匙和敏感数据 HSM(硬件安全模块)提供了对数字密钥的高级保护。对于涉及身份管理的方案,HSM可以更好的保护密钥和敏感数据。 更多教程请参考 flydean的博客
配置之后[root@pptp-server ~]# iptables -L -nv Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 35 3695 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0