-
Runnable接口用于定义线程任务,通过实现run()方法封装执行逻辑,不返回结果且不能抛出受检异常;可直接传给Thread实例启动线程,也可用Lambda表达式简化代码;推荐结合ExecutorService线程池使用,提升资源利用率;需注意无返回值、异常处理在内部完成、共享变量线程安全等问题。
-
偏向锁默认延迟4秒生效,由-XX:BiasedLockingStartupDelay=4000控制,旨在避开JVM启动期高竞争阶段;JDK15+已彻底移除该功能。
-
RabbitMQ是基于AMQP协议的开源消息代理,用于实现异步通信与解耦。它由Erlang开发,支持高并发、高可靠,提供点对点和发布订阅模式。在Java中通过amqp-client依赖集成,利用Exchange、Queue和RoutingKey控制消息流向。生产者发送消息至交换机,经路由规则存入队列,消费者监听队列异步处理。主要解决系统紧耦合、突发流量冲击及任务异步化问题,如订单通知、邮件发送等场景,提升系统稳定性与可扩展性。
-
答案是重写equals和hashCode后用Set或Stream去重。需根据业务字段重写equals和hashCode方法,再利用HashSet、LinkedHashSet或Stream的distinct实现去除自定义对象重复,注意可变字段可能引发集合行为异常。
-
泛型是Java编译期类型安全机制,通过类型参数化实现编译时检查,避免ClassCastException;其本质是类型擦除,运行时无泛型信息,故不支持newT()、instanceofT等操作;泛型类、方法与通配符用途各异,基本类型不可作实参,泛型数组和继承Exception均被禁止。
-
最可靠做法是用Dockerfile定制Java运行环境,优先选用openjdk:17-jdk-slim或openjdk:21-jdk-slim镜像,显式设置JAVA_HOME,禁用不稳定的缓存与自动工具安装,并严格锚定JDK及构建工具版本。
-
本文介绍如何基于PDFBox等专业库,将含表格结构的PDF文件准确转换为Excel格式,解决传统文本提取导致列对齐丢失、空列缺失等问题。
-
InterruptedException是线程协作信号而非错误,捕获后必须调用Thread.currentThread().interrupt()恢复中断状态,否则中断语义失效;阻塞方法响应中断,计算循环需手动轮询isInterrupted()。
-
BlockingQueue提供开箱即用的线程安全队列,内置阻塞、唤醒与JMM语义保障;无需手写wait/notify,避免虚假唤醒、死锁等错误;ArrayBlockingQueue适合固定容量场景,LinkedBlockingQueue吞吐更高但有GC压力;关闭需配合结束标记或中断机制。
-
答案:Java中配置数据库连接需引入JDBC驱动,如MySQL在Maven中添加对应依赖;通过DriverManager或连接池(如HikariCP)获取Connection,使用try-with-resources管理资源;建议将连接参数存入properties文件,并处理常见问题如驱动加载、权限、超时等,生产环境应使用连接池以提升性能和稳定性。
-
静态代码块在类加载时执行一次,用于初始化静态资源;语法为static{},多个按出现顺序执行;在创建对象、调用静态方法等主动使用类时触发,仅执行一次,与每次实例化都执行的实例代码块和构造函数不同。
-
IntelliJIDEA中点击jar无法查看源码,主因是未正确关联源码路径。需检查是否缺失-sources.jar、手动AttachSources或通过Maven执行dependency:sources下载源码,避免硬编码绝对路径。
-
必须用新线程处理每个accept()返回的Socket,避免阻塞主线程;用ConcurrentLinkedQueue作消息队列,record封装消息;设socket超时和UTF-8编码,显式flush,加强连接管理。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
设计模式是解决常见问题的通用方案,能提升代码可维护性与扩展性。通过工厂、单例、模板方法等模式统一创建逻辑和结构,增强复用性;策略、观察者、装饰器模式隔离变化,支持动态扩展;团队沟通因共通语言更高效;合理应用避免过度设计,结合SOLID原则在创建型、结构型、行为型模式中选择适用方案;本质是经验沉淀,需在实践中体会,如阅读Spring等开源框架源码,提升架构思维。