-
方法重写是子类对父类实例方法的重新定义,实现运行时多态。1.方法名和参数列表必须相同;2.返回类型可为原返回类型的子类;3.访问权限不能更严格;4.无法重写private、static、final方法。动态绑定确保调用时根据实际对象类型执行对应方法,支持“一个接口,多种实现”,提升代码复用性与扩展性,符合开闭原则。
-
%s适用于任意对象,%d仅限整数,%f仅限浮点数;修饰符顺序为标志→宽度→精度→类型;中文对齐应避免%宽,优先用\t或手动计算视觉宽度。
-
Arrays.asList返回的List不可修改,底层为固定大小的Arrays$ArrayList,调用add/remove抛UnsupportedOperationException;需可变列表应显式拷贝为newArrayList(Arrays.asList(...))或使用Arrays.stream().collect(Collectors.toList())。
-
TreeMap默认按键排序,支持自然顺序和自定义比较器,遍历时有序输出,适用于需有序存储的场景。
-
Java类初始化仅在五种主动引用场景下触发:new实例、访问/修改非final静态字段、调用静态方法、反射Class.forName()、初始化子类时;主类启动时也必初始化;被动引用如子类引用父类静态字段、定义数组、引用编译期常量则不触发。
-
静态变量属于类,被所有实例共享,通过类名访问,存储于方法区,生命周期伴随类始终;实例变量属于对象,每个对象独立拥有,通过对象访问,存储于堆中,生命周期与对象一致。
-
synchronized是Java线程同步核心机制,通过修饰方法或代码块实现互斥访问,其底层依赖对象的Monitor锁,支持可重入、自动释放,但不可中断;实际使用中应缩小同步范围、优先使用私有锁对象,并根据场景考虑并发包工具替代方案。
-
多态的核心目的是解耦和替换,使调用方不依赖具体实现类;通过继承/实现接口、重写方法、父类引用调用三要素触发JVM动态绑定,实现运行时对象类型决定行为,达成开闭原则。
-
Vector是线程安全的动态数组,通过synchronized方法保证多线程安全,使用add、get、set、remove等方法操作元素,支持for循环、增强for和Iterator遍历,但因性能较低,建议优先使用ArrayList或CopyOnWriteArrayList。
-
Collectors.averagingInt用于计算流中元素映射为整数后的平均值,返回Double类型结果;例如根据用户年龄求平均年龄,代码简洁且自动处理空流返回0.0。
-
Flink中自定义RichSinkFunction因同步I/O或不当广播导致任务严重阻塞,可通过移除冗余广播、改用异步I/O(AsyncSink)并配合丢弃型Sink彻底解决性能瓶颈。
-
继承是子类自动获得父类非私有成员的机制,非代码复制而是运行时对象内存中包含父类部分;super()必须首行调用以确保父类初始化优先;@Override是重写必要契约而非可选装饰;“is-a”关系断裂时应改用组合。
-
非阻塞并发队列通过CAS实现线程安全,避免锁竞争,提升吞吐量;ConcurrentLinkedQueue基于链表,利用volatile和CAS维护head/tail指针,实现高效入队出队;虽存在ABA风险与弱一致性问题,但适合高并发场景。
-
单例模式只能有一个实例的关键在于私有化构造方法并由类内部管理唯一实例的创建与返回;常用实现有饿汉式(类加载时初始化,线程安全但可能浪费资源)和懒汉式(延迟初始化,需synchronized或DCL+volatile防重排);静态内部类方式因JVM类加载机制天然线程安全且延迟加载,更推荐;多例模式通过key映射有限实例池,用ConcurrentHashMap保证线程安全;Spring的@Scope("singleton")是容器级单例,与编码级单例模式无必然关联,二者控制权不同。
-
Java表达式计算由优先级、结合性、操作数求值顺序共同决定:优先级决定运算先后,结合性决定同级运算方向(左结合为主,赋值与一元运算符右结合),操作数严格从左到右求值。