Go stacks

Go stacks Viper: 配置管理 Bun ORM: ORM 框架 Resty: HTTP 客户端

2019-09-17 · 1 min · 11 words · -

Making ipset,iptables persistent

Making ipset,iptables persistent ipset save > /etc/ipset.conf systemctl enable ipset.service iptables-save -f /etc/iptables/iptables.rules systemctl enable iptables.service https://wiki.archlinux.org/index.php/Ipset https://wiki.archlinux.org/index.php/Iptables

2019-09-09 · 1 min · 18 words · -

圈复杂度(Cyclomatic Complexity)

圈复杂度(Cyclomatic Complexity) 圈复杂度(Cyclomatic Complexity)是一种代码复杂度的衡量标准。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立线性路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和维护。程序的可能错误和高的圈复杂度有着很大关系。 下面这个实例中,单元测试的覆盖率可以达到100%,但是很容易发现这其中已经漏掉了一个NPE的测试用例。case1方法的圈复杂度为2,因此至少需要2个用例才能完全覆盖到其所有的可能情况。 //程序原代码,圈复杂度为 2 public String case1(int num) { String string = null; if (num == 1) { string = “String”; } return string.substring(0); } //上面代码的单元测试代码 public void testCase1(){ String test1 = case1(1); } 圈复杂度主要与分支语句 (if、else、,switch 等) 的个数成正相关。当一段代码中含有较多的分支语句,其逻辑复杂程度就会增加。 圈复杂度的计算方法,可以参考这篇文章: http://blog.csdn.net/lg707415323/article/details/7790660 可以直接降低圈复杂度的 9 种重构技术 (针对结构化编程) Composing Methods(重新组织你的函数) Extract Method(提炼函数) Substitute Algorithm(替换你的算法) Simplifying Conditional Expressions(简化条件表达式) Decompose Conditional(分解表达式) Consolidate Conditional Expression(合并表达式) Consolidate Duplicate Conditional Fragments (合并重复的条件) Remove Control Flag(移除控制标记) Making Method Calls Simpler(简化函数调用) Separate Query from Modifier(将查询函数和修改函数分离) <2>PARAMETERIZE Method(令函数携带参数) ...

2019-09-09 · 1 min · 91 words · -

0day

0day 0day,中文意思"0日/零日"或"零日漏洞"或"零时差攻击", 零日这个词历史很悠久,最早出现是在战争中,将一些大规模可毁灭世界的事物 (一般是武器) 称之为零日危机 (类似的还有末日时钟), 在世界毁灭之后,重新建立新文明的第一天,即称之为第0天。 后来引入到黑客文化,将一些大规模、致命性、高威胁性、能够造成巨大破坏的漏洞也称为零日漏洞 (并不是所有漏洞都叫0day), 缩写即为: 0day。 版权声明: 本文为CSDN博主「EDDJH_31」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接: https://blog.csdn.net/EDDJH_31/article/details/67637890

2019-09-09 · 1 min · 19 words · -

CPU steal time

CPU steal time Steal Time(st),用来衡量被虚拟机监视器(Hypervisor)偷去给其它虚拟机使用的 CPU 时间所占的比例。 https://blog.csdn.net/jessysong/article/details/73571878 Netflix 很关注 CPU 的 Steal Time。他们的策略是: 如果是当前虚拟机的 Steal Time 超过了你们设置的阈值,他们会关闭这台虚拟机并且在另外一台物理机上面重启。 如果你想要部署虚拟环境 (例如: Amazon EC2) , steal time 就是你想要关注的性能指标之一。 如果这个指标的数值很高,那么说明机器状态非常糟糕。什么是 steal time?什么会引发高 steal time?多少才是警戒值 (你需要做什么) ? CPU Steal Time 的定义 From ibm: Steal time is the percentage of time a virtual CPU waits for a real CPU while the hypervisor is servicing another virtual processor. 你的虚拟机 (VM) 会与虚拟环境的宿主机上的多个虚拟机实例共享物理资源。其中之一共享的就是CPU时间切片。如果你的VM的物理机虚拟比是1/4, 那么它的CPU使用率不会限制于25%的CPU时间切片-它能够使用超过它设置的虚拟比。 (有别于内存的使用,内存大小是严格控制的) 。 哪里可以看到CPU Steal Time? 你可以使用Linux 的 TOP 命令来看到实时的一些性能指标。CPU相关的其中一行内容如下: ...

