-
业务异常必须用RuntimeException子类,不可用Exception及其子类;否则强制调用方处理,混淆业务逻辑与错误处理,违背“谁出错谁负责”原则。
-
本文讲解如何优化Java程序,使用户仅需输入一次数字,即可连续6次调用该数值计算斐波那契数,并避免重复创建Scanner和重复输入。
-
HashSet添加元素触发树化的条件是:桶中链表长度≥8且数组长度≥64,否则仅扩容;树化发生在putVal()末尾的treeifyBin()调用处,且需满足table.length>=64。
-
最常用的是Integer.parseInt()和Integer.valueOf(),前者返回int、无对象开销,后者返回Integer、复用-128~127缓存;二者均不自动trim、对null/空串/非法字符均抛NumberFormatException,超int范围也明确报错。
-
自旋锁适合锁持有时间极短的场景;因其忙等待特性,仅适用于临界区执行迅速、无睡眠可能且CPU资源充足的多核环境。
-
对象是类的实例,存储在堆中;引用是保存对象地址的变量,存储在栈或堆中。例如Personp=newPerson();中,newPerson()创建对象在堆中,p是引用,指向该对象。Java只有值传递:基本类型传值,引用类型传地址副本。方法参数接收引用副本,仍指向同一对象,因此可通过它修改对象状态(如person.setName("Alice")),但若在方法内重新赋值(如p=newPerson()),仅改变副本指向,不影响原始引用。常见误区是认为Java有“引用传递”,实际上始终为值传递
-
组合优于继承的关键在于按生命周期、复用性、可测试性拆分;避免接口宽泛、抽象类滥用、字段可变失控,聚焦小接口和不可变设计。
-
for-each循环用于简化数组和集合的遍历,语法为for(元素类型变量:数组),自动赋值无需索引;可遍历一维、二维数组,优点是简洁安全,缺点是无法获取索引、不能修改基本类型元素值。
-
SpringBoot通过application.properties/yml、@Value、@ConfigurationProperties、环境变量、命令行参数等多种方式读取配置,并按优先级生效,其中命令行参数优先级最高,支持多环境Profile管理,推荐使用@ConfigurationProperties处理结构化配置以提升可维护性。
-
设计接口扩展应遵循单一职责,通过小接口组合替代深层继承,利用默认方法平滑升级,命名需清晰体现语义与层次,提升系统灵活性与可维护性。
-
Java中应避免使用过时的Stack类,改用ArrayDeque或LinkedList实现Deque接口;Queue接口优先选择ArrayDeque,因其性能最优;Deque可同时支持栈和队列操作,但建议语义统一以避免混淆。
-
Java项目配Git实为配置IDE:需确认.git存在、SDK已选、手动指定仓库根目录、配置绝对路径的git.exe、统一UTF-8编码,并禁用多模块自动识别。
-
1.选择高性能库:处理JSON时,Jackson通常性能最优,Fastjson在特定场景更快但需注意安全性,Gson适合中小型项目;处理XML时,JAXB适合开发效率,StAX/SAX适合大数据量和低内存场景。2.优化配置:禁用美化输出、忽略空值、禁用未知属性失败机制;复用ObjectMapper/Gson实例;合理设置数据模型与注解;必要时使用自定义序列化器。3.高效转换策略:优先采用流式API(如JacksonStreaming、StAX)处理大型文件;分批处理逻辑块;减少临时对象创建,结合对象池管理
-
本文详解因JPA双向关联未正确配置引发的JSON无限嵌套问题,通过@JsonIgnore破解循环引用,并推荐使用DTO模式实现安全、可控的API响应。
-
parallelStream()本身线程安全,但业务逻辑需满足无状态、无副作用、可结合;误改共享变量、用非线程安全类或不当reduce会导致异常或结果错误。