3.21美团暑期一面全解析:拷打原理真的难
原文:
- 线程池的参数和执行过程
- Excetors工具类提供了哪些线程池?有什么问题吗?(线程池名字不记得,只说了问题) ❌
- 实习项目kafka为什么会报错?为什么要再写入一条kafka?
- 说说缓存一致性,业界常用解决方案是什么?
- 分布式读写为什么要用?
- redis去实现一个悲观锁怎么做的?怎么保证实现的原子性?
- 分布式锁会不会把其他加的锁给释放掉?怎么解决呢?
- 看门狗机制
- redis持久化原理 (挺久没看这块了,说得有点不清楚)❌
- redis崩溃恢复优先用哪个日志?
- 依赖注入的原理 (没有说清楚)❌
- bean的生命周期,就是refresh方法那块 (早忘了,说的面试官有点绷不住了)❌
- 怎么解决循环依赖的
- 可以只有两级缓存吗?
- 数据库隔离级别,以及每个级别解决的问题 (隔离级别说了,解决的问题也说了,后来问我脏读不可重复读幻读的定义,这没背,现场说的混了,面试官再次绷不住)❌
- 索引叶子节点存储的是什么?
概答:
- 线程池参数:核心线程数、最大线程数、任务队列、线程工厂、拒绝策略。执行过程:提交任务 -> 任务队列 -> 核心线程执行 -> 核心线程满 -> 最大线程执行 -> 线程池满 -> 拒绝策略。
- 线程池的参数和执行过程已在第1点回答。
- Executors工具类提供了以下线程池:newFixedThreadPool:固定大小的线程池,可控制线程最大并发数,超出的线程会在队列中等待。newCachedThreadPool:可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newSingleThreadExecutor:单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序执行。newScheduledThreadPool:定调度线程池,支持定时及周期性任务执行。 问题:线程池名字不记得,只说了问题。
- 实习项目中Kafka报错可能是由于配置错误、网络问题、消息格式错误等原因导致的。为了解决这个问题,可以查看Kafka的日志,分析错误原因,并进行相应的调整。如果错误仍然存在,可以考虑重新写入一条Kafka消息,以确保数据的完整性。
- 缓存一致性是指多个缓存节点在同一时刻数据保持一致。业界常用的解决方案有:强一致性、弱一致性、最终一致性。
- 分布式读写锁用于在分布式系统中保证数据的一致性。当多个节点需要访问共享资源时,可以使用分布式读写锁来确保数据的一致性和可用性。
- Redis实现悲观锁的方法是使用SETNX命令。SETNX命令可以原子性地设置一个key的值,如果key不存在,则设置成功,返回1;如果key已经存在,则设置失败,返回0。通过SETNX命令,可以实现悲观锁的加锁和解锁操作。
- 分布式锁可能会导致其他加锁的线程被释放。为了解决这个问题,可以使用锁超时机制。当一个线程获取锁后,会设置一个超时时间。如果在超时时间内没有释放锁,其他线程可以强制释放锁,以确保锁的可用性。
- 看门狗机制是一种监控系统的方法,用于检测系统是否处于正常运行状态。当系统出现异常时,看门狗会自动重启系统,以恢复正常运行。
- Redis持久化原理包括RDB和AOF两种方式。RDB是将内存中的数据以快照的形式保存到磁盘中,而AOF是将所有的写操作命令记录到日志文件中。
- Redis崩溃恢复时,优先使用AOF日志进行恢复。因为AOF日志记录了所有的写操作命令,数据更加完整和一致。
- 依赖注入的原理是通过IoC容器来管理对象的生命周期和依赖关系。IoC容器负责创建对象、注入依赖关系,并管理对象的生命周期。
- Bean的生命周期包括实例化、属性填充、初始化、销毁等阶段。在Spring中,可以通过实现InitializingBean接口和DisposableBean接口来实现Bean的初始化和销毁操作。
- 怎么解决循环依赖的问题?
- 可以只有两级缓存吗?
- 数据库隔离级别包括:读未提交、读已提交、可重复读、串行化。每个级别解决的问题:脏读、不可重复读、幻读。
- 索引叶子节点存储的是数据行的指针或实际数据。
传送门:原文传送门
#美团##面经##后端##春招##实习#大厂校招实习最新面经解析 文章被收录于专栏
专注于最新各大厂最新面筋解析