-
ScheduledThreadPoolExecutor是Java中用于高效执行定时或周期性任务的类,支持多线程并发和灵活调度。它继承自ThreadPoolExecutor并实现ScheduledExecutorService接口,可通过newScheduledThreadPoolExecutor(n)创建实例,指定核心线程数。提供schedule()、scheduleAtFixedRate()、scheduleWithFixedDelay()等方法安排一次性或重复任务,并返回ScheduledFuture
-
getOrDefault能替代if-else空判断,因其将“查不到就用默认值”逻辑封装为一次调用,语义明确、性能更优,但不写入Map且无法区分null是未命中还是真实值。
-
Guava通过分段锁(LockStriping)降低竞争:Striped类按需分配轻量锁,Striped64用CAS+分段Cell实现无锁计数,LocalCache以Segment隔离缓存操作,三者均以空间换时间提升并发性能。
-
IllegalStateException比IllegalArgumentException更合适,因为前者精准表达“对象当前状态不支持该操作”,如Scanner未调用hasNext()就调用next();后者易误导调用者检查参数而非对象生命周期。
-
并发编程核心难点在于可见性、原子性、重排序、竞态条件、中断响应与死锁的综合处理:volatile解决可见性但不保原子性,synchronized和Lock兼顾二者却有开销,CAS类操作需谨慎使用,组合操作须额外同步,中断依赖线程主动响应,死锁源于锁序不一致,而“何时加锁、加多大”才是最易出错的边界问题。
-
volatile通过内存屏障强制读写主内存,解决多线程可见性问题;但不保证原子性,仅适用于状态标志等简单场景。
-
正确使用wait()和notify()需在synchronized块中调用,用while循环检查条件并及时通知,避免死锁与竞争。
-
核心是构建严格锚定、分段清晰、边界明确的正则表达式:以^TEST_PROCESS_[a-z]+(?:_PRODUCT(?:_NEW)?)?$确保仅匹配合法形式,排除双下划线、大小写混用、前缀错误等所有非法变体。
-
SpringMVC通过@ControllerAdvice和@ExceptionHandler实现基于注解的全局异常处理,支持统一响应格式、状态码映射与日志记录,优先级高于默认错误页,需确保类被Spring扫描且兼容异步场景。
-
Gson默认跳过Map中null值,需调用serializeNulls()才能输出null;Jackson对LinkedHashMap顺序无稳定保证,须确保使用LinkedHashMap实例且避免破坏顺序的操作;FastJson2反序列化泛型需TypeReference匿名子类,否则类型擦除导致嵌套LinkedHashMap。
-
自研监控系统通过方法注解+反射提取业务“指纹”,即自动结构化关键方法的执行特征(方法名、参数、耗时、异常、调用链上下文)为可采集标识数据;一、定义RUNTIME级@BizFingerprint注解声明监控意图;二、反射提取器抓取方法签名、参数快照、耗时、状态及traceId等构造指纹POJO;三、双通道上报:指标维度分组统计QPS/P99/错误率,事件维度发完整JSON至Kafka/OTel;四、避坑:用getDeclaredAnnotations、禁存大对象、参数序列化前校验循环引用、高并发下用对象池。
-
Lock与Condition可实现精准线程协作,如生产者消费者模型中通过notFull和notEmpty两个条件实现双向等待唤醒,相比synchronized更灵活,支持多条件、公平锁及中断响应,需注意锁的释放与唤醒策略。
-
核心在于将Enrollment作为独立实体而非单纯关联表,用复合主键或自增ID建模,封装状态变更方法校验业务规则,禁用裸setter;查询避免N+1,优先@EntityGraph;外键约束须数据库级ONDELETERESTRICT并配合应用层校验。
-
掌握JavaMailAPI并配置SMTP参数,即可实现邮件发送功能。1.添加javax.mail依赖;2.配置SMTP服务器、端口、账号及授权码;3.使用Session、MimeMessage和Transport发送HTML邮件;4.注意SSL、认证、编码等问题。复用Session可优化性能,后续可扩展附件与模板功能。
-
SimpleDateFormat非线程安全,多线程复用会导致结果错乱,应局部新建、加锁或改用DateTimeFormatter;parse()抛ParseException主因是字符串与模式不匹配,如时区缺失、月份超限、yy解析四位年份等;安全格式化需用局部变量指定模式及时区;DateTimeFormatter不可变、线程安全、API清晰,是Java8+推荐替代方案。