- 博客(199)
- 问答 (2)
- 收藏
- 关注
原创 力扣23.合并K个升序链表
23. 合并 K 个升序链表本题的要求是把K个链表进行合并,合并后的链表必须是从小到大的。并且这K个链表也是从小到大的升序链表。
2025-01-05 16:08:48
379
1
原创 【反转链表系列】力扣206,92,25
本文涉及的力扣题目,涉及简单、中等、困难三个难度力扣206.反转链表力扣92.反转链表 II力扣25.K 个一组翻转链表反转链表这类型的题目,折磨了挺久,经常弄懂了一道题,但是遇到下一道反转链表的题目还是不会。所以我整理了三道比较经典的反转链表的题目,从浅到深一步一步领悟反转链表的处理思路。
2024-12-28 11:01:15
919
2
原创 力扣240.搜索二维矩阵 II
力扣240. 搜索二维矩阵 II本题给出一个矩阵matrix,要求搜索矩阵是否存在目标值target。每行的元素从左到右升序排列。每列的元素从上到下升序排列。根据矩阵的特征,有两种解法——二分查找和排除法。
2024-12-23 08:00:00
675
1
原创 力扣48.旋转图像
力扣48.旋转图像这道题要求把给定矩阵旋转90度,并且不允许使用额外矩阵来完成旋转图像。于是这道题只能使用原地旋转的方法来解决。
2024-12-22 13:02:24
536
原创 力扣41.缺失的第一个正数
力扣41.缺失的第一个正数这道题给定了一个数组,需要寻找数组中的没有出现的一个最小的正数。而这个最小的正数的范围一定是在[1,N+1]这个范围里面的,其中N是指数组的长度假设数组中的每个数字都大于N,那么最小正数就是1假设数组中的每个数字都小于1,那么最小正数就是1假设数组中存在数字在[1,N+1]这个范围,那么最小正数就在[1,N + 1]假设数组中的数组分别是[1, N],那么最小正数就是N+1分析了最小正数的范围之后,就很容易分析出暴力法。暴力法依次判断[1,N+1]
2024-12-22 08:00:00
1863
2
原创 力扣76.最小覆盖子串
力扣76.最小覆盖子串给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。这道题需要思考一个问题,在代码中如何确定字符串s中涵盖字符串t呢?就比如字符串sBCDEAA,字符串tABC,怎么判断字符串s中涵盖了字符串t?我的做法是用两个数组tArray 和 sArray,分别记录字符串t和字符串s每个字符的数量。若字符串t涵盖字符串s,那么对于任意的字符c,都存在,根据这个就可以判断是否涵盖了。
2024-12-16 09:00:00
906
原创 力扣239.滑动窗口最大值
力扣239.滑动窗口最大值滑动窗口最大值,这道题给定一个数组,以及一个窗口的长度,这个窗口会往后滑动,直到数组最后一个元素。要求每个滑动窗口的中的最大值。对于这道题,我刚看到的时候没有比较好的思路,心里想没思路?直接一个无脑暴力!暴力的思路就是遍历数组的时候,每次遍历滑动窗口找出最大值!果然,超时了。。。。。。遍历数组的时间复杂度是O(n),如果当滑动窗口的长度为n/2的时候,遍历滑动窗口找出最大值的时间复杂度是O(n),那么整体的暴力算法的时间复杂度是O(n²)。
2024-12-14 16:28:07
350
原创 力扣42.接雨水
接雨水,这道题我在大学的时候就听说这道题是力扣的难题,但是一直没有做过。这几天在网上偶然看到关于这道题的文章,于是去学了学这两题的解题思路,故写下这篇博客记录记录。力扣42. 接雨水。
2024-12-01 14:17:30
936
原创 Solon浅体验
Solon框架是Java “生态型”应用开发框架:克制、简洁、高效、开放、生态。并发高 300%;内存省 50%;启动快 10 倍;打包小 90%;同时支持 java8 ~ java22, native 运行时。
2024-10-26 11:37:43
937
1
原创 【建议收藏】Kafka必备理论知识
Apache Kafka 是一个**分布式发布-订阅消息系统**,同时也是一个**强大的队列**,它能够处理**海量数据**,并且能够将消息从一个端点传递到另一个端点。Kafka 特别适合于**离线和在线消息消费**的场景。与许多其他消息系统不同,Kafka **消息是保留在磁盘上**的,并且**在群集内复制**以防止数据丢失,这使得它在处理大规模数据时非常可靠。Kafka 的核心是其**日志顺序写入**机制,这不仅支持了消息的回溯,也支撑了**高性能的读写操作**。此外,Kafka 构建在**ZooK
2024-10-19 13:31:48
771
1
原创 【建议收藏】这些RabblitMQ知识点必须记得!
MQ面试题:消息队列(Message Queue,简称MQ)是一种应用间的通信方式,它允许系统通过异步消息传递来实现解耦和提高可扩展性。在软件架构中,MQ作为一个中间件,提供了一种可靠的消息传递机制,确保了消息在不同系统或组件之间有效、安全地传递。核心功能异步通信:允许消息发送者在不等待接收者处理的情况下继续执行,从而提高系统的响应速度和吞吐量。解耦:发送者和接收者不需要直接交互,它们之间的交互通过消息队列进行,降低了系统的耦合度。流量控制。
2024-10-18 20:39:03
1162
原创 【建议收藏】这些Linux知识点,你必须知道!
Linux是一个开源的类Unix操作系统内核,由林纳斯·托瓦兹(Linus Torvalds)在1991年首次发布。它遵循自由软件和开源开发的原则,任何人都可以自由地使用、修改和分发Linux内核。Linux内核是许多流行Linux发行版的核心组件,如Ubuntu、Fedora、Debian和CentOS等。Linux操作系统以其稳定性、安全性和灵活性而闻名,广泛应用于服务器、桌面、移动设备和嵌入式系统。Linux的开源特性使得它拥有一个庞大的开发者社区,这些开发者不断贡献代码,改进系统,增加新功能。
2024-10-18 20:24:19
612
原创 【建议收藏】30个Java异常的知识点,你能撑到第几个?
Java异常面试题:例如以使用自定义的异常类型来表示特定的错误情况,同时提供更多的错误信息,而不是使用通用的异常类型。推荐使用Java API提供的标凈异常类型,而不是定义自己的异常,除非标准的异常类型不能满足特定的需求。在Java中,异常处理是一个相对昂贵的操作,因为它涉及到异常的创建、堆栈跟踪的捕获以及异常的传播。在Java中,捕获一个异常、记录它的信息,然后再次抛出相同的异常,通常不是一个好的做法。在Java中,当捕获异常时,捕获的异常类型必须是抛出的异常类型的完全匹配,或者是它的父类。
2024-10-17 22:27:05
887
1
原创 【建议收藏】两万字总结Git的60个常用操作
Git面试题 在 Git 中,如果你需要修改最后一次提交,例如添加遗漏的文件或者更改提交信息,你可以使用要修改最后一次提交,首先确保你的工作目录是干净的,即所有需要的变更都已暂存:然后,执行以下命令来修改最后一次提交:这个命令会打开一个文本编辑器,允许你修改提交信息。如果你不修改编辑器中的提交信息,它将保持不变。如果你只是想添加遗漏的文件到最后一次提交,不需要修改提交信息,可以添加--no-edit选项:这将保持原来的提交信息不变,只是将新暂存的文件添加到上一次提交中。请注意,使用amend。
2024-10-17 22:00:37
1209
原创 【建议收藏】ElasticSearch会问什么?看这里!
在电商搜索中,技术架构的设计旨在提供快速、准确且相关的搜索结果,同时支持高并发和大数据量。搜索引擎:Elasticsearch作为核心搜索引擎,处理海量商品数据的索引和搜索请求。数据同步:商品数据从电商平台的数据库同步到Elasticsearch,可以使用Logstash、自定义数据同步工具或消息队列(如Kafka)来实现。查询处理:用户在电商平台上发起搜索请求,请求被发送到搜索引擎,搜索引擎对查询进行解析、处理,并返回搜索结果。相关性调优。
2024-10-16 20:13:22
1015
原创 【建议收藏】Tomcat看这一篇就够了!
Java Virtual Machine(JVM)提供了监控工具,如JConsole和VisualVM,它们可以连接到Tomcat的JVM进程,实时监控内存使用情况,包括堆内存和垃圾回收情况。APR模式需要安装APR库,并在。优化存储在Session中的数据,例如使用压缩或删除不必要的数据,可以减少每个Session对象的大小。:在这种模式下,Tomcat作为一个独立的进程运行,但通过特定的通信协议(如AJP)与前端的Web服务器(如Apache或Nginx)交互,处理由Web服务器代理的请求。
2024-10-16 20:11:34
991
原创 六万字77道Spring面试题总结(2024版)
Spring是一个开源的Java平台,它由Rod Johnson创建,旨在简化企业级应用程序的开发,它提供了一个全面的编程和配置模型,使得开发者可以轻松地构建服务导向的应用程序。Spring的核心优势在于其**依赖注入(DI)和面向切面编程(AOP)**的支持,这两个特性极大地简化了Java应用的开发。Spring框架可以被划分为多个模块,每个模块解决特定的问题,并且模块之间保持松耦合。这种模块化的设计使得开发者可以只选择他们需要的模块,从而保持应用的轻量级。
2024-10-15 20:37:23
1859
2
原创 23道Nginx面试题带你全面了解Nginx!
Nginx 是一个高性能的 HTTP 和反向代理服务器,它以轻量级和高并发处理能力而闻名。Nginx 的设计注重于高效率和稳定性,它能够处理大量的并发连接,而系统资源消耗相对较小。Nginx 的核心是基于事件驱动架构,这使得它在处理大量并发连接时表现出色。此外,Nginx 还提供了邮件代理、通用 TCP/UDP 代理服务器的功能,以及强大的负载均衡和缓存机制。它的模块化设计也使得它能够灵活地适应不同的应用场景。Nginx 的反向代理。
2024-10-15 20:36:37
4445
1
原创 3万字66道Java基础面试题总结(2024版本)
本文合计3W字,合计66道Java面试题,包含了Java基础的各类的高频面试题,复习Java基础,看这一篇就够了
2024-10-13 11:30:53
2105
7
原创 【Spring成神之路】从源码角度深度刨析Spring循环依赖
互相依赖导致出现的问题,我个人感觉有点死锁的味道,就是A需要实例化的B才能完成实例化,而B而又需要实例化的A才能完成实例化,从而出现了循环依赖问题。PS:下面的源码解读会比较乱,就是看起来会感觉联系不起来,但是没关系可以先看一个眼熟,后面看我的流程图还有结合案例就能理解了。所以三级缓存的存在就是为了解决AOP代理,具体解决的AOP代理的循环依赖的流程如下图所示。是代理对象,则会将这个对象进行动态代理,返回其代理对象,否则返回前面实例化的。的实例化是一个AOP代理,则获取其代理对象,否则获取其半实例化对象。
2024-08-03 16:06:28
1229
1
原创 【Spring成神之路】老兄,来一杯Spring AOP源码吗?
AOP是Spring框架的重点之一,AOP全称为Aspect-Oriented Programming,意思为面向切面编程,这种编程方式是一种编程的范式。`AOP`允许开发者将横向关注点(如日志记录、事务管理等操作)与业务逻辑分开来,从而提高代码的模块化和可维护性。下面从浅入深彻底搞懂`Spring AOP`的底层原理!
2024-07-10 22:19:31
1180
原创 【Spring成神之路】一次SpringIOC源码之旅,女朋友也成为了Spring大神!
无论你是一个经验丰富的Java-er,还是一个Java初学者,都会听过Spring框架的大名,我在初学这个Spring框架的时候都是对这个框架当成一个工具使用,只知道这样做能够达到这样的效果,但是具体里面是怎么实现的也说不清楚,不过随着现在技术的越来越卷,我感觉有必要揭开Spring框架的内幕,深度学习领悟这一优秀的框架了!本文是针对Spring框架中的IOC核心功能进行源码解读的,准备好的话,那就一起出发喽若文章有错误之处,欢迎各位大佬指正!
2024-06-30 20:53:23
791
原创 都2024年了,还有人不懂动态代理么?
静态代理和动态代理都反映了一个代理模式,代理模式是一种经典的设计模式,常用于为其他对象提供一种代理或占位符,以限制对它的访问,充当访问对象的中介。就好比平时我们租房,会和中介进行沟通,中介带我们去看房,中介又与房东保持联系,但房东不会带我们看房。JDK代理与Cglib代理对比Cglib实现的动态代理是基于ASM字节码生成框架实现的,使用字节码技术生成代理类,在JDK1.6之前比使用Java反射效率要高一点。
2024-06-23 13:30:16
867
原创 智能SQL生成:后端技术与LLM的完美结合
如果各位有关注一些技术文章,难免会注意到这几年有一个词非常火,没错这就是“大模型”!那大模型是什么?有什么用呢?“大模型”是可以指任何规模较大、参数众多的机器学习模型,不仅限于自然语言处理(NLP),也可以包括计算机视觉、语音识别等其他领域的模型。大模型的特点是它们通常需要大量的数据来训练,以及相对较大的计算资源。大模型的用途十分广泛,在很多领域都有不错的应用价值:自然语言的生成和理解:大模型可以根据用户的问题生成连贯的文本回答、或是总结某些文章。ChatGPT就是一个不错的例子。图像的处理。
2024-02-25 18:20:38
1848
1
原创 如何用克鲁斯卡尔算法求解最小生成树?
克鲁斯卡尔(Kruskal)算法也是求连通网的最小生成树的另一种方法。关于最小生成树相关概念不了解的可以看——Prim算法:如何快速求解最小生成树?-优快云博客对图的所有边按照权值大小进行排序。将边添加到最小生成树时,如果当前最小权值的这条边添加进去,没有导致形成回路,那么就把边添加进树中。否则,不将边添加进树中,继续遍历下一条边。Kruskal算法和Prim算法有什么区别?Kruskal算法是基于边进行的贪心算法,而Prim算法是基于节点进行的贪心算法。
2023-12-29 16:52:05
1694
原创 Prim算法:如何快速求解最小生成树?
Prim算法是图论中的一种算法,可在加权连通图里搜索最小生成树。最小生成树,简称MST。是给定一个带权的无向联通图,如何选取一颗生成树,使树上所有边权的总和为最小,这个树就叫最小生成树。N个顶点,一定有N-1条边包含全部顶点N-1条边都在图中这个算法的常见用途就是在包含n个顶点的连通图中,找出只有(n - 1)条边包含所有n个顶点的连通子图,也就是最小生成树。
2023-12-28 07:00:00
1124
原创 完蛋!我被ConcurrentHashMap源码包围了!(一)
是一个线程安全的HashMap,在JDK1.7与JDK1.8,无论是实现还是数据结构都会有所不一样。想学学习一个类的源码,就必须由浅入深,先从构造方法开始学习。触发扩容机制的触发,主要涉及两个方法``treeifyBin。将一个键值对放进Map的时候,我们通常调用。在进入源码学习之前,先回忆一下。简单使用如上,不过多赘述。tryPresize`方法。对于取值,通常都是通过。一样的面试高频考点。
2023-11-25 17:17:07
311
原创 被面试官问到分布式ID,别再傻乎乎只会答雪花算法了...
在分布式系统中,通常都需要对大量数据和消息进行唯一标识,这个表示通常被称为分布式ID。分布式ID是用于识别不同实体或数据对象的,这就要求分布式ID必须具有全局唯一性,不能出现重复的ID。并且,由于在复杂的分布式系统下,分布式ID使用的场景很多,这就要求分布式ID的生成速度应该足够快,并且对本地资源消耗小。除此之外,生成分布式ID必须是高可用的,因为分布式ID关联着众多系统,必须要求分布式ID的生成的服务可用性无限趋向于100%。
2023-10-13 21:07:47
2300
原创 【Seata】深入解读分布式事务解决方案
事务是数据库操作的一个逻辑单位,可以是一个或多个数据库操作的集合,在一个事务里,要么所有操作都执行成功,要么所有操作都不执行。本地事务分布式事务Seata是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata也是从两段提交演变而来的一种分布式事务解决方案,提供了ATTCCSAGA和XA等事务模式。XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入TCC模式:最终一致的分阶段事务模式,有业务侵入AT模式。
2023-10-01 17:48:35
654
原创 【JUC】一文弄懂@Async的使用与原理
在Spring3.X的版本之后,内置了@Async解决了多个任务同步进行导致接口响应迟缓的情况。使用@Async注解可以异步执行一个任务,这个任务的返回值必定为null,所以在使用@Async推荐返回值为NULL。那么该如何使用@Async开启一个异步任务呢?:启动类上开启异步模式@Async:需要异步处理的方法@Service@Async需要注意的是,@Async的异步任务是基于AOP实现的,如果是自调用的情况下,@Async是不会生效的喔。
2023-09-30 12:12:25
4130
1
原创 探索状态驱动开发的奇妙世界——Cola-StateMachine的介绍与使用
前面接受了Spring实现的状态机,这个状态机的优点在于功能很完备,缺点也是功能十分完备。完备到什么程度了,提供了状态机的高级玩法,比如状态的嵌套、状态的并行、子状态机等等。但是在开发中我们并不需要这些。除此之外,就是性能差的问题,包括但不仅限于在内的所有开源状态机都是有状态的,也就意味着状态机记住先前的状态和输入,以便在进行状态转换时使用这些信息作出决策。这就导致了这些有状态的状态机出现了线程安全的问题。而我们的系统往往是分布式多线程的,所以为了解决线程安全问题,我们不得不每次都要build一个实例。
2023-09-19 07:31:13
3924
原创 状态管理艺术——借助Spring StateMachine驭服复杂应用逻辑
在开发中,无时无刻离不开状态的一个概念,任何一条数据都有属于它的状态。比如一个电商平台,一个订单会有很多状态,比如待付款、待发货、待收货、完成订单。而这其中每一个状态的改变都随着一个个事件的发生。比如将商品下单但未付款,那么订单就是待付款状态,当触发支付事件,那么订单就能从待付款状态转变未待发货状态,以此类推随之对应的事件就是发货、收货。其二,状态的流动是固定了的。也就是说,待付款状态的下一个状态只能是待发货状态,不能直接转化为待收货状态。这种由待付款直接转变未待收货的状态是非法的,是程序不允许的。
2023-09-15 20:42:25
2438
5
原创 【RabbitMQ】掌握高级特性,为你的应用带来无限可能!
MQ指的是消息队列,而消息队列是一种应用程序之间进行异步通信的机制,常用于分布式系统中传递消息和实现解耦。同时,MQ也是一种先进先出的数据结构,消息会按照进入MQ的顺序依次被消费者消费。在开发中,MQ的应用应用场景包含但不限于下面的几种。
2023-09-03 06:00:00
589
5
原创 【企业方案】如何在海量数据中找到热点Key(附JdHotKey解决方案)
如何在海量数据找到热点Key???这时候难免有人回答“这不简单,在同一秒内访问达到一定阈值的Key,这些就是热点Key,然后我们将这些Key对应的值缓存到像Redis这样的缓存中,下次访问的时候如果缓存命中直接从缓存获取不就可以了了么?话是这样说,但是这里有一个前提,就是身为程序员的你在编写代码的时候已经预知了哪些Key会是热点Key,所以才会放进缓存。这样的操作适合于双十一这样的高并发大场景,因为双十一的商品肯定会被大量用户访问,所以放进缓存可以减少大量的MySQL压力。而。
2023-08-03 11:15:14
1530
5
原创 【Spring】深入解析Spring事务:揭秘数据完整性背后的强大引擎
在MySQL中,事务是指一组数据库操作的集合,这些操作要么全部成功提交,要么全部回滚。事务可以确保数据的一致性和完整性,并提供并发控制机制,以防止数据的损坏或者丢失。而在Spring中,Spring提供Spring事务机制,用于管理数据库操作或其他资源的一致性和完整性。它允许开发者在应用程序中定义和控制事务,以保证数据的正确处理。
2023-07-31 15:25:06
265
原创 【SpringBoot】SpringBoot的自动配置源码解析
SpringBoot相对于SSM来说,主要的优点就是简化了配置,不再需要像SSM哪有写一堆的XML配置,这些XML配置在大项目上会成为一种累赘,使得后期项目难以维护。其实是spring底层注解,意思就是根据不同的条件,来进行自己不同的条件判断,如果满足指定的条件,那么配置类里边的配置才会生效。注解的作用是将当前类所在的包以及子包作为自动配置的包路径,以便让SpringBoot能够自动加载和处理这些组件的配置。这个方法的返回值是候选的配置类,经过处理和筛选后的自动配置类列表以及排除列表。
2023-07-13 10:22:00
1147
8
原创 【MapStruct】还在用BeanUtils?不如试试MapStruct
MapStruct是一个Java注解处理器,它可以简化Java bean之间的转换。它使用基于生成器的方法创建类型安全的映射代码,这些代码在编译时生成,并且比反射更快、更可靠。使用MapStruct可以避免手动编写大量重复的转换代码,从而提高生产力和代码质量。MapStruct通过使用注解,在源代码中指定映射规则,MapStruct可以自动生成转换器代码。MapStruct支持各种转换场景,包括简单类型、集合、继承、日期、枚举、嵌套映射等等。
2023-06-02 21:47:26
3315
3
原创 【JUC进阶】详解synchronized锁升级
是一个悲观锁,可以实现线程同步,在多线程的环境下,需在操作同步资源的时候先加锁,避免共享资源出现问题。因为加锁可以使得一个线程在一个时间点内只有一个线程可以访问,这样增加了安全性。但是这样却损失了程序的执行性能,因为在加锁、抢夺锁、释放锁需要从用户态切换成内核态,属于操作系统层面的,因此比较消耗性能。无锁状态偏向锁状态轻量级锁状态重量级锁状态。这几个状态会随着竞争情况逐渐升级。可以用在实例方法、静态方法、代码块上修饰实例方法,对当前实例对象this加锁修饰静态方法,对当前类的Class对象加锁。
2023-04-12 12:44:46
811
1
原创 【设计模式】软件设计原则以及23种设计模式总结
"设计模式"最初并不是出现在软件设计中,而是被用于建筑领域的设计中。1977年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任在他的著作《建筑模式语言:城镇、建筑、构造》中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森(Ralph Johnson)
2023-04-06 17:12:42
652
原创 【Redis进阶】Redis数据结构
Redis常用的数据结构为String,List,Hash,Set,Sorted Set。但这只是我们在用的时候键值对的表现形式,他们底层真正使用的数据结构为简单动态字符串,双向链表,压缩列表,哈希表,跳表和整数数组在 Redis 3.0 版本中 List 对象的底层数据结构由「双向链表」或「压缩表列表」实现,但是在 3.2 版本之后,List 数据类型底层数据结构是由 quicklist 实现的;
2023-04-02 13:36:31
857
空空如也
AndroidStudio运行报错,如何解决?
2022-01-02
C语言从txt里面删除某一段文字(代码有问题删除不了某一段文字)
2021-07-09
TA创建的收藏夹 TA关注的收藏夹
TA关注的人