获得徽章 1
#青训营笔记创作活动#
2月23日 Day43
今日学习:同步原仓库的修改
在你开发的过程中,可能会有其他开发同学已经把自己的PR merge到main分支了。

那么这时候我们就把修改merge到自己的开发分支。

添加原始仓库作为upstream仓库
git remote add upstream [HTTPS]
获取原始仓库的变更
git fetch upstream
合并更改
git merge upstream/main
解决冲突并push到自己的开发分支
Step3:Fix原仓库维护者提出的建议
提完PR之后,我们需要确保所有单测和校验能通过。

同时也会有原仓库的维护人提出一些建议,需要我们去solve

单测需要补全

文档需要补充

代码实现逻辑有问题

等等开发并推送远端分支
通常开发需要包括实现代码、单测、README等

在完成了一些开发时,我们可以开始git 一键三连

git status

git add [YOUR FILE]

git commit -m [YOUR COMMIT MESSAGE]

git push origin [YOUR BRANCH]

单测结合github action
一般开源库都会结合github action进行单测流水线化,目录中会有.github/workflows/xxx.yml等文件,通过这些文件可以在提出pr、push等阶段进行校验。

因此,我们也需要更改这些文件,确保能执行自己的单测。
展开
评论
#青训营笔记创作活动#
2月22日 Day42
今日学习:Debug
快速执行到某个位置
有时候我们的断点没有设置在某个位置,但是也不想设置在哪个位置; 在Debug的时候想让程序直接运行到那个位置,怎么处理?

第一种方式: 鼠标移动到对应的行数,然后按下run to cursor按钮

第二种方式:直接点击文件旁边的数字即可,运行到对应的行哪里

回退重新开始执行
在一些复杂的链路中,方法调用很长,手一抖结果代码又运行了几行,这个时候想去重新开始执行这个断点怎么办?

常规操作是再模拟发出个请求,重新进入断点; 但其实Idea已经提供了对应的方式,直接撤回当前的帧即可,断点会重新进入方法开始执行。

在Frame的位置点击撤回按钮,就会重新进入这个方法开始运行
展开
评论
#青训营笔记创作活动#
2月21日 Day41
今日学习:表分区有什么好处?

与单个磁盘或文件系统分区相比,可以存储更多的数据。

对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。

一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这么做时,可以重新组织数据,来提高那些常用查询的效率。

涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理。这种查询的一个简单例子如 “SELECT salesperson_id, COUNT (orders) as order_total FROM sales GROUP BY salesperson_id;”。通过“并行”,这意味着该查询可以在每个分区上同时进行,最终结果只需通过总计所有分区得到的结果。

通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
展开
评论
#青训营笔记创作活动#
2月20日 Day40
今日学习:固定,滑动窗口计数和登录失败逻辑
固定窗口计数是指,假设我们的限流规则是:1min内最多只能访问10次,那么固定窗口就是固定了【 1min-2min】这个窗口内,只能有10次访问 ,相应的我们就要给这个窗口维护一个计数器。 为了节省空间,其实我们不需要维护一个个窗口,只需要维护当前访问时间所在的窗口即可,以及对应的计数器,当新的访问到达了下一个窗口时,则计数器重置即可。
redis实现
用redis的话,由于有过期机制,其实设置1min过期,就可以实现计数器重置的效果了
redis设置一个名为qps的key,val用来计数,1min过期即可
滑动窗口计数
假设我们的限流规则是:1min内最多只能访问10次,那么滑动窗口呢就是会根据你访问进来的时间,以访问时间作为区间末尾,当前时间-1min作为区间头部,相当于窗口一直在往右滑动,这样其实就能在一定程度上解决我们刚才提到的窗口临界问题
登录失败的逻辑
先判断是否有 login_bank:+账号+ip的key,有则直接限制登录
没有,若登录失败,则 login_error:+账号+ip的 val++, 若val达到5了,则设置一个 login_bank:+账号+ip的key,10min过期
并删除掉 login_error:+账号+ip
展开
评论
#青训营笔记创作活动#
2月19日 Day39
今日学习:Optional
Java 8 引入了一个十分实用的 Optional 类,它主要是为了解决空指针异常(NullPointerException)。当我们对对象的属性进行检查,判断它的值是否为期望的格式,最终却发现我们查看的并不是一个对象,而是一个空指针,它会立即抛出一个让人厌烦的 NullPointerException 异常。
Optional 是 Java 语言的有益补充 —— 它旨在减少代码中的 NullPointerExceptions。

