自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 死磕CMS垃圾回收器

与 ParNew 一样是多线程收集器。其它收集器关注点是尽可能缩短垃圾收集时用户线程的停顿时间,而它的目标是达到一个可控制的吞吐量,它被称为“吞吐量优先”收集器。这里的吞吐量指 CPU 用于运行用户代码的时间占总时间的比值。停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验。而高吞吐量则可以高效率地利用 CPU 时间,尽快完成程序的运算任务,主要适合在后台运算而不需要太多交互的任务。缩短停顿时间是以。

2023-10-07 17:20:15 2331

原创 Raft协议浅析

raft是paxos算法的一种实现。目标是提供更清晰的逻辑分工使用算法本身更好理解,同时有更高的安全性。Raft能为在计算机集群之间部署有限状态机提供一种通用方法,并确保集群内的任意节点在某种状态转换上保持一致(个人理解就是保证主从的一致性)。在redis的哨兵模式中就用到了raft协议。与paxos最主要的区别:paxos每次遇到一个新的请求会选举新的leader,所以这个leader是短期的。而raft协议选取的leader是永久性的,除非因为网络问题等因素才会进行leader重新选举。

2022-11-10 18:09:59 3584 1

原创 深入理解java线程池+源码解读

线程是稀缺资源,如果在高并发的情况下被无限制地创建和销毁,不仅会消耗系统资源,还会降低系统的稳定性。所以线程池的出现就是为了解决这些问题的。线程池通过重用已经存在的线程资源,减少线程创建和销毁的次数,提高了性能。

2022-10-26 19:35:33 3437 1

原创 apollo配置中心快速搭建

本文主要用户语速搭建apollo应用,基于官网文档进行搭建。

2022-10-23 18:34:35 792

原创 常见限流算法

如果接口无限制地被调用,会对系统造成一定的影响,我们必须根据系统性能合理设置接口调用的频率。

2022-10-23 16:10:17 310

原创 HashMap中key通过hash定位table下标的过程

本文主要介绍jdk 1.8 中HashMap中put key时,如何通过哈希定位到table数组的。几个比较重要的操作。

2022-10-23 14:49:21 677

原创 自定义钉钉群机器人

注意:自定义关键词:当发送的关键词包含这里的自定义关键词时,才会真正的发送加签:在发送时,需要指定加签证明,以保证安全IP字段:指定的ip发送的消息才可以真正发送我们使用关键字安全设置以上3种安全设置必须至少选一种。

2022-10-23 12:55:54 2880

原创 docker搭建主从架构和哨兵模式

下文介绍使用docker来创建redis的主从架构和哨兵模式。

2022-10-10 21:01:25 974

原创 常用注解@JsonField、@JsonFormat、@DateTimeFormat区别

DateTimeFormat是前端数据到后端数据的处理@JsonFormat是后端到前端数据的处理@JsonField是集两者于一身的一个注解综上所述,更建议使用@JsonField。

2022-08-12 15:52:53 2253

原创 springboot+easyExcel

工作时,我们有时候会遇见这样的场景,老板要求我们在数据库中统计一些数据,并以excel表格的方式发送给老板。点击导出结果导出当前结果选择对应的文件导出即可通过sql语句可以直接得到我们需要的目标数据那么我们通过sql语句不能拿到我们想要的数据,而是需要进一步在java中进行进一步计算,这时我们就无法使用navicat了。这时我们使用的就是java中的excel操作:easyExcel本文介绍springboot中如何使用easyExcel。...

2022-08-11 23:30:27 2026

原创 Collections.singletonList(T o)

java.util.Collections类的singletonList()方法用于返回仅包含指定对象的不可变列表。返回的列表是可序列化的。该列表将始终仅包含一个元素,因此称为单例列表。当我们尝试在返回的单例列表中添加/删除元素时,它会给出UnsupportedOperationException。...

2022-07-25 21:38:41 784 1

原创 fastjson使用方法

本文主要介绍项目中经常使用到的json库fastjson,这是在前后端分离项目中最常使用到的json库。

2022-07-25 21:24:46 690

原创 Illegal mix of collations for operation ‘UNION‘(bug记录)

原因是union语句会将两集合进行排序,此时每个字段的排序规则应该一样。在使用union语句时,出现错误。两个排序规则不一样就会报错。

2022-07-25 15:43:38 1647