2019-09-03 · 1 min · 188 words · -

svn diff

svn diff 转载于: http://blog.sina.com.cn/s/blog_4e5668630100ag2u.html http://www.upsdn.net/html/2004-12/65.html $ svn diff -r 2:3 rules.txt (1)Index: rules.txt (2)=================================================================== (3)- rules.txt (revision 2) (4)+++ rules.txt (revision 3) (5)@@ -1,4 +1,4 @@ (6)Be kind to others (7)-Freedom = Chocolate Ice Cream (8)+Freedom = Responsibility (9)Everything in moderation (10)Chew with your mouth open 第一行,显示文件 第二行,分隔符 第三行,老版本用"-“表示 第四行,新版本用”+“表示 第五行,(5)@@ -1,4 +1,4 @@ -表示老版本,+++表示新版本,@@ (老版本) 起始行,行数 (新版本) 起始行,行数 应改为,老版本从第1行开始显示,共显示4行,即显示1~3行; 新版本一样 第六行,两个版本都有 第七行,只有老版本有 第八行,只有新版本有 第九行,两个版本都有 第十行,两个版本都有 unified diff format统一差异格式 一种标准的文件比较格式, 不同的行之前标上’+‘或者’-‘表示不同的文件, 新文件用’+‘表示, 旧文件用’-‘表示 ...

2019-09-02 · 1 min · 113 words · -

MySQL update in

MySQL update in EXPLAIN UPDATE table0 w SET w.field0 ='foo' WHERE (w.key0,w.key1,w.) IN ( SELECT a.* FROM ( SELECT w1.key0,w1.key1,w1.key2 FROM table0 w1 WHERE w1.field0 IS NULL AND w1.key2=0 LIMIT 10) AS a ); EXPLAIN UPDATE table0 w0 JOIN (SELECT *FROM table0 w1 WHERE w1.field0 IS NULL AND w1.key0=0 LIMIT 10) w2 ON w0.key0=w2.key0 AND w0.key1=w2.key1 AND w0.key2=w2.key2 SET w0.field0='foo'

2019-08-29 · 1 min · 60 words · -

MySQL update 嵌套 select

MySQL update 嵌套 select 当你希望更新一批值,且值是通过select条件查询出来时,下面这个错误应该不陌生 You can’t specify target table ‘x’ for update in FROM clause。 错误示范 1: A B 有关联同一个key_id , 根据 B表符合条件 -> 更新A表val值。 UPDATE A a SET a.val = 2 WHERE a.id IN ( SELECT a.id FROM A LEFT JOIN B ON b.key_id = a.key_id WHERE b.satisfy = 1) 解决思路 1: 使用 INNER JOIN (最简洁) UPDATE A a INNER JOIN B b ON b.key_id = a.key_id SET a.val = 2 WHERE b.satisfy = 1 ...

2019-08-28 · 1 min · 112 words · -

Screeps

Screeps https://screeps-cn.github.io/introduction.html https://github.com/rustyscreeps/screeps-game-api https://twodam.net/Tutorial-for-Screeps-0 https://github.com/aphistic/screeps-deployer https://github.com/rustyscreeps/screeps-starter-rust https://github.com/hinshun/screepsapi

2019-08-27 · 1 min · 7 words · -

toml

toml https://toml.io/cn/ # comments java https://github.com/mwanji/toml4j goland https://github.com/pelletier/go-toml/tree/v2

2019-08-24 · 1 min · 8 words · -

