- 博客(141)
- 收藏
- 关注
原创 【SpringCloud】-Ribbon负载均衡实战及源码解析,如何结合Nacos
方式一:代码方式,定义随机策略import com} /*** @Description: 将RestTemplate注册到容器中} /*** @Description: 修改负载均衡策略方式} }} /*** @Description: 将RestTemplate注册到容器中} /*** @Description: 修改负载均衡策略方式} }IRule;
2023-09-23 09:17:29 259 1
原创 JWT—是什么?如何实现用户登录验证?
这个部分需要 base64URL 加密后的 header 和 base64URL 加密后的 payload 使用 . 连接组成的字符串,然后通过header 中声明的加密算法 进行加secret组合加密,然后就得出一个签名哈希,也就是Signature,且无法反向解密。用户认证通过之后服务端会创建对应的session并存储,会生成一个唯一的session_id并返回给客户端,客户端在浏览器的Cookie中或其他方式(内存,但服务器重启后会丢失;nbf (Not Before):生效时间,在此之前是无效的。
2024-03-20 17:07:02 968
原创 单例模式有几种写法?请谈谈你的理解?
单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个全局对象,这样有利于我们协调系统整体的行为。
2024-01-31 20:52:55 1119
原创 【SpringCloud】-OpenFeign实战及源码解析、与Ribbon结合
当我们进行服务调用的过程中有可能出现接口调用失败的问题,或者我们想要输出请求或响应的详细信息,我们可以配置日志OpenFeign帮助我们简化了服务之间的通信,同时继承了负载均衡、熔断器等功能,帮助我们更好的实现服务调用。之后我将会针对OpenFeign中集成的Hystrix做分享,大家敬请期待。
2023-12-26 15:28:00 1419
原创 【SpringCloud】-GateWay源码解析
当一个请求来到 Spring Cloud Gateway 之后,会经过一系列的处理流程,其中涉及到路由的匹配、过滤器链的执行等步骤。今天我们来说说请求经过 Gateway 的主要执行流程和原理是什么吧。
2023-12-23 21:15:26 1449
原创 【SpringCloud】-Nacos客户端与服务端源码解析
Nacos(Naming and Configuration Service)是阿里巴巴开源的服务发现和配置管理工具,它是一个全面的微服务基础设施组件,提供了服务注册与发现、配置管理、动态DNS服务等功能。基于之前发表的博客已经对Nacos的演变以及项目如何集成应用做了说明,今天我们一起来探索探索Nacos源码。Nacos在服务注册与发现、配置管理、动态DNS等方面提供了全面而灵活的解决方案,为微服务架构的搭建和管理提供了强有力的支持。我们除了知道Nacos如何使用之外,也要知其所以然。
2023-12-22 19:58:12 899
原创 【MySQL】-日志系统
针对各个日志做了简单的介绍,内部更为细节的内容还需要我们结合MySQL的执行流程、内存和磁盘的过渡等微观去详细了解,宏观到微观。
2023-12-02 16:17:46 1071
原创 再探Java集合系列—HashMap
前面我们已经针对LinkedList和ArrayList的底层原理进行了具体研究讨论,大家可以跳链接阅读哦~Map是一种键-值对(key-value)集合,Map中每一个元素都包含一个键对象和一个值对象。元素:键-值对整体Java中的基本类型和包装类型之间存在自动装箱(autoboxing)和拆箱(unboxing)的过程。当我们将基本类型的值放入Map中时,Java会自动将其转换为对应的包装类型;当我们从Map中取出包装类型的值时,Java会自动将其转换为对应的基本类型。
2023-11-30 21:25:52 1034
原创 再探Java集合系列—LinkedList
从上面的例子结果发现:如果删除第一第一个和最后一个节点都不需要遍历删除第一个节点:修改first指向为第二个节点,第二个节点的前驱指针为null删除最后一个节点:修改last指向为倒数第二个节点。
2023-11-29 09:05:18 1086
原创 再探Java集合系列—ArrayList
3、建议给定一个预估计的初始化容量,减少数组扩容的次数,这是ArrayList集合比较重要的优化策略.因为在在扩容的同时需要将原来数组中的数据复制到新数组里,但如果要插入大量数据时,赋值数组的形式效率很低,所以大多数情况下会使用带参构造函数,传入一个预估计容量,提前定义好容量。),当数量达到数组的百分之多少的时候就会扩容。此时我们会发现在遍历的范围是0到实际数组的大小,拿上面的场景来说就是0-10的范围,序列化数组中0-10的元素,这样没有用到的4个空间是不是就没有被序列化和反序列化。
2023-11-29 08:26:05 942
原创 重试机制-spring-retry、guava-retry
注意:接口重试并不是万能的解决方案,有时候请求失败可能是由于永久性的问题,如无效的请求参数或者权限不足等。在设计接口重试机制时,需要考虑到这些情况,并设置合理的重试策略和最大重试次数。通过接口重试机制,可以尝试多次发送请求,增加请求成功的可能性。接口重试可以在一定的时间间隔内多次尝试发送相同的请求,直到请求成功或达到最大重试次数为止。设置一个固定的重试次数,在每次请求失败时都重新发送请求,直到达到最大重试次数或请求成功为止。spring提供的请求重试组件,根据配置的重试策略进行重试。
2023-10-02 08:30:53 357
原创 【SpringCloud】-GateWay网关
场景:登录的时候进行身份认证,认证通过后将token返回给客户端,之后的每次请求都在请求头携带token进行验证对于系统来说实现可复用是一直的追求,能重复的就抽象,减少服务和服务之间的耦合,实现可配置;暴露的内容越少安全稳定性越高,对于客户端来说只需要知道【网关IP://网关端口号:/服务接口/参数】接口,减少系统被恶意攻击的概率。
2023-09-13 10:50:38 299
原创 设计模式—职责链模式(Chain of Responsibility)
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。我要请假一个月,我发送审批给纪委,但是纪委只能批两小时以内的假,没有权限批假一个月,就需要转交给纪老师,纪老师也没有权限批假一个月,就转交给米老师,这时米老师说“好,准假了”。这里一层一层的审批就像一条职责链,一个链条,逐层转交自己的请求。Handler:定义一个处理请示的接口。
2023-08-29 00:00:44 695
原创 设计模式—外观模式(Facade)
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。Facade:外观,为多个子系统对外提供一个共同的接口SubSystem:子系统:实现子系统功能,每一个类表示为一个子系统Client:客户,通过外观访问各个子系统功能。
2023-08-29 00:00:30 906 1
原创 设计模式—观察者模式(Observer)
又叫发布-订阅(publish/Subscrib)模式。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。观察者类似于卧底这样一个角色。在上班的时候,难免会有人趁老板不在的时候做一些工作之外的事情,例如炒炒股,看看NBA之类的,那如何应对老板突然回来这件事情呢?我们就需要卧底这样一个人给我们放风,老板一回来就通知这些人“老板回来了”。这其实就是一种观察者模式。
2023-08-29 00:00:04 747
原创 设计模式—原型模式(Prototype)
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节简单说就是先创建一个原型类实例,然后通过克隆的方法来复制一个一样的新对象,这个对象和原来的对象相同或相似核心:通过自带的Clone()方法和ICloneable接口创建跟该对象相同的新对象,不需要知道具体的创建细节。就是具有相同的属性和功能的对象的抽象的集合。类名称首字母大写。多个单词则各个首字母大写;对外公开的方法需要用‘public’修饰符。
2023-08-28 23:49:08 1711
原创 设计模式—策略模式
它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户商场都有打折、返现活动—“满300减100”、“打五折”、“打八折”,我们可以根据自己花的钱数去选择对应的支付方式,这里的支付方式就可以理解为一种算法,算法本身只是一种策略。这些算法之间都可以相互替换。就是具有相同的属性和功能的对象的抽象的集合。类名称首字母大写。多个单词则各个首字母大写;对外公开的方法需要用‘public’修饰符。就是一个真实的对象。
2023-08-28 23:47:15 1956
原创 XML—DTD、 Schema
ELEMENT 元素名(子元素名称)>举例:<!ELEMENT 书籍列表(计算机书籍)>在其他Schema中重复使用您的Schema创建由标准类型衍生而来的您自己的数据类型在相同的文档中引用多重的Schema。
2023-08-28 23:45:08 1781
原创 JavaScript—面向对象、作用域
原型就是函数的prototype属性//使用继承后alert("牛号");}};//打印true闭包像C#里面对象的私有变量。被包裹起来的一个东西,像墙一样。函数就是闭包。函数作用域中的变量无法在外键访问,使用return将一个可以访问这个变量的对象返回到外界就形成一个闭包。
2023-08-28 23:39:16 283
原创 JavaScript—DOM(文档对象模型)
一、理解DOM的概念(重点)二、知道如何对节点进行增删改查三、理解事件理解DOM只要换行了,就是空文本节点。
2023-08-28 23:37:40 185
原创 JavaScript—对象与构造方法
普通方法调用的时候使用new就可以将其作为构造方法来使用了js没有类,直接使用构造方法创建对象既然字面值也相当于是包装一个对象,那为什么还会有构造方法?构造方法是原型继承的载体和C#相同://Object的构造方法注:js中的所有对象类型都来自于object和C#不同点:js中方法里面可以在定义一个方法,C#不能方法嵌套方法如何判断变量是否是构造方法创建出来?Boolean 变量 instanceof 构造方法//打印object//打印true继承方法不同。
2023-08-28 23:32:55 726
原创 JavaScript—数据类型、对象与构造方法
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的。JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、式编程范式。
2023-08-28 23:31:45 635
原创 探索Java集合框架—数据结构、ArrayList集合
Java集合的使用相信大家都已经非常得心应手,但是我们怎么做到知其然,更知其所以然这种出神入化的境界呢?我们揭开集合框架底层神秘面纱来一探究竟目录一、背景介绍二、思路&方案数据结构是什么?数据结构可以分为线性和非线性两种数据结构Java集合分类三、过程ArrayList和LinkedList的区别有哪些?ArrayList是如何存储数据的?ArrayList扩容机制①、如何进行扩容的?②、增加元素③、ArrayList给指定位置插入元素④、删除元素按照下标位置删除元素按照内容删除元素四、总结。
2023-08-26 17:00:22 648 2
原创 微信公众号关注/取消订阅事件一文详解
在接触没有做过的事物之前站在巨人肩膀上(官方文档)可以帮助我们更快速了解,网上资料千千万,我们还要具备选择的能力,否则就是大海捞针。希望这篇文章能帮助到你!
2023-08-24 08:39:05 1839 2
原创 Kafka—工作流程、如何保证消息可靠性
分布式事件流平台。希望不仅仅是存储数据,还能够数据存储、数据分析、数据集成等功能。消息队列(把数据从一方发给另一方),消息生产好了但是消费方不一定准备好了(读写不一致),就需要一个中间商来存储信息,kafka就是中间商。
2023-08-17 11:16:42 1820
原创 JVM—内存管理(运行时数据区)、垃圾回收
当JVM类加载器加载完字节码文件之后,会交给执行引擎执行,在执行的过程中会有一块JVM内存区域来存放程序运行过程中的数据,也就是我们图中放的运行时数据区,那这一块运行时数据区究竟帮我们做了哪些工作?我们常说的线上内存泄漏和内存溢出是因为什么?我们今儿来揭开看看它神秘的面纱。
2023-08-11 11:16:55 427
原创 JVM—编译器、类加载的过程、双亲委派机制这些你还记得吗?
负责加载类文件并生成对应的类对象的组件当要加载一个类的时候会向上(父类)询问(委托)是否已加载过这个类,如果父类加载器无法加载该类,那么类加载器才会尝试自己加载在idea写的源码通过javac编译成机器认识的字节码文件字节码文件存储在磁盘中,想要到使用要通过类加载器把字节码文件加载到内存中类加载的需要通过双亲委派机制加载。
2023-08-10 10:43:29 97
原创 权限校验—接口检验
获取传入用户的信息判断用户信息的权限信息集合中是否含有定义的权限/*** @Description: 自定义权限实现*//** 所有权限标识 *//*** 验证用户是否具备某权限* @param permission 权限字符串* @return 用户是否具备某权限*///判断是否传入权限字符//获取用户信息//判断是否有用户信息,或者用户信息中是否包含权限集合//将权限设置到请求头中//判断是否包含权限/*** 判断是否包含权限。
2023-08-08 19:44:13 1743
原创 RabbitMQ到底为什么要使用它?
Message Queue,消息队列,是基础数据结构中“先进先出”的一种数据结构。把要传输的消息(数据)放在队列中,用队列机制来实现消息传递——生产者生产消息把消息放入队列,然后消费者去处理。消费者可以到指定队列拉取消息,或者订阅响应的队列,由MQ服务端给其推送消息。本次先对MQ和衍生出来的RabbitMQ先做了基本介绍,后续会针对RabbitMQ如何在项目中如何进行削峰、如何解决死信队列等内容做具体介绍,敬请期待~如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你。
2023-07-19 18:06:09 1296
原创 JMM(Java内存模型)—工作流程、volatile原理
通过加锁和volatile我们可以解决多核cpu并发线程出现数据不一致、可见性问题,正式因为线程之间通信对我们完全的透明,所以在项目中会出现内存可见性的问题,追根溯源去了解原理,在开发过程中除了知道怎么用,还能知道为什么这么用!
2023-07-06 11:20:18 198 1
原创 Nacos—简述、注册中心、配置中心
把所有的服务都统一的放在 一个中心,后续调用的时候只需要用一个服务名调用远程的服务,而不是用ip地址去调用。
2023-05-02 18:01:35 1657 3
原创 Java流式操作——Collectors工具类
● summarizingInt:把流中的元素映射成int类型的元素,获取描述信息。● averagingInt:把流中的元素映射成int类型的元素,求平均值。● summingInt:把流中的元素映射成int类型的元素,求和。● maxBy:获取流中最大元素;minBy:获取流中最小元素。● joining:合并,将流中的元素,以字符串的形式拼接起来。需求:将流中分数大于等于80的Person对象替换成他们的姓名。,如果这篇文档受到了您的喜欢那就留下你。如果有想要交流的内容欢迎在评论区进行。
2023-05-02 12:42:14 925 1
原创 Java8流式操作——最终操作
当我们通过最终方法对流对象进行操作,说明stream流操作也完成,最后我们将对象汇总成一个结果(总数、对象、集合……)
2023-05-02 12:06:14 1070 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人