-
答案:比较对象时应使用equals而非==,因为==比较引用地址,equals比较内容。例如str1和str2内容相同但地址不同,==返回false,equals返回true;基本类型用==比较值,对象类型优先用equals判断逻辑相等。
-
StringTable不扩容——这是最关键的事实。它从JVM启动那一刻起就固定大小,由-XX:StringTableSize决定,后续任何阶段都不会自动增长或收缩。所谓“内存脉冲抖动”在海量配置加载场景中若与StringTable相关,根源几乎一定是哈希冲突激增导致的intern()阻塞和GC标记开销飙升,而非StringTable自身内存膨胀。
-
newThread()一用就卡,因每次创建都触发系统调用、分配8MB内核栈、切换态,1000次即耗时百毫秒且占8GB虚拟内存;CachedThreadPool无上限更危险;应使用有界ThreadPoolExecutor并合理配置参数。
-
AQS共享模式中state语义因同步器而异:Semaphore的state表示剩余许可数(越大越空闲),CountDownLatch的state表示待完成任务数(越小越接近释放线程),该差异决定tryAcquireShared返回逻辑及阻塞/放行时机。
-
本文详解如何在ApacheSpark(JavaAPI)中对嵌套数组字段(如response.indicator)执行explode操作,同时完整保留其余所有列(包括同级字段与嵌套结构),避免因展开导致数据丢失或结构坍塌。
-
类是描述一类东西的声明而非实体,它不占运行时内存,仅作为模板定义共性;实例化则分配独立状态空间,每个对象拥有独立字段但共享方法代码。
-
HashMap底层是数组+链表+红黑树的混合结构:哈希值经扰动运算后与(长度-1)按位与得索引;冲突时用链表,满足≥8节点且数组≥64则转红黑树;null键固定存于tab[0];重写equals必须重写hashCode以保证哈希一致;非线程安全,并发下易出错。
-
containsAll只检查被调用集合是否包含参数集合中每个元素,不关心顺序、重复次数或大小;适用于权限校验等存在性判断,不适用于频次一致或完全相等场景。
-
只有有向无环图(DAG)才有拓扑排序,所谓“集合的拓扑排序”实为对顶点集合V按有向边关系进行的排序;需用邻接表或Map构建图并运行Kahn或DFS算法,因邻接表空间高效、支持非连续/字符串顶点名、便于动态更新;Kahn算法中须显式初始化所有顶点入度,用merge或get-default方式安全更新,结果长度小于顶点数即表明存在环。
-
在Java中,实现线程安全集合的首选方式是使用java.util.concurrent包中的并发集合类。1.ConcurrentHashMap通过分段锁(JDK7及之前)或CAS+synchronized(JDK8及以上)机制提供高并发性能,避免了全局锁带来的性能瓶颈;2.CopyOnWriteArrayList适用于读多写少场景,通过写时复制保证线程安全;3.ConcurrentLinkedQueue和ArrayBlockingQueue分别适用于无界非阻塞和有界阻塞队列需求。相较于HashTable和
-
能,外部类可用default权限,仅限同包访问,跨包不可见、不可实例化,且文件中最多一个public类,文件名须与其一致。
-
Thread.onSpinWait()是向CPU发出轻量提示的指令,仅适用于等待另一线程瞬时修改volatile或原子变量的极短自旋场景,在x86上优化分支预测与内存屏障,ARM/RISC-V上为空操作。
-
Runtime.exec执行失败的根本原因是路径错误、命令未拆解或环境变量缺失;它不经过shell解析,故不支持重定向、通配符和变量展开,需用字符串数组传参并显式调用shell(如cmd/c或/bin/sh-c),同时注意流阻塞、退出码获取及跨平台兼容性问题。
-
Java操作PLC的核心方法是通过Modbus协议实现数据交互,1.选择合适的Modbus库如jModbus或Modbus4J;2.建立ModbusTCP连接,指定PLC的IP和端口;3.执行读写操作,处理寄存器、线圈等数据;4.解析返回的数据并处理字节序及异常情况;5.最后关闭连接释放资源。此外,还可考虑OPCUA、厂商SDK、硬件网关或串口通信作为替代方案,根据项目需求选择最合适的通信方式。
-
三元运算符要求两分支表达式类型一致,否则隐式提升可能导致精度丢失或警告;应主动控制类型一致性,如显式强制转换、统一使用包装类、提取为同类型变量,并启用编译器严格检查。