
获得徽章 1
- #青训营笔记创作活动#
2月14日打卡day33
今日学习redis的限流,介绍了令牌桶和漏桶,还学习了使用nginx实现限流的方式。还学习了布隆过滤器,幂等的实现,incr的作用评论点赞 - #青训营笔记创作活动#
2月13日打卡day32
今日学习go基础语法50问,1.使用值为 nil 的 slice、map会发生啥
允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 panic。
// map 错误示例
func main() {
var m map[string]int
m["one"] = 1 // error: panic: assignment to entry in nil map
// m := make(map[string]int)// map 的正确声明,分配了实际的内存
}
// slice 正确示例
func main() {
var s []int
s = append(s, 1)
}
复制代码
2.访问 map 中的 key,需要注意啥
当访问 map 中不存在的 key 时,Go 则会返回元素对应数据类型的零值,比如 nil、’’ 、false 和 0,取值操作总有值返回,故不能通过取出来的值,来判断 key 是不是在 map 中。
检查 key 是否存在可以用 map 直接访问,检查返回的第二个参数即可。
// 错误的 key 检测方式
func main() {
x := map[string]string{"one": "2", "two": "", "three": "3"}
if v := x["two"]; v == "" {
fmt.Println("key two is no entry") // 键 two 存不存在都会返回的空字符串
}
}
// 正确示例
func main() {
x := map[string]string{"one": "2", "two": "", "three": "3"}
if _, ok := x["two"]; !ok {
fmt.Println("key two is no entry")
}
}
展开评论点赞 - #青训营笔记创作活动#
2月12日打卡day31
今日学习mysql采用带双向指针的b+tree。
聚簇索引和非聚簇索引的根本区别:
聚簇索引中,表数据和索引数据是按照相同顺序存储的,非聚簇索引则不是。
聚簇索引在一张表中是唯一的,只能有一个,非聚簇索引则可以存在多个。
聚簇索引在逻辑+物理上都是连续的,非聚簇索引则仅是逻辑上的连续。
聚簇索引中找到了索引键就找到了行数据,但非聚簇索引还需要做一次回表查询。
InnoDB-非聚簇索引与MyISAM-非聚簇索引的区别:
InnoDB中的非聚簇索引是以聚簇索引的索引键,与具体的行数据建立关联关系的。
MyISAM中的非聚簇索引是以行数据的地址指针,与具体的行数据建立关联关系的。
一般来说,由于MyISAM引擎中的索引可以根据指针直接获取数据,不需要做二次回表查询,因此从整体查询效率来看,会比InnoDB要快上不少。
展开评论点赞 - #青训营笔记创作活动#
2月11打卡day30
今日学习mysql单表存储原理与建议大小。Mysql 的表数据是以页的形式存放的,页在磁盘中不一定是连续的。
页的空间是 16K, 并不是所有的空间都是用来存放数据的,会有一些固定的信息,如,页头,页尾,页码,校验码等等。
在 B+ 树中,叶子节点和非叶子节点的数据结构是一样的,区别在于,叶子节点存放的是实际的行数据,而非叶子节点存放的是主键和页号。
索引结构不会影响单表最大行数,2kw 也只是推荐值,超过了这个值可能会导致 B + 树层级更高,影响查询性能。
展开评论点赞 - #青训营笔记创作活动#
2月10日打卡day29
今日学习mysql,对于MySQL中大部分常用的命令基本上都已经罗列,以后如若忘记某个函数名称、某条语句的语法等等,都可以直接在本章中快捷搜索,但本篇仅仅只写出了基本的语法,实际数据库开发中往往还需要结合业务,来编写更为复杂的SQL语句~展开评论点赞 - #青训营笔记创作活动#
2月9日打卡day28
今日学习锁,了解了本地锁的缺点,学习了分布式锁的眼睛,及其问题解决方案,学习了redis处理分布式锁的流程,最后学习了红锁,解决分布式环境中redis的问题评论点赞 - #青训营笔记创作活动#
2月8日打卡day27
今日学习流程引擎,了解了为什么需要流程引擎,以及开发工作流时用到的一些工具。评论点赞 - #青训营笔记创作活动#
2月7日打卡day26
今日学习缓存,简要了解了缓存穿透(两边都没有命中)、缓存雪崩(缓存没有,全走数据库导致崩溃)、缓存击穿(热点数据缓存失效,数据库有,但是高并发导致数据库压力大),和其解决方案。评论点赞 - #青训营笔记创作活动#
2月6日打卡day25
今日学习缓存,对其的各个方面进行了一个简单的阐述与了解,也可以看出缓存对于一个软件系统的重要价值。通过对缓存的合理、充分利用,可以大大的增强我们的系统承压性能、提升产品的用户体验。
评论点赞 - #青训营笔记创作活动#
2月5日打卡day24
今日学习跨域问题解决方案,跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,想要解决跨域问题,只需要告诉浏览器“我是自己人,不要拦我”就行。它的常见实现方式有 5 种:通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域,通过 ResponseBodyAdvice 实现全局跨域。展开评论点赞