通过设计,自然的融入了 Java 8 函数式支持。

总的来说,这个简单而强大的类有助于创建简单、可读性更强、比对应程序错误更少的程序。
展开
评论
#青训营笔记创作活动#
2月18日 Day38
今日学习:负载均衡之【LVS】
LVS,它的全称是Linux VirtualServer,它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。

负载均衡之【Nginx】
Nginx是一款非常高性能的http代理/反向代理服务器,服务开发中也经常使用它来做负载均衡。Nginx实现负载均衡的方式主要有三种:轮询、加权轮询、ip hash轮询。
展开
评论
#青训营笔记创作活动#
2月16日 Day36
今日学习:Printf()、Sprintf()、Fprintf()函数的区别用法是什么
都是把格式好的字符串输出,只是输出的目标不一样。

Printf(),是把格式字符串输出到标准输出(一般是屏幕,可以重定向)。Printf() 是和标准输出文件 (stdout) 关联的,Fprintf 则没有这个限制。

Sprintf(),是把格式字符串输出到指定字符串中,所以参数比printf多一个char*。那就是目标字符串地址。

Fprintf(),是把格式字符串输出到指定文件设备中,所以参数比 printf 多一个文件指针 FILE*。主要用于文件操作。Fprintf() 是格式化输出到一个stream,通常是到文件。
展开
评论
#青训营笔记创作活动#
2月15日 Dya35
今日学习:用户登陆(认证)
服务器需要在用户第一次登陆的时候,验证用户账号和密码,并签发 jwt token。
Authenticator:用于设置登录时认证用户信息的函数,demo 当中定义了一个 loginStruct 结构接收用户登陆信息,并进行认证有效性。这个函数的返回值 users[0] 将为后续生成 jwt token 提供 payload 数据源。
PayloadFunc:它的入参就是 Authenticator 的返回值,此时负责解析 users[0],并将用户名注入 token 的 payload 部分。
Key:指定了用于加密 jwt token 的密钥为 "secret key"。
Timeout:指定了 token 有效期为一个小时。
MaxRefresh:用于设置最大 token 刷新时间,允许客户端在 TokenTime + MaxRefresh 内刷新 token 的有效时间,追加一个 Timeout 的时长。
展开
评论
#青训营笔记创作活动#
2月14日 Day34
今日学习:局部性原理
局部性原理的思想比较简单,比如目前有三块内存页x、y、z是相连的,CPU此刻在操作x页中的数据,那按照计算机的特性,一般同一个数据都会放入到物理相连的内存地址上存储,也就是当前在操作x页的数据,那么对于y,z这两页内存的数据也很有可能在接下来的时间内被操作,因此对于y,z这两页数据则会提前将其载入到高速缓冲区(L1/L2/L3),这个过程叫做利用局部性原理“预读”数据。
展开
评论
#青训营笔记创作活动#
2月13日 Day33
今日学习:Mysql
Mysql 的表数据是以页的形式存放的,页在磁盘中不一定是连续的。

页的空间是 16K, 并不是所有的空间都是用来存放数据的,会有一些固定的信息,如,页头,页尾,页码,校验码等等。

在 B+ 树中,叶子节点和非叶子节点的数据结构是一样的,区别在于,叶子节点存放的是实际的行数据,而非叶子节点存放的是主键和页号。

索引结构不会影响单表最大行数,2kw 也只是推荐值,超过了这个值可能会导致 B + 树层级更高,影响查询性能。

展开
评论
#青训营笔记创作活动#
今日学习:Mysql
MySQL数据库函数
MySQL中提供了丰富的函数支持,包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等,通过这些函数,一方面可以简化业务的代码量,另一方面还能更好的实现各类特殊业务需求,下来一起来聊聊MySQL支持的函数
MySQL的错误信息由ErrorCode、SQLState、ErrorInfo三部分组成,即错误码、SQL状态、错误信息三部分组成,
展开
评论
#青训营笔记创作活动#
2月11日 Day31
今日学习:分布式锁的介绍
本地锁失效是因为无法锁住各个应用的读写请求,失效的根本原因就是其他的服务无法感知到是否已经有请求上锁了,即无法共享锁信息。

