-
Java并发编程核心是安全共享状态;start()创建新线程执行run(),直接调用run()仅为普通方法调用;volatile仅保证可见性不保证原子性;synchronized锁的是指定对象实例;submit()返回Future支持结果与异常处理,execute()则不。
-
迪米特法则强调对象只与“朋友”通信,避免火车式调用;应通过委托方法封装嵌套访问、返回不可变/抽象结果,并用协调者解耦多对象协作。
-
Java接口的本质是纯粹的行为规范契约,只定义“做什么”而不涉及“怎么做”,通过无状态、多实现、按契约注入等机制实现彻底解耦。
-
Java集合框架是围绕Collection和Map接口构建的契约体系,接口定义操作,实现类负责高效实现;List与Set核心区别在于唯一性语义而非顺序;哈希类集合依赖hashCode()与equals()一致性。
-
File.getFreeSpace()通过目标分区路径构造File实例来获取剩余空间,推荐用getUsableSpace()并校验exists()和canRead(),注意跨平台路径格式及容器环境限制。
-
HashSet核心特点是无序、不重复、允许一个null、非线程安全、平均时间复杂度O(1),底层基于HashMap实现,依赖hashCode()和equals()保证唯一性,遍历仅支持增强for和迭代器。
-
ConcurrentSkipListMap是Java中基于跳表实现的线程安全有序Map,支持高并发读写与范围查询;相比红黑树,其插入删除无需旋转、更易无锁化,平均时间复杂度O(logn)。
-
抽象类通过模板方法和钩子方法统一处理流程,如DataProcessor定义通用数据处理结构,子类实现特定逻辑;结合接口Exportable声明能力,BaseExporter提供公共实现,确保行为一致又灵活扩展;LogHandler则利用protected成员共享内部机制,在规范与复用间取得平衡。
-
Iterator与Iterable是Java集合遍历的核心接口,Iterable表示对象可被遍历,通过iterator()方法返回Iterator对象,Iterator负责实际遍历操作,提供hasNext()、next()和remove()方法,二者关系如同“书本”与“读者”,实现Iterable可支持增强for循环,使用时需注意并发修改异常和remove调用时机。
-
Java中判断数值是否在闭区间内应直接写a<=x&&x<=b,而非用位运算符&;后者因优先级问题会导致逻辑错误,且可读性差。
-
Java模块化通过module-info.java定义运行时可验证、编译期可约束的结构契约,核心在于显式声明可见性(exports/opens)、依赖(requires)、服务(uses/provides)和唯一模块名,实现强封装、可验证依赖与服务解耦。
-
Java生成验证码核心是用BufferedImage和Graphics2D自制图像:选52个易识别字符生成4–5位码,存入session的"captcha_code";绘图时加错切、噪点、随机灰度色,尺寸120×40;响应头禁用缓存,输出PNG并flush。
-
在Java中,静态工具方法应优先定义在不可实例化的工具类中,而非接口;接口仅用于定义类型契约,滥用静态方法会破坏抽象语义并带来维护隐患。
-
Observable集合让集合本身可被监听,JavaFX中用ListChangeListener响应增删改移,需循环c.next()处理批次变更;普通ArrayList无通知机制,须用FXCollections.observableArrayList创建;KO的observableArray与JavaFX均不自动响应元素属性变化,需额外配置;监听器中避免耗时操作或递归修改。
-
preHandle适合鉴权和参数预处理,postHandle仅在Controller成功执行后调用且不处理异常,afterCompletion无论成败均触发并可捕获异常;路径匹配需用PathPattern风格如/api/**;读取请求体须用ContentCachingRequestWrapper;拦截器必须由Spring容器管理而非new创建。