11.27字节番茄小说后端实习OC面经

embedded/2024/11/28 7:22:09/

本帖暂时只介绍部分面试题及解析

1.介绍一下bean流程

面试题其实就是考察spring的基础,鉴于是字节,所以还是答得详细一点比较好

Bean的启动流程是Spring框架中的核心机制之一,它基于依赖注入(Dependency Injection)和控制反转(Inversion of Control)的原则,实现了对象实例的创建、配置、装配及生命周期管理。以下是Bean启动流程的详细介绍,字数控制在1000字左右:

一、容器启动阶段

在Spring框架中,Bean的启动流程始于容器的启动。容器启动阶段主要完成以下任务:

  1. 加载配置元信息:Spring容器需要从各种配置源(如XML文件、注解、Java配置类等)中加载Bean的定义信息。这些信息描述了Bean的类型、属性、依赖关系等。
  2. 创建BeanDefinition:配置元信息被加载到内存后,Spring将其转换为BeanDefinition对象。BeanDefinition是Spring内部表示Bean定义的一种数据结构,它包含了Bean的所有必要信息。
  3. 注册BeanDefinition:BeanDefinition被创建后,需要被注册到BeanDefinitionRegistry中。BeanDefinitionRegistry是一个存放BeanDefinition的容器,它提供了一种通过Bean名称查找BeanDefinition的机制。
  4. 处理BeanFactoryPostProcessor:在BeanDefinition注册完成后,Spring容器会调用所有注册的BeanFactoryPostProcessor。这些处理器允许对BeanDefinition进行进一步的修改和替换,为后续的Bean实例化做准备。

二、Bean实例化与初始化阶段

在容器启动阶段完成后,Spring容器开始根据BeanDefinition实例化Bean,并进行初始化。

  1. 实例化Bean:Spring容器通过Bean的构造方法或工厂方法创建Bean的实例。在实例化过程中,Spring会考虑Bean的作用域(如单例、原型等)和生命周期策略。
  2. 属性填充:Bean实例化后,Spring会根据BeanDefinition中的属性信息,为Bean填充属性值。这些属性值可能来自配置文件、注解或其他Bean的引用。
  3. 依赖注入:属性填充的过程中,Spring会处理Bean之间的依赖关系,通过依赖注入的方式将依赖的Bean注入到当前Bean中。这实现了Bean之间的松耦合和高度内聚。
  4. 初始化Bean:在Bean的属性填充和依赖注入完成后,Spring会调用Bean的初始化方法(如init-method、@PostConstruct注解的方法等),执行一些自定义的初始化逻辑。此外,Spring还会调用所有注册的BeanPostProcessor的postProcessBeforeInitialization和postProcessAfterInitialization方法,允许在这些时间点对Bean进行额外的处理。
  5. Bean准备就绪:经过上述步骤后,Bean已经完成了实例化、属性填充、依赖注入和初始化等过程,现在已经准备就绪,可以被应用程序使用了。

三、总结

Bean的启动流程是Spring框架实现依赖注入和控制反转的关键机制之一。它分为容器启动阶段和Bean实例化与初始化阶段。在容器启动阶段,Spring加载配置元信息、创建BeanDefinition、注册BeanDefinition并处理BeanFactoryPostProcessor。在Bean实例化与初始化阶段,Spring实例化Bean、填充属性、处理依赖注入、执行初始化方法并调用BeanPostProcessor。这个流程确保了Bean能够按照预期的方式被创建、配置和装配,为应用程序的运行提供了坚实的支持。

2.了解redis的哨兵机制吗

这个也是redis基础八股,还是介绍一下原理,大家可以理解整合当作面试时的答案

一、大体原理

Redis哨兵机制是一种用于监控Redis主从架构中的主节点和从节点健康状况,并在主节点出现故障时自动进行故障转移,从而确保Redis服务持续可用的系统。它提供了监控、通知、故障转移和配置管理等核心功能。

