TOML、YAML, JSON、XML、CSON, HOCON
TOML、YAML, JSON、XML、CSON, HOCON json json 规范要求字符串要用双引号括起来.
TOML、YAML, JSON、XML、CSON, HOCON json json 规范要求字符串要用双引号括起来.
Redis3 集群 数据迁移 一、概述 要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 二、准备环境 安装ruby 集群环境需要ruby,所以需要安装下 yum install ruby yum install ruby-rdoc ruby setup.rb 安装完毕后启动依然报错 需要安装redis库 gem install redis 问题解决 下载最新redis版本 3.06 并进行构建 创建用户 useradd redis passwd redis 切换用户 su – redis 上传redis包到home目录 tar -zxvf redis-3.0.6.tar.gz mv redis-3.0.6 redis3.0 cd redis3.0 make 本环境为伪集群环境,所以在一台机器,多机情况相同 mkdir /home/redis/ cluster-test cd /home/redis/ cluster-test mkdir 7000 mkdir 7001 mkdir 7002 mkdir 7003 mkdir 7004 mkdir 7005 三、修改配置 ...
redis stream stream是一个看起来比pubsub可靠多的消息队列。pubsub不靠谱? 很不靠谱,网络一断或buffer一大就会主动清理数据。stream的设计参考了kafka的消费组模型,redis作者antirez也专门写了篇短文描述了这个过程。 说起新鲜的redis streams,其实Antirez在几年前开了一个新项目叫做disque, 也是用来做消息队列的,奈何没怎么有人关注。我作为antirez的粉丝,肯定是用过了,还tmd改过disque python的库。现在redis5的stream里有一些disque的影子。 更多streams的信息 https://redis.io/topics/streams-intro Redis5.0最近被作者突然放出来了,增加了很多新的特色功能。而Redis5.0最大的新特性就是多出了一个数据结构Stream,它是一个新的强大的支持多播的可持久化的消息队列,作者坦言Redis Stream狠狠地借鉴了Kafka的设计。 Redis Stream 有一个消息链表,将所有加入的消息都串起来,每个消息都有一个唯一的ID和对应的内容。消息是持久化的,Redis重启后,内容还在。 每个Stream都有唯一的名称,它就是Redis的key,在我们首次使用xadd指令追加消息时自动创建。 每个Stream都可以挂多个消费组,每个消费组会有个游标 last_delivered_id 在 Stream 数组之上往前移动,表示当前消费组已经消费到哪条消息了。每个消费组都有一个Stream内唯一的名称,消费组不会自动创建,它需要单独的指令 xgroup create进行创建,需要指定从Stream的某个消息ID开始消费,这个ID用来初始化last_delivered_id变量。 每个消费组(Consumer Group)的状态都是独立的,相互不受影响。也就是说同一份Stream内部的消息会被每个消费组都消费到。 同一个消费组(Consumer Group)可以挂接多个消费者(Consumer),这些消费者之间是竞争关系,任意一个消费者读取了消息都会使游标last_delivered_id往前移动。每个消费者者有一个组内唯一名称。 消费者(Consumer)内部会有个状态变量pending_ids,它记录了当前已经被客户端读取的消息,但是还没有ack。如果客户端没有ack,这个变量里面的消息ID会越来越多,一旦某个消息被ack,它就开始减少。这个pending_ids变量在Redis官方被称之为PEL,也就是Pending Entries List,这是一个很核心的数据结构,它用来确保客户端至少消费了消息一次,而不会在网络传输的中途丢失了没处理。 http://xiaorui.cc/2018/06/07/%E6%B5%85%E5%85%A5%E6%B5%85%E5%87%BAredis5-0%E7%9A%84streams%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/ https://toutiao.io/posts/2agvp3/preview
MySQL int 长度 “浮点型"的长度是用来限制数字存储范围的. 比如 float(3,2) 只能够写入 0.00~999.99. “整型"的长度并不会限制存储的数字范围. 比如, int 和 int(3) 的存储范围都是 -2147483648 ~ 2147483647, int unsigned 和 int(3) unsigned 的存储范围都是0 ~ 4294967295. “整型"的长度实际上可以理解为"显示长度”, 如果该字段开启 “Zerofill/补零"就能很明显地知道它的作用. 参考 “高性能MySQL” 的说明 “高性能MySQL” 书中在"4.1 选择优化的数据类型"中提到: MySQL 可以为整数类型指定宽度, 例如 INT(11), 对大多数应用这是没有意义的: 它不会限制值的合法范围, 只是规定了 MySQL 的一些交互工具(例如 MySQL 命令行客户端)用来显示字符的个数. 对于存储和计算来说, INT(1) 和 INT(20) 是相同的 “MySQL 手册"的说明 MySQL 5.7 手册 “12.2.5 Numeric Type Attributes”: MySQL supports an extension for optionally specifying the display width of integer data types in parentheses following the base keyword for the type. For example, INT(4) specifies an INT with a display width of four digits. This optional display width may be used by applications to display integer values having a width less than the width specified for the column by left-padding them with spaces. (That is, this width is present in the metadata returned with result sets. Whether it is used or not is up to the application.) ...
账号, account https://36kr.com/p/2342280589940227 最近,话题#账与帐很多人分不清#登上热搜,引发网友热议。笔者注意到,不同互联网平台,“帐号”和“账号”两种表述都存在。 实话实说,如果不是这条热搜,笔者也对“帐”和“账”傻傻分不清楚;到底“账号”和“帐号”哪种表述是正确的呢? 根据第七版《现代汉语词典》,只有“账号”而无“帐号”,“账号”解释为单位或者个人跟银行建立经济关系后,银行在账上给该单位或个人编的号码。而“帐”这个字释为用布或者其他材料做成的遮蔽用的东西,和“账号”所表达的概念完全无关。 值得注意的是,《现代汉语词典》、《新华字典》等对“帐”这个字有解释称其“旧同‘帐’”,但这仅仅是指“帐”和“账”在过去一段时间内一致,现如今已经独立使用。
Desk Check 敏捷实践之 Desk Check http://insights.thoughtworkers.org/desk-check/embed/#?secret=5PpVVMPtJf 开发人员在完成需求之后,快速在本地开发环境建立功能验证条件。 开发人员要做的具体工作是: 需要测试数据的,建立mock data;然后对照Acceptance Criteria给团队的BA、QA展示完成的功能。这里需要注意的是,开发人员最好自己先完成一遍测试。自测能够发现一些问题,提高deskcheck的成功率,也吻合越早发现问题修复的代价越小的原理,否则不但耽误了自己的时间也耽误了BA和QA的时间。 BA的职责是: 验证开发之前提出的需求是否实现,是否有跟开发人员理解不一致的地方,是否有遗漏的需求。 QA的职责是: 从测试人员的视角评估这个功能有没有"ready for testing",并且做一个快速的测试,验证是否有Sad Path没有考虑周全。 不管怎么说Desk Check还是处于developing的阶段,在这个阶段矫正一下需求,修复一些快速的defects,这样才能让功能ready进入下一个阶段: 测试环境的测试。 之前一直错误地理解Desk Check是我们开发流程的一部分,是流程上的一个要求。但是结合最近项目的实践和敏捷宣言的理论,意识到Desk Check实际上是践行了宣言的第一条: 个体之间的合作,而且合作比流程更重要。Desk Check同时也体现了反馈在敏捷开发中的作用,及时的反馈能够尽早的纠正工作的偏差,让我们一直向正确的方向前进。 https://www.techwalla.com/articles/what-is-desk-checking
模块之间的相互调用,循环引用的问题 https://github.com/seajs/seajs/issues/800 允许适当重复代码,保证模块主要职责不变
redis 集群容灾 Redis Sentinel 容灾演练 http://www.dczou.com/viemall/870.html/embed#?secret=Kngfb4CYbn
journal suppressed N messages systemd-journal: Suppressed 9567 messages from /system.slice/ systemd-journal: Suppressed 6735 messages from /system.slice/ …… 根据字面意思理解就是日志被丢弃了, 看来是由于 journald 服务的问题导致的日志问题 在 journald 中, 有如下两个参数跟此问题相关: vim /etc/systemd/journald.conf RateLimitInterval RateLimitBurst RateLimitInterval是指定时间间隔, 意思就是说, 在RateLimitInterval这段时间内的日志总量(总条数)控制在RateLimitBurst以内. 这两个参数搭配使用可以用来控制日志速率, 避免由于大量日志输出导致的一系列性能问题. 该问题的根源在于该主机目前日志输出的速率超出了 journald 默认的配置, 你可以自定定义该速率, 也可以将RateLimitInterval设置为0, 以禁用速率控制 接下来重启 journald 以生效配置 systemctl restart systemd-journald https://docs.lvrui.io/2018/11/22/systemd-journal-Suppressed-N-messages/ systemd-journald这个服务重启的时候, 会给所有的进程发送SIGPIPE信号, 而在默认的 systemd 定义中, SIGPIPE 信号属于正常退出的范围. 所以即使 unit 文件配置了Restart on-failure也不会被重启 https://docs.lvrui.io/2018/11/22/systemd-journald%E7%9A%84SIGPIPE%E4%BF%A1%E5%8F%B7BUG/
ufw UFW,即简单防火墙 uncomplicated firewall,是一个 Arch Linux、Debian 或 Ubuntu 中管理防火墙规则的前端。 UFW 通过命令行使用(尽管它有可用的 GUI),它的目的是使防火墙配置简单(即不复杂uncomplicated)。 # check ufw status sudo ufw status # Status: active # Status: inactive docker 网络 会忽略 ufw 配置 https://docs.docker.com/engine/network/packet-filtering-firewalls/#docker-and-ufw
golang, function types, 函数类型 function types A function type denotes the set of all functions with the same parameter and result types. 示例 package main import "fmt" // function types type Greeting func(name string) string func say(g Greeting, n string) { fmt.Println(g(n)) } func english(name string) string { return "Hello, " + name } func main() { say(english, "World") } 输出Hello, World ...
长选项, 短选项, short options, long options 1.Linux命令长选项"–“和短选项”-“和没有”-“选项背景: 在解释这些区别之前我们先了解一下有关linux的背景知识,这个需要大家先认真看完就会对这些区别有更深入的了解,对linux也有更深的了解: (1)Unix操作系统在操作风格上主要分为System V和BSD(目前一般采用BSD的第4个版本SVR4),前者的代表的操作系统有Solaris操作系统,在Solaris1.X之前,Solaris采用的是BSD风格,2.x之后才投奔System V阵营。后者的代表的操作系统有FreeBSD。 (A)System V它最初由AT&T开发,曾经也被称为AT&T System V,是Unix操作系统众多版本中的一支。在1983年第一次发布,一共发行了4个System V的主要版本,System V Release4,或者称为SVR4,是最成功的版本,该版本有些风格成为一些UNIX共同特性的源头,如下表格的初始化脚本/etc/init.d。用来控制系统的启动和关闭。 (B)BSD(Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学(Uni Versity of California, Berkeley)开创。BSD用来代表由此派生出的各种套件集合。 (2)关于System V和BSD风格以及他们与Linux的关系: (A)System V 和BSD同出于AT&T实验室的两个不同的部门,SystemV是一个Unix的商业化标准,BSD为Unix标准化的Berkeley风格。 (B)由于Linux是Linus Torvalds在以Unix为构架的系统上重新开发的,但仍沿用了两大Unix系统进程的风格,实事上应该确切的说Linus Torvalds只开发了kernel,而软件依然来自GNU和GPL两个组织。 目前只有Slackware是Linux发行版中唯一使用BSD风格的版本。其他的就是FreeBSD、NetBSD和OpenBSD三个著名的BSD发行版,并遵循「GPL规范」。在商业版的Unix及多数Linux发行版使用SystemV风格的init『可能有版权纠纷问题』。Linux代表的有:RedHat、Suse、MDV、MagicLinux、Debian等几乎大部分发行版。Unix代表的有AIX、IRIX、Solars、HP-UX。 2.Linux命令长选项”–“和短选项”-“和没有”-“选项的全部写法 (1)选项前有一横“-”,如“ls -a”(含义:list all,列出所有当前文件夹的文件) (2)选项前有两横“–”,如“ls –all”(含义:list all,列出所有当前文件夹的文件) (3)选项前有一横“-”,如“tar -xzvf”(tar命令用于对文件打包压缩或解压,格式为:“tar [选项] [文件]”,-xzvf是4个参数的组合体,tar命令最初的设计目的是将文件备份到磁带上(tape archive),因而得名tar) (4)选项前没有任何横,如“tar xzvf” 3.Linux命令长选项”–“和短选项”-“和没有”-“选项的详细解释 (1)短选项(short options):顾名思义,就是短小参数。它们通常包含一个连字号‘-’和一个字母(大写或小写字母)。例如:-s,-h等 (2)长选项(long options):长选项,包含了两个连字号”–“和一些大小写字母组成的单词。例如:–size,–help等 (3)参数前有横的是 System V风格 (4)参数前没有横的是 BSD风格 4.Linux命令长选项”–“和短选项”-“的意义及额外备注 (1)一个程序通常会提供包括short options和long options两种参数形式的参数,例如:“ls -a"和“ls –all”等价 (2)因为短选项(short option)是可以合并的,如-sh,为了区分sh是一个选项还是两个选项s和h的组合,对于组合选项用单连字符’-’,如果是单一选项sh则要用双连字符’–’。例如:-sh表示-s和-h的组合,如果要表示为一个选项需要用长选项–sh。 (3)但是对于一些命令,它们不遵循以上的规则,例如:“find -type d -mindepth 2”和“find -name -fstype”(它们是单连字符’-‘连接一个完整单词,不符合3(1)和3(2)) ———————————————— 版权声明:本文为CSDN博主「快乐李同学(李俊德-大连理工大学)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/wq6ylg08/article/details/88812451 ...
go env 名称 说明 GOARCH 程序构建环境的目标计算架构 GOBIN 存放可执行文件的目录的绝对路径 GOCHAR 程序构建环境的目标计算架构的单字符标识 GOEXE 可执行文件的后缀 GOHOSTARCH 程序运行环境的目标计算架构 GOOS 程序构建环境的目标操作系统 GOHOSTOS 程序运行环境的目标操作系统 GOPATH 工作区目录的绝对路径 GORACE 用于数据竞争检测的相关选项 GOROOT Go 语言的安装目录的绝对路径 GOTOOLDIR Go 工具目录的绝对路径 https://www.jianshu.com/p/35a4ec1b3067
比特, 字节, 字, bit, byte, word 位 (bit) 来自英文bit,音译为"比特",表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。一个二进制位只可以表示0和1两种状态 (2^1. ;两个二进制位可以表示00、01、10、11四种(2^2) 状态;三位二进制数可表示八种状态 (2^3) … 字节 (byte) 字节来自英文Byte,习惯上用大写的"B"表示。 字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特 (1Byte=8bit) 。八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码 数据存储是以“字节” (Byte)为单位,数据传输是以大多是以“位” (bit,又名“比特”)为单位,一个位就代表一个0或1 (即二进制),每8个位 (bit,简写为b)组成一个字节 (Byte,简写为B),是最小一级的信息单位。 还可以从以下几个方面来理解: 1.字节(Byte)是电脑中表示信息含义的最小单位,因为在通常情况下一个ACSII码就是一个字节的空间来存放。而事实上电脑中还有比字节更小的单位,因为一个字节是由八个二进制位组成的,换一句话说,每个二进制位所占的空间才是电脑中最小的单位,我们把它称为位,也称比特 (bit)。由此可见,一个字节等于八个位。人们之所以把字节称为电脑中表示信息含义的最小单位,表示最基本的字符,是因为一个位并不能表示我们现实生活中的一个相对完整的信息。另外,内存中运算的最小存储单位是字节,位运算也是在一个字节的存储单位的基础上进行的,所以存储的最小单位可以理解为字节。 https://cloud.tencent.com/developer/article/1353743 字长 CPU在单位时间内(同一时间)能一次处理的二进制数的位数 字 word 计算机进行数据处理时,一次存取、加工和传送的数据长度称为字 (word) 。一个字通常由一个或多个 (一般是字节的整数位) 字节构成。例如286微机的字由2个字节组成,它的字长为16;486微机的字由4个字节组成,它的字长为32位机。 计算机的字长决定了其CPU一次操作处理实际位数的多少,由此可见计算机的字长越大,其性能越优越。 8位的CPU字长为8位,一个字等于一个字节,一次只能处理一个字节,而32位的CPU字长为32位,一个字等于4个字节,一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节,一个字等于8个字节。 另一种说法 字 在计算机中,一串数码作为一个整体来处理或运算的,称为一个计算机字,简称字。 字通常分为若干个字节(每个字节一般是8位)。在存储器中,通常每个单元存储一个字,因此每个字都是可以寻址的。字的长度用位数来表示。 在计算机的运算器、控制器中,通常都是以字为单位进行传送的。字出现在不问的地址其含义是不相同。例如,送往控制器去的字是指令,而送往运算器去的字就是一个数。 在计算机中作为一个整体被存取、传送、处理的二进制数字符串叫做一个字或单元,每个字中二进制位数的长度,称为字长。一个字由若干个字节组成,不同的计算机系统的字长是不同的,常见的有8位、16位、32位、64位等,字长越长,计算机一次处理的信息位就越多,精度就越高,字长是计算机性能的一个重要指标。目前主流计算机都是64位机。 注意字与字长的区别,字是单位,而字长是指标, 指标需要用单位去衡量。 正象生活中重量与公斤的关系,公斤是单位,重量是指标,重量需要用公斤加以衡量。 字长 计算机的每个字所包含的位数称为字长。 根据计算机的不同,字长有固定的和可变的两种。固定字长,即字长度不论什么情况都是固定不变的;可变字长,则在一定范围内,其长度是可变的。 计算的字长是指它一次可处理的二进制数字的数目。计算机处理数据的速率,自然和它一次能加工的位数以及进行运算的快慢有关。如果一台计算机的字长是另一台计算机的两倍,即使两台计算机的速度相同,在相同的时间内,前者能做的工作是后者的两倍。 字长是衡量计算机性能的一个重要因素。 字节 字节是指一小组相邻的二进制数码。通常是8位作为一个字节。它是构成信息的一个小单位,并作为一个整体来参加操作,比字小,是构成字的单位。 在微型计算机中,通常用多少字节来表示存储器的存储容量。 字块 在信息处理中,一群字作为一个单元来处理的称为"字块".也称"字组"。例如,储存于磁鼓的一个磁道上的字群就称为一个字块。在磁带上通常每120个字符就间隔一个字块际志,也称为一个字块。块与块之间一般留1.27―2.54厘米(1/2一1英寸)的间隔。在大容量存储中,信息都是以字块为单位而存入的,因此只有字块才是可选址的。目前,在高速绥冲技术中也引入了"字块"的概念。 B = 8 bit KB,2^10: 1024 BYTE. MB,2 的 20 次方 : 1048576 BYTE, 或 1024 KB. GB,2 的 30 次方 : 1073741824 BYTE, 或 1024 MB. TB,2 的 40 次方 : 1099511627776 BYTE, 或 1024 GB. PB,2 的 50 次方 : 1125899906842624 BYTE, 或 1024 TB. EB,2 的 60 次方 : 1152921504606846976 BYTE, 或 1024 PB. ZB,2 的 70 次方 : 1024 EB. YB,2 的 80 次方 : 1024 ZB. ...
1、1.5、2.5、4、6平方电线负荷 一个电工常用的"经验公式": 只要是铜芯电线,每平方毫米的截面积可以安全通过4-5A的额定电流;在220V单相电路中,每1KW的功率,其电流约为4.5A左右;在380V三相平衡电路中,每1KW的功率,其电流约为2A左右。 铜芯线,一是明线安装最大允许工作电流是20A,即4400瓦;二是暗装套钢管,电流是16A,功率为3520瓦;三是pvc管暗装,电流是14A,那么功率为3000瓦。 https://zhuanlan.zhihu.com/p/30847255
slf4j、jcl、jul、log4j1、log4j2、logback slf4j > log4j2.x log4j-slf4j-impl slf4j 到 log4j2 的桥梁 直接依赖log4j1.x的换成log4j2输出, log4j1.x > slf4j 排除掉log4j jar包 引入依赖包 log4j-over-slf4j (实现log4j1桥接到slf4j) <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.7.32</version> </dependency> commons-logging commons-logging:commons-logging的原生全部内容 org.apache.logging.log4j:log4j-jcl commons-logging/jcl > log4j2.x org.apache.logging.log4j:log4j-jcl: commons-logging 桥接到 log4j2 <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-jcl --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.13.3</version> </dependency> jcl-over-slf4j commons-logging/jcl > slf4j https://blog.wiloon.com/?p=8549 jcl-over-slf4j 原本是通过 JCL 输出日志的,会被 jcl-over-slf4j 桥接到slf4j输出 slf4j > log4j1.x slf4j-log4j12 使用 slf4j + log4j1.x 输出日志 https://my.oschina.net/pingpangkuangmo/blog/410224?p=2 jul>slf4j>log4j2 <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>1.7.25</version> </dependency> // Optionally remove existing handlers attached to j.u.l root logger SLF4JBridgeHandler.removeHandlersForRootLogger(); // (since SLF4J 1.6.5) // add SLF4JBridgeHandler to j.u.l's root logger, should be done once during // the initialization phase of your application SLF4JBridgeHandler.install(); https://github.com/influxdata/influxdb-java/issues/443
并发, 并行 并发 (concurrency) , 并行 (parallelism) 并行指物理上同时执行,并发指能够让多个任务在逻辑上交织执行的程序设计 https://www.cnblogs.com/f-ck-need-u/p/11161481.html https://laike9m.com/blog/huan-zai-yi-huo-bing-fa-he-bing-xing,61/ https://blog.golang.org/concurrency-is-not-parallelism https://talks.golang.org/2012/waza.slide#1
三极管 https://www.cnblogs.com/tdyizhen1314/archive/2012/11/06/2757644.html http://www.datasheetdir.com/GALAXY-S8550+PNP-Transistors http://www.jianshe99.com/html/2008/1/li0063319180020.html
raspberry pi, gpio, golang https://github.com/stianeikeland/go-rpio package main import ( "fmt" "github.com/stianeikeland/go-rpio/v4" "time" ) func main() { err := rpio.Open() if err != nil { fmt.Println(err) return } pin := rpio.Pin(17) pin.Low() time.Sleep(5 * time.Second) pin.High() }
USB数据线 编号 定义 颜色识别 1 VBUS Red (红色) 2 D- White (白色) 3 D+ Green (绿色) 4 GND Black (黑色)