-
静态代码块在类加载时执行一次,用于初始化静态资源;语法为static{},多个按出现顺序执行;在创建对象、调用静态方法等主动使用类时触发,仅执行一次,与每次实例化都执行的实例代码块和构造函数不同。
-
IntelliJIDEA中点击jar无法查看源码,主因是未正确关联源码路径。需检查是否缺失-sources.jar、手动AttachSources或通过Maven执行dependency:sources下载源码,避免硬编码绝对路径。
-
必须用新线程处理每个accept()返回的Socket,避免阻塞主线程;用ConcurrentLinkedQueue作消息队列,record封装消息;设socket超时和UTF-8编码,显式flush,加强连接管理。
-
应使用ArrayList替代数组存储员工对象,重写Employee的equals()和hashCode(),用Stream过滤查询,Iterator安全删除,HashMap按部门索引,Comparator链式排序,CSV文本持久化并异常兜底。
-
设计模式是解决常见问题的通用方案,能提升代码可维护性与扩展性。通过工厂、单例、模板方法等模式统一创建逻辑和结构,增强复用性;策略、观察者、装饰器模式隔离变化,支持动态扩展;团队沟通因共通语言更高效;合理应用避免过度设计,结合SOLID原则在创建型、结构型、行为型模式中选择适用方案;本质是经验沉淀,需在实践中体会,如阅读Spring等开源框架源码,提升架构思维。
-
Java集合框架通过Collection和Map等接口构建,List如ArrayList适合读多写少,LinkedList适合频繁增删;Set中HashSet用于快速查找,TreeSet实现排序;HashMap高效存取键值对,需注意线程安全,推荐ConcurrentHashMap;结合泛型与迭代器提升类型安全与遍历效率。
-
Files.copy默认行为因安全检查和强制刷盘导致性能下降,需显式指定REPLACE_EXISTING、避免COPY_ATTRIBUTES、确保同文件系统以启用零拷贝,并注意Windows路径长度与权限问题。
-
Future.get()抛出ExecutionException是因规范要求将子线程异常封装后上抛,避免线程间未检查异常直传;其cause即原始异常,最多一层嵌套,InterruptedException和CancellationException则直接抛出。
-
优先用isBlank()校验字符串是否为空,因它会trim后判断,避免"\t\n"被误判为非空;isEmpty()仅判长度,适用于对空白敏感场景。
-
静态链接发生在类加载的解析阶段,即类首次主动使用前,JVM将符号引用(如类名、方法名)替换为内存中确定位置(如常量池索引、vtable偏移等),且只执行一次。
-
应先校验扩展名和MIME类型,再用ImageIO.read()并检查null;保存时用UUID重命名、防路径遍历;缩略图用setSourceSubsampling降采样并flush;元数据需显式读取和写入。
-
Optional不是null替代品,而是为明确表达“可能无值”的计算链设计;禁用其作参数、字段、DTO及序列化场景,优先使用函数式操作而非isPresent()。
-
String.regionMatches()方法用于安全高效地比较两字符串指定区域是否相等,支持忽略大小写;调用带booleanignoreCase参数的重载版本,需正确指定起始索引和长度,并建议预先校验边界以确保可靠性。
-
Iterator.remove()是唯一安全的遍历中删除方式,因fail-fast机制下直接调用list.remove()会抛ConcurrentModificationException;removeIf()适合批量条件删除但不支持副作用操作。
-
CountDownLatch是一次性同步辅助类,用于让线程等待其他线程完成指定数量的操作;典型场景包括主线程等待多个子任务结束、测试并发起跑线、多异步初始化完成等。