-
永久设置JDK环境变量需将JAVA_HOME、PATH(含$JAVA_HOME/bin)写入Shell配置文件并确保加载;推荐用户级修改~/.bashrc或~/.zshrc,或系统级新建/etc/profile.d/java.sh,最后验证java-version和$JAVA_HOME。
-
线程池通过复用预先创建的线程,避免频繁创建销毁带来的开销,提升系统性能与稳定性。ThreadPoolExecutor是Java中实现线程池的核心类,其核心参数包括corePoolSize(核心线程数)、maximumPoolSize(最大线程数)、keepAliveTime(非核心线程空闲存活时间)、workQueue(任务队列)、threadFactory(线程工厂)和handler(拒绝策略)。这些参数共同决定了线程池的行为:当任务提交时,优先使用核心线程执行;核心线程满载后任务进入队列;队列满则创建
-
在macOS上通过终端运行java-version和javac-version可确认JDK是否安装;若javac报commandnotfound,则仅装了JRE或未配置好。推荐用Homebrew安装openjdk@17并正确设置PATH和JAVA_HOME,避免OracleJDK的兼容性与合规风险。
-
Arrays.asList(int[])返回仅含一个元素的不可变List,因int[]被整体视为T;应改用Stream.boxed()或Guava的Ints.asList,需显式newArrayList()才能增删。
-
hashCode实现不当会导致HashMap、HashSet性能从O(1)退化至O(n)——所有元素挤入同一桶形成链表;典型错误是恒返回0或仅依赖重复字段,而record虽自动生成但需注意字段顺序与不可变性。
-
ConcurrentLinkedQueue是基于CAS的无锁非阻塞队列,不保证强一致性、不提供阻塞操作,offer()几乎总返回true,poll()为空时返回null而非阻塞或抛异常,size()不可靠,适用于高并发低延迟场景如日志收集。
-
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的空轮询、手动索引管理、线程争抢等核心痛点。