-
DockerCompose中depends_on仅控制启动顺序,不确保依赖服务端口就绪;Java应用需配合健康检查、重试机制、显式JVM内存参数及DNS优化才能稳定运行。
-
策略模式通过封装不同算法并允许运行时切换,提升代码灵活性和可扩展性。其核心由策略接口、具体策略类和上下文组成,实现算法与使用的分离。以Java排序为例,定义SortStrategy接口及BubbleSort、QuickSort等实现类,Sorter作为上下文持有策略引用,客户端可动态设置策略,无需修改源码。该模式适用于多行为变体、需动态切换算法或避免冗长条件判断的场景,符合开闭原则,增强可维护性与测试性。关键在于将变化的行为抽象,用组合取代硬编码,体现解耦设计思想。
-
用this显式访问成员变量是唯一安全、清晰、符合JVM语义的处理方式;不加this会导致赋值作用于局部变量而非成员变量,引发静默逻辑错误。
-
Java对象间通信本质是方法调用,即通过引用直接调用public或包内可见方法;可控方式仅三种:直接调用、回调接口、事件总线;底层依赖JVM动态绑定机制,常见陷阱包括null引用、重载误判与重写失效。
-
ConcurrentLinkedQueue是基于CAS的无锁非阻塞队列,不保证强一致性、不提供阻塞操作,offer()几乎总返回true,poll()为空时返回null而非阻塞或抛异常,size()不可靠,适用于高并发低延迟场景如日志收集。
-
private是安全起点,字段默认应声明为private;只读字段仅提供返回不可变视图或拷贝的getter;可写字段的setter必须校验输入;避免裸暴露字段和机械配齐getter/setter。
-
魔术数字是指未解释、无来源、突然出现且反复复用的字面量,如if(status==3),导致修改困难、易出错、理解成本高;应按语义位置、上下文命名、类型安全(优先枚举)三原则替换为常量,并聚焦HTTP码、业务规则值、协议字符串等高风险项。
-
JAVA_HOME必须最先配置,否则Path和CLASSPATH中%JAVA_HOME%无法展开导致java/javac命令失效;需先新建JAVA_HOME指向JDK根目录,再在Path中单独添加%JAVA_HOME%\bin,CLASSPATH通常无需配置。
-
Java创建启动多线程有三种常用方式:继承Thread类(不推荐,受限于单继承)、实现Runnable接口(最常用,解耦且支持Lambda)、使用Callable配合FutureTask或线程池(支持返回值与异常);生产环境首选线程池。
-
Java遍历数组主要有传统for循环、增强for循环、StreamAPI和迭代器四种方式:需索引或修改元素用传统for;简单遍历优选增强for;过滤转换用Stream;引用类型数组需边遍历边安全删除时才用Arrays.asList+迭代器。
-
Java异常体系以Throwable为根类,其下分为Error和Exception。Error表示系统级问题如OutOfMemoryError,程序无法恢复;Exception分为检查异常(如IOException)需编译期处理,和非检查异常(如NullPointerException)由运行时逻辑错误引发,体现对可恢复与不可控问题的分层处理机制。
-
Java商品库存管理系统用Goods、InventoryManager和Main类实现面向对象设计,通过封装校验库存、集合管理数据、控制台交互完成增删改查,无需数据库即可验证OOP核心思想。
-
IDEA项目需统一设为UTF-8编码:全局/项目/properties文件编码全设UTF-8,勾选透明转码;Maven中声明sourceEncoding;javac和java命令须显式指定-encodingUTF-8和-Dfile.encoding=UTF-8;文件读写必须显式指定Charset;Web端需配置TomcatURIEncoding及SpringBoot编码强制策略。
-
Swing是单线程GUI框架,主线程(EventDispatchThread,EDT)负责处理事件和界面更新;若在actionPerformed中使用阻塞式while(true)循环,将导致EDT被永久占用,界面完全冻结、无响应。
-
Java中将List转字符串需按需选择方法:StringJoiner(推荐,支持前后缀)、String.join(最简)、StringUtils.join(null安全)、StringBuilder(兼容旧版)、JSON序列化(传输场景)。