获得徽章 1
- #青训营笔记创作活动#
2023.1.26 打卡day43
作为开发者,我们应该要积极参与开源项目。今天这篇文章就以Hertz为例,让我学习到如何提交pull request,首先将Github的仓库fork到自己的账号中,然后本地git clone自己fork的仓库的,在本地进行代码编写,提交,git add、 git commit和git push到自己账号的仓库,在推送到fork的仓库后,就可以看到pull request的提示了,在提交PR之前要先填写相关的信息(介绍当前PR的类型,做了什么,解决了什么issue),之后就要等待仓库主人是否采用提交的PR即可。展开评论点赞 - #青训营笔记创作活动#
2023.1.25 打卡day42
当数据库单表数据量超过2000万行时,利用索引已经不能解决读写性能问题了(B+树的高度变高了,磁盘I/O次数增加了),这时我们需要采用其他方法如分库分表。今天这篇文章让我学习到三个方案来处理MySQL的大数据表(解决性能问题):方案一:采用表分区,将一个表的数据按照条件分布到不同的文件中,这些文件组成数据库的一张表。方案二:进行数据库分表,分为水平分表(将数据根据某种规则进行拆分)和垂直分表(将表的列即属性进行拆分)两种。方案三:进行冷热归档,将冷数据(不常使用的数据)存放归档,类似于分表。在实际情况中,我们要根据业务场景选择合适的方案。展开评论点赞 - #青训营笔记创作活动#
2023.1.24 打卡day41
作为开发者,我们不仅需要具有开发能力,还应具有Debug的技能,若是Java语言开发者,使用的IDE应该大多数都是IDEA,今天的这篇文章就是以IDEA这个开发工具为例,Debug最简单的一个步骤应该就是设置断点,然后开启Debug模式进行运行。在这篇文章中我还学习到如何设置静态断点(类似日志的作用),在函数式编程中调式Stream流。展开评论点赞 - #青训营笔记创作活动#
2023.1.23 打卡day40
Redis作为中间件,有着许多作用,如缓存,限流等。今天这篇文章让我学习到Token结合Redis实现限流(如令牌桶算法),如何利用ZSet存储定时任务,利用Redis中的Bitmaps类型设计布隆缓冲器,用于解决缓存穿透的问题,利用Redis实现幂等问题(如一个支付订单只能支付一次即使请求多次),利用Redis实现签到,登录接口限制次数等功能。展开评论点赞 - #青训营笔记创作活动#
2023.1.22 打卡day39
在Java程序中,很容易碰到空指针异常(NullProgation),即当我们想访问一个对象的属性或方法时,若这个对象为空时,程序就会报空指针异常,为了防止空指针异常,我们以前需要在访问对象之前,进行相应的为空检查。在Java8中,为了更方便的解决空指针异常问题,提出了Optional类。今天这篇文章让我学习到如何去使用Optional类,以及利用函数式编程,Lambda表达式来更灵活的利用Optional类。展开评论点赞 - #青训营笔记创作活动#
2023.1.21 打卡 day38
现在,大多数网上商城都会有秒杀业务,而要做到这个,系统需要具有高性能和高并发能力。今天这篇文章让我学习到了一些方法,步骤设计系统,如将秒杀页面静态化,即大部分商城信息相关的静态处理(无需经过服务器),只有点击秒杀按钮(且只有到达秒杀时刻,秒杀按钮才有效),才发送请求至服务器,若页面静态化还不够,就利用CDN技术(就近获取静态页面)。系统服务器采用分布式架构,进行负载均衡。用户发送请求至服务器后,首先要对商品查询库存(有库存才能下单,读多写少),所以要采用缓存机制,并且要将缓存预热(提前将部分数据写入缓存中)。对于库存的数量,进行预扣处理,当用户下单一定时间内未支付,就取消当前用户的订单,将库存增加。之后还有消息处理,用户请求限流处理。
展开评论点赞 - #青训营笔记创作活动#
2023.1.20 打卡day37
在当下,一个系统需要考虑到后期其用户数和数据量都是十分庞大,系统需要应对的并发请求量也都很大,尽管是可以采用分布式系统,但是为了系统有更好的性能,还需要使用缓存机制,一旦使用了缓存,那我们就要考虑当缓存出问题了该怎么办,这对系统的影响是很大的。今天这篇文章就让我学习到如何安全且正确的使用缓存机制,如热点数据和数据淘汰策略,避免缓存雪崩(将数据的过期时间按毫秒级别随机打散),预防缓存击穿(热点数据设置一个过期时间续期的操作),解决缓存穿透(采用布隆过滤器)和保证数据库和缓存一致性。展开评论点赞 - #青训营笔记创作活动#
2023.1.19 打卡day36
自从参加青训营,学习Go语言也有一段时间,但今天看了这篇文章,发现自己对于一些概念,知识的理解还是不够深。如其中select机制,range 是进行值拷贝和Golang的内存模型等评论点赞 - #青训营笔记创作活动#
2023.1.8 打卡day35
在当下,项目基本都为前后端分离,且大部分前后端数据传输是基于HTTP协议的,而此协议是无状态的,为了保证用户登录后,后台可知道,所以在用户登录后,服务端传送token给前端,浏览器接受,之后每次客户端发送请求就要加上token,从而表明身份。今天这篇文章是讲Hertz框架完成JWT认证授权,本质也就是利用JWT生成token,然后发送给客户端。展开评论点赞 - #青训营笔记创作活动#
2023.1.17 打卡day34
我们应该都知道MySQL底层默认实现方式为B+树的结构,那这是因为什么呢?今天这篇文章让我了解到,不采用二叉树和红黑树的原因是这两种结构终究是二叉的,当数据量非常大时,树的层树就会非常高,这就需要进行多次查询(即磁盘输入输出)。不使用B-tree的原因是虽然其是多叉树,但其每个结点除了存储索引还要存储数据,这样一个结点能够存储索引的量就相比B+树来说少很多。B+树就只有最底层才会存储实际数据,MySQL还对B+树进行了改造,底层叶子结点是构成双向链表。展开评论点赞