-
SpringBoot中Gson替换Jackson后HttpMessageConverter失效,主因是自动配置冲突及Gson对Java8时间、泛型擦除、String类型处理等不兼容;需手动注册并配置GsonHttpMessageConverter,调整顺序与适配器。
-
Java对象内存布局分为对象头、实例数据、对齐填充三部分;对象头含MarkWord(存哈希码、锁状态等)和类型指针(指向类元数据);实例数据按宽度重排序存储字段值;对齐填充确保对象总大小为8字节倍数。
-
Java注解是一种为代码提供额外元数据的特殊“标签”,不影响程序逻辑,但能被编译器、JVM或其他工具读取和处理。1.注解用于声明式编程,提升代码表达力、可维护性和自动化程度;2.作用包括编译时检查、替代XML配置、生成代码或文档;3.自定义注解开发涉及定义注解类型、添加元注解(如@Target、@Retention)、定义成员属性、应用注解、运行时解析;4.解析方式主要有反射机制和编译时注解处理器;5.常见问题包括@Retention策略错误、@Target范围不明确、@Inherited误解、注解成员类
-
abstract类必须被继承才能实例化,不能直接用new创建对象;它可含普通方法、静态方法、构造器等,但抽象方法无方法体且不能为private/final/static;子类须实现全部抽象方法或声明为abstract;与interface相比,abstract类支持代码复用和“is-a”关系,而interface适合“can-do”能力及多实现。
-
Java中数组是引用类型,其元素可为基本或引用类型,二者在内存布局、初始化、赋值、泛型兼容性等方面存在本质区别:基本类型元素存值于数组对象内,引用类型元素仅存对象地址;基本类型数组初始化为零值,引用类型为null;基本类型赋值为值拷贝,引用类型为引用拷贝;基本类型数组不支持泛型,需用包装类。
-
Controller应按业务域拆分、统一响应结构、合理使用注解、严格分层解耦;如电商系统分ProductController等,返回Result泛型体,用@PathVariable/@RequestParam/@RequestBody规范参数解析,DTO加校验,Controller仅协调不写业务逻辑。
-
MyBatis插件通过JDK动态代理拦截Executor、StatementHandler、ParameterHandler、ResultSetHandler四大接口对象,仅在Configuration创建对象时经InterceptorChain.pluginAll()包装才生效。
-
SpringBoot2.x默认仅暴露/actuator/health(仅status),/actuator/metrics完全不暴露,需显式配置management.endpoints.web.exposure.include等参数启用端点并确保Micrometer和HealthIndicator正确集成。
-
静态链接发生在类加载的解析阶段,即类首次主动使用前,JVM将符号引用(如类名、方法名)替换为内存中确定位置(如常量池索引、vtable偏移等),且只执行一次。
-
不能用String.compareTo()比较版本号,因其按字典序导致"2.10"<"2.9"错误;应拆分"."后逐段转整数比较,注意空段处理与需求对齐。
-
ForkJoinPool适合可递归分解的CPU密集型任务,如归并排序、树遍历、分治计算和并行聚合;不适合阻塞I/O、强顺序依赖、频繁共享写入或超短耗时任务。
-
SQLException是checkedexception,因数据库操作天然不可靠,JDBC规范强制处理以避免静默失败;它不自动触发回滚,需显式调用rollback()或配置Spring的rollbackFor。
-
三元运算符适用于选择值而非执行分支逻辑;对if-else递增计数这类副作用操作,强行使用三元运算符会降低可读性与安全性,应优先保留传统if-else结构。
-
实现区间判定需用关系运算符界定边界、逻辑运算符组合条件,区分闭/开/半开区间符号组合,注意优先级、空值、浮点误差,封装函数并结合业务语义化扩展。
-
SpringBoot默认使用Jackson的SNAKE_CASE命名策略时,会将Java驼峰字段(如firstName)自动映射为下划线格式(如first_name)的JSON键,导致直接发送{"firstName":"John"}时字段值为null。