二、核心组件与功能

  1. 哨兵实例(Sentinels)
    • 哨兵是由多个独立运行的Sentinel进程组成的集群。
    • 每个哨兵都会定期向Redis主节点和从节点发送心跳信号(通常是PING命令),以监控它们的健康状况。
  2. 故障检测
    • 哨兵通过定期发送PING命令给Redis服务器来检测其是否存活。
    • 若发现某个主节点不再响应,哨兵会发起投票机制,判断该主节点是否确实进入主观下线状态(SDOWN),进而判定其是否进入客观下线状态(ODOWN)。
  3. 故障转移
    • 一旦确认主节点失效,哨兵将自动执行故障转移。
    • 从现有的从节点中挑选一个升级为新的主节点,并重新配置其他从节点以同步新的主节点。
  4. 通知系统
    • 哨兵还可以配置外部的通知系统,以便在检测到问题或成功执行完故障转移后发送警报或通知给运维人员。
  5. 配置管理
    • 哨兵充当了一个动态的配置中心角色,它可以自动更新Redis客户端指向的新主节点地址,确保服务不中断。

三、工作原理

  1. 监控
    • 每个哨兵进程会定期通过PING命令检查主节点和从节点的状态。
    • 如果哨兵发现某个节点不可用,它会将其标记为下线状态。
  2. 故障转移
    • 当多个哨兵实例确认某个主节点无法访问时,它们会开始进行故障转移过程。
    • 通过选举机制(如Raft算法),选举出一个新的主节点,并将它的一些从节点切换为新的主节点的从节点。
  3. 通知
    • 当Redis实例的状态发生变化时,哨兵可以通过通知机制将故障或恢复信息发送给管理员或其他系统。
  4. 配置管理
    • 客户端可以通过哨兵获取当前主节点的地址。
    • 当故障转移发生时,客户端可以通过哨兵重新获取新的主节点地址,确保客户端始终连接到当前可用的主节点。

四、配置与使用

Redis哨兵的配置文件通常是sentinel.conf,每个Redis哨兵实例都需要独立的配置文件。配置内容可能包括监控的主节点信息、故障转移的超时时间、哨兵通知管理员的方式等。

启动Redis哨兵非常简单,可以使用redis-sentinel命令并指定配置文件路径来启动一个哨兵实例

3.了解undolog,redolog,binlog的提交时机吗

明天会出一篇文章详细undolog,redolog,binlog

在MySQL数据库中,binlog(二进制日志)、redolog(重做日志)和undolog(撤销日志)的写盘时机是数据库事务处理中的关键环节,它们各自承担着不同的职责,并在不同的时间点被写入磁盘。以下是对这三种日志写盘时机的详细解释:

binlog的写盘时机

binlog主要用于记录数据库的变更操作,以便进行数据复制、数据恢复和审计等功能。其写盘时机通常受sync_binlog参数的控制,该参数的取值范围可以是0到N:

  • sync_binlog设置为0时,系统不会强制要求binlog立即写入磁盘,而是由系统自行判断何时写入。
  • sync_binlog设置为1时,每次事务提交(commit)时,都会将binlog写入磁盘。这是MySQL 5.7.7之后版本的默认值,它确保了binlog的完整性和一致性,但可能会产生大量的日志。
  • sync_binlog设置为N时,每N个事务才会将binlog写入磁盘,这可以减少磁盘I/O操作,但可能会增加数据丢失的风险。

redolog的写盘时机

redolog是在事务开始之后逐步写盘的,并不一定是随着事务的提交才写入重做日志文件的。具体来说,redolog的写盘时机包括以下几种情况:

  • 事务开始后逐步写入:在事务执行过程中,对数据页的修改会先记录到redolog中,并写入到redolog buffer(内存中的缓冲区)。当redolog buffer中的内容积累到一定程度或者满足特定条件时(如达到一定的日志量或时间间隔),后台线程会自动将其写入到磁盘上的redolog文件中。
  • 事务提交时写入:在事务提交时,必须确保redolog已经写入到磁盘,以保证事务的持久性。即使事务未提交,InnoDB存储引擎也会每秒将redolog缓存刷新到重做日志文件,以确保在发生意外时能够恢复数据。

