
Java
文章平均质量分 81
java 开发语言
夏子曦
这个作者很懒,什么都没留下…
展开
-
java——执行linux/cmd命令
在Java中执行命令行命令可以通过或实现。适用于简单场景,但需手动处理输入/输出流。更灵活,支持错误流合并、工作目录设置等。将命令和参数拆分为字符串数组,避免空格导致的解析错误。使用cmd /c在finally块中关闭流或使用Try-with-Resources(需自定义处理)。原创 2025-02-27 22:20:43 · 1235 阅读 · 0 评论 -
java——AQS(AbstractQueuedSynchronizer)
AQS(AbstractQueuedSynchronizer)是Java并发包(java.util.concurrent)中的一个核心组件,是构建锁和其他同步器的基础框架。原创 2024-12-21 14:15:14 · 2162 阅读 · 0 评论 -
java——Synchronized与Lock
是Java语言内置的同步机制。基于监视器锁(monitor lock)或对象锁实现。当线程进入一个synchronized方法或代码块时,它会自动获得锁,并在退出时自动释放锁。Lock是Java 5中引入的一个接口,提供了比synchronized更灵活的锁操作。ReentrantLock是Lock接口的一个常用实现类,它支持可重入性,即同一个线程可以多次获取同一个锁而不会造成死锁。原创 2024-12-21 13:37:01 · 548 阅读 · 0 评论 -
java虚拟机——JVM内存屏障
内存屏障(Memory Barrier),也被称为内存栅栏或内存隔离墙,是一种底层硬件指令,用于约束CPU的指令重排序以及缓存的刷新。它确保处理器的某些操作按特定顺序执行,并控制处理器和内存之间的数据可见性。原创 2024-12-03 11:32:29 · 669 阅读 · 0 评论 -
java——Netty与Tomcat的区别
Netty与Tomcat在作用、协议支持、特点等方面存在显著差异。原创 2024-11-29 15:10:36 · 1416 阅读 · 0 评论 -
零拷贝(Zero-Copy)
零拷贝并不是指在数据的传输过程中发生拷贝的次数为零,而是指数据在传输过程中从内核空间到用户空间之间的数据拷贝次数为零。通过减少数据在用户空间和内核空间之间的复制次数,零拷贝技术可以极大地提升I/O的性能,尤其是在大文件传输、网络通信等场景中具有显著的优势。原创 2024-11-29 14:39:38 · 1272 阅读 · 0 评论 -
java——NIO(Non-blocking I/O,非阻塞I/O)、BIO(Blocking I/O,阻塞I/O)和AIO(Asynchronous I/O,异步I/O)
并发性能BIO:并发处理能力较差,每个连接需要一个独立的线程来处理。NIO:并发处理能力较好,一个线程可以处理多个连接。AIO:并发处理能力最好,能够充分利用系统资源来处理高并发和大数据量的场景。使用复杂度BIO:简单易用,但不适合高并发场景。NIO:使用起来相对复杂一些,但提供了高效的数据处理能力和高并发访问支持。AIO:最为复杂的一种I/O模型,但提供了最高的并发处理能力和系统性能。应用场景选择在选择I/O模型时,需要根据具体的应用场景和需求来决定。原创 2024-11-29 14:27:26 · 670 阅读 · 0 评论 -
java——StampedLock邮戳锁
StampedLock,也称为邮戳锁或戳记锁,是Java 8中引入的一种新的锁机制,旨在优化读多写少场景下的并发性能。原创 2024-11-29 09:58:42 · 1012 阅读 · 0 评论 -
java——mybatis-plus,一个应用配置多个数据库连接
在Spring Boot应用中,如果你需要连接两个不同的数据库(例如MySQL和Oracle),并且使用MyBatis进行ORM操作,你可以通过配置多个数据源来实现。原创 2024-11-28 16:26:06 · 1052 阅读 · 0 评论 -
java——MyBatis的优点和缺点
综上所述,MyBatis具有灵活性高、性能优秀、易于学习和使用等优点,但也存在需要手动编写SQL语句、复杂性、缺乏自动化机制以及不适合小型项目等缺点。在选择使用MyBatis时,需要根据项目的具体需求和开发人员的技能水平进行综合考虑。MyBatis是一个持久层框架,它通过将SQL语句和Java方法进行映射,实现了数据库操作的解耦和简化。原创 2024-11-28 09:23:45 · 327 阅读 · 0 评论 -
java——Spring Boot的配置加载顺序和优先级
Spring Boot的配置加载顺序和优先级是确定应用程序如何读取和应用配置的关键。原创 2024-11-27 22:14:02 · 1108 阅读 · 0 评论 -
java——SpringBoot启动Tomcat的过程
通过这些步骤,SpringBoot能够方便地集成和启动Tomcat服务器,为Web应用程序提供强大的支持。综上所述,SpringBoot启动Tomcat的过程是一个。原创 2024-11-27 21:53:29 · 662 阅读 · 0 评论 -
java——SpringBoot中常用注解及其底层原理
SpringBoot中的注解是简化配置、自动装配组件和实现声明式服务的关键。原创 2024-11-27 20:33:55 · 669 阅读 · 0 评论 -
java——Spring MVC的工作流程
在整个工作流程中,DispatcherServlet、HandlerMapping、HandlerAdapter和ViewResolver等组件的工作是在框架内部执行的。开发人员只需要配置DispatcherServlet,完成Controller中的业务处理,并在View中展示相应信息。原创 2024-11-27 20:17:26 · 1004 阅读 · 0 评论 -
java——字面量、常量、变量
字面量(Literal)在计算机科学中,是指在源代码中直接表示的值,这些值在编译时或运行时被直接替换为对应的内部表示,而不需要进行额外的计算或转换。字面量通常用于初始化变量或作为表达式的一部分。以下是对字面量的详细解释: 定义与用途:存储与修改:表达方式: 可变性与存储:使用方式:生命周期: 值的变化性:声明与初始化:命名约定:综上所述,字面量是编程中常用的一种表示值的方式,它们具有直接表示、固定值和类型明确等特点。在编程过程中,合理使用字面量可以提高代码的可读性和可维护性。原创 2024-11-27 16:41:17 · 1265 阅读 · 0 评论 -
java——spring容器启动流程
Spring容器的启动流程是一个复杂但有序的过程,它涉及多个步骤来确保应用程序的组件被正确加载、配置和初始化。原创 2024-11-27 16:08:32 · 771 阅读 · 0 评论 -
java——@Transactional 在哪些情况下会失效?
Transactional注解在Spring框架中用于声明式事务管理,确保数据的一致性和可靠性。然而,在某些情况下,@Transactional注解可能会失效。通过遵循这些原则,可以最大程度地确保@Transactional注解在Spring框架中的正确性和有效性。原创 2024-11-27 15:57:53 · 1072 阅读 · 0 评论 -
java——spring中事务怎么实现的?原理是什么?
在Spring框架中,事务管理是一个核心功能,它提供了两种主要的事务实现方式:声明式事务和编程式事务。下面分别介绍这两种实现方式及其底层原理。原创 2024-11-27 14:51:10 · 1304 阅读 · 0 评论 -
java——谈谈对Spring的Bean理解
对象:在Spring中,Bean本质上是一个符合JavaBean规范的普通Java对象(POJO)。JavaBean通常具有无参构造函数、私有属性和对应的getter/setter方法。管理:Spring容器负责Bean的创建、配置、装配和销毁。这意味着开发者不需要手动管理这些对象的生命周期。在Spring框架中,Bean是由Spring容器生成并管理的对象。它们通过配置文件、注解或Java代码进行定义和配置。Spring容器负责Bean的整个生命周期,包括实例化、配置、装配和销毁。原创 2024-11-27 11:21:09 · 1067 阅读 · 0 评论 -
java——Spring中的Bean线程安全问题
Spring中的Bean对象是否线程安全取决于多个因素,包括Bean的作用域(scope)、Bean的实现方式以及如何使用这些Bean。以下是一些关键点来帮助理解Spring中Bean的线程安全性:1. Bean的作用域Singleton(默认作用域):在Spring容器中,每个Singleton Bean只会被创建一次,并且在整个应用上下文中共享同一个实例。如果这个Bean是无状态的(即不包含任何成员变量或只包含不可变的成员变量),那么它通常是线程安全的。然而,如果Singleton Bean包原创 2024-11-27 10:59:36 · 568 阅读 · 0 评论 -
Java——Spring中BeanFactory与FactoryBean
目的。原创 2024-11-27 09:58:28 · 748 阅读 · 0 评论 -
网络——浏览器发送一个请求到收到响应经历了哪些步骤
当浏览器发送一个请求到服务器并收到响应时,通常会经历以下几个步骤。这个过程可以分为几个主要阶段:DNS解析、建立TCP连接、发送HTTP请求、服务器处理请求和返回响应、浏览器接收响应等。:用户在浏览器地址栏中输入网址或点击链接。原创 2024-11-26 20:17:23 · 520 阅读 · 0 评论 -
java——Tomcat连接池配置NIO、BIO、APR
NIOJava SE 1.4及后续版本提供的一种新的IO操作方式。基于缓冲区,并能提供非阻塞IO操作的Java API。拥有比传统IO操作(BIO)更好的并发运行性能。APRTomcat以JNI的形式调用Apache HTTP服务器的核心动态链接库来处理文件读取或网络传输操作。从操作系统级别来解决异步的IO问题,能大幅度提高性能。提供高度可扩展性以及优越的性能,并且可以更好地与本地服务器技术集成。BIO传统的Java IO操作,即java.io包及其子包。原创 2024-11-26 19:38:20 · 996 阅读 · 0 评论 -
java——Tomcat调优策略
通过对 Tomcat 进行内存优化、并发优化、连接器优化、JVM 调优、系统内核参数优化以及配置负载均衡和集群,可以显著提高 Tomcat 的性能和稳定性。每一步都需要根据实际的应用场景和服务器资源进行调整,以达到最佳效果。原创 2024-11-26 17:00:23 · 1434 阅读 · 0 评论 -
java——利用 Tomcat 自定义的类加载器实现热加载
创建一个自定义的类加载器,继承自或,并重写findClass和loadClass方法。@Override// 自定义类加载逻辑} else {// 从文件系统或其他来源加载类数据= -1) {通过自定义类加载器和监听类文件变化,可以实现 Tomcat 的热加载功能。创建自定义类加载器,重写findClass和loadClass方法。创建后台线程或定时任务,监听类文件的变化。当类文件发生变化时,重新加载类。将自定义类加载器集成到 Tomcat 中。原创 2024-11-26 16:25:27 · 969 阅读 · 0 评论 -
java虚拟机——类加载器中的双亲委派模型
双亲委派模型是Java类加载器的重要特性,通过这种机制,类加载器能够实现类的共享和隔离,提高了代码的安全性和可靠性。理解双亲委派模型的工作原理和优点,可以帮助开发者更好地设计和调试Java应用程序。在某些特殊情况下,如果需要打破双亲委派模型,可以通过自定义类加载器来实现。原创 2024-11-26 15:47:15 · 539 阅读 · 0 评论 -
java虚拟机——频繁发生Full GC的原因有哪些?如何避免发生Full GC
在JVM(Java虚拟机)中,频繁发生Full GC(垃圾收集)会严重影响应用性能,导致长时间的停顿,降低系统的响应速度甚至影响用户体验。原创 2024-11-26 14:56:07 · 991 阅读 · 0 评论 -
java虚拟机——如何排查jvm问题
排查JVM问题需要综合使用多种工具和方法,从监控、日志分析、性能分析、线程分析、垃圾收集分析等多个角度入手。通过这些步骤,你可以更全面地了解和解决JVM相关的各种问题。原创 2024-11-26 14:45:28 · 870 阅读 · 0 评论 -
java虚拟机——哪些可作为GC Root对象
在JVM(Java虚拟机)中,GC Root(垃圾回收根)是垃圾回收算法进行可达性分析时的起点。从GC Root开始,沿着对象引用链一直往下搜索,所有能够被GC Root直接或间接引用的对象都是可达的,不可达的对象则会被垃圾回收器回收。原创 2024-11-26 14:06:51 · 623 阅读 · 0 评论 -
java虚拟机——jvm是怎么去找垃圾对象的
JVM(Java虚拟机)通过特定的算法和机制来查找和识别垃圾对象,以便进行垃圾回收。原创 2024-11-26 12:18:36 · 815 阅读 · 0 评论 -
java虚拟机——线程资源的同步和交互机制
JVM(Java虚拟机)线程资源的同步和交互机制是Java多线程编程中的核心概念,它们确保了多线程环境下数据的一致性和线程间的有效通信。以下是对这两个机制的详细解释:一、JVM线程资源同步机制 基本问题: 在多线程执行程序中,线程之间会共同管理资源,这可能导致资源竞争的问题。 由于线程的并发执行,可能会出现脏读、误读等现象,即多个线程同时访问和修改同一个变量时,可能会导致数据不一致。 JVM的同步机制: 对象监视器锁(Object Monitor Lock):这是Java中实原创 2024-11-26 11:38:29 · 815 阅读 · 0 评论 -
java虚拟机——JVM内存管理
Java虚拟机(JVM)的内存管理是Java语言高效、稳定运行的关键部分。原创 2024-11-26 10:53:45 · 954 阅读 · 0 评论 -
java虚拟机——java代码的执行过程
在Java虚拟机(JVM)中,Java代码的执行过程是一个复杂但有序的过程。原创 2024-11-26 10:34:20 · 1011 阅读 · 0 评论 -
java虚拟机——JVM中,内存的哪些区域被划分为线程私有、哪些区域是线程共享的
线程私有的内存区域:程序计数器(Program Counter Register): 也叫PC寄存器,是一块较小的内存空间,用于存储当前线程所执行的字节码的行号指示器。 由于Java多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的,因此每个线程都需要一个独立的程序计数器来记录当前线程执行的字节码位置。 如果线程正在执行一个Java方法,那么计数器记录的是正在执行的字节码指令的地址;如果线程正在执行一个Native方法(如由C或C++编写的JNI方法),那么计数器的值将为Und原创 2024-11-26 10:10:40 · 668 阅读 · 0 评论 -
java多线程——CompletableFuture
CompletableFuture代表一个异步计算的结果,这个结果可以是已完成、正在进行或尚未开始的状态。它提供了一种灵活且类型安全的方式来表达异步操作的生命周期,包括创建、组合、处理结果以及处理异常。其设计灵感来源于函数式编程中的Promises/Futures模式,旨在简化异步编程模型,提高代码的可读性和可维护性。原创 2024-11-26 09:25:20 · 866 阅读 · 0 评论 -
java多线程——线程池
在Java中,线程池是一种用于管理和复用线程的技术,它可以减少创建和销毁线程的开销,提高系统的性能和响应速度。Java标准库提供了包,其中包含了接口及其实现类,用于创建和管理线程池。原创 2024-11-25 21:37:57 · 1570 阅读 · 0 评论 -
java多线程——synchronized与ReentrantLock
synchronized和ReentrantLock都是Java中用于实现线程同步的机制,它们之间存在一些显著的区别。原创 2024-11-25 19:47:08 · 796 阅读 · 0 评论 -
java多线程——synchronized的偏向锁、轻量级锁和重量级锁
偏向锁:适用于只有一个线程访问同步块的场景,通过存储锁偏向的线程ID来优化性能。轻量级锁:适用于多线程竞争不激烈的情况,通过CAS机制和自旋操作来竞争锁。重量级锁:适用于多线程竞争激烈的情况,通过监视器来保证线程同步,但会导致较大的性能损耗。原创 2024-11-25 19:31:05 · 1037 阅读 · 0 评论 -
java多线程——线程安全-举例
之所以会输出8、9、7,是因为进程内的所有线程都可以访问到该区域,当第一个线程已经获得9这个数了,还没来得及输出,下一个线程在这段时间的空隙获得了8这个值,故输出时会输出8、9的顺序值。线程安全性的一个重要方面是确保对共享资源的访问是原子的,即不可分割的,要么全部完成,要么全部不完成。如果忽略了线程安全性,可能会导致难以调试和重现的错误,这些错误可能只在特定的线程调度或系统负载下才会出现。因此,开发者需要仔细考虑并设计线程安全的代码,使用适当的同步机制,并对共享资源进行适当的访问控制。原创 2024-11-25 17:02:25 · 804 阅读 · 0 评论 -
java多线程——Semaphore与CountDownLatch 比较
目的不同Semaphore用于控制对共享资源的访问数量,即限制同时访问某个资源的线程数。CountDownLatch用于等待一个或多个线程完成操作,然后再继续执行。计数器使用不同Semaphore的计数器可以递增和递减,表示当前可用的许可数量。CountDownLatch的计数器只会递减到零,无法再增加。一旦计数器为零,所有等待线程被唤醒,后续对await()的调用将立即返回。使用场景不同Semaphore常用于限制某个资源的并发访问,比如连接池中的线程数控制。原创 2024-11-25 14:24:43 · 493 阅读 · 0 评论