-
Java17+项目应选Tomcat10.1.x(原生支持JakartaEE9+),Windows用户下zip包避免exe安装版,Mac/Linux需赋权shell脚本并正确配置JAVA_HOME指向JDK根目录,启用manager需修改tomcat-users.xml并重启。
-
重写equals前必须重写hashCode,否则HashMap、HashSet中会出现查找失败或重复添加;equals签名须为publicbooleanequals(Objectobj),首行检查this==obj,再判null和getClass(),字段比较用Objects.equals,数组用Arrays.equals,且参与equals的字段必须参与hashCode计算。
-
SpringBoot2.6+必须使用springfox-boot-starter3.0.0+替代springfox-swagger2,因老版本未适配Spring5.3参数解析机制;@EnableSwagger2已废弃,需改用@EnableOpenApi,并确保包扫描、注解位置及泛型处理正确。
-
本文介绍在Java桌面应用中实现订单总价计算的最佳实践:不依赖字符串解析,而是通过数据模型实时计算,确保精度、可维护性和扩展性。
-
Collections.nCopies返回不可变视图,调用add/remove会抛UnsupportedOperationException;需用newArrayList()包装才可修改,且禁用于可变对象。
-
单元测试和Mock技术是保障Java代码质量的核心手段,首先通过针对最小可测试单元编写测试用例验证其行为,其次使用Mock技术隔离外部依赖以确保测试独立性;编写有效单元测试需遵循测试独立性、覆盖分支与边界情况、使用恰当断言、保持可读性,并结合Mockito等工具模拟依赖;推荐采用JUnit或TestNG等框架,结合TDD原则驱动开发;尽管单元测试无法覆盖并发、性能等问题,仍需集成测试等补充,但其在提升代码健壮性、可维护性和作为代码文档方面具有不可替代的作用。
-
Java对象间通信本质是方法调用,即通过引用直接调用public或包内可见方法;可控方式仅三种:直接调用、回调接口、事件总线;底层依赖JVM动态绑定机制,常见陷阱包括null引用、重载误判与重写失效。
-
应采用类型驱动设计:questionType区分题型,答案统一存String/JsonNode;Question用surveyId外键;JPA用LEFTJOINFETCH避免N+1;DTO接收答案并用@JsonAnySetter;选项与答案分表存储。
-
Netty不是NIO的简单封装,而是生产级重写:它将Reactor线程模型、内存池、零拷贝缓冲区、Pipeline机制等全部组件化、可配置,解决了JDKNIO的空轮询、手动索引管理、线程争抢等核心痛点。
-
本文详解Java中向ArrayList<Flyable>添加对象时常见的类型错误:误传字符串字面量而非实际对象引用,并说明为何不能实例化接口,以及正确的泛型集合使用方式。
-
Java中的StreamAPI通过函数式编程提升集合处理的简洁性与可读性,支持并行计算。首先从集合或数组创建流,如names.stream(),再进行链式操作:filter筛选、map转换、forEach遍历等。中间操作返回新流,终端操作如collect、count触发执行并关闭流,故不可复用。推荐使用Collectors.toList()、groupingBy、partitioningBy高效收集结果。优化性能需尽早filter、避免复杂map计算,大数据量可选parallelStream但注意线程安全
-
Thread本质是线程调度封装体,需理解start()与run()分离机制、状态流转及构造参数配合;直接调用run()不启新线程,仅start()触发JVM创建OS线程并进入NEW→RUNNABLE状态。
-
直接拼接JSON字符串易生成非法JSON,导致前端SyntaxError或后端JsonParseException;根本原因是未按JSON规范转义双引号、反斜杠、换行符等;应使用ObjectMapper.writeValueAsString()自动处理转义与格式化。
-
Java集合框架是替代数组的标准化体系,解决长度固定、操作繁琐等问题,提供自动扩容、统一遍历与排序机制;分Collection(List/Set/Queue)和Map两大主干,接口定义行为,实现类决定效率,随JDK演进持续增强泛型、函数式与不可变支持。
-
Paths.get()是Java中创建Path对象的核心方法,属于java.nio.file包,用于安全、跨平台地处理文件路径。1.可通过字符串路径、多段路径或URI构建Path对象,系统自动适配分隔符;2.支持resolve()拼接路径、relativize()计算相对路径;3.提供normalize()清理冗余的“.”和“..”,toAbsolutePath()转绝对路径;4.不检查路径是否存在,仅解析语法,错误时抛InvalidPathException;5.推荐替代字符串拼接,常用于读取配置、构建