分布式锁,其实也就是将加锁的这一个操作,单独的抽取出来了,让每个服务都能感知到。

之前就说了,软件架构设计中,"没有什么是加一层解决不了的,如果加一层不行就再加一层"。
展开
评论
#青训营笔记创作活动#
2月10日 Day30
今日学习:跨域的情况与解决办法
跨域三种情况
在请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求:
协议不同,如 http 和 https;
域名不同;
端口不同。
也就是说,即使域名相同,如果一个使用的是 http,另一个使用的是 https,那么它们也属于跨域访问。

解决跨域问题
在 Spring Boot 中跨域问题有很多种解决方案,比如以下 5 个:
使用 @CrossOrigin 注解实现跨域;
通过配置文件实现跨域;
通过 CorsFilter 对象实现跨域;
通过 Response 对象实现跨域;
通过实现 ResponseBodyAdvice 实现跨域
展开
评论
#青训营笔记创作活动#
2月9日 Day29
今日学习:三大工作流
由于开发 jBPM、Activiti、Camunda 以及 Flowable 的人多多少少有一些关联性,让人不得不猜测意见相左拉一票人出来单干是他们的企业文化。

所以现在市面上主流的流程引擎就一共有三个:

Activiti
Flowable
Camunda
这三个各有特点:

Activiti 目前是侧重云,他目前的设计会向 Spring Cloud、Docker 这些去靠拢。
Flowable 核心思想还是在做一个功能丰富的流程引擎工具,除了最最基础的工作流,他还提供了很多其他的扩展点,我们可以基于 Flowable 实现出许多我们想要的功能(当然这也是小伙伴们觉得 Flowable 使用复杂的原因之一)。
Camunda 相对于前两个而言比较轻量级,Camunda 有一个比较有特色的功能就是他提供了一个小巧的编辑器,基于 bpmn.io 来实现的(松哥之前已经发文讲过了)。如果你的项目需求是做一个轻巧的、灵活的、定制性强的编辑器,工作流是嵌入式的,那么可以选择 Camunda。
展开
评论
#青训营笔记创作活动#
2月8日 Day28
今日学习:我们该如何获得redis呢?
找引入我们的的模块要 RedisTemplate。因为这些Bean都是被spring管控的,包括RedisTemplate,也包括我们现在写的RequestLimitAspect ,它们将来都是在spring容器内的,所以我们直接在代码里找spring进行注入就可以了。将来引入我们的模块中如果有RedisTemplate可用,那我们自然就可以拿到。

主要是要去学习代码,并通过不断的练习学习如何获得redis,文章有很多内容值得我们学习
展开
评论
#青训营笔记创作活动#
2月7日 Day27
今日学习:为什么要进行分库分表
单机数据库的存储能力、连接数是有限的,它自身就很容易会成为系统的瓶颈。当单表数据量在百万以里时,我们还可以通过添加从库、优化索引提升性能。

一旦数据量朝着千万以上趋势增长,再怎么优化数据库,很多操作性能仍下降严重。为了减少数据库的负担,提升数据库响应速度,缩短查询时间,这时候就需要进行分库分表。

还有各种分库分表的方法都在下文章中,细节的说明了分库分表的原因及方法,包括许多知识点都有涉及
展开
评论
#第五届青训营阅读打卡#
2月6日 Day26
今日学习:缓存的三种奔溃方法
缓存穿透
缓存穿透是指用户在不断访问一个缓存和数据库中都没有的数据。

缓存无法命中,从而导致一直请求数据库,流量过大就会导致数据库的崩溃.
缓存雪崩
Redis挂掉了,请求全部走数据库。
缓存击穿
缓存击穿和缓存穿透其实非常类似,但是缓存击穿说的是数据在缓存中没有,但是在数据库中有的数据。

看到过的面试题中,最常举例的场景就是:
Redis 中大规模的热点key在同一时间失效,并且此时正处于高并发期间,导致流量全部打到数据库上,造成数据库极大的压力。我们通常将这样的事件称之为缓存击穿

更多内容都在下方链接中,博主讲的非常好,给予了我很多知识,讲的特别细,有兴趣仔细观看的请做好准备,tips:上厕所不要看,真的撑不住
展开
评论
下一页
个人成就
文章被点赞 1
文章被阅读 1,802
掘力值 113
收藏集
5
关注标签
5
加入于