
Java
文章平均质量分 85
java
yymagicer
小荷才露尖尖角,早有蜻蜓立上头
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SynchronousQueue用法
无容量的容量为 0,表示它不缓存任何元素。当一个线程将元素放入队列时,它必须等待另一个线程取出该元素,反之亦然。阻塞性put操作会阻塞,直到有线程调用take操作;take操作会阻塞,直到有线程调用put操作。即时交换:线程调用put和take时,数据被直接交换,而不存储在队列中。是一种非常特殊的队列,适用于需要精确控制线程间任务交换的场景。它广泛应用于线程池、异步任务交换、限时任务等场景,在多个线程直接交换数据时能够提供高效的机制。但是,由于它没有缓存能力,过度依赖。原创 2025-01-23 16:33:23 · 851 阅读 · 0 评论 -
使用正则表达式解析详细地址
【代码】使用正则表达式解析详细地址。原创 2024-11-18 17:20:22 · 238 阅读 · 0 评论 -
常用的限流算法
如果需要简单的实现,且对突发流量不敏感,可以选择计数器法。如果希望平滑流量、避免突发效应,可以选择滑动窗口法。如果需要限制流量处理速率并允许少量突发流量,可以选择令牌桶算法。如果系统压力较大,且需要稳定处理流量,可以使用漏桶算法。如果系统错误率较高,可能需要通过熔断器保护系统。原创 2024-10-30 14:36:03 · 1404 阅读 · 0 评论 -
Java中常用的监控命令
Java 提供了多种监控工具,这些工具包含了许多命令行工具,用于监控、诊断和管理 Java 应用程序的性能。这些工具主要位于 Java 安装目录下的bin。原创 2024-10-30 13:49:13 · 1263 阅读 · 0 评论 -
Java中线程池参数如何设置
如果任务在执行过程中,发现处理速度主要受限于CPU计算能力,且较少等待I/O操作,说明是CPU密集型。如果任务是CPU密集型的(例如计算任务),设置过多的核心线程数会导致线程过度竞争CPU资源,增加上下文切换次数,从而降低整体效率。对于I/O密集型任务,核心线程数设置过小会限制并发任务的处理能力,无法充分利用系统的I/O带宽,导致系统整体性能下降。:任务主要依赖I/O操作,CPU使用率较低,I/O等待较多(如磁盘读写、网络请求)。:任务主要依赖于CPU进行复杂计算,CPU使用率高,I/O等待较少。原创 2024-10-23 10:29:00 · 951 阅读 · 0 评论 -
jvm中是如何判断对象是否存活的
JVM中判断对象是否存活的机制通过多种方法共同作用。引用计数法虽然简单,但在处理复杂引用时存在局限性。可达性分析算法作为JVM主要的垃圾回收机制,通过GC Roots的追踪有效解决了循环引用问题。三色标记法和SafePoint等机制则进一步优化了并发GC的效率,减少了GC对系统性能的影响。而代际假说则基于对象生命周期的不同特点,优化了GC的执行流程。这些机制和技术点在大型应用项目中,特别是在高并发、实时响应等要求较高的场景中,都有着非常重要的应用。原创 2024-10-22 14:18:11 · 854 阅读 · 0 评论 -
JVM中垃圾回收
JVM中的垃圾回收是通过对堆内存进行管理、清理无用对象,从而确保应用的高效运行。整个垃圾回收过程包括对象的分代存储、不同的垃圾回收算法(标记-清除、复制、标记-整理等),以及多种垃圾回收器(Serial GC、Parallel GC、CMS GC、G1 GC等)来适应不同的应用场景。优化垃圾回收是一个综合的过程,需要根据应用的特性选择合适的垃圾回收器,并通过合理的内存分配、减少对象创建与销毁、调优对象晋升策略等方法减少GC对应用性能的影响。原创 2024-10-22 10:28:38 · 2090 阅读 · 0 评论 -
Java 线程等待和通知机制
Java 的线程等待和通知机制是多线程编程中的核心概念,它提供了一种线程间的协作方式。原创 2024-10-21 14:07:48 · 1224 阅读 · 0 评论 -
JVM的内存屏障
JVM中的内存屏障是实现Java内存模型的一部分,它通过控制线程间内存操作的可见性和有序性,确保多线程程序能够正确执行。在volatile等关键字的使用过程中,JVM会插入适当的内存屏障,防止指令重排序和缓存导致的数据不一致。原创 2024-10-15 19:39:21 · 1112 阅读 · 0 评论 -
go相对于java的一些优势
Go(Golang)和Java都是广泛使用的编程语言,但它们在设计理念和应用场景上有显著差异。原创 2024-10-15 15:59:18 · 1290 阅读 · 0 评论 -
Java项目生产环境遇到得问题以及对应的解决方案
在 Java 项目的生产环境中,常见问题和解决方案通常涵盖性能、资源管理、安全性、稳定性以及可维护性。原创 2024-09-19 11:11:58 · 2060 阅读 · 0 评论 -
定位 CPU 一直飙升的问题
检查占用高 CPU 的线程在执行哪些操作。如果怀疑垃圾回收是导致 CPU 飙升的原因,可以通过 JVM 的 GC 日志分析问题。生成的线程堆栈文件会记录当前所有线程的状态。根据之前转换为十六进制的线程 ID,搜索线程堆栈文件,找到对应线程在做什么。这个命令会显示该进程中所有线程的 CPU 使用情况,找到占用最高的线程,并记下其 TID(线程 ID)。首先,需要使用系统或应用级别的工具监控和确认 CPU 飙升的原因。,找到占用 CPU 较高的 Java 进程,记下对应的 PID。原创 2024-09-19 11:22:32 · 955 阅读 · 0 评论 -
Java中解决OOM的问题
在 Java 中,(OOM) 是指 JVM 无法为应用程序分配足够的内存,导致程序崩溃。解决 OOM 问题需要从多个角度分析并优化应用程序的内存使用。原创 2024-09-19 11:47:34 · 1653 阅读 · 0 评论 -
mybatis缓存机制
如果使用 Spring 和事务管理,那么在同一个方法中调用多个 MyBatis Mapper 方法时,会在同一个SqlSession中执行。如果手动管理SqlSession,则可以选择在一个或多个SqlSession中执行,具体取决于你如何创建和使用SqlSession。原创 2024-09-19 13:52:02 · 605 阅读 · 0 评论 -
Java中实现多线程的几种方式
适用于并行任务,将任务分成多个子任务并行执行,再将结果合并。,但它可以返回结果并抛出异常。原创 2024-09-19 15:01:54 · 583 阅读 · 0 评论 -
CompletableFuture详细用法
是 Java 中提供的用于异步编程的类,位于包中。它允许你以非阻塞的方式编写并发代码,支持链式调用,并且提供了处理任务完成后的各种回调方法。以下是的详细用法和常见场景。原创 2024-09-19 15:12:42 · 1535 阅读 · 0 评论 -
Java线程池详解
Java 的线程池是为了更高效地管理和使用线程资源而设计的。通过线程池,Java 可以避免频繁创建和销毁线程,复用现有的线程来执行多个任务,从而提升性能并降低系统资源的消耗。线程池主要由包下的Executor等接口和类提供支持。原创 2024-09-19 17:42:37 · 1182 阅读 · 0 评论 -
sychronized
是一种基于对象监视器(Monitor)的互斥锁机制。它通过获取和释放对象的监视器锁,保证了线程对共享资源的安全访问。Java 在 JDK 1.6 及以上版本中进行了多种优化,包括偏向锁轻量级锁重量级锁,以减少性能开销。还提供了内存可见性和有序性保证,使得多线程程序在读取和写入共享变量时保持一致性。原创 2024-09-19 18:16:28 · 620 阅读 · 0 评论 -
ReentrantLock原理及详细的使用方法
的核心是基于AQS(抽象队列同步器)实现的。AQS 维护了一个队列,用于管理所有请求锁的线程。每个线程尝试获取锁时,如果当前锁被其他线程持有,则进入等待队列,阻塞等待锁释放。一旦锁释放,AQS 会从队列中唤醒下一个线程,允许它获取锁。提供了比更灵活的锁控制方式。选择公平锁和非公平锁;提供尝试获取锁和可中断的锁;允许锁的重入;支持手动加锁和解锁的细粒度控制。原创 2024-09-20 09:50:19 · 2009 阅读 · 0 评论 -
ReentrantLock 和synchronize比较
如果你只需要基本的锁机制并希望保持代码简洁,是优先选择。如果你需要更高的灵活性(如锁的可中断、超时等待、公平锁等),提供了更强大的功能,适合复杂的并发控制场景。原创 2024-09-20 10:07:33 · 778 阅读 · 0 评论 -
Java中线程之间是如何通信的
在 Java 中,线程之间的通信是通过模型来实现的,线程通过共享的对象和变量来交换数据。为了确保线程间通信的正确性,Java 提供了一系列机制来实现线程安全、同步和通信。以下是常用的几种线程间通信的方式,以及它们的使用方法和场景。原创 2024-09-20 10:16:33 · 2651 阅读 · 0 评论 -
Java线程池的作用
线程池解决了频繁创建和销毁线程的资源浪费问题,避免了系统因线程数量过多而崩溃,提供了高效的任务调度和并发处理机制,同时简化了对线程的管理。原创 2024-09-20 11:23:26 · 270 阅读 · 0 评论 -
Java中线程并发的安全问题,是啥原因导致,并如何来解决相应的问题
并发问题的根本原因是共享资源的非同步访问。通过使用Lockvolatile、原子类和高层次并发工具类,可以有效地避免这些问题。在设计并发程序时,应该根据具体的场景选择合适的同步方式,既保证线程安全,又尽量减少同步带来的性能损耗。原创 2024-09-20 11:28:04 · 922 阅读 · 0 评论 -
Spring Cloud搭建微服务
通过使用Spring Cloud全家桶,我们可以构建一个功能强大、灵活的微服务架构,包含服务注册与发现(Eureka)、配置管理(Config Server)、API网关(Gateway)、远程调用(OpenFeign)、负载均衡(Ribbon)和熔断降级(Hystrix)。这样的架构便于扩展、维护和监控,能够满足现代应用的需求。原创 2024-09-20 17:27:53 · 353 阅读 · 0 评论 -
Java学习路线
数据类型、变量、运算符控制流数组和字符串类和对象继承、多态、封装接口和抽象类集合框架异常处理输入输出流线程的创建与管理同步与锁线程池的使用垃圾回收机制类加载机制Socket编程HTTP协议JDBC基础ORM框架Spring核心AOP(面向切面编程)Spring Boot实现一个简单的Web应用数据库操作Spring CloudDocker和KubernetesJVM调优代码优化书籍在线课程社区与论坛原创 2024-09-20 17:47:16 · 901 阅读 · 0 评论 -
CyclicBarrier,CountDownLatch,Semaphore的实现原理,以及使用场景
适合多线程协调的阶段性同步,所有线程需要同时达到某个状态才继续执行,且可以重用。适合一次性等待其他线程完成某些操作,倒计时计数器达到 0 后,阻塞的线程才会被唤醒。Semaphore用于控制并发线程的数量,限制访问共享资源的线程数,适合限流或资源保护场景。原创 2024-09-23 09:55:52 · 1275 阅读 · 0 评论 -
Java中异步复用io
NIO:通过Selector和Channel实现非阻塞I/O。NIO.2:使用和支持回调的异步I/O。异步任务调度:结合编排异步任务。高性能I/O框架:使用Netty提供的高层次异步I/O处理。响应式编程:采用 Reactor、RxJava 等响应式编程框架处理异步I/O。原创 2024-09-23 10:18:26 · 1373 阅读 · 0 评论 -
零拷贝原理以及java中实现方式和使用场景
零拷贝技术通过减少数据在用户空间和内核空间之间的复制次数,极大地提升了 I/O 的性能,特别是在大文件传输、网络通信等场景中具有显著的优势。Java 提供的mmap等 API,以及第三方网络框架(如 Netty)的支持,使得零拷贝技术能够被轻松应用于高性能 I/O 应用中。原创 2024-09-23 10:35:03 · 1694 阅读 · 0 评论 -
异步编程中channel通道的作用,实现原理,使用场景
在异步编程中,的机制。它允许在并发的环境中安全地传递数据,而不需要显式的锁机制。原创 2024-09-23 10:57:46 · 1249 阅读 · 0 评论 -
Spring Bean 的生命周期
Spring Bean 的生命周期涉及多个步骤,每一步都有其特定的作用和扩展接口。实例化:通过构造器或工厂方法创建 Bean。属性注入:通过构造器、Setter 方法或字段注入依赖。Aware接口:为 Bean 注入 Spring 容器、名称等上下文信息。:在初始化前后进行处理。初始化:调用初始化方法。销毁:通过接口或自定义方法进行销毁。原创 2024-09-23 17:22:49 · 1198 阅读 · 0 评论 -
Spring Boot 的实现原理
Spring Boot 是基于 Spring Framework 的一个框架,旨在简化 Spring 应用程序的创建和配置。它通过约定优于配置的方式,使开发者能够快速构建独立的、生产级的应用程序。原创 2024-09-24 10:07:36 · 1039 阅读 · 0 评论 -
Spring 中事务的使用方法和原理
的方法被调用时,Spring 会在方法执行前创建事务,并在方法执行结束后提交或回滚事务。可以应用于类或方法上,通常用于服务层(Service layer)。事务的隔离级别决定了一个事务在处理数据时,其他事务的可见性。在 Spring 的 XML 配置中,也可以通过配置事务管理。Spring 通过 AOP 代理机制来管理事务。原创 2024-09-24 10:15:32 · 845 阅读 · 0 评论 -
手写一个springboot的starter包
Spring Boot Starter 是一组方便的依赖项,它们帮助开发者快速集成 Spring Boot 应用所需的常用功能。通过使用 Starter,开发者可以减少配置和依赖管理的复杂性。手写一个 Spring Boot Starter 包可以帮助你快速复用某些功能或集成特定的库。下面是创建一个简单的 Spring Boot Starter 的步骤,包括项目结构、代码示例和配置说明。原创 2024-09-24 10:30:14 · 319 阅读 · 0 评论 -
OpenFeign 的工作原理
在 OpenFeign 中,用户首先需要定义一个接口。这个接口中的每个方法代表一个外部 HTTP 请求。通过使用注解,用户可以指定请求的细节。示例。原创 2024-09-25 10:50:30 · 620 阅读 · 0 评论 -
Ribbon原理
Ribbon 通过动态服务注册与发现、灵活的负载均衡策略、健康检查机制以及与 Feign 的集成,提供了一个强大的客户端负载均衡解决方案。Ribbon 通过调用注册中心的 API 获取可用的服务实例列表。这个列表是动态的,服务的上线、下线都会实时更新。根据实例的响应时间、处理能力等指标,分配不同的权重,使得高性能的实例承担更多请求。Ribbon 查询服务注册中心,获取当前可用的服务实例列表。请求通过 Ribbon 的负载均衡机制发送到具体的服务实例。根据配置的负载均衡策略,从实例列表中选择一个实例。原创 2024-09-25 11:04:02 · 1186 阅读 · 0 评论 -
Hystrix 原理
如果请求在超时内没有返回,Hystrix 会抛出异常,并执行降级逻辑。:Hystrix Dashboard 提供了可视化的监控界面,显示熔断器的状态、请求数量、失败率等信息。在半打开状态下,Hystrix 会允许一小部分请求通过,以测试目标服务的健康状况。Hystrix 使用滑动窗口统计成功与失败的请求比例,以决定是否切换熔断器的状态。:每个 Hystrix 命令使用独立的线程池,防止某个服务的故障影响到其他服务。在这个状态下,所有请求都会立即返回预定义的降级响应,而不进行实际的服务调用。原创 2024-09-25 11:04:44 · 455 阅读 · 0 评论 -
Dubbo原理
Dubbo 实现了 RPC,通过网络调用服务,就像调用本地方法一样。它支持多种通信协议,包括:Dubbo 协议:高性能的二进制协议。HTTP/REST:适用于 Web 服务。gRPC:基于 HTTP/2 的高性能 RPC 框架。注册中心:服务提供者启动时将其信息注册到注册中心(如 ZooKeeper、Nacos),消费者通过注册中心获取服务信息。这样可以动态管理服务实例。服务消费者:消费者在调用服务前会查询注册中心,获取可用服务列表,并根据负载均衡策略选择一个服务实例进行调用。Dubbo 提供多种负载均衡策原创 2024-10-08 09:59:24 · 1212 阅读 · 0 评论 -
Spring Boot启动流程
会创建并启动嵌入式Web服务器(如Tomcat、Jetty),调用。,加载系统属性、环境变量、配置文件等,确保环境在应用启动时可用。等注解进行条件判断,决定是否加载特定的Bean。,标志着应用已完全启动,所有Bean均已初始化并可供使用。事件,允许监听器在上下文环境准备后进行配置。事件,表示上下文已准备好,但尚未刷新。,它根据条件逻辑判断Bean的注册。方法,用于执行自定义的初始化逻辑。注解加载属性,准备应用配置。在上下文刷新后,执行实现了。,传入主类和命令行参数。指定的包,查找并注册被。原创 2024-10-09 10:26:50 · 976 阅读 · 0 评论 -
Java虚拟机(JVM)
Java虚拟机原创 2024-10-10 13:57:38 · 2015 阅读 · 0 评论 -
Java中执行一个方法,jvm中做了哪些事情
当在Java中执行一个方法时,JVM进行的具体步骤如下:.class。原创 2024-10-10 14:46:54 · 475 阅读 · 0 评论