自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 redis 使用场景 - 双写一致性

2、利用canal中间件,不需要修改业务代码,伪装为MySQL的一个从节点,canal通过读取binlog数据更新缓存。删除缓存--------------------> 修改数据库-------------------->删除缓存。2、排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作。排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作。1、共享锁:读锁readLock,加锁后,其他线程可以共享读操作。共享锁:读锁readLock,加锁后,其他线程可以共享读操作。

2023-07-01 13:59:39 320

原创 Redis使用场景 - 缓存穿透、击穿、雪崩

当线程一查询数据时,获取互斥锁,同步redis数据,写入缓存;有人说,我们不是要把数据库数据同步到redis中,在数据同步到redis过程中,花费了过多的时间,在这期间,有大量并发请求。:给某一个key设置过期时间,当key过期时候,恰好这个时间点对于key有大量并发请求过来,这些并发请求可能会瞬间把数据库压垮;:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。解决方案一:缓存空数据,查询返回数据为空,仍把这个结果缓存。解决方案二:布隆过滤器(拦截不存在的数据)

2023-07-01 12:13:56 275 1

原创 Nacos注册中心

国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。

2023-06-24 12:25:00 1050

原创 Eureka注册中心

SpringCloudRibbon的底层采用了一个拦截器,拦截了RestTemplate发出的请求,对地址做了修改。用一幅图来总结一下:基本流程如下:拦截我们的RestTemplate请求RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-serviceDynamicServerListLoadBalancer根据user-service到eureka拉取服务列表eureka返回列表,localhost:8081、localhost:8082。

2023-06-24 11:31:24 687

原创 Apache POI

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。简单来说就是,我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。银行网银系统导出交易明细各种业务系统导出Excel报表批量导入业务数据。

2023-06-10 20:42:57 154

原创 Apache ECharts

Apache ECharts 是一款基于 Javascript 的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。1). 柱形图2). 饼形图3). 折线图不管是哪种形式的图形,最本质的东西实际上是数据,它其实是对数据的一种可视化展示。

2023-06-10 20:40:17 354

原创 HttpClient

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。发送HTTP请求接收响应数据当我们在使用扫描支付、查看地图、获取验证码、查看天气等功能时其实,应用程序本身并未实现这些功能,都是在应用程序里访问提供这些功能的服务,访问这些服务需要发送HTTP请求,并且接收响应数据,可通过HttpClient来实现。

2023-06-10 20:35:55 238

原创 WebSocket

WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接, 并进行双向数据传输。HTTP是短连接WebSocket是长连接HTTP通信是单向的,基于请求响应模式WebSocket支持双向通信HTTP和WebSocket底层都是TCP连接既然WebSocket支持双向通信,功能看似比HTTP强大,那么我们是不是可以基于WebSocket开发所有的业务功能?

2023-06-10 20:33:18 81

原创 Spring Task

是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。定时任务框架定时自动执行某段Java代码为什么要在Java程序中使用Spring Task?1). 信用卡每月还款提醒2). 银行贷款每月还款提醒3). 火车票售票系统处理未支付订单4). 入职纪念日为用户发送通知只要是需要定时处理的场景都可以使用Spring Task。

2023-06-10 20:27:06 144

原创 多线程、线程池

首先,什么是线程安全问题呢?线程安全问题指的是,多个线程同时操作同一个共享资源的时候,可能会出现业务安全问题。下面通过一个取钱的案例给同学们演示一下。案例需求如下场景:小明和小红是一对夫妻,他们有一个共享账户,余额是10万元,小红和小明同时来取钱,并且2人各自都在取钱10万元,可能出现什么问题呢?如下图所示,小明和小红假设都是一个线程,本类每个线程都应该执行完三步操作,才算是完成的取钱的操作。但是真实执行过程可能是下面这样子的。

2023-06-09 11:33:42 209

原创 IO流 (字节流、字符流)

IO流的作用:就是可以对文件或者网络中的数据进行读、写的操作。如下图所示IO流在Java中有很多种,不同的流来干不同的事情。Java把各种流用不同的类来表示,这些流的继承体系如下图所示:IO流分为两大派系:1.字节流:字节流又分为字节输入流、字节输出流2.字符流:字符流由分为字符输入流、字符输出流。

2023-06-08 20:54:40 6892

