当前位置: 首页 > news >正文

拷打,数据库面经!

数据库必会面试题

1. 请解释数据库中的MVCC(多版本并发控制)机制,并说明其在MySQL InnoDB中的具体实现方式?

答案:
MVCC是一种通过维护数据的历史版本实现高并发的技术,允许读操作不阻塞写操作,写操作不阻塞读操作。在MySQL InnoDB中,MVCC通过以下机制实现:

  1. 隐藏字段:每行数据包含DB_TRX_ID(最近修改的事务ID)和DB_ROLL_PTR(回滚指针,指向Undo Log记录)。
  2. Undo Log:存储数据的历史版本,用于构建一致性读视图。
  3. Read View:事务执行快照读时生成,包含当前活跃事务ID列表,用于判断数据版本的可见性。

示例场景:

  • 事务A(ID=100)更新某行数据,生成新版本并写入Undo Log。
  • 事务B(ID=101)启动并执行查询,此时生成Read View,活跃事务为[100]。
  • 事务B读取该行时,发现最新版本的DB_TRX_ID=100在活跃事务列表中,故通过DB_ROLL_PTR找到上一个可见版本返回。

关键点:

  • 解决了“不可重复读”和“幻读”问题(在RR隔离级别下)。
  • 仅在RC(读已提交)和RR(可重复读)隔离级别生效。

2. 如何处理数据库死锁?请结合MySQL说明检测与解决机制。

答案:
死锁产生条件:互斥、持有并等待、不可抢占、循环等待。
MySQL处理方式

  1. 检测机制:使用等待图(Wait-for Graph)检测循环依赖,超时(默认50秒)后触发检测。
  2. 解决策略:选择代价最小的事务回滚(通过计算事务修改的行数、Undo Log大小等)。

示例场景:

  • 事务A持有行1锁,请求行2锁;事务B持有行2锁,请求行1锁。
  • MySQL检测到循环依赖,强制回滚其中一个事务(如事务B),释放其锁,让事务A继续执行。

优化建议

  • 业务层保证访问顺序一致。
  • 使用SHOW ENGINE INNODB STATUS分析死锁日志。

3. 请解释分库分表的常见策略及其优缺点,并说明如何解决跨分片查询问题。

答案:
分库分表策略

  1. 水平拆分
    • 范围分片(如按时间范围):易导致热点问题。
    • 哈希分片(如对ID取模):数据分布均匀,但扩容复杂。
  2. 垂直拆分:按业务模块分库(如订单库、用户库)。

跨分片查询解决方案

  1. 全局二级索引:维护额外索引表记录数据位置。
  2. 中间件聚合:通过ShardingSphere等中间件并行查询各分片后合并结果。
  3. 冗余存储:将高频查询字段冗余到多个分片(空间换时间)。

缺点

  • 事务管理复杂(需分布式事务如Seata)。
  • 聚合查询性能下降。

4. 请详细说明MySQL的Redo Log、Undo Log和Binlog的区别与作用。

答案:

日志类型作用写入时机内容
Redo Log保证事务持久性,崩溃恢复时重放操作事务提交前按顺序写入物理日志(数据页修改)
Undo Log支持事务回滚和MVCC,存储数据旧版本数据修改前记录逻辑日志(反向SQL)
Binlog主从复制和数据恢复事务提交后按事件顺序写入逻辑日志(SQL语句或行变更)

协作流程

  1. 事务执行时生成Undo Log用于回滚。
  2. 修改数据页,记录Redo Log到内存缓冲区(log buffer)。
  3. 事务提交时Redo Log刷盘(fsync),Binlog写入文件。
  4. 两阶段提交保证Redo Log和Binlog的一致性。

5. 请阐述数据库的“幻读”现象,MySQL如何通过Next-Key Lock解决幻读?

答案:
幻读:同一事务中多次范围查询返回的行数不同(由于其他事务插入/删除符合条件的数据)。
Next-Key Lock实现

  • 结合记录锁(行锁)和间隙锁(Gap Lock),锁定索引记录及其前面的区间。
  • 例如:对id>10的条件加锁,会锁定(10, +∞)的间隙,阻止其他事务插入id>10的数据。

示例场景(RR隔离级别)

  1. 事务A执行SELECT * FROM t WHERE id>10 FOR UPDATE,对id=15(现有数据)加记录锁,并对(10,15)、(15,+∞)加间隙锁。
  2. 事务B尝试插入id=12的数据会被阻塞,直到事务A提交。

注意

  • 仅在RR隔离级别下生效。
  • 使用唯一索引时,Next-Key Lock降级为行锁。

6. 请描述数据库的“写倾斜”(Write Skew)问题,并给出解决方案。

答案:
写倾斜:两个事务基于同一数据集读取后更新不同部分,导致数据不一致。
示例

  • 医生值班系统,事务A和事务B同时查询当前值班医生数≥2,各自申请请假,导致最终值班医生<2。

解决方案

  1. 串行化隔离级别:强制事务串行执行,但性能差。
  2. 显式加锁:使用SELECT ... FOR UPDATE锁定相关行(如所有值班医生记录)。
  3. 约束检查:数据库触发器或应用层检查(如请假后总数≥2)。

关键点

  • 写倾斜属于“幻读”的一种变种,需通过更严格的锁或业务逻辑解决。

