拿下!图森未来-算法后端平台一面过了!

2023-12-13 15:24:59 浏览数 (1)

哈喽~,大家好,我是千羽。

下面分享我认识的一位大佬华中科技大学985硕,图森未来暑期实习一面。

pass通过~

  • 1、自我介绍
  • 2、项目经历
  • 3、MySQL如何解决分布式的主从复制(binlog半同步复制)
  • 4、redis如何实现持久化
  • 5、算法:给定n个任务,每个任务的执行时间都为1小时,但现在由于机械出现了故障,导致所有的任务延后了k个小时执行,costs[i]表示原定于第i个小时执行的任务延后一小时的损失。现在,需要重新规划任务流程,规定现在的执行时间不能早于原定的执行时间。返回最小损失
  • 6、给定一个数组arr,和一个长度k,我们可以将数组分隔为多个长度最大为k的子数组,在完成分隔后,子数组内所有值都会变为子数组中元素的最大值。返回最好的分隔方法下,数组元素之和
  • 7、反问环节(做什么,技术栈,实习时间)

1、自我介绍

2、项目经历

3、MySQL如何解决分布式的主从复制(binlog半同步复制)

MySQL的分布式主从复制通常是通过以下步骤解决的:

  1. 设置主库(Master)和从库(Slave):选择一个数据库服务器作为主库,其他数据库服务器作为从库,从库会复制主库的数据。
  2. 初始数据同步:在开始复制之前,从库需要获取主库的数据。可以通过使用mysqldump工具或直接在主库上进行逻辑备份来完成这一步。
  3. 配置主库(Master):在主库上编辑my.cnf文件(或my.ini文件),添加以下配置:
代码语言:javascript复制
server-id = 1  
log_bin = /var/log/mysql/mysql-bin.log  
binlog_do_db = your_database_name

这些配置将启用二进制日志(binlog),并指定日志文件的位置以及要复制的数据库名称。

  1. 配置从库(Slave):在每个从库上编辑my.cnf文件,添加以下配置:
代码语言:javascript复制
server-id = 2  
relay_log = /var/log/mysql/mysql-relay-bin.log  
log_bin = /var/log/mysql/mysql-bin.log  
read_only = 1

这些配置将启用中继日志(relay log),并指定日志文件的位置。此外,将server-id设置为唯一的值,以避免冲突。read_only选项将限制从库只能进行只读操作。

  1. 在从库上启动复制:在从库上执行以下命令:
代码语言:javascript复制
CHANGE MASTER TO MASTER_HOST='master_ip_address', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=XXXX;  
START SLAVE;

替换master_ip_address为你的主库IP地址,replication_user和replication_password为你的复制用户名和密码,mysql-bin.XXXXXX为主库当前的二进制日志文件名,XXXX为主库当前的二进制日志位置。

  1. 检查复制状态:在从库上执行以下命令来检查复制状态:
代码语言:javascript复制
SHOW SLAVE STATUSG;

检查结果中的Slave_IO_Running和Slave_SQL_Running应为Yes,表示复制已经成功启动。

  1. 维护复制:定期检查复制状态,确保从库与主库保持同步。如果需要调整复制设置,可以在从库上执行相应的SQL命令。

通过以上步骤,你可以实现MySQL的主从复制并解决分布式环境中的数据同步问题。如有需要,可以添加更多的从库或调整复制设置以适应你的需求。

4、redis如何实现持久化

