2024年 3、4月学习记录

少年应有鸿鹄志,当骑骏马塌平川!

3月学习记录

2024-3-7

今日打卡

leetcode练习

背面试题

Redis相关

  • Redis的集群模式:主从,哨兵,cluster三种。
  • Redis使用惰性删除+定期删除策略配合使用来对过期的key进行删除
  • Redis的持久化:aof日志(以追加的方式写入,主要记录的是操作),rdb(对所有键值对的记录),混合模式(aof和rdb两种模式的混合使用)

缓存雪崩:

  1. 大量数据同时过期
  • 均匀设计过期时间
  • 互斥锁
  • 双key策略
  • 后台更新缓存,定时更新,消息队列通知更新。
  1. Redis故障宕机
  • 服务熔断
  • 请求限流
  • 构建Redis高可用集群。

缓存击穿:

频繁访问的热点数据过期:

  • 互斥锁
  • 不给热点数据设置过期时间,由后台定期更新缓存

缓存穿透:

访问的数据既不再缓存也不在数据库

  • 非法请求的限制。
  • 缓存空值或默认值。
  • 使用布隆过滤器快速判断数据是否存在。

Redis的数据结构

Redis提供了常见的5种数据结构

字符串(string),哈希(hash),列表(list),集合(Set),有序集合(ZSet)

● String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。
● List 类型的应用场景:消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)等。
● Hash 类型:缓存对象、购物车等。
● Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
● Zset 类型:排序场景,比如排行榜、电话和姓名排序等。
● BitMap(2.2 版新增):二值状态统计的场景,比如签到、判断用户登陆状态、连续签到用户总数等;
● HyperLogLog(2.8 版新增):海量数据基数统计的场景,比如百万级网页 UV 计数等;
● GEO(3.2 版新增):存储地理位置信息的场景,比如滴滴叫车;
● Stream(5.0 版新增):消息队列,相比于基于 List 类型实现的消息队列,有这两个特有的特性:自动生成全局唯一消息ID,支持以消费组形式消费数据

学习Redis如何实现延迟队列.

采用zset来实现

Kafka面试题

Kafka的设计:

kafka是将消息以 topic 为单位归纳,发布消息的程序成为 Producer ,消费者的程序称为 Consumer

Kafka是以集群的方式运行的,可以由一个或多个服务组成,每个服务叫做 Broker, Producer通过网络将消息发送到 KafKa集群,集群向消费者提供消息,broker在中间起到一个代理保存消息的中间站。

2024-3-8

今日打卡

面试题

Redis

  • Redis实现分布式锁:
  • 1.使用set nx 命令,(解锁过程借助LUA脚本,解锁设计2部分,一部分是判断是否是自己的锁,另一部分就是删除锁操作,因为有2个操作,要保证一致性,所以采用LUA脚本来实现);
  • 2.RedLock(满足:一半以上结点响应,且响应时间小于设置的操作时间)。

敲代码:

完成12306模拟项目,用户模块部分接口的测试。

查看了基于asynq的定时任务模块,发现,好像火车时间没有改,所以查不出数据,哈哈哈哈。等后面写完了,再更新一下数据看看。

做题:

学习图相关

dfs和bfs,了解升读优先搜索和广度优先搜索。

dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。

bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。

2024-3-9

刷题:

算法学习:

学习了DFS和BFS

学习并查集算法

面试题:

Redis

  • 五种常见的Redis集合的实现

计网学习:

  • HTTPS,HTTP的握手过程

准备重新搭建自己的博客。

2024-3-10

参加了leetcode第 388 场周赛

A了2道题跑路,呜呜呜

刷题leetcode hot 100

面试题:

  • HTTP的RSA握手过程
  • 了解了一下HTTP/1.1,HTTP/2,HTTP/3
  • HTTP/3 的传输层采用的是UDP,通过QUIC协议 实现了 类似 TCP的可靠性传输
  • 了解IP协议相关技术:DNS,NAT,DHCP,ICMP

呜呜呜,继续修改我的破博客.菜弄到 Twikoo 的评论部分,呜呜呜。

2024-3-11

为面试做准备,背面试:

了解了一些限流算法:

  1. 固定窗口算法:设置固定时间内,处理请求的定值
  2. 滑动窗口算法:滑动窗口计数器是通过窗口再细分,并且按照时间滑动。避免了双倍请求突发
  3. 漏桶算法:
  4. 令牌桶算法:

了解了一些常见的负载均很该算法:

  1. 轮询
  2. 加权轮询
  3. 随机
  4. 最少连接
  5. 源IP哈希
  6. 响应时间
  7. 加权响应时间
  8. 一致性哈希
  9. 动态调整权重

