
JAVA
文章平均质量分 82
严文文-Chris
这个作者很懒,什么都没留下…
展开
-
运行时常量池 和 字符串常量池分别是什么?两者关系与区别?为什么JDK 7将字符串常量池移到堆中?
理解两者的存储位置,有助于优化内存使用和避免OOM问题!原创 2025-04-12 11:55:24 · 328 阅读 · 0 评论 -
JVM程序编译与代码优化是什么
JVM(Java虚拟机)在执行Java程序时,会通过多阶段的编译和优化将字节码转换为高效的机器码。原创 2025-04-11 10:54:18 · 743 阅读 · 0 评论 -
【锁升级定义?锁升级触发条件?锁升级过程?锁升级实现?优缺点?实际使用场景?】
理解锁升级有助于优化高并发代码(如减少锁竞争、合理设置同步块大小),并定位性能瓶颈(如频繁锁升级导致的阻塞)。• 该线程再次进入同步块时,只需检查线程ID是否匹配,无需同步操作。:第二个线程尝试获取锁时,偏向锁撤销(Revoke)。• 检查锁对象是否仍被该线程独占,若否,撤销偏向锁。:所有阻塞线程释放锁后,JVM可能重置为无锁状态。Java中的锁升级是锁优化的核心过程,分为。:第一个线程访问同步块时,JVM启用偏向锁。的优化机制,指在运行时根据竞争情况,将。:偏向锁撤销后,或默认配置关闭偏向锁时。原创 2025-04-11 10:02:45 · 525 阅读 · 0 评论 -
【线程有哪些状态?这些状态如何相互转换?阻塞和等待的状态有什么区别?】
线程的生命周期包含多个状态,不同状态之间的转换由线程调度和同步机制决定。通过理解线程状态及其转换,开发者能更高效地设计并发程序,并快速定位死锁、资源竞争等问题。:时间片用完或被更高优先级线程抢占(由操作系统调度决定)。• 线程状态的切换依赖于锁机制、同步方法和操作系统调度。:尝试进入同步块/方法时,锁已被其他线程持有。:线程A持有锁,线程B尝试进入同步块时被阻塞。:线程A释放锁后,线程B成功获取锁并恢复执行。:锁被释放(如持有锁的线程退出同步块)。是线程被动等待锁,未持有锁;是线程主动释放锁后等待条件。原创 2025-04-10 11:21:12 · 533 阅读 · 0 评论 -
【线程有哪些?内核线程、用户线程、轻量级进程的关系?】
由用户空间的线程库(如 POSIX 的。原创 2025-04-10 10:58:23 · 931 阅读 · 0 评论 -
【线程、工作内存和主内存的关系?】
每个线程独立拥有,存储该线程使用的变量副本(从主内存拷贝而来)。:线程的所有读写操作均在工作内存中进行,不直接与主内存交互。:所有线程均可访问,但线程不能直接操作主内存中的数据。:线程私有,存储变量副本,需通过同步机制与主内存交互。:未同步时,线程对变量的修改可能对其他线程不可见。:写操作立即刷新到主内存,读操作直接读取主内存。:通过操作工作内存中的变量副本间接影响主内存。:清空工作内存,从主内存重新加载变量。:将工作内存的修改刷新到主内存。,强制读写直接与主内存交互。从工作内存写回主内存。原创 2025-04-10 10:09:42 · 848 阅读 · 0 评论 -
【为什么volatile不能保证线程安全性?】
基于 CAS(Compare-And-Swap)实现无锁原子操作,性能高。:双重检查锁定(Double-Checked Locking)中,无法保证复合操作的原子性,需根据场景选择锁或原子类。,但它并不能完全保证线程安全。防止指令重排序导致对象未初始化完成就被使用。:如果变量的操作是原子性的(如。无法保证复合操作的原子性。:通过锁保证原子性和可见性。关键字可以保证变量的。如果两个线程同时执行。的直接赋值或读取),:性能较低(锁竞争)。原创 2025-04-10 10:01:21 · 396 阅读 · 0 评论 -
【注解简化配置的原理是什么】
通过声明式编程让框架或工具自动处理这些元数据,从而减少手动配置的复杂度。编译器或注解处理器(Annotation Processor)读取注解,生成额外代码(如。框架通过反射(Reflection)扫描类路径,检测注解并动态构建对象关系(如。在编译时或运行时解析注解并生成对应的行为。:配置与代码分离,维护困难,容易出错,且缺乏类型安全。注解(Annotation)简化配置的核心原理是。:开发者从繁琐的配置中解放,专注于业务逻辑实现。:配置与代码合一,直观且类型安全。,遵循约定减少显式配置。原创 2025-04-06 17:14:21 · 614 阅读 · 0 评论 -
【注解小结】
是一种为代码添加**元数据(Metadata)**的机制,它本身不会直接影响程序的逻辑,而是为编译器、框架或运行时环境提供额外的信息。:类似于标签,贴在代码上,告诉工具或框架如何处理这段代码。:定义注解的生命周期(源码、编译时、运行时)。:指定注解可应用的目标(类、方法、字段等)。:编译检查、代码生成、框架集成、文档生成等。:简化配置、增强可读性、支持工具链集成。:是否将注解包含在Javadoc中。定义注解,可包含属性和默认值。:是否允许子类继承父类的注解。:注解声明、元注解、属性。:代码的元数据标签。原创 2025-04-06 17:10:50 · 412 阅读 · 0 评论 -
【实例方法一定能被覆盖(Override)吗?】
理解这些规则有助于写出更健壮的面向对象代码。Java 5+ 允许覆盖方法的返回类型是父类方法返回类型的。,但某些情况下会被限制。在 Java 中,实例方法(非。Java 要求覆盖方法的访问权限。(子类可以定义同名方法,但这是。满足以下条件时,实例方法。方法对子类不可见,因此。静态方法属于类级别,原创 2025-04-03 11:22:13 · 387 阅读 · 0 评论 -
【static 方法可以被覆盖(Override)吗?】
因此不能被覆盖(Override)。方法不能被覆盖,但子类可以定义一个。原创 2025-04-03 11:19:18 · 355 阅读 · 0 评论 -
【String不可变是什么意思?为什么要设置成不可变的?有什么方法可变呢?】
高频字符串操作优先用。原创 2025-04-03 11:06:35 · 504 阅读 · 0 评论 -
【为什么静态方法可以调用静态变量,不能调用实例变量?为什么main方式的静态的?】
必须通过对象实例访问。就初始化,不依赖于任何对象实例。可以,因为实例方法默认持有。实例变量(非静态变量)属于。原创 2025-04-03 11:03:32 · 295 阅读 · 0 评论 -
【为什么基本数据类型不能存储在集合、泛型中?】
虽然有一定性能开销,但通过自动装箱和优化库(如。,基本类型和引用类型严格区分,避免混淆。设计的,后续版本为了兼容性没有改变。设计的,基本类型由于不是对象,必须通过。这主要与 Java 的。Java 1.0 的集合(如。如果对性能要求极高,可以使用。Java 的集合和泛型是为。Java 的集合类(如。中,而必须使用它们的。由于泛型在运行时只认。,而基本数据类型(如。,在运行时会被擦除(,所以无法直接存储。原创 2025-04-03 09:27:49 · 307 阅读 · 0 评论 -
【为什么Java中有基本数据类型、包装类型?两者的区别是什么?】
各有用途,它们的出现是为了解决不同场景下的需求。下面详细解释它们的区别以及为什么需要包装类型。这使得代码更简洁,但仍然需要注意性能问题(频繁装箱/拆箱可能影响效率)。在实际开发中,应根据需求选择合适的数据类型。频繁的装箱/拆箱(如循环中使用。,使得基本类型和包装类型可以。Java 的基本数据类型(Java 5 引入了。原创 2025-04-03 09:25:07 · 523 阅读 · 0 评论 -
【类文件是什么?有什么作用?流程是什么?】
包括类或接口的名称、父类、接口、访问权限(如 public、private)、字段、方法等。原创 2025-01-22 08:50:39 · 376 阅读 · 0 评论 -
【队列特点及Java实现】
循环队列(Circular Queue)是一种优化的顺序队列,通过环形结构避免“假溢出”的问题。它将最后一个元素和第一个元素相连,形成一个环状队列,并使用队首和队尾指针管理队列。的 Java 实现,包括初始化、判空、判满、入队、出队、取队首元素等操作。顺序队列是基于数组实现的队列。链式队列是基于链表实现的队列。原创 2024-11-19 16:06:49 · 461 阅读 · 0 评论 -
【栈特点及Java实现】
栈(Stack)是一种以下是用 Java 实现和。原创 2024-11-19 15:57:51 · 376 阅读 · 0 评论 -
【静态初始化块、静态变量、静态方法的赋值赋值时机】
在 Java 中,的赋值或执行时机与类加载密切相关。下面详细说明它们的赋值时机和执行顺序。是属于类本身的变量,在类加载过程中完成初始化。(类加载的0falsenull(类加载的在类加载的执行,用于对类进行额外的初始化操作。是在类级别定义的,可以通过类名直接调用,而不需要实例化对象。原创 2024-11-16 10:19:14 · 601 阅读 · 0 评论 -
【分派和双分派】
分派是指在运行时或编译时根据对象的类型选择适当的代码块(如方法或函数)执行。分派机制确保程序根据对象的实际类型调用正确的函数,实现多态的动态绑定。分派分为静态分派和动态分派静态分派(Static Dispatch):分派在编译阶段完成。编译器根据方法签名选择调用哪个方法,主要应用在方法重载中。静态分派不依赖对象的运行时类型,而是基于参数的静态类型。动态分派(Dynamic Dispatch):分派在运行时完成。根据对象的实际类型选择调用的具体方法,应用在方法重写中。原创 2024-10-26 15:04:10 · 680 阅读 · 0 评论 -
【反射的实现原理】
反射机制依赖于 JVM 的类加载和元数据管理,通过Class对象及其相关 API,开发者可以动态操作类的结构和行为。虽然反射提供了强大的灵活性,但它的使用带来了性能开销和安全性问题,因此应谨慎使用,并在特定场景下最大化其效用。原创 2024-10-22 15:13:10 · 868 阅读 · 0 评论 -
【Java编程-反射】
反射是指在运行时,程序可以。原创 2024-10-22 15:05:38 · 963 阅读 · 0 评论 -
【序列化和反序列化】
和是 Java 中用于将对象状态转换为可存储或传输格式的机制。序列化允许对象转换为字节流(binary stream),可以保存到文件或通过网络传输;反序列化则是将字节流还原为对象。它们通常用于持久化对象或在分布式系统中通过网络传输对象数据。原创 2024-10-20 18:49:12 · 720 阅读 · 0 评论 -
JVM垃圾回收
哪些对象可以作为 GC Roots 呢?虚拟机栈(栈帧中的局部变量表)中引用的对象本地方法栈(Native 方法)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象所有被同步锁持有的对象JNI(Java Native Interface)引用的对象对象可以被回收,就代表一定会被回收吗?即使在可达性分析法中不可达的对象,也并非是“非死不可”的,这时候它们暂时处于“缓刑阶段”,要真正宣告一个对象死亡,至少要经历两次标记过程;原创 2024-08-19 20:57:27 · 924 阅读 · 0 评论 -
【Java 内存区域】
-原创 2024-08-19 17:34:52 · 625 阅读 · 0 评论 -
网络拓扑之DNS
DNS是什么域名系统(Domain Name System) ,根据域名查出IP地址。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS可以使用TCP和UDP的53端口,基本使用UDP协议的53端口。DNS 的分布式数据库是以域名为索引的,每个域名实际上就是一棵很大的逆向树中路径,这棵逆向树称为域名空间(domain name space)。出原创 2022-04-11 19:05:47 · 1712 阅读 · 0 评论 -
网络拓扑学习之SLB
什么是SLB负载均衡(Server load Balance) 是一种对流量进行按需分发的服务,通过将流量分发到不同的后端服务来扩展应用系统的服务吞吐能力,并且可以消除系统中单点故障,提升应用系统的可用性。SLB的功能检查云服务器ESC的健康状态,自动隔离异常状态的ECS。解决单点问题,提供应用整体服务能力。具备TCP和HTTP抗DDos的特性,增强防护能力。组成部分CLB实例 instances一个CLB实例是一个运行的负载均衡服务,用来接收流量并将其分配给后端服务器。监听 Lis原创 2022-04-11 18:06:18 · 2821 阅读 · 0 评论 -
企业级API网关学习总结
网关的产生背景微服务架构演变单体架构所有服务集中在单个项目中,每次部署需要部署整个项目好处:弊端:新人上手难;扩缩容困难;业务规模扩大后,分布式架构将系统进行垂直和横向拆分后分别部署在服务器上纵向拆分:根据业务分类进行拆分横向拆分:将拆分后的业务横向部署多个节点,保证服务高可用性SOA架构面向服务即将共用的服务抽取出来做为一个服务供所有系统使用,每个系统不再各自实现ESB:是一个集中式的服务总线。通过ESB,可以实现集成业务处理,监控系统间消息流动,管理系统间交互的业务服务原创 2022-03-24 20:16:04 · 1105 阅读 · 0 评论 -
腾讯COS分块上传踩坑记录
背景项目中用到腾讯COS去存储、查询文件,但是未做分块上传的优化逻辑,所以决定增加大文件分块上传逻辑步骤腾讯COS官网显示分块上传有7个方法Initiate Multipart Upload实现初始化分块上传,成功执行此请求后将返回 UploadId,用于后续的 Upload Part 请求。Upload Part实现将对象按照分块的方式上传到 COS。最多支持10000分块,每个分块大小为1MB - 5GB,最后一个分块可以小于1MB。Upload Part -Copy实现将原创 2022-03-22 18:39:22 · 3496 阅读 · 4 评论 -
JAVA IO流
JAVA IO流背景为什么需要IO流什么是流 streamIO流的分类类图结构为什么字符流需要 flush,而字节流不需要背景本人在实践COS分块上传是发现需要使用到IO流,但是对流如何分段获取有疑惑,所以系统学习下IO流。为什么需要IO流当我们程序需要从硬盘,网络,或其他程序读取或者写入数据时,数据传输量可能很大,但是我们的内存和带宽有限,无法一次新读取或者写入大量数据流可以帮助我们实现分批逐步传输数据下载一个大文件是可以在内存中划分一个缓冲区,一点一点下载到自己的内存,等缓存区满了再写到原创 2022-03-21 11:37:05 · 396 阅读 · 0 评论 -
跳转语句小结
跳转语句作用:将控制转移到程序的其他部分,跳转部分有以下几种:break语句,continue语句,goto语句,return语句,throw语句种类:1、break语句:用于终止最近的封闭循环或所在的switch语句,控制传递给终止语句后面的语句2、continue语句用于将控制权传递到他所在循环语句的下一次循环3、goto语句用于将程序控制直接传递到标原创 2018-04-08 23:07:55 · 1332 阅读 · 8 评论 -
Java中重载和重写的区别
Java中重载和重写的区别1.1重载是什么Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段,多个同名函数同时存在,具有不同的参数个数/类型1.2为什么用重载重载是一个类中多态性的一种表现Java的方法重载就是在类中创建多个方法,他们具有相同的名字,但具有不同的参数和不同的定义调用方法是通过传递给他们的不同参数个数和参数类型决定具体使用哪个方法,这就是多态性1.3重...原创 2018-03-15 19:33:33 · 266 阅读 · 10 评论 -
注解、元注解、自定义注解的原理
文章目录前言叙述一、基本概述二、原理三、元注解定义注解格式:小结前言叙述一、基本概述Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,...原创 2019-10-13 13:13:33 · 307 阅读 · 1 评论 -
Dubbo+Spring原理浅析
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案特点:远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种县城模型,序列化,以及"请求-响应"模式的信息交换方式 集群容错:提供基于接口方法的透明远程过程嗲用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持 自动发现:基于注册中心目录服务,使服务消费方...原创 2018-12-21 20:10:24 · 336 阅读 · 3 评论 -
面向对象总结
java面向对象:面试内容 java的修饰符及其作用 重载和重写的区别以及各自在代码上的体现 说说对构造器的认识和理解原创 2019-02-17 21:48:54 · 203 阅读 · 2 评论 -
Java修饰符
Java中有类修饰符,成员变量修饰符,方法(包括构造方法)修饰符类修饰符:public 访问控制符——声明为一个公共类,他可以被任何对象访问,一个程序的主类必须是公共类abstract 声明为一个抽象类,没哟实现的方法,需要子类实现final 声明为一个最终类(就是非继承类),表示这个类不能被其他类继承friendly 默认的修饰符,只有在相同包中的对象才能使用这样的类default ...原创 2018-02-10 17:21:40 · 234 阅读 · 7 评论 -
JDBC简介
JDBC什么是JDBCJDBC的典型用法JDBC常用接口JDBC编程步骤代码展示类,接口详解什么是JDBC你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识JDBC 是java database connectivity的缩写,是SUN公司提供的一套操作数据库的标准规范。...原创 2019-05-15 21:07:15 · 377 阅读 · 3 评论 -
Throw、Throws、Try 和-Catch区别
Throw、Throws、Try和-Catch区别最近碰到异常处理,在这里好好总结一下:1、Throw就是抛出一个一场,并获取这个异常的引用,这个一场会被抛到外部的环境,由外部环境进行处理public void func() throws Exception() { throw new Exception ();原创 2018-04-08 23:42:12 · 447 阅读 · 6 评论 -
Java中this
this关键字主要有三个应用: (1)this调用本类中的属性,也就是类中的成员变量; (2)this调用本类中的其他方法; (3)this调用本类中的其他构造方法,调用时要放在构造方法的首行。 应用一:引用成员变量 Public Class Student { String name; //定义一个成员变量name private void SetName(String name) { //定...原创 2018-02-26 12:01:56 · 13993 阅读 · 27 评论 -
实例化的地点解析
领悟:实例化在遍历的里面和外面,效果是不一样的,如果实例化在遍历的外面,如下代码:/***多个行政班合成一个上课班,返回该上课班Id**@paramclassIds多个行政班Id*@return上课班Id*@author严文文*@since2.0.022018-11-1016:10:18*/@Overridepublic String insertTeachClassId...原创 2018-11-11 20:34:11 · 255 阅读 · 3 评论