分布式锁的实现
在单机多线程环境中,JDK 提供了很多线程同步的工具,包括 synchronized 和 Lock 来帮助我们解决线程间代码同步的问题。但是现在的系统多是分布式的,这意味着我们需要一种能够处理进程级别的代码同步的工具,即常说的分布式锁。
在单机多线程环境中,JDK 提供了很多线程同步的工具,包括 synchronized 和 Lock 来帮助我们解决线程间代码同步的问题。但是现在的系统多是分布式的,这意味着我们需要一种能够处理进程级别的代码同步的工具,即常说的分布式锁。
实际上 Shiro 是支持 RESTful 风格的权限校验的,默认提供的 HttpMethodPermissionFilter
过滤器可以将 HTTP 请求的方法转化为相应的动词,并使用该动词构造对应的权限。
简单学习过 Shell 后,接下来继续学习 Shell 脚本。
Let's Encrypt
已经支持泛域名证书了,由于 acme.sh
实现了 acme 协议,可以从 Let's Encrypt
生成免费的证书,并且支持自动更新,所以这里使用它来快速实践一下。
在计算机科学中,Shell 俗称壳程序,用来区别于操作系统内核程序。Shell 首先是 UNIX/Linux 下的脚本编程语言,它是解释执行的,无需提前编译。同时它也是一个程序,为使用者(用户或其他应用程序)提供与内核交互的操作界面,它接收用户命令,然后通过命令解析调用相应的应用程序。
在 Java 中,运行时内存区域可以分为:程序计数器、虚拟机栈、本地方法栈、堆和方法区,其中程序计数器、虚拟机栈和本地方法栈是线程私有的,因此这部分划分的内存与线程的生命周期相同:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,每一个栈帧中分配多少的内存基本上在类结构确定之后就已知了(在概念模型中可以暂时忽略 JIT 编译器的优化),因此这几个区域的内存分配和回收都具有确定性。
ZooKeeper 是由雅虎开源的一个分布式协调服务,它是 Google Chubby 的开源实现,它对外提供一组简单的原语,分布式应用可以通过使用这些原语来实现一些更高级的服务,比如:数据发布与订阅(配置中心)、负载均衡、命名服务、分布式协调与通知、集群管理、Master 选举、分布式锁和分布式队列等。
分布式系统有一个重要的定理:布鲁尔定理(Brewer’s theorem),也被称为 CAP 定理。该理论由 Eric Brewer 在 2000 年的 PODC 会议上提出,后被证明从而成为一个定理。
ACID 是指数据库管理系统(DBMS)在写入或者更新数据的过程中,为保证事务的正确可靠所具备的四个特征:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。
按照国外一个比较权威的网站 DB-Engines 的分类,目前的数据库系统大概有 14 种之多,包括传统的关系型数据库、键值对存储数据库、文档型存储数据库、时间序列数据库、面向对象数据库、搜索引擎、图形数据库和列存储数据库等等。它们大致上可以简单划分为三大类:SQL、NoSQL 和 NewSQL。