-
工厂模式通过将对象创建逻辑集中封装,解耦业务代码与具体实现,支持动态类型选择、统一配置管理及后续架构演进。
-
Lombok的@SneakyThrows注解具有SOURCE级保留策略,编译后即被擦除,无法通过反射直接检测;但可通过“异常抛出行为+方法签名检查”双重断言,间接、可靠地验证其存在与生效。
-
IOException是受检异常,必须try-catch或throws,因其代表外部环境引发的不可预判错误;推荐用try-with-resources确保资源关闭,并捕获具体子类而非泛化Exception。
-
TypeNotPresentException不是ClassNotFoundException,因为它是JVM解析泛型/注解等元数据时发现类型不存在而抛出的RuntimeException,发生在类加载前的字节码解析阶段,而非Class.forName()失败。
-
多态必须依赖继承和封装:继承提供父类引用指向子类对象的可能,封装通过访问控制确保方法可被重写与安全调用;二者缺一不可,否则无法实现运行时动态绑定。
-
运行java-version输出版本号即配置成功;否则检查JAVA_HOME路径是否指向JDK根目录、PATH是否包含%JAVA_HOME%\bin(Windows)或$JAVA_HOME/bin(macOS/Linux),并确认终端已重启或执行source刷新配置。
-
猜数字游戏常见问题包括:nextInt()后nextLine()因残留换行符而跳过输入,应统一用nextLine()配合Integer.parseInt();Random默认种子易重复,需用System.nanoTime()提升随机性;while循环需正确break或return终止;Scanner和Random对象不应重复创建;中文乱码需编译和运行时指定UTF-8编码;边界输入须trim()并捕获异常。
-
Java标准控制台输入无法让Scanner.nextLine()的输入内容与提示符显示在同一行,因为System.in是行缓冲流,必须按回车才能提交;本文详解原因、替代方案及实际可行的优化技巧。
-
Java对象创建是JVM执行new指令后触发的严格初始化流程,包含类加载检查、内存分配(TLAB/指针碰撞/空闲列表)、零值初始化与对象头设置、<init>构造器执行四步,每步受规范约束且影响性能与诊断。
-
IDEA断点仅在可执行语句(如方法调用、赋值、条件入口)生效;StepOver跳过方法体,StepInto进入方法内,StepOut返回上层;变量需手动展开或双击查看深层值,修改须用“SetValue”并回车确认。
-
应优先用List.copyOf确保底层数据彻底不可变,它复制新列表并返回JDK10+内置不可变实现;Collections.unmodifiableList仅包装视图,原始列表变更会影响视图。
-
IDEA中PlantUML插件失效主因是Graphviz未配置PATH或Java版本与插件不兼容,需确保dot命令可用、使用0.36+插件适配JDK17+,并手动指定最新plantuml.jar路径,且仅对有效.java文件生效。
-
Semaphore用于限制并发访问资源的数量,如停车场示例中控制5个停车位的分配,通过acquire获取许可、release释放许可实现限流;CountDownLatch用于等待一组操作完成,如主线程等待3个子任务执行完毕后再继续,通过countDown递减计数、await阻塞等待归零。两者均属于java.util.concurrent包,适用于不同协作场景:前者适合资源池管理,后者适合任务同步,结合ExecutorService可更好管理线程生命周期,合理选用可简化并发逻辑。
-
Java的interrupt()仅设中断标志位,对阻塞线程需配合可中断方法(如sleep/wait)响应InterruptedException才能优雅中断;不可中断场景须用可中断替代方案或关闭资源破局。
-
AbortPolicy是默认拒绝策略,任务被拒时直接抛出RejectedExecutionException异常;CallerRunsPolicy则由提交任务的线程同步执行该任务,实现反压节流。