-
ThreadGroup已被弃用,因其无法保证线程归属、方法非线程安全、不参与权限控制且与现代并发工具不兼容;应使用ExecutorService进行显式生命周期管理、监控和隔离。
-
答案是开发一个基于HashMap和关键词匹配的简易Java问答系统,通过清洗输入、模糊匹配预设问题并返回答案,支持持续交互直至用户退出。
-
判断字符串为空或空白应先判null再trim().isEmpty(),或用StringUtils.isBlank()、JDK11+的isBlank();substringendIndex不包含且需满足索引范围;replace处理字面量,replaceAll处理正则;循环拼接必须用StringBuilder。
-
推荐直接使用ThreadPoolExecutor而非Executors,因其可显式配置核心线程数、最大线程数、队列容量和拒绝策略,避免newCachedThreadPool和newFixedThreadPool因无界队列导致的OOM风险。
-
ArrayList底层是Object[]数组,非链表或哈希结构;默认容量10,不自动压缩空间,扩容为1.5倍,支持null和重复元素,随机访问O(1),增删平均O(n)。
-
ArrayList随机读和批量写远快于LinkedList,因内存连续性带来CPU缓存友好;LinkedList仅在极少数频繁中间增删且无需随机访问的场景可能占优,但实际大型项目中几乎不存在。
-
Java中方法调用指令由编译期类型和修饰符决定:invokestatic用于静态绑定(static/private/构造器),invokevirtual用于虚方法调用(支持多态),invokespecial强制调用当前类版本(构造器/private/super),invokeinterface用于接口方法,invokedynamic支持动态语言和Lambda的运行时绑定。
-
List接口的replaceAll方法可用于批量修改元素,它接受UnaryOperator参数对每个元素进行转换并原地更新,适用于需直接修改可变列表的场景,但不支持Set等集合且存在线程安全和不可变集合限制,若需新列表或更高灵活性,推荐使用StreamAPI实现。
-
配置文件不存在时Properties.load()会抛IOException,应捕获FileNotFoundException走默认值,其他IOException需warn日志;getResourceAsStream()返回null须判空;@Value的默认值不适用于外部设为空串场景,推荐@ConfigurationProperties配合字段初始化。
-
this关键字用于区分成员变量与局部变量、调用本类构造方法、实现链式调用、访问外部类实例以及明确作用域;static方法中不可使用。
-
封装是通过访问修饰符控制访问权限,隐藏内部实现并暴露安全接口。核心在于合理使用private、getter/setter、不可变返回值、防御性拷贝及接口隔离,而非简单用class包裹代码。
-
设计模式的根基是OOP四大特性:封装支撑工厂模式隐藏创建细节,多态支撑策略等行为型模式实现运行时替换,继承与组合共同实现装饰器等结构型模式,抽象与开闭原则驱动架构演进。
-
-Xmx与-Xms设为相同值可减少GC频率,因避免了运行时堆内存动态扩容触发的FullGC和并发周期,同时防止元空间分配失败及启动期频繁停顿。
-
ConcurrentHashMap的get不加锁也能安全,是因为Node的val和next字段为volatile,借助JVM内存模型的happens-before保证可见性,单次读取原子且无需锁;全程仅三次内存访问,遇扩容自动查新表。
-
答案:通过数据库设计收藏表、SpringBoot实现后端接口、前端Ajax交互完成文章收藏功能,支持收藏状态查询与切换,并建议结合登录校验与Redis优化性能。