自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 分布式id-雪花算法

UUID是无序的且数据非常大(128bit),且一般会使用36位长度的字符串存储,这样会导致id存入数据库时需要大量的存储空间来存放id,且id一般为主键,则在生成聚簇索引时则会耗费巨大的空间,并且UUID一般不呈递增趋势,在生成数据库索引时会出现大量页分裂等情况,影响性能;而在分布式情况下,需要考虑大量服务器之间生成的id全局唯一,所以就使用了今天要介绍的雪花算法来生成分布式下的全局id。时间戳则不满足高并发情况下的id,对于在某一毫秒只能生成的一个id,无法应对高并发场景下的id生成。

2024-05-20 17:21:28 814 2

原创 解决缓存穿透 - 布隆过滤器

查询时则通过相同的hash算法得到映射的位置并判断映射的位置的值,若存在一个及以上的位置为0则代表该数据不存在布隆过滤器中,若映射的位置全部都为1则代表该数据可能在布隆过滤器中,可能不在存在误判的可能性。由于请求的数据在缓存和数据库中都不存在,此时当系统出现恶意攻击,大量请求访问缓存和数据库都不存在的数据,所有的请求将会到达数据库从而对数据库造成的攻击导致数据库宕机。解决布隆过滤器不能删除数据的问题我们使用了 redis 的 set 结构在判断完布隆过滤器后再加一层是否为已删除的数据判断;

2024-04-02 20:16:14 428 1

原创 内网穿透natapp基础用法

由于公网无法访问本地地址内网环境,所以在做一些本地项目时,但需要调用第三方公网API并执行回调操作我们可将本地项目部署到云服务器上公网即可访问但为了本地联调方便,我们就需要用到技术将本地的网络环境配置成公网可访问的我们可借助工具完成内网穿透技术bad02e40(natapp刚购买的隧道中的authtoken)

2024-03-02 21:27:27 758 1

原创 Java中重写equals()时都要重写hashCode()?

若每个数据都进行equals()比较的话,对于大量数据下将会带来巨大的比较成本,大大增加代码的时间复杂度,而引入hashCode则减少了equals()比较次数。equals()在Object类中是比较两对象的地址是否相同,比如String字符串重写equals方法变成比较两字符串的值是否相等。equals()方法和hashCode()方法都是Java中Object父类定义的方法。而如果重写equals()而不重写hashCode()?如果重写hashCode()不重写equals()?

2024-02-22 21:21:11 295 1

原创 微服务OpenFeign服务间调用

而OpenFeign则是一个更加方便的HTTP客户端,OpenFeign为Feign的升级版,在Feign的基础上增加了支持REST调用,通过注解绑定服务name和路径端口进行调用。总结:openfeign是微服务之间互相调用的重要方法,也可结合注册中心进行进一步的使用,在微服务调用的使用频率也是比较高的,后续也还会持续更新升级~最后对OpenFeign客户端及接口进行测试,直接注入OpenFeign客户端Bean,并调用客户端中的方法即可,最后会将被调用方的结果返回给该方法。1 . 首先需要引入。

2024-02-01 11:26:39 636 1

原创 链表算法题总结

链表的特点主要是存储地址分散,无索引访问一个链表节点主要是通过头节点依次遍历链表主要分为单链表,双链表,循环链表,当然用得最多的还是单链表首先,链表算法题主要是遍历链表,遍历过程中最需要注意的点就是容易产生所以在访问链表某节点的值或者下一节点时需要提前判断一下节点是否为空node!= null。

2023-11-26 00:23:49 34 1

原创 Redis哨兵机制详解

哨兵机制是针对于Redis集群模式下对主从进行监控而存在的哨兵机制会对Redis主从进行监控,当主节点故障下线时会从从节点中选出一个性能好的变成新主节点,并将IP地址和端口号发送给连接了旧主节点的客户端哨兵机制在判断主节点是否故障下线时,为了减小误判的可能性,所以哨兵机制一般会部署为集群模式。

2023-10-15 17:36:02 52

原创 Redis持久化完整总结

AOF日志更倾向于数据安全问题,能更大程度减小数据丢失风险,但是数据恢复效率较低RDB快照更倾向于数据恢复效率较高,数据丢失风险更大混合持久化居中,更大程度保证数据安全和数据恢复效率。

2023-10-08 16:39:13 50 1

原创 Redis的数据类型全面总结

接下来总结一下Redis的数据类型数据类型是基于数据结构实现,每一种数据类型底层对应一种数据结构,也有数据类型可由多个数据结构实现Redis底层结构:dictEntry[]数组保存Redis键值对key-value结构,key-value都指向redisObject,redisObiject包含三个字段:对象类型,底层数据结构,指向底层数据结构的指针。

