-
ReentrantLock必须手动释放,需在finally块中调用unlock();lock()阻塞获取,tryLock()支持非阻塞或超时;公平锁性能差且仅影响队列线程;Condition实现多条件等待;多数场景优先用synchronized。
-
ScheduledExecutorService的核心优势在于线程池化定时调度,具备并发能力、异常隔离性、资源可控性和任务可管理性;支持scheduleAtFixedRate和scheduleWithFixedDelay两种周期调度模式;每个任务返回ScheduledFuture,支持取消、结果获取与优雅关闭;推荐显式构造ScheduledThreadPoolExecutor以符合规范并便于运维。
-
List的“有序”指按插入顺序保存元素并支持索引访问,而非自动排序;允许重复和null;需正确实现equals();ArrayList适合随机访问,LinkedList适合频繁首尾增删;subList返回视图而非副本;遍历时修改会触发ConcurrentModificationException。
-
继承使子类编译期获得父类非私有成员,支持运行时多态;但易致紧耦合,应优先组合与接口实现,仅当满足稳定“is-a”关系时使用。
-
ExecutorService是统一调度任务的接口,封装线程复用、队列缓冲、拒绝策略与优雅关闭能力;相比newThread()可避免资源失控与OOM风险。
-
本文介绍如何使用Gson库将JSON对象中所有键与对应值(支持数字和字符串)按原始顺序拼接成一个连续字符串,适用于扁平化、轻量级序列化或签名生成等场景。
-
ProviderNotFoundException表示ServiceLoader已定位SPI配置文件并解析出实现类名,但加载该类失败,原因包括类不存在、不可见、无公共无参构造器、ClassLoader隔离或模块系统未正确声明provides/uses。
-
内存可见性问题指多线程下共享变量修改未能及时同步到主内存,导致其他线程读取过期值。Java中volatile通过强制主内存读写保证可见性和禁止指令重排序,适用于状态标志等简单场景;synchronized在加锁时清空本地内存并刷新主内存,同时保障可见性、原子性和有序性,适合复合操作。两者性能与功能不同,应根据是否需要原子性及操作复杂度选择。
-
本文介绍在QueryDSL中,当实体类继承自无QueryDSL支持的外部包类(如第三方JAR中的类)时,如何正确生成Q查询类,避免编译错误cannotfindsymbolQExternalClass。核心方案是通过@QueryEntities显式声明需生成查询类的外部类型。
-
Pattern.compile()需预编译正则以提升性能并支持复用、子串查找及分组提取;直接使用静态matches()会重复编译且仅支持全串匹配;Matcher需先调find()/matches()再取group(),否则抛IllegalStateException。
-
答案:系统通过Student类封装学生信息,StudentManager类实现增删改查功能,使用ArrayList存储学生数据,支持按ID操作并避免重复,主程序驱动控制台交互。
-
异常消息须精准定位问题,明确“谁出错、在哪出错、为什么出错”,含关键上下文如userId=123,避免敏感信息与解决方案;必须链式传递cause,禁用裸newRuntimeException;自定义异常慎加字段,日志记录勿重复打印堆栈。
-
URL类不能直接解析域名和端口,仅做语法校验与结构封装;getHost()和getPort()提取显式指定的主机与端口,不补默认值、不验证可达性;需用URI处理相对路径、标准化及安全哈希。
-
快速定位Java代码编译错误的关键是仔细阅读编译器提供的错误信息,包括错误类型、行号和具体描述,从而精准定位问题所在;2.从上到下逐行检查错误行及其附近代码,重点排查拼写错误、括号不匹配、分号缺失等常见问题;3.利用IDE的实时语法检查功能,在编码过程中及时发现并修正语法错误;4.将复杂代码拆分为小模块分别编译,有助于缩小错误范围并快速找到问题根源;5.新手常犯的错误包括忘记分号、括号不匹配、拼写错误、类型不匹配和空指针异常,应通过养成良好编码习惯和使用IDE辅助功能加以避免;6.调试时应善用断点、单步执
-
抽象类能有构造函数而接口不能,因抽象类是类可初始化资源,接口仅为契约声明;抽象类支持访问控制和共享行为,接口仅定义公共能力契约。