-
Java集合框架核心是接口体系:Collection(单列,含List有序可重复、Set无序不重复、Queue队列)、Map(键值对,独立体系)及Iterable(支持for-each)。选型重行为匹配而非死记类名。
-
应从设计上避免死锁,通过按固定顺序获取锁、使用tryLock设置超时、避免嵌套和长时间持锁、采用并发工具类等方法预防死锁,降低风险。
-
设计可扩展Java类库需遵循开闭原则,通过接口或抽象类定义行为契约,如Processor接口的process()方法,允许用户扩展而非修改代码;明确扩展点,使用protected钩子方法、@FunctionalInterface支持Lambda及ServiceLoader实现插件化;采用工厂与策略模式解耦创建逻辑,通过静态工厂或配置动态选择实现;确保向后兼容,避免修改公共API,用@Deprecated标记废弃方法并遵循语义化版本控制。
-
private构造方法主要用于防止非法实例化和继承,需配合final类、static工厂、volatile变量、反序列化防护及调用栈校验等措施确保安全性。
-
URL类用于表示和操作URL,专注地址解析、构造与标准化,不发送请求;可拆解协议、主机等字段,支持相对路径解析和自动编码,通过openConnection()配合URLConnection发起请求,但不可变且功能基础。
-
Runtime.getRuntime().exec()卡住或拿不到输出的根本原因是子进程继承父JVM流但缓冲区不自动刷新且Java未主动读取,导致死锁;必须显式消费输入/错误流,避免直接获取输出流、正确传参防注入、Windows需用cmd.exe/powershell.exe显式调用,推荐改用功能更安全的ProcessBuilder。
-
本文详解如何解决JPA@ManyToOne/@OneToMany双向关系下,使用Jackson序列化时“Client中trainer字段不显示”的问题,核心在于正确配置@JsonIdentityInfo替代易误用的@JsonBackReference。
-
本文详解如何在Maven多模块项目中,通过Profiles实现「仅构建指定模块子集」(如ServiceA或ServiceB二选一),解决<modules>在profile中声明无效、所有模块仍被扫描构建的根本原因。
-
Lambda表达式是Java8引入的匿名函数,用于简化函数式接口实现,语法为(参数)->{方法体},适用于Runnable、Comparator等单抽象方法接口,结合StreamAPI可高效处理集合遍历、过滤和映射,建议保持简洁、合理使用方法引用,并注意调试可读性。
-
当JSON响应字段名包含空格(如"deletedH96records")时,直接使用jsonPath().getInt("deletedH96records")会触发Parameterwasusedbutnotdefined错误;正确做法是用双引号将整个字段名转义为合法JsonPath表达式。
-
Swing中UI更新必须在事件调度线程(EDT)执行,非主线程直接更新会导致异常。应使用SwingUtilities.invokeLater()将更新任务提交至EDT异步执行,或使用SwingWorker处理带进度反馈的复杂任务,其内部自动切换线程并安全更新UI。避免在工作线程中直接操作UI或在EDT中执行耗时操作,防止界面卡顿或死锁。遵循“耗时操作放工作线程,UI更新回EDT”原则,确保线程安全。
-
HttpMediaTypeNotSupportedException本质是客户端Content-Type与服务端consumes声明或@RequestBody使用不匹配。需检查三处:客户端实际请求头、控制器consumes属性、是否遗漏@RequestBody;禁用混用@RequestBody与@RequestParam;Feign调用需显式设Content-Type头。
-
通过抽象类定义共通行为,如Animal的makeSound;利用接口实现多维能力,如Flyable;结合策略模式动态切换行为,提升灵活性。
-
本文详解如何对两个10×10整型二维数组分别计算元素总和,并精确统计其中一位数、两位数、三位数的个数,同时对比两数组总和大小,提供可复用、模块化、符合面向对象原则的完整实现方案。
-
wait/notify必须在synchronized块中调用,否则抛IllegalMonitorStateException;推荐用while而非if防虚假唤醒;Condition提供更清晰的等待队列;BlockingQueue是生产者-消费者首选;volatile不能替代同步机制。