11 2024 档案
摘要:CountDownLatch的介绍 CountDownLatch是JUC中的一个同步工具类,它可以帮助我们实现线程之间的同步和协作。它的核心思想是通过计数器来控制线程的执行顺序。当计数器的值降为0时,所有等待的线程都会被唤醒,然后开始执行下一步操作。 一、实现原理 1. Sync类 CountDow
阅读全文
摘要:SPI机制在JDK/Spring/SpringBoot/Dubbo的区别? 概要 SPI (Service Provider Interface) 是一种服务发现机制,它允许第三方提供者为核心库或主框架提供实现或扩展。这种设计允许核心库/框架在不修改自身代码的情况下,通过第三方实现来增强功能。 一、
阅读全文
摘要:CyclicBarrier的介绍 概要 CyclicBarrier(循环栅栏/循环屏障)是JUC并发包中的一个同步工具类,它允许一组线程在执行过程中互相等待,直到所有线程都达到某个公共屏障点(barrier point),然后这些线程再一起继续执行。并且 CyclicBarrier 功能可重复使用。
阅读全文
摘要:登录以及认证授权方案 概要 登录是每个网站中都会用到的一个必备功能,但是如何实现一个优秀的登录功能,如何根据自己的项目来选择一个适合自己的登录方案? 今天我们就来介绍几种常用的登录方案。 Cookie + Session 登录 Token 登录 SSO 单点登录 OAuth 第三方登录 一、Cook
阅读全文
摘要:Java 常用数据编码以及加密解密算法 概要 加密算法是一种用数学方法对数据进行变换的技术,目的是保护数据的安全,防止被未经授权的人读取或修改。加密算法可以分为三大类:对称加密算法、非对称加密算法和哈希算法(也叫摘要算法)。 本文来梳理下开发中常用到的数据编码中的Base64以及常见的一些加密算法。
阅读全文
摘要:MySQL慢查询优化 一、慢查询开启 slow_query_log 慢查询开启状态 slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录) long_query_time 查询超过多少秒才记录 查看参数配置情况:
阅读全文
摘要:MySQL主从同步的三种模式 概要 随着业务的增长,一台数据服务器已经满足不了需求了,负载过重。这个时候就需要减压了,实现负载均衡读写分离,一主一丛或一主多从。 主服务器只负责写,而从服务器只负责读,从而提高了效率减轻压力。 一、相关概念 1. master--主数据库 2. slave--从数据库
阅读全文
摘要:Spring - 如何解决循环依赖 一、什么是循环依赖? 循环依赖是指在多个对象之间,存在相互依赖的关系,导致无法满足依赖关系的注入要求。具体来说,当两个或多个 bean 在 Spring 容器中互相依赖时,Spring 需要以某种方式打破这种依赖链,以避免死锁或初始化失败。 二、Spring解决循
阅读全文
摘要:Java死锁检测以及解决办法 一、死锁概念 1. 什么是死锁? 两个或者多个线程互相持有对方所需要的资源, 都在等待对方执行完毕才能继续往下执行的时候,就称为发生了死锁。结果就是两个线程或多个线程都陷入了无限的等待中。由于线程被无限期地阻塞,因此程序不可能正常终止。 一般是有多个锁对象的情况下并且获
阅读全文
摘要:线程池创建方式 一、方式一:通过ThreadPoolExecutor构造函数来创建(推荐) 方式二:通过 Executor 框架的工具类 Executors 来创建。 Executors工具类提供的创建线程池的方法如下图所示: 可以看出,通过Executors工具类可以创建多种类型的线程池,包括:
阅读全文
摘要:Dubbo介绍 概要 Dubbo由阿里巴巴最早于 2011 年发布,是一款高性能的 RPC 框架,专注于服务调用和服务治理。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 简单来说 Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务
阅读全文
摘要:JVM指针压缩实现原理 概要 Java 中的指针压缩(Pointer Compression)是一个与内存管理相关的优化技术,主要应用于 JVM 的对象引用(即指针)的存储方式。指针压缩的目标是减少对象引用占用的内存空间,从而提高内存利用效率,特别是在 64 位系统上。 一、对象的内存布局 在了解指
阅读全文
摘要:SpringCloud微服务系列 - Hystrix的使用和原理 概要 Hystrix是Netflix开源的一款容错框架。集成到微服务体系里面的一个组件,是微服务体系里面的熔断器。 主要用于处理微服务架构中的故障,提供了一种机制来防止级联故障。在高并发访问下,系统所依赖的服务的稳定性对系统的影响非常
阅读全文
摘要:Java阻塞队列 一、阻塞队列 1. 为什么要用阻塞队列? 在多线程领域,所谓阻塞,是指在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒。 使用阻塞队列能够简化多线程编程,是实现生产者-消费者模型等常见并发模式的重要工具。它能够有效地衔接生产者和消费者之间的速度差异,提供一
阅读全文
摘要:ThreadLocal的使用以及原理 概要 ThreadLocal 是 java 提供的一个方便对象在本线程内不同方法中进行传递和获取的类。用它定义的变量,仅在本线程中可见和维护,不受其他线程的影响,与其他线程相互隔离。 一、ThreadLocal能解决什么问题? 当涉及一个对象需要在很多不同方法之
阅读全文