xxl-sso知识点

news2024/11/19 16:20:37

1、哈希环算法:

通过将数据分配到一个环形的哈希表上来实现数据的分布,根据环上的顺序依次进行分配。

对于数据敏感的服务不能用取余hash来实现,当新增节点时之前按照取余hash放的数据在新增节点之后在相应的节点找不到数据,而哈希环就可以避免这个问题;另外,取余hash还会造成数据分布不均匀的问题(一些节点存储了大量的数据,一些索引节点却存储很少的数据),这会使系统变得不均衡,影响系统的性能,而哈希环可以实现均匀的数据分布,所以哈希环是一种更可靠的分布式存储方法。

原理图:

先求出不同服务器的哈希值,然后映射到一个范围为0 — 2^32-1的数值空间的圆环中,即将首(0)和尾(2^32-1)相接的圆环。

初始圆环:

 新增数据后,映射到这个环上,新增的数据会顺时针寻找,找到的第一个服务器节点就是目标要保存的节点

d1,d2存储到Node B

d3, d4, d5存储到Node C

d6, d7, d8存储到Node A

 假如Node B宕机了,其他都不会受到印象,只有d1,d2受到影响,放到Node C

 如果新增加一台机器Node D在NodeA和NodeC之间,那么d6,d7就会存储到了Node D,影响也比较小。

改良版

如果出现极限情况下:只有两台机器,然后大量的数据都集中在一台机器上,那么一致性会hash将一个物理节点虚拟出N个虚拟节点来用:

Node A可以虚拟出Node A1,Node A2,Node A3

Node B可以虚拟出Node B1,Node B2,Node B3

 

2、池化思想:

提前准备一些资源,在需要时可以重复使用这些预先准备的资源。

和StringBuffer类似,先申请一份大的空间,再依次放数据,这样可以防止空间频繁的创建。

优点:可以节省实时分配空间的时间成本;减少对空间的使用,降低高并发下的gc频率,提升性能。

比较典型的几种策略:

内存池:预先申请内存,提高申请内存的速度,减少内存碎片;
连接池:预先申请数据库连接,提升申请链接的速度,降低系统开销;
实例池:循环使用对象,减少资源在初始化和释放时昂贵损耗;
线程池:预先申请线程,重复利用珍贵的线程资源,并且任务到到达时无需等待线程的创建立刻执行。

3、ThreadLocal:

变量在线程间隔离而在方法间共享。

ThreadLocal中的变量属于当前线程,其他线程是无法拿到其中的变量的,即当前线程独有的变量。

使用场景:

在处理多方法中线程并发安全的,最常用的方法,就是使用锁,通过锁来控制多个不同线程对临界区的访问。但是,无论是什么样的锁,乐观锁或者悲观锁,都会在并发冲突的时候对性能产生一定的影响。而ThreadLocal就可以解决这个问题,ThreadLocal 通常用于多线程编程中,用于存储用户 ID 或事务 ID 等信息,这些信息可以在整个执行线程中使用,而对其他线程不可见。

ThreadLocal的使用方法:

创建一个ThreadLocal对象:

private ThreadLocal<Integer> threadLocal= new ThreadLocal<>();

设置和获取threadLocal变量的值:

public int setAndGet(){
    threadLocal.set(8);
    return threadLocal.get();
}

得到的值为8.

由于ThreadLocal里设置的值,只有当前线程自己看得见,这意味着你不可能通过其他线程为它初始化值。为了弥补这一点,ThreadLocal提供了一个withInitial()方法统一初始化所有线程的ThreadLocal的值:

private ThreadLocal<Integer> threadLocal= ThreadLocal.withInitial(() -> 6);

将threadLocal的初始值设置为6,这对全体线程都是可见的。

ThreadLocal实现原理:

每个线程在往ThreadLocal里设置值的时候,都是往自己的ThreadLocalMap里存,即每个线程都有一个属于自己的ThreadLocalMap,ThreadLocalMap内部维护着Entry数组,每个Entry代表一个完整的对象,key是ThreadLocal本身,value是ThreadLocal的泛型值。

读取也是以某个ThreadLocal作为引用,在自己的map里找对应的key,从而实现了线程隔离。

 ThreadLocal的内存泄露问题:

由于ThreadLocalMap中的key为ThreadLocal的弱引用,弱引用比较容易被回收。因此,如果ThreadLocal (ThreadLocalMap的Key)被垃圾回收器回收了,但是因为ThreadLocalMap生命周期和Thread是一样的,它这时候如果不被回收,就会出现这种情况:ThreadLocalMap的key没了,value还在,这就会造成内存泄漏问题。

弱引用:只要垃圾回收机制一运行,不管JVM的内存空间是否充足,都会回收该对象占用的内存。

如何解决内存泄漏问题:

使用完ThreadLocal后,及时调用remove()方法释放内存空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“华为杯”研究生数学建模竞赛2005年-【华为杯】B题:空中加油

赛题描述 对飞行中的飞机进行空中加油,可以大大提高飞机的直航能力。为了简化问题,便于讨论,我们作如下假设。 少辅机架数两种情况给出你的作战方案。 解题思路 摘要: 本文讨论了在辅机只能一次起飞和可以多次起飞情况下,辅机数量与主机 最大作战半径的关系,给出了只…

【前端工程化】一.前端工程化;二.使用webpack打包vue项目;三.在webstorm中安装vite插件,通过vite构建工具创建vue项目

目录 一.前端工程化 1.webpack &#xff08;1&#xff09;定义&#xff1a;是一个前端的构建工具。前端代码格式多&#xff08;html、css、js、图片&#xff09;&#xff0c;前端构建工具的作用是将各种格式不同文件打包到一起&#xff0c;方便项目的上线运行。&#xff08;将…

60 k8s集群中container监控指标有label但是没有value

k8s集群中container监控指标有label但是没有value 1、现象 无法获取到以下label的值:container, image, pod, name 集群刚搭建完的时候一切都是正常的,后来运行一段时间后就缺这缺那的。 2、原因排查 由于这些指标是kubelet上报的,因此看了对应节点上kubelet的日志,发现…

从事Java开发学历是门槛吗?

“学历低&#xff0c;工作好找吗&#xff0c;以后跳槽、转型会不会有门槛&#xff1f;”是的&#xff0c;学历这块敲门砖&#xff0c;在哪里都适用。工厂流水线里学历高的更容易被提拔为管理者&#xff0c;学历越高&#xff0c;对于工具的使用越好。门槛越高&#xff0c;薪资待…

代码随想录算法训练营第五十六天_第九章_动态规划 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

LeetCode 300.最长递增子序列 给你一个整数数组 nums &#xff0c;返回其中最长递增子序列的长度。 视频讲解https://www.bilibili.com/video/BV1ng411J7xP文章讲解 https://programmercarl.com/0300.%E6%9C%80%E9%95%BF%E4%B8%8A%E5%8D%87%E5%AD%90%E5%BA%8F%E5%88%97.html 思…

蓝库云|一文搞懂什么是MES(制造执行系统),制造业该如何选择

MES&#xff08;Manufacturing Execution System&#xff09;是一种将制造过程可视化并为工人提供指导和支持的系统。它的优势在于可以优化人员、机器和设备等资源&#xff0c;消除制造对个人技能的依赖。在本文中&#xff0c;蓝库云将以通俗易懂的方式说明MES的概要以及与生产…

CS5260电路参考|Type-C转VGA转换器方案|Type-C转VGA转接线方案

CS5260电路参考|Type-C转VGA转换器方案|Type-C转VGA转接线方案 CS5260是一款TYPEC转VGA转换方案芯片。 CS5260作为标准的USB Type-C显示端口Alt模式接收器&#xff0c;CS5260由双通道主链路差分对&#xff0c;一个AUX通道差分对组成。 CS5260主链接作为双通道差分对&#x…

npm Eslint 报错

❤ npm Eslint 报错 npm init --yes初始化项目 ○ 安装ESLint模块 npm add eslint --dev&#xff0c;node-modules/.bin目录生成eslint的cli程序 ○ 查看eslint的版本 使用npm eslint --version ○ 使用yarn eslint ./index.js 当代码中出现语法错误时&#xff0c;eslint无法检…

vue前端框架应用案例(一)实现简单的加法页面