Redis 的缓存

如何避免缓存雪崩?缓存击穿?缓存穿透?

缓存雪崩:

1.把key的过期时间设置均匀;

2.不设置过期时间,我们可以通过后台服务来更新缓存数据,从而避免因为缓存失效造成的缓存雪崩,也可以在一定程度上避免缓存并发问题。

缓存击穿:

如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。

  • 互斥锁方案(Redis 中使用 setNX 方法设置一个状态位,表示这是一种锁定状态),保证同一时间只有一个业务线程请求缓存,未能获取互斥锁的请求,要么等待锁释放后重新读取缓存,要么就返回空值或者默认值。
  • 不给热点数据设置过期时间,由后台异步更新缓存,或者在热点数据准备要过期前,提前通知后台线程更新缓存以及重新设置过期时间;

缓存穿透:

  1. 非法请求的限制
  2. 设置空值或默认值
  3. 使用布隆过滤器

看了会MYSQL面试题

2024-3-12

今天电脑屏幕坏了,拿去修,没有什么记录。

大概就看了一下面试题

了解了Redis里面DB结构

dict

RedisObj

原来Redis里面的Rehash() 也是采用渐进式的,我之前就看到go里面的hash扩容是渐进式的。

了解了各种数据类型的实现

  1. string
  2. list
  3. hash
  4. set
  5. zset
  6. bitmap
  7. hyperloglog(这个没看明白)
  8. geo
  9. stream

SDS,链表,压缩链表,哈希表,整数集合,跳表,quicklist,listpack

别说,我觉得跳表的设计还蛮厉害的,

2024-3-13

准备字节一面中,下午4点准备一面。加油。

学习打卡:

  • 指针在go中的作用:1,引用传递;2.动态内存分配;3.修改函数外部变量;4.数据结构底层操作;5.低级内存操作;6接口实现

做题:

都是回溯算法。dfs的求解过程。

2024-3-14

准备面试题:

  • 看了同步/异步,阻塞/非阻塞。(同步,异步其实是接收方返回消息的方式)(阻塞,非阻塞看的是发送方等待的时候的状态)

刷题:

2024-3-15

起床学习啦!!!

刷题:

leetcode终于300题了。

看面试题

2024-3-16

刷题:

2024-3-17

看面试题:

  • 负载均衡算法

刷题:

算法图的遍历

广度优先

深度优先

2024-3-18

刷题:

LeetCode 热题100 复习

面试题:

关于跨域问题和两种请求(简单请求和非简单请求)

2024-3-20

字节二面挂了。

怎么说呢,系统设计的题目,只是简单回答了一下流程,没有从一个系统去思考。

虽然很难过,但是确实还是学到了东西。

2024-3-22

极客兔兔动手写Gee-web完成。

Gee-ORM完成第二天。

继续加油吧。

面经:

  • 计算机网络大概看了一下

了解了HTTP1.1中host字段的作用

请求行

请求头部

空行

请求体

同时了解到

301和302的重定向。

2024-3-27

云原生学习

K8S学习

2024-3-28

看了一些华为的面经和小米的面经。

同时开始改了一下博客的主题。

2024-3-29

准备看看华为编程题:

2024-3-30

看看华为编程题:

看一会面经:

  • 再看一看Redis主从复制的步骤。(主要从三个方面去回答:1.第一次同步的时候采用全量同步,2.建立连接后会采用长连接传输命令 3.在出现网络故障的时候,采用增量同步,发送offset,告诉主服务器,同步偏移量。)
  • 看看哨兵模式

2024-3-31

3月的最后一天!!!

下个月也要加油!!!

今日学习情况:

LeetCode周赛 391场

刷题:

4月学习记录

2024-4-1

计划学习 k8s

以前一直想系统把k8s学一遍,励志一个月学完K8s

2024-4-3

刷题,准备华为笔试:

学习微服务的拆分原则:

限流算法:

  • 固定窗口限流
  • 滑动窗口限流
  • 漏桶算法
  • 令牌桶算法

2024-4-5

了解了go的指针

学习了go的cancle context

华为笔试刷题:

2024-4-6

刷题记录:

2024-4-8

开始打卡Leetcode sql 50 题

2024-4-9

Leetcode 每日一题打卡

