-
Java程序以JVM进程运行,其内线程共享堆和方法区,独享栈与PC寄存器;JVM采用一对一模型映射OS线程,主线程结束且无非守护线程时进程退出。
-
Arrays.stream()用于数组,Collection.stream()用于集合类。前者是Arrays工具类的静态方法,支持基本类型数组并返回特化流;后者是Collection接口的默认方法,仅适用于对象集合,通过集合对象直接调用,内部基于迭代器实现。
-
委托模式是通过组合+接口引用+方法转发手动实现的设计模式,核心是持有接口类型成员并委托调用,需构造注入避免耦合,强调“has-a”复用而非继承“is-a”,注意空指针、过度委托及职责边界。
-
不该用异常处理正常业务流程,如手机号校验应使用if-else而非try-catch;不该用运行时异常替代受检异常,否则剥夺调用方强制处理权;finally中不可吞掉异常,需用try-with-resources或捕获并记录;自定义异常必须保留异常链。
-
CountDownLatch适用于一次性等待所有操作完成,不可重置;CyclicBarrier适用于多线程循环协同,可重置并支持屏障中断与回调。二者语义不同,不可互换。
-
静态变量属类、类加载时初始化、所有实例共享;静态方法只能访问静态成员且不可重写;静态内部类不持外部类引用,适合解耦;静态代码块按书写顺序执行一次。
-
StampedLock相比ReentrantReadWriteLock的优势在于其支持乐观读,通过tryOptimisticRead和validate机制,在读多写少场景下减少锁竞争,提升性能;适用于配置中心、缓存等高频读低频写场景,但需注意不可重入、无条件变量及降级处理复杂性等问题。
-
Java对象在执行new指令时创建,经历类加载检查、内存分配、零值初始化、设置对象头、执行构造方法;若构造中抛异常则对象“半途夭折”,无引用且不被GC回收。
-
可重入自旋锁通过volatile变量记录持有线程和重入次数,利用CAS实现原子更新;1.用owner字段记录当前持有锁的线程;2.count记录重入次数;3.加锁时先CAS设置owner为当前线程,成功则增加count,否则判断是否已持有并递增count;4.解锁时先减count,仅当count为0时CAS清空owner;5.需防止非持有线程解锁,且避免在synchronized中嵌套使用以防死锁。
-
用ArrayList+BlogPost类实现内存版CRUD:id用long、时间用LocalDateTime、重写equals/hashCode;updateById需空指针检查;输入统一用nextLine()并解析;文件操作用Files.write确保UTF-8和目录创建。
-
ExecutorService是统一调度任务的接口,封装线程复用、队列缓冲、拒绝策略与优雅关闭能力;相比newThread()可避免资源失控与OOM风险。
-
重写equals()时必须同步重写hashCode(),且两者依据的字段严格一致;否则HashMap、HashSet等集合行为异常。推荐用Objects.hash()生成hashCode,避免手工计算。
-
不会。直接throwe;保留原始堆栈;thrownewRuntimeException(e)会改变顶层异常类型和堆栈;finally中throw会覆盖catch异常;getCause()表示因果关系,getSuppressed()表示try-with-resources中被压制的次要异常。
-
首先定义Event类封装事件信息,包含标题、时间、描述及toString方法;再通过ScheduleManager类使用List存储并排序事件,提供增删查功能;最后在main方法中用Scanner实现菜单交互,完成日程管理基本操作。
-
应外置规则为结构化数据并用循环匹配:先校验分数有效性,再遍历区间规则判断等级,避免if-else冗长和switch不支持区间的缺陷。