java教程技术文章
-
中介者模式是协调微服务边界行为的轻量层,不替代注册中心或网关,专解多服务交叉调用导致的局部耦合;它仅编排调用、转换上下文、兜底重试,不处理业务逻辑、不持数据、不决策事务,应保持纯事件驱动与单一职责。223 收藏 -
需要自定义业务异常,因为Java默认异常无法准确表达“用户余额不足”等业务语义,易混淆bug与合理拦截;应分层定义领域异常、应用异常、接口异常,并统一继承RuntimeException、提供多构造器、使用规范错误码。223 收藏 -
优先使用组合而非继承,仅在明确稳定的is-a关系且符合Liskov替换原则时才用继承;组合通过has-a关系实现灵活、解耦、可测试的复用,避免继承的强耦合与脆弱基类问题。223 收藏 -
继承可能破坏封装,因子类依赖父类实现细节,导致脆弱基类问题;组合通过包含对象实例而非继承,增强封装性与灵活性,推荐优先使用。223 收藏 -
flatMap是嵌套空值链式调用的唯一可靠选择,因其对Optional上游强制返回Optional并自动“压平”一层,天然短路且无NPE风险;但前提是每层getter均返回Optional,否则需混合map与ofNullable手动包装。223 收藏 -
System.identityHashCode()不返回内存地址,而是返回JVM为对象分配的稳定不变的标识哈希值;它不调用hashCode()、不受重写影响,在同一JVM中对同一对象始终唯一且不变。223 收藏 -
反射的核心价值是“运行时解耦”,通过字符串动态决定行为,支撑Spring、MyBatis等框架;Class获取方式(Class.forName、obj.getClass、类.class)在类加载时机、异常和适用场景上差异显著;调用私有成员需setAccessible(true),但受SecurityManager限制;泛型已擦除,final字段修改可能无效;性能损耗大,必须缓存Method。223 收藏 -
本文介绍如何在ApacheBeam管道中实现「按需读取」:仅当上游数据满足预设条件(如记录数>0)时,才触发对Cassandra的查询,避免全表扫描,显著提升大规模场景下的执行效率。223 收藏 -
StampedLock的乐观读仅适用于极短路径的轻量字段访问,滥用忙等循环会导致CPU100%;一旦涉及方法调用、集合操作或写入频繁,validate失败率高,fallback开销反而更大,应降级为readLock()。223 收藏 -
Semaphore控制API调用易失效,因其仅限制放行数量,不感知网络超时或异常;若acquire后未及时release(如调用超时、异常中断),许可被长期占用,导致实际并发远低于预期,甚至耗尽线程池。223 收藏 -
1.for循环用于已知循环次数,如打印1到5;2.while先判断后执行;3.do-while至少执行一次,三者均通过控制条件实现重复操作。223 收藏 -
Character.getNumericValue()仅支持ASCII数字、部分Unicode变体数字及带圈数字①–⑳,不适用于罗马数字解析,因其无上下文感知能力且单字符查表无法处理减法规则。223 收藏 -
Timer.cancel()不能中断正在执行的TimerTask,仅清空队列并停止调度线程;需在run()中检查中断状态或使用volatile标志位,配合purge()和置null,或改用支持中断的ScheduledExecutorService。223 收藏 -
finally块不能强制关闭资源,仅保证代码执行;常见失效原因是未判空、未捕获close()异常,导致NPE或异常中断后续关闭流程。223 收藏 -
Collections.synchronizedList()可直接包装ArrayList获得线程安全代理,但仅保证单操作原子性;复合操作和迭代需手动同步,且高并发下性能受限,可考虑CopyOnWriteArrayList等替代方案。223 收藏