-
接口隔离原则(ISP)要求每个接口仅暴露调用方真正需要的方法,避免UnsupportedOperationException、null返回或空方法体;识别臃肿接口的信号包括:实现类超1/3方法抛异常、多服务共用但调用方法几乎无重叠、“Methodisneverused”警告超40%、单元测试需stub十余方法仅验2–3个。
-
CompressedClassSpace是JVM中专用于存储压缩Klass指针的固定大小内存区域(默认1G),与Metaspace分离;其OOM表明该区域耗尽,常见于动态代理频繁、类加载器泄漏场景。
-
单线程场景应优先选TreeMap,ConcurrentSkipListMap因并发设计导致构造重、插入慢20%~30%、size()为O(logn)遍历操作;多线程高频写+排序需求时才适用后者。
-
这是换行符残留问题:nextInt()不读取换行符,导致nextLine()立即返回空字符串;正确做法是调用scanner.nextLine()手动清除残留换行符。
-
HashMap<String,Integer>最适合简易库存管理:键为商品ID,值为库存量;需校验ID合法性、拦截负库存、判空防NPE,并可用LinkedHashMap保持录入顺序。
-
编译期类型检查是Java编译器的硬性拦截机制,而非提醒或警告;它在泛型擦除前基于显式或推导类型执行静态验证,违规即报错中断编译,确保类型安全始于源头。
-
答案:开发Java记账工具需实现数据录入、存储、统计与展示,核心功能包括添加记录、查看账目、分类统计、月度汇总及文件持久化。设计AccountRecord、AccountService和FileUtil类,分别处理数据模型、业务逻辑与文件读写。使用CSV格式保存数据,通过Scanner实现命令行交互,遍历记录并按年月过滤实现月度统计,结合集合操作与异常处理完成完整流程。
-
线程安全需精准识别共享数据并合理同步,锁粒度要细、顺序要固定、生命周期要匹配,死锁是设计缺陷而非偶然,detach线程易致资源泄漏。
-
答案:Java中通过正则表达式验证邮箱和手机号,邮箱格式为用户名@域名.后缀,使用正则^[a-zA-Z0-9.\_%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$,手机号为中国大陆11位数字且以1开头、第二位为3-9,使用正则^1\[3-9\]\\\\d{9}$,分别在工具类中实现isEmail和isPhone方法进行校验。
-
Float.parseFloat可直接解析带科学计数法的字符串,如"1.23e4"、"-5.6E-2"等,支持大小写e/E、正负指数、前后空格,但超出float范围(如"1e100")或格式错误会抛NumberFormatException。
-
是,finally块总在return后执行;若其内有return,则覆盖try/catch的返回值;它是可靠资源释放位置,但需判空防NPE;try-with-resources更安全,但不能替代所有finally场景;finally抛异常会掩盖原异常。
-
Java的Math类是静态工具类,提供高精度、线程安全的数学运算方法,涵盖绝对值、四舍五入、取整、幂运算、三角函数、常量及随机数等,使用时需注意参数单位、定义域及返回类型等细节。
-
Collections.nCopies()返回只读视图,底层共享引用,适用于不可变类型或只读场景;若需独立可变对象,应使用Stream.generate()或循环构造。
-
答案:该报修系统包含用户、设备和报修单三个类,通过控制台实现报修登记、查看未处理请求及标记为已处理功能,体现Java多对象关系建模与基本业务逻辑处理。
-
StampedLock的乐观读仅适用于极短路径的轻量字段访问,滥用忙等循环会导致CPU100%;一旦涉及方法调用、集合操作或写入频繁,validate失败率高,fallback开销反而更大,应降级为readLock()。