
面试
文章平均质量分 73
SHENKEM
跳出舒适区
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
海量数据分页查询优化
1,基于游标分页,有序字段,根据id排序,id > last_id。主键分布式id,如雪花算法是有序的,分布式ID 时间位+机器位+随机数据,1毫秒4012。使用offset,根据id排序,使用offset,mysql优化器,排序优化后关联。查询主键不需要回表啊,再通过少量id关联,减少了回表次数。2,延迟关联,子查询先查询id,根据条件及limit找出一批id数据,再延迟关联。非主键排序,深度分页,知道页码,知道当前记录id。游标,分第一页查询,后续页查询。4,业务层面,限制查询量。原创 2025-06-28 23:22:31 · 204 阅读 · 0 评论 -
为什么重写equals一定也要重写hashCode方法?
"==" 是运算符如果比较的对象是基本数据类型,则比较的是其存储的值是否相等;如果比较的是引用数据类型,则比较的是所指向对象的地址值是否相等(是否是同一个对象)。int a = 10;int b = 10;//true//显然不是同一个对象,false。转载 2025-05-20 18:18:46 · 46 阅读 · 0 评论 -
mysql优化方案
索引:控制索引数量,函数,like,or(in 代替 or,in不要太多,分批500),null,注意字段类型。尽可能使用小的类型,比如:用bit存布尔值,用tinyint存枚举值等。能用数字类型,就不用字符串,因为字符的处理往往比数字要慢。小表驱动大表,exist 与 in,连接代替子查询。分批,JOB,充分利用索引,先查索引,再取数据。批量,分批,调用第三方接口,限制2000一批。长度可变的字符串字段,用varchar类型。长度固定的字符串字段,用char类型。增量查询,调用第三方接口,>原创 2025-01-15 12:21:12 · 280 阅读 · 0 评论 -
跳表的原理与实现 [图解]
跳表的原理与实现 [图解]_跳表实现-CSDN博客原创 2025-01-14 10:22:36 · 150 阅读 · 0 评论 -
Full GC 日志
Full GC 是 Java 虚拟机(JVM)中垃圾回收的一种类型,它不仅回收年轻代(Young Generation)中的垃圾,还会回收老年代(Old Generation)中的垃圾。Full GC 通常会导致较长的停顿时间,因为它需要扫描整个堆内存(包括年轻代和老年代)。在 JVM 中,Full GC 的日志通常会包含以下信息:以下是一个典型的 Full GC 日志示例(以 HotSpot JVM 为例):text时间戳: 表示 Full GC 执行的时间。GC类型: 表示这是一次 Full G原创 2025-01-13 22:06:48 · 693 阅读 · 0 评论 -
RPC实现原理,怎么跟调用本地一样
RPC的核心目标是让远程调用尽可能像本地调用一样透明和简单。它通过客户端存根和服务端存根、序列化和反序列化、网络通信等技术,将复杂的远程调用过程封装起来,使得开发人员在编写代码时不需要关心网络、序列化等细节。通过这些机制,RPC能够实现远程服务的调用,仿佛调用本地方法一样。原创 2025-01-13 11:28:18 · 1344 阅读 · 0 评论 -
秒杀设计分析
设计一个高并发、高可用的秒杀系统需要处理好流量控制、库存管理、系统容错等方面。通过使用消息队列、分布式缓存、数据库优化等技术,可以有效应对秒杀过程中的高并发请求并保证系统的稳定性和性能。原创 2025-01-11 23:57:22 · 1048 阅读 · 0 评论 -
BeanFactory与factoryBean 区别,请用源码分析,及spring中涉及的点,及应用场景
是 Spring 中最基础的容器接口,负责获取和管理 Bean。是一个工厂接口,允许你自定义 Bean 的创建逻辑,并将其交给 Spring 管理。使用时你只能获取已经存在的 Bean,而使用时可以控制 Bean 的创建过程,适用于复杂的初始化或自定义实例化的场景。通过理解这两个接口的区别,可以帮助开发者在合适的场景下选择合适的接口和方式来管理 Bean 的生命周期和创建。原创 2025-01-06 21:08:21 · 1026 阅读 · 0 评论 -
mysql 索引下推,举例说明
索引下推是 MySQL 的一个重要优化特性,旨在提高查询效率。它通过将部分查询条件下推到索引扫描阶段,减少了无效数据的读取,减少了内存操作,特别在处理大数据量时显著提高性能。在某些情况下,索引下推能够避免全表扫描,显著提高查询性能。索引下推的实现和效果依赖于查询条件、索引的结构和数据分布,因此实际效果可能会有所不同。原创 2025-01-06 13:21:00 · 936 阅读 · 0 评论 -
Rabbitmq Fanout如何保证不重复消费及应用场景
Fanout交换机是广播消息到所有绑定的队列,每个队列都会接收到一份消息副本。消息不会在不同的队列间重复消费,而是由各自队列内的消费者独立消费。如果同一个队列有多个消费者,它们会按照队列中的负载均衡机制分摊消费任务,但同一个队列中的消息只能被一个消费者消费。所以,Fanout 交换机下的多个队列不会导致消息的重复消费,每个队列独立处理自己的消息虽然在Fanout交换机的场景下,每个消息会被广播到多个队列,并且每个队列的消息会被独立消费,但每个队列的消费者只会消费自己的队列中的消息。原创 2025-01-05 23:22:34 · 1420 阅读 · 0 评论 -
Rabbitmq 业务异常与未手动确认场景及解决方案
未手动确认是一个消费者未及时确认消息的场景,RabbitMQ 会重新投递消息。解决方案包括手动确认、重试机制和死信队列。消费端消费异常指的是消费者在处理消息时发生异常,通常需要实现重试机制或将失败的消息放入死信队列。业务异常通常与业务逻辑相关,需要针对具体的业务场景设计补偿机制(如重试、死信队列、补偿事务等)。消息重新投递给其他消费者是未手动确认或消费者崩溃的结果,RabbitMQ 会将未确认的消息重新投递给其他消费者进行处理。原创 2025-01-05 22:58:43 · 1549 阅读 · 0 评论 -
AOP(面向切面编程)
通过注解或 XML 配置来定义切面,并指定切点和增强的执行时机。例如,通过。原创 2025-01-05 17:12:15 · 782 阅读 · 0 评论 -
Spring Boot 的自动配置,以rabbitmq为例,请详细说明
Spring Boot 通过自动配置 RabbitMQ 连接、消息发送和消费等相关组件,极大地简化了 RabbitMQ 的集成过程。只需添加依赖并在配置文件中指定必要的参数,Spring Boot 就会自动配置所需的所有组件,并根据需求自动启动消息生产者和消费者。你可以通过注解来定义消息监听器,也可以自定义交换机、队列和绑定等配置,从而满足不同的业务需求。通过等。这些组件的创建是基于中的配置完成的。原创 2025-01-04 16:38:30 · 2036 阅读 · 0 评论 -
Spring 事务底层原理
Spring 事务管理的底层原理基于AOP和 PlatformTransactionManager,通过拦截器和事务管理器来控制事务的生命周期。Spring 提供了声明式和编程式两种事务管理方式,最常用的是声明式事务,它通过 AOP 代理技术在方法执行时自动处理事务的开始、提交和回滚。Spring 事务管理支持事务传播行为、隔离级别和回滚规则等多种配置选项,提供灵活而强大的事务管理能力。原创 2025-01-04 15:38:50 · 936 阅读 · 0 评论 -
spring
通过指定扫描路径或排除特定包/类来手动控制哪些类需要注册到 Spring 容器。原创 2025-01-03 19:18:54 · 1213 阅读 · 0 评论 -
redis
my:内存 单线程 IO多路复用Epoll + 高效的数据结构 + 集群与分片。原创 2025-01-03 16:39:23 · 1017 阅读 · 0 评论 -
RabbitMQ
生产者是发送消息到 RabbitMQ 的应用程序或进程。生产者创建消息并将其发送到 RabbitMQ 中的交换机。原创 2025-01-03 10:52:47 · 1432 阅读 · 0 评论 -
java基础2.0
尽管在分布式环境中无法跨实例同步数据,但它在单个节点的多线程并发环境中非常有效。在单机实例中进行线程安全的缓存。在分布式环境中与分布式缓存(如 Redis)结合使用,作为本地缓存。作为一种局部缓存优化,减少对远程分布式缓存的依赖。在分布式系统中,不是直接用于跨节点的数据共享,而是作为本地缓存或局部缓存来提升性能,并与分布式缓存等其他组件结合,提供更高效、更一致的数据存储方案。equals():用于定义对象的相等标准,通常基于对象的内容进行比较。hashCode()原创 2025-01-02 18:43:25 · 779 阅读 · 0 评论 -
java基础2.0
尽管在分布式环境中无法跨实例同步数据,但它在单个节点的多线程并发环境中非常有效。在单机实例中进行线程安全的缓存。在分布式环境中与分布式缓存(如 Redis)结合使用,作为本地缓存。作为一种局部缓存优化,减少对远程分布式缓存的依赖。在分布式系统中,不是直接用于跨节点的数据共享,而是作为本地缓存或局部缓存来提升性能,并与分布式缓存等其他组件结合,提供更高效、更一致的数据存储方案。equals():用于定义对象的相等标准,通常基于对象的内容进行比较。hashCode()原创 2025-01-02 12:14:21 · 743 阅读 · 0 评论 -
hashMap追问
为什么使用String作为HashMap键String是不可变的,确保哈希表的稳定性。String的hashCode()方法实现高效,生成的哈希码能够较好地分散,减少冲突。String在很多实际应用中作为键使用,如用户名、URL 等。如何减少哈希冲突改进hashCode()方法,使用高质量的哈希算法(例如通过质数混合字符值)。合理设置HashMap的初始容量和负载因子。对于高并发应用或特殊场景,考虑使用更强的哈希算法。使用HashMap的扩容机制和链表/红黑树等冲突解决机制来处理冲突。原创 2025-01-02 12:53:42 · 819 阅读 · 0 评论 -
String str = “i“; 和 String str = new String(“i“);一样吗
使用常量池,可以共享相同的字符串实例,节省内存。强制创建一个新的String对象,通常不推荐使用,除非有明确的需求(例如,避免字符串池引用)。引用(如str1)是一个指向对象的符号或句柄,它存储的是对象在内存中的位置(内存地址),但它本身并不直接暴露这个内存地址。内存地址是对象在计算机内存中的实际存储位置,它是一个具体的数字。Java 程序员无法直接访问内存地址,而是通过引用来访问对象。常量池中的"hello"字符串是存储在方法区中,而不是堆内存中。会在堆内存中创建一个新的String。原创 2025-01-02 00:02:56 · 840 阅读 · 0 评论 -
java基础
正向代理的作用是客户端(你)通过代理服务器去访问外部网站,代理服务器帮助你绕过网络限制,隐藏了你的真实身份。反向代理(Reverse Proxy)反向代理的作用是服务器端(公司)通过代理服务器将客户端的请求转发到多个后端服务器,客户端不需要了解后端服务器的具体情况,只与反向代理交互。总结对比正向代理:你是客户端,想访问外部资源,通过代理服务器“替你”去访问,隐藏了你自己的身份。比如:你通过一个代理服务器访问一个被屏蔽的网站。反向代理。原创 2025-01-01 09:37:49 · 1061 阅读 · 0 评论 -
Rabbitmq追问
交换机和队列之间的关系是多对多,可以一个交换机绑定多个队列,也可以一个队列绑定多个交换机。是否需要通过路由键绑定取决于交换机的类型:direct交换机需要使用路由键来绑定队列。fanout交换机不需要路由键,消息会广播到所有绑定的队列。topic交换机需要使用路由键,并支持模式匹配。headers交换机不使用路由键,而是通过消息头部信息来路由。如果一个路由键对应多个队列,消息会被路由到所有绑定了该路由键的队列,无论是在directtopic。原创 2024-12-31 22:32:22 · 1019 阅读 · 0 评论 -
java 加密算法
对称加密:算法简单,性能高,但密钥管理较为困难。常见的如AESDES。非对称加密:使用公钥和私钥,安全性较高,但性能相对较差。常见的如RSA。哈希算法:用于验证数据完整性,生成固定长度的哈希值,常见的如SHA-256。Java 提供了强大的加密支持,可以通过包中的类来实现这些加密算法。原创 2024-12-29 21:16:49 · 1785 阅读 · 0 评论 -
redis如何实现延时队列
通过 Redis 的有序集合(ZSET)实现延时队列是一个非常高效的解决方案。任务按照执行时间存储在 Redis 中,定期检查并执行已经到期的任务。这种实现方式简单且高效,适合用在大多数需要延时执行任务的场景中。原创 2024-12-29 20:23:53 · 2652 阅读 · 0 评论 -
mysql 事物隔离级别 与mvcc
事务隔离级别决定了事务如何与并发事务交互,影响数据的可见性和一致性。MVCC是一种并发控制机制,它通过维护多个数据版本来允许并发事务读取不同版本的数据,并且通过时间戳和事务 ID 来确保事务操作的数据一致性。在 MySQL 中,尤其是 InnoDB 引擎,隔离级别结合 MVCC 机制,提供了较好的并发性能和一致性保证。事务隔离级别的常见并发问题在 MySQL 中,脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read)原创 2024-12-29 18:18:51 · 1106 阅读 · 0 评论 -
ES倒排索引的原理
倒排索引是一种数据结构,用于高效的文档搜索。它的核心思想是:把文本中每个单词(或术语)映射到包含该单词的文档 ID,从而使得搜索某个单词时能够快速找到所有包含该单词的文档。原创 2024-12-28 16:39:38 · 936 阅读 · 0 评论 -
面试241228
面试可参考1、cas的概念 2、AQS的概念 3、redis的数据结构 使用场景不熟4、redis list 扩容流程 5、dubbo 怎么进行服务注册和调用,6、dubbo 预热 7如何解决cos上传的安全问题kafka的高并发高吞吐的原因ES倒排索引的原理spring的 bean的 二级缓存和三级缓存spring的 扩展机制类加载器有哪些mysql索引下推8如何设计登录方案时提到了安全性、稳定性、扩展性,但问到具体怎么做(比如加密算法、评估用户量等。原创 2024-12-28 12:56:52 · 405 阅读 · 0 评论 -
java认证与授权解决方案
认证:验证用户的身份,常用的方法有基于表单的认证、JWT认证、OAuth2认证等。授权:控制用户访问资源的权限,可以基于角色或权限来管理。使用Spring Security可以快速实现认证和授权机制,通过配置不同的认证方式、角色/权限控制及外部服务集成来满足复杂的安全需求。通过合理的配置认证与授权方案,可以有效提升Java应用的安全性,防止未授权访问或恶意操作。原创 2024-12-28 01:09:36 · 1015 阅读 · 0 评论 -
微服务面试题
功能:服务治理(服务注册与发现,远程调用,熔断+重试,负载均衡(轮询/随机/权重/活跃度))dubbo怎么定位的,在微服务中扮演什么角色,与Eureka区别。dubbo远程调用原理。原创 2024-12-28 00:02:30 · 506 阅读 · 0 评论 -
事务的传播行为 请用java代码举例说明
Spring 的事务传播行为可以用来控制方法如何参与已有的事务,具体的传播行为决定了事务的启动、挂起、嵌套等特性。通过合理选择传播行为,可以实现不同的事务管理策略,适应不同的业务需求。: 默认行为,支持当前事务或创建新事务。: 创建新事务,挂起当前事务。: 嵌套事务,支持事务回滚。: 如果当前有事务,则加入当前事务;如果没有事务,则以非事务方式执行。: 必须在当前事务中执行,否则抛出异常。: 不能在事务中执行,如果有事务则抛出异常。原创 2024-12-27 23:40:04 · 644 阅读 · 0 评论 -
面试记录24年新
cms限流缓存雪崩击穿AQS优势发展。原创 2024-12-24 10:13:31 · 226 阅读 · 0 评论 -
记录一次mysql死锁
更新运单里程字段失败运单创建,同时查询车联网信息,更新运单里程字段同时有一个job,对运单进行范围更新。原创 2024-12-19 14:51:01 · 737 阅读 · 0 评论 -
Spring 如何解决循环依赖?
高频面试:Spring 如何解决循环依赖?https://zhuanlan.zhihu.com/p/375308988原创 2024-12-13 15:42:28 · 216 阅读 · 0 评论 -
springMS
1,循环依赖问题。原创 2024-12-13 09:31:29 · 123 阅读 · 0 评论 -
使用final关键字修饰一个java对象时,是引用不能变,还是引用的对象不能变?
1,普通java对象。原创 2024-11-26 14:33:45 · 200 阅读 · 0 评论 -
String s = “Hello” 创建了几个对象
创建了几个String Object?二者之前的区别是什么?1,String s = “Hello” 创建了几个对象。原创 2024-11-26 14:11:58 · 141 阅读 · 0 评论 -
spring框架中bean的生命周期
对比二者,对于第二种,如果新增第三种订单,这里需要改动代码,再次进行创建子类,同样在路由逻辑requsetRouter,需要增加该类子类的选择。对于第一种写入,直接在子类中,定一个枚举,用这个枚举来标识这个子类,然后在选择器中初始化为map,这种写法,更符合开闭原则。2,用于获取某个bean如redisTemplate,或者校验器。1,策略模式中,初始化,组装Bean map。2,策略模式中,初始化,创建不同子类bean。1, 定义一个类型工具类,用于获取bean。创建订单,不同订单类型创建不同的字类。原创 2024-11-25 16:13:59 · 279 阅读 · 0 评论 -
Spring循环依赖原理及底层源码解析
当B创建完了之后,A继续进行生命周期,而A在完成属性注入后,会按照它本身的逻辑去进行AOP,而此时我们知道A原始对象已经经历过了AOP,所以对于A本身而言,不会再去进行AOP了,那么怎么判断一个对象是否经历过了AOP呢?这是难点,基于上面的场景想一个问题:如果A的原始对象注入给B的属性之后,A的原始对象进行了AOP产生了一个代理对象,此时就会出现,对于A而言,它的Bean对象其实应该是AOP之后的代理对象,而B的a属性对应的并不是AOP之后的代理对象,这就产生了冲突:B依赖的A和最终的A不是同一个对象。转载 2023-06-27 10:55:43 · 126 阅读 · 0 评论 -
面试问题记录
面试点redis分布式锁,一致性hashhttps://www.cnblogs.com/javazhiyin/p/13839357.html设计模式算法String @mysql缓存对比jvmIOspringboothttps://www.jianshu.com/p/5901da52ca09springCloudhttps://blog.csdn.net/oldshaui/article/details/906751https://blog....原创 2022-02-28 16:26:40 · 2631 阅读 · 0 评论