-
选List还是Set取决于是否需要顺序和去重:List有序且允许重复,适合日志、步骤等场景;Set无序(除非LinkedHashSet/TreeSet)且元素唯一,适合去重、权限等场景。
-
杨辉三角对齐关键在于每行前置空格数需随行号动态计算,n行时第i行(i从0起)补n−i−1个空格,数字须用固定宽度格式化(如"%3d"),外层循环末换行,内层用print控制数字与间隔。
-
Java中线程安全Map首选ConcurrentHashMap,它通过分段锁(JDK7)或CAS+synchronized(JDK8+)实现高并发读写,读操作无锁、写操作细粒度加锁;Collections.synchronizedMap适用于低并发且需强一致性迭代的场景,但性能较低且需手动同步迭代;只读场景可用unmodifiableMap,排序需求可选ConcurrentSkipListMap;避免在ConcurrentHashMap上额外加锁或误用synchronized包裹普通HashMap。
-
ThreadLocalRandom.current()比共享Random快5–10倍且无锁竞争,因其为每线程独享实例,避免CAS自旋争抢种子;误用static声明会退化为共享实例,失去线程隔离优势。
-
AtomicBoolean适用于开关状态的原子操作,如初始化标志,通过compareAndSet保证线程安全;AtomicLong用于高性能计数场景,支持原子增减和累积操作,可替代synchronized实现高效并发计数。
-
Java程序运行核心是写对源文件名与类名、配好JDK环境变量;需确保javac/java命令可用,文件名与public类名严格一致,编译运行在正确路径下,注意大小写敏感和包声明规则。
-
不适合。BlockingDeque的阻塞语义、锁机制及缺乏原子弹尾操作,与工作窃取要求的非阻塞、本地LIFO消费、窃取端FIFO无锁试探存在根本冲突;实际应使用ForkJoinPool.WorkQueue或自研无锁双端栈。
-
根本原因是路径解析基准为当前工作目录而非类路径;IDE运行时工作目录因环境而异,应打印确认;classpath资源须用getResourceAsStream();读中大文件需BufferedInputStream批量读以提升性能。
-
本文详解ApacheCamel路由中multicast()的语义本质——它会广播原始消息副本,而非传播前序处理器修改后的消息体;因此需将bean()等转换逻辑置于multicast外部,才能确保下游端点接收到已转换的payload。
-
equalsIgnoreCase要求调用对象非null,应将字面量放左边避免NPE;不支持locale-sensitive比较,Unicode特殊字符如é/É可能失败;性能优于toLowerCase+equals,因原生实现且短路优化。
-
适配器模式是“套一层壳”而非修改原接口,因AudioPlayer等已上线类无法直接改动;它通过实现目标接口并持有适配者实例来透明转发调用,真正干净的适配器代码应很薄。
-
SLF4J的error()方法默认不打印堆栈,必须将Throwable作为最后一个参数传入,否则异常被格式化为字符串而丢失堆栈;同时需确保仅绑定logback-classic,且encoder配置%ex以输出完整堆栈。
-
Collector.toList()不保证返回可变列表,JDK9+可能返回不可变视图,调用add/remove会抛UnsupportedOperationException;需可变时应显式使用newArrayList<>(...)或Collectors.toCollection(ArrayList::new)。
-
客户端端口耗尽需启用SO_REUSEADDR/SO_REUSEPORT、扩端口范围、启用tcp_tw_reuse;服务端需调高ulimit、配置limits.conf与systemdLimitNOFILE;EventLoopGroup线程数应按场景适配CPU核心数,禁用SO_LINGER,并通过ss-s定位真实瓶颈。
-
Condition.await()不能替代Object.wait()随意调用,因必须先持有对应ReentrantLock锁,否则抛IllegalMonitorStateException;await()自动释放锁,唤醒后需重新竞争锁,且须置于while循环中防虚假唤醒。