目录vue实现效果目录结构Count.vueApp.vuemain.jsindex.htmlvuex实现效果vuex使用步骤vuex基本结构目录结构store/index.js文件CountVuex.vueApp.vuemain.jsindex.html本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目标&…

【黄啊码】windows如何使用tp5.1配置workerman和gateway(不要看官方文档,不要抄网友文档,OK?)

大家好&#xff0c;我是黄啊码&#xff0c;由于项目需要被迫无奈在老项目上整合workerman&#xff0c;整整浪费了我一天&#xff0c;按着tp官方文档去做&#xff0c;一个又一个的坑&#xff0c;然后百度网友的答案&#xff0c;又是一个又一个的天坑&#xff0c;真的无力吐槽&am…

基于Android 的校园疫情防控管理系统设计与实现

需求信息&#xff1a; (1〉通知公告。各级联络员可在此发布各类通知公告。 (2〉应急动态。发布国家公布的各类数据信息&#xff0c;如在本次疫情期间&#xff0c;平台集成丁香园丁香医生疫情动态模板&#xff0c;实时更新全国疫情数据&#xff0c;帮助师生了解疫情地图&#xf…

建设工程质量检测管理办法3月1日起施行

建设工程质量检测管理办法&#xff08;2022年12月29日中华人民共和国住房和城乡建设部令第57号公布 自2023年3月1日起施行&#xff09;第一章 总则第一条 为了加强对建设工程质量检测的管理&#xff0c;根据《中华人民共和国建筑法》《建设工程质量管理条例》《建设工程抗震…

液晶12864显示字符

液晶12864简介12864是128*64点阵液晶模块的点阵数简称。基本参数1、低电源电压&#xff08;VDD:3.0&#xff5e;5.5V&#xff09;。2、显示分辨率:12864点。3、内置汉字字库&#xff0c;提供8192个1616点阵汉字。4、内置128 个168 点阵字符。5、2MHZ 时钟频率。6、显示方式&…

PriorityQueue

PriorityQueue其本质是一个优先级队列的集合。 1. 优先级队列 那什么是优先级队列呢&#xff1f;我们先从它的概念聊起。 概念&#xff1a; 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&a…

Grafana 中文入门教程 | 构建你的第一个仪表盘

Grafana 读音&#xff1a;/grəˈfɑːnˌɑː/ 在大厂工作久了&#xff0c;时常对一些工具的存在觉得理所当然。 比如说&#xff0c;需要计算资源的时候&#xff0c;一个配置文件就可以要来两百台虚拟化好的机子。需要试下缓存&#xff1f;点下鼠标就可以要到几十个配置好的…

简单高效的字符串匹配算法

Quick Search算法 算法简介 Quick Search算法属于Sunday算法的一种。Sunday算法由Daniel M Sunday在1990年提出。论文原文&#xff1a;A VERV FAST SU6STRINC SEARCH ALGORITHM 在论文中&#xff0c;作者提出了三个不同的算法&#xff1a;Quick Search算法、Maximal Shift算…

IO流——字符缓冲流

复制文本文件–一次读写一个字符 –一次读写一个字符数组 不带参数&#xff1a; package com.demo03;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 需求&#xff1a;* 把项目路径下的FileWriterDemo.java中的内容复制到项目路径…

上门服务小程序怎么开发-上门服务小程序源码功能

目前上门服务类型新型行业已经占据了很大的市场所在&#xff0c;上门家政服务&#xff0c;上门做饭&#xff0c;上门按摩&#xff0c;上门私教&#xff0c;上门美容没发等等一些列的&#xff0c;目前上门系列的在市场分额还是特别大的&#xff0c;趋势比较大&#xff0c;今天就…

Docker 安装镜像与使用命令

按照阿里云的操作文档安装 docker&#xff1a;https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 这里仅写 Windows 版的&#xff0c;其他版本见上面的链接 1. 安装&#xff0f;升级Docker客户端 对于Windows 10以下的用户&#xff0c;推荐使用Docker ToolboxWin…

一文带你了解UI自动化测试框架

PythonSeleniumUnittestDdtHTMLReport分布式数据驱动自动化测试框架结构 1、Business&#xff1a;公共业务模块&#xff0c;如登录模块&#xff0c;可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_page import Login_Page from H…