- 博客(385)
- 收藏
- 关注
原创 史上最全!!!大厂面试真题-SpringBoot自动装配的原理是什么?
SpringBootApplication注解这是一个组合注解,包含了@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan三个核心注解。:表明该类是一个配置类,它实际上是一个@Configuration注解的派生注解,用于定义Bean和配置应用程序。:开启自动配置功能,通过@Import注解引入AutoConfigurationImportSelector类,该类负责扫描并加载自动配置类。
2024-09-22 13:04:35
1704
原创 Leetcode347:前K个高频元素
Leetcode347:前K个高频元素题目要求找出数组中前k个高频元素。解题思路是:首先统计每个数字出现的频率,然后使用小顶堆(优先队列)维护频率最高的k个元素。具体步骤:1) 用哈希表统计频率;2) 遍历哈希表,将元素按频率存入容量为k的小顶堆,堆满时若当前元素频率大于堆顶则替换;3) 最后堆中元素即为结果。该方法时间复杂度为O(nlogk),优于O(nlogn),满足进阶要求。示例验证了算法的正确性,如输入[1,1,1,2,2,3],k=2时正确输出[1,2]。
2026-01-19 15:53:42
97
原创 面试题:Netty 无锁串行化是怎么设计的?
Netty通过无锁串行化设计实现高性能并发处理,其核心是将每个Channel绑定到特定EventLoop,由单线程串行处理所有事件。这种设计避免了多线程竞争和锁开销,通过事件队列机制保证同一Channel的操作始终在同一线程执行。代码示例展示了NioEventLoopGroup和ChannelPipeline的创建过程,其中每个ChannelHandler都在绑定EventLoop的线程中运行,确保无锁操作。该设计简化了并发编程,显著提升了系统吞吐量和响应性能。
2026-01-19 10:25:13
321
原创 面试题:说说MMAP和DMA/SG-DMA的关系
摘要:MMAP(内存映射)是操作系统提供的虚拟内存机制,通过将文件/外设地址空间直接映射到进程虚拟地址空间,实现高效数据读写。其核心优势在于消除CPU拷贝(传统I/O需2次拷贝)和减少系统调用,通过页表映射实现内核态与用户态内存共享。MMAP采用懒加载机制,首次访问时触发缺页中断加载数据。相比传统I/O,MMAP内存占用减半,尤其适合大文件、高频读写场景。Java通过MappedByteBuffer实现MMAP,需注意内存泄漏风险。MMAP与SG-DMA协同构成零拷贝技术核心,前者解决软件层拷贝,后者处理硬
2026-01-18 21:56:36
598
原创 面试题:说一说什么是DMA、SG-DMA
DMA(直接内存访问)和SG-DMA(分散-聚集DMA)是两种硬件级数据传输机制。传统DMA要求连续物理内存块传输,而SG-DMA通过描述符链表支持非连续内存块传输,显著减少中断次数和CPU开销。SG-DMA更适用于现代操作系统的虚拟内存机制,在网络通信、存储系统等场景性能优势明显。两者核心区别在于内存连续性要求和中断处理方式,SG-DMA作为增强版,已成为高性能I/O设备的基础技术。
2026-01-18 21:18:50
662
原创 Leecode热题100-155.最小栈
Leecode热题100-155.最小栈本文介绍了一种实现最小栈(MinStack)的方法,该数据结构支持常规栈操作(push/pop/top)并能在常数时间内获取当前栈中最小元素。核心思路是使用两个栈:一个普通栈存储实际数据,另一个辅助栈动态维护当前最小值。当压入新元素时,若该元素小于等于辅助栈顶元素则同时压入辅助栈;弹出元素时,若与辅助栈顶元素相等则同时弹出。这样辅助栈顶始终保持当前最小值,getMin()操作只需O(1)时间。该方法通过空间换时间,保证了所有操作的时间复杂度均为常数级。
2026-01-18 15:13:44
593
原创 Leetcode尊享面试100题:252. 会议室
Leetcode尊享面试100题:252. 会议室判断能否参加所有会议的问题可以通过排序会议时间来解决。首先将会议按开始时间排序,若开始时间相同则按结束时间排序。然后检查是否存在后一个会议的开始时间早于前一个会议的结束时间,若有则返回false,否则返回true。该方法时间复杂度为O(nlogn),空间复杂度为O(1)。
2026-01-15 21:54:15
316
原创 Leetcode尊享面试100题:1060. 有序数组中的缺失元素
Leetcode尊享面试100题:1060. 有序数组中的缺失元本文提出了两种解决有序数组中查找第k个缺失数字的方法。基础解法通过遍历数组计算相邻元素间的缺失数,时间复杂度O(n);进阶解法使用二分查找优化至O(logn),通过计算区间缺失数定位目标位置。代码实现包含两种方法:missingElement2()采用线性扫描,missingElement()利用二分查找快速定位。示例显示两种方法均能正确找出缺失数字,如输入[4,7,9,10]和k=3时输出8。提示指出数组长度可达5万,要求高效处理大规模数据。
2026-01-15 21:45:31
253
原创 面试题:Order by是通过什么实现的,为什么有的时候会耗时比较长但是最终能返回正确结果,怎么改善?
MySQL中ORDER BY的性能差异主要取决于是否使用索引排序。索引排序(Using index)直接利用有序索引结构高效返回结果,而文件排序(Using filesort)则需内存/磁盘排序操作,导致性能下降但结果仍正确。优化关键包括:1)建立匹配ORDER BY条件的索引(单列/复合/覆盖索引);2)通过WHERE条件减少排序数据量;3)合理设置sort_buffer_size参数;4)避免对排列表达式使用函数。核心思路是优先利用索引避免文件排序,其次控制排序数据规模。
2026-01-14 17:13:15
1002
原创 面试题:解释一下什么是全字段排序和rowid排序
MySQL执行filesort时有两种核心算法:全字段排序和rowid排序。全字段排序将所有查询字段加载到sort_buffer,排序后直接返回结果,无需回表但内存占用大;rowid排序仅加载排序键和主键,排序后需回表但内存占用小。MySQL 5.6+默认优先使用rowid排序,因其更适合处理大数据量场景。两种算法通过max_length_for_sort_data参数控制切换,但最佳优化方案仍是建立合适的覆盖索引来避免filesort。核心差异在于内存占用与回表开销的权衡,实际应用中应优先考虑索引优化。
2026-01-14 16:58:05
836
原创 怎么排查线上CPU100%的问题
摘要:本文提供了两种排查Java应用CPU占用过高的方案。方案一基于JDK原生工具,通过top定位进程、线程转16进制后结合jstack分析线程栈,辅以jstat监控GC情况。方案二使用Arthas工具,提供可视化分析,支持直接输出高CPU线程和生成火焰图。两种方案均遵循"定位进程→定位线程→分析代码→优化问题"的流程,前者适合无外网环境,后者对新手更友好。常见问题包括死循环、内存泄漏、锁竞争和低效算法,需针对性优化。
2026-01-13 21:50:02
1188
原创 JMM 三大特性(原子性 / 可见性 / 有序性)面试精简版
摘要:Java内存模型(JMM)定义了多线程共享变量的访问规则,通过原子性、可见性和有序性三大特性保障并发安全。原子性通过synchronized、Lock和CAS机制确保操作不可分割;可见性借助volatile、synchronized强制内存同步,解决工作内存与主内存不一致问题;有序性则通过内存屏障和happen-before原则防止指令重排。特别强调volatile不能保证原子性,DCL单例模式必须使用volatile,而synchronized是全能型解决方案。理解这些特性及对应实现机制,是解决多线
2026-01-13 11:23:12
560
原创 DDD中的防腐层
本文阐述了DDD中防腐层的核心概念及其在XX零售购物车系统中的应用。防腐层作为"翻译+防火墙",隔离外部系统变化对购物车领域的影响:1)通过领域层接口定义业务语义,基础设施层实现外部服务适配;2)解决商品服务字段变更直接污染购物车代码的问题;3)提供统一异常处理和测试简化。以商品服务价格字段变更为例,展示如何通过ProductClient接口转换数据模型,使购物车核心逻辑与外部服务解耦。该设计使购物车在商品服务多次变更中保持零修改,测试覆盖率提升30%,有效维护了领域模型的纯粹性和系统稳
2026-01-11 22:34:15
891
原创 经典面试题:K8S的自动缩扩容和崩溃恢复
摘要:Kubernetes自动扩缩容和崩溃恢复机制基于期望状态与实际状态的调和原理。HPA是最常用的水平Pod自动伸缩方式,通过MetricsServer采集指标,根据预设阈值调整副本数,关键需配置Pod的resources.requests。崩溃恢复分为容器级重启(由restartPolicy控制)和控制器重建(Deployment/StatefulSet兜底)两层机制,后者对有状态应用会保留网络标识和存储状态。节点级故障由NodeController处理,5分钟后触发跨节点重建。面试重点包括HPA工作原
2026-01-11 21:55:22
541
原创 Leetcode1891:割绳子
摘要:给定一组绳子和目标数量k,寻找能够切割出至少k条相同长度绳子的最大长度x。使用二分查找法在可能长度范围内(1到最长绳子长度)进行搜索,通过辅助函数计算当前长度下能切割出的绳子数量。若总长度不足k条则返回0,否则返回满足条件的最大x值。示例说明当输入为[9,7,5],k=3时,最优解为5;当k=22时无法满足返回0。算法时间复杂度为O(n log max_length)。
2026-01-10 10:25:48
506
原创 同步 / 异步 + 阻塞 / 非阻塞
摘要:本文系统解析了同步/异步、阻塞/非阻塞两组正交维度的四种组合模式。同步关注结果主动获取,异步依赖回调通知;阻塞会挂起线程,非阻塞允许线程继续执行。重点分析了同步阻塞(如Java BIO)、同步非阻塞(如NIO轮询)、异步阻塞(不合理模式)和异步非阻塞(如Netty)的特点、流程及应用场景。强调异步非阻塞是高并发终极方案,并提供了面试应答策略:先厘清维度区分,结合技术栈(NIO/AIO)和业务场景(秒杀系统),预判回调嵌套等深度问题。最后对比四种模式的线程状态、性能差异和典型技术实现。
2026-01-10 09:53:54
771
原创 如何保证消息队列不重复消费
消息队列无法完全避免重复投递,需通过三层协同机制确保业务结果一致性:1)生产端采用唯一ID和幂等发送;2)Broker端实现精确投递;3)消费端通过幂等处理兜底。核心在于消费端设计(如唯一索引、乐观锁等),即使消息重复也能保证处理结果正确。不同场景需组合方案,金融类业务建议全链路保障,高并发场景侧重消费端优化。
2026-01-10 09:52:23
913
原创 设计模式之责任链
摘要:责任链模式通过解耦请求发送者和接收者,实现请求在处理器链中的自动传递。以公司请假审批流程为例,部门经理、总监、总经理构成处理链,员工只需提交申请至链首,无需关心后续审批过程。该模式包含抽象处理者、具体处理者和客户端三个核心角色,具有解耦、灵活扩展等优点,但也存在请求可能无人处理等缺点。典型应用场景包括Web过滤器、框架拦截器和工作流审批系统。与策略模式不同,责任链模式强调请求传递而非方案选择。
2026-01-05 23:01:47
911
原创 面试题:树形结构演进与核心问题解决方案
本文系统梳理了树形数据结构的演进过程:从二叉查找树(BST)到平衡二叉树(AVL)、红黑树,再到B树/B+树。每种结构都针对前者的缺陷进行优化:BST解决线性结构效率失衡问题但可能退化为链表;AVL通过严格平衡解决退化但维护成本高;红黑树采用近似平衡降低维护成本;B树/B+树则优化磁盘IO性能。文章结合电商场景(商品查询、订单管理、数据库索引)说明各结构的适用场景,强调时间复杂度(O(logn))和业务适配性是技术选型的关键考量。
2026-01-05 19:46:09
660
原创 面试题:Spring事务失效的八大场景
Spring事务失效常见场景及解决方案包括:1)方法内自调用(this.xxx())导致事务失效,可通过拆分方法到其他Bean、自注入或AopContext解决;2)private/final方法无法被代理增强,需改为public修饰;3)跨线程调用导致连接获取失败,需保证同线程执行;4)配置类缺少@Configuration注解导致DataSource不一致;5)异常被捕获未抛出导致事务不回滚;6)类未被Spring管理;7)数据库引擎不支持事务。每种场景都可通过调整代码结构或配置解决,核心是确保代理对象
2026-01-01 22:16:48
866
原创 Leecode热题100-35.搜索插入位置
Leecode热题100-35.搜索插入位置,过份简单的高频放水题,务必掌握,这题要是做不出来就不用考算法了。。。
2024-11-13 08:57:09
488
1
原创 大厂面试真题-说说同步IO异步IO以及BIO、NIO、AIO
同步与异步,以及BIO(同步阻塞IO)、NIO(非阻塞IO/多路复用IO)、AIO(异步IO)是计算机编程中处理输入输出(IO)操作的几种重要模型。
2024-11-08 20:40:48
1158
原创 大厂面试真题-简单说说线程池接到新任务之后的操作流程
判断是否存在空闲线程,若存在则分配任务。若无空闲线程,则判断当前线程数是否小于核心线程数,若小于则创建核心线程执行任务。若核心线程数已满,则检查阻塞队列是否未满,若未满则将任务添加到队列中等待执行。若阻塞队列已满,则判断当前线程数是否未达到最大线程数,若未达到则创建非核心线程执行任务。若已达到最大线程数,则采用拒绝策略处理新任务。这个流程确保了线程池能够高效地管理和执行任务,同时避免了资源的过度使用和浪费。
2024-11-06 20:13:31
985
原创 大厂面试真题-说说redis和本地缓存的一致性怎么做
在探讨本地缓存与Redis之间的一致性时,我们主要关注的是如何在不直接涉及数据库操作的情况下,确保两者之间的数据保持一致。
2024-11-05 19:05:23
726
原创 大厂面试真题-说说redis的分片方式
Redis的分片机制是其实现数据分布式存储和处理的关键,它允许将数据拆分存放在不同的Redis实例上,每个Redis实例只包含所有键的子集,从而提高了系统的性能和可扩展性。
2024-11-04 19:23:04
1044
原创 大厂面试真题-如果使用guava limiter实现实例级别的缓存
然而,这通常不是推荐的做法,因为它可能会增加复杂性和资源消耗。获取许可,然后再次检查缓存(因为可能在获取许可期间有其他线程已经更新了缓存),如果仍然没有数据,则从数据源获取并更新缓存。如果你想要对每个不同的键或每个不同的实例有独立的流量控制,你需要为每个键或实例创建单独的。用于流量控制,确保系统在处理请求时不会超过指定的速率,而。方法首先尝试从缓存中获取数据,如果缓存中没有数据,则通过。是两个不同的组件,分别用于控制访问频率和实现缓存功能。来实现一个既具有缓存功能又受流量控制的系统。请注意,这个示例中的。
2024-11-02 20:55:41
775
原创 大厂面试真题-很多系统会使用netty进行长连接,连接太多会有问题吗
使用Netty进行长连接时,机器数量过多确实可能会因为连接数量过多而引发问题。这些问题主要涉及系统资源消耗、连接管理、性能优化等方面。
2024-11-01 19:39:13
955
原创 大厂面试真题-caffine比guava有什么提升?
Caffeine相较于Guava在多个方面都有显著的提升,这些提升使得Caffeine成为了一个更高效、更强大的本地缓存解决方案。
2024-11-01 19:29:23
1071
原创 大厂面试真题-简单说说中台的架构设计
中台架构将系统的通用化能力进行打包整合,通过接口的形式赋能到外部系统,以快速支持业务发展。它面向整个企业,需要IT部门与业务部门协同建设。各部门及各业务域是中台能力的使用方,同时也是中台能力的重要提供方。
2024-10-31 10:29:00
870
原创 大厂面试真题-怎么设计电商系统的订单15分钟超时机制
综上所述,设计一个电商系统的订单超时机制需要综合考虑需求、技术方案、实现步骤以及测试和优化等方面。通过科学合理的设计和实现,可以确保订单超时机制的有效性和可靠性。首先,需要明确订单超时机制的具体需求,包括超时时限(15分钟)、触发条件(订单未支付)、执行动作(自动取消订单)等。
2024-10-31 10:16:09
601
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