原创 前端的传参方式有哪些?后端如何接收?

【代码】前端的传参方式有哪些?后端如何接收?

2023-05-29 17:38:52 1115

原创 聊一下对ThreadLocal的理解?

ThreadLocal类中包含了以上的三个主要的操作方法,其中定义了ThreadLocalMap这一内部类,顾名思义,这是一个类似HashMap的表结构,内部存储的确实也是(key,value)键值对,但内部只有数组,而没有链表,key是ThreadLocal对象,value是我们要操作的数。在每个线程中存储一个变量的副本,这样在每个线程对该变量进行使用的使用,使用的即是该线程的局部变量,从而保证了线程的安全性以及高效性。3、进行事务操作,用于存储线程事务信息。4、数据库连接,Session会话管理。

2023-05-26 20:19:01 72

原创 nginx的限流方式?令牌桶?漏桶算法?

漏桶算法其实很简单,可以粗略的认为就是注水漏水过程,往桶中以一定速率流出水,以任意速率流入水,当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率。的限流主要是两种方式:限制访问频率和限制并发连接数。

2023-05-26 19:32:43 280

原创 什么是接口幂等性?用户下单时如何解决重复提交问题?

接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性1、前端控制页面上控制按钮点击一次就置灰,不让重复点击。这种方案并不是靠保证接口幂等实现的,可靠性不高但简单。2、后端控制。

2023-05-26 19:20:48 293

原创 Redis的持久化机制有哪些?各自的特点是什么?

Redis持久化。

2023-05-25 17:57:13 102

原创 将一个类声明为 Spting 的bean 的注解有哪些?

将一个类声明为 Spting 的bean 的注解有哪些?@Component: 通用的注解,可标注任意类为 Spring 的组件。如果一人 Bean 不知道属于哪个层,可以使用@Component注解标注。 @Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。 @Service : 对应服务层,主要设计一些复杂的逻辑,需要用到 Dao 层。 @Controller: 对应 Spring MVC 控制层,主要用来接受用户请求并调用 Service 层返回数据给前端页面 @

2023-05-24 21:48:53 79

原创 @Resources 和@Autowired 的区别? @Component 和@Bean 的区别?

@Resource和@Autowired的区别?@Autowire 和 @Resource都可以用来装配bean。@Autowired是Spring定义的注解,而@Resource是idk的注解 @Autowire 默认按类型装配,如果找到了判断是否找到一个bean,如果是只有一人bean进行自动装配。如果存在多个bean的情况判断是否配置了Qualifier,如果配置了那么按照Qualifier参数查找bean如果找到进行自动装配,如果没有配置Qualifier,按照名称查找bean。默认情况下必须

2023-05-24 21:48:33 173

原创 Spring 的AOP中通知的类型有哪些?

AfterReturning : 返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行。@After :后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。@AfterThrowing : 异常后通知,此注解标注的通知方法发生异常后执行。@Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行。@Before:前置通知,此注解标注的通知方法在目标方法前被执行。

2023-05-24 21:42:23 121

原创 AOP的代理有几种方式?都有什么特点?AOP的应用场景有哪些?

代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。静态代理和 JDK 代理模式都要求目标对象实现一个接口,但有时候目标对象只是一个单独的对象,并没有实现任何接口,这个时候就可以使用目标对象子类来实现代理,这就是 cglib 代理。代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可(解耦合),对于如上的客户端代码,RealInterner() 可以应用工厂将它隐藏。静态代理会产生很多静态类,所以我们要想办法可以通过一个代理类完成全部的代理功能,这就引出了动态代理。

2023-05-24 21:39:55 168

原创 如何实现JWT自动续期?

作为key、value存储到cache缓存里面 (这时候key、value值一样),将缓存有效期设置为 token有效时间的2倍。3、根据规则取出cache token,判断cache token是否存在,此时主要分以下几种情况。是否是有效token,如果token无效表明是非法请求,直接抛出异常即可;2、当该用户再次请求时,通过后端的一个。1、登录成功后将用户生成的。

2023-05-24 21:24:33 1426

原创 什么是反向代理?什么是负载均衡?为什么要使用?