2023-10-04 23:00:22 67 1

原创 Redis的数据结构全面总结

压缩链表不适合数据过多,适合少量数据及数据变化量小哈希表适合保存对象数据且对数据操作较简单整数集合只适用于保存整数对象且数据量少跳表的查询效率较双向链表更快。

2023-09-27 22:21:02 456 1

原创 CountDownLatch类实际用法

适用于需要for循环创建多个子线程执行任务当前线程需要等待所有子线程执行完毕再继续执行若某个线程阻塞,到达指定时间后该线程会继续执行。

2023-09-17 23:02:57 33 1

原创 力扣热题100-环形链表

首先链表存在环是指节点重复,并非节点值重复HashSet去重需要计算hash值并存储等等,时间复杂度会更高环形链表适合使用快慢指针解决。

2023-09-17 22:37:24 57 1

原创 力扣热题100-字符串中所有字母异位词

如果两个数组相同,则说明两字符串字符相同(字符位置不一定相同)同时删除当前窗口的第一个字符以及加入窗口的下一个字符。相同则说明当前窗口组成的字符串是字符串p的异位词。使用长度为26的数组统计字符串中每个字符的个数。以字符串p的长度为滑动窗口的长度。,返回这些子串的起始索引。题目:给定两个字符串。

2023-08-09 21:57:06 28

原创 Java为什么只有值传递,没有引用传递

首先,什么是形参和实参?

2023-08-05 21:00:56 198 1

原创 面试精选-TCP篇

当某个IP分片丢失时,接收端数据无法传送到传输层,发送端无法收到ACK响应,于是触发超时重传机制重传IP报文的所有分片。窗口实际上是操作系统开辟的一段缓存空间,发送方在等到接收方的确认应答之前必须将发送的数据保存在缓存空间中,若按期收到了确认应答则将发送的数据从缓存中清除。等于0时,server扔掉client发送的ACK报文,开启定时器,重传第二次握手报文,超过限制则删除连接。可标识发送的数据哪些已被对方成功接收。,当IP的数据超过MTU长度时,IP层会对其进行分片,保证每一片都小于MTU,

2023-08-02 19:52:59 190 1

原创 面试精选-HTTP篇

对响应数据进行语法压缩后,对原始资源建立统计模型,利用统计模型将常出现数据使用较短二进制比特序列表示,不常出现数据使用较长二进制比特序列表示。的配置,用于限制一个连接上能够传输的请求数量,避免动态表无限增大,请求数量到达上限后,就会关闭 HTTP/2 连接来释放内存。​​​​​​​请求头部的If-Modified-Since字段与响应头部的Last-Modified字段(响应资源的最后修改。,再次访问相同资源时判断是否过期,若未过期直接使用,否则再次请求服务端,再次更新过期时间。

2023-07-30 15:47:09 64 1

原创 剑指Offer-反转链表

题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

2023-07-07 18:12:41 39 1

原创 剑指Offer-左旋转字符串

题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。1、String类型的可变性(String类型的不可变特性(每改变一次字符串,等于重新创建了一个新字符串,导致内存占用过大)

2023-07-02 18:01:16 29 1

原创 剑指Offer-合并两个排序的链表

链表指针本质上是一个类new出来的对象,JVM中对象存储在栈中(实际存储的是堆中对应内存地址),而对象封装的变量是存储在堆中,new对象实际上是指向堆中的对象封装的变量。问题2:为什么一开始不直接对tail进行赋值运算,而是对tail.next进行赋值运算?,后续链表的全部变化head始终为该链表的头指针,最后返回head.next即可。输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。不可行,直接对tail进行赋值运算会导致tail指针本身的丢失。当直接对tail进行赋值运算时,

2023-07-02 17:54:14 55 1

原创 计算机网络

用户通信之前需要先建立一条专用的物理链路,并在整个通信过程中始终占用该物理链路建立连接->比特流直达终点->释放连接优点:通信时延小;有序传输;没有冲突;适用范围广;实时性强;控制简单缺点:建立连接时间长;线路独占,使用效率低;灵活性差;难以规格化。

2023-06-24 16:02:08 1347

原创 剑指Offer-替换空格

1、URL中无法识别空格,必须转为其他字符形式(将空格转换为“%20”)2、String类型的不可变特性(每改变一次字符串,等于重新创建了一个新字符串,导致内存占用过大)

2023-06-11 23:26:09 34 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除