-
虚拟线程调用read()、sleep()等白名单阻塞方法时,JVM在字节码层面直接介入挂起:保存栈帧、释放载体线程、标记为WAITING并移出队列;非白名单操作(如native方法、CPU循环)无法触发挂起。
-
Java自定义排序核心是Comparator接口,支持Lambda简洁写法、多字段链式排序及空值处理;类可选实现Comparable定义自然顺序,二者可共存。
-
volatile能禁止重排序是因为JMM为其写操作插入StoreStore+StoreLoad屏障、读操作插入LoadLoad+LoadStore屏障,强制限制编译器和CPU重排;普通变量无此约束。
-
本文介绍如何在Docker容器中动态挂载并读取SpringBoot应用所需的外部properties文件(非application.properties),避免镜像打包敏感配置,实现配置与代码分离、安全可变、启动即生效。
-
FutureTask.cancel(true)是否生效取决于任务是否响应中断;需在任务中主动检查中断状态或捕获InterruptedException;cancel(false)仅对未启动任务有效;get()必须用带超时版本并处理TimeoutException、CancellationException和ExecutionException。
-
方法重写是子类对父类实例方法的重新定义,实现运行时多态。1.方法名和参数列表必须相同;2.返回类型可为原返回类型的子类;3.访问权限不能更严格;4.无法重写private、static、final方法。动态绑定确保调用时根据实际对象类型执行对应方法,支持“一个接口,多种实现”,提升代码复用性与扩展性,符合开闭原则。
-
NEW状态指线程对象已创建但start()未调用,此时未被JVM调度;RUNNABLE包含运行中和就绪等待CPU两种情况;BLOCKED、WAITING、TIMED_WAITING触发条件与恢复机制各异;TERMINATED后线程不可重用。
-
final修饰变量仅锁定引用不可变,不阻止对象内部状态变化;真正不可变需组合使用unmodifiableList、ImmutableList等手段,并辅以私有字段、无setter、构造器初始化及返回副本等设计。
-
Collectors.summarizingInt用于统计整数属性,如员工年龄,返回IntSummaryStatistics对象,包含count、sum、min、max和average;通过getCount()、getSum()、getMin()、getMax()和getAverage()获取对应值。
-
学生签到系统需用Student和AttendanceRecord类分别封装学生信息与签到行为,通过ArrayList、HashMap等集合管理数据,并实现文件与内存的可靠同步;文件采用UTF-8编码的CSV或自定义文本格式,配合相对路径、日志输出及异常处理确保健壮性。
-
Java采用解释执行与JIT编译结合的方式,既保障“一次编写,到处运行”的跨平台性,又通过运行时识别热点代码并编译为本地机器码来提升性能;JIT不修改class文件,编译时机和级别由运行时统计决定。
-
Set接口保证元素唯一性但不保证插入顺序,HashSet无序且最快,LinkedHashSet保持插入顺序,TreeSet按自然序或比较器排序;均不允许重复元素,依赖equals()和hashCode()判断重复,非==;不支持索引访问;修改影响哈希值的字段会破坏集合一致性。
-
Java中记录异常堆栈应优先使用日志框架(如SLF4J)直接传入Throwable对象,自动格式化完整堆栈;开发调试可用printStackTrace(),生产环境禁用;需字符串时用StringWriter+PrintWriter捕获;务必附加业务上下文。
-
Java项目通过JDBC连接MySQL需先添加mysql-connector-java依赖,再使用DriverManager获取连接,接着用Statement执行SQL并用ResultSet处理结果,最后确保资源正确释放。
-
Micrometer依赖需同时引入spring-boot-starter-actuator和对应registry(如micrometer-registry-prometheus),并配置management.endpoints.web.exposure.include显式暴露端点;Prometheus的scrape_config中metrics_path必须设为/actuator/prometheus;@Timed依赖SpringAOP代理,须确保方法由容器注入且为public;自定义指标应规范使用Tag