【无标题】
常见的垃圾收集器有哪些?如何选择?
Serial/ParNew(年轻代,单线程/多线程);Parallel Scavenge + Parallel Old(吞吐量优先);CMS(低延迟,已废弃);G1(分区、可预测停顿,JDK9+默认);ZGC/Shenandoah(超低暂停,TB级堆)。选择依据:吞吐量优先选Parallel,低延迟选G1或ZGC。
如何排查CPU占用过高或线程死锁?
top定位Java进程,top -Hp pid定位线程。
jstack pid获取线程快照,分析线程状态(RUNNABLE, BLOCKED, WAITING)。
查找死锁:jstack输出中搜索deadlock,或使用jconsole可视化工具。
类加载的过程是怎样的?
加载(Loading)→ 验证(Verification)→ 准备(Preparation)→ 解析(Resolution)→ 初始化(Initialization)→ 使用 → 卸载。
如何理解JVM内存模型(JMM)?
定义了线程工作内存和主内存的交互规则,核心是原子性、可见性、有序性。volatile保证可见性与有序性(内存屏障),synchronized和Lock保证三者。
有哪些常见的JVM性能调优参数?
-Xms/-Xmx(堆初始/最大大小);-Xmn(新生代大小);-XX:SurvivorRatio(Eden/Survivor比例);-XX:+UseG1GC(指定收集器);-XX:+HeapDumpOnOutOfMemoryError(OOM时转储堆快照)。
并发编程高级考点
volatile关键字解决了什么问题?底层如何实现?
解决可见性和禁止指令重排序。底层通过内存屏障(Memory Barrier)实现,写操作后插入Store屏障,读操作前插入Load屏障。
ThreadLocal的原理是什么?为什么会内存泄漏?
每个Thread内部有ThreadLocalMap,以ThreadLocal为键存储值。泄漏原因:ThreadLocal对象被回收后,Map中Entry的键为null,但值仍被强引用。必须调用remove()。
AQS(AbstractQueuedSynchronizer)的原理是什么?
是ReentrantLock、CountDownLatch等同步器的基础。核心是一个volatile int state(状态)和一个CLH双向队列。通过CAS修改state,失败则线程入队阻塞。
ConcurrentHashMap如何保证线程安全?
JDK7:分段锁(Segment)。JDK8:synchronized锁链表/红黑树头节点 + CAS(putVal时)。粒度更细,并发度更高。
CompletableFuture的核心优势是什么?
组合式异步编程。可方便地进行任务链式调用(thenApply)、组合(thenCompose)、合并(thenCombine)、以及异常处理(exceptionally),避免“回调地狱”。
Spring框架深入
Spring如何解决循环依赖?
通过三级缓存。一级缓存(单例池)、二级缓存(早期暴露对象)、三级缓存(ObjectFactory)。构造器注入无法解决循环依赖,需用Setter/字段注入。
Spring事务的传播机制有哪些?常用的是哪几种?
REQUIRED(默认,有则加入,无则新建)、REQUIRES_NEW(新建事务,挂起当前)、NESTED(嵌套事务)、SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER。常用REQUIRED和REQUIRES_NEW。
Spring Boot自动配置的原理是什么?
核心是@SpringBootApplication中的@EnableAutoConfiguration。它通过spring.factories文件加载自动配置类(XXXAutoConfiguration),这些类使用@ConditionalOnXxx条件装配Bean。
Spring中Bean是线程安全的吗?
默认单例Bean是非线程安全的,因其成员变量是共享状态。可通过:1. 设置作用域为prototype;2. 使用ThreadLocal;3. 避免在Bean中定义可变成员变量。
Spring MVC中@Autowired和@Resource的区别?
@Autowired按类型注入,是Spring注解,结合@Qualifier可按名称。@Resource按名称注入,是JSR-250标准注解,默认按字段名/name属性匹配。
数据库与SQL优化
数据库索引的原理是什么?什么情况下会失效?
原理:B+树(InnoDB),加速检索。失效场景:对索引列进行计算/函数操作、使用!=或<>、like以%开头、类型转换、最左前缀原则不满足、or条件有一边无索引。
什么是覆盖索引?有什么好处?
查询的列均包含在索引中,无需回表。好处:减少IO,提升查询速度。EXPLAIN的Extra列会显示Using index。
数据库三大范式是什么?
一范式(1NF):列不可再分。二范式(2NF):非主属性完全依赖主键(消除部分依赖)。三范式(3NF):非主属性不传递依赖主键(消除传递依赖)。反范式设计常用于性能优化。
MySQL的InnoDB和MyISAM的区别?
InnoDB:支持事务、行锁、外键、聚簇索引(数据和索引一起),适合写多、高并发。MyISAM:不支持事务、表锁、非聚簇索引,适合读多、低并发。
如何做SQL优化?
-
EXPLAIN分析执行计划。 -
建立合适索引,避免失效。
-
避免
SELECT *,用覆盖索引。 -
优化分页:大偏移量时用
id > last_max_id LIMIT n。 -
小表驱动大表(
IN子查询时,外层小表;EXISTS时,内层小表)。 -
用连接(JOIN)代替子查询。
分布式与微服务基础
CAP理论是什么?
分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三者不可兼得。CP(如ZooKeeper)、AP(如Eureka)、CA(单机系统)。网络分区P一定存在,因此通常在CP和AP间权衡。
BASE理论是什么?
基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventually Consistent)。是对CAP中AP方案的延伸,通过牺牲强一致性保证高可用。
微服务网关(如Gateway)的作用是什么?
路由转发、负载均衡、统一鉴权、限流熔断、日志监控。是系统的统一入口。
服务熔断和降级的区别?
熔断(Circuit Breaking):调用链中下游服务故障,快速失败,防止雪崩(如Hystrix、Sentinel)。降级(Fallback):自身服务在高峰期主动关闭非核心功能,保证核心功能可用。
Spring Cloud和Dubbo的核心区别?
Spring Cloud:一站式微服务生态(Netflix系、Alibaba系),基于HTTP(REST),功能全面(配置、网关、链路追踪)。Dubbo:高性能RPC框架,基于TCP,性能更高,但生态组件需整合。
缓存与消息队列
Redis为什么快?
-
内存操作。2. 单线程避免上下文切换(6.0后多线程仅处理网络IO)。3. 高效数据结构(SDS、跳表、哈希表)。4. I/O多路复用。
缓存穿透、击穿、雪崩的区别及解决方案?
穿透:查询不存在的数据。解决:布隆过滤器、缓存空值。
击穿:热点key过期瞬间大量请求直达DB。解决:互斥锁、永不过期(逻辑过期)。
雪崩:大量key同时过期。解决:随机过期时间、集群部署、永不过期。
如何保证Redis与数据库的数据一致性?
无完美方案。常用策略:1. 先更新数据库,再删缓存(Cache-Aside)。2. 延时双删。3. 用消息队列保证最终一致性。强一致性需用分布式锁,性能差。
消息队列(如Kafka/RocketMQ)的作用?
解耦、异步、削峰填谷。Kafka:高吞吐、日志场景。RocketMQ:金融级、顺序/事务消息。
如何保证消息不被重复消费(幂等性)?
利用数据库主键/唯一键约束。
生产者加全局唯一ID(消息ID),消费者端用Redis Set记录已处理ID。
业务状态机,判断状态是否已更新。
系统设计与场景题
如何设计一个短链系统?
发号器:用雪花算法或自增ID生成唯一ID。
长短链映射:将10进制ID转为62进制字符串作为短码(如sina.lt/abc123)。
存储:KV数据库(Redis)存短码->长链,关系数据库持久化。
跳转:HTTP 302重定向。
高并发:发号器用分布式ID,数据库分库分表,Redis集群缓存热点。
如何设计一个抢红包系统?
预分配:创建红包时,用算法(如二倍均值法)提前拆好金额存入Redis。
原子操作:用户抢时,用lpop从红包金额列表弹出,保证原子性。
防超抢:校验用户是否已抢过(Redis Set记录)。
异步入账:抢到后发消息到MQ,异步更新用户余额,保证最终一致性。
如何实现扫码登录?
Web端轮询状态:用户打开网页,生成唯一二维码(携带临时Token),并轮询后端状态。
App端确认:手机App扫码,获取Token,并调用后端确认登录接口。
状态变更:后端将Token状态改为“已确认”,并绑定用户身份信息
登录成功:Web端轮询到状态变更,获取用户信息,完成登录

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)