-
答案:通过定义Course类并利用LocalTime判断时间重叠,实现选课冲突检测。具体为创建包含课程信息的实体类,重写equals和hashCode方法,使用List存储已选课程,在添加新课时遍历列表调用isConflict方法判断是否同一天且时间区间重叠(startTime.isBefore(other.endTime)&&endTime.isAfter(other.startTime)),若冲突则提示用户无法添加,否则加入列表完成选课;可扩展支持单双周、课程编号及Web接口等功能。
-
ForkJoinTask是Java中用于高效并行计算的核心类,适合分治算法场景。通过继承RecursiveTask(有返回值)或RecursiveAction(无返回值),重写compute()方法实现任务拆分与执行,结合fork()异步提交、join()等待结果,利用ForkJoinPool的工作窃取机制提升多核性能,关键在于合理设置任务粒度以平衡拆分开销与并行效率。
-
抽象类该有构造函数,且通常必须有;它不能是private,推荐用protected修饰,子类构造器需显式调用super(...)。
-
应使用枚举配合switch实现状态分流,显式覆盖所有枚举值、禁用default兜底,Java14+推荐switch表达式,旧版default抛AssertionError;case仅调度不实现业务;状态变量须强类型绑定枚举;优先考虑在枚举内定义抽象方法实现行为穷尽。
-
Thread.enumerate()仅返回当前线程组活跃线程快照数组,需配合getState()逐个判断状态;统计时应先用activeCount()预估并扩容数组,再enumerate填充,遍历非null线程计数各State频次。
-
安全获取Stream首个元素应始终基于Optional的存在性做显式分支处理:用ifPresent()执行无返回操作,orElse()/orElseGet()提供默认值,map()+orElse()链式转换,orElseThrow()仅用于业务强制非空场景。
-
Optional.or()提供惰性、可组合的备选值获取机制,接收Supplier<Optional<T>>,仅在为空时调用并返回Optional,支持链式操作与多级fallback。
-
基本类型必须通过包装类才能存入Java集合,因集合只支持引用类型;自动装箱/拆箱简化操作,但需注意==比较陷阱、null值检查及字符串转换异常处理。
-
逃逸分析本身不直接实现栈上分配,而是JVM或Go编译器在运行时或编译期识别出变量不会逃逸后,自动触发栈上分配;真正起作用的是编译器优化,不是开发者手动写“分配到栈上”的代码。
-
DataInputStream读不到int或double是因它只按Java二进制格式(大端、定长)解析,必须由DataOutputStream配套写入;否则字节布局错位,导致EOFException或异常数值。
-
JDK动态代理性能优化核心是缓存Method/Constructor、复用InvocationHandler、用MethodHandle替代反射调用,并调整inflation阈值。
-
线上偶发出现 2025-13-32 这类异常日期,很多时候不是数据源错了,而是多个线程共享了 SimpleDateFormat。本文从复现现象开始,逐步验证共享可变状态,并给出 DateTimeFormatter 和 ThreadLocal 两种修复方式。
-
Java用POI导出Excel卡顿的核心原因是写法不当导致内存暴涨、GC频繁或IO阻塞,应使用SXSSFWorkbook流式写入、复用样式与字体、关闭自动刷新、优化SQL及分批处理。
-
本文介绍如何使用Java11+的HttpClient动态传入未知数量与键值对的请求头,支持单值/多值Header场景,提供两种高效实现方式(扁平化数组构造与链式构建),并附可直接运行的示例代码与关键注意事项。
-
Java增强for循环不支持var声明,因语法结构限制和编译期类型推导机制不兼容,强行使用将导致编译错误;替代方案包括显式声明、传统for循环或StreamAPI。