slf4j 打印java异常堆栈信息

slf4j 打印java异常堆栈信息 SLF4J 1.6.0以前的版本,如果打印异常堆栈信息,必须用 log.error(String msg, Throwable t) log.info等对应方法. 如果msg含有变量,一般用String.format方法格式化msg. 如果用 error(String format, Object… arguments) 等其它方法,异常堆栈信息会丢失. 幸好,SLF4J 1.6.0以后的版本对这个不友好的异常信息log改进了. error(String format, Object… arguments)这个方法也会打印异常堆栈信息,只不过规定throwable对象必须为 最后一个参数.如果不遵守这个规定,异常堆栈信息不会log出来. 官方FAQ: http://www.slf4j.org/faq.html Can I log an exception without an accompanying message? In short, no. If e is an Exception, and you would like to log an exception at the ERROR level, you must add an accompanying message. For example, logger.error(“some accompanying message”, e); You might legitimately argue that not all exceptions have a meaningful message to accompany them. Moreover, a good exception should already contain a self explanatory description. The accompanying message may therefore be considered redundant. ...

2019-08-23 · 3 min · 492 words · -

回文,palindrome

回文,palindrome 回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如 madam

2019-08-19 · 1 min · 3 words · -

Java Double 浮点数 比较大小 & 相等比较