undolog的写盘时机

undolog主要用于事务回滚和实现多版本并发控制(MVCC)。其写盘时机通常与事务的提交或回滚相关:

  • 当事务开始修改数据页时,会将修改前的数据状态记录到undolog中,并写入到undolog buffer(内存中的缓冲区)。
  • 当事务提交或回滚时,会将undolog buffer中的内容写入到磁盘上的undolog文件中。与redolog类似,undolog的写盘也可能受到后台线程或特定条件(如缓冲区满)的触发。

总结

  • binlog的写盘时机受sync_binlog参数的控制,可以在事务提交时或每N个事务后写入磁盘。
  • redolog在事务开始后逐步写入磁盘,并在事务提交时确保已经写入磁盘。此外,InnoDB存储引擎还会每秒将redolog缓存刷新到重做日志文件。
  • undolog在事务提交或回滚时写入磁盘,也可能受到后台线程或特定条件的触发。

http://www.ppmy.cn/embedded/141127.html

相关文章

动态规划子数组系列一>单词拆分

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; public boolean wordBreak(String s, List<String> wordDict) {//优化⼀&#xff1a;将字典里面的单词放入哈希表&#xff0c;为后续找字串提高速度Set<String> hash new HashSet<>(wordDict);int n…

金融智能化的明日之星:量化交易模型的演化与发展

量化交易模型作为金融领域中的重要创新手段&#xff0c;已经从传统交易方式中脱颖而出&#xff0c;成为数据与算法驱动金融决策的核心工具。从简单的技术分析到复杂的多因子模型&#xff0c;再到融合人工智能与大数据的智能交易系统&#xff0c;量化模型的探索与发展推动了金融…

《物联网智能项目》

一、引言 随着科技的不断进步&#xff0c;物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;已经成为当今世界最具发展潜力的领域之一。物联网智能项目通过将各种设备、传感器和系统连接到互联网&#xff0c;实现了智能化的监测、控制和管理&#xff0c;为人们…

基于python+django+vue.js开发的停车管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;车位管理、会员管理、停车场管理、违规管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/pytho…

通过DBUA升级 Oracle 11g到Oracle12c版本

Oracle 11g升级到Oracle12c Oracle11g数据库环境准备与数据备份 环境&#xff1a; oracle11.2.0.4 to oralce12.2.0.1 升级方案&#xff1a; 升级方案很多种&#xff0c;我们ORACLE培训课程第8阶段有所讲所有的升级方案&#xff0c;我们这里采用DBUA官方建议的方法 1、手…

记录一次在生产环境中更换 SSL 证书的操作

本文将记录一次在生产环境中更换 SSL 证书的过程&#xff0c;包括准备工作、遇到的问题和解决方案&#xff0c;以及如何重启和重新加载 Nginx 服务以使更改生效。 1. 确认证书过期 SSL 证书通常具有有效期&#xff0c;当证书过期时&#xff0c;用户访问网站时会看到浏览器警告…

HBase运维需要掌握的技能(1)

作为 HBase 运维人员&#xff0c;我们需要掌握一定的 HBase 和 Hadoop 生态系统相关的知识&#xff0c;特别是与系统安装、配置、性能调优、故障排除等相关的技能。以下是 HBase 运维人员需要掌握的核心知识点&#xff1a; HBase 是一个分布式的、面向列的 NoSQL 数据库&#…

LLamafactory API部署与使用异步方式 API 调用优化大模型推理效率

文章目录 背景介绍第三方大模型API 介绍LLamafactory 部署API大模型 API 调用工具类项目开源 背景介绍 第三方大模型API 目前&#xff0c;市面上有许多第三方大模型 API 服务提供商&#xff0c;通过 API 接口向用户提供多样化的服务。这些平台不仅能提供更多类别和类型的模型…