以上问题覆盖了分布式事务、锁机制、日志系统等高级主题,适合考察候选人对数据库底层原理和复杂场景的处理能力。

7. 什么是数据库事务,它的ACID属性是什么?

数据库事务是一组数据库操作的逻辑单元,要么全部执行成功,要么全部回滚。ACID属性是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

以下是对ACID属性的详细解释:

  1. 原子性(Atomicity):原子性确保一个事务中的所有操作要么全部成功,要么全部失败回滚。如果一个操作失败,整个事务将回滚到初始状态,不会对数据库产生任何影响。

  2. 一致性(Consistency):一致性确保事务将数据库从一个一致状态转换到另一个一致状态。在事务开始和结束时,数据库必须满足预定义的一致性规则,以保持数据的完整性和约束条件的有效性。

  3. 隔离性(Isolation):隔离性确保并发执行的事务相互隔离,使它们看起来像是按顺序执行的。每个事务在执行期间都应该与其他事务相互隔离,以防止数据的不一致和并发问题(如脏读、不可重复读和幻读)。

  4. 持久性(Durability):持久性确保一旦事务提交,其对数据库的更改将永久保存,即使在系统故障或崩溃后也是如此。数据库系统使用日志和其他机制来确保已提交的事务的更改持久保存,以防止数据丢失。

这些ACID属性是数据库事务的关键特性,确保了事务的可靠性、一致性和持久性。通过满足这些属性,数据库可以保证数据的完整性和可靠性,同时提供并发控制和事务管理的机制。

8. 请解释一下数据库索引的作用和优缺点。

数据库索引用于加快查询速度,通过创建索引可以快速定位到满足查询条件的数据行。

优点是提高查询性能,缺点是占用额外的存储空间和增加写操作的开销。

面试的时候我们一定要举例来说,以下是一些场景示例:

优点:提高查询性能

  • 场景1:电子商务网站的商品列表页面。通过在商品名称字段上创建索引,可以快速定位到满足搜索关键字的商品,提高搜索响应速度。
  • 场景2:社交媒体平台的用户关注列表。通过在用户ID字段上创建索引,可以快速获取某个用户关注的其他用户,提高社交关系的查询效率。

缺点:占用额外的存储空间和增加写操作的开销

  • 场景1:日志记录系统。如果在每个日志记录的时间戳字段上都创建索引,将占用大量的存储空间,增加了存储成本。
  • 场景2:高并发的写入操作。当频繁进行插入、更新或删除操作时,索引的维护会增加写操作的开销,降低写入性能。

需要根据具体的业务场景和需求来权衡使用索引的利弊。

索引的设计应该根据查询频率、数据量、写入操作的频率和数据一致性要求等因素进行综合考虑。在某些情况下,可以选择创建部分索引或使用其他优化技术来平衡查询性能和存储开销。

9. 索引失效的情况

数据库索引在某些情况下可能会失效,导致查询性能下降。

以下是一些常见的导致索引失效的情况:

  1. 不使用索引列进行查询:如果查询条件中没有使用索引列,数据库无法利用索引进行快速定位,而是需要进行全表扫描,导致索引失效。

  2. 使用函数或表达式对索引列进行操作:如果在查询条件中对索引列使用函数或表达式进行操作,例如使用UPPER函数或进行数学运算,会导致索引失效。

  3. 使用不等于(<>)或不包含(NOT IN)条件:不等于和不包含条件会导致索引失效,因为数据库无法利用索引进行快速定位。

  4. 数据类型不匹配:如果查询条件中的数据类型与索引列的数据类型不匹配,例如将字符串与数字进行比较,会导致索引失效。

  5. 数据量过小:当数据量非常小的时候,数据库可能会选择全表扫描而不是使用索引,因为全表扫描的开销更小。

  6. 索引列上存在函数或表达式:如果在索引列上存在函数或表达式,例如在索引列上使用了LOWER函数,会导致索引失效。

  7. 索引列上存在排序或分组:如果在索引列上进行排序或分组操作,数据库可能会选择全表扫描而不是使用索引。

需要注意的是,不同的数据库管理系统(DBMS)可能在索引失效的情况上有所不同。因此,在实际应用中,应该根据具体的DBMS和查询场景进行优化,以避免索引失效并提高查询性能。

10. 什么是数据库范式化,为什么要进行范式化设计?

数据库范式化是一种设计规范,用于减少数据冗余和提高数据的一致性。

范式化设计可以避免数据的重复存储,减少数据更新的复杂性,提高数据的完整性和可维护性。

以下是一些示例来说明其作用和优势:

  1. 第一范式(1NF):确保每个数据字段都是原子的,不可再分。例如,一个学生表中的姓名字段应该是一个单独的字段,而不是将姓和名合并在一个字段中。

  2. 第二范式(2NF):确保表中的非主键字段完全依赖于主键。例如,一个订单表中,订单项的价格和数量应该与订单号一起作为一个独立的表,而不是直接存储在订单表中。

  3. 第三范式(3NF):确保表中的非主键字段之间没有传递依赖关系。例如,一个员工表中,员工的地址信息应该与员工号一起作为一个独立的表,而不是直接存储在员工表中。

通过范式化设计,我们可以避免数据冗余和不一致性,提高数据的完整性和可维护性。范式化设计可以减少数据的重复存储,节省存储空间,并降低数据更新的复杂性。此外,范式化设计还有助于提高数据的查询性能,因为数据被更细粒度地分解,可以更快地定位到需要的数据。

