-
工厂模式是Java开发中用于解耦调用方与具体类关系的一种设计模式。1.它通过将对象创建过程封装到工厂类中,使修改对象类型时只需调整工厂逻辑;2.常见实现包括简单工厂(适合产品少但违反开闭原则)、工厂方法模式(符合开闭原则但类数量多)、抽象工厂模式(适合创建对象家族但结构复杂);3.使用时应避免工厂臃肿、考虑枚举或配置减少硬编码、结合框架实现自动装配,并在合适场景如统一管理对象创建时应用。
-
EurekaServer启动不报错需确保:加@EnableEurekaServer注解、未被exclude、register-with-eureka和fetch-registry均设为false、依赖完整且端口未被占;客户端需正确配置defaultZone、服务名不含下划线、显式设置instance-id和health检查路径,并匹配SpringCloud与Boot版本。
-
Java字符串转数字时,parseInt和parseDouble遇非法格式直接抛NumberFormatException而非返回null或默认值,必须try-catch处理;空/空白字符串需trim后校验;valueOf与parseInt行为一致,仅返回类型不同。
-
Java构造方法必须与类名完全一致(大小写敏感),无返回类型,可重载;new对象时按固定顺序初始化;无显式构造方法时编译器自动添加无参构造,但一旦定义任一构造方法则默认无参构造消失;this()和super()必须位于构造方法首行且互斥。
-
Java对象拷贝有浅拷贝、深拷贝和序列化/反序列化三种方式:浅拷贝仅复制基本类型和引用地址;深拷贝完全隔离对象图;序列化实现无侵入式深拷贝但要求Serializable且性能低;不可变对象是现代推荐替代方案。
-
NoSuchMethodException不一定是代码写错,主因是运行时类加载、签名不匹配或依赖冲突;需检查类加载器、方法签名、混淆规则及版本差异。
-
String循环拼接性能差因其实例不可变,每次+或concat()均新建对象并复制内容,1000次循环产生1000个中间对象,引发频繁GC导致耗时陡增。
-
ArrayList基于数组、查询快增删慢;LinkedList基于链表、首尾增删快但随机访问慢;Vector线程安全但性能低已过时;CopyOnWriteArrayList读多写少并发安全。
-
PDF电子签名通过密码学技术将PDF文档与数字证书绑定,确保完整性、来源可信和不可否认性。其核心流程包括:1.加载待签名PDF;2.准备签名证书和私钥;3.配置签名信息和外观;4.执行签名并嵌入数据;5.关闭资源。相较于数字签名(仅技术手段),PDF电子签名是法律概念,涵盖更广,且依赖数字签名为PDF提供安全保障。实现过程中常见挑战包括证书管理、时间戳服务集成、长期有效性验证、签名外观定制及对PDF增量更新机制的理解。Java中常用iText和ApachePDFBox实现PDF签名,iText功能全面、支
-
SpringBoot接口版本控制的核心在于确保API在演进过程中支持不同版本的客户端,避免旧系统崩溃。1.URI路径版本控制通过在URL中嵌入版本号(如/api/v1/users),实现简单且对客户端友好,但可能导致路由配置膨胀;2.HTTPHeader版本控制利用自定义请求头(如X-API-Version)传递版本信息,保持URL简洁但需要客户端额外设置请求头;3.内容协商版本控制通过Accept头指定版本(如application/vnd.myapi.v1+json),符合HTTP规范但实现复杂;4.
-
双亲委派被打破是常态,JDBC、Tomcat、OSGi、SpringBoot均主动打破以解决类隔离或热加载需求;重写loadClass()需优先委派系统类,再加载自定义类,否则易触发NoClassDefFoundError。
-
BigInteger初始化禁用空字符串或null,须校验非空再构造;运算必须用add()等方法而非+−*/;比较大小用compareTo()而非>==。
-
Java泛型擦除是编译时特性,为兼容旧版本牺牲运行时类型信息。1.核心限制包括无法运行时获取泛型类型、无法创建泛型数组与实例、泛型方法重载冲突及静态部分不支持泛型。2.解决方案包括:传入Class<T>对象处理单层泛型;使用通配符(?extendsT和?superT)增强集合灵活性;复杂泛型通过类型令牌(TypeToken)保留完整类型信息;反射作为最后手段应对底层需求。这些策略并非绕过擦除,而是与其共存并构建安全代码。
-
本文详解如何使用Lombok@Builder构建含嵌套泛型集合(如List<DemoPackage>和List<String>)的POJO,解决字段类型不匹配、编译报错及构建逻辑混乱等常见问题。
-
手写字符串转数字需谨慎处理符号位、溢出及非法字符:先跳过前导空格,识别正负号,再逐位用Character.isDigit()校验并累加;溢出判断须提前进行,避免乘法后溢出。