-
Java业务流程模拟核心是厘清状态流转与责任分离:先画流程图、用状态机替代if-else,Command模式封装操作意图,分类捕获异常并统一处理,精准控制事务边界,明确模糊业务规则。
-
Java转义字符以反斜杠\引导,用于表示特殊字符如\"、\\、\n、\t等;支持Unicode(\uXXXX)和八进制(\ddd)转义;需注意路径、正则中的双重转义及文本块等现代替代方案。
-
继承适用于is-a关系,如Animal派生Dog;组合适用于has-a关系,如Car包含Engine。优先使用组合,避免过度继承导致耦合,提升可维护性与扩展性。
-
设计接口扩展应遵循单一职责,通过小接口组合替代深层继承,利用默认方法平滑升级,命名需清晰体现语义与层次,提升系统灵活性与可维护性。
-
应优先用synchronized块保护临界区而非整个方法,避免过度同步;锁对象须私有不可变;简单操作优先用AtomicInteger等原子类;复杂逻辑选ReentrantLock;volatile仅保可见性与有序性,不保证原子性。
-
封装的核心是约束与责任划分,通过私有化字段并提供公共方法控制访问,确保对象始终处于合法状态,如用户余额需由账户对象自身管理增减操作。
-
递归函数必须有明确终止条件,如阶乘需处理n==0和n==1,负数要提前拦截;斐波那契直接递归时间复杂度为O(2^n),应改用记忆化或迭代。
-
ScopedValue的不可变性指绑定后值本身不可修改,仅支持只读访问;它将值直接存入虚拟线程栈帧,避免哈希查找,性能达ThreadLocal的5倍;适用于短生命周期、只读上下文(如请求ID),不适用于可变状态或长生命周期资源。
-
HashSet底层直接使用HashMap实例,通过组合模式将元素作为key、固定哑对象PRESENT作为value存储,从而实现去重;其线程不安全,且依赖正确的equals和hashCode实现。
-
合理配置JVM参数、选择适合的垃圾回收器、控制线程与连接资源、启用监控诊断是保障Java应用稳定运行的关键。1.设置-Xms和-Xmx相等(如4g)以减少堆调整开销;2.避免堆过大,超8GB考虑G1或ZGC;3.限制元空间至256m防止溢出;4.调整-Xss256k降低线程内存占用;5.吞吐场景用ParallelGC,低延迟选G1GC,极致低延迟用ZGC;6.开启GC日志便于分析;7.使用线程池和连接池控制资源;8.防止死锁与阻塞,设置超时与非阻塞锁;9.监控线程数变化;10.启用JMX、APM工具实现可
-
Java中new创建对象是JVM协调类加载、内存分配、初始化等多步骤的完整流程:先检查并加载类,再在堆中按指针碰撞或空闲列表等方式分配内存(优先TLAB),接着零值初始化、设置对象头,最后执行构造方法并赋引用。
-
选Jackson适合高性能、复杂处理和Spring集成;选Gson适合小型项目和快速开发。若需高性能与扩展性,Jackson使用流式解析,速度快且内存低,适合大文件处理;而Gson基于对象模型,简单易用但效率较低。Jackson功能丰富,支持自定义序列化、泛型处理、Java8时间API等;Gson则API简洁,无需配置即可使用。Spring框架默认集成Jackson,便于配置与维护;而Gson在Android开发中兼容性更好。根据项目规模、性能需求及生态依赖选择合适库。
-
@ExceptionHandler仅对当前Controller生效,全局需用@ControllerAdvice;只处理未捕获的RuntimeException及其子类,受检异常需显式throws;返回值应为ResponseEntity以精确控制状态码和响应体;日志须记录完整堆栈。
-
HashSet通过哈希表实现元素唯一性,添加元素时自动去重,适用于快速查找、去重及集合操作,但需重写自定义类的hashCode与equals方法以确保正确性。
-
SecurityException是运行时异常,由JVM或SecurityManager在安全违规时抛出,如修改系统属性、反射访问私有成员等;可通过try-catch捕获,虽非强制,但在受限环境或使用反射时建议处理;最佳实践包括避免依赖其控制流程、启用SecurityManager测试、记录日志及注意模块化配置。