从字节码认识Java语法的实现原理

众所周知,字节码是Java虚拟机中非常重要的一部分,通过了解字节码我们也可以Java中语法的实现,如异常处理的逻辑、以及同步代码块的实现方式。
下面将会从中抽取一些示例,结合字节码的方式看看从ByteCode的角度去了解Java语法的实现逻辑。

Docker构建镜像的最佳实践

Docker多阶段构建的特性是在17.05以后引入的新功能,旨在解决编入和构建逻辑复杂的问题,依次减少每一个图层。想象一下,你需要自动构建一个基于Maven或者基于NodeJS的项目,那么通过源码构建的时候Maven或者NPM 都会下载大量的依赖的问题,这些文件旨在构建的时候的时候有用,我们也仅仅是需要一个JAR文件或者NodeJS编译出来的文件!!!

使用 emoji 表情丰富你的 Git 提交日志

在使用emoji 提交日志的时候推荐信息遵循以下格式:

:emoji1: :emoji2: 不超过 50 个字的摘要,首字母大写,使用祈使语气,句末不要加句号 引用相关 issue 或 PR 编号

初次提交示例:

git commit -m “:tada: Initialize Repo”

对NPE的思考与防范

NPE异常是一个非常常见的异常信息,但是其造成的危害却不可忽视。在本周以及上周的编写代码以及阅读代码的过程,发现应用中出现NPE的原因主要有三种

  1. 调用某个方法,该方法返回 null 未判断 造成了NPE
  2. 不熟悉或者遗忘某个方法的逻辑,导致传入参数为NULL,造成了NPE
  3. 使用某个对象对其中的内部成员不熟悉,直接使内部成员,造成了NPE

InnoDB 的事务以及实现原理

事务是数据库系统和文件系统最重要的区别之一。引入事务最重要的目的是: 事务会把数据库从一种状态转移到另外一种状态,在数据库提交之后,数据库的修改要么全部提交,要么全部回滚。InnoDB 存储引擎完全支持事务的四大特性(ACID): 即 原子性、一致性、隔离性以及持久性。

延时任务的最佳实践

饿了么,或者在美团等电商平台下完单后,超过一定的时间,订单就被自动取消或者自动收货了,这就是延时任务。延时任务的应用场景相当广泛,不仅仅上面所说的外卖系统,还有12306,或者是淘宝,携程等等 都有这样的场景。这延时任务是怎么实现的呢?

现代化的反射-方法句柄

方法句柄(method handle)是JSR 292中引入的一个重要概念,它是对Java中方法、构造方法和域的一个强类型的可执行的引用。这也是句柄这个词的含义所在。通过方法句柄可以直接调用该句柄所引用的底层方法。从作用上来说,方法句柄的作用类似于2.2节中提到的反射API中的Method类,但是方法句柄的功能更强大、使用更灵活、性能也更好。实际上,方法句柄和反射API也是可以协同使用的,下面会具体介绍。在Java标准库中,方法句柄是由java.lang.invoke.MethodHandle类来表示的。

秒杀系统的架构设计

库存只有一份,所有人会在集中的时间读和写这些数据。 例如小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。 又例如12306抢票,亦与秒杀类似,瞬时流量更甚。瞬时流量太高,造成大量的锁表,系统的性能瓶颈 等因素导致系统无法在短时间内提供相应,甚至出现系统崩溃的可能,所以一个优秀的秒杀系统,虽然现在看着烂大街,但是细细琢磨,这其中的营养往往非常丰富!

经典架构设计的分析

系统架构的重要性已经不言而喻,一个良好的架构好比一栋摩天大厦的基础结构,架构选型的正确是保证大厦稳定的根本。而系统构架是对已确定的需求的技术实现构架、作好规划,运用成套、完整的工具,在规划的步骤下去完成任务。抽象来说,它是计算机系统结构,或称计算机体系结构,是一个系统在其所处环境中最高层次的概念;

系统架构目前有多重多样,下面列举了一些常见的架构设计,本文将对这几种常见的设计做出分析与讨论。