java教程技术文章
-
应避免用异常代替控制流、滥用检查型异常、在finally中抛异常及自定义无上下文异常;正确做法包括用分支判断替代异常控制、封装检查型异常、使用try-with-resources、提供错误码/参数/cause的自定义异常。484 收藏 -
数组长度固定,查找可通过遍历实现,如for循环定位目标元素索引。484 收藏 -
ThreadLocal的值存在当前线程的threadLocals字段(ThreadLocalMap类型)中,而非ThreadLocal实例本身;get/set操作本质是对此Map的key(当前ThreadLocal)查/存value;因Entry的key是弱引用而value是强引用,若不显式remove(),易导致value内存泄漏,尤其在线程池场景下。484 收藏 -
默认GC在生产环境大概率不合适,因其未适配真实负载如堆外内存压力、GC停顿敏感度等;RPC网关或实时计费系统中一次2秒FullGC即可引发下游熔断。484 收藏 -
责任链模式实现多级审批的关键在于流程可配、节点可插拔、跳过有依据、终止有控制;节点通过shouldHandle动态判断介入,链由配置驱动组装,传递过程需防崩溃、状态隔离、空安全,并统一归口审批结果。484 收藏 -
使用Comparator.comparing()可实现List按属性排序,如按age升序:people.sort(Comparator.comparing(Person::getAge));支持多属性排序thenComparing()、降序reversed(),或通过Stream生成新列表避免修改原数据。483 收藏 -
DecimalFormat.format()不显示两位小数是因为模式中使用了“#”而非“0”、setMinimumFractionDigits()被错误设置,或double精度问题未预先舍入;正确做法是用"0.00"模式、避免干扰设置,并用BigDecimal或Math.round预处理数值。483 收藏 -
SynchronousQueue是零容量同步通道,不存储元素,put与take必须配对阻塞完成“手递手”交付,无缓冲、无复制、无中间状态,仅在生产者与消费者线程间直接传递引用。483 收藏 -
AS别名需显式书写、引号规范、作用域明确:SELECTnameASusername;含空格/中文/关键字时,MySQL用反引号,其余用双引号;仅SELECT和ORDERBY可用,WHERE/GROUPBY不可用;计算字段别名提升可读性与下游兼容性。483 收藏 -
本文介绍在Java中高效提取字符串中从起始位置到某个目标单词结尾处的子串,核心方法是结合indexOf()与substring(),避免遍历或正则开销,简洁且性能优越。483 收藏 -
Redis的Hash类型不支持字段级过期,而Redisson的RMapCache依赖Lua脚本模拟该行为;当写入速率过高(如500万条/30分钟)时,脚本执行被阻塞,过期逻辑失效,最终触发RedisOutOfMemoryException。483 收藏 -
new是最直接的对象创建方式,需类非抽象/接口且构造器可访问;反射newInstance()已弃用,应改用getDeclaredConstructor().newInstance();静态工厂更灵活安全,推荐优先使用。483 收藏 -
String.substring() 两个参数版本(即 substring(start, end))可以用来提取字符串中从 start 索引开始到 end 索引结束(不包含 end)的内容。要精准提取特定标签(如
... )包裹的内容,可以结合正则表达式或手动定位标签位置。方法一:使用正则表达式 + substringconst text = "Hello
Hello
使用substring提取标签内容需先动态定位边界:用indexOf找起始标签和闭合>确定beginIndex,再找结束标签位置作为endIndex(substring的endIndex不包含),注意索引越界、多标签及属性变化等陷阱,复杂场景应改用正则或HTML解析器。483 收藏
Java中不存在“上下文加载器”标准术语,实际问题是ThreadLocal持有ClassLoader导致的类污染;需通过比对getClassLoader()、检查异步调用路径、排查ThreadLocal中ClassLoader残留来定位,并在任务边界显式清理。483 收藏
定义方法需使用publicstatic返回值类型方法名(参数列表),基本类型传参不改变原值,引用类型则影响原对象,可通过重载模拟默认参数。483 收藏