因为 Lua 本身并没有继承之类的语法,所以我们不能通过 OOP 的套路来扩展模块,不过实际上对于 Lua 来说,扩展一个模块有更简单的方法,下面我们以 lua-resty-string 模块中的 aes 加解密功能为例子来说明一下。
lua-resty-string 模块中的 aes 加解密功能
在 aes 加解密的过程中,有一个「填充」的过程,相关技术细节可以参考我以前写的「聊聊AES」,当然,不懂也没关系,你只要知道目前的 resty.aes 不支持配置填...
阅读全文
回调嵌套
在ES6语法出现之前,如果想要若干个异步过程按顺序执行,则需要使用回调嵌套,比如这里有个step函数,执行需要一定的时间:
var step = function(isError, cb) {
setTimeout(function() {
console.log(new Date())
cb && cb(isError && new Error('step Error'), isError)
}, 1000)
}
如果想要执行两次step,并且必须按顺序个条一条执行,在以前一般要使用回调嵌套:
...
阅读全文
FlexGet ,媒体文件的多功能自动化工具。可以支持 torrents, nzbs, podcasts, comics, TV, movies, RSS, HTML, CSV, 等等作为输入。FlexGet 是 Python 编写的,所以如果想要实现更加复杂的功能,也可以自己写脚本来处理。
FlexGet 一大被称道的就是可以实现 PT 或者 BT 的自动下载,并且直接传给 Deluge, transmission, uTorrent, rTorrent, SABnzb 等等客户端进行下载。FlexGet 也集成了 trakt, thetvdb.com, imdb.com...
阅读全文
微服务监控领域,Tracing借助Metrics,可以在APM方面为开发运维人员提供更大帮助。本文采用Elastic APM和Grafana作为技术方案,分享借助Metrics对Tracing数据进行统计、分析与可视化,助力开发运维更高效
1. 微服务 Tracing 与 Metrics
1.1. 微服务监控三个领域 :Tracing 、 Logging 和 Metrics
在微服务领域,很早以来就形成了 Tracing 、 Logging 和 Metrics 相辅相成,合力支撑多维度、多形态的监控体系。
...
阅读全文
Java 在语法层面已经有了 synchronized 来实现管程,为什么还要在 JDK 中提供了 Lock 和 Condition 工具类来做这样的事情,这属于重复造轮子吗?
首先你可能会想到的是 synchronized 性能问题,但是我想告诉你的是 synchronized 在高版本的 JDK 中性能已经得到了大幅的提升,很多开发者开始提倡使用 synchronized,性能问题可以不断优化提升,它并不是重载轮子的原因。
大家都知道管程帮助我们解决了多线程资源共享...
阅读全文
Service Mesh作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。那么到底什么是Service Mesh?
Service Mesh定义
Service Mesh是微服务时代的TCP协议。
有了这样一个感性的初步认知,我们再来看到底什么是Service Mesh。提到Service Mesh,就不得不提微服务。根据维基百科的定义:
微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区...
阅读全文
相信你一定记得学习并发编程的一个入门级例子,多个线程操作一个变量,累加 10000 次,最后结果居然不是 10000。后来你把这个变量换成了并发包中的原子类型变量 AtomicLong,完美的解决了并发问题。假如面试官问:还有更好的选择吗?LongAdder 了解过吗?你能对答如流吗?
AtomicLong由来
AtomicLong 是 Java 1.5 并发包中提供的一个原子类,他提供给了我们在多线程环境下安全的并发操作一个整数的特性。并且性能还可...
阅读全文
LongAdder 工具类。我们知道了 LongAdder 中为了分散热点数据,存在一个 volatile 修饰的 Cell 数组。由于数组的连续存储特性,会存在伪共享问题,你知道 LongAdder 是如何解决的吗?
在探讨 LongAdder 是如何解决伪共享问题之前,我们要先梳理清一个概念,什么是伪共享和共享 ?
什么是共享
共享在 Java 编程里面我们可以这样理解,有一个 Share 类,它有一个 value 的属性。如下:
public class Share { in...
阅读全文
你用过 Java 中的 final 关键字吗?它有哪些作用?这也是出镜率极高的题目哦。
1. final 修饰类的时候代表这个类是不可以被扩展继承的,例如 JDK 里面的 String 类。
2. final 修饰方法的时候代表这个方法不能被子类重写。
3. final 修饰变量的时候代表这个变量一旦被赋值就不能再次被赋值。
想必上面这三点是大家所熟知的,但是下面这 2 点你想到了吗?
缓存
final 变量会被缓存在寄存器中而不需要去...
阅读全文