-
Java中的不可变集合指List.of()、Set.of()、Map.of()等返回的真正不可修改实例,创建后大小、元素、顺序均不可变,任何修改操作抛UnsupportedOperationException,且不共享可变状态;而Collections.unmodifiableXXX()仅为只读代理,原始集合仍可变。
-
UV统计不宜直接用ConcurrentHashMap,因其需存储完整用户ID导致内存开销大、GC压力高,且size()不准确、computeIfAbsent易引发无效对象分配;BitMap适用于ID可映射为可控范围非负整数的场景,否则误判率高;UV_HashSet通过复用Boolean.TRUE节省内存,较ConcurrentHashMap显著降低堆占用。
-
volatile仅解决可见性和有序性,不保证原子性;适用于多线程读写、写操作不依赖当前值、不构成不变性条件、只需单次读写可见性与禁止重排序的场景,如状态标志位。
-
Java里方法只能有一个返回类型,但可以有多个return语句Java不支持真正意义上的“多返回值”,所谓“多个返回出口”指的是一段逻辑中在不同分支下执行不同的return。这是完全合法且常见的写法,比如空值校验提前退出、异常路径提前返回等。关键不是能不能写多个return,而是怎么写才不会让调用方困惑或引发空指针/逻辑跳过。所有return必须返回相同类型(或其子类),否则编译报错:incompatibletypes如果方法声明了非void返回类型,**每个可能的执行路径都必须有return
-
Java不支持类的多重继承但允许接口多实现,因接口仅声明契约而无状态,避免菱形继承歧义;类继承则耦合状态与行为,多继承易引发冲突。
-
JavaFX项目应分model/view/controller三层:model用POJO含绑定属性,view仅FXML加载与事件绑定,controller通过ObservableList更新UI;耗时操作须用Task并发;SQLite操作必用PreparedStatement;jpackage打包需配注册表、图标及用户目录配置。
-
访问者模式适用于结构稳定但操作多变的场景,如编译器语法树、XML/JSON节点树、GUI组件树等;它通过双分派解耦操作与结构,新增功能只需添加Visitor实现类,避免修改原有节点类,提升可维护性与健壮性。
-
父子线程无自动绑定,ThreadGroup不传递数据或生命周期,仅InheritableThreadLocal在newThread时单次继承值,资源清理须手动,ScopedValue是Java19+更安全的替代方案。
-
Java程序在控制台运行需先配置JDK环境,确保javac和java命令可用;编写时类名与文件名严格一致、main方法签名正确;编译运行注意路径、类路径及包结构;输入用Scanner需处理换行符残留;输出可能被缓冲,应适时flush或使用System.err。
-
应使用与源码版本严格匹配的构建脚本,如JDK17u源码必须用jdk17u分支的configure脚本,否则会因参数校验失败或特性不识别而报错。
-
Java类加载被篡改需先确认是否真需自定义ClassLoader:核心在于确保解密类被实际使用、密钥外部注入、跳过双亲委派、禁用明文类加载、资源与注解处理器单独处理。
-
正确处理Java任务调度中的异常可防止任务丢失和系统不稳定。应使用ScheduledExecutorService替代Timer,在任务内部捕获RuntimeException等异常;通过ThreadFactory设置未捕获异常处理器,结合日志与监控系统(如Prometheus、ELK)实现告警;对于复杂场景,采用Quartz框架并实现JobListener监听执行失败,确保异常不逃逸任务体,保障调度可靠性。
-
@Override报错是因为方法签名未严格匹配父类或接口:方法名、参数类型/顺序、返回类型(协变除外)、异常声明须一致;常见于参数类型不等价、访问权限降级、误覆写static方法或泛型擦除导致的签名不匹配。
-
预览版特性是语言或平台正式发布前开放试用的未稳定功能,API、语法及行为可能变更或删除;它们已通过内部验证但需社区反馈定稿,如Javarecord、C#主构造函数等。
-
安装IntelliJIDEA社区版并配置JDK11或17;2.设置JAVA_HOME环境变量并验证java-version;3.在IDEA中新建Java项目,配置ProjectSDK并创建HelloWorld类;4.运行输出“Hello,Java!”确认环境成功。