-
普通ThreadLocal无法在父子线程间传递值是因为其值仅绑定当前线程的ThreadLocalMap,子线程为新实例且不复制父线程值;InheritableThreadLocal通过重写createInheritedMap()和childValue(),在子线程init时浅拷贝父线程值,但仅限直接创建的子线程,不适用于线程池等复用场景。
-
Java的Math类是静态工具类,提供高精度、线程安全的数学运算方法,涵盖绝对值、四舍五入、取整、幂运算、三角函数、常量及随机数等,使用时需注意参数单位、定义域及返回类型等细节。
-
ReadableByteChannel是JavaNIO中定义读字节能力的接口,非具体类,核心方法为read(ByteBuffer)和close();它不处理字符编码或行边界,返回值表示实际读取字节数,可能为0(非阻塞无数据)、-1(EOF)或正数,需每次检查并配合buffer.flip()/clear()使用。
-
答案是Java通过定时任务扫描借阅记录并发送到期提醒。具体包括:分析需求,设计User、Book、BorrowRecord数据模型,使用@Scheduled注解每日执行检查,查询即将到期的借阅记录,并通过邮件等方式通知用户,支持短信、站内信等多渠道扩展,确保提醒及时可靠。
-
Character.isLowerCase()仅判断Unicode小写字母,不处理数字、符号、空格及非拉丁字母,需结合业务逻辑扩展;常见要求包括纯ASCII小写、允许特定分隔符或国际化支持。
-
Collections.swap()仅用于安全交换List中两元素,不实现排序逻辑;冒泡排序用它交换相邻逆序元素,选择排序用它将极值换至目标位。
-
TreeMap适合需键自动排序的场景,基于红黑树实现O(logn)操作,支持floorKey/ceilingKey范围查询(需判null)、subMap子视图及自定义Comparator;不支持并发写入,高并发应选ConcurrentSkipListMap。
-
控制台项目初期不应分模块,建议前两周所有类平铺在一个包中;待核心流程跑通后再按职责切分,优先合并状态强耦合类;main()应避免裸while循环,改用命令解析+业务调用分离;状态统一由HallContext单例管理并序列化持久化;Windows下需统一编译、运行及IDE终端编码为UTF-8。
-
List.of()和Map.of()创建的集合不能add/remove,因为它们返回JVM内置不可变实现类(如ListN、MapN),所有修改操作均直接抛UnsupportedOperationException;不支持null、有参数数量限制(List.of最多10个)、Map.of重复key在Java14+编译期报错;适用于配置项、映射表等只读场景,但不防元素内部可变。
-
应根据List是否可变、是否含null、后续是否需增删来选择:可变且无null用replaceAll;不可变或含null或需增删则用Stream.map配合toCollection(ArrayList::new)。
-
调用window.print()可触发浏览器原生打印对话框,需配合@mediaprintCSS隐藏非关键元素、优化布局适配A4尺寸,并利用onafterprint增强交互体验。
-
分支预测不影响逻辑正确性但显著影响执行速度,因预测失败导致流水线冲刷;有序数组使预测命中率高,随机数组则频繁失败;单向过滤、数据局部性好、避免嵌套条件更易预测;编译器可用cmov等消除分支。
-
catch(Exceptione)会吞掉RuntimeException(如NullPointerException)和受检异常(如IOException),但二者处理意图不同:运行时异常应暴露修复,而非静默忽略;错误吞咽导致空指针后继续执行、堆栈丢失、事务不回滚等严重问题。
-
StringJoiner原生支持分隔符、前缀和后缀,创建时指定三参数即可自动包裹元素;空集合返回前缀+后缀(如“[]”),无需判空;支持链式调用、merge合并及与Collectors.joining无缝对应。
-
Java要求局部变量在使用前必须明确初始化;若仅用独立if语句而无else覆盖所有可能取值,编译器无法保证变量一定被赋值,从而报错。正确做法是用if-elseif-else结构或直接初始化默认值。