-
答案:Java中处理网络连接异常需识别IOException、SocketTimeoutException等常见类型,通过try-catch分类捕获,设置connectTimeout和readTimeout避免阻塞,针对超时或抖动实现有限重试,提升程序健壮性。
-
volatile变量的可见性由JVM插入内存屏障实现:写操作插入StoreStore+StoreLoad屏障,强制刷新至主内存并使其他核心缓存失效;读操作插入LoadLoad+LoadStore屏障,强制从主内存加载最新值,二者共同建立happens-before关系。
-
Collections.singleton()返回只读Set,因其内部是私有静态类SingletonSet,所有修改方法均抛UnsupportedOperationException;它允许null元素,而Set.of()不允许,且JDK9+推荐优先使用Set.of()。
-
堆内内存快照对比是识别缓慢增长型内存泄漏最可靠的方法,需在负载平稳时分阶段拍Baseline、操作后和延时快照,用MAT比对Delta与RetainedHeapDelta,并通过引用链分析确认是否因static引用、ThreadLocal或未注销监听器等导致本该回收的对象持续存活。
-
控制反转(IoC)是高层设计思想,指将对象控制权从代码移交容器;依赖注入(DI)是其实现手段,指通过构造、Setter等方式由容器注入依赖。IoC回答“谁控制”,DI回答“如何传”,二者维度不同,不可互换。
-
ReentrantLock需手动配对acquire/release,必须用try-finally确保unlock;默认非公平锁性能更优;Condition替代wait/notify须用while重检条件;仅在需超时、中断响应或多个条件队列时选用。
-
FileReader无法指定字符编码,因其构造器不接受charset参数,仅依赖系统默认编码,易致跨平台乱码;正确做法是用InputStreamReader包装FileInputStream并显式指定编码。
-
DeferredImportSelector是ImportSelector的扩展接口,执行时机更晚——在所有@Configuration类解析完成、@Conditional评估结束后才调用selectImports(),可安全访问已加载的Environment、BeanFactory及其它@Bean实例;而ImportSelector在配置类解析初期即执行,无法感知后续定义的Bean。
-
背压需下游显式驱动而非默认启用,缺失将导致内存溢出;应排查无界缓冲、未调用request、不兼容操作符等问题,并采用onBackpressureDrop等兜底策略及limitRate等长期设计方式。
-
JDK15起默认禁用偏向锁,因其在多核高并发场景下收益为负:易触发STW撤销、内存开销大、短命对象导致初始化成本超收益,而轻量级锁+自旋已更优。
-
Java中无原生map方法,需用StreamAPI的stream().map()实现元素转换,返回新Stream且不修改原集合,须用collect()等终止操作执行,注意null处理与副作用规避。
-
接口中声明throwsIOException合法但不推荐,因其违背面向接口编程原则、增加调用方负担、阻碍实现替换;应优先使用UncheckedIOException或语义化运行时异常。
-
Character.isLetter()无法识别中文,应使用Character.isIdeographic()或UnicodeBlock组合判断;注意代理对、全角字符等边界情况。
-
Java对象创建包含严格有序的类加载、静态初始化(<clinit>)和实例初始化(<init>)三阶段,任一环节跳过或顺序错乱将引发NPE、IllegalMonitorStateException等隐性问题。
-
MD5不可用于密码保护,因其易受碰撞攻击和彩虹表破解;应使用bcrypt等带盐与慢哈希机制的方案;若仅学习,可用hashlib.md5()处理UTF-8编码字节并生成32位十六进制哈希值。