-
项目SDK与模块SDK不一致会导致编译报错或NoClassDefFoundError,因模块SDK才真正决定字节码版本、语言特性及依赖解析,两者冲突时IDE行为不可预测,且Gradle同步可能覆盖设置。
-
Windows10中设置JAVA_HOME和Path后,Java命令在重启后失效,通常因Path中误用系统变量引用(如%JAVA_HOME%\bin)导致变量未被正确展开;直接使用绝对路径可彻底解决该问题。
-
继承问题源于误将其当作代码复用首选而非is-a关系建模工具,如Stack继承Vector破坏封装;应优先组合、慎用protected、避免构造器中调用可重写方法。
-
Java并发性能测试需用JMH控制变量、固定JVM参数、避免伪共享,监控线程状态与锁竞争,合理配置线程池,并明确压测目标与指标可信度。
-
答案:基于SpringBoot+MyBatis+MySQL实现问卷分析功能,核心包括设计问卷、问题、选项、答卷、答案五张表,通过RESTful接口支持问卷展示、答题提交与统计分析;针对单选、多选、填空、评分等题型分别实现分组计数、选项拆解、文本聚类与数值计算;通过数据库索引、Redis缓存、定时任务预处理提升性能,结合ECharts可视化与EasyExcel导出,确保系统高效稳定。
-
不能直接减少核心线程数——corePoolSize是只读属性,需通过allowCoreThreadTimeOut(true)+keepAliveTime触发空闲核心线程超时退出;setCorePoolSize()仅影响后续任务分配,不终止已有线程。
-
不能边遍历边用集合的remove()方法,因为Java集合迭代器采用fail-fast机制,通过modCount检测并发修改;正确做法是仅使用Iterator.remove()。
-
System类是JVM与底层资源的桥接入口,非操作系统控制工具;安全调用System.exit()仅限主程序主动退出,应避免在库或Web中使用,优先用return或异常;System.in/out/err可替换但有全局和线程安全风险;currentTimeMillis()用于时间戳,nanoTime()专用于耗时测量。
-
必须用logger.error(String,Throwable)传异常对象,否则丢失堆栈;日志配置需含%ex或%xEx才输出堆栈;资源关闭异常不可吞没;ERROR仅用于影响稳定性的异常,校验类失败用WARN。
-
ThreadMXBean.findDeadlockedThreads()返回null是正常现象,因仅检测JVM内置锁的循环阻塞态;需周期轮询、结合超时与阈值判断,并区分synchronized与ReentrantLock等显式锁的监控差异。
-
ExceptionUtils.getStackTrace()可获取带换行的完整堆栈字符串,但需引入ApacheCommonsLang3依赖,因其非JDK原生类;若无法引入,可用StringWriter+PrintWriter手动实现等效逻辑。
-
在SpringBoot中,应保持成功响应(ApiResponse)与错误响应(ErrorResponse)的结构分离,通过HTTP状态码区分语义;前端依据status判断响应类型并分别解析,而非强行合并两类DTO。
-
Tomcat是轻量级Servlet/JSP容器,非通用Web服务器;支持动态资源处理但静态资源性能弱;需正确配置JAVA_HOME;部署方式有webapps、外部路径+XML、server.xml三类,后者应谨慎修改。
-
策略模式通过封装不同算法并允许运行时切换,提升代码灵活性和可扩展性。其核心由策略接口、具体策略类和上下文组成,实现算法与使用的分离。以Java排序为例,定义SortStrategy接口及BubbleSort、QuickSort等实现类,Sorter作为上下文持有策略引用,客户端可动态设置策略,无需修改源码。该模式适用于多行为变体、需动态切换算法或避免冗长条件判断的场景,符合开闭原则,增强可维护性与测试性。关键在于将变化的行为抽象,用组合取代硬编码,体现解耦设计思想。
-
默认equals()只比较引用,需重写并同步重写hashCode();Lombok@EqualsAndHashCode有字段限制和继承陷阱;Objects.equals防null更安全;record自动生成但依赖字段类型正确实现equals()。