Redis提供了两种持久化方法:RDB(Redis DataBase)和AOF(Append Only File)。

  1. RDB持久化
    • 如果在生成快照期间,服务器宕机,那么会丢失这段时间的数据;
    • 对于大型数据集,RDB可能会占用大量的磁盘空间。
    • 生成数据的快照,可以用于备份;
    • 通常比AOF启动更快,因为AOF需要先进行载入再进行解析和同步。
    • 在指定的时间间隔内,如果至少有一条写命令被送到服务器,那么Redis就会记录当前的数据库快照到一个磁盘文件上。这个文件通常被称为dump.rdb。
    • 当Redis需要持久化时,它会fork出一个子进程,子进程会将数据写入一个临时文件。当持久化过程完成后,Redis将替换旧的快照文件为这个临时文件。
    • RDB的优点是:
    • RDB的缺点是:
  2. AOF持久化
    • 如果在写入追加日志文件期间服务器宕机,那么会丢失这段时间的数据;
    • AOF启动需要的时间比RDB启动的时间要长。
    • 每次只写入一条命令,因此更为可靠;
    • 对于大型数据集,AOF通常比RDB占用更少的磁盘空间。
    • Redis记录服务器接收到的所有写操作命令到一个追加日志文件(append only file)中。在Redis启动时,会通过载入这个追加日志文件来重建数据集。
    • AOF持久化的默认配置是每秒写一次追加日志文件,或者当接收到新的写命令时也会立即追加到日志文件。当然这个是可以配置的。
    • AOF文件的恢复过程比RDB更慢,但可以保证数据的完整性,并且可以避免因为数据写入磁盘而造成的性能损失。
    • AOF的优点是:
    • AOF的缺点是:

5、算法:给定n个任务,每个任务的执行时间都为1小时,但现在由于机械出现了故障,导致所有的任务延后了k个小时执行,costs[i]表示原定于第i个小时执行的任务延后一小时的损失。现在,需要重新规划任务流程,规定现在的执行时间不能早于原定的执行时间。返回最小损失

这道题可以用动态规划来解决。我们可以定义一个数组dp,其中dp[i]表示在i小时结束之前完成所有任务的最小损失。对于每个任务,我们都有两种选择:

  1. 在i小时执行任务:这种情况下,我们需要支付costs[i],并且后面的任务都会延后1小时执行。因此,后面的任务的损失也会增加。所以,在i小时执行任务的损失为costs[i] dp[i 1]。
  2. 不在i小时执行任务:这种情况下,后面的任务可以按照原定的时间执行。因此,在i小时不执行任务的损失为dp[i]。

我们需要选择这两种情况中的较小值作为dp[i]的值。最终,dp[n]就是我们的答案,表示在n小时结束之前完成所有任务的最小损失。

以下是Python代码实现:

代码语言:javascript复制
def min_loss(costs, n, k):  
    dp = [0] * (n   1)  
    for i in range(1, n   1):  
        for j in range(i   1, n   1):  
            dp[j] = max(dp[j], dp[i]   costs[i - 1]   min(dp[j], dp[j - 1]))  
    return dp[n]

其中,costs是一个长度为n的数组,表示每个任务延后一小时的损失。n表示任务的个数,k表示所有任务延后的总小时数。注意,这里我们将任务的执行时间都假设为1小时,因此k表示延后的总小时数。

6、给定一个数组arr,和一个长度k,我们可以将数组分隔为多个长度最大为k的子数组,在完成分隔后,子数组内所有值都会变为子数组中元素的最大值。返回最好的分隔方法下,数组元素之和

这道题可以使用贪心算法来解决。具体思路如下:

首先将数组arr按照长度k进行分隔,得到多个子数组。

对于每个子数组,将其中的元素取最大值,并将所有子数组中的最大值记录下来。

对于所有子数组中的最大值,取其中最小的一个作为整个数组arr的最大值。

返回所有子数组中的元素之和与原数组arr的元素之和的差值。

具体实现代码如下:

代码语言:javascript复制
def maximize_sum(arr, k):  
    # 将数组arr按照长度k进行分隔,得到多个子数组  
    subarrays = [arr[i:i k] for i in range(0, len(arr), k)]  
    # 对于每个子数组,将其中的元素取最大值,并将所有子数组中的最大值记录下来  
    max_values = [max(sub) for sub in subarrays]  
    # 对于所有子数组中的最大值,取其中最小的一个作为整个数组arr的最大值  
    max_value = max(max_values)  
    # 返回所有子数组中的元素之和与原数组arr的元素之和的差值  
    return sum(max_values) - sum(arr)

其中,arr表示原数组,k表示分隔后每个子数组的最大长度。函数返回所有子数组中的元素之和与原数组arr的元素之和的差值。

7、反问环节(做什么,技术栈,实习时间)

  • 原文链接:https://github.com/warthecatalyst/What-to-in-Graduate-School/blob/main/秋招的面经/华科计科第二人的秋招报告.md

0 人点赞