写点什么

ARTS 打卡 Week4

作者:WaitBright
  • 2023-09-11
    北京
  • 本文字数:1477 字

    阅读完需:约 5 分钟

ARTS 打卡 Week4

Algorithm

Go 版本实现如下

func removeElement(nums []int, val int) int {    i := 0    length := len(nums)    for i < length {        if nums[i] != val {            i++            continue        }        nums[i] = nums[length-1]        nums[length-1] = 0        length--    }    return length}
复制代码
  • 思路:题目本身不难,但是要理解题意:不要使用额外的数组空间,仅使用 O(1) 额外空间并原地修改输入数组,说明不能借助新数组。

  • 实现方式:从左向右遍历,相等元素用后面替换,不等元素跳过,同时更新数组长度。

Review

  1. 这一章的第 5 点讲数据库设计,需要明确的点有:(1)需要存储的数据量及每条数据的大小。(2)该短链接服务需要设计两张表,URL 映射表和用户表。(3) 数据的存储结构,使用关系型还是 NoSQL。

  2. 第 6 节讲基础系统设计和算法,主要考虑的问题有:(1)如何设计原始 URL 编码方式,需要考虑压缩的位数,不同位数可以采用不同的 hash 算法。(2)Key Generation Service (KGS) key 生成服务离线随机生成字符串,方便快速对 URL 编码和保证生成的短链接不重复。(3)KGS 单点故障问题需要考虑服务的冗余备份。

  3. 第 7 节讲分区备份问题,要考虑服务的可扩展性和安全性。可以采用区间分区和哈希分区。

  4. 第 8 节讲缓存,需要考虑的问题点:(1) 是否需要用缓存,该服务读多写少,且是 heavy-read 类型服务,为了提高访问效率和减少数据库压力,采用缓存非常合适。(2)缓存什么数据,根据前面分析结论了解到 20%的资源被 80%用户访问,所以其实只用缓存 20%经常使用的 URL 即可。(3)缓存淘汰策略怎么选,LRU 是首选,能让不经常访问的资源淘汰符合要求。

  5. 第 9 节讲负载均衡,首推轮询,这种方式简单易操作,但是没有考虑每个服务器的负载情况,如果想更加智能可以加服务器负载纳入权重。

  6. 最后三节是一些收尾工作,包括定时清除过期的 URL,数据统计以及安全和权限的知识,这些可以交给第三方工具处理。

Technique/Tips

继续学习 Go 的相关技巧,这次学习的内容是 Go 中 option 设计模式。

  • 首先明确使用场景:一般是用在初始化数据的时候,有些字段是必须要初始化的,而有些则是不用。那些不用初始化的字段就被称为可选项。用户根据自己的实际需求对其进行初始化。

  • 然后知道使用方式:1.定义一个函数类型: type UserOption func(user *User) 2. 写一些可选函数 func WithUserPassword(password string) UserOption, func WithUserName(name string) UserOption。 3.定义一个初始化结构体方法

func NewUser(username string, age int, opts...UserOption) *User {    user := &User{        Username: username,        Age: age,    }    for _, opt := range opts {        opt(user)    }    return user}
复制代码
  • 最后需要掌握 Option 变种,修改 Option 函数签名的返回值,这种模式可以用作对 Option 函数的参数进行校验。由于这里发生了变更,导致初始化结构体的方法也需要做出相应的变化。

Share

  • 第1期 | 聊聊有效学习这件事 (geekbang.org)

  • 这次想分享的话题是:有效学习。下面是一些看法。

  • 首先要自己主动想学,爱学,这个是原动力,也是最重要的。

  • 然后要带着明确的目标或任务去学习,不然会很容易放弃。

  • 接着就是实践,这一步需要拆解目标,越具体越好,有个小技巧,可以在固定时间学习。

  • 最后一定要有产出,不然和玩手机、看电影在本质上并没有太大的区别。

发布于: 刚刚阅读数: 6
用户头像

WaitBright

关注

还未添加个人签名 2018-09-27 加入

还未添加个人简介

评论

发布
暂无评论
ARTS 打卡 Week4_ARTS 打卡计划_WaitBright_InfoQ写作社区