JavaScript 之 bind、call 和 apply
在 js 中,bind、call 和 apply 这三个方法的作用很像,但是它们还是有一些区别的。
在 js 中,bind、call 和 apply 这三个方法的作用很像,但是它们还是有一些区别的。
在 Java 中,空指针异常(NullPointerException)是非常讨厌的。在 JDK 8 以前,我们通常只能通过主动防御式的检查来减少它的出现,但是在 JDK 8 之后我们可以使用 Optional 更优雅地处理这类问题。
@Conditional
是 Spring 4 提供的新注解,它的作用是按照一定的条件进行判断,当满足条件时会给容器注册 bean。举个例子,比如说我们有一个接口,这个接口有多个实现类,当我们将这个接口交给 Spring 容器管理时通常只能选择其中一个作为实现类,但是我们又希望能够根据不同的情况注册不同的实现类,此时就可以使用该注解。
Spring Cloud 其实就是一个全家桶,建立在 Spring Boot 之上,是微服务系统架构的一站式解决方案,覆盖了微服务的各个核心组件,其中很多组件都是 Netflix 家的。Spring Cloud 的版本号是以英国伦敦地铁站的名字命名的,同时按照字典顺序对应版本的时间顺序,最早的 Release 版本为 Angel,最新的 Release 版本为 Hoxton。
最早在 Java 体系中使用最多的消息队列是 ActiveMQ,但是由于其社区不够活跃且历史包袱较重,目前使用者已经越来越少,此时另一个合适的选择就是 RabbitMQ。
RPC,也就是远程过程调用(Remote Procedure Call),通俗的解释就是通过网络来请求服务,而不需要了解底层网络技术的协议和细节。可能就是因为这个通俗的解释,造成很多人混淆了 HTTP 与 RPC。
从命名上看,消息队列可以简单理解为存放消息的队列(Queue),而队列是一种常见的数据结构,在 Java 中的 java.util.Queue
接口下就有大量的队列实现。在一些业务场景中,我们可以使用 JDK 以及第三方包提供的队列实现,但是有些场景我们就不得不引入独立的队列组件,这有点类似 java.util.HashMap
与 Redis 的关系,它们都是以 key/value 的形式将数据存储到内存,但是在很多场景中我们需要使用 Redis 来替换 HashMap。
在 Redis 中,复制功能的主要作用是实现读写分离和数据备份,哨兵的作用是实现故障切换(failover),集群的主要作用是实现数据分片(sharding),解决单机的资源和性能瓶颈问题。