Java高频面试考点18

千万级表深分页查询的优化方法可从技术与业务层面逐层推进。

  • 深分页问题解析:MySQL 执行 LIMIT 1000000 时,会先扫描一百万零十条数据,再丢弃前一百万条;若用 SELECT*,还会触发一百万次回表,产生海量 IO 与 CPU 开销。
  • 延迟关联优化:先通过子查询仅查主键 ID(利用覆盖索引避免回表),再用 ID 与原表关联获取完整数据,减少无用回表操作。
  • 游标分页优化:针对瀑布流场景,前端传递上一页最后一条记录的 ID,后端用 WHERE id>last_id LIMIT 10 查询,直接走 B + 树查找,时间复杂度为 O (logN)。
  • 多维度查询优化:多条件组合且需跳页的场景,将数据同步到 Elasticsearch,用 Scroll 或 Search_After 游标查询;ES 默认限制 10000 条深分页,超量会报错。
  • 业务层面优化:限制最大查询页码或要求用户输入更精确条件,从业务源头解决技术瓶颈。

技术为业务服务,从业务端优化是高级解决思路。

视频讲解了依赖外部服务时 HTTP 连接池耗尽导致接口变慢的排查与解决方法。

  • 场景案例:用户画像服务批量查询 100 个 ID,突然从 200 毫秒涨到 3 秒超时,数据库、CPU、GC 均无异常,卡在 HTTP 请求执行环节。
  • 问题根源:连接池最大为 20,同时进来 200 个请求,每个请求调用 100 次外部服务,导致连接池耗尽,请求排队等待连接。
  • 根因定位方法:用 Arthas 的 trace 命令追踪调用链,区分连接获取与请求耗时;查看 HTTP 连接池 list、pending 指标;用 jstack 看线程堆栈,大量线程卡在连接池等待方法即可确认。
  • 事前防御措施:压测模拟多路并发抢连接场景,监控连接池指标并设置告警;代码审查强制统一连接池配置,禁止每次调用新建客户端。
  • 代码层优化:合理设置连接池参数,根据业务峰值调整 max per route;使用异步 HTTP 客户端,单个连接并发处理多请求;合并外部调用,一次批量传参;配置连接、请求超时,开启空闲连接清理。

该题考查开发者对外部调用资源竞争问题的认知能力。

MySQL 中 INT (11) 的 11 并非存储位数限制,而是显示宽度。

核心错误:粉丝面试时将 INT (11) 理解为可存储 11 位整数,被面试官淘汰。

存储规则:INT 类型无论括号内数字是 4 还是 11,均占用 4 个字节,存储范围固定为负 21 亿到正 21 亿。

显示宽度作用:仅影响查询结果的显示形式,如 INT (4) 加 ZEROFILL 会显示 0022,不加则补空格。

版本变化:MySQL 8.0 开始废弃显示宽度,仅在使用 ZEROFILL 时仍有效。

视频给出了应对该问题的三句关键结论,同时提及整理的 Java 面试必考题库。

仅回答加索引的 MySQL 调优思路会被面试官直接淘汰。

调优思路:调优分为 SQL 调优和执行环节调优,需先本地用 explain 查看执行计划,再到线上看实际执行时间。

常见误区:需排除缓存干扰,MySQL8.0 前加 sql_no_cache 查看真实查询时间;explain 统计数据可能因数据变化失效,需用 analyze table 重新统计或强制走正确索引。

索引核心:覆盖索引可避免回表;联合索引需遵循最左匹配原则;索引下推能减少回表数据;写多业务用普通索引比唯一索引性能更优;长字段用前缀索引可省空间。

其他细节:MySQL 卡顿可能是刷脏页,8.0 版本 innodb_flush_neighbors 默认设为 0 适配固态硬盘。

调优核心是找瓶颈和避坑,掌握后能应对面试和实际工作。

5 年 Java 后端工程师因无法回答 Nacos 配置同步的具体机制而面试受挫。

首次拉取配置:应用启动时通过 HTTP 请求向 Nacos 服务端拉取配置,将配置缓存至本地内存以减少网络开销,同时持久化到本地磁盘,避免重启时依赖网络。

配置变更同步:客户端通过长轮询机制保持配置同步,默认等待 30 秒,期间配置变更则服务端立即返回更新,无变更则返回空响应,客户端再发起新请求。

监听器触发:客户端获取配置更新后,更新本地内存和磁盘文件,触发监听器执行自定义逻辑,如刷新属性值或重新初始化组件。

视频通过具体场景展示了 Nacos 配置同步的核心机制与面试应答要点。

面试中 "用户密码存储" 问题的回答误区与正确方案存在明确技术边界。

错误做法:视频指出直接使用 MD5、SHA1 等快哈希算法不安全,黑客可通过彩虹表快速破解;加固定盐的哈希同样存在风险,盐泄露后仍可批量破解。

正确方案:推荐使用 BCrypt、Argon2、PBKDF2 等慢哈希算法,这类算法自带随机盐、计算速度慢且可调整算力成本,能有效提升破解难度。

全链路安全:除存储外,需通过 HTTPS 传输、前后端密码复杂度校验、输错锁定、权限最小化等措施保障敏感数据安全。

视频强调 Java 生态中 Spring Security 框架已集成上述安全算法,开发者可直接使用。

相关推荐
赴生-18 分钟前
C++进阶 异常
开发语言·c++
碳基硅坊36 分钟前
Spring AI:把大模型接进 Spring 应用
java·人工智能·spring ai
黄毛火烧雪下43 分钟前
Java 核心知识点总结(一)
java·开发语言
其实防守也摸鱼1 小时前
软件安全与漏洞--软件安全编码与防御技术理论题库
开发语言·网络·安全·网络安全·软件安全·软件安全与漏洞
x138702859571 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
林希_Rachel_傻希希1 小时前
学React治好了我的焦虑症,1小时速通React 前20分钟。
前端·javascript·面试
海兰1 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
iCxhust1 小时前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
凡人叶枫1 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发