Spring Cloud 使用概述

概述

毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。

实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件

为什么分布式一定要有redis?

为什么使用redis

分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。

MySQL 四种事务隔离级的说明

按照SQL:1992 事务隔离级别,InnoDB默认是可重复读的(REPEATABLE READ)。MySQL/InnoDB 提供SQL标准所描述的所有四个事务隔离级别。你可以在命令行用–transaction-isolation选项,或在选项文件里,为所有连接设置默认隔离级别。
例如,你可以在my.inf文件的[mysqld]节里类似如下设置该选项:

如何合理地估算线程池大小?

如何合理地估算线程池大小?

这个问题虽然看起来很小,却并不那么容易回答。大家如果有更好的方法欢迎赐教,先来一个天真的估算方法:假设要求一个系统的TPS(Transaction Per Second或者Task Per Second)至少为20,然后假设每个Transaction由一个线程完成,继续假设平均每个线程处理一个Transaction的时间为4s。那么问题转化为:

深入理解HashMap

首先介绍一下Hash表:

哈希表定义

Hash,一般翻译做”散列”,也有直译为”哈希”的,就把任意长的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度输出,该输出就是散列值.

这种转换是一种压缩映射,也就是, 散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数.

显示锁(Lock)及Condition的学习与使用

synchronized是不错,但它并不完美。它有一些功能性的限制,比如:

  • 它无法中断一个正在等候获得锁的线程,也无法通过投票得到锁。多线程竞争一个锁时,其余未得到锁的线程只能不停的尝试获得锁,而不能中断。高并发的情况下会导致性能下降。
  • synchronized上是非公平的,新来的线程有可能立即获得监视器,而在等待区中等候已久的线程可能再次等待。

而Lock的一些实现类则很好的解决了这些问题。

Callable和Future、FutureTask的使用

在Java中,开启一个线程的唯一方式是,通过Thread的start方法,并且在线程中执行的Runnable的run方法。无论是线程池还是接下来要介绍的Callable,Future还是线程池,最核心最根本的还是调用的Thread.start()->Runnable.run(),其他的类的出现可以认为是更方便的使用Thread和Runnable,以此为核心更容易理解Java的并发框架。

从使用到原理学习Java线程池

线程池技术背景

在面向对象编程中,创建和销毁对象都是很费时间的,因为创建一个对象要获取内存资源或者其他更多资源.在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收.

|