面试题
文章平均质量分 61
jyx_boy
这个作者很懒,什么都没留下…
展开
-
Java并发包中的锁升级
当有第二个线程尝试获取已被偏向的锁时,偏向锁会升级为轻量级锁。:如果轻量级锁下的多个线程争用同一个锁导致CAS失败(即自旋操作达到一定次数后),锁会进一步升级为重量级锁,这时会涉及到操作系统层面的互斥锁(mutex),线程会被阻塞和唤醒,开销较大。关键字的实现中,锁的升级通常涉及到从无锁状态到偏向锁、再升级到轻量级锁,最后可能升级到重量级锁的过程。这一系列过程是为了减少锁带来的开销,提高并发效率。:大多数情况下,锁会偏向于第一个获得它的线程,之后此线程再次请求锁时,无需进行同步操作,直接访问。原创 2024-06-06 20:01:58 · 214 阅读 · 0 评论 -
spring事务实现原理
Spring事务的实现原理主要是基于AOP(面向切面编程)原创 2024-06-06 19:58:36 · 296 阅读 · 0 评论 -
GitFlow流程
创建主分支和开发分支。原创 2024-05-11 09:00:04 · 436 阅读 · 1 评论 -
Feign 和 OpenFeign 的区别
OpenFeign是Spring Cloud团队在Feign基础上进行的扩展和封装,因此它更好地融入了Spring Cloud生态系统,特别是在Spring Boot 2.0及以上版本中得到了广泛的应用。结论是,如果你正在使用Spring Cloud构建微服务架构,建议使用OpenFeign,因为它提供了更好的集成和更多的配置选项,且得到活跃的维护和支持。如果你的项目还在使用较早版本的Spring Cloud,可能需要考虑使用Feign,但应注意Feign可能不会获得未来的更新和维护。原创 2024-05-06 17:12:23 · 1001 阅读 · 0 评论 -
Ribbon负载均衡器
在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(比如Nginx,openResty)如Nginx ,通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端在进行负载均衡算法分配。原创 2024-04-23 20:58:42 · 495 阅读 · 0 评论 -
Nacos配置中心动态刷新原理
pull模式:主动拉去配置,通过固定的时间间隔。缺点:频繁请求,时效性不高,时间间隔不好设置。 push模式:服务端检测到变化,主动将新配置推送给客户端,时效性高,但是占用服务端的资源,服务端需要消耗大量的资源去维护和客户端之间的心跳。 nacos模式:客户端间隔10毫秒请求一次服务端,通过在请求头中携带长轮询的超时时间,默认30秒,服务端在接收到客户端的请求后,会将其挂起一段时间(30秒),在这30秒中,如果配置有变化,服务端就立即将配置相应给客户端,如果没有变化,30秒后客户端会再次请求。主要是通过原创 2024-04-23 20:14:34 · 478 阅读 · 0 评论 -
MyBatis 运行原理
映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载。:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。:由会话工厂创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法,是一个既可以发送sql执行并返回结果的,也可以获取mapper的接口。原创 2023-12-19 20:30:45 · 411 阅读 · 0 评论 -
SpringMVC执行流程
Ø 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略。Ø 第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可。主要是适配注解类处理器,注解类处理器就是我们经常使用的。原创 2024-01-09 19:22:14 · 1857 阅读 · 0 评论 -
Cookie与Session的区别
:::: :string :对象。原创 2024-03-04 21:23:29 · 394 阅读 · 0 评论 -
SpringBoot自动配置原理
springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱,我们要从这两位开始就可以了。原创 2024-01-20 16:23:56 · 426 阅读 · 0 评论 -
面试题---Session共享的方式
这意味着只要客户端持有有效的JWT,它就可以在多个服务之间进行身份验证,无需依赖于特定的服务器来维护会话状态。假如用户在其中一个节点登录了网站,在这个网站存储了Session数据,但是由于访问压力,下一次用户通过了另一个节点访问网站,又需要重新登录记录session,非常影响用户体验。会话复制是一种在服务器集群中同步会话状态的机制,确保用户会话数据在所有节点间一致,允许用户请求在任何节点上得到正确处理。粘滞会话,是在一段时间内通过将同一个用户的请求始终路由到同一台服务器来保持会话状态,确保连续的用户体验。原创 2024-03-07 21:58:43 · 377 阅读 · 0 评论 -
面试题
在日志记录领域,尤其是使用如log4j、logback等日志框架时,MDC是一种辅助多线程环境下日志追踪和关联的技术。其原理是在每个线程的上下文中维护一个键值对映射表,用于存储与该线程执行上下文相关的特定信息(如用户ID、事务ID、请求ID等)。当线程在执行过程中生成日志时,MDC中的信息可以自动附加到日志条目中,无需在代码中手动传递这些上下文信息。原创 2024-04-22 21:26:43 · 1098 阅读 · 0 评论 -
如何处理项目日志
Elasticsearch 是一个基于 Apache Lucene 构建的分布式、实时搜索与分析引擎。它能够索引、搜索和分析大量数据,并且提供了水平扩展能力,允许处理 PB 级别的数据。Elasticsearch 适合用于全文搜索、日志分析、监控指标聚合等多种场景,其 RESTful API 让数据的索引和查询变得非常便捷。Logstash 是一个动态数据收集管道,用于从各种数据源接收、解析、转换并将数据发送到“stash”(例如 Elasticsearch)。原创 2024-04-22 21:12:10 · 343 阅读 · 0 评论 -
MongoDB 与MySQL的区别?优势?
MongoDB 与 MySQL 是两种不同类型的数据库管理系统,它们各自有独特的数据模型、查询语言、扩展方式以及适用场景。原创 2024-04-22 20:31:24 · 2238 阅读 · 2 评论 -
Rabbitmq怎么保证消息的可靠性?
为保证消息可靠性,可以设置autoAck=false,使得消费者在处理完消息后手动发送确认(basicAck)。开启confirm回调模式后,RabbitMQ会在消息成功写入到磁盘并至少被一个交换器接受后,向生产者发送一个确认(acknowledgement)。当消息不能被正常消费时(比如达到最大重试次数),可以通过设置TTL(Time To Live)或者死信交换器(Dead Letter Exchange)将消息路由至死信队列,从而有机会后续分析和处理这些无法正常消费的消息。原创 2024-04-09 21:26:28 · 838 阅读 · 0 评论 -
延迟 队列
该种方式可以创建一个承载不同超时时间消息的消息队列,但是这种方式有一个问题,如果消息队列中排在前面的消息没有到超时时间,即使后面的消息到了超时时间,先到超时时间的消息也不会进入死信队列,而是先检查排在最前面的消息队列是否到了超时时间,如果到了超时时间才会继续检查后面的消息。上述实现方式中,ttl延时队列中所有的消息超时时间都是一样的,如果不同消息想设置不一样的超时时间,就需要建立多个不同超时时间的消息队列,比较麻烦,且不利于维护。17:30 延迟时间: 13*30 * 60 * 1000。原创 2024-04-09 19:30:57 · 1458 阅读 · 0 评论 -
什么是MQ ?为什么用MQ?
MQ(message queue)(消息队列),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。原创 2024-04-07 20:44:35 · 3443 阅读 · 0 评论 -
Redis 和 Mysql 数据库数据如何保持一致性
我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力,但是当更新数据库时,如何保证缓存及数据库一致性,一般我们采用延时双删策略。目前系统中常用的做法是一个查询接口,先查询Redis,如果不存在则查询数据库,并将结果放入到Redis中。为什么是删除缓存,而不是更新缓存呢?主要是如果缓存的内容是带有树型结构或者List,Map,那么更新其中一个内容相对较慢。本文所讲操作,均是按照如果缓存不存在,查询数据库后,再放入Redis。原创 2024-03-30 15:03:59 · 517 阅读 · 0 评论 -
Redis主从同步机制和Redis集群
Sentinel是Redis提供的一个高可用性解决方案,它能监控主从节点状态,并在主节点出现故障时自动完成故障转移。当主服务器执行完 bgsave 命令后,主服务器会将 bgsave 命令生成的 rdb 文件发送给从服务器;缺点:虽然比主从模式增加了自动化,但仍不支持自动的数据分区,且随着节点数量增加,管理和配置的复杂性也会增大。在此模式下,有一个主节点负责处理写入请求,而从节点则复制主节点的数据并提供读取服务。以上处理完之后,之后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。原创 2024-03-30 14:45:53 · 357 阅读 · 0 评论 -
Redis 过期删除策略和内存淘汰策略
放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。全称Least recently used,意思为淘汰掉最久未使用(即。2.设置过期时间的键空间选择性移除。3.(4.0及以上版本可用)1.全局的键空间选择性移除。原创 2024-03-30 14:19:36 · 690 阅读 · 0 评论 -
Redis面试题
用scan 命令进行模糊查询,因为使用keys进行模糊查询时,当数据过多时他会阻塞Redis线程,而SCAN命令则基于游标迭代,每次只返回一部分结果,不会一次性加载所有数据,因此更适合大数据量的处理。将客户端的每一个写操作命令以日志的形式记录下来,追加到appendonly.aof的文件末尾,在redis服务器重启时,会加载aof文件中的所有命令,来达到数据恢复的目的。在指定的时间间隔内将内存中的数据集中写入磁盘,也就是快照(Snapshot),数据恢复是将快照文件直接读到内存中。6.0之后工作是单线程。原创 2024-03-25 20:37:15 · 302 阅读 · 0 评论 -
面试题 --- 乐观锁与悲观锁
我们采用的方法是:给库存表的数据表添加一个标识字段——版本号(version),在每次执行入库的sql语句时,在执行条件中添加一个where条件判断version是否与之前读取的一致,如果满足,则修改对应内容以及版本号更新(如+1),如果不满足,则事务回滚,重新执行。如果不一致,表示数据在读取和更新之间已被修改,事务会失败。因此,悲观锁在事务开始时就会锁定所需的数据,防止其他事务进行修改,直到当前事务提交或回滚。因此,悲观锁在事务开始时就会锁定所需的数据,防止其他事务进行修改,直到当前事务提交或回滚。原创 2024-03-14 19:16:31 · 420 阅读 · 0 评论 -
面试题 --- jdbc执行流程、MyBatis执行流程、MyBatis拦截器配置流程
1. 注册驱动2. 创建数据库操作对象3. 执行sql语句4 .处理操作结果5 .关闭连接释放资源。原创 2024-03-13 19:28:16 · 369 阅读 · 0 评论 -
事务 失效的八种情况
为了保证事务的正确执行,应该在整个业务逻辑的最外层进行事务的开始和结束操作,并正确处理异常、设置正确的隔离级别,同时注意数据库连接的正确性和并发操作的冲突。3. 事务的传播行为:如果新线程的异步操作在事务方法内部,且事务传播行为为REQUIRED_NEW(新建事务),则新线程将会开启一个新的事务,与原事务无关,导致事务失效。2. 事务隔离级别不正确:事务的隔离级别决定了事务对并发操作的影响程度,如果在类内部进行了对事务隔离级别的设置,可能会导致事务的隔离级别不正确,从而导致事务失效。原创 2024-03-07 16:13:28 · 2983 阅读 · 0 评论 -
面试题---登录流程图(token篇)
原创 2024-03-05 11:52:50 · 591 阅读 · 0 评论