自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java常用API

1.问题描述:我们操作数据,将来的数据有可能非常大,大到比long还要大,这种数据我们一般称之为"对象"2.作用:处理超大整数3.构造:BigInteger(String val) -> 参数的格式必须是数字形式4.方法:BigInteger add(BigInteger val) 返回其值为 (this + val) 的 BigIntegerBigInteger subtract(BigInteger val) 返回其值为 (this - val) 的 BigInteger。

2024-06-29 10:36:10 505 1

原创 RabbitMQ服务异步通信

每个RabbitTemplate只能配置一个ReturnCallback,因此需要在项目加载时配置:@Slf4j@Override// 获取RabbitTemplate// 设置ReturnCallback// 投递失败,记录日志log.info("消息发送失败,应答码{},原因{},交换机{},路由键{},消息{}",// 如果有业务需要,可以重发消息});ConfirmCallback可以在发送消息时指定,因为每个业务处理confirm成功或失败的逻辑不一定相同。

2024-06-28 21:49:00 724

原创 分布式缓存--Redis主从与哨兵

单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

2024-06-28 21:35:19 803

原创 分布式缓存--Redis持久化

单机的Redis存在四大问题:数据丢失问题,并发能力问题,存储能力问题和故障恢复问题。Redis有两种持久化方案:RDB持久化AOF持久化。

2024-06-28 21:22:30 546

原创 Sentinel解析与使用

我们知道微服务之间的调用可能因为服务链中的一个服务故障,引起整个链路都无法访问。

2024-06-28 21:11:30 652

原创 微服务调用雪崩问题

什么是雪崩问题?微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。限流是对服务的保护,避免因瞬间高并发流量而导致服务故障,进而避免雪崩。是一种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在一定范围,避免雪崩。是一种补救措施。

2024-06-27 21:22:23 207

原创 Feign远程调用使用详情以及优化

先看使用RestTemplate 发起远程调用的过程:RestTemplate需要使用服务的url进行调用,我们也可以看到他的url并不是IP+接口,但他是可以为我们进行转化的。在RestTemplate有LoadBalancerInterceptor, 这个类会在对RestTemplate的请求进行拦截,然后从Eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。RestTemplate 发起远程调用代码可读性差,编程体验不统一参数复杂URL难以维护。

2024-06-27 15:02:16 372

原创 Nacos集群搭建

实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。主要是一些相关nacos的配置,将来集群搭建好后,向其中写入微服务配置会添加到数据库中。将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3。Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。然后修改application.properties文件,添加数据库配置。

2024-06-27 14:41:13 340

原创 Redis缓存三兄弟(击穿、穿透、雪崩)

但布隆过滤器是有误判发生的,如果一个元素多次hash计算后对应的数组的位置刚好是其他多个元素已经hash后的改为1的位置,这样就会产生误判,当然这个误判我们是可以设置的,在bloomFilter.tryInit(size ,0.05);缓存雪崩意思是设置缓存时采用了相同的过期时间,导致缓存在某一时刻同 时失效,请求全部转发到DB,DB 瞬时压力过重雪崩。缓存穿透:查询一个不存在的数据,MySQL查询不到的数据也不会直接写入缓存,就会导致每次请求都查询数据库,使得数据库访问压力过大,产生异常甚至宕机。

2024-06-27 07:44:11 389

原创 盛水最多的容器

用两个指针,一个指向开头,一个指向结尾,然后我们每次移动一个指针,这时候我们要考虑一个问题,我们要移动哪一个指针,我们看到这个公式,我们可以思考一下,我们每次移动指针,两个板子之间的距离都是会变小,那么我们要是尽可能的想让我们总存水量变大,那么我们就要让我们两个板子之间的最小值变大,我们移动大的那个指针只会让我们的答案不变或者变小,所以我们只有移动小的那个指针才可以达到变化的一个作用。总存水量 = 两个板子之间的最小值 * 两个板子之间的距离。2.当n小于2时,视为不能形成容器,请返回0。

2024-06-26 21:44:31 145

原创 408计算机学科基础综合2022 年 42 题代码实战

这道题虽然没有要求代码实现但根据题目要求我们可以试一下使用堆排序的实现来实现。⑴ 设计一个完成上述查找任务的算法,要求平均情况下的比较次数尽可能少,简单描。⑵ 说明你所设计的算法平均情况下的时间复杂度和空间复杂度。,元素值均为该堆元素类型能表示的最大数。述其算法思想,不需要程序实现。)算法平均情况下的时间复杂度是。当数据全部扫描完毕,堆。)个数保存在一维数组。

