-
Java批量压缩图片核心是用ImageIO读取、BufferedImage缩放重采样、ImageWriter控质量;推荐初学者用Thumbnailsator,Maven引入net.coobird:thumbnailator:0.4.20,一行代码实现等比缩放、质量控制与格式转换。
-
Hashtable线程安全但性能低且不支持null,HashMap非线程安全但支持null且性能好,多线程推荐ConcurrentHashMap。
-
抽象类与模板方法模式通过封装固定流程、允许子类定制关键步骤来提升代码复用性。1.抽象类定义通用结构,包含抽象方法(强制子类实现)和具体方法(提供默认行为)。2.模板方法是final的公共方法,定义算法骨架,调用抽象或钩子方法以支持扩展。3.钩子方法允许子类选择性地控制流程,如跳过验证步骤。4.应用于数据处理器等场景,实现加载、解析、验证、保存的统一流程。5.广泛用于框架设计,如Spring的JdbcTemplate,符合开闭原则,增强可维护性与扩展性。
-
%s对应任意对象(含null),%d仅接受整数类型,%f接受浮点类型;参数类型与顺序必须严格匹配,否则抛IllegalFormatConversionException或MissingFormatArgumentException。
-
封装的核心是约束与责任划分,通过私有化字段并提供公共方法控制访问,确保对象始终处于合法状态,如用户余额需由账户对象自身管理增减操作。
-
Java算术运算符含+、−、*、/、%五种,支持数值计算与字符串拼接(仅+),整数除法截断小数,%余数符号同被除数,++/--分前置后置影响求值顺序。
-
PermGen在JDK7及之前会OOM是因为其大小固定且与堆共享内存,类加载过多(如热部署、动态代理)时无法扩容,GC回收弱,ClassLoader泄漏导致元数据持续累积。
-
Callable能返回值且可抛受检异常,Runnable不能;但Thread不接受Callable,须通过ExecutorService.submit()获取Future并调用get()获取结果或异常。
-
抽象类是不能被实例化的类,用于定义通用行为框架,具体类继承抽象类并实现其抽象方法。示例中Shape为抽象类,包含抽象方法calculateArea()和具体方法displayInfo();Rectangle和Circle为具体类,分别实现calculateArea()。通过父类引用调用子类对象,实现多态。抽象类支持代码复用、结构统一和强制实现关键逻辑,适用于具有“is-a”关系的类体系。一个类只能单继承抽象类,若子类未实现全部抽象方法则必须声明为抽象类。正确使用抽象类可提升代码可维护性、扩展性和复用性。
-
非公平锁的lock()能“插队”是因为在方法开头直接CAS抢占,成功即获锁;仅在锁空闲时有效,否则退化为排队逻辑。
-
实体类代表事物本身,承载状态与身份,如User、Order;行为类专注做事,提供算法或协调能力,如PaymentProcessor、DiscountCalculator。区分关键在职责:实体被持有,行为被使用。
-
clone()不一定能防住外部修改,因为其默认为浅拷贝,仅复制引用地址而非实际内容;含可变引用(如ArrayList)时需手动深拷贝,数组宜用Arrays.copyOf(),集合返回应避免直接暴露内部引用。
-
Java中==比较引用(或基本类型值),equals()比较内容;重写equals()须遵循自反性、对称性、传递性、一致性和null安全原则,并必须同步重写hashCode()。
-
本文详解为何JPanel.setOpaque(false)单独调用无法实现预期透明效果,并指出关键遗漏点:JSplitPane本身也需设为非不透明,才能让JLayeredPane中底层组件正常透出。
-
Java中对象克隆分为浅克隆和深克隆。1.浅克隆通过实现Cloneable接口并重写clone()方法,复制基本类型值和引用类型地址,导致原对象与克隆对象共享引用对象;2.深克隆则确保完全独立,可通过重写clone()递归克隆、序列化反序列化或使用JSON转换等方式实现,适用于需隔离对象的场景。