
获得徽章 1
- #青训营笔记创作活动#
2月13日 打卡day15
在项目报错或者后续的其他问题复查都会去看日志信息,主要通过使用Linux的cat、tail命令来查看日志信息评论点赞 - #青训营笔记创作活动#
2月11日 打卡day14
编程思维思考方式考虑问题的关注点对于服务端编程很重要
微服务有单一职责、团队独立、技术独立、数据库分离、独立部署这几个重要的特点评论点赞 - #青训营笔记创作活动#
2月10日 打卡day13
学习了golang的容易被忽略的问题,包含一些数据结构的底层实现和go语言的一些特性,加深对golang的认识
评论点赞 - #青训营笔记创作活动#
2月1日 打卡day12
注释尽可能全面,写有意义的方法注释
项目拆分合理的目录结构
不在循环里远程调用、或者数据库操作,优先考虑批量进行
封装方法形参
封装通用模板
封装复杂的逻辑判断条件
保持优化性能的嗅觉
可变参数的配置化处理
会总结并使用工具类
控制方法函数复杂度
在finally块中对资源进行释放
把日志打印好
考虑异常,处理好异常
考虑系统、接口的兼容性
代码采取措施避免运行时错误展开评论点赞 - #青训营笔记创作活动#
1月29日 打卡day11
Redis 是一款优秀的缓存中间件,Redis(Remote Dictionary Server)是一个开源的、键值对型的数据存储系统。本文介绍了Redis基本知识。评论点赞 - #青训营笔记创作活动#
1月23日 打卡day10
刚插上网线,获取IP的方式主要有两种,一种是手动在电脑中配置,第二种是通过DHCP动态主机配置协议;DHCP的工作原理就是向某个管理IP分配的服务器申请IP地址,总共有四个阶段。
DHCP Discover:在联网时,本机由于没有IP,也不知道DHCP服务器的IP地址是多少,所以根本不知道该向谁发起请求,于是索性选择广播,向本地网段内所有人发出消息,询问"谁能给个IP用用"。
DHCP Offer:不是DHCP服务器的机子会忽略你的广播消息,而DHCP服务器收到消息后,会在自己维护的一个IP池里拿出一个空闲IP,通过广播的形式给回你的电脑。
DHCP Request:你的电脑在拿到IP后,再次发起广播,就说"这个IP我要了"。
DHCP ACK:DHCP服务器此时再回复你一个ACK,意思是"ok的"。你就正式获得这个IP在一段时间(比如24小时)里的使用权了。后续只要IP租约不过期,就可以一直用这个IP进行通信展开评论点赞 - #青训营笔记创作活动#
1月14日 打卡day9
InnoDB中B+树的高度一般保持在三层以内会比较好
每个索引都会有一颗单独的树,最后一层存储数据(叶子节点),上层存储索引
非聚簇索引需要进行回表查询数据具体内容
如果行超过最大行长度,则将可变长度列用外部页存储,直到该行符合最大长度限制
Innodb的B+树中,节点被称之为页,页是InnoDB存储引擎管理数据库的最小磁盘单位,页中需要存储页格式和行格式信息
使用DYNAMIC创建表时,InnoDB会将较长的可变长度列存储到一个溢出页上
页中按照主键大小顺序串成了单链表,所有正常的记录划分为几个组,每个组中最后一条记录在页面中的地址偏移量单独提取出来,按顺序存储到靠近页尾部的地方,这个地方就是页目录,而上述的地址偏移量就是该记录的真实数据与页面中第 0 个字节之间的距离,这些地址偏移量被称为槽
展开评论点赞 - #青训营笔记创作活动#
12月25日 打卡day8
计数器:
优点:固定时间段计数,实现简单,适用不太精准的场景;
缺点:对边界没有很好处理,导致限流不能精准控制。
滑动窗口:
优点:将固定时间段分块,时间比“计数器”复杂,适用于稍微精准的场景;
缺点:实现稍微复杂,还是不能彻底解决“计数器”存在的边界问题。
漏桶:
优点:可以很好的控制消费频率;
缺点:实现稍微复杂,单位时间内,不能多消费,感觉不太灵活。
令牌桶:
优点:可以解决“漏桶”不能灵活消费的问题,又能避免过渡消费,强烈推荐;
缺点:实现稍微复杂,其它缺点没有想到。
Redis + Lua 分布式限流:
优点:支持分布式限流,有效保护下游依赖的服务资源;
缺点:依赖 Redis,对边界没有很好处理,导致限流不能精准控制。展开评论点赞 - #青训营笔记创作活动#
12月22日 打卡day7
通过通讯实现共享内存
每个goroutine之间通过channel通讯来实现数据共享
通过channel阻塞来实现锁的作用
进程的三种状态:执行、阻塞、就绪
执行:进程正在运行中,正在使用CPU的进程
阻塞:进程因为某些需要的资源得不到满足而挂起,不占用CPU资源
就绪:一个状态所需要的资源都准备好了,可以继续执行
协程存在于进程类似的调度机制
goroutine在等待chan返回数据的时候,会陷入阻塞状态
channel实际上是一个环形队列
无缓冲chan:如make(chan struct{}),这种chan会在发送的时候阻塞,直到另一个协程从中获取数据
nil chan:如var ch chan int,此时写入或读取会永久阻塞并报错
可以使用close()关闭channel,此时可以从中获取数据
len()可以查询chan长度,cap()可以查询管道的容量
chan:既可以读又可以写
chan<-:只可以读
<-chan:只可以写
无方向chan可以转换为有方向的,反之不行
for range可以用来从chan中读取数据,它会循环,直到chan关闭
可以使用select同时监听几个chan
case <-time.After(time.Millisecond * 100)
struct{}{}展开评论点赞 - #青训营笔记创作活动#
12月21日 打卡day6
interface{}不知道传入的数据类型,如果希望校检传入的类型需要用到反射
1、反射可以将接口类型的变量转换成反射类型的对象
2、反射可以将反射类型的对象转换成接口类型的变量
3、运行时要去修改反射类型的对象,要求这个对象对应的值是可写的
反射类型的对象reflect.Type和reflect.Value可以通过reflect包中TypeOf()和ValueOf()函数得到
reflect.Type是一个接口,用于操作变量的类型信息,类型信息只能读取
reflect.Value是一个结构体,通过这个结构体可以操作变量的值展开评论点赞