随笔分类 - Java
摘要:Elasticsearch 实战:基于 function_score 的搜索与权重排序 下面基于项目中关于律师笔记的es搜索功能开发,来记录下es中基于 function_score 的搜索与权重排序在项目中是如何具体应用和实现的。 一、需求内容 项目中有一个功能,简单描述为:全局搜索公开展示的律师
阅读全文
摘要:Java-泛型的使用 在日常开发中,我们经常会遇到一种情况:为了通用性,不得不写很多重复代码。Java 泛型(Generic)就是为了解决这个问题而诞生的。本文将通过实际项目中的 UserHolder 优化过程,带你一步步理解并学会使用泛型。 一、Java 泛型介绍 泛型是一种代码参数化的机制,它允
阅读全文
摘要:IntelliJ 启动项目出现 CodeCache 报警原因分析以及排查(基于 JDK 8) 一、问题背景 最近在用 IntelliJ IDEA 本地启动项目(单体)时,控制台突然出现一段系统级报警信息: CodeCache: size=262144Kb used=25874Kb max_used=
阅读全文
摘要:Java 常用的分页组件 概要 在实际的 Java 项目开发中,分页查询是最常见的场景之一。现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用方式也很简单。而使用 MyBatis-Plus 之后,分
阅读全文
摘要:CountDownLatch的介绍 CountDownLatch是JUC中的一个同步工具类,它可以帮助我们实现线程之间的同步和协作。它的核心思想是通过计数器来控制线程的执行顺序。当计数器的值降为0时,所有等待的线程都会被唤醒,然后开始执行下一步操作。 一、实现原理 1. Sync类 CountDow
阅读全文
摘要:SPI机制在JDK/Spring/SpringBoot/Dubbo的区别? 概要 SPI (Service Provider Interface) 是一种服务发现机制,它允许第三方提供者为核心库或主框架提供实现或扩展。这种设计允许核心库/框架在不修改自身代码的情况下,通过第三方实现来增强功能。 一、
阅读全文
摘要:CyclicBarrier的介绍 概要 CyclicBarrier(循环栅栏/循环屏障)是JUC并发包中的一个同步工具类,它允许一组线程在执行过程中互相等待,直到所有线程都达到某个公共屏障点(barrier point),然后这些线程再一起继续执行。并且 CyclicBarrier 功能可重复使用。
阅读全文
摘要: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 属于线程安全的实现方法 - 无同步方案
阅读全文
摘要:String、StringBuffer和StringBuilder的区别 下面从可变性、是否线程安全等方面来对String、StringBuffer、StringBuilder进行比较。 一、可变性 1. String String 类中使用 final 关键字修饰字符数组来保存字符串。 publi
阅读全文
摘要:JVM的垃圾收集器 概要 垃圾收集算法就像是 Java 中的接口一样,而垃圾收集器是接口的具体实现。所以,不同的厂商,不同版本的虚拟机实现的方式都有所不同。甚至是很大的差别。 首先,了解下 HotSpot虚拟机中 9款垃圾回收器的发布时间及其对应的 JDK版本,如下图: 接着,了解下 CMS和G1这
阅读全文
摘要:Java中线程安全的数据结构 Java 提供了多种线程安全的工具类,主要可以分为以下几类: 一、Java Collections Framework 中的线程安全集合 1. Vector Vector是一个动态数组,支持同步操作,线程安全。使用 synchronized 来保证线程安全,效率非常低下
阅读全文

浙公网安备 33010602011771号