-
Java中try-catch应只包裹明确可能抛异常且能处理的代码,避免过大或过小;受检异常必须处理,非受检异常慎用throws;日志需用SLF4J记录完整上下文并脱敏;自定义异常依是否强制调用方处理选择继承Exception或RuntimeException。
-
SimpleDateFormat线程不安全因其内部calendar和numberFormat状态可变,多线程并发调用parse/format会互相覆盖导致NumberFormatException或日期错乱;正确方案是用ThreadLocal.withInitial()封装并显式设置时区、leniency,或升级至Java8+使用不可变的DateTimeFormatter。
-
ArrayDeque是更优选择,因其底层为循环数组、O(1)出入队、无节点开销、GC压力小;LinkedList仅在需removeFirstOccurrence等特有方法时适用。
-
该用::而非lambda时,是当lambda体仅调用一个已有方法且参数类型、顺序完全匹配函数式接口抽象方法签名;否则易编译失败或语义错误。
-
Java方法重载本质是编译期静态分派,由编译器根据方法名和参数类型列表(顺序、数量、类型)在编译阶段确定调用目标,返回值、throws、访问修饰符不参与区分。
-
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抢占,成功即获锁;仅在锁空闲时有效,否则退化为排队逻辑。