本文围绕面试常见的高级算法问题提供概念与实现要点。首先阐述LRU(最近最少使用)缓存的原理:依据局部性原理,淘汰最近最久未被访问的页面,核心操作为 get(key) 与 put(key,value),实现简单但命中率受批量访问影响。随后简要说明逆波兰(后缀)表达式无需括号的优势、基于 MD5 的 URL 短链生成思路、以及 SnowFlake 分布式全局唯一自增 ID 的 64 位结构与优缺点。最后给出 LFU(最不常用)缓存的 O(1) 设计思路,使用双向链表按访问频率分层并配合哈希表实现快速 get 与 put。整体呈现了几类典型缓存与分布式 ID 算法的核心概念、实现关键及适用场景。

本文系统阐述了面向对象设计的六大原则——单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则和开闭原则,重点说明开闭原则对复用、维护、灵活性和测试的价值。随后给出饿汉式、懒汉式及线程安全的单例实现示例,并详细解析工厂模式的三种形式(简单工厂、工厂方法、抽象工厂)的设计思路与代码示例。

本文围绕移动互联网常见的高并发业务场景展开,分别阐述了微信红包的实时金额计算、缓存防刷与原子递减实现抢完判定;秒杀系统需防止超卖、限流、动态URL、Redis预减库存、异步下单及服务降级等关键技术;扫码登录过程分为生成二维码、移动端扫码确认、PC端轮询获取一次性 token 并完成登录;单点登录(SSO)通过认证中心颁发令牌实现全局会话与局部会话的统一登录与统一注销;本地缓存设计关注数据结构、容量上限、LRU/FIFO 等淘汰策略、过期时间及线程安全等要点。

UML提供多种图形化符号描述系统的静态和动态结构,包括用例图、类图、时序图、协作图、状态图、活动图、构件图、部署图等。其中,用例图用于捕获需求、展示功能模块及其关系;类图描述类及类间关联,帮助快速了解系统结构;时序图展示对象间交互及执行顺序,体现对象可提供的服务。这三图是UML中最核心的。

在海量(数十亿)数据场景下提升 Elasticsearch 查询效率的关键在于充分利用 OS 文件系统缓存。首先为机器配置足够内存,使所有索引段文件能够驻留在缓存中,实现几乎全内存查询。其次只在 ES 中保存用于检索的关键字段,将其余数据迁移至 MySQL、HBase 等存储,降低索引体积。针对热点数据可通过后台访问预热,将常用数据保持在缓存;对访问频率低的冷数据单独建立索引并部署在不同节点,实现冷热分离。文档模型应尽量去关联化、去正则化,避免使用 join、nested、parent‑child 等高开销特性。分页时禁用深度分页,改用 scroll 或 search_after 逐页遍历。综合以上措施,可在数十亿级别数据量下显著提升 ES 查询性能。

Integer 与 Double 不能直接用 `==`、字符串或 `compareTo` 比较,因为类型不同且 `compareTo` 仅限同类。两者都继承自 `Number`,可通过其提供的 `doubleValue()`(或其他基本类型转换)将数值统一为同一原始类型,再使用 `==` 判断相等。例如:`Integer i = 100; Double d = 100.00; System.out.println(i.doubleValue() == d.doubleValue());` 这种方式即可正确比较。