面经-钛动科技

yql
  1. 创建线程的方式

    继承Thread类: 重写run()方法。

    实现Runnable接口: 实现run()方法,通过Thread类启动线程。

    实现Callable接口: 使用FutureTask来包装,支持返回值。

    线程池(Executors): 使用线程池创建和管理线程。

  2. 线程池的执行流程

​ 任务提交到线程池,线程池判断:

  • 如果线程数少于核心线程数,创建新线程。

  • 如果核心线程满,则任务进入队列。

  • 如果队列满,判断是否可创建非核心线程。

  • 若线程数达最大值,执行拒绝策略。

  1. 线程池的拒绝策略能否自定义
  • 可以自定义,需实现RejectedExecutionHandler接口并定义rejectedExecution()方法。
  1. mysql中innodb和MyISAM区别
  • InnoDB: 支持事务、外键,行级锁,支持崩溃恢复,适合高并发场景。
  • MyISAM: 不支持事务和外键,表级锁,速度快,适合读密集型场景。
  1. mysql中索引的数据结构
  • B+树: 大多数索引类型使用B+树。

  • 哈希索引: Memory引擎支持,等值查询快。

  1. mysql四种隔离级别
  • 读未提交 (Read Uncommitted)

  • 读已提交 (Read Committed)

  • 可重复读 (Repeatable Read)

  • 串行化 (Serializable)

  1. mysql脏读在哪个级别
  • 读未提交允许脏读。
  1. mysql默认的隔离级别是什么,怎么修改

默认:可重复读

1
2
3
SET GLOBAL TRANSACTION ISOLATION LEVEL {LEVEL};
SET SESSION TRANSACTION ISOLATION LEVEL {LEVEL};

  1. 乐观锁和悲观锁
  • 乐观锁: 基于版本号或时间戳检测冲突。
  • 悲观锁: 使用锁机制,防止并发修改。
  1. CAS原理
  • Compare-And-Swap: 比较内存中值与预期值,一致则更新,不一致则重试。
  1. ABA问题怎么解决
  • 使用版本号(如AtomicStampedReference)区分相同值的不同状态。

  • 使用时间戳

    1. redis为什么快
  • 内存存储、单线程架构、IO多路复用、数据结构优化。

  1. 缓存穿透和缓存击穿的解决思路和原因
  • 穿透: 查询不存在数据,使用布隆过滤器防止。

  • 击穿: 热点数据过期,用锁机制或预热防止。

  1. mysql的分库分表
  • 垂直分库分表: 按业务模块拆分。
  • 水平分库分表: 按数据范围拆分。
  1. 多线程之间怎么共享数据
  • 使用共享变量(如volatile)、线程安全集合、锁机制(如ReentrantLock)。
  1. 布隆过滤器原理
  • 用多个哈希函数和位数组,检测元素是否存在,避免存储实际数据。
  1. redis的持久化策略,如何设置持久化策略
  • RDB: 定时快照。

  • AOF: 追加写日志。

  • 配置redis.confsaveappendonly

  1. 避免死锁的方式
  • 按固定顺序加锁。

  • 使用超时机制。

  • 避免持有锁时操作阻塞资源。

  1. mysql主键索引树存的是什么

    B+树结构,叶子节点存储主键和数据行的地址。

20.mysql有几种索引

  • 主键索引、唯一索引、普通索引、组合索引。

21.一个表最多创建多少个索引

  • 理论上无限制,但实际受存储引擎约束
  1. Callable和Runnable创建线程的区别
  • Runnable: 无返回值。

  • Callable: 支持返回值和异常处理。

  1. Spring AOP原理、干什么用、代理原理
  • 原理:基于动态代理(JDK动态代理或CGLIB)。
  • 作用:实现横切关注点(如日志、事务)。
  • 代理:通过切面方法拦截。
  1. Spring对象生命周期
  • 创建对象

  • 属性注入

  • 初始化

  • 使用

  • 销毁

  1. 索引失效原理
  • 模糊匹配%在前。

  • 数据类型不一致。

  • 使用函数或运算符。

  1. redis部署方式

单机、主从复制、哨兵模式、集群模式。

  1. 缓存三兄弟

缓存穿透、缓存击穿、缓存雪崩。

  1. 说一下HashMap,数据结构是怎样的,分别解释key和Value是怎么存的
  • 数组+链表/红黑树
  1. HashMap冲突是如何解决的,从key和value的角度解释
  • 链表法: 冲突时存入链表。
  • 红黑树: 链表过长时转换。
  1. HashMap如何保证线程安全,除了synchronized有没有更好的方法
  • 使用ConcurrentHashMap
  1. Hashtable怎么实现线程安全
  • 方法加锁(synchronized)。
  1. 介绍一下多线程,线程怎么创建,解释一下主要参数
  • 核心线程数、最大线程数、队列、超时时间、拒绝策略。
  1. JVM内存模型
  • 堆、方法区、程序计数器、本地方法栈、虚拟机栈。
  1. GC是怎样判断的,新生代怎么到老年代
  • 引用计数、可达性分析。

  • 晋升规则:年龄计数、动态年龄判断。

  1. 事务隔离级别,幻读怎么解决的

    MVCC、多版本并发控制。

  2. MySQL的锁是什么,讲一讲

    行锁、表锁

  3. MyBatis是如何简化操作的

    映射XML/注解与SQL绑定。

  4. 自动配置原理

    基于@EnableAutoConfiguration,加载spring.factories

  5. jwt令牌是怎么生成的,过期时间怎么实现的

    使用签名算法生成令牌,设置exp字段控制过期。

  6. 布隆过滤器那么轻量为什么能实现这么好的效果

    哈希函数和位数组避免存储实际数据。

Comments