2024-06-26 21:00:50 206

原创 408计算机学科基础综合2014 年 42 题真题讲解

2)若 a<b,则舍弃序列 A 中较小的一半,同时舍弃序列 B 中较大的一半,要求舍弃的。3)若 a>b,则舍弃序列 A 中较大的一半,同时舍弃序列 B 中较小的一半,要求舍弃。这个题目所考察的内容是二分查找,但是有两个数组,是双数组的二分查找,是一道非常经。在保留的两个升序序列中,重复过程 1)、2)、3),直到两个序列中均只含一个元素。因为我们没有使用额外的跟 n 相关的空间,因为不断的二分,次数是 log。1)若 a=b,则 a 或 b 即为所求中位数,算法结束。,两个序列的中位数是含。

2024-06-26 20:55:32 254

原创 数据结构二叉树建树

【代码】数据结构二叉树建树。

2024-06-26 20:51:49 71

原创 数据结构栈与队列练习

, 读取标准输入 3 4 5 6 7。注意每个数字占用两个字符的位置,之前是有一个空格的,第三行的。新建一个栈,读取标准输入。读取标准输入,内容依次是。,然后依次出队,输出。之前也是有一个空格的。

2024-06-26 20:47:45 99

原创 数据结构--栈与队列

线性表是具有相同数据类型的nn≥0)个数据元素的有限 序列,其中n为表长,当n = 0时线性表是一个空表。若用L命名线性表,则其一般表示为L= (a1a2, … ,aiai+1, … ,an栈(Stack是只允许在一端进行插入或删除操作的线性表队列(Queue是只允许在一端进行插入,在另一端删除的线性表基本操作栈:初始化栈。构造一个空栈S分配内存空间。销毁栈。销毁并释放栈S所占用的内存空间。

2024-06-26 20:38:31 392

原创 SpringMVC的执行流程

根据返回的ModelAndView(此时会判断是否存在异常:如果存在异常,则执行HandlerExceptionResolver进行异常处理)选择一个适合的ViewResolver进行视图解析,根据Model和View,来渲染视图。根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain执行链对象的形式返回。c) 数据格式化:对请求消息进行数据格式化。

2024-06-26 20:21:33 387

原创 考研高数常见问题及解题方向

2024-06-26 20:15:33 86

原创 SpringBoot程序启动流程解析

在spring环境中,每个bean的初始化都要开发者自己添加设置,但是切换成springboot程序后,自动配置功能的添加帮助开发者提前预设了很多bean的初始化过程,加上各种各样的参数设置,使得整体初始化过程显得略微复杂,但是核心本质还是在做一件事,初始化容器。springboot启动过程由于存在着大量的过程阶段,如果设计接口就要设计十余个标准接口,这样对开发者不友好,同时整体过程管理分散,十余个过程各自为政,管理难度大,过程过于松散。例如spring技术中bean的生命周期管理就是采用标准接口进行的。

2024-06-26 15:11:30 605

原创 Bean的加载方式

由于方式一种需要将spring管控的bean全部写在xml文件中,对于程序员来说非常不友好,所以就有了第二种方式。哪一个类要受到spring管控加载成bean,就在这个类的上面加一个注解,还可以顺带起一个bean的名字(id)。这里可以使用的注解有@Component以及三个衍生注解@Service、@Controller、@Repository。@Service当然,由于我们无法在第三方提供的技术源代码中去添加上述4个注解,因此当你需要加载第三方开发的bean的时候可以使用下列方式定义注解式的bean。

2024-06-26 15:08:03 743

原创 SpringBoot绑定第三方Bean

做到这其实就出现了一个新的问题,目前我们定义bean不是通过类注解定义就是通过@Bean定义,使用@ConfigurationProperties注解可以为bean进行属性绑定,那在一个业务系统中,哪些bean通过注解@ConfigurationProperties去绑定属性了呢?这样加载对应bean的时候就可以直接加载配置属性值了。:在配置类上开启@EnableConfigurationProperties注解,并标注要使用@ConfigurationProperties注解绑定属性的类。

2024-06-26 14:50:36 324

原创 Redis哨兵

Sentinel 会不断检查您的master和slave是否按预期工作:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。

2024-06-26 14:14:31 373

原创 Redis内存回收

执行周期有两种: Redis服务初始化函数initServer()中设置定时任务,按照server.hz的频率来执行过期key清理,模式为SLOW Redis的每个事件循环前会调用beforeSleep()函数,执行过期key清理,模式为FAST。执行周期有两种: Redis服务初始化函数initServer()中设置定时任务,按照server.hz的频率来执行过期key清理,模式为SLOW Redis的每个事件循环前会调用beforeSleep()函数,执行过期key清理,模式为FAST。

2024-06-26 14:10:53 931

原创 Redis通信协议-基于Socket自定义Redis的客户端

【代码】Redis通信协议-基于Socket自定义Redis的客户端。

2024-06-26 14:05:15 74

原创 Redis网络模型

我们的应用程序也好,还是内核空间也好,都是没有办法直接去物理内存的,而是通过分配一些虚拟内存映射到物理内存中,我们的内核和应用程序去访问虚拟内存的时候,就需要一个虚拟地址,这个地址是一个无符号的整数,比如一个32位的操作系统,他的带宽就是32,他的虚拟地址就是2的32次方,也就是说他寻址的范围就是0~2的32次方, 这片寻址空间对应的就是2的32个字节,就是4GB,这个4GB,会有3个GB分给用户空间,会有1GB给内核系统。可以看到,非阻塞IO模型中,用户进程在第一个阶段是非阻塞,第二个阶段是阻塞状态。

2024-06-26 14:03:15 656

原创 String与StringBuilder区别

1.概述:一个可变的字符序列,此类提供了一个与StringBuffer兼容的一套API,但是不保证同步(线程不安全,效率高)2.作用:主要是字符串拼接3.问题:a.刚讲完String,String也能做字符串拼接,直接用+即可,但是为啥还要用StringBuilder去拼接呢?b.原因:String每拼接一次,就会产生新的字符串对象,就会在堆内存中开辟新的空间,如果拼接次数多了,会占用内存,效率比较底。

2024-06-25 16:54:29 616

原创 注解与元注解

1.引用数据类型:类 数组 接口 枚举 注解1.jdk1.5版本的新特性->一个引用数据类型和类,接口,枚举是同一个层次的引用数据类型:类 数组 接口 枚举 注解2.作用:说明:对代码进行说明,生成doc文档(API文档)检查:检查代码是否符合条件 @Override(会用) @FunctionalInterface分析:对代码进行分析,起到了代替配置文件的作用(会用)3.JDK中的注解:@Override -> 检测此方法是否为重写方法。

2024-06-25 16:44:52 1104

原创 正则表达式

正则表达式-预定义字符语法示例:1. "." : 匹配任何字符。(重点) 不能加[]2. "\\d":任何数字[0-9]的简写;(重点)3. "\\D":任何非数字[^0-9]的简写;4. "\\s": 空白字符:[ \t\n\x0B\f\r] 的简写5. "\\S": 非空白字符:[^\s] 的简写6. "\\w":单词字符:[a-zA-Z_0-9]的简写(重点)7. "\\W":非单词字符:[^\w]//预定义字符//1.验证字符串是否是三位数字。

2024-06-25 16:34:12 699

原创 简化开发Lombok

Lombok通过增加一些“处理程序”,可以让javabean变得简洁、快速。Lombok能以注解形式来简化java代码,提高开发效率。开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护。Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。

2024-06-25 16:28:29 295

原创 设计模式笔记

设计模式(Design pattern),是一套被反复使用、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。1995 年,GoF(Gang of Four,四人组)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。-->创建对象。

2024-06-25 16:25:51 95

原创 实现多线程文件上传服务端

【代码】实现多线程文件上传服务端。

2024-06-25 16:16:17 208

原创 网络编程2---TCP编程及文件上传

3.调用socket中的getInputStream,读取客户端发送过来的图片,使用uuid加上时间戳来对文件进行命名防止重复。2.调用ServerSocket中的accept方法,等待客户端连接,返回Socket对象。3.调用socket中的getInputStream,用于读取客户端发送过来的数据。3.调用socket中的getInputStream,读取服务端响应回来的数据。4.调用socket中的getOutputStream,用于给客户端响应数据。2.调用accept方法等待客户端的连接。

2024-06-25 16:14:51 722

原创 网络编程1

这里客户端,发送完最后的报文后,会等待2MSL,因为有可能服务器没有收到最后的报文,那么服务器迟迟没收到,就会再次给客户端发送释放连接的报文,此时客户端在等待时间范围内接收到,会重新发送最后的报文,并重新计时。为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789->号称能给地球上的每一粒沙子分配一个IP地址。用两个字节表示的整数,它的取值范围是0~65535。

2024-06-25 16:00:04 405

原创 利用反射编写一个小框架

b.问题:将配置文件放到src下,out路径下会自动生成配置文件,但是如果我们将来将所有的配置文件都放到src下,那么src下面会显得特别乱。根据接口的class对象,创建一个实现类对象,然后通过配置文件中的方法名反射这个方法,invoke执行这个方法。:在配置文件中,配置类的全限定名,以及配置一个方法名,通过解析配置文件,让配置好的方法执行起来。解决:我们可以将配置文件放到src下,放到src下,out路径下就会出现配置文件。a.问题:如果将配置文件放到resources资源目录下,我们怎么读取。

2024-06-20 17:05:49 242

原创 class类的以及class对象的介绍以及反射介绍

1.反射概述:解剖class对象的一个技术2.问题:能解剖class对象的啥呢?a.解剖出成员变量 : 赋值b.解剖出成员方法: 调用c.解剖出构造方法: new对象3.用反射的好处:让代码变的更通用,更灵活4.问题:反射最开始的一步是干啥?获取Class对象5.class对象:class文件对应的对象class类:描述class对象的类叫做class类。

2024-06-20 17:03:18 426

原创 类的加载时机

1.new对象2.new子类对象(new子类对象先初始化父类)3.执行main方法4.调用静态成员5.反射,创建Class对象。

2024-06-20 16:53:11 317

原创 Junit单元测试

1.概述:Junit是一个单元测试框架,可以代替main方法去执行其他的方法2.作用:可以单独执行一个方法,测试该方法是否能跑通3.注意:Junit是第三方工具,所以使用之前需要导入jar包。

2024-06-20 16:51:38 193

原创 线程池实现多线程

问题:之前来一个线程任务,就需要创建一个线程对象去执行,用完还要销毁线程对象,如果线程任务多了,就需要频繁创建线程对象和销毁线程对象,这样会耗费内存资源,所以我们就想线程对象能不能循环利用,用的时候直接拿线程对象,用完还回去。4、需要第三个线程任务,如果池中有空闲线程则直接使用,用完返回。2、需要第一个线程任务,检查池中是否有对象,如果没有则创建线程对象,使用完还给线程池;3、需要第二个线程任务,如果有则直接使用,用完返回池中,如果没有则创建,用完返回;a.参数:指定线程池中最多创建的线程对象条数。

2024-06-20 16:38:32 170

原创 Lock基本使用

synchronized:不管是同步代码块还是同步方法,都需要在结束一对{}之后,释放锁对象。Lock:是通过两个方法控制需要被同步的代码,更灵活。2.实现类:ReentrantLock。1.概述:Lock是一个接口。unlock() 释放锁。lock() 获取锁。

2024-06-20 16:28:02 98

原创 多线程等待唤醒案例

前提:一个线程生产,一个线程消费,不能连续生产,不能连续消费。线程间等待唤醒机制(生产者,消费者)(线程之间的通信)。2、设置flag,如果为true则有产品,需要消费者消费,生产者等待;4、利用wait和notify方法来保证生产一个消费一个,防止连续生产与消费。1、生产者生产产品:定义count++,消费者消费产品:输出count;案例:生产者生产产品,消费者消费产品。不能连续生产,不能连续消费。3、加锁来控制线程间的切换,防止在生产和消费时发生线程切换。

2024-06-20 16:23:34 191

原创 InnoDB主键索引的B+tree的高度

树的结点存在一页中,假设一行数据大小为1k,一页中可以存储16行这样的数据。InnoDB的指针占用6个字节的空 间,主键即使为bigint,占用字节数为8。n * 8 + (n + 1) * 6 = 16*1024 , 算出n约为 1170。也就是说,如果树的高度为3,则可以存储 2200w 左右的记录。也就是说,如果树的高度为2,则可以存储 18000 多条记录。

2024-05-24 14:56:36 178 1

空空如也

空空如也

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

TA关注的人

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