-
需先set(Calendar.DAY_OF_MONTH,1)再get(Calendar.DAY_OF_WEEK),并转换为周一为第1天的序号:(value-1)%7+1;注意月份从0开始,日历首行空格数=该月1号序号减1,月底需手动换行。
-
重量级锁是线程被操作系统挂起并用MutexLock排队的锁机制,触发用户态到内核态切换,开销达数百纳秒至微秒级;表现为jstack中大量BLOCKED线程停在ObjectMonitor::enter或park,且CPU低、吞吐骤降。
-
Java安装需管理员权限以确保系统安全,因涉及写入受保护目录、修改环境变量等操作。面对权限提示,应确认来源可靠后授权;对“未知发布者”或杀毒软件警告,须核验下载源与文件校验和,优先选择官方渠道如Oracle、Adoptium等。安装后需验证java-version命令输出,并正确配置JAVA_HOME与PATH。为保障长期安全,应定期更新Java版本,卸载旧版本,禁用浏览器插件,关注安全公告,防范已知漏洞风险。
-
DelayQueue要求元素实现Delayed接口,否则poll()始终返回null;需用绝对时间戳实现getDelay()和compareTo(),并配守护线程消费任务。
-
ZXing默认黑底白图是因MatrixToImageWriter将0当白色、1当黑色,与内部0表空白/1表墨点逻辑相反;应显式传入MatrixToImageConfig(Color.BLACK.getRGB(),Color.WHITE.getRGB())。
-
设计模式是解决常见问题的通用方案,能提升代码可维护性与扩展性。通过工厂、单例、模板方法等模式统一创建逻辑和结构,增强复用性;策略、观察者、装饰器模式隔离变化,支持动态扩展;团队沟通因共通语言更高效;合理应用避免过度设计,结合SOLID原则在创建型、结构型、行为型模式中选择适用方案;本质是经验沉淀,需在实践中体会,如阅读Spring等开源框架源码,提升架构思维。
-
spring-boot-starter-amqp不能替代rabbitmq-client,因其仅为AMQP抽象封装,不包含底层通信实现;必须显式引入兼容版本的rabbitmq-client,并排除starter的默认传递依赖,否则易引发类冲突或连接失败。
-
使用BigDecimal可避免浮点数精度问题,推荐用String构造、指定除法精度和舍入模式,通过compareTo比较,确保高精度计算准确。
-
不加volatile的DCL会因指令重排序导致其他线程看到未初始化完成的实例,引发NullPointerException;volatile禁止重排序并保证可见性,是JDK5+下DCL正确性的关键。
-
String不可变性导致常见陷阱:所有修改方法均返回新对象,原字符串不变;需注意null安全、索引边界、==与equals区别、replace系列是否支持正则等。
-
Java用户注册登录核心是密码安全、会话管理、输入校验三环节落地:密码须用BCrypt加密存储与校验;Session需显式设HttpOnly、Secure及超时;接口必做邮箱、密码强度、限流及统一错误提示。
-
JAXP够用但有局限:作为规范接口层,其默认配置保守,不校验DTD、不防护外部实体、不支持流式写入,小数据量解析可行,安全与性能场景需补充配置或换用SAX/StAX等方案。
-
ClassCastException发生在运行时,当编译通过但实际对象类型与目标类型不兼容时;例如Parentp=newChildA()后执行(ChildB)p会抛出该异常。
-
依赖注入是控制反转的具体实现形式,控制反转是更高层级的设计思想:前者通过构造函数、属性或方法注入依赖,后者将对象生命周期与依赖关系的控制权移交外部容器统一管理。
-
preHandle适合鉴权和参数预处理,postHandle仅在Controller成功执行后调用且不处理异常,afterCompletion无论成败均触发并可捕获异常;路径匹配需用PathPattern风格如/api/**;读取请求体须用ContentCachingRequestWrapper;拦截器必须由Spring容器管理而非new创建。