-
Java泛型具有不可变性,List<String>与List<Object>是无关类型,故不能直接赋值;读取用List<?>,写入需用List<?superT>。
-
compute是“先读再算再写”,键不存在时也调用函数;merge是“有则合并,无则插入”,键不存在时直接put新值、不调用函数。
-
答案:实现Java聊天室消息持久化需选择合适存储方案并设计高效搜索功能。采用MySQL或MongoDB存储消息数据,定义Message类并异步写入数据库,通过索引优化查询性能,结合Elasticsearch支持全文检索。
-
自定义SpringCloudGateway路由断言工厂的核心价值在于实现灵活的请求匹配规则,以应对复杂业务场景。1.它允许开发者基于业务逻辑扩展Gateway内置断言,如检查特定Header、解析JWT声明或判断地理位置等;2.实现时需继承AbstractRoutePredicateFactory并定义Config类接收配置参数;3.通过apply方法返回Predicate进行条件判断;4.可简化配置的shortcutFieldOrder方法可选但推荐;5.典型应用场景包括灰度发布、权限控制、限流熔断、多
-
JAudioTagger读取MP3ID3标签前需确认文件真实含ID3数据,优先检查是否含ID3v2、显式启用ID3v1兼容、判空Tag对象、注意帧ID大小写与编码,并验证文件格式及Java版本兼容性。
-
字符串比较必须用equals()而非==,因==仅比较内存地址,equals()才逐字符比对内容;需防范null异常,推荐字面量.equals(变量)或Objects.equals()。
-
为什么不用ScriptEngine而要手写栈解析器因为ScriptEngine会执行任意代码,线上环境禁用;而且它不透明、无法控制精度、报错信息模糊,比如输入"1+2*"只抛ScriptException,连哪一行哪个位置错都不知道。手写栈解析器能精准定位语法错误,支持自定义函数(如sin、log),还能无缝接入BigDecimal做高精度计算。中缀转后缀(ShuntingYard)必须处理的三个细节这是核心步骤,但网上多数示例漏掉关键边界:右括号')'遇到栈顶不是左
-
必须用localRepository配置本地仓库路径,它位于settings根节点下且不可被profiles或mirrors嵌套;路径推荐绝对英文路径,改后需清理\_remote.repositories文件;容灾依赖缓存和mvn-o离线模式。
-
finally块几乎总会在try或catch执行完毕后执行,用于确保资源清理;即使try中有return也会先记返回值再执行finally,但finally中return会覆盖原返回值;System.exit等极少数情况会导致finally不执行。
-
Java中Queue接口适用于FIFO场景,核心价值是解耦生产消费、缓冲流量、协调异步任务;典型应用包括任务调度(如ThreadPoolExecutor的阻塞队列)、消息本地缓冲(ArrayDeque或ConcurrentLinkedQueue)、BFS遍历(推荐ArrayDeque)及请求限流(有界阻塞队列)。
-
G1中不存在“UpdateLogBuffer”标准术语,实指DirtyCardQueue;其压力需通过UpdateRS耗时、ProcessedBuffers数量及ExtRootScanning异常等间接指标判断,而非日志直接输出。
-
灰度发布在Java项目中核心是“按条件路由流量”,通过配置中心驱动的动态开关和规则引擎实现运行时控制,支持用户ID哈希、请求头标识等路由策略,并在网关或RPC层统一拦截,配套日志打标、全链路追踪与快速回滚机制。
-
Stream.filter()未生效主因是Predicate未返回boolean:常见错误包括执行副作用操作、返回非boolean类型、忽略null检查;正确做法是仅用其判断,副作用用peek(),空值需显式处理。
-
必须用localRepository配置本地仓库路径,它位于settings根节点下且不可被profiles或mirrors嵌套;路径推荐绝对英文路径,改后需清理\_remote.repositories文件;容灾依赖缓存和mvn-o离线模式。
-
变量遮蔽指内部作用域同名变量覆盖外层变量,导致外层不可见;如局部变量遮蔽实例变量、参数遮蔽字段、子类静态变量隐藏父类变量等;常见于方法内定义同名变量或构造函数参数未用this赋值;Java按词法作用域就近查找变量,内层变量优先;可通过this明确访问实例变量、避免同名命名、启用编译器警告来规避;正确使用可减少歧义,提升代码清晰度。