前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >拿下!图森未来-算法后端平台一面过了!

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

作者头像
千羽
发布2023-12-13 15:24:59
2170
发布2023-12-13 15:24:59
举报
文章被收录于专栏:程序员千羽

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

下面分享我认识的一位大佬华中科技大学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 STATUS\G;

检查结果中的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/%E7%A7%8B%E6%8B%9B%E7%9A%84%E9%9D%A2%E7%BB%8F/%E5%8D%8E%E7%A7%91%E8%AE%A1%E7%A7%91%E7%AC%AC%E4%BA%8C%E4%BA%BA%E7%9A%84%E7%A7%8B%E6%8B%9B%E6%8A%A5%E5%91%8A.md
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 千羽的编程时光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、自我介绍
  • 2、项目经历
  • 3、MySQL如何解决分布式的主从复制(binlog半同步复制)
  • 4、redis如何实现持久化
  • 5、算法:给定n个任务,每个任务的执行时间都为1小时,但现在由于机械出现了故障,导致所有的任务延后了k个小时执行,costs[i]表示原定于第i个小时执行的任务延后一小时的损失。现在,需要重新规划任务流程,规定现在的执行时间不能早于原定的执行时间。返回最小损失
  • 6、给定一个数组arr,和一个长度k,我们可以将数组分隔为多个长度最大为k的子数组,在完成分隔后,子数组内所有值都会变为子数组中元素的最大值。返回最好的分隔方法下,数组元素之和
  • 7、反问环节(做什么,技术栈,实习时间)
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档