-
Redis预减库存必须用DECRBY而非GET+SET,因后者存在竞态条件导致超卖;DECRBY原子性防超卖,需配合EXISTS校验key存在、检查返回值是否为负、Lua脚本封装操作,并在DB层用WHEREstock>0二次校验。
-
substring(intbeginIndex)合法索引范围是0到字符串长度(含),如"abc".substring(3)返回"",但substring(4)越界;空串时s.length()-1为-1会抛异常,需先判空;substring(begin,end)为左闭右开区间,长度等于end-begin。
-
饿汉式单例天然线程安全,因static字段在类加载阶段由JVM同步初始化,确保INSTANCE唯一且无竞态;但存在提前创建、无法传参等问题。
-
包用于组织和命名类以避免冲突,类路径则告诉JVM从何处加载字节码;二者分别负责逻辑命名与物理定位,紧密配合确保Java程序正确编译与运行。
-
Java应用在Docker中启动慢、OOMKilled主因是JVM未适配容器内存限制;需启用-XX:+UseContainerSupport(8u131+默认开)、显式设-Xmx/-Xms为容器内存的50%~75%,并选用eclipse-temurin等轻量镜像、多阶段构建、正确配置HEALTHCHECK与actuator端点。
-
Java异常体系以Throwable为根,分为Error(不捕获)和Exception;Exception又分RuntimeException(非受检,如NullPointerException)和受检异常(如IOException,必须声明或捕获)。
-
Java多模块Maven项目依赖管理核心是父POM通过<dependencyManagement>统一声明版本,子模块仅写groupId和artifactId继承;模块间引用省略version,依赖关系需避免循环,构建顺序由模块依赖图决定而非<modules>顺序。
-
JVM仅接受publicstaticvoidmain(String[]args)或publicstaticvoidmain(String...args)两种签名;其他改动会导致运行时错误,因JVM硬编码校验修饰符、静态性、返回类型及参数类型。
-
Java中二维数组实为“数组的数组”,支持不规则结构;声明如int[][]arr=newint3或int[][]arr={{1,2},{3,4,5},{6}};遍历时需判空防NullPointerException。
-
CloneNotSupportedException根源是类未显式声明implementsCloneable接口,即使重写了clone()方法;必须public重写clone()、手动处理引用类型深拷贝、数组和final字段需特殊处理,但原生clone机制脆弱,推荐用构造函数、静态工厂或序列化替代。
-
使用Enum管理异常码可实现类型安全、编译期校验、IDE自动补全,并支持绑定HTTP状态码、可重试性等行为;通过code键+MessageSource动态解析多语言消息,避免硬编码;需正确注入MessageSource并传入Locale与参数,HTTP状态码应按语义严格对齐。
-
在Java8+中,单次拼接推荐用+(编译器优化为StringBuilder),concat()仅适合小字符串;循环拼接必须用StringBuilder;split()默认丢弃末尾空串,需传-1保留;replace()用于字面量替换,replaceAll()和replaceFirst()走正则;substring()在JDK7u6+已修复内存泄漏,但大字符串截取仍需谨慎。
-
应使用队列替代递归展开空白区域以避免栈溢出和重复访问;UI更新须严格在EDT中执行并同步模型与组件状态;布雷需确保循环终止条件正确,防止雷数不足。
-
不能安全、合规地绕过访问权限调用私有构造器——Java的setAccessible(true)在JDK9+强封装下默认抛出InaccessibleObjectException,仅在模块开放、旧版本或开发环境等受限场景可能成功,生产环境应优先采用工厂方法、构建器或依赖注入等设计替代方案。
-
常量池是.class文件中存储字面量和符号引用的核心结构,包括字符串、数字、类/方法/字段名及描述符等,均以CONSTANT_Utf8_info等形式存放,指令通过索引引用,实现空间节省、动态链接与JVM验证优化。