-
Java集合框架是接口与实现类组成的体系,核心解决对象容器统一管理问题;Collection(List/Set/Queue)与Map为两条独立主线,泛型擦除、迭代器失效和数据结构约束是关键难点。
-
Maven通过archetype自动生成标准Java项目结构,含src/main/java、src/test/java、pom.xml等;需确保packaging为jar,资源目录分离(main/resources用于运行时,test/resources仅测试用),源码路径必须严格匹配package声明,.gitignore和MavenWrapper应纳入版本控制。
-
多态的底层实现是父类引用指向子类对象,JVM通过虚方法表在运行时动态绑定非private、非static、非final的实例方法;字段、静态方法等按引用类型静态绑定。
-
抽象类是Java中用于作为父类提供通用结构且不能实例化的类,使用abstract关键字定义。它可包含抽象方法(无实现)和具体方法(有实现),子类必须实现其抽象方法,否则也需声明为抽象类。抽象类支持成员变量、构造方法、普通及静态方法,常用于具有共同特征但行为不同的类族设计,如模板方法模式。由于Java单继承限制,一个类只能继承一个抽象类,适用于框架设计以实现代码复用与行为约束。
-
重量级锁是线程被操作系统挂起并用MutexLock排队的锁机制,触发用户态到内核态切换,开销达数百纳秒至微秒级;表现为jstack中大量BLOCKED线程停在ObjectMonitor::enter或park,且CPU低、吞吐骤降。
-
默认访问修饰符允许同一包内的类访问成员,提供包级私有保护。适用于类、接口、字段、方法和构造器,增强封装性与模块化,建议在无需跨包访问时优先使用,默认访问提升代码安全与结构清晰度。
-
Java不支持多重继承以避免菱形继承问题,通过接口实现多继承功能。接口仅定义方法签名,类可实现多个接口以获得多种行为,避免歧义。Java8起接口可含默认方法,但若多个接口有同名默认方法,实现类须重写以解决冲突。接口用于定义“能做什么”,强调行为规范;抽象类用于定义“是什么”,提供部分实现,适用于类间共享代码。优先使用接口定义协议,抽象类用于构建类骨架。当需模拟多重继承时,推荐组合(has-a)替代继承(is-a),如Car类包含Engine和Wheel实例;代理和AOP可用于增强功能而不修改原类。组合更常
-
Java读取properties文件应避免ClassLoader.getResourceAsStream("/")路径错误,用上下文类加载器并判空;SpringBoot配置优先级需通过debug日志和getPropertySources()分析;@ConfigurationProperties绑定失败主因是缺少@Component/@EnableConfigurationProperties、命名不匹配或Lombok无@Setter;热更新推荐@RefreshScope或AtomicReference+W
-
HashSet核心特点是无序、不重复、允许一个null、非线程安全、平均时间复杂度O(1),底层基于HashMap实现,依赖hashCode()和equals()保证唯一性,遍历仅支持增强for和迭代器。
-
ConcurrentSkipListMap是Java中基于跳表实现的线程安全有序Map,支持高并发读写与范围查询;相比红黑树,其插入删除无需旋转、更易无锁化,平均时间复杂度O(logn)。
-
答案是:Java时区问题需从系统、JVM参数和代码三方面解决;JVM默认继承操作系统时区,跨平台易偏差;应通过-Duser.timezone=Asia/Shanghai设置启动参数,或在代码中调用TimeZone.setDefault()统一时区;推荐使用java.time包并显式指定ZoneId,避免SimpleDateFormat等旧类;数据库连接需配置serverTimezone参数;关键是在入口处统一设置,确保全链路时区一致。
-
Java中日志与异常需互补:异常负责结构化错误传播,日志负责记录可追溯的上下文;底层异常不重复打日志,上层捕获后结合业务场景记录WARN/ERROR并带堆栈;日志须含业务动作、关键输入(脱敏)、完整堆栈;按故障严重性分级,杜绝空catch、拼接异常等反模式。
-
使用DocumentBuilder.newDocument()创建空XML文档后,getDocumentElement()必然返回null,因为此时文档尚未包含任何元素;必须先通过doc.appendChild(element)显式添加根元素,才能获得有效的文档根节点。
-
JVM堆内存分代管理,非连续空间:YoungGen(Eden、S0、S1)、OldGen和Metaspace;对象优先分配Eden,触发MinorGC后存活对象复制或晋升,大对象可直接入OldGen;字符串字面量存常量池,newString("abc")仅在堆建引用对象;AllocationFailure是GC正常触发提示,非OOM;逃逸分析可能使对象栈上分配。
-
String.replace()按字面量替换,replaceAll()走正则引擎;前者安全简单,后者需转义且易误匹配;大量替换用StringBuilder,复杂规则复用Pattern;注意null判空、不可变性及Unicode代理对处理。