面经-钛动科技
创建线程的方式
继承Thread类: 重写
run()
方法。实现Runnable接口: 实现
run()
方法,通过Thread
类启动线程。实现Callable接口: 使用
FutureTask
来包装,支持返回值。线程池(Executors): 使用线程池创建和管理线程。
线程池的执行流程
任务提交到线程池,线程池判断:
如果线程数少于核心线程数,创建新线程。
如果核心线程满,则任务进入队列。
如果队列满,判断是否可创建非核心线程。
若线程数达最大值,执行拒绝策略。
- 线程池的拒绝策略能否自定义
- 可以自定义,需实现
RejectedExecutionHandler
接口并定义rejectedExecution()
方法。
- mysql中innodb和MyISAM区别
- InnoDB: 支持事务、外键,行级锁,支持崩溃恢复,适合高并发场景。
- MyISAM: 不支持事务和外键,表级锁,速度快,适合读密集型场景。
- mysql中索引的数据结构
B+树: 大多数索引类型使用B+树。
哈希索引: Memory引擎支持,等值查询快。
- mysql四种隔离级别
读未提交 (Read Uncommitted)
读已提交 (Read Committed)
可重复读 (Repeatable Read)
串行化 (Serializable)
- mysql脏读在哪个级别
- 读未提交允许脏读。
- mysql默认的隔离级别是什么,怎么修改
默认:可重复读。
1 | SET GLOBAL TRANSACTION ISOLATION LEVEL {LEVEL}; |
- 乐观锁和悲观锁
- 乐观锁: 基于版本号或时间戳检测冲突。
- 悲观锁: 使用锁机制,防止并发修改。
- CAS原理
- Compare-And-Swap: 比较内存中值与预期值,一致则更新,不一致则重试。
- ABA问题怎么解决
使用版本号(如
AtomicStampedReference
)区分相同值的不同状态。使用时间戳
- redis为什么快
内存存储、单线程架构、IO多路复用、数据结构优化。
- 缓存穿透和缓存击穿的解决思路和原因
穿透: 查询不存在数据,使用布隆过滤器防止。
击穿: 热点数据过期,用锁机制或预热防止。
- mysql的分库分表
- 垂直分库分表: 按业务模块拆分。
- 水平分库分表: 按数据范围拆分。
- 多线程之间怎么共享数据
- 使用共享变量(如
volatile
)、线程安全集合、锁机制(如ReentrantLock
)。
- 布隆过滤器原理
- 用多个哈希函数和位数组,检测元素是否存在,避免存储实际数据。
- redis的持久化策略,如何设置持久化策略
RDB: 定时快照。
AOF: 追加写日志。
配置
redis.conf
中save
或appendonly
。
- 避免死锁的方式
按固定顺序加锁。
使用超时机制。
避免持有锁时操作阻塞资源。
mysql主键索引树存的是什么
B+树结构,叶子节点存储主键和数据行的地址。
20.mysql有几种索引
- 主键索引、唯一索引、普通索引、组合索引。
21.一个表最多创建多少个索引
- 理论上无限制,但实际受存储引擎约束
- Callable和Runnable创建线程的区别
Runnable: 无返回值。
Callable: 支持返回值和异常处理。
- Spring AOP原理、干什么用、代理原理
- 原理:基于动态代理(JDK动态代理或CGLIB)。
- 作用:实现横切关注点(如日志、事务)。
- 代理:通过切面方法拦截。
- Spring对象生命周期
创建对象
属性注入
初始化
使用
销毁
- 索引失效原理
模糊匹配
%
在前。数据类型不一致。
使用函数或运算符。
- redis部署方式
单机、主从复制、哨兵模式、集群模式。
- 缓存三兄弟
缓存穿透、缓存击穿、缓存雪崩。
- 说一下HashMap,数据结构是怎样的,分别解释key和Value是怎么存的
- 数组+链表/红黑树
- HashMap冲突是如何解决的,从key和value的角度解释
- 链表法: 冲突时存入链表。
- 红黑树: 链表过长时转换。
- HashMap如何保证线程安全,除了synchronized有没有更好的方法
- 使用
ConcurrentHashMap
。
- Hashtable怎么实现线程安全
- 方法加锁(synchronized)。
- 介绍一下多线程,线程怎么创建,解释一下主要参数
- 核心线程数、最大线程数、队列、超时时间、拒绝策略。
- JVM内存模型
- 堆、方法区、程序计数器、本地方法栈、虚拟机栈。
- GC是怎样判断的,新生代怎么到老年代
引用计数、可达性分析。
晋升规则:年龄计数、动态年龄判断。
事务隔离级别,幻读怎么解决的
MVCC、多版本并发控制。
MySQL的锁是什么,讲一讲
行锁、表锁。
MyBatis是如何简化操作的
映射XML/注解与SQL绑定。
自动配置原理
基于
@EnableAutoConfiguration
,加载spring.factories
。jwt令牌是怎么生成的,过期时间怎么实现的
使用签名算法生成令牌,设置
exp
字段控制过期。布隆过滤器那么轻量为什么能实现这么好的效果
哈希函数和位数组避免存储实际数据。