幂等与全局ID

什么是幂等?我们这里所说的幂等是指非主观因素造成了多次相同的请求,而做幂等设计要求这些相同的请求无论是做一次还是多次不产生副作用。即 f...f(f(x))=f(x)。产生多次请求原因有很多比如前端没有做防抖的多次点击提交,MQ消息投递失败重试等。

Java容器类

Java提供的容器类如List、Set、Map是语言的基础,熟练掌握是必备技能,本文就Java中容器相关的坑与知识做一个总结整理。本文涉及的代码摘自OpenJDK jdk9-b94,部分逻辑在不同版本的实现有所差异。

BIO、NIO与AIO

IO是操作系统提供的基础功能,之前介绍了网络Server模型的演进就是基于IO的改进。在语言层面,不同语言对操作系统的IO能力进行了不同的封装与接口的统一,如Java的NIO在linux平台使用的epoll而windows平台使用的iocp,这也是Java作为高级语言层面对操作系统功能统一封装的一个体现。本文结合Java具体代码了解一下什么是BIO、NIO与AIO。

为什么会产生微服务架构

Web应用架构受系统用户量、开发人员组织方式影响严重。过去二十年互联网迅速发展,Web架构也从单体式演进出微服务,背后还有比如 Martin Fowler 提出的理论支撑。虽然每个人都听说过微服务,但是很多人并不太清楚为什么要这么做,应该怎么做,怎么拆。要回答这个问题我认为需要从Web架构的演化历史的高度去理解这些架构设计中的取舍。

再谈Java GC

GC是影响JVM性能的重要因素,不同jvm厂商、版本实现了不同垃圾收集器和算法,各有优缺点。本文就jvm内存划分做进一步补充说明并聊聊各种常见的垃圾收集器,它们的基本算法和使用场景以及一些GC调优的方法。

理解并实现IoC与AOP

IoC(Inversion of Control)与AOP(Aspect Oriented Programming)是java web编程领域领的重要概念。java作为面向对象的强类型静态语言在编程时存在很多局限性,比如对象之间的复杂依赖关系处理,比如运行时获取修改代码meta信息等。本文就聊聊IoC与AOP是什么以及怎样实现。

JavaScript线程与异步语法进化

我们知道JavaScript运行环境通常都是单线程的。在浏览器中,JavaScript代码主要运行在主线程,也就是UI线程中,为避免阻塞页面,语言层面提供了异步执行的能力,在浏览器实现的时候会将这些异步任务放到特定的线程去执行如ajax,setTimeout等。同时库支持层面上JavaScript的异步语法也经历了几次重大变化。

JavaScript的面向对象与原型链

面向对象是一种常见的编程思想,Java、C++都非常卓越的实现了面向对象编程。对这些语言少有熟悉的同学都知道Java、C++中存在类型,实例这两个重要概念来描述面向对象的特性。但是JavaScript并没有特别清晰的类型与实例的概念,JavaScript通过原型链的方法实现面向对象编程的特性,本文就来聊聊相关知识与历史。

JavaScript中可能的一些坑

众所周知 JavaScript如今已广泛应用在Web编程领域,但它的诞生却是在 10 天之内,虽然操刀设计的大神很牛,但也难免留下了不少的后遗症,同时在应用领域为保证兼容很多问题也没有得到很好的解决,此时就要求开发者在程序开发的过程中注意避免错误。首先让人迷惑的就是JavaScript标准规范的命名,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。由于JavaScript是网景的注册商标所以标准就以ECMAScript(简称ES)保留下来。

类的编译与加载及JVM内存划分

JVM(Java Virtual Machine)优化的已经很完善以至于大家都感觉不到他的存在。面对复杂并发业务通常架构上扩容加机器能够得到解决,但是到了一定阶段扩容仍然效果不佳的时候从jvm入手降低服务器内存、CPU使用是非常靠谱的选择。同时了解jvm有助于理解java应用的生命周期与运行环境,编写性能更好的代码与排查故障。