自动类型转换
由于类型擦除,泛型在运行时会被替换为原始类型,但编译器会在获取泛型对象时自动插入强制类型转换。如ArrayList的get方法中,`(E) elementData[index]`会在编译时转为对应类型的强转,如`(Date)`,因此无需手动转换。同理,访问泛型字段时也会自动插入类型转换,保证类型安全。
哈希表核心原理
哈希表不等于Map。Map是键值映射的接口,哈希表是其实现之一。本文详解哈希表原理:通过哈希函数将key映射到数组索引,实现O(1)增删查改;探讨哈希冲突的拉链法与线性探查法、负载因子与扩容机制,并澄清常见误区如遍历顺序无序、循环中修改风险等。
FastJson:大面积故障规避案例
本文记录了一次由Kotlin语法混淆引发的FastJson反序列化重大故障排查过程。因误将`{}`赋值给Java对象字段,导致FastJson解析时触发Kotlin静态错误标记,进而引发全局反序列化失败。问题根源隐蔽,影响巨大,最终通过深入源码定位解决。揭示了多语言混编下语法差异的风险,以及对第三方框架需保持警惕。
C++基本语法
C++程序由对象组成,对象是类的实例,具有状态和行为。类是对象的模板,方法定义行为,成员变量描述状态。首个程序输出“Hello World”,包含头文件、主函数、命名空间和注释。分号结束语句,支持单行//和多行/*...*/注释,关键字不可作标识符。三字符组较少使用。
C++数据类型:
C++基本数据类型包括bool、char、int、float、double等,支持signed、unsigned、short、long修饰。wchar_t用于宽字符,typedef可为类型定义别名,enum定义枚举常量。支持static_cast、dynamic_cast、const_cast和reinterpret_cast四种类型转换,实现安全或强制类型变换。
FastJson:大面积故障规避案例
本文记录了一次由Kotlin与Java混编工程中误用`{}`赋值引发的FastJson反序列化崩溃问题。因将空对象误写为lambda表达式,导致FastJson内部静态标记位`kotlin_error`被置为true且无法恢复,进而使整个应用反序列化链路瘫痪。问题隐蔽性强,排查耗时两天,最终通过源码分析定位。文章反思了多语言混编下的语法混淆风险、框架信任边界及灰度发布的重要性,强调Bug是成长的阶梯。
重载与重写的区别
重载是方法名相同但参数列表不同,由编译器在编译时确定;重写是父子类中方法名和参数列表均相同,由运行时解释器根据对象实际类型决定调用哪个方法,可用@Override检查。
自定义注解
本文介绍如何在Spring框架中实现自定义注解,结合AOP与过滤器应用于日志记录、权限控制等场景,通过代码示例展示注解定义、元注解使用及拦截处理流程,涵盖从基础到进阶的完整实现步骤。
Java泛型类型擦除以及类型擦除带来的问题
Java泛型在编译时会进行类型擦除,仅保留原始类型(如Object或限定类型)。例如,List<String>和List<Integer>在运行时均变为List,导致类型信息丢失。擦除后通过反射可绕过泛型限制,但编译器会在调用处自动插入类型检查与强制转换以保证安全。此外,泛型不支持基本类型、静态成员不能使用类级别泛型参数,且instanceof无法用于泛型类型判断。为解决多态冲突,编译器生成桥方法实现重写语义。