转载:https://mp.weixin.qq.com/s/BhfjVuMwXkFFQhgvw2KypA日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。线程池默认使用无界队列,任务过多导致OOMJDK 为开发者提供了线程池的实现类,我们基于 Executors 组件,就可以快速创建一个线程池。日常工作中,一些小伙伴为了开发效率,反手就用Executors 新建个线程池。写出类似以下的代码:public class NewFixedTest { public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(10); for (int i = 0; i < Integer.MAX_VALUE; i++) { executor.execute(() ->
微服务是一种经过良好架构设计的分布式架构方案,微服务具有以下特征: 单一职责:微服务拆分粒度更小,每个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。 面向服务:微服务对外暴露业务接口。 自治:团队独立、技术独立、数据独立、部署独立。 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题。 架构优缺点单体架构简单方便、高度耦合、扩展性差,适合小型项目。将业务的所有功能集中在一个项目中开发,打成一个包部署。优点 架构简单 部署成本低 缺陷 耦合度高 分布式架构松耦合,扩展性好。但架构复杂,难度大。适合大型互联网项目。微服务是一种良好的分布式架构方案。优点 降低耦合度 有利于服务升级扩展 缺点 复杂度增加 部署难度增加 技术栈作用 \ 框架DubboSpring CloudSpring Cloud Alibaba注册中心ZooKeeper、RedisEureka、ConsulNacos、Eureka服务远程调用Dobbo 协议Feign (http 协议)Dubbo、Feign配置中心无Spring Cloud ConfigSpring C
概述从现代计算机中所有的数据二进制的形式存储在设备中。即 0、1 两种状态,计算机对二进制数据进行的运算都是叫位运算,即将符号位共同参与运算的运算。Java 中有以下的运算符:运算符名称示例结果说明<<左移4<<216符号左边的操作数左移指定的位数>>右移4>>12将符号的左边的操作数右移指定位数>>>无符号右移4>>>10将符号左边的操作数右移指定的位数&与运算4&20两个二进制位,只要有一个为0,那么结果就为0,否则结果为1|或运算4!26两个二进制位,只要有一个为1,那么结果就为1,否则结果为0^异或运算4^26相同二进制位,结果为0;不同的二进制位,结果为1~取反-4-5二进制位,0变1;1变0与、或、异或、取反class Playground { public static void main(String[ ] args) { int a = 3, b = 4; &
socket 起源于UNIX,在 Unix 一切皆文件哲学的思想下,socket 是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。连接服务器Telnet 命令telnet 是一种用于网络编程的非常强大的调试工具。可以使用其来连接远程计算机,或者用于其它网络服务进行通信测试。获取当前的UTC时间telnet time-a.nist.gov 13 响应内容59760 22-06-30 09:02:19 50 0 0 946.4 UTC(NIST) * Java 连接在 Java 中,可以使用 Socket(套接字)进行连接到某个地址的端口,并打印响应内容。Socket 负责启动该程序内部与外部之间的通信。获取当前的UTC时间public class SocketTest { public static void main(String[] args) { try (Socket socket = new Socket("time-a
流的基本概念流是一种指定的计算视图。流遵循“做什么而非怎么做”的原则,它比循环更易于阅读。可以让你以一种声明的方式处理数据。例如代码:有一个变量名为 words,它是一个集合,里面一本书中所有的单词,需要找出单词长度大于12的单词数量。循环long count = 0; for (String w : words) { if (w.length > 12) count++; } 流let count = words.stream() .filter(w -> w.length > 12) .count(); 典型流程由上述流示例代码可知,流的典型流程: 创建一个流:words.stream() 指定将初始化流转换为其它流的中间操作(可能包含多个步骤):.filter(w -> w.length > 12) 应用终止操作,从而产生结果。这个操作会强制执行之前的惰性操作。从此之后,这个流就在也不能使用了:.count(); 流与集合的区别 流并不存储元素,这些元素可能存储在底层的集合中,或者是按需生成的。 流的操作不会修改其数据源 例
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。分布式事务处理过程1个ID+3个组件transaction ID – XID全局唯一的事务ID3个组件 TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 处理过程 TM 向 TC 申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的 XID ; XID 在微服务调用链路的上下文中传播; RM 向 TC 注册分支事务,将其纳入 XID 对应全局事务的管辖; TM 向 TC 发起针对 XID 的全局提交或回滚决议;
以3.1.1为例,Spring网关内置了12种,用来匹配HTTP不同属性的断言工厂,可以直接使用配置的形式来使用,并且可以多个联合使用。配置文件spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - After=2017-01-20T17:42:47.789-07:00[America/Denver] 配置类@Configuration public class GatewayConfig { @Bean public RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() .route("news2", r -> r.path("/guoji").uri("http://news.baidu.com"))
Ribbon 是什么Ribbon 是 Netflix 公司发布的一个客户端 IPC 库,主要提供以下功能: 负载均衡(Load Balance) 容错(Fault tolerance) 多协议支持(HTTP\TCP\UDP) 缓存和批处理 负载均衡方案主流的负载均衡策略可以分为两种:一种是集中式Load Balance(缩写:LB), 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;另一种是进程内Load Balance,将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于后者,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。Ribbon 的均衡负载策略Ribbon 支持多种均衡负载策略,在源代码中,Ribbon 中的 IRule 接口代表均衡负载策略:实现类作用RoundRobinRule轮询策略RandomRule随机策略RetryRule先使用轮询策略,如果
Synchronized 是 Java 多线程编程中常用关键字。Synchronized 是防止线程干扰和内存一致性的简单策略。Synchronized 关键字用法类对象:类名.class 创建的对象。对类对象上锁,可以叫做类锁实例对象:当前类,通过构造方法创建的实例对象。对实例对象上锁,可以叫做实例锁(对象锁)Synchronized 是一种同步锁,也是可重入锁。在不同地方使用 Synchronized 都会获取一把锁,但这把锁是谁的呢?修饰普通方法锁的是当前实例对象——实例锁public synchronized void run() { // some code... } 此写法等价于public void run() { synchronized(this) { // some code... } } 修饰静态方法锁的是当前类对象——类锁public synchronized static void run() { // some code... } 此写法等价于public void run() { synchroniz
此间少年
QQ群:539165194