原创 在springboot中使用 @Async 方法

当我们没有自定义时,springboot是怎么样采用默认配置的?翻译当spring执行这个方法时,默认会搜索关联的线程池定义。上下文中唯一的Spring框架TaskExecutorbean或名为“taskExecutor”的Executorbean。如果这两个都不能解析,默认会使用spring框架SimpleAsyncTaskExecutor来处理异步方法的执行。}结论一般情况下,建议手动实现AsyncConfigurer来自定义线程池。httpshttpshttps。...

2022-07-22 17:58:11 979

原创 后端分页应该注意的事项

在工作时,业务要求将查询出来的数据进行分页并随机排序,因为数据量较小,我是直接将全部数据查出来,在service中进行随机排序后,再进行的分页操作,这就造成了数据在第一页和第二页存在数据重复的情况。当第二次请求时请求第二页,A数据在分页之前可能跑到第二页的数据的位置,此时再进行分页,就会发现本来在第一页出现过的数据A,又在第二页中重复出现。所以在进行分页之前必须保证每个数据在一个确定的位置上,这样才会保证数据不会重复出现。在进行分页的情况下,没有整体的乱序,只有局部乱序,即分页后,对当前页进行乱序操作。..

2022-07-21 14:58:07 506

原创 动态递归之严格位置依赖优化

LeetCode。

2022-07-20 23:52:41 70

原创 动态规矩-数组压缩优化

首先先看一个简单且经典的动态规划问题。

2022-07-17 17:30:46 162

原创 如何自定义一个注解?

想要自定义一个注解,就必须了解5大元注解其中Retention是一个枚举类: 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃(.java文件):注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期(.class文件): 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在(内存中的字节码)@Target(ElementType.Field)指定注解会被JavaDoc工具提取成文档。默认情况下,JavaDoc是不包

2022-07-14 18:23:18 4581 1

原创 bug记录:JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;

JSON parse error: Cannot deserialize instance of out of START_ARRAY token;出现原因,在controller层使用@RequestBody User user 来接收请求时,前端传来的是json数据,其中某个字段传来的是数组,但是我们在传输对象中接收的却不是数组,从而出现次异常。...

2022-07-12 13:29:26 5747

原创 工作方法记录

Math.toIntExact 将long类型的数据改为int类型的数据。源码如下:传入long,返回int,如果long超过了int的范围时,抛出异常

2022-07-12 13:13:36 2000

原创 Slf4j + Logback日志框架

先引入相关依赖(当然很多包会间接依赖这些依赖)这里使用Slf4j的原因,市面上有很多日志框架,Slf4j可以看作一个接口或类似jdbc,将不同的日志框架整合起来,方便我们在一个项目中需要改变日志框架时,可以很好的进行维护。这里我们使用的是Slf4j + logback的方式。另外,Slf4j 日志输出采用占位符{}的方式,相对于其他的日志框架可以避免很多字符串拼接而造成的性能问题。接下来聊一聊关于logback配置文件的问题:当spring加载时会自动去路径下找到logback.xml的名字的文件并加载

2022-07-02 14:07:28 367 1

原创 mybatis 代码生成器(2)

mybatis generator 配置文件主生成类

2022-06-24 22:15:42 84

原创 后端中使用分页的几种方法(建议收藏)

前端会传来数据 ,表示第页显示条数据因为我们是直接使用sql语句的,所以我们需要使参数满足limit语法所以以下进行一定的计算然后在我们查询sql的最后加上limit语句即可插件Mybatis-PageHelper(拦截器原理)需要依赖该插件可以先让我们在层查询出列表后,过滤后再进行分页第一步:设置分页第二步:从层获取列表数据并自行过滤第三步:分页封装之后,里面的属性就可以供我们使用了。具体可以使用的数据如下在service中对list进行拆分使用的进行分页MP官方插件首先需要

2022-06-24 16:51:25 14262 2

原创 报错:java.lang.Integer cannot be cast to java.lang.Long

从数据库中查询相关的数据,类型为int。使用mybatis。今天做项目遇到了一个问题,就是当使用mybatis时,映射参数到Map,我开始使用的是;来接受数据,但是后来却报错我并不知道原因,其实也就是类型转化错误,但是我在数据表中和后端中都没有设置Long类型呀,怎么会有数据转换问题?在然后在网上查阅资料,最终找到了一个解决方案:将改为 ;这样,无论mybatis映射的是什么数据类型,都将其先转化为Object,然后我们再在层中进行类型的转化,这样就可以在一定程度上避免类型转化问题。...

