- 博客(264)
- 收藏
- 关注

原创 Mysql高频面试题汇总
索引是一种数据结构 , 他通过特定的算法实现查询的优化 , 能够提高数据查询的效率. 同时索引也对数据进行了排序 , 能够避免排序所要消耗的数据库资源覆盖索引指的是 , 在使用索引查询的过程中 , 需要查询的字段在该索引中都能找到**面试官:**知道什么叫覆盖索引嘛?**候选人:**嗯~,清楚的覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。
2024-12-04 12:20:57
1418

原创 Redis高频面试题汇总
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。
2024-11-28 12:35:32
1340
原创 面试官:哪些地方用到了MQ,为什么选择RabbitMQ
支付网关商户配置更新在项目当中分为管理端与支付网关,为在网关当中会对商户的配置信息进行缓存,当商户在管理平台当中修改了其配置信息,我们需要异步通知支付网关对缓存信息进行修改。支付结果异步回调商户支付/退款等成功后需要回调网关向外暴露的接口,同时更新B端的订单信息。对于订单信息的更新,需要通过RabbitMQ异步通知服务端。
2025-03-13 17:20:10
175
原创 QingluoPay支付宝支付对接流程
支付宝的对接流程非常简单只需要关注官方提供的SDK与文档即可 -->先来看一下支付宝官方提供的实例代码,在这里参数部分已经省略,我们只关注逻辑的实现在其中有三个非常重要的部分AlipayClient是支付宝支付的一个核心接口,用于调用其各种APIAlipayTradeWapPayRequest是一个用于请求的类其继承与AlipayRequest,主要用于处理不同业务逻辑的请求AlipayTradeWapPayModel用于对相关参数的配置如标题,支付金额等。
2025-03-13 17:18:02
892
原创 springboot项目中如何优雅的实现异常处理
通过逐行解析自定义异常类和全局异常处理器,我们深入理解了 Spring Boot 中异常处理的实现细节。这种机制不仅提高了代码的可维护性,还为用户提供了友好的错误提示。希望本文对您有所帮助!
2025-01-19 13:00:00
1652
原创 springboot基于RBAC模型的权限管理实现详解
在现代企业级应用中,权限管理是确保系统安全性和数据完整性的核心模块之一。通过权限管理,系统可以为不同的用户分配不同的权限,从而实现对系统资源的精细控制。本文将详细介绍一个基于Spring Boot和RBAC(Role-Based Access Control,基于角色的访问控制)模型的权限管理模块的实现过程,涵盖用户、角色、权限的管理以及它们之间的关系。RBAC(Role-Based Access Control)是一种常见的权限管理模型,它将权限分配给角色,然后将角色分配给用户。
2025-01-18 12:30:00
840
原创 基于RBAC权限模型的权限管理模块实现详解
权限管理是企业级应用中的核心模块之一,它确保系统中的不同用户能够访问和操作与其角色相匹配的资源。通过权限管理,系统可以实现对资源的精细控制,防止未授权访问和操作。本文将详细介绍一个基于Spring Boot的权限管理模块的实现过程,涵盖权限的增删改查、权限分配等功能,并详细介绍每个接口的访问路径、入参、出参以及具体实现。通过本文的详细解析,我们深入探讨了一个基于Spring Boot的权限管理模块的实现过程。该模块涵盖了权限的增删改查、权限分配等功能,并通过Sa-Token实现了权限控制。
2025-01-17 11:00:00
909
原创 基于RBAC权限模型的角色管理模块实现详解
在现代企业级应用中,角色管理是权限控制的核心模块之一。通过角色管理,系统可以为不同的用户分配不同的权限,从而实现对系统资源的精细化管理。本文将详细介绍一个基于Spring Boot的角色管理模块的实现过程,涵盖角色的增删改查、权限分配等功能,并详细介绍每个接口的访问路径、入参、出参以及具体实现。
2025-01-16 13:00:00
736
原创 基于RBAC权限模型的系统用户管理模块实现
在现代企业级应用中,用户管理模块是系统的基础功能之一。它通常包括用户的增删改查、登录认证、权限管理等功能。本文将详细解析一个基于Spring Boot的系统用户管理模块的实现流程。该模块使用了MyBatis Plus作为ORM框架,结合Redis进行验证码的存储与验证,同时通过Sa-Token进行权限控制。
2025-01-15 14:30:00
1047
原创 Day2 -- QingLuoPay基础功能搭建
springboot从零开始自建项目 Day2 -- QingLuoPay基础功能搭建一,基础功能包含哪些部分?二,功能实现1. Http状态码定义2. 自定义异常3. 序列化返回数据4. 数据校验
2025-01-04 11:30:00
600
原创 从零开始自搭SpringBoot项目 -- Qingluopay项目工程介绍
该项目主要由运营平台服务端,商户系统服务端组成,通过抽取微信/支付宝等支付接口,实现支付功能的轻量化对接,用户只需通过在平台注册相关信息就可轻松实现支付。
2025-01-03 18:47:14
1016
2
原创 Spring如何实现XML文件的验证模式的读取?
首先在我们的spring当中我们可以通过不同格式的文件实现对Bean的配置,在spring当中首先会对我们的配置文件进行解析 --》 ClassPathResource/FileSystemResource等 , 该类适用于对不同文件进行读取然后转化为Resource对象,Resource的父接口继承于InputStream,并重写了getInputStream方法实现获取流对象的功能在本文我们以XMLBeanFactory为切入点debug一下实现流程。
2024-12-30 10:45:00
404
原创 ClassPathResource工作原理
Spring的资源文件读取是通过ClasspathResource这个类来实现的,我们来简单看一下该类的实现流程。
2024-12-29 10:00:00
184
原创 spring循环依赖深度源码解析
三级缓存是咋spring的DefaultSingletenBeanRegister这个类当中// 一级缓存// 三级缓存// 二级缓存在这里最值得注意的是三级缓存,我们看一下它的类型Map,我们进入源码来看一下这是个什么东西// 函数式接口 --》 只有当调用getObject时候才会真正执行代码/***/
2024-12-17 20:47:17
850
原创 synchronized 锁升级实现原理
当一个对象刚被创建其状态必然是无锁状态,在对象头的Mark Word当中就会有个所表示用来表示当前状态,无锁为00.当一个线程尝试获取锁时,就会检查Mark Word当中的信息判断其状态,如果为无锁状态就会尝试通过CAS的方式去修改锁表示,在CAS执行成功后同时还会在Mark Word当中储存当前线程的线程ID,之后会在锁的内存当中创建一条所记录用于备份对象头当中的Mark Word信息。在很多的情况下,在Java程序运行时,同步块中的代码都是不存在竞争的,不同的线程交替的执行同步块中的代码。
2024-12-15 14:52:42
1228
原创 多线程高频基础面试题
一. 线程与进程的区别二. 并发与并行的区别三. 创建线程的方式有哪些四. Runnable和Callable有什么区别五. 线程包括哪些状态,状态之间是如何变化的六. 在Java中wait和sleep方法的不同七. 新建三个线程,如何保证它们按顺序执行八. notify()和notifyAll()有什么区别九. 线程的run()和start()有什么区别十. 如何停止一个正在运行的线程
2024-12-11 15:37:01
1032
原创 HashMap实现原理 , put方法的具体流程及其扩容机制
对于没有普通节点通过寻址算法重新定位新的存储节点 , 如果是红黑树则走红黑树的方法 , 前两种都不是那只有可能是链表 , 对于链表的移动也采取了特殊的算法 , 先会循环链表 , 对链表中的元素的哈希值与旧数组长度做与运算结果如果非零则移动到原数组下标+扩容长度位置。HashMap通过hash算法与重写equals方法对插入key进行判断 , 以保证key的唯一性 , 但是在hash算法当中也无可避免出现hash碰撞的情况 , HashMap通过链表与红黑树将相同hash值的元素存于同一下标。
2024-12-10 22:21:55
844
原创 Java集合ArrayList高频面试题
1. ArrayList底层是如何实现的?2. 如何实现数组和List之间的转换3. ArrayList 和 LinkedList 的区别是什么
2024-12-10 13:34:47
921
原创 HashMap底层原理详解
在put方法当中调用了putVal()方法 , 同时传入了hash(key)也就是当前key计算得出的hash值 , 以及key 和value\。在无参构造当中只执行了一句话 , 也就是将Hash表中的负载因子设合为 默认负载因子 --> 0.75。f ((e = p.next) == null) --> 判断链表的下一个节点是否为空。i = (n - 1) & hash --> 通过&运算求出下标并赋值给p。
2024-12-09 16:32:20
498
原创 一篇文章搞懂ArrayList的实现原理
在这里比较了我们需要插入元素的索引与默认初始化容量的大小 ( 10 ) 并返回最大值 , 如果是第一次使用add , 也就是10 , 好了到这里我们也就知道calculateCapacity方法的作用是什么了 , 就是判断是否为第一次插入 , 如果不是直接返回当前插入元素的索引位置。当我们传入的对象不为空时 , 会对数组的类型进行判断 , 如果不是 Object[] 类型的数组重新使用Arrays.copyOf()复制数组元素到一个新的类型为Object[] 的数据并赋值给elementData。
2024-12-08 22:14:58
918
原创 微服务高频面试题
SpringCloud的五大组件是什么注册中心的作用nacos与eureka的区别Ribbon的作用?ribbon支持的负载均衡策略有哪些?什么是服务雪崩你们的微服务是怎么监控的?限流常见的算法有哪些呢?你们项目中有没有做过限流 ? 怎么做的 ?什么是CAP理论?什么是BASE理论?你们采用哪种分布式事务解决方案?
2024-12-08 17:13:35
859
原创 Java春招大厂面试题
1. redis的跳表是怎么实现的?2. MVCC实现原理3. Redis怎么实现延时消息4. http默认端口号是多少5. http的几种请求(get、post…)有什么区别1. GET2. POST6. Http和Https的区别7. tcp协议中,三次握手四次挥手是怎样的1. 什么是三次握手2. 什么是四次挥手
2024-12-07 14:58:14
1019
原创 Java春招大厂面试题
1. 布隆过滤器原理2. 表级锁3. zset底层数据结构4. StringBuilder、String、StringBuffer5. spring事务是怎么实现的6. Redis除了缓存,还能做什么7. redis缓存更新方案
2024-12-07 12:30:50
883
原创 如何实现多级缓存以及缓存之间数据的一致性
神领物流 -- 如何实现多级缓存以及缓存之间数据的一致性在对数据的更新同时我们使用SpringCache集成redis , 并使用其更新注解 @CachePut(value = “transport-info”, key = “#p0”)对redis数据同步更新 , 这样就解决了数据库与redis之间的缓存更新问题。在我们的项目当中 ,特别是在电商大促期间,快件数量非常庞大,也就意味着查询人的量也是很大的 , 因此读查询接口造成的并发压力也会非常大 . 因此为了处理高并发问题在这采用了多级缓存。
2024-12-06 21:45:57
1114
原创 SpringBoot自动装配原理
对于AutoConfigurationPackage它的作用是扫描我们在项目中自行定义的Bean(如Controller , Service , Dao层的Bean) , 其内部通过了Import导入了AutoConfigurationPackages.Registrar.class , 可以扫描项目当中的Bean。而@Import({AutoConfigurationImportSelector.class}) , 就是导入自动配置的选择器 , 该选择器会加载一个文件 , 该文件定义了很多自动配置的类。
2024-12-05 20:26:02
974
原创 Java基础面试题 -- == 和 equals区别 ,为什么说重写了hashcode方法就要重写equals? ,final和static的作用 , 重写和重载的区别 , 接口和抽象类的区别
Object类中原生的equals方法重写后的equals方法面试官 : == 和 equals区别?== 是java中的一种操作符 , 对于基本数据类型来说比较的是数值是否相同 , 而对于引用数据类型来说比较的是引用对象是否相同(可以理解为地址值是否相同)而对于equals来说它是Object类中提供的一种方式 , 原生的equals方法内部也是通过==对对象就行判断。
2024-12-05 18:19:07
867
原创 Spring高频面试题
AOP也就是面向切面编程 , 其底层是通过动态代理实现的 . 通过我们可以使用AOP处理一些与业务关联不大但是多个业务都需要的服务, 如日志打印 , 事务等面试官:什么是AOP候选人aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等面试官:你们项目中有没有使用到AOP候选人我们当时在后台管理系统中,就是使用aop来记录了系统的操作日志。
2024-12-04 14:21:29
779
原创 Mysql如何实现原子性(MVCC实现原理)
在事务执行增删改之前 , 会在undo_log日志当中记录当前的数据信息 , 并保存DB_TROLL_TAX记录上一个undo_log日志地址如下图所示 , 我们开启了四个事务 , 对于每个事务的版本号为2 , 3 , 4 ,5那么在事务的创建过程中就会在undo_log日志当中注册版本信息 , 如下图那么当上述的事务都注册完毕就会形成一个版本链readview就是通过一定的机制来判断 , 当前版本的事务是否可以被读取 , 也就是说是快照读 sql执行的依据。
2024-12-03 11:57:24
1157
1
原创 Mysql事务常见面试题 -- 事务的特性 ,并发事务问题 , undo_log和redo_log , 分布式事务
undo_log是一种逻辑日志他记录的命令和原有命名是相反的 , 就比如我现在执行一条插入命令 , 在undo_log中就会保存与之逻辑相同的删除日志 , 主要用来保证事务中的原子性 , 一致性。
2024-12-03 11:54:52
1157
原创 Mysql高频面试题 -- 覆盖索引 ,索引创建原则, 索引失效情况 , 如何进行sql优化
覆盖索引指的是 , 在使用索引查询的过程中 , 需要查询的字段在该索引中都能找到**面试官:**知道什么叫覆盖索引嘛?**候选人:**嗯~,清楚的覆盖索引是指select查询语句使用了索引,在返回的列,必须在索引中全部能够找到,如果我们使用id查询,它会直接走聚集索引查询,一次索引扫描,直接返回数据,性能高。如果按照二级索引查询数据的时候,返回的列中没有创建索引,有可能会触发回表查询,尽量避免使用select *,尽量在返回的列中都包含添加索引的字段。
2024-12-02 15:29:36
959
原创 Redis时单线程为什么这么快?
在这里为什么要将用户可见和内核空间呢?因为只有理解了这两个概念我们才能知道redis的执行效率受限于哪些因素首先当我们请求数据的时候比如说发送一条微信消息 , 该流程就需要调用到网卡也就是我们的硬件设备 , 但是用户所处于的位置被叫做用户空间 , 所拥有的权限最低 , 用户空间是无法直接操作硬件设备的.因此操作系统还提供了内核空间 , 用户空间可以操作内科空间 , 内核空间可以通过指定的接口请求硬件获取数据。
2024-11-28 12:00:00
1024
原创 Redis三种集群介绍
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。
2024-11-27 16:43:47
899
原创 Rediss高可用策略介绍及其面试相关面试题
redis 的主从复制是设置一个主节点多个从节点 , 其中主节点负责写 , 从节点负责读哨兵模式本质上也是一个redis集群, 通常集群数为2n+1. 通过搭建哨兵集群并把绑定主从集群的主节点 , 哨兵集群可以实现, 当主节点宕机, 通过民主选举的模式自动选择出新的主节点, 当节点信息发生修改也可以发送信息进行通知哨兵模式的民主选举也就是通过raft算法, 民主投票的方式 当选票超过n/2+1时即可当选同时选举也会有一定的规则, 会通过节点断开时长, 节点offset偏移量大小, 节点权重等进行选举。
2024-11-27 12:40:50
924
原创 Redis双写一致性以及分布式锁解决方案及其面试话术
这个是不能的,比如,当线程1加锁成功后,master节点数据会异步复制到slave节点,此时当前持有Redis锁的master节点宕机,slave节点被提升为新的master节点,假如现在来了一个线程2,再次加锁,会在新的master节点上加锁成功,这个时候就会出现两个节点同时持有一把锁的问题。:嗯,是可以重入的。:延迟双删,如果是写操作,我们先把缓存中的数据删除,然后更新数据库,最后再延时删除缓存中的数据,其中这个延时多久不太好确定,在延时的过程中可能会出现脏数据,并不能保证强一致性,所以没有采用它。
2024-11-27 12:39:52
691
原创 Redis持久化机制 , 过期删除策略 , 数据淘汰策略介绍及其面试话术
RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令。AOF的含义是追加文件,当redis操作写命令的时候,都会存储这个文件中,当redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。第二种是 定期删除,就是说每隔一段时间,我们就对一些key进行检查,删除里面过期的key。
2024-11-26 20:16:46
505
原创 Redis缓存穿透 , 缓存击穿 , 缓存雪崩出现原因, 解决方案及其面试话术
缓存穿透出现的主要原因是由于第三方伪造大量不存在的请求路径对服务器发送请求 , 由于数据库中不存在该数据所以无法查询并保存到redis中, 导致所有伪造请求绕过缓存直接请求数据库, 使数据库访问压力骤增甚至宕机。
2024-11-26 19:48:05
789
原创 SpringDataNeo4j使用详解
KeywordSampleAfterBeforeInBetweenEndingWithExistsTrueFalseIsNotNullNullLessThanLikeNotLikeNearRegexAndOr/*** 运输路线相关操作*//*** 查询两个网点之间最短的路线,查询深度为:10* @param start 开始网点* @param end 结束网点* @return 路线*/
2024-11-20 14:35:09
1244
原创 神领物流运单服务业务流程以及相关面试点
调度服务是在快递员揽收快件之后 , 通过rabbitMQ接受快递员端发送的信息 , 通过订单生成运单并对相同路线的运单进行合并 , 放入相同队列中;
2024-11-19 17:21:27
1368
基于Django+uwsgi+nginx+MySQL+redis+linux+requests开发的电商购物系统
2024-06-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人