java教程技术文章
-
共享Random会拖慢高并发服务,因多线程竞争更新同一AtomicLongseed导致CAS自旋耗CPU;ThreadLocalRandom必须每次调用current(),不可static缓存;推荐用nextInt(origin,bound)明确边界且性能更优。191 收藏 -
Javarecord类在DTO场景中天然适配,因其用极简语法自动获得不可变性、结构化语义及正确实现的equals/hashCode/toString,规避传统POJO样板代码与易错点。191 收藏 -
List<?extendsNumber>只读不可写,因编译器仅保证get返回Number子类但不确定具体类型;List<?superInteger>可写Integer但get只能赋给Object,因底层类型只能确定为Integer父类。191 收藏 -
Java中静态绑定在编译期确定,适用于private、static、final方法和构造器;动态绑定在运行期确定,适用于可重写的实例方法,通过invokevirtual指令查vtable实现。191 收藏 -
订单对象设计需以Order为聚合根,仅持userId而非User全量对象;OrderItem只存productId等快照信息;集合用finalList初始化并不可变;必须通过Builder模式创建,build()中校验必填项与金额一致性;订单号应采用时间戳+机器标识+序列号组合生成;组合子对象须不可变并提供深拷贝copy()方法;金额计算统一用BigDecimal指定HALF_UP舍入。191 收藏 -
String.join()不能直接接收多个离散字符串参数,需先封装为数组或列表;支持简洁拼接纯ASCII无特殊字符的CSV行,但含逗号、换行或双引号时须手动转义;推荐用辅助方法csvEscape配合Stream提升可读性与健壮性。191 收藏 -
文章 · java教程 | 1个月前 | 并发编程 · Spring Boot · 生产实践 · Java教程 · 线程池隔离 · java 并发编程 线程池 spring boot completablefuture
从 Spring Boot 异步接口长尾事故讲清 CompletableFuture 显式 Executor、线程池隔离、超时、异常收口和上下文传递。191 收藏 -
使用SocketChannel发起非阻塞TCP连接需四步:1.创建通道并设为非阻塞后调用connect();2.注册到Selector监听OP_CONNECT;3.就绪后调用finishConnect()确认结果;4.处理成功、失败或超时。190 收藏 -
配置Java环境后需验证java和javac版本一致、JAVA_HOME指向JDK根目录、手动编译运行Main.java成功,再通过VSCode过渡理解classpath与package机制。190 收藏 -
try-catch本身不阻碍JIT编译,但作用域过大会稀释热点密度、延迟C2编译;应将核心逻辑抽为无try的小方法,异常处理外移到调用层。190 收藏 -
Windows10环境中Maven执行测试时出现乱码(如“Текст”),导致含非拉丁字符的断言失败,而IDEA内运行正常——根本原因是MavenSurefire插件默认未显式指定UTF-8编码,需在pom.xml中配置maven-surefire-plugin的encoding参数。190 收藏 -
先定位高CPU的Java进程及线程,再通过jstack分析线程堆栈,结合jstat、jmap等工具排查GC、内存泄漏等问题,最终优化代码或JVM参数解决。190 收藏 -
finalize()不是析构钩子而是GC负担,无调用保证且易致OOM;应禁用并改用Cleaner或try-with-resources。190 收藏 -
线程池任务抛出未捕获异常时会静默终止,需在ThreadFactory创建线程阶段设置UncaughtExceptionHandler;但该机制无法捕获吞异常、Future.get()和拒绝策略异常,应结合Callable+Future显式处理及日志监控增强可观测性。189 收藏 -
toLowerCase()和toUpperCase()不修改原字符串,仅返回新字符串;需接收返回值,防范null/undefined及Unicodelocale差异,避免链式调用崩溃。189 收藏