第六届字节跳动青训营第五课 | 豆包MarsCode AI 刷题

63 阅读5分钟

版本号比较

问题描述

在某个项目中,每个版本都用版本号标记,由一个或多个修订号组成,修订号之间由点号.分隔。每个修订号可能有多位数字,并且可能会包含前导零。你需要根据两个版本号 version1version2,判断哪个版本更新,或者它们是否相同。

例如,2.5.330.1 都是有效的版本号。

当比较两个版本时,从左到右依次比较它们的修订号。忽略每个修订号的前导零,直接比较修订号对应的整数值。如果其中一个版本没有足够的修订号,缺失部分默认补为0

你需要根据以下规则返回比较结果:

  • 如果 version1 > version2,返回 1
  • 如果 version1 < version2,返回 -1
  • 如果两个版本相等,返回 0

测试样例

样例1:

输入:version1 = "0.1" , version2 = "1.1"
输出:-1

样例2:

输入:version1 = "1.0.1" , version2 = "1"
输出:1

样例3:

输入:version1 = "7.5.2.4" , version2 = "7.5.3"
输出:-1

样例4:

输入:version1 = "1.0" , version2 = "1.0.0"
输出:0

:::success 模拟

:::

def solution(version1, version2):
    # Edit your code here
    vers1 = list(map(int, version1.split('.')))
    vers2 = list(map(int, version2.split('.')))
    i = 0
    l1, l2 = len(vers1), len(vers2)
    res = 0
    while True:
        if i >= l1 and i >=l2:
            res = 0
            break
        if i >= l1 and vers2[i] > 0:
            res = -1
            break
        
        if i >= l2 and vers1[i] > 0:
            res = 1
            break
        if i >= l1 or i >=l2:
            i += 1
            continue
        if vers1[i] > vers2[i]:
            res = 1
            break
        elif vers1[i] < vers2[i]:
            res = -1
            break

        i += 1
        

    # print(res)
    return res


if __name__ == "__main__":
    # Add your test cases here

    print(solution("0.1", "1.1") == -1)
    print(solution("1.0.1", "1") == 1)
    print(solution("7.5.2.4", "7.5.3") == -1)
    print(solution("1.0", "1.0.0") == 0)

比赛配对问题

问题描述

小R正在组织一个比赛,比赛中有 n 支队伍参赛。比赛遵循以下独特的赛制:

  • 如果当前队伍数为 偶数,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。
  • 如果当前队伍数为 奇数,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。

小R想知道在比赛中进行的配对次数,直到决出唯一的获胜队伍为止。


测试样例

样例1:

输入:n = 7
输出:6

样例2:

输入:n = 14
输出:13

样例3:

输入:n = 1
输出:0

:::success 模拟

:::

def solution(n: int) -> int:
    # write code here
    res = 0
    while n != 1:
        if n % 2 == 0:
            res += n // 2
            n = n // 2
        else:
            res += n // 2
            n = n // 2 + 1
    return res

if __name__ == '__main__':
    print(solution(7) == 6)
    print(solution(14) == 13)
    print(solution(1) == 0)
    

刷抖音网络是怎么交互的?

  • 网络接入
  • 网络传输

网络接入-ARP协议 查找下一跳IP地址,不是目标地址

  • 逻辑同网段才能发送ARP ---- 你的手机是否通过ARP获得抖音的ip?当然不是!因为不再同一网段
  • ARP请求广播,ARP应答单播
  • 免费ARP?ARP代理? 免费ARP是一台新机器加入网段通知其他机器更新ARP缓存,用来提高效率,另外可以避免IP冲突。 ARP代理相当于ARP劫持

网络接入-IP协议

  • 唯一标识,互联网通用。抖音客户端一个,抖音服务端一个。
  • Mac地址不能代替IP地址吗? 有的老设备没有mac地址,为了向下兼容,有封装了一层IP地址
  • IPV4不够用,一般怎么解决? IPV6, NAT

网络接入-NAT

  • 家里路由器是怎样上网的?
  • 多个内网客户端访问同一个目标地址+端口,源端口恰好一样,冲突了? NAT是IP+端口

网络传输-数据包

网络传输-先请求DNS

UDP

TCP

HTTP/HTTP1.1

网络架构怎么给抖音提质

  • 网络提速
  • 网络稳定

网络提速- HTTP2.0

网络提速-怎么理解多路复用/stream?

  • 单个TCP链路传输
  • 如果TCP丢包怎么办?

网络提速-QUIC/HTTP3.0

  • TCP or UDP? UDP
  • Kernel or Usersapce Userspace
  • 0 RTT
  • 弱网优势

网络提速-数据中心分布

同运营商访问

静态资源,路径优化(CDN)

动态API, 路径优化(DSA)

网络稳定-容灾

  • 故障发生
  • 故障感知
  • 自动切换
  • 服务恢复

网络稳定-故障排查

  • 故障明确
  • 故障止损
  • 分段排查

出现什么故障?-》沟通是前提

  • 什么业务?什么接口故障?
  • 故障体现在哪里?
  • 访问其他目标是否正常?
  • 是否修改导致的异常?

替换函数

问题描述

给定一个字符串s_s_,编写一个函数,将字符串中的小写字母a替换为"%100",并返回替换后的字符串。

例如,对于字符串"abcdwa",所有a字符会被替换为"%100",最终结果为%100bcdw%100"


测试样例

样例1:

输入:s = "abcdwa"
输出:'%100bcdw%100'

样例2:

输入:s = "banana"
输出:'b%100n%100n%100'

样例3:

输入:s = "apple"
输出:'%100pple'

:::success 模拟

:::

def solution(s: str) -> str:
    # write code here
    i = 0
    n = len(s)
    while i < n:
        if s[i] == "a":
            s = s[:i] + "%100" + s[i+1:]
            i += 3
            n += 3
        i += 1
    # print(s)
    return s


if __name__ == '__main__':
    print(solution(s="abcdwa") == '%100bcdw%100')
    print(solution(s="banana") == 'b%100n%100n%100')
    print(solution(s="apple") == '%100pple')