需要注意的是,范式化设计并不适用于所有情况。在某些情况下,为了提高查询性能或满足特定的业务需求,可能需要进行反范式化设计,即允许数据冗余。在实际应用中,应根据具体的业务需求和性能要求来权衡范式化和反范式化的设计选择。

11. 请解释一下数据库连接池的作用和优点。

数据库连接池用于管理数据库连接,重复使用已经建立的连接,避免频繁地创建和销毁连接。连接池可以提高性能,减少连接的创建和销毁开销。

以下是一个简单的代码示例,演示如何使用Go语言实现一个基本的数据库连接池:

package mainimport ("database/sql""fmt""sync""time"_ "github.com/go-sql-driver/mysql"
)const (maxConnections = 10
)var (dbPool chan *sql.DBmu     sync.Mutex
)func main() {// 初始化连接池initDBPool()// 从连接池获取数据库连接db := getDBFromPool()defer releaseDBToPool(db)// 使用数据库连接进行查询操作rows, err := db.Query("SELECT * FROM users")if err != nil {fmt.Println("Error querying database:", err)return}defer rows.Close()// 处理查询结果for rows.Next() {// ...}
}func initDBPool() {dbPool = make(chan *sql.DB, maxConnections)for i := 0; i < maxConnections; i++ {db, err := sql.Open("mysql", "username:password@tcp(hostname:port)/database")if err != nil {fmt.Println("Error opening database connection:", err)return}dbPool <- db}
}func getDBFromPool() *sql.DB {mu.Lock()defer mu.Unlock()select {case db := <-dbPool:return dbdefault:// 如果连接池为空,等待一段时间再尝试获取time.Sleep(100 * time.Millisecond)return getDBFromPool()}
}func releaseDBToPool(db *sql.DB) {dbPool <- db
}

在上述示例中,我们使用了database/sql包来操作数据库,并通过sql.Open函数创建数据库连接。在initDBPool函数中,我们初始化了一个固定大小的连接池,并将每个连接放入dbPool通道中。getDBFromPool函数用于从连接池中获取数据库连接,如果连接池为空,则等待一段时间再尝试获取。releaseDBToPool函数用于将数据库连接放回连接池。

请注意,这只是一个简单的示例,主要是想让你理解设计思想。

实际的数据库连接池实现可能需要考虑更多的细节,如连接的超时处理、连接的健康检查等。此外,还应该根据具体的数据库驱动和需求进行适当的调整和优化。

12. 什么是数据库锁,MySQL中有哪些类型的锁?

数据库锁用于控制并发访问,保证数据的一致性和完整性。MySQL中常见的锁包括共享锁(Shared Lock)和排他锁(Exclusive Lock),也称为读锁和写锁。

  1. 共享锁(Shared Lock):

    • 使用方式:通过在事务中使用SELECT ... LOCK IN SHARE MODE语句或设置事务隔离级别为READ COMMITTEDREPEATABLE READ来获取共享锁。
    • 适用场景:当多个事务需要同时读取同一数据时,可以使用共享锁。共享锁允许多个事务同时持有锁,但不允许其他事务对数据进行修改。
  2. 排他锁(Exclusive Lock):

    • 使用方式:通过在事务中使用SELECT ... FOR UPDATE语句或设置事务隔离级别为SERIALIZABLE来获取排他锁。
    • 适用场景:当事务需要对数据进行修改时,可以使用排他锁。排他锁在事务中是独占的,其他事务无法同时持有排他锁或共享锁,保证了数据的一致性和完整性。

适用场景的示例:

  • 共享锁:在一个论坛系统中,多个用户可以同时读取一个帖子的内容,但不允许同时对帖子进行修改。在这种情况下,可以使用共享锁来保证多个读操作的并发性。
  • 排他锁:在一个电商系统中,当用户下单购买商品时,需要对商品库存进行减少操作。为了避免并发下的库存错误,可以使用排他锁来保证只有一个事务可以修改库存,避免冲突和数据不一致。

需要注意的是,锁的使用应该根据具体的业务需求和并发控制的要求进行。过度使用锁可能会导致性能下降和并发性降低,因此在设计和实现中需要权衡锁的使用和性能的平衡。

此外,MySQL还提供了其他类型的锁,如行级锁和表级锁,可以根据具体的需求选择适合的锁机制。在实际应用中,应根据具体的业务场景和需求来选择合适的锁机制和事务隔离级别。

13. 行级锁和表级锁

在MySQL中,除了共享锁和排他锁,还提供了行级锁和表级锁。以下是关于行级锁和表级锁的使用和适用场景的详细说明:

  1. 行级锁(Row-Level Locking):
    • 使用方式:通过在事务中使用SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE语句来获取行级锁。
    • 适用场景:当事务需要锁定特定行或行集合时,可以使用行级锁。行级锁允许多个事务同时访问同一表,但只有在访问同一行时才会发生冲突。

适用场景的示例:

  • 行级锁:在一个在线商城系统中,多个用户可以同时浏览商品列表,但当用户下单购买某个商品时,需要锁定该商品的库存行,避免并发下的库存错误。在这种情况下,可以使用行级锁来保证对库存行的独占访问。
  1. 表级锁(Table-Level Locking):
    • 使用方式:通过在事务中使用LOCK TABLES语句来获取表级锁。
    • 适用场景:当需要对整个表进行操作时,可以使用表级锁。表级锁会锁定整个表,阻止其他事务对表的读写操作。

适用场景的示例:

  • 表级锁:在一个数据导入系统中,当需要导入大量数据时,可以使用表级锁来锁定整个表,防止其他事务对表进行读写操作,确保数据导入的完整性。

行级锁和表级锁的使用应该根据具体的业务需求和并发控制的要求进行。过度使用锁可能会导致性能下降和并发性降低,因此在设计和实现中需要权衡锁的使用和性能的平衡。

14. 解释一下数据库事务隔离级别,并说明它们之间的区别。

数据库事务隔离级别包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。它们之间的区别在于对并发事务的隔离程度和锁的使用方式。

  1. 读未提交(Read Uncommitted):

    • 隔离级别最低,事务之间没有隔离,一个事务可以读取到另一个事务未提交的数据。
    • 可能出现脏读(Dirty Read)问题,即读取到未提交的数据。
  2. 读已提交(Read Committed):

    • 保证一个事务只能读取到已经提交的数据,读取过程中其他事务对数据的修改不可见。
    • 避免了脏读问题,但可能出现不可重复读(Non-repeatable Read)问题,即同一事务内多次读取同一数据时,读取结果不一致。
  3. 可重复读(Repeatable Read):

    • 保证一个事务在执行期间多次读取同一数据时,能够得到一致的结果,不受其他事务的修改影响。
    • 避免了不可重复读问题,但可能出现幻读(Phantom Read)问题,即同一事务内多次查询时,结果集的行数不一致。
  4. 串行化(Serializable):

    • 最高的隔离级别,确保事务串行执行,避免了脏读、不可重复读和幻读的问题。
    • 通过对数据进行加锁来实现隔离,但可能导致并发性能下降。

随着隔离级别的提高,事务的隔离程度增强,但并发性能可能会下降。因此,在选择事务隔离级别时,需要根据具体的业务需求和并发控制的要求进行权衡。

在MySQL中,默认的隔离级别是可重复读(Repeatable Read),可以通过设置SET TRANSACTION ISOLATION LEVEL语句来修改隔离级别。

15. 什么是数据库分区(Partitioning),为什么要使用分区?

MySQL数据库提供了多个存储引擎,每个存储引擎都有不同的特点和适用场景。以下是一些常见的MySQL存储引擎及其特点:

  1. InnoDB:

    • 默认的事务性存储引擎,支持事务和行级锁。
    • 提供高并发性能和数据完整性,适用于大部分应用场景。
    • 支持外键约束、崩溃恢复和自动增长列等功能。
  2. MyISAM:

    • 不支持事务和行级锁,但具有较高的性能。
    • 适用于读密集型应用,如数据仓库、日志分析等。
    • 支持全文索引和压缩表等特性。
  3. Memory(或称为 Heap):

    • 将数据存储在内存中,读写速度非常快。
    • 适用于临时表、缓存和高速数据处理等场景。
    • 数据在服务器重启或崩溃时会丢失。
  4. Archive:

    • 用于存储大量历史数据,具有高压缩比和快速插入速度。
    • 不支持索引,适用于数据归档和存储。
  5. NDB Cluster(或称为 NDB):

    • 集群存储引擎,提供高可用性和分布式存储。
    • 适用于大规模的分布式应用,如云计算、实时数据处理等。

需要注意的是,不同的存储引擎在功能和性能方面有所差异,应根据具体的应用需求和场景选择合适的存储引擎。在选择存储引擎时,需要考虑事务支持、并发性能、数据完整性、可用性和存储需求等因素。

此外,MySQL还支持其他存储引擎,如CSV、Blackhole、Federated等。每个存储引擎都有其独特的特点和适用场景,开发人员应根据具体需求进行选择和配置。

16. MySQL数据库如何做索引优化?

在MySQL数据库中,索引优化是提高查询性能的重要方面。以下是一些常见的MySQL索引优化技巧:

  1. 选择合适的索引类型:

    • 根据查询的特点和数据的访问模式选择合适的索引类型,如B-tree索引、哈希索引、全文索引等。
    • B-tree索引是最常用的索引类型,适用于范围查询和排序操作。
    • 哈希索引适用于等值查询,但不支持范围查询和排序操作。
    • 全文索引适用于文本搜索和匹配。
  2. 考虑多列索引:

    • 对于经常一起使用的列,可以创建多列索引,以提高查询的效率。
    • 多列索引可以减少索引的数量,提高查询的覆盖度和性能。
  3. 避免过多的索引:

    • 不要为每个列都创建索引,过多的索引会增加存储空间和写操作的开销。
    • 根据查询的频率和重要性选择创建索引的列。
  4. 使用覆盖索引:

    • 覆盖索引是指索引包含了查询所需的所有列,避免了回表操作。
    • 使用覆盖索引可以减少IO操作,提高查询性能。
  5. 定期收集和更新统计信息:

    • 使用ANALYZE TABLE或OPTIMIZE TABLE命令来收集和更新表的统计信息。
    • 统计信息可以帮助优化器生成更准确的执行计划,提高查询性能。
  6. 避免索引过多的列:

    • 对于长字符串或大文本列,避免将其包含在索引中,可以减少索引的大小和维护成本。
  7. 调整查询缓存:

    • 根据具体的查询模式和需求,调整查询缓存的大小和配置。
    • 对于频繁更新的表,禁用查询缓存,以避免缓存失效的开销。

在进行索引优化时,可以使用EXPLAIN语句来分析查询的执行计划,了解索引的使用情况和性能瓶颈,以便进行相应的优化。同时,定期监控数据库的性能指标,如查询响应时间、索引命中率等,以及根据实际情况进行调整和优化。

17. 如何对MySQL做性能调优,可以从哪些角度来考虑?

对MySQL进行性能调优时,可以从以下几个角度来考虑:

  1. 查询优化:

    • 优化查询语句的写法,避免不必要的操作和冗余的条件。
    • 使用合适的索引来加速查询,确保索引的选择和使用是有效的。
    • 调整查询缓存的大小和配置,以适应具体的查询需求。
  2. 硬件和基础架构:

    • 确保数据库服务器的硬件配置满足性能需求,如CPU、内存和存储等。
    • 考虑使用高速缓存、负载均衡和分布式架构等技术来提高性能和可扩展性。
  3. 索引和表结构优化:

    • 分析和优化表的结构,避免过多的冗余数据和不必要的列。
    • 使用合适的索引来加速查询,避免过多的索引和不必要的索引。
  4. 配置和参数调整:

    • 调整MySQL的配置参数,如缓冲区大小、并发连接数、线程池等。
    • 根据具体的应用需求和硬件环境,调整参数以提高性能和稳定性。
  5. 数据库维护和优化:

    • 定期收集和更新表的统计信息,以保持最新的数据分布和基数。
    • 定期进行数据库备份和日志清理,以保持数据库的健康和性能。
  6. 监控和调试:

    • 使用性能监控工具和日志分析工具来监控数据库的性能指标和查询执行情况。
    • 根据监控结果进行调试和优化,找出性能瓶颈和问题,并采取相应的措施进行优化。

性能调优是一个持续的过程,需要根据具体的业务需求和环境来进行调整和优化。在进行性能调优时,建议先进行性能测试和基准测试,了解系统的当前性能状况和瓶颈,然后有针对性地进行优化。同时,定期监控数据库的性能指标,如查询响应时间、并发连接数、缓存命中率等,以及根据实际情况进行调整和优化。

18. 如何保证数据库和缓存的双写一致性,请给我具体的方案。

保证数据库和缓存的双写一致性是一个常见的挑战,以下是一些常用的方案来实现数据库和缓存的双写一致性:

  1. 事务操作:

    • 在数据库操作和缓存更新之间使用数据库事务来保证一致性。在事务中,先更新数据库,然后再更新缓存。如果缓存更新失败,可以回滚数据库操作,确保数据的一致性。
  2. 延迟双写:

    • 先更新数据库,然后异步更新缓存。在数据库更新完成后,通过消息队列或异步任务来更新缓存。这种方式可以提高写入性能,但可能会导致数据库和缓存之间的数据不一致性存在一段时间。
  3. 双写模式:

    • 在应用层实现数据库和缓存的双写操作。每次写操作都同时更新数据库和缓存,确保数据的一致性。这种方式可以保证一致性,但会增加写入操作的开销和延迟。
  4. 读写分离和缓存更新策略:

    • 使用数据库的读写分离机制,将写操作发送到主数据库,读操作发送到从数据库。在写操作完成后,通过缓存更新策略来更新缓存,以保证读操作的一致性。

以上方案都有其优缺点,具体的选择取决于应用的需求和场景。在实际应用中,需要根据数据的重要性、读写比例、性能要求和一致性需求来选择合适的方案。同时,还需要考虑系统的复杂性、可扩展性和容错性等因素。

另外,为了进一步提高双写一致性的可靠性,可以使用一些技术手段,如引入分布式事务、使用消息队列进行异步处理、实现幂等性操作等。这些技术可以根据具体的业务需求和系统架构来选择和实现。

欢迎关注 ❤

我们搞了一个免费的面试真题共享群,互通有无,一起刷题进步。

没准能让你能刷到自己意向公司的最新面试题呢。

感兴趣的朋友们可以私信我,备注:面试群。

相关文章:

拷打,数据库面经!

数据库必会面试题 1. 请解释数据库中的MVCC&#xff08;多版本并发控制&#xff09;机制&#xff0c;并说明其在MySQL InnoDB中的具体实现方式&#xff1f; 答案&#xff1a; MVCC是一种通过维护数据的历史版本实现高并发的技术&#xff0c;允许读操作不阻塞写操作&#xff0…...

Docker+DockerCompose+Harbor安装

安装docker # 安装yum工具 yum install yum-utils -y# 配置yum源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装docker yum install -y docker-ce-25.0.3 docker-ce-cli-25.0.3 containerd.io# 加载镜像 systemctl d…...

论文笔记(七十二)Reward Centering(一)

Reward Centering&#xff08;一&#xff09; 文章概括摘要1 奖励中心化理论 文章概括 引用&#xff1a; article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan, Yi and Tomar, Manan and Sutton, Richard S},journal{arXiv preprint arXiv:2405.0…...

在springboot加vue项目中加入图形验证码

后端 首先先要创建一个CaptchaController的类&#xff0c;可以在下面的代码中看到 在getCaptcha的方法里面写好了生成随机的4位小写字母或数字的验证码&#xff0c;然后通过BufferedImage类变为图片&#xff0c;顺便加上了干扰线。之后把图片转为Base64编码方便传给前端 为了…...

【系列专栏】银行IT的云原生架构-存储架构-数据库部署 10

银行 IT 的云原生架构&#xff1a;存储架构&#xff08;数据库部署&#xff09; 一、引言 在银行 IT 云原生架构的构建中&#xff0c;存储架构作为关键支撑&#xff0c;其性能、可靠性和扩展性直接影响着银行各类业务系统的运行效率与数据安全。而数据库作为数据存储与管理的…...

OpenGL ES -> 投影变换矩阵完美解决绘制GLSurfaceView绘制图形拉伸问题

GLSurfaceView绘制图形拉伸问题 假如在XML文件中声明GLSurfaceView的宽高为 android:layout_width"match_parent"android:layout_height"match_parent GLSurfaceView绘制的图形在Open GL ES坐标系中&#xff0c;而Open GL ES坐标系会根据GLSurfaceView的宽高将…...

【Three.js】JS 3D library(一个月进化史)

#春节过完了&#xff0c;该继续投入学习了~ 作为一个平面开发者&#xff0c;想要增进更多的技能&#xff0c;掌握web3D开发# 前置知识与技能 1. JavaScript 基础 - 掌握ES6语法&#xff08;类、模块、箭头函数、解构等&#xff09; - 熟悉异步编程&#xff08;Promise、…...

在 debian 12 上安装 mysqlclient 报错

报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...

wordpress主题插件开发中高频使用的38个函数

核心模板函数 get_header()/get_footer()/get_sidebar() – 加载模板部件 the_title()/the_content()/the_excerpt() – 显示文章标题、内容、摘要 the_post() – 循环中获取文章数据 bloginfo(‘url’) – 获取站点URL wp_head()/wp_footer() – 输出头部/尾部代码 wp_n…...

BMS项目-面试及答疑整理

1. SOC计算用的什么原理实现的? bms目前计算SOC使用的安时积分+开路电压首先得对电池有一个抽象得概念,把电池比作游泳池,电量比作游泳池里面的水,电流比作流入和流出得水流,那么充电也就是往游泳池里面灌入水流安时积分:对水流进行一个实时监测,比如1S一次监测,那么每…...

js第十二题

题十二&#xff1a;轮播图 要求&#xff1a; 1.鼠标不在图片上方时&#xff0c;进行自动轮播&#xff0c;并且左右箭头不会显示&#xff1b;当鼠标放在图片上方时&#xff0c;停止轮播&#xff0c;并且左右箭头会显示&#xff1b; 2.图片切换之后&#xff0c;图片中下方的小…...

LeetCode-76.最小覆盖子串

1、题目描述&#xff1a; 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 "" 。 注意&#xff1a; 对于 t 中重复字符&#xff0c;我们寻找的子字符串中该字符数量必须…...

CAS单点登录(第7版)20.用户界面

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 用户界面 概述 概述 对 CAS 用户界面 &#xff08;UI&#xff09; 进行品牌化涉及编辑 CSS 样式表以及一小部分相对简单的 HTML 包含文件&#xff0c;也称为视图。&#xff08;可选&…...

【强化学习的数学原理】第08课-值函数近似-笔记

学习资料&#xff1a;bilibili 西湖大学赵世钰老师的【强化学习的数学原理】课程。链接&#xff1a;强化学习的数学原理 西湖大学 赵世钰 文章目录 一、例子&#xff1a;曲线拟合二、原理-目标函数介绍三、原理-优化算法和函数选择四、原理-示例与分析五、Sarsa和Q-learning六、…...

基于css实现正六边形的三种方案

方案一&#xff1a;通过旋转三个长方形生成正六边形 分析&#xff1a; 如下图所示&#xff0c;我们可以通过旋转三个长方形来得到一个正六边形。疑问&#xff1a; 1. 长方形的宽高分别是多少&#xff1f; 设正六边形的边长是100&#xff0c;基于一些数学常识&#xff0c;可以…...

React VS Vue

React 和 Vue 是目前最流行的两个前端框架&#xff0c;它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比&#xff1a; 1. 核心设计理念 React 库而非框架&#xff1a;React 是一个用于构建 UI 的库&#xff0c;专注于视图层&#xff0c;其…...

CMake 编译工具

在使用 CMake 时&#xff0c;你可以通过指定工具链文件来设置编译器&#xff08;如 GCC、G 或 Clang&#xff09;。以下是具体步骤&#xff1a; 1. 创建工具链文件 首先&#xff0c;创建一个工具链文件&#xff08;例如 toolchain.cmake&#xff09;&#xff0c;并在其中指定…...

el-tree选中数据重组成树

vueelement-ui 实现el-tree选择重新生成一个已选中的值组成新的数据树&#xff0c;效果如下 <template><div class"flex"><el-tree class"tree-row" :data"list" ref"tree" :props"{children: children, label: …...

IO、NIO解读和不同点,以及常用的文件流操作方法

java高级——IO、NIO解读和不同点&#xff0c;以及常用的文件流操作方法 前情提要文章介绍1. 什么是IO1.1 节点的分类1.2 传输方式 2. 七大传输方式解读2.1 File类解读2.1.1 创建文件的三种方式2.2.2 File的常用方法2.2.3 如何正确认识FileUtils 2.2 字节流&#xff08;核心&am…...

51单片机-按键

1、独立按键 1.1、按键介绍 轻触开关是一种电子开关&#xff0c;使用时&#xff0c;轻轻按开关按钮就可使开关接通&#xff0c;当松开手时&#xff0c;开关断开。 1.2、独立按键原理 按键在闭合和断开时&#xff0c;触点会存在抖动现象。P2\P3\P1都是准双向IO口&#xff0c;…...

Spring Boot Actuator 监控✨

Spring Boot Actuator 是 Spring Boot 提供的一个强大的监控和管理工具&#xff0c;它可以帮助你深入了解和监控你的应用程序的运行状态。通过 Actuator&#xff0c;你可以获取应用程序的健康状况、内存使用情况、线程信息、HTTP 请求跟踪等。&#x1f680; 核心知识点 &#…...

SpringBoot论坛网站 – 功能详解与部署教程

项目概述 《SpringBoot的论坛网站》是一个基于SpringBoot框架开发的现代化论坛平台&#xff0c;旨在为用户提供一个便捷的交流空间。该项目不仅功能丰富&#xff0c;还具备良好的扩展性和易用性&#xff0c;适合用于学习、分享和讨论各类话题。以下是项目的核心功能模块和部署…...

俄罗斯方块游戏完整代码示例

以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能&#xff0c;并且代码整合在单个文件中&#xff0c;无需任何外部依赖&#xff0c;可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先&#xff0c;确保你已经安装了…...

【设计模式】【结构型模式】组合模式(Composite)

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f3b5; 当你的天空突…...

【设计模式】03-理解常见设计模式-行为型模式(专栏完结)

前言 前面我们介绍完创建型模式和创建型模式&#xff0c;这篇介绍最后的行为型模式&#xff0c;也是【设计模式】专栏的最后一篇。 一、概述 行为型模式主要用于处理对象之间的交互和职责分配&#xff0c;以实现更灵活的行为和更好的协作。 二、常见的行为型模式 1、观察者模…...

Qt 6.8版本 自制windows下运行软件<一>——串口调试助手

自制串口调试助手 哔哩哔哩效果展示 一、 说明 本人在读学生&#xff0c;跟随哔哩哔哩网站北京迅为公司的教学视频&#xff0c;进行学习qt&#xff0c;由于视频中的实现过程是利用ui界面的实现&#xff0c;本人在学习过程中&#xff0c;通过完全敲代码的形式&#xff0c;实现同…...

Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

深入解析 vLLM:高性能 LLM 服务框架的架构之美(一)原理与解析

修改内容时间2.4.1处理请求的流程&#xff0c;引用更好的流程图2025.02.11首发2025.02.08 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;一&#xff09;原理与解析 深入解析 vLLM&#xff1a;高性能 LLM 服务框架的架构之美&#xff08;二&#xff09;…...

关于视频去水印的一点尝试

一. 视频去水印的几种方法 1. 使用ffmpeg delogo滤镜 delogo 滤镜的原理是通过插值算法&#xff0c;用水印周围的像素填充水印的位置。 示例&#xff1a; ffmpeg -i input.mp4 -filter_complex "[0:v]delogox420:y920:w1070:h60" output.mp4 该命令表示通过滤镜…...

前端常见面试题-2025

vue4.0 Vue.js 4.0 是在 2021 年 9 月发布。Vue.js 4.0 是 Vue.js 的一个重要版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提升开发者的体验和性能。以下是一些关键的更新和新特性&#xff1a; Composition API 重构&#xff1a;Vue 3 引入了 Composition API 作为…...

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…...

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域&#xff0c;频率综合器作为关键组件&#xff0c;其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器&#xff0c;以其卓越的性能和独特设计&#xff0c;成为众多高性能系统的选择。 一、频率覆盖范围广&#xff0c;步进…...

前端【技术方案】重构项目

1. 明确重构目标 优化性能 减少页面加载时间降低资源占用 提升代码可维护性 更规范的代码风格更清晰的代码结构更明确的模块设计 扩展功能 为项目添加新功能改进现有功能 2. 评估项目现状 审查代码 全面检查现有代码&#xff0c;找出代码中的问题&#xff0c;如代码冗余、耦合…...

第十六天 HarmonyOS WebView开发实战:从加载网页到与JavaScript交互

HarmonyOS WebView开发实战&#xff1a;从加载网页到与JavaScript交互 一、WebView基础与HarmonyOS特性解析 在移动应用开发中&#xff0c;WebView作为内嵌浏览器组件&#xff0c;在HarmonyOS&#xff08;鸿蒙系统&#xff09;中扮演着重要角色。它不仅能够加载本地和远程网页…...

Unity学习part2

为bilibili教程【【Unity教程】零基础带你从小白到超神】 https://www.bilibili.com/video/BV1gQ4y1e7SS/?p50&share_sourcecopy_web&vd_source6e7a3cbb802eb986578ad26fae1eeaab的笔记 1、灯光的使用 定向光模拟太阳&#xff0c;是平行光。旋转定向光&#xff0c;光…...

贪吃蛇游戏

贪吃蛇 一、html <div class"container" id"app"></div><script src"./js/index.js"></script>二、css * {margin: 0;top: 0;} .set {margin: 15px auto;width: 600px; } .container {width: 600px;height: 600px;bac…...

docker修改镜像默认存储路径(基于 WSL2 的迁移方法)

打开powershell窗口 任意地方shift右键 1、停止 WSL wsl --shutdown2、导出数据 wsl --export docker-desktop-data E:\docker\DockerDesktopdata\docker-desktop-data.tar wsl --export docker-desktop E:\docker\DockerDesktop\docker-desktop.tar3、取消注册 wsl --un…...

C#+SqlSugar实现主从库读写分离

在使用 **SqlSugar** 进行分库操作时&#xff0c;可以通过配置多个数据库连接&#xff0c;并根据业务逻辑动态切换数据库。以下是一个完整的分库示例&#xff0c;展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore&#xff1a; bash dotnet add packag…...

从无序到有序:上北智信通过深度数据分析改善会议室资源配置

当前企业普遍面临会议室资源管理难题&#xff0c;预约机制不完善和临时会议多导致资源调度不合理&#xff0c;既有空置又有过度拥挤现象。 针对上述问题&#xff0c;上北智信采用了专业数据分析手段&#xff0c;巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...

以太网详解(八)传输层协议:TCP/UDP 协议

文章目录 传输层协议概述为什么需要传输层&#xff1f;传输层功能网络层与传输层在实现 “端到端” 传输的异同两类服务:面向连接/无连接服务 传输控制协议 TCPTCP 协议数据单元格式TCP 的重传机制快重传和快恢复快重传举例快恢复算法 用户数据报协议 UDPUDP 概述UDP 基本工作过…...

CentOS 8 配置bond

CentOS 8 网络配置的详细步骤和对应的配置文件内容。 1. 配置聚合网卡(Bonding) 配置intranet聚合网卡 在/etc/sysconfig/network-scripts/目录下创建ifcfg-intranet文件,内容如下: TYPE=Bond NAME=intranet DEVICE=intranet ONBOOT=yes BOOTPROTO=none IPADDR=10.2.1.22…...

C语言基础16:二维数组、字符数组

二维数组 定义 二维数组本质上是一个行列式的组合&#xff0c;也就是说二维数组由行和列两部分组成。属于多维数组&#xff0c;二维数组数据是通过行列进行解读。 二维数组可被视为一个特殊的一维数组&#xff0c;相当于二维数组又是一个一维数组&#xff0c;只不过它的元素…...

Java 同步锁性能的最佳实践:从理论到实践的完整指南

目录 一、同步锁性能分析 &#xff08;一&#xff09;性能验证说明 1. 使用同步锁的代码示例 2. 不使用同步锁的代码示例 3. 结果与讨论 &#xff08;二&#xff09;案例初步优化分析说明 1. 使用AtomicInteger原子类尝试优化分析 2. 对AtomicInteger原子类进一步优化 …...

思科、华为、H3C常用命令对照表

取消/关闭 思科no华为undo华三undo 查看 思科show华为display华三display 退出 思科exit华为quit华三quit 设备命名 思科hostname华为sysname华三sysname 进入全局模式 思科enable、config terminal华为system-view华三system-view 删除文件 思科delete华为delete华…...

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…...

华为交换机堆叠技术简介配置

目录 一、华为堆叠技术简介&#xff08;一&#xff09;提高可靠性&#xff08;二&#xff09;扩展端口数量&#xff08;三&#xff09;增大带宽&#xff08;四&#xff09;简化组网&#xff08;五&#xff09;长距离堆叠 二、华为交换机堆叠技术的案例及命令配置&#xff08;一…...

腿足机器人之四- 卡尔曼滤波

腿足机器人之四卡尔曼滤波 概率学基础贝叶斯准则熵 卡尔曼滤波扩展卡尔曼滤波信息滤波器 在机器人&#xff08;四足、人形&#xff09;领域&#xff0c;感知和行动的不确定性可能由多种因素引起&#xff0c;如传感器噪声、外部环境的变化、非精确控制以及实时性算力限制等。 和…...

nginx 部署前端vue项目

&#x1f468;‍⚕ 主页&#xff1a; gis分享者 &#x1f468;‍⚕ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕ 收录于专栏&#xff1a;前端工程师 文章目录 一、&#x1f353;什么是nginx&#xff1f;二、&#x1f353;nginx 部署…...

【第1章:深度学习概览——1.6 深度学习框架简介与选择建议】

嘿,各位老铁们,今天咱们来一场深度学习框架的深度探索之旅。在这个充满无限可能的深度学习时代,深度学习框架就像是连接理论与实践的桥梁,帮助我们从算法设计走向实际应用。随着技术的飞速发展,深度学习框架的选择变得越来越多样化,每一种框架都有其独特的优势和适用场景…...

NLLB 与 ChatGPT 双向优化:探索翻译模型与语言模型在小语种应用的融合策略

作者&#xff1a;来自 vivo 互联网算法团队- Huang Minghui 本文探讨了 NLLB 翻译模型与 ChatGPT 在小语种应用中的双向优化策略。首先介绍了 NLLB-200 的背景、数据、分词器和模型&#xff0c;以及其与 LLM&#xff08;Large Language Model&#xff09;的异同和协同关系。接着…...