2026-10-30 13:40:06
答案核心:面完秒变业务复试大概率是初面通过,二面邮件发送时间因公司流程而异,通常在3-7个工作日内;面经涉及技术点涵盖数据库、Java、框架、分布式组件、算法等,需重点准备项目细节与底层原理。
一、关于面试结果与二面通知客户端发送请求至Coordinating Node,该节点解析请求并路由到相关分片(Primary或Replica)。
Data Node执行查询(如Term Query、Match Query等),返回结果至Coordinating Node合并排序后响应客户端。
存储空间:int(4字节,范围-2^31~2^31-1)、long(8字节,范围-2^63~2^63-1)。
使用场景:int适用于范围较小的整数(如年龄),long用于大范围数据(如ID、时间戳)。
B+树是多路平衡搜索树,非叶子节点仅存储键值,数据全部存储在叶子节点并通过链表连接。
每次磁盘IO可加载一个节点(如16KB),B+树高度通常为3-4层,显著减少查询时的磁盘访问次数。
若查询条件仅涉及二级索引列,且需获取主键外的其他字段,则需一次回表(通过主键索引查询完整数据)。
若二级索引已覆盖查询字段(覆盖索引),则无需回表。
MVCC原理:通过ReadView(事务ID列表)和undo日志实现多版本并发控制,读操作读取已提交的快照数据。
幻读未解决原因:MVCC解决的是不可重复读(同一事务内多次读取结果一致),而幻读(其他事务插入新数据)需通过间隙锁(Gap Lock)在RR隔离级别下解决。
最终一致性:通过消息队列(如RabbitMQ)异步更新数据库与缓存。
强一致性:采用双写模式(先更新数据库再删除缓存)或CANAL监听Binlog同步。
主从模式:主节点写,从节点读,通过全量同步+增量同步保持数据一致。
非主从模式:如Redis Cluster(分片集群),通过哈希槽(Hash Slot)分配数据,支持水平扩展。
特点:自平衡二叉搜索树,通过旋转和变色操作保持近似平衡,确保最坏情况下操作时间复杂度为O(log n)。
Java应用:TreeMap的底层实现。
常量:存储在方法区(常量池)。
方法:存储在方法区(类信息)。
对象:存储在堆内存,引用存储在栈帧的局部变量表。
标记-清除算法:标记无用对象后直接清除,产生内存碎片。
标记-整理算法:标记后压缩内存,解决碎片问题。
分代收集:新生代(复制算法)、老年代(标记-清除/整理)。
SpringBoot:快速构建独立应用的框架,核心是自动配置(@EnableAutoConfiguration)和起步依赖(Starter)。
SpringCloud:分布式系统解决方案,基于SpringBoot提供服务治理(Eureka)、配置中心(Config)、熔断器(Hystrix)等组件。
初始化SpringApplication实例 → 运行run()方法 → 准备环境(Environment) → 创建应用上下文(ApplicationContext) → 刷新上下文(调用refresh()) → 发布事件 → 返回上下文。
通过动态代理(JDK动态代理或CGLIB)生成代理对象 → 拦截方法调用 → 执行切面逻辑(如日志、事务) → 调用目标方法。
静态代理:代理类在编译期确定,需手动编写代理类。
动态代理:代理类在运行时生成(如JDK动态代理基于接口,CGLIB基于继承)。
内嵌Tomcat:SpringBoot默认集成,轻量级,适合快速开发和微服务部署。
独立Tomcat:需手动部署WAR包,适合传统企业级应用。
核心参数:核心线程数(corePoolSize)、最大线程数(maximumPoolSize)、空闲线程存活时间(keepAliveTime)、任务队列(workQueue)、线程工厂(ThreadFactory)、拒绝策略(RejectedExecutionHandler)。
拒绝策略:AbortPolicy(抛异常)、CallerRunsPolicy(调用者执行)、DiscardPolicy(丢弃任务)、DiscardOldestPolicy(丢弃队列最旧任务)。
Thread是线程类,Runnable是任务接口;Thread实现Runnable接口,通过继承可扩展线程功能,但Java不支持多继承,故推荐实现Runnable接口。
Synchronized:JVM层面实现,代码简洁,但功能有限(如不可中断、不可超时)。
ReentrantLock:API层面实现,支持公平锁、可中断、超时等待等高级功能。
交换机类型:Direct(精确匹配)、Topic(通配符匹配)、Fanout(广播)。
队列数量:根据业务需求设计,如订单系统可按订单类型划分队列。
Git常用指令:clone、pull、commit、push、branch、merge。
Docker部署指令:docker build(构建镜像)、docker run(运行容器)、docker-compose up(启动多容器应用)。
选择排序:每次选择未排序部分的最小元素,时间复杂度O(n2)。
插入排序:将未排序元素插入已排序部分的正确位置,时间复杂度O(n2)(最优O(n))。
快速排序:通过分治思想选择基准值(pivot)划分数组,平均时间复杂度O(n log n)。
复盘项目细节,尤其是高并发、性能优化、故障排查等场景。
深入理解底层原理(如JVM、MySQL锁、分布式事务)。
练习手写代码(如线程池、单例模式、LRU缓存)。