‘Java Double 浮点数 比较大小 & 相等比较’ public class DoubleUtils { private static final double DEFAULT_DELTA = 0.000001; //默认比较精度 //比较2个double值是否相等 (默认精度) public static boolean considerEqual(double v1, double v2) { return considerEqual(v1, v2, DEFAULT_DELTA); } //比较2个double值是否相等 (指定精度) public static boolean considerEqual(double v1, double v2, double delta) { return Double.compare(v1, v2) == 0 || considerZero(v1 - v2, delta); } //判断指定double是否为0 (默认精度) public static boolean considerZero(double value) { return considerZero(value, DEFAULT_DELTA); } //判断指定double是否为0 (指定精度) public static boolean considerZero(double value, double delta) { return Math.abs(value) <= delta; } /** * @param v1 v1 * @param v2 v2 * @return result * v1>v2, result = 1 * v1=v2, result =0 * v1<v2, result =-1 */ public static int compare(double v1, double v2) { if (v1 - v2 > DEFAULT_DELTA) { return 1; } else if (considerEqual(v1, v2)) { return 0; } else { return -1; } } } https://blog.csdn.net/z69183787/article/details/81318486

2019-08-19 · 1 min · 143 words · -

ingress

ingress XM (Exotic Matter,外来能量) AP (Access Points,权限点数) Portals 直译为传送门或者据点,俗称Po 处于一个Portal的40米范围内才可以与之交互 (你周围那个圈就是40米半径的圆) Hack (中译名为"入侵") Portal是主要的物资获取方式 Links/ Fields (连接/区域或场) 收集Keys才能建立Link 持有一个Portal的Key才能从别的Portal向其发起Link (连接) (成功建立Link会消耗掉对应的Portal Key) 在几个Portals之间建立 Link构成三角形就是建成Control Field (控制区/场) 三角形,三角形,三角形。重要的事情说三遍,重点就是连成三角形 低等级升级方式 在中立Portal上面部署 (Deploy) 谐振器 (Resonators) 以占据 在友方阵营占据Portal的空槽上部署 (Deploy) 谐振器 (Resonators) 建立大量的短距离Link和小的Control Field (控制区/场) 给己方占据的Portal充能 Hack (入侵) 敌方占据的Portal也可以获得AP,但请注意,敌方Portal会反击造成你的XM损失 申请po 需要升级到 L10,po 申请的审批工作同样由玩家完成,所需等级为 L12 Portal Key Portal Key (钥匙) ,保存着对应Portal的信息。可以使用key进行充能或建立link。 虽然key被标注了等级,但是这实际上是对应Portal的等级。任何等级的agent都可以使用任何等级的key。 Key可以被放置在Key Locker中而不占用库存。 用处 Key可以用来远程观察Portal的resonator状态,mod状态,周围环境等,请参看Portal。 Key可以用来远程为Portal补充能量,请参看充能。 Key可以用来建立link,请参看Link。 一些有纪念意义的Portal的key也可以作为收藏品。 获取key Key的掉率是独立与其他物品的。社区研究表明,普通hack的掉率约为75%,而Glyph Hack的掉率约为50%。hack一个无阵营Portal的掉落几率会增加10%。 Agent如果在库存中有某个key,将不会再次hack到相同的key。学习如何绕过这个限制是新手训练的重要部分。 获取多个相同的key有以下方法: 将key丢弃在地上。 将key放在Capsule,MUFG Capsule或者Key Locker里。 ...

2019-08-19 · 1 min · 107 words · -

Java Set

Java Set 版权声明: 本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/qq_33642117/article/details/52040345 一,Set Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素 用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。 对象的相等性 引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号 (java是依据对象的内存地址计算出的此序号) ,所以两个不同的对象的hashCode值是不可能相等的。 如果想要让两个不同的Person对象视为相等的,就必须覆盖Object继下来的hashCode方法和equals方法,因为Object hashCode方法返回的是该对象的内存地址,所以必须重写hashCode方法,才能保证两个不同的对象具有相同的hashCode,同时也需要两个不同对象比较equals方法会返回true 该集合中没有特有的方法,直接继承自Collection。 -| Itreable 接口 实现该接口可以使用增强for循环 -| Collection 描述所有集合共性的接口 -| List接口 可以有重复元素的集合 -| ArrayList -| LinkedList -| Set接口 不可以有重复元素的集合 案例: set集合添加元素并使用迭代器迭代元素。 public class Demo4 { public static void main(String[] args) { //Set 集合存和取的顺序不一致。 Set hs = new HashSet(); hs.add(“世界军事”); hs.add(“兵器知识”); hs.add(“舰船知识”); hs.add(“汉和防务”); System.out.println(hs); // [舰船知识, 世界军事, 兵器知识, 汉和防务] Iterator it = hs.iterator(); while (it.hasNext()) { System.out.println(it.next()); ...

2019-08-19 · 1 min · 84 words · -

typescript 数据类型

typescript 数据类型 数字 和 JavaScript 一样,TypeScript 里的所有数字都是浮点数。 这些浮点数的类型是 number。 除了支持十进制和十六进制字面量,TypeScript 还支持 ECMAScript 2015 中引入的二进制和八进制字面量。 let decLiteral: number = 6; let hexLiteral: number = 0xf00d; let binaryLiteral: number = 0b1010; let octalLiteral: number = 0o744; https://zhongsp.gitbooks.io/typescript-handbook/content/doc/handbook/Basic%20Types.html

2019-08-17 · 1 min · 35 words · -

typescript 数组

typescript 数组 版权声明: 本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/honey199396/article/details/80750408 数组的声明 let array1:Array; let array2:number[]; 数组初始化 let array1:Array = new Array(); let array2:number[] = [1,2,3]; 数组元素赋值、添加、更改 let array:Array = [1,2,3,4]; console.log(array) // [1, 2, 3, 4] array[0] = 20; // 修改 console.log(array) // [20, 2, 3, 4] array[4] = 5; // 赋值 console.log(array) // [20, 2, 3, 4, 5] ...

2019-08-17 · 1 min · 148 words · -

TOML、YAML, JSON、XML、CSON, HOCON

TOML、YAML, JSON、XML、CSON, HOCON json json 规范要求字符串要用双引号括起来.

2019-08-15 · 1 min · 6 words · -

Redis3 集群 数据迁移

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 三、修改配置 ...

2019-08-06 · 4 min · 777 words · -

Desk Check

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

2019-08-02 · 1 min · 27 words · -