-
该指定capacity。默认16容量易致频繁扩容,引发Arrays.copyOf开销和GC增加;应按总长预估并加余量,避免过大浪费内存;StringBuffer扩容行为相同但性能更低;固定拼接优先用+、String.join等优化方案。
-
addAll最轻量但不去重;removeAll和retainAll性能取决于参数集合类型,HashSet作参数时retainAll更高效;避免循环调用及并发使用,优先预转HashSet提升性能。
-
重写equals后必须重写hashCode,否则在HashMap、HashSet中会出现查找失败、重复添加等问题;根本原因是Java规范要求equals为true时hashCode必须相等,且应使用Objects.hash()包含所有equals中参与比较的字段并保持顺序一致。
-
浅克隆复制对象但共享引用,适用于简单结构或性能优先场景;深克隆递归复制所有引用对象,适用于需完全隔离的可变复杂结构,选择依据是是否允许引用共享。
-
业务错误应使用自定义RuntimeException(如BizException),避免模糊预期失败与意外崩溃边界,需提供多构造函数支持异常链、错误码解耦及日志友好输出。
-
Java初学者可用File+Serializable实现数据持久化,无需数据库;2.Serializable是标记接口,使对象可序列化为字节流并保存至文件;3.通过ObjectOutputStream写入、ObjectInputStream读取对象;4.示例展示学生类实现Serializable,工具类完成保存和加载列表;5.适用于小型项目如通讯录,但需注意serialVersionUID、全量读写性能、并发安全、文件损坏及不可读问题;6.可封装增删改查方法实现简易持久层;7.此方案简洁易懂,适合新手过渡
-
Java文件备份工具应基于java.nio.file实现:用Files.copy支持单文件备份并覆写;用Files.walk递归处理目录;校验文件大小或哈希值确保完整性;记录日志并规避路径越界、大文件进度、原子性等问题。
-
Scanner读取用户输入实现简单问答系统的核心是“接收输入→判断意图→返回答案”,需注意nextLine()缓冲区问题、字符串内容比较用equals()、关键词匹配优先toLowerCase().contains()、用Map预存问答对、if-elseif-else分层处理逻辑、while(true)循环交互、兜底回复及轻量随机响应。
-
策略接口应仅定义行为契约,用canHandle(TradeContext)由策略自主判断,统一入参为上下文对象,避免含业务细节的签名;Spring中通过@Service+getBeansOfType自动注册,禁用@Component;策略需细粒度拆分、禁止内部嵌套if-else;异常必须显式抛出并分类。
-
@SneakyThrows是编译期字节码增强,不改变异常模型,仅自动插入try-catch并抛出RuntimeException;调用方仍需处理异常,且IDE不提示throws,易致运行时崩溃与排查困难。
-
Java中MessageDigest线程不安全,须每次调用getInstance获取新实例;字符串转字节需显式指定UTF-8编码;SHA-256支持硬件加速;算法名须全大写如"SHA-256"。
-
InputStream读不到全部内容因read()单次只读一个字节,须循环至返回-1;OutputStream需flush()或close()确保落盘;二者不支持直接传字符串,须显式编码;大文件应分块读写,避免OOM;推荐用Files.copy或固定缓冲循环处理。
-
ClassValue是Java7引入的按Class关联缓存值的机制,因内部弱引用清理延迟或残留条目可能持有已卸载ClassLoader,导致类加载器泄露和MetaspaceOOM。
-
本地启动Hadoop卡在startingnamenodes主要是SSH免密登录未配置成功,导致start-dfs.sh等脚本阻塞等待密码输入;需执行sshlocalhost验证,失败则用ssh-keygen和ssh-copy-id重配密钥。
-
Java中抛出异常会显著影响性能,主因是JVM需生成完整栈轨迹,即使catch住开销也已发生;三类高开销异常包括常见运行时异常、未重写fillInStackTrace()的自定义异常及循环内频繁throw;应避免热路径触发异常,改用预检、返回值等替代方案。