-
冲突指多线程无协调地对同一数据执行非原子性更新(如先查后改再存),导致中间态被覆盖;synchronized锁粒度大、阻塞强,无法解决分布式冲突,且在读多写少或含I/O场景下严重拖累吞吐。
-
long字面量必须加L/l后缀以避免溢出和类型误判:整数字面量默认为int,超范围需显式标注;推荐大写L防混淆;各进制超int值均须加L。
-
本地启动Hadoop卡在startingnamenodes主要是SSH免密登录未配置成功,导致start-dfs.sh等脚本阻塞等待密码输入;需执行sshlocalhost验证,失败则用ssh-keygen和ssh-copy-id重配密钥。
-
业务错误应使用自定义RuntimeException(如BizException),避免模糊预期失败与意外崩溃边界,需提供多构造函数支持异常链、错误码解耦及日志友好输出。
-
Netty无官方spring-boot-starter,生产环境应按需引入netty-transport、netty-buffer、netty-codec等核心模块,避免使用netty-all;需统一版本、区分NIO/Epoll、正确调用connect()并监听结果。
-
BitSet比boolean[]节省8倍内存因其按位存储,1字节存8个布尔值;但存在线程不安全、无泛型、随机访问有位运算开销、大索引可能OOM等问题。
-
Tomcat控制台中文乱码需同步解决三方面:logging.properties文件须UTF-8无BOM保存并删中文注释;JVM启动参数加-Dfile.encoding=UTF-8且ConsoleHandler显式设encoding=UT-8;终端(如WindowsCMD)须支持UTF-8输出,或改用PowerShell/IDETerminal。
-
Java异常体系以Throwable为根,分为Error和Exception;Exception再分Checked(编译期强制处理,如IOException)和Unchecked(运行时无需声明,如NullPointerException)两类,兼顾健壮性与灵活性。
-
多线程读写共享变量出错是因为JVM允许线程缓存变量到工作内存,导致可见性问题和竞态条件;count++非原子、volatile不解决原子性、synchronized与ReentrantLock机制不同;AtomicInteger依赖CAS硬件指令实现无锁线程安全;过度同步会严重降低吞吐量。
-
Java字符串+拼接在编译期仅对常量字面量直接合并为单个字符串,对局部变量则优化为StringBuilder调用;循环中动态拼接不会优化,需显式使用StringBuilder避免性能问题。
-
本文介绍一种简洁、高效且不依赖额外库的Java数组洗牌方法:通过为每个元素生成随机键,利用Arrays.sort()配合自定义Comparator按随机键排序索引,从而实现均匀、可重现(若种子固定)、时间复杂度为O(nlogn)的洗牌。
-
OutOfMemoryError:Metaspace表明元空间不足,非堆内存问题;需通过GC日志、jstat、jmap-clstats定位类加载器泄漏或MaxMetaspaceSize过小,并合理设置MetaspaceSize与MaxMetaspaceSize。
-
extends是Java中声明单继承的唯一关键字,格式为class子类名extends父类名,父类不能是final或非public(跨包时),不可多继承,子类继承public/protected成员,构造器需显式调用super(参数)若父类无无参构造。
-
应警觉并避免if-else嵌套超过2层,因其混杂控制流、业务判断与副作用,导致可读性差、易出错、难测试;推荐用提前返回、Optional(适度)、策略映射和IDE检查约束。
-
通过接口定义行为契约,结合依赖注入与工厂模式,实现模块间松耦合,提升系统可维护性与扩展性。