高频面试题
#阿怪
这个作者很懒,什么都没留下…
展开
-
redis 使用场景 - 双写一致性
2、利用canal中间件,不需要修改业务代码,伪装为MySQL的一个从节点,canal通过读取binlog数据更新缓存。删除缓存--------------------> 修改数据库-------------------->删除缓存。2、排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作。排他锁:独占锁writeLock也叫写锁,加锁后,阻塞其他线程读写操作。1、共享锁:读锁readLock,加锁后,其他线程可以共享读操作。共享锁:读锁readLock,加锁后,其他线程可以共享读操作。原创 2023-07-01 13:59:39 · 227 阅读 · 0 评论 -
Redis使用场景 - 缓存穿透、击穿、雪崩
当线程一查询数据时,获取互斥锁,同步redis数据,写入缓存;有人说,我们不是要把数据库数据同步到redis中,在数据同步到redis过程中,花费了过多的时间,在这期间,有大量并发请求。:给某一个key设置过期时间,当key过期时候,恰好这个时间点对于key有大量并发请求过来,这些并发请求可能会瞬间把数据库压垮;:查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求都查数据库。解决方案一:缓存空数据,查询返回数据为空,仍把这个结果缓存。解决方案二:布隆过滤器(拦截不存在的数据)原创 2023-07-01 12:13:56 · 177 阅读 · 1 评论 -
前端的传参方式有哪些?后端如何接收?
【代码】前端的传参方式有哪些?后端如何接收?原创 2023-05-29 17:38:52 · 949 阅读 · 0 评论 -
什么是接口幂等性?用户下单时如何解决重复提交问题?
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用;比如说支付场景,用户购买了商品支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条...,这就没有保证接口的幂等性1、前端控制页面上控制按钮点击一次就置灰,不让重复点击。这种方案并不是靠保证接口幂等实现的,可靠性不高但简单。2、后端控制。原创 2023-05-26 19:20:48 · 108 阅读 · 0 评论 -
Redis的持久化机制有哪些?各自的特点是什么?
Redis持久化。原创 2023-05-25 17:57:13 · 71 阅读 · 0 评论 -
将一个类声明为 Spting 的bean 的注解有哪些?
将一个类声明为 Spting 的bean 的注解有哪些?@Component: 通用的注解,可标注任意类为 Spring 的组件。如果一人 Bean 不知道属于哪个层,可以使用@Component注解标注。 @Repository: 对应持久层即 Dao 层,主要用于数据库相关操作。 @Service : 对应服务层,主要设计一些复杂的逻辑,需要用到 Dao 层。 @Controller: 对应 Spring MVC 控制层,主要用来接受用户请求并调用 Service 层返回数据给前端页面 @原创 2023-05-24 21:48:53 · 30 阅读 · 0 评论 -
@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 · 118 阅读 · 0 评论 -
Spring 的AOP中通知的类型有哪些?
AfterReturning : 返回后通知,此注解标注的通知方法在目标方法后被执行,有异常不会执行。@After :后置通知,此注解标注的通知方法在目标方法后被执行,无论是否有异常都会执行。@AfterThrowing : 异常后通知,此注解标注的通知方法发生异常后执行。@Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行。@Before:前置通知,此注解标注的通知方法在目标方法前被执行。原创 2023-05-24 21:42:23 · 46 阅读 · 0 评论 -
AOP的代理有几种方式?都有什么特点?AOP的应用场景有哪些?
代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。静态代理和 JDK 代理模式都要求目标对象实现一个接口,但有时候目标对象只是一个单独的对象,并没有实现任何接口,这个时候就可以使用目标对象子类来实现代理,这就是 cglib 代理。代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可(解耦合),对于如上的客户端代码,RealInterner() 可以应用工厂将它隐藏。静态代理会产生很多静态类,所以我们要想办法可以通过一个代理类完成全部的代理功能,这就引出了动态代理。原创 2023-05-24 21:39:55 · 93 阅读 · 0 评论 -
如何实现JWT自动续期?
作为key、value存储到cache缓存里面 (这时候key、value值一样),将缓存有效期设置为 token有效时间的2倍。3、根据规则取出cache token,判断cache token是否存在,此时主要分以下几种情况。是否是有效token,如果token无效表明是非法请求,直接抛出异常即可;2、当该用户再次请求时,通过后端的一个。1、登录成功后将用户生成的。原创 2023-05-24 21:24:33 · 1180 阅读 · 0 评论 -
Redis的数据类型有哪些?特点是什么?
字符串(string):普通字符串,Redis中最简单的数据类型哈希(hash):也叫散列,类似于Java中的HashMap结构列表(list):按照插入顺序排序,可以有重复元素,类似于Java中的LinkedList集合(set):无序集合,没有重复元素,类似于Java中的HashSet有序集合(sorted set/zset):集合中每个元素关联一个分数(score),根据分数升序排序,没有重复元素。原创 2023-05-24 20:38:26 · 40 阅读 · 0 评论 -
什么是缓存穿透、缓存雪崩、缓存击穿?如何解决?
布隆过滤器的作用是某个 key 不存在,那么就一定不存在,它说某个 key 存在,那么很大可能是存在(存在一定的误判率)。其实跟缓存雪崩有点类似,缓存雪崩是大规模的key失效,而缓存击穿是一个热点的Key,有大并发集中对其进行访问,突然间这个Key失效了,导致大并发全部打在数据库上,导致数据库压力剧增。假如有黑客传进大量的不存在的key,那么大量的请求打在数据库上是很致命的问题,所以在日常开发中要对参数做好校验,一些非法的参数,不可能存在的key就直接返回错误提示,要对调用方保持这种“不信任”的心态。原创 2023-05-24 20:47:02 · 26 阅读 · 0 评论 -
什么是反向代理?什么是负载均衡?为什么要使用?
反向代理是一种中间层服务器,它接收来自客户端的请求并将请求转发到后端服务器上处理,然后再将处理结果返回给客户端。负载均衡是一种通过分发请求来平衡服务器负载的技术。它可以将请求分发到多个后端服务器上,从而避免单个服务器的负载过高,提高系统的可靠性和性能。2.提高可靠性:当某个服务器故障或者负载过高时,可以将请求分发到其他正常的服务器上,从而提高系统的可靠性。1.提高性能:可以将请求分发到多个服务器上,从而提高系统的吞吐量和响应速度。2.负载均衡:可以将请求分发到多个后端服务器,从而实现负载均衡。原创 2023-05-24 20:53:45 · 318 阅读 · 0 评论 -
Mybatis 是如何进行分页的?分页插件的原理是什么?
Mybatis 使用 RowBounds 对象进行分页,它是针对 ResultSet 结果集执行的内存分页,而非物理分页。可以在 sql 内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。分页插件的基本原理是使用 Mybatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 sql,然后重写 sql,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。一次性把所有数据查出来在通过业务逻辑按需把它截取出来。物理分页:Limit。原创 2023-05-20 14:57:21 · 253 阅读 · 0 评论 -
Spring框架中用到的设计模式(都用到了哪些设计模式?)
策略模式:Spring中的BeanPostProcessor和BeanFactoryPostProcessor就是基于策略模式实现的,通过不同的策略来处理Bean的初始化和后置处理。模板方法模式:Spring中的JdbcTemplate和HibernateTemplate都是模板方法模式的实现,提供了一些通用的模板方法,简化了数据库操作和ORM操作的流程。迭代器模式:Spring中的集合框架都实现了迭代器模式,提供了一些通用的迭代器接口,方便集合的遍历。原创 2023-05-20 14:43:35 · 218 阅读 · 0 评论 -
谈谈你对 Spring Boot 自动装配机制的理解
获取候选配置了使用了 Spring Framework 自定义的 SPI 机制,使用 SpringFactoriesLoader#loadFactoryNames 加载了类路径下 /META-INF/spring.factories 文件中的配置类,里面是以 key/value 形式存储,其中一个 key 是 EnableAutoConfiguration 类的全类名,而它的 value 是一个以 AutoConfiguration 结尾的类名的列表。原创 2023-05-18 15:16:43 · 44 阅读 · 0 评论 -
spring框架bean是否线程安全,若不安全如何处理?
实际上大部分 spring bean 是无状态的(比如 dao 类),在某种程度上来说 bean 也是安全的,但如果 bean 有状态的话(比如 view model )就要开发者自己去保证线程安全了,最简单的就是改变 bean 的作用域,把“singleton”变更为“prototype”,这样请求 bean 相当于 new Bean()了, 保证线程安全了。同步机制采用了“时间换空间”的方式,仅提供一份变量,不同的线程在访问前需要获取锁,没获得锁的线程则需要排队。下共享,大部分是无状态的Bean。原创 2023-05-18 11:19:16 · 159 阅读 · 0 评论 -
Spring框架bean的生命周期
总之,Spring框架中Bean的生命周期是由Spring容器控制的,开发人员可以通过实现Bean的初始化和销毁方法来控制Bean的生命周期。初始化:在属性赋值完成后,Spring容器会调用Bean的初始化方法,可以在该方法中进行一些初始化操作。属性赋值:在实例化后,Spring容器会根据配置文件中的信息,将Bean的属性值注入到Bean实例中。实例化:当Spring容器接收到创建Bean的请求时,会根据配置文件中的信息创建Bean的实例。使用:初始化完成后,Bean就可以被使用了。原创 2023-05-18 10:39:56 · 44 阅读 · 0 评论 -
Spring框架的常用注解
Service(“userService”)注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:在Action只需要声明一个名字叫"userService"的变量来接收由Spring注入的"userService"即可。原创 2023-05-18 10:16:42 · 793 阅读 · 0 评论 -
Java面试:spring事务的实现方式和原理以及隔离级别
spring的事务管理是通过AOP的代理来实现的,在方法上加上@Transactional注解后,spring会基于这个类生成一个代理对象,会将这个类的代理对象作为bean对象,当使用这个代理对象执行方法时,如果方法上存在@Trancational注解后,那么代理逻辑会把事务自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行业务逻辑方法没有出现异常,那么代理逻辑就会把事务提交,如果业务逻辑出现异常,那么则会将事务进行回滚。spring框架提供了两种事务的实现方式:编程式事务、声明式事务。原创 2023-05-16 13:51:57 · 286 阅读 · 0 评论 -
面试必问spring框架AOP和IOC
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译和运行期动态代理实现程序功能统一维护的一种技术。AOP其实是OOP的延续,利用AOP可以对业务逻辑的各个部分分离,从而使业务逻辑个部分之间的耦合度减低,提高代码复用性和开发效率。(1)AOP与OOP的关系OOP(面向对象编程)主要针对业务逻辑处理过程中的实体及其属性和行为进行封装,能够更清晰的理解逻辑关系。原创 2023-05-16 13:30:30 · 55 阅读 · 0 评论