参加了恒生电子的笔试(笔试还是比较简单的

明天面试恒生电子

还有明天华为笔试

2024-4-10

LeetCode 每日一题打卡

hot 100

恒生电子面试:

感觉还行,面试官还好,问的倒不多,就不赘述了

华为笔试

拿了293分,怎么说呢,第一题什么情况,居然没过。继续努力!!!

2024-4-11

leetcode刷题

好好准备面试题了。

开始刷刷洛谷题单:(好久没写 lc 了)

入门1:

入门一,完成。

2024-4-13

leetcode每日一题

面试题:

os:

  • 为什么需要虚拟内存?

刷题:hot 100 完成啦!!!

2024-4-17

好几天没有记录,是由于学校体测摔伤了(呜呜呜

目前hot100 正式完成(上次忘记提交了

每天一个算法:

  • 递归

刷题:1600-1700

2024-4-18

背了一会计网面试题(HTTP报文的格式,HTTPS和HTTP,RSA握手)

看了一下os几个面试题,同步,异步,阻塞,非阻塞为什么需要虚拟内存,还有死锁的四个条件(互斥条件,占有且等待,不可强剥夺,循环等待)

Leetcode刷题:

谐云二次面试

一面:30分钟

二面:30分钟

面试的问题都比较基础,这里就不赘述了,还不清楚结果,希望能过吧。(让我拿一个offer吧,想去实习多学点东西

2024-4-19

谐云过了。今天去看了一下,技术栈基本符合我。

准备去锻炼一下自己。加油!!!!

2024-4-20

LeetCode

看会CSAPP(以前看过一点,打算重头看一遍

第一章 ok

算法学习:

dijastra算法,邻接矩阵+邻接表

八股:

  • 常见的HTTP状态码

2024-4-21

leetcode周赛

a了两道题,还是得加油。发现自己对于图类的算法不是很熟悉。后面可能加强一下对于图类算法的训练。

看面试题,主要去总结了一下部分回答:

redis:

  • redis的数据类型
  • redis的常见使用场景
  • redis的持久化
  • redis缓存相关
  • redis分布式锁的实现
  • redis的线程模型

加油。

2024-4-22

leetcode:

算法学习:

dijastra模板:

type pair struct {
dis, x int
}
type hp []pair

func (h hp) Len() int {
return len(h)
}
func (h hp) Less(i, j int) bool {
return h[i].dis < h[j].dis
}
func (h hp) Swap(i, j int) {
h[i], h[j] = h[j], h[i]
}
func (h *hp) Push(v any) {
*h = append(*h, v.(pair))
}

func (h *hp) Pop() (v any) {
a := *h
*h, v = a[:len(a)-1], a[len(a)-1]
return
}

func dijastra(n int, edges [][]int) []int {
type edge struct {
to, w, i int
}
g := make([][]edge, n)
for i, e := range edges {
x, y, w := e[0], e[1], e[2]
g[x] = append(g[x], edge{y, w, i})
g[y] = append(g[y], edge{x, w, i})
}
dis := make([]int, n)
for i := 0; i < n; i++ {
dis[i] = math.MaxInt
}
h := hp{{dis: 0, x: 0}}
for len(h) > 0 {
p := heap.Pop(&h).(pair)
x := p.x
if p.dis > dis[x] {
continue
}
for _, e := range g[x] {
y := e.to
newD := p.dis + e.w
if newD < dis[y] {
dis[y] = newD
heap.Push(&h, pair{newD, y})
}
}
}
return dis
}

学习:

  • go语言编译成中间汇编代码:go build -gcflags “-S” main.go

面试题:

  • go语言的gc,更加了解了插入屏障和删除屏障,还有混合屏障的作用。

2024-4-23

  • 今天来谐云报道了,准备实习了,主要业务是云原生相关的,非常符合我以后的规划,同时也是golang。
  • 今天并没有做什么事,就是看了一下k8s的基础组件

2024-4-25-29

  • 学习k8s基础知识
  • 安装了minikube
  • 操作kubectl
  • 看官方文档
  • 了解kube-poxy的工作机制,利于哦那个防火墙,iptables 转发请求
  • 学习client-go操作k8s
  • 自定义资源,crd
  • 看了一会k8s的面试题,大概了解了一下,就是感觉k8s真的好大哇,功能好多。

其实对于25届的我们来说,战线还是很长的,继续加油,29号晚上还有个笔试。华为那边打电话了,说是5月7,8,9号。
准备5月7号线下去面试。

CS自学指南学习打卡

编程入门

MIT-Missing-Semester

第一节:Course overview + the shell https://missing.csail.mit.edu/2020/course-shell/

第二节:Shell Tools and Scripting https://missing.csail.mit.edu/2020/shell-tools/

第三节 编辑器 (Vim) Editors (Vim) · Missing Semester (mit.edu)