-
确认旧版Java项目所需JDK版本,通过查看pom.xml或build.gradle文件中的编译配置;2.下载并安装对应JDK版本;3.配置JAVA_HOME、PATH环境变量指向该JDK;4.验证命令行java-version输出一致,确保运行环境匹配。
-
Collections.binarySearch()用于在排序列表中高效查找目标值,时间复杂度为O(logn),使用前必须确保列表已排序,否则结果不可预测;该方法有两个重载版本,分别适用于实现Comparable接口的元素和自定义Comparator比较规则的情况,查找成功返回索引,失败返回-(插入点)-1,可用于优化大型有序数据的搜索性能。
-
JVM是否启动JIT编译取决于方法调用或循环回边计数是否达到动态调整的阈值;其通过方法调用计数器和回边计数器识别热点,达阈值后提交C1/C2编译,但实际编译还受分层编译、代码缓存、GC等影响。
-
通过分层架构、接口契约、事件驱动与依赖注入实现对象高效协作,降低耦合度。职责分离确保各对象单一专注,Service、DAO、DTO分层处理业务、数据与传输;接口定义协作规范,支持多实现动态替换;观察者模式或事件总线解耦一对多依赖,订单创建后异步通知库存、物流等服务;工厂与依赖注入(如Spring)外部化对象创建,避免硬编码new,提升可测试性与灵活性。协作设计核心在于明确责任边界、面向抽象编程、开放扩展封闭修改,从而构建高内聚、低耦合的可维护系统。
-
线程池任务异常需特殊处理否则静默消失,可通过任务内try-catch、重写afterExecute、设置UncaughtExceptionHandler或使用Callable+Future捕获,建议内部处理结合全局兜底。
-
Swing中UI更新必须在事件调度线程(EDT)执行,非主线程直接更新会导致异常。应使用SwingUtilities.invokeLater()将更新任务提交至EDT异步执行,或使用SwingWorker处理带进度反馈的复杂任务,其内部自动切换线程并安全更新UI。避免在工作线程中直接操作UI或在EDT中执行耗时操作,防止界面卡顿或死锁。遵循“耗时操作放工作线程,UI更新回EDT”原则,确保线程安全。
-
掌握Java输入输出需先导入Scanner类,创建对象读取用户输入,用System.out.print/println/print进行输出。示例:Scannerinput=newScanner(System.in);System.out.print("请输入姓名:");Stringname=input.nextLine();System.out.print("请输入年龄:");intage=input.nextInt();System.out.println("你好,"+name+",你今年"+age+"
-
类方法用static修饰,属于类本身,可直接通过类名调用,如Math.max();实例方法属于对象,需创建实例后调用。类方法不能访问实例成员,适用于工具、工厂等无状态场景;实例方法可操作对象状态,如Person的getName()。类方法不可直接调用实例方法,实例方法可直接调用类方法。判断依据是方法是否依赖对象状态:依赖则为实例方法,否则可设计为类方法。
-
最简单的方法是使用Collections.reverse(),它直接修改原列表顺序。示例:Listlist=Arrays.asList("A","B","C");Collections.reverse(list);输出为[C,B,A]。若要保留原列表,可先复制再反转:Listreversed=newArrayList(original);Collections.reverse(reversed)。
-
依赖关系是类间“使用但不拥有”的弱耦合联系,体现为方法参数、局部变量、静态调用或返回值,不通过字段持有实例,区别于关联、组合与继承;Spring通过依赖注入解耦,提升可测试性与可替换性。
-
可见性问题指线程修改共享变量后其他线程可能无法立即看到,根源在于工作内存与主内存不一致及指令重排序;volatile强制读写主内存并禁止重排序,synchronized和Lock通过内存屏障保障可见性与原子性,原子类和线程安全容器也提供可靠可见性保障。
-
需要自定义业务异常,因为Java默认异常无法准确表达“用户余额不足”等业务语义,易混淆bug与合理拦截;应分层定义领域异常、应用异常、接口异常,并统一继承RuntimeException、提供多构造器、使用规范错误码。
-
强引用阻止GC回收,弱引用在GC时立即回收,软引用在内存不足时回收,虚引用不阻止回收仅用于跟踪回收时机。
-
LinkedBlockingQueue是Java中基于链表的阻塞队列,支持有界和无界模式,常用put/take实现生产者-消费者模型,适用于线程池任务队列及多线程解耦通信。
-
JavaIO是面向流的阻塞式处理,数据逐字节读写且线程阻塞,适合简单场景;NIO采用缓冲区与通道模型,支持非阻塞模式和事件驱动,通过Selector实现单线程管理多通道,适用于高并发网络应用,虽编程复杂但性能更高。