-
线程间消息传递推荐使用BlockingQueue,如ArrayBlockingQueue,通过put/take实现生产者-消费者模式;2.可用PipedInputStream/PipedOutputStream进行线程间流通信,但较底层不常用;3.join()结合volatile可实现线程完成通知与结果传递。
-
首先检查类路径配置是否正确,确保JVM能定位所需类文件。1.查看CLASSPATH环境变量,建议不设全局值而用-cp参数指定;2.使用java-cpbin:lib/*(Linux/macOS)或-cp"bin;lib*"(Windows)包含所有必要目录和JAR;3.确认编译输出路径正确,手动编译应使用javac-d生成包结构;4.检查依赖JAR是否在lib目录并可用jar-tf验证;5.IDE中检查BuildPath、清理项目、区分模块与类路径;6.导出可执行JAR时正确配置Class-Path属性。核
-
接口与实现分离通过依赖抽象提升代码可维护性和扩展性,定义高内聚、职责明确的接口,实现类专注具体逻辑并命名体现策略,结合多态与依赖注入解耦,合理组织包结构便于团队协作。
-
Java内存泄漏指对象业务上已无用却被引用链持有致GC无法回收,引发内存增长、OOM;常见场景有静态集合未清理、内部类隐式持外部类引用、ThreadLocal未remove、资源未关闭、监听器未反注册;定位靠jmap/LeakCanary/JProfiler等工具分析堆快照与引用链;预防需用WeakHashMap、static内部类、finally中removeThreadLocal、try-with-resources、生命周期匹配的反注册。
-
子类构造方法中必须用super()调用父类构造方法且为第一句,因JVM需先初始化父类部分;若父类无无参构造,子类须显式调用super(参数)否则编译失败。
-
答案是短路运算符(&&、||)在左侧结果确定时不再计算右侧,而非短路运算符(&、|)始终计算两侧表达式。例如,使用&&可避免空指针异常,而&即使左侧为false仍会执行右侧,可能导致异常。非短路运算符适用于需强制执行副作用的场景,但多数情况下推荐使用短路运算符以提升安全性与性能。
-
Collections不能直接new,因其是私有构造的静态工具类;sort方法选择取决于元素是否实现Comparable;synchronizedList仅保证单操作原子性,复合操作仍需额外同步;emptyList()返回不可变共享实例,newArrayList()则新建可变对象。
-
在使用ProjectReactor时,不能在map中通过subscribe同步修改外部对象状态;应改用flatMap+collectList等响应式操作符,将内部Flux聚合后构造新对象,确保数据流完整性与线程安全性。
-
Java中判断字符是否为字母应使用Character.isLetter()方法,它支持Unicode全部字母(如英、中、日、希腊、西里尔等),对数字、标点、空格等返回false;大小写判断应使用isLowerCase()或isUpperCase()。
-
Java创建启动多线程有三种常用方式:继承Thread类(不推荐,受限于单继承)、实现Runnable接口(最常用,解耦且支持Lambda)、使用Callable配合FutureTask或线程池(支持返回值与异常);生产环境首选线程池。
-
Java中判断数字是否为偶数:整数用num%2==0或num&1==0;浮点数需先验证为整数值再转换判断;推荐封装为工具方法提升健壮性。
-
用HashMap做缓存会引发内存溢出、并发异常和数据过期问题;ConcurrentHashMap仅解决线程安全,仍需手动实现过期与驱逐;复杂场景应直接使用Caffeine等成熟缓存库。
-
偏向锁是JVM为减少单线程反复加锁开销而设计的优化机制,通过对象头MarkWord记录线程ID实现零成本重入,仅在发生竞争时撤销或升级锁。
-
答案:项目包含Task类定义任务属性和方法,TaskManager类管理任务列表并提供增删改查功能,Main类实现用户交互界面。
-
Java中可用ScheduledExecutorService实现轻量级活动日程提醒,核心包括:定义含startTime、remindBeforeMinutes、status等字段的日程实体;每30秒轮询触发提醒;通过策略模式扩展桌面、邮件等通知渠道;并加入事务、补偿机制与异常兜底。