-
阻塞队列长度应合理设置而非越大越好,需依据吞吐能力与峰值差计算(如(25−20)×1.5≈8),配合有界队列、CallerRunsPolicy拒绝策略及超时控制,并通过监控队列长度、等待时间、拒绝数动态调优。
-
使用volatile标志和中断机制可实现Java线程安全取消,通过定期检查状态或捕获InterruptedException响应取消信号,结合Future.cancel(true)统一管理任务生命周期,并在finally块中清理资源,确保无泄漏。
-
Java封装的核心是通过接口隔离实现细节,而非仅设private字段;需在行为层校验状态、用模块系统强制隐藏实现、返回不可变对象或防御性拷贝,并持续权衡暴露边界。
-
答案:Java类加载器是实现动态性的核心,通过ClassLoader加载字节码为Class对象。常用Class.forName()或ClassLoader.loadClass()方法加载类,自定义类加载器需继承ClassLoader并重写findClass(),用于实现类隔离、热部署、加密类加载等场景。双亲委派模型确保类由父加载器优先加载,保障安全与唯一性,打破该模型需谨慎。常见问题包括内存泄漏、LinkageError、ClassNotFoundException与NoClassDefFoundErro
-
CyclicBarrier是一个可重用的同步工具,用于让多个线程在到达共同屏障点时相互等待,直至所有线程就绪后再继续执行。它支持循环使用,与仅能使用一次的CountDownLatch不同,适用于多线程并行计算、游戏同步或高并发测试等场景。创建时需指定线程数量和可选的汇总任务,当所有线程调用await()后,汇总任务执行,随后释放所有线程。若某线程中断或异常,其他线程将抛出BrokenBarrierException,还可通过reset()方法重置屏障以供重复使用。
-
凭证溢出溢漏指因信号量管理失当导致的凭证高频复用、超期滞留或跨域泄露;需在发放/校验点埋点,通过Redis台账聚合识别高频复用、长驻未销、跨域漂移三类异常,并分级自动上报与revoke响应。
-
Java不支持方法参数默认值,但可通过重载(最常用)、Builder模式(参数多时)、Optional/null判断(慎用)及静态常量/配置类集中管理四种方式模拟,默认值逻辑需显式表达。
-
Java项目容器化需用java-jar/app.jar启动可执行JAR,确保pom含spring-boot-maven-plugin且执行mvncleanpackage;选匹配编译版本的JRE镜像(如JDK17编译则用openjdk:17-jre-slim);主进程退出问题优先前台运行查日志。
-
数组与集合转换需注意类型和可变性:Arrays.asList()将数组转为固定大小List,不支持增删;基本类型数组需通过Stream转换;集合转数组推荐使用带参数的toArray(T[])避免类型错误。
-
被notify()唤醒的线程必须先转入BLOCKED状态争抢锁,而非直接RUNNABLE;因notify()不释放锁,仅将线程从waitset移至entryset,只有原线程退出synchronized块后锁才释放,JVM从entryset中选线程竞争锁成功才转为RUNNABLE。
-
应使用UnsupportedOperationException明确表示方法暂不支持,因其语义精准、符合JDK惯例,能主动声明契约边界并避免静默失败;需附带清晰消息、配合Javadoc,并区分“永不支持”与“暂时不可用”。
-
Java中利用类字面量(如User.class)构建通用转换器,核心是以Class对象为类型令牌驱动反射实例化、字段赋值及Jackson反序列化,兼顾类型安全与复用性。
-
使用哈希表统计元素频次,单次遍历即可在O(n)时间内判断数组中是否有任意整数出现至少三次。
-
RedisIP黑名单必须用SET+EXPIRE分步操作而非SETEX,避免重复封禁重置过期时间;校验时应使用exists命令而非get防止序列化空值误判;需结合本地缓存、定时扫过期key及CIDR规则动态加载保障可靠性。
-
Java类的访问控制仅支持public和包私有(默认)两种修饰符,顶级类不可用private或protected;包私有类用于模块内高内聚封装,内部类才支持private/protected修饰。