反向代理是一种中间层服务器,它接收来自客户端的请求并将请求转发到后端服务器上处理,然后再将处理结果返回给客户端。负载均衡是一种通过分发请求来平衡服务器负载的技术。它可以将请求分发到多个后端服务器上,从而避免单个服务器的负载过高,提高系统的可靠性和性能。2.提高可靠性:当某个服务器故障或者负载过高时,可以将请求分发到其他正常的服务器上,从而提高系统的可靠性。1.提高性能:可以将请求分发到多个服务器上,从而提高系统的吞吐量和响应速度。2.负载均衡:可以将请求分发到多个后端服务器,从而实现负载均衡。

2023-05-24 20:53:45 393

原创 什么是缓存穿透、缓存雪崩、缓存击穿?如何解决?

布隆过滤器的作用是某个 key 不存在,那么就一定不存在,它说某个 key 存在,那么很大可能是存在(存在一定的误判率)。其实跟缓存雪崩有点类似,缓存雪崩是大规模的key失效,而缓存击穿是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。假如有黑客传进大量的不存在的key,那么大量的请求打在数据库上是很致命的问题,所以在日常开发中要对参数做好校验,一些非法的参数,不可能存在的key就直接返回错误提示,要对调用方保持这种“不信任”的心态。

2023-05-24 20:47:02 51

原创 Redis的数据类型有哪些?特点是什么?

字符串(string):普通字符串,Redis中最简单的数据类型哈希(hash):也叫散列,类似于Java中的HashMap结构列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList集合(set):无序集合,没有重复元素,类似于Java中的HashSet有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素。

2023-05-24 20:38:26 72

原创 JWT的组成有哪几部分?JWT如何实现防篡改的?

2、Payload(有效载荷)作用:携带一些用户信息 例如{"userId":"1","username":"mayikt"}1、Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg":"HS256","type","JWT}3、Signature(签名)作用:防止Token被篡改、确保安全性 例如 计算出来的签名,一个字符串。通过非对称加密算法及数字签名技术,防止篡改。

2023-05-20 15:17:01 180

原创 Mybatis 是如何进行分页的?分页插件的原理是什么?

Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 sql 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。分页插件的基本原理是使用 Mybatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。一次性把所有数据查出来在通过业务逻辑按需把它截取出来。物理分页:Limit。

2023-05-20 14:57:21 298

原创 Spring框架中用到的设计模式(都用到了哪些设计模式?)

策略模式:Spring中的BeanPostProcessor和BeanFactoryPostProcessor就是基于策略模式实现的,通过不同的策略来处理Bean的初始化和后置处理。模板方法模式:Spring中的JdbcTemplate和HibernateTemplate都是模板方法模式的实现,提供了一些通用的模板方法,简化了数据库操作和ORM操作的流程。迭代器模式:Spring中的集合框架都实现了迭代器模式,提供了一些通用的迭代器接口,方便集合的遍历。

2023-05-20 14:43:35 288

原创 谈谈你对 Spring Boot 自动装配机制的理解

获取候选配置了使用了 Spring Framework 自定义的 SPI 机制,使用 SpringFactoriesLoader#loadFactoryNames 加载了类路径下 /META-INF/spring.factories 文件中的配置类,里面是以 key/value 形式存储,其中一个 key 是 EnableAutoConfiguration 类的全类名,而它的 value 是一个以 AutoConfiguration 结尾的类名的列表。

2023-05-18 15:16:43 78

原创 spring框架bean是否线程安全,若不安全如何处理?

实际上大部分 spring bean 是无状态的(比如 dao 类),在某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model )就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了, 保证线程安全了。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。下共享,大部分是无状态的Bean。

2023-05-18 11:19:16 214

原创 Spring框架bean的生命周期

总之,Spring框架中Bean的生命周期是由Spring容器控制的,开发人员可以通过实现Bean的初始化和销毁方法来控制Bean的生命周期。初始化:在属性赋值完成后,Spring容器会调用Bean的初始化方法,可以在该方法中进行一些初始化操作。属性赋值:在实例化后,Spring容器会根据配置文件中的信息,将Bean的属性值注入到Bean实例中。实例化:当Spring容器接收到创建Bean的请求时,会根据配置文件中的信息创建Bean的实例。使用:初始化完成后,Bean就可以被使用了。

2023-05-18 10:39:56 102

原创 Spring框架的常用注解

Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:在Action只需要声明一个名字叫"userService"的变量来接收由Spring注入的"userService"即可。

