- 博客(94)
- 收藏
- 关注
原创 集合专题之Map
以下是jkd8的内容,jdk11+略有更新代码展示11.Map存放数据的key-value示意图,一对是放在一个HashMap的中的,因为实现了接口,有些书上也说(如图)我们来看一下Node的源码,是我们HashMap的一个静态内部类存储的是 在EntrySet中,定义类型是Map.entry,但是实际上存放的还是hashmap的Node,因为展开例子讲解:我们定义一个HashMap之后可以查看Set的类型,其实还是Node为了方便程序员遍历,还创建了EntrySet集合。
2025-07-25 15:55:08
930
原创 Spring底层(二)Spring IOC容器加载流程原理
这个容器也叫IOC容器、Spring上下文ApplicationContext容器:管理Bean对象,通过依赖注入的方式组织Bean之间依赖关系,从而解决业务之间的耦合性之前对象又程序员自己new自己创建,现在Spring注入给我们,这样的创建权力被反转了然后通过getBean()方法去获得Bean然后会把配置信息读到BeanDefinition,把扫描的bean变成BeanDefinition,这是一个接口里面就定义了beanClass、scope、lazy-init...通过set方法导入。
2025-07-18 14:01:32
886
原创 Spring底层原理(一)核心原理
如果默认的无参构造方法被删了,那么只会选择一个有参构造,如果两个以上就不行了,Spring不知道用哪个,并且有参构造是有值的传入的,这个值是从Spring容器中拿的。调用context.getBean("userService")时,就可以根据"userService"找到UserService类,从而就可以去创建对象了。注解,这个注解是对象变成bean的初始化阶段前,标记这个对象下的方法,然后Bean完全就绪前触发。的,都是创建一个容器,把文件放进去。这是 Spring 提供的另一种初始化机制,与。
2025-07-17 20:49:59
1047
原创 Sharding-Sphere学习专题(四)广播表和绑定表、分片审计
目录一、广播表与绑定表实战1、广播表2、绑定表二、分片审计指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。示例如下:建表:创建实体:创建mapper配置广播规则: 配置方式很简单。 直接配置broadcast-tables就可以了。 # 指定广播表。广播表会忽略分表的逻辑,只往多个库的同一个表中插入数据。 spring.shardingsphere.rules.sharding.br
2025-07-14 23:27:59
772
原创 Sharding-Sphere学习专题(三)数据加密、读写分离
这本质也是一种数据路由的功能。,需要将Master的数据实时同步到slave。例如Canal框架,或者MySQL自己提供的主从同步方案等。ShardingSphere内置了多种加密算法,可以用来快速对关键数据进行加密。最典型的,比如对用户的密码,通常都是需要加密存储的。然后去执行对user表的插入和查询操作,从日志中就能体会到读写分离的实现效果。在插入时,就会在password_cipher字段中加入加密后的密文。的方式,快速实现数据加密。将读写请求分发到不同的数据库,从而减少主库的客户端请求。
2025-07-14 21:32:25
438
原创 Sharding-Sphere学习专题(二)案例和分片策略
就算是有一些数据根本和数据库的数据差得不是一点半点,根本就没必要分片去查浪费性能所以我们需要定制# 使用CLASS_BASED分片算法- 不用配置SPI扩展文件# 指定策略 STANDARD|COMPLEX|HINT# 指定算法实现类。这个类必须是指定的策略对应的算法接口的实现类。//保留配置的分片键。在当前算法中其实是没有用的。@Override/*** 实现自定义分片算法* @param availableTargetNames 在actual-nodes中配置了的所有数据分片。
2025-07-14 17:49:23
1144
原创 Sharding-Sphere学习专题(一)基础认识
Apache ShardingSphere是分布式SQL事务和查询引擎,可以通过数据分片、弹性压缩、加密等能力对任意数据库进行增强ShardingSphere是一款起源于当当网内部的应用框架。ShardingSphere这个词可以分为两个部分:Sharding就是数据分片、Sphere是生态。所以ShardingSphere不是一个单独的框架或者产品,而是一个由多个框架以及产品构成的一个完整的技术生态。核心产品。
2025-07-14 14:21:32
891
原创 雪花算法Snowflake
用一张单独的表,每一行数据维护一个业务表的主键id,每次请求取一个step步长的id(图中1000),再去内存+1,max_id是上一次取出的最后一行的id数,leaf无状态的支持线性扩容。由于强依赖时钟,对时间的要求比较敏感,在机器工作时NTP同步也会造成秒级别的回退,建议可以直接关闭NTP同步。因为雪花算法根据时间戳的顺序来保证ID的唯一性,回拨使得新生成的ID在时间顺序上看起来比之前的ID更“旧”,从而可能被误认为是之前已经生成过的ID,破坏了ID的唯一性原则。
2025-07-13 14:20:15
1172
原创 并发编程(二)深入概念
该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。可以利用join()方法实现,把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行。比如在线程T2中调用了线程T1的join()方法,直到线程T1执行完毕后,才会继续执行线程T2剩下的代码。来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的线程。
2025-07-11 00:03:23
1006
原创 Mysql底层专题(七)MVCC多版本并发控制机制
2. 如果 row 的 trx_id 落在红色部分( trx_id>max_id ),表示这个版本是由将来启动的事务生成的,是不可见的(若 row 的 trx_id 就是当前自己的事务是可见的);3. 如果 row 的 trx_id 落在黄色部分(min_id<=trx_id<= max_id),那就包括两种情况。中,表示这个版本是由还没提交的事务生成的,不可见(若 row 的 trx_id 就是当前自己的事务是可见的);(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成。
2025-07-09 18:32:50
513
原创 Mysql底层专题(六)事务、隔离、锁优化
摘要:数据库事务具备ACID四大特性:原子性、一致性、隔离性和持久性。并发事务处理可能引发脏写、脏读、不可重复读和幻读等问题。为解决这些问题,数据库提供了四种隔离级别(读未提交、读已提交、可重复读和可串行化),不同级别对读一致性问题的控制程度各异,从可能允许所有问题到完全杜绝问题。隔离级别越高,数据一致性越强,但并发性能可能降低。
2025-07-09 15:47:28
784
原创 并发编程(一)基础概念
当一个程序被运行,从加载这个程序的代码至,这时就开启了一个进程就可以视为程序的一个实例。进程=系统进程+用户进程凡是用于完成操作系统的各种功能的进程就是用户进程就是所有由你启动的进程。
2025-07-09 01:15:27
840
原创 Mysql底层专题(五)索引优化实战二
整个过程会读取 t2 表的所有数据(扫描100行),然后遍历这每行数据中字段 a 的值,根据 t2 表中 a 的值索引扫描 t1 表中的对应行(扫描100次 t1 表的索引,1次扫描可以认为最终只扫描 t1 表一行完整数据,也就是总共 t1 表也扫描了100行)。让mysql做join操作时尽量选择NLJ算法,驱动表因为需要全部查询出来,所以过滤的条件也尽量要走索引,避免全表扫描,总之,能走索引的过滤条件尽量都走索引。,二级索引存储数据比主键索引少,所以count(字段)>count(主键 id)
2025-07-07 18:19:10
586
原创 Mysql底层专题(四)索引优化实战一
1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。2、order by满足两种情况会使用Using index。(1) order by语句使用索引最左前列。(2) 使用where子句与order by子句条件列组合满足索引最左前列。3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。
2025-07-05 15:24:22
1158
原创 计算机网络(五)数据链路层 MAC和ARP协议
数据链路:在链路的基础上增加一些必要的软件(协议的实现)和硬件(网络适配器)。网络中的主机、路由器都必须实现数据链路层。:在直连网络中定位设备(交换机通过MAC地址表转发帧)。:无法跨路由器解析(跨网络需解析网关MAC),路由器会剥离并替换MAC头部(跨网络时)。),前24位是厂商标识,后24位是设备编号。局域网中的主机、交换机都必须实现数据链路层。解析方式:通过ARP广播询问:“谁是。链路:一个结点到相邻结点的物理线路。在局域网(LAN)中,将。:48位十六进制(如。,实现数据链路层通信。
2025-07-02 14:07:14
342
原创 计算机网络(四)网际层IP
TCP是进程与进程之间的进程是跑在主机上的,所以我们也要知道主机地址,网际层是解决主机与主机之间的通信IP的作用:在复杂的网络环境中把数据包发给最终的目标主机。
2025-07-02 02:10:12
931
原创 计算机网络(三)传输层TCP
发送端主机会定期发送一个窗口探测包,这个包用于探测接收端主机是否还能够接受数据,当接收端的缓冲区一旦面临数据溢出的风险时,窗口大小的值也随之被设置为一个更小的值通知发送端,从而控制数据发送量。的数据,这个大小限度就是窗口大小,(TCP的首部,有一个接收窗口,我们上面聊的时候说这个字段用于流量控制。三次握手已能达成目的,第三次握手客户端发送ACK确认服务器的SYN+ACK,此时双向连接已确认双方都能正常收发数据,四次握手是多余的。:需先拨号(握手),通话中确保对方听清(可靠),挂断前需告别(四次挥手)。
2025-07-01 15:43:01
759
原创 计算机网络(二)应用层HTTP协议
1、HTTP概念1、HTTP概念(HyperText Transfer Protocol,超文本传输协议)是用于在客户端(如浏览器)和服务器之间传输超媒体文档(如网页)的应用层协议。2、工作流程。
2025-07-01 13:21:55
859
原创 计算机网络(一)层
应用层(HTTP请求)→ 运输层(TCP封装)→ 网际层(IP包)→ 数据链路层(帧)→ 物理层(比特流)物理层(接收信号)→ 数据链路层(解帧)→ 网际层(检查IP)→ 运输层(重组数据)→ 应用层(显示网页)网络接口层:数据链路层+物理层。IP:网际层的一个协议。TCP:运输层的协议。
2025-06-30 22:06:17
281
原创 MySQL底层专题(二)Explaing
使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈,在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中例子:在查询中的每个表会输出一行,如果有两个表通过 join 连接查询,那么会输出两行。
2025-06-26 08:38:26
594
原创 ElasticSearch学习专题(一)初识ES及安装、基本指令
二者安装都很简单。1、Solr利用Zookeeper进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。2、Solr支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持 json文件格式。3、Solr在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于。分布式搜索和分析引擎,负责存储、检索和分析数据核心功能:全文搜索、结构化搜索、数据分析数据处理管道工具,用于收集、解析和转换数据。
2025-05-27 14:08:29
736
原创 Redis学习专题(六)分布式锁
用户A业务操作因为卡顿,超过了设置的锁过期时间,于是自动释放了,此时用户B就获取到锁了,但是可能用户A的卡顿结束就会去释放锁,本次释放的锁就是。在前面的代码中,我们没有设置分布式锁的过期时间,如果因为业务异常没有释放锁,可能会导致。用指令得到lock,这个值是当前请求的锁的值,ARGV是uuid值,如果相等就删除。也就是步骤3释放了1的锁,步骤5释放了用户B在步骤4设置的锁。2)准备删掉,但是还没有删除时,在1步获取的锁。设置锁的同时,指定该锁的过期时间,防止死锁。,瞬间冲进来了,获取/设置了锁lock。
2025-05-25 14:20:27
639
原创 Redis学习专题(五)缓存穿透、缓存击穿、缓存雪崩
当用户请求服务器查找数据,通常操作比较频繁的数据我们会在Redis里面去查询,如果Redis没有,按理来说我们应该去数据库查,查完之后再同步到Redis中去。如果一个查询返回的数据是空,我们仍然把这个空结果(null)进行缓存,设置空结果的时间应该短一些(小于5min),因为也可能是临时没有的。3.也就是说,如果从存储层查不到数据则不会写入缓存,这将导致这个不存在的数据每次都要去存储层查询,失去了缓存的意义 ,,当用户从redis中查不到key对应的数据(返回为null),就去数据库查,此时会上锁,只有。
2025-05-24 23:19:31
1250
原创 Redis学习专题(四)集群
1、Redis 集群实现了对Redis的水平扩容,即启动N个redis节点(单个的主/从),将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N2、Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中 有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求- 替换指令其它几个文件以此操作即可, 操作的时候,一定要小心, 最后建议再检查一下定义:Redis Cluster 将整个数据空间划分为 。
2025-05-24 14:10:38
1085
原创 讯联文库开发日志(五)登录拦截校验
在此之前,由于主播一直缺乏session,这次两个小时的寻找bug之旅也让我受益颇多罪魁祸首:key值写错了,导致一直报错,不过这也让我了解了更多关于session的k-v结构。
2025-05-23 22:34:25
290
原创 讯联云库开发日志(四)账号找回、退出、上传头像、获取登录信息
找回密码的逻辑很简单调用了一个restPWD方法1.根据邮箱账号获取对象2.判断有无账户3.获取校验邮箱验证码4.最后再调用setPassword()方法重新设置密码5.通过updateByEmail更新数据库。
2025-05-21 18:37:09
867
原创 Redis学习专题(三)主从复制
Redis 是指将一个 Redis 服务器(Master)的数据自动同步到多个 Redis 服务器(Slave)的过程。:实现数据冗余、读写分离、故障恢复,提高 Redis 的可用性和性能。
2025-05-20 22:46:40
1001
原创 Redis学习专题(二)事务和锁机制
1) 乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁。3) 悲观锁是锁设计理念, 传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是。3、如果组队成功, 但是指令有不能正常执行的, 那么exec提交, 会出现有成功有失败情况, 也就是。如果我们现在只有10张票,但是用户1\2\3同时查询都是10张,最后的剩余票数变成-2,造成超卖。事务执行过程中, 如果有指令执行失败,其它的指令仍然会被执行, 没有回滚。
2025-05-17 14:36:01
871
原创 Redis学习专题(一)配置和持久化
官方资料 在线文档 :https://redis.io/topics/persistence2、以。
2025-05-17 13:47:21
1017
原创 讯联云库项目开发日志(二)AOP参数拦截
🔀 参数校验流程全链路总结:HTTP请求 → @GloballInterceptor触发AOP→ 解析@VerifyParam注解→ 分发校验(基本类型→checkValue() / 对象类型→递归checkObValue())→ 调用StringTools/VerifyRegexEnum工具→ 校验失败抛BusinessException→ 校验通过执行业务逻核心箭头图Controller→ 🌐 AOP切面→ 🔍 参数扫描→ ✂️ 规则匹配。
2025-05-16 00:21:12
1381
原创 讯联云库项目开发技术栈总结(一)
前端交互流程:后端处理流程:controller层:service层: 通过这个方法获取发邮件的人 调用这个方法让redis读取系统dto模板尝试从Redis读取(此时返回null),发现为空时,创建默认配置最后保存到Redis(无过期时间),其中code代替掉%s是随机验证码,然后再通过RedisComponent获取的信息get出来导入邮件对象message幂等性保障:即使多次调用 ,每次都会先使旧验证码失效,再生成新验证码。最终效果是:无论调用多少次,用户只能使用最新发送
2025-05-15 17:45:27
492
原创 MySQL之基础事务和隔离级别
事务就是用于保证数据的一致性,她由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:转账就必须保证事务的一致性。-- 转账人--收款人如何保证两条语句同时执行成功?1. 查看当前隔离级别。
2025-05-14 21:56:47
690
原创 MySQL之基础索引
当一个数据库里面的数据特别多,比如800万,光是创建插入数据就要十几分钟,我们查询一条信息也要几秒钟,查询多条还会更多因此我们采用提升性能。
2025-05-14 19:34:21
501
原创 JVM学习专题(二)内存模型深度剖析
JDK、JRE 和 JVM的包含关系:1)JDK=JRE+ 开发工具集(例如Javac,java编译工具等)2) JRE=JVM+JavaSE标准类库(java核心类库)3) 如果只想运行开发好的 .class文件 只需要JRE.java文件经过javac指令变成.class字节码文件 ,再通过java命令进入到java虚拟机里面运行,同样的文件到不同环境的jvm运行都会产生不同的二进制机器码,字节码是统一的,但JVM生成的机器码会因环境而异一次编译,到处运行每个不同版本的JDK内部都有对应的不同操作系统的
2025-05-14 15:58:34
1547
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人