-
ResultSet.getMetaData()返回ResultSetMetaData对象,需调用其方法逐列获取列名(getColumnName/getColumnLabel)、JDBC类型码(getColumnType,推荐用于逻辑判断)、驱动映射类型名(getColumnTypeName,仅调试用)等元信息。
-
Java中用while+AtomicInteger实现无锁计数器需基于CAS自旋重试:先get当前值,计算新值,再compareAndSet;失败则重读重试。循环内须幂等、无副作用,条件判断必须在循环内紧邻get以保证原子性。
-
装饰器模式通过组合动态扩展对象行为,核心是装饰器持有被装饰对象引用并委托调用;需定义统一接口,抽象装饰器提供默认委托实现,具体装饰器只添加自身逻辑,使用时可自由叠加。
-
增强for循环本质是迭代器,编译后等价于while(it.hasNext())结构;需集合实现Iterable接口,HashMap等须转entrySet()等;遍历时删除元素会抛ConcurrentModificationException,应改用Iterator.remove()或removeIf()。
-
数组实现负载权重分配的核心是构建累积权重数组并用随机数匹配区间:如A(3)、B(2)、C(5)得[3,5,10],生成[1,10]随机数,二分查找首个≥该数的索引即目标。
-
JavaPriorityQueue默认最小堆且非线程安全;要实现高优先级数字越大越先出,需传Comparator.reverseOrder()或自定义比较器;不支持O(logn)更新优先级或按值删除,remove()为O(n)且破坏堆结构。
-
模块化系统不直接减少内存碎片,但通过控制类加载与卸载缓解元空间伪碎片化;它限制动态反射滥用、强制显式依赖、提升模块层批量卸载成功率,并需配合JVM参数优化元空间管理。
-
判断两个Map键是否相同可通过keySet().equals()实现,如map1.keySet().equals(map2.keySet())返回true表示键集相同(顺序无关);需先判空避免NullPointerException;不同Map类型间也可比较;若需判断子集关系可用containsAll。
-
能,但关键在“怎么加”和“何时用”:default方法是接口演化的通道,仅支持行为追加而非契约变更,需满足编译与运行版本兼容、实现类无同签名方法等条件才能回退生效,并须规避多接口冲突与不安全调用,分阶段推进升级。
-
LocalDate仅存年月日,LocalDateTime存年月日及时分秒,二者均无时区;需表示绝对时刻须用ZonedDateTime或Instant。
-
核心是按模块隔离缓存并直存编译后对象:各模块独享缓存实例,通过类加载器或作用域机制天然隔离;缓存已解析对象避免序列化开销;结合依赖感知自动失效与三级缓存结构提升性能与一致性。
-
Properties.load()报“Streamclosed”是因为流被提前关闭或重复使用;ClassLoader.getResourceAsStream()用上下文类加载器,Class.getResourceAsStream()用调用类的类加载器;load(InputStream)默认ISO-8859-1,中文需用loadFromXML()或字符串中转;@Value与手动load()无关,由SpringBoot自动机制处理。
-
接口应按调用方角色而非功能模块拆分,如LoginCapable、EmailCapable、ReportCapable;若实现类超1/3方法为空或抛异常,即违反接口分离原则,需及时重构。
-
遍历集合时直接调用remove()会触发ConcurrentModificationException;安全删除方式有四种:1.Iterator的remove()(最通用);2.removeIf()(Java8+,简洁高效);3.倒序for循环(仅List适用);4.先收集后统一删除(灵活但耗内存)。
-
双色球生成应采用洗牌法:红球用Collections.shuffle()打乱1–32数组后取前6个,蓝球用SecureRandom.nextInt(16)+1生成;禁用while+contains()判重;输出格式为“红球:091421253032蓝球:07”。