2023-05-18 10:16:42 1107

原创 递归算法的使用

案例需求:计算n的阶乘,比如5的阶乘 = 1 * 2 * 3 * 4 * 5;判断File对象如果是文件,就获取文件名,如果文件名是`QQ.exe`则打印,否则不打印。1.先调用文件夹的listFiles方法,获取文件夹的一级内容,得到一个数组。判断File对象如果是文件夹,就递归执行1,2,3步骤。递归是一种算法,从形式上来说,方法调用自己的形式称之为递归。递归的形式:有直接递归、间接递归,如下面的代码。所以:把1,2,3步骤写成方法,递归调用即可。以上只是用代码演示了一下,递归的形式。

2023-05-17 17:07:21 56

原创 File类的使用

通过File类提供的方法可以获取文件大小、判断文件是否存在、创建文件、创建文件夹等。

2023-05-17 17:01:05 96

原创 JDK8新特性(Stream流)

找出姓张,且是3个字的名字,存入到一个新集合中去。1、如何获取List集合的Stream流?2、如何获取Set集合的Stream流?3、如何获取Map集合的Stream流?4、如何获取数组的Stream流?案例需求:有一个List集合,元素有。用Stream流来做,代码是这样的。用传统方式来做,代码是这样的。话不多说,直接上代码演示。话不多说,直接上代码。(或者叫流式编程)。

2023-05-17 16:51:59 190

原创 Java的LocalDateTime类来获取当天时间、前一天时间,本周的开始和结束时间、本月的开始和结束时间

【代码】Java的LocalDateTime类来获取当天时间、前一天时间,本周的开始和结束时间、本月的开始和结束时间。

2023-05-17 11:04:48 4586

原创 集合进阶(Set、Map集合)

所谓双列集合,就是说集合中的元素是一对一对的。Map集合中的每一个元素是以key=value的形式存在的,一个key=value就称之为一个键值对,而且在Java中有一个类叫Entry类,Entry的对象用来表示键值对对象。键不能重复,值可以重复,每一个键只能找到自己对应的值。下面我们先写一个Map集合,保存几个键值对,体验一下Map集合的特点// 一行经典代码。按照键 无序,不重复,无索引。// 有序,不重复,无索引。map.put("手表", 100);map.put("手表", 220);

2023-05-17 09:37:53 61

原创 集合概述和分类

Collection :单列集合,每个元素(数据)只包含一个值Map:代表双列集合,每个元素包含老哥值(键值对),key :valueList系列集合:添加元素是有序、可重复、有索引。ArrayList、LinekdList:有序、可重复、有索引Set系列集合:添加元素是无序、不重复、无索引。HashSet:无序、不重复、无索引;LinkedHashSet:有序、不重复、无索引。TreeSet:按照大小默认升序排序、不重复、无索引。

2023-05-16 15:29:15 736

原创 Java面试:spring事务的实现方式和原理以及隔离级别

spring的事务管理是通过AOP的代理来实现的,在方法上加上@Transactional注解后,spring会基于这个类生成一个代理对象,会将这个类的代理对象作为bean对象,当使用这个代理对象执行方法时,如果方法上存在@Trancational注解后,那么代理逻辑会把事务自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行业务逻辑方法没有出现异常,那么代理逻辑就会把事务提交,如果业务逻辑出现异常,那么则会将事务进行回滚。spring框架提供了两种事务的实现方式:编程式事务、声明式事务。

2023-05-16 13:51:57 343

原创 面试必问spring框架AOP和IOC

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译和运行期动态代理实现程序功能统一维护的一种技术。AOP其实是OOP的延续,利用AOP可以对业务逻辑的各个部分分离,从而使业务逻辑个部分之间的耦合度减低,提高代码复用性和开发效率。(1)AOP与OOP的关系OOP(面向对象编程)主要针对业务逻辑处理过程中的实体及其属性和行为进行封装,能够更清晰的理解逻辑关系。

2023-05-16 13:30:30 93

原创 正则表达式

接下来,我们学习一个全新的知识,叫做正则表达式。正则表达式的作用1:用来校验字符串数据是否合法正则表达式的作用2:可以从一段文本中查找满足要求的内。

2023-05-16 10:53:23 88

空空如也

空空如也

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

TA关注的人

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