2022-06-21 15:46:35 1335

原创 后端中dto、vo、entity的区别

在后端的项目开发中,我们经常会碰到一些包,比如、、,其中都会有一些实体类,但是每个包到底表示什么含义呢?首先表示对数据库中所有表的映射,是根据数据库表字段设计出来的实体(要求表名与类名相同,字段名与成员变量名相同)vo包表示前端页面传过来的如表单等数据的字段,比如当前端填写了一个表单,当前端传过来的数据较多时,我们可以创建一个实体类,将前端传来的数据字段名作为成员变量名,这样我们就可以使用注解快速获取参数内容,而不需要使用Request对象来一个个获取,方便开发。而dto包表示的是 和的一个中间转换对象,是

2022-06-15 17:25:59 18723 6

原创 第二次面经实录

quartz学习文档9. jvm运行机制

2022-06-13 14:46:57 93

原创 堆排序与加强堆代码 用于记忆

堆排序加强堆两种堆中最重要的是3个方法, ,

2022-06-09 16:27:01 89

原创 第一次面经总结

原来的Date类可读性较差:Date日期的格式化JDk自带的api比较麻烦,通常会使用第三方日期时间库如:joda-time,commos-langjdk8 新增的日期时间类:LocalDate、LocalTime、LocalDateTime、ZoneId、ZoneDAteTimeLocalDate:主要是友好的日期格式,不包含时间和时区构造方法:LocalDate(2020,11,04) 年月日sout(localDate) 有较好的可读性LocalTime 时间类LocalTime.of(12,1

2022-06-04 20:54:25 103

原创 日期相关工具包

日期相关操作方法,常用于前端日历获取信息

2022-06-01 12:55:59 85

原创 后端业务之忘记密码功能

本文讲解是基于前后端分离项目关于项目使用邮箱忘记密码的功能前端需要设计一个页面,点击找回密码,跳转到找回密码界面。找回密码界面有三个数据项:邮箱号(当然也可以是手机号,不过本篇文章主要研究邮箱的方式)、验证码。用户输入邮箱,点击发送验证码。此时前端调用后端的接口(数据部分会带上邮箱号)后端接收到邮箱,会先在数据库查找该邮箱号是否存在。如果不存在,则返回前端一些可读的错误信息。如果查询到邮箱对应有存在用户,则可以执行向该邮箱发送验证码的功能。想要通过Java向指定的邮箱发送验证码,首先我们能.

2022-05-23 19:57:21 987

原创 用上厕所的时间快速学会lambda

一.什么是Lambda表达式?Lambda表达式是JDK1.8开始之后的新技术,是一种代码的新语法。 作用:“**核心目的是为了简化匿名内部类的代码写法**”。1.Lambda格式:(匿名内部类被重写方法的形参列表) -> { 被重写方法的方法体代码。 }2.Lambda表达式的使用前提: (1)Lambda表达式并不能简化所有匿名内部类的写法。 (2)Lambda表达式只能简化**接口中只有一个抽象方法的匿名内部类形式。3.

2022-04-30 21:13:28 160 1

原创 深入理解java异常体系

首先请看下图的异常体系结构Throwable类(不是接口)是所有异常类的跟类我们主要看看继承他的Error类与Exception类Error:Error 属于程序无法处理的错误 ,我们没办法通过 catch 来进行捕获 。例如Java 虚拟机运行错误(Virtual MachineError)、虚拟机内存不够错误(OutOfMemoryError)、类定义错误(NoClassDefFoundError)等 。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。常见的Error:Virt

2022-04-28 15:32:26 794

原创 docker安装mysql

首先拉取mysql的镜像docker pull mysql运行容器docker run -p 3306:3306 --name mysql01 \-v /mydata/mysql/log:/var/log/mysql \-v /mydata/mysql/data:/var/lib/mysql \-v /mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-d mysql# -d 表示后台启动# -p 表示端口映射#

2022-04-18 10:18:09 635

原创 springboot项目热部署

文章目录1.setting设置2.registry配置3.加入依赖配置4.启动配置5.yml文件配置springboot微服务在启动过程中非常慢,特别是大型项目。那我们在开发环境中如果对某一些代码进行修改,如果像以前一样重新启动项目,严重地降低了开发效率,这是我们就要使用热部署。热部署是指在我们修改了代码,在不重新手动启动项目地情况下,自动帮助我们重新编译、启动项目,提升了开发相率。本项目使用的是IDEA进行热部署。1.setting设置2.registry配置shift+ctrl+alt

2022-04-16 12:18:15 984

原创 (12)Redis中集合应用场景

集合常见的集合统计模式聚会统计:多个集合的聚合结果包括:统计多个集合的共有元素(交集统计);把两个集合相比,统计其中一个集合独有的元素(差集统计);统计多个集合的所有元素(并集统计)场景:统计某网站每天的新增用户数和第二天的留存用户数每天新增用户首先定义一个set集合用于保存所有登陆过的用户的集合另外定义一个指定日期当天登录的用户这样统计新增用户数可以使用差集user:id - user🆔日期 就可以得到指定日期新增的用户了怎么记录第二天留存用户数?此时我们记录两个集合user🆔

2022-04-15 09:37:15 833

原创 (11)Redis之海量数据下String结构与存储的缺点

文章目录一.背景二.String的底层数据结构1.String怎么进行数据保存的:RedisObjectint编码embstr编码raw编码jemalloc分配2.String缺点三.解决String占用大量内存的方法1.压缩列表 ziplist2.需要解决的问题3.二级编码4.注意关于压缩列表升级为哈希表问题一.背景当我们要存储“单值”数据时(例如0123456789:0987654321,可以看作一串id对应着另一串id)这样的数据,我们第一个想到的就是是使用String类型来进行存储。这样我们就

2022-04-13 21:50:41 1267

原创 (九)redis如何存储海量数据

文章目录一.引入二.切片集群1.简介2.数据存储方案:scale up和scale out`纵向扩展横向扩展3.两种方式优缺点对比:4.从横向扩展转换为纵向扩展就需要解决一下问题:三.数据切片与实例的对应分布关系Redis Cluster 是切片集群的具体实现具体映射过程什么情况下不均分哈希槽位数量四.客户端如何定位数据?五.重定向机制MOVED与ASK不同点六.总结一.引入给出一个场景,要求使用Redis保存 5000 万个键值对,每个键值对大约是 512B,经计算一共需要花费约25G内存。通常我们想

2022-04-12 22:33:51 3967

原创 springboot项目配置两个数据源

文章目录创建一个springboot项目,并在pom中引入相关的依赖创建yml配置文件创建主启动类创建datasource配置类配置mapper与xml测试文章采用springboot+mysql+mybatis来配置两个数据库。其中数据库连接池采用的是springboot默认的 hikari ,如果想用其他的数据库连接池,请引入相关的依赖。创建一个springboot项目,并在pom中引入相关的依赖<parent> <groupId>org.springframe

2022-04-12 10:45:05 11757 6

原创 (八)哨兵机制的集群模式

本文主要知识点:基于 pub/sub 机制的哨兵集群组成过程;基于 INFO 命令的从库列表,这可以帮助哨兵和从库建立连接;基于哨兵自身的 pub/sub 功能,这实现了客户端和哨兵之间的事件通知。文章目录哨兵集群基于 pub/sub 机制的哨兵集群模式频道哨兵通过INFO命令获取从库信息基于 pub/sub 机制的客户端事件通知客户端如何订阅哨兵?Leader选取Leader选取注意哨兵集群在哨兵模式下建立多个哨兵,一般建立三个或三个以上构成哨兵集群设置哨兵服务的主库:sentinel

2022-04-10 21:34:27 2736

原创 (七)拿下redis哨兵模式

文章目录一.为什么需要哨兵模式二.哨兵模式的主要任务监控选主通知三.实现流程主观下线与客观下线选主流程一定的筛选条件一定的规则第一轮:优先级最高的从库得分高第二轮:和旧主库同步程度最接近的从库得分高第三轮:ID号小的从库得分高一.为什么需要哨兵模式在redis的主从模式中,有多个从服务器,但是只有一个主服务器,从服务器主要给从客户端提供读数据的操作,主服务器负责实现数据更新,并将更新的数据通知到与它相连的从服务器。主服务器只有一个,那么当主服务器宕机后,该怎么办呢?这种情况下基本上redis集群的数据更

2022-04-10 17:00:46 928

空空如也

空空如也

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

TA关注的人

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