- 博客(73)
- 收藏
- 关注
原创 大表性能优化:从问题到解决方案
如果表的查询没有命中索引,数据库会进行全表扫描(Full Table Scan),也就是把表里的所有数据逐行读一遍。当数据量很大时,单次查询可能需要从多个磁盘块中读取大量数据,磁盘的读写速度会直接限制查询性能。索引是数据库性能优化的“第一杀器”,但很多人对索引的使用并不熟悉,导致性能不升反降。表结构是数据库性能优化的基础,设计不合理的表结构会导致后续的查询和存储性能问题。如果没有索引,数据库会扫描整个表的所有数据,再进行排序,性能肯定会拉胯。对高频查询的数据可以存储到Redis中,减少对数据库的直接访问。
2025-01-26 20:27:53
6895
4
原创 SpringBoot读取配置优先级顺序是什么?
Spring Boot的外部化配置允许应用程序在不改变代码的情况下适应不同环境。Properties文件:使用格式,以键值对形式存储配置信息。YAML文件:提供更直观、层次分明的数据结构,适合复杂配置。server:port: 8080logging:level:环境变量:操作系统级别的环境变量,适合云环境和容器化部署。命令行参数:启动应用时通过命令行参数覆盖配置。@Value注解:直接注入配置属性值。接口:查询所有已加载的配置。注解:绑定一组相关配置到Java Bean中。
2025-01-23 22:21:19
4627
1
原创 如何实现亿级用户在线状态统计?
在处理亿级用户在线状态统计时,选择合适的方案至关重要。基于总数的统计方案虽然简单高效,但缺乏精准性;而基于用户标识的统计方案虽然精准,但内存占用较大。结合实际需求,可以选择以下路径:如果对实时性和性能要求极高,且可以容忍少量误差,可以选择基于 Redis 的 HyperLogLog 或 Bitmap 方案。如果需要精准查询用户的在线状态,且对内存占用和效率要求较低,可以选择基于用户标识的集合方案。
2025-01-21 18:26:54
4243
3
原创 线程池遇到未处理的异常会崩溃吗?
在多线程编程中,线程池是提高性能和资源利用率的重要工具。Java 提供了 和 两种方法来提交任务到线程池。虽然它们看起来相似,但在实际使用中却有显著的区别。本文将详细介绍这两种方法的使用场景及其在处理异常时的行为差异。 方法用于提交一个不需要返回值的任务给线程池执行。它接收一个 类型的参数,并且不返回任何结果。说明: 方法适用于那些只需要执行任务,而不需要关心任务执行结果的场景。 方法用于提交一个需要返回值的任务( 对象),或者不需要返回值但希望获取任务状态的任务( 对象)。它接收一个 或 类型
2025-01-20 22:19:10
4678
3
原创 JDBC存在什么问题?MyBatis是如何解决的?
通过本文的深入分析,我们详细了解了JDBC的核心组件、使用过程中存在的问题,以及MyBatis是如何巧妙地解决这些问题的。对于一些资深的Java程序员,尤其是那些接触过早期JDBC项目的开发者来说,对JDBC的使用痛点可能深有体会。而现在,大部分项目都采用了Hibernate和MyBatis等优秀的对象关系映射(ORM)框架,这些框架对JDBC进行了很好的抽象和封装,提供了更加面向对象的数据库操作方式。因此,开发者不需要直接处理JDBC的API,而是直接面向ORM进行开发。
2025-01-19 16:29:04
4156
原创 IO 多路复用技术详解
IO多路复用技术是一种允许单个线程管理多个网络连接的技术,它使得服务器能够高效地处理大量的并发连接而不需要为每个连接创建一个独立的线程或进程。想象一下,如果客户端有成千上万个,那么非IO多路复用就会有成千上万个线程,这会导致IO过度争抢和多线程切换的问题,因为CPU资源有限,而要执行的线程却有成千上万个。IO多路复用技术是现代网络编程中不可或缺的一部分,它允许单个线程高效地管理多个网络连接。不同的实现技术有其各自的优缺点,选择合适的IO多路复用技术取决于具体的应用场景和平台。
2025-01-17 20:01:22
882
1
原创 命中索引一定能提高查询速度吗?
答案是否定的,在实际项目中我曾踩过这个坑。在进行性能优化时,我发现一个接口的 SQL 语句没有加索引,EXPLAIN执行后发现是全表扫描。我对查询的字段添加了索引后,性能却没有明显提升。这是为什么呢?本文将探讨结合项目优化实例、索引的工作原理、影响查询性能的因素,以及在什么情况下索引可能不会带来预期的性能提升。
2025-01-16 20:21:46
4396
2
原创 如何保证接口幂等性?高并发下的接口幂等性如何实现?
接口幂等性这一概念源于数学,原意是指一个操作如果连续执行多次所产生的结果与仅执行一次的效果相同,那么我们就称这个操作是幂等的。在互联网领域,特别是在Web服务、API设计和分布式系统中,接口幂等性具有非常重要的意义。具体到HTTP接口或者服务间的API调用,接口幂等性可以理解为当客户端对同一接口发起多次相同的请求时,服务端系统也应该确保只执行一次相应的操作,并且不论接收到了多少次请求,系统的状态变更始终是一致的,不会因为重复的请求而导致数据的错误。比如我们常常遇到的订单创建、支付等业务。
2025-01-15 20:07:39
4626
3
原创 高并发性能优化随笔
本文介绍了多种高并发性能优化技巧,包括 MySQL 的索引和分库分表、缓存的使用、消息队列与流量聚合、线程池的优化等。这些技巧在实际开发中非常有用,可以帮助我们更好地应对高并发场景,提升系统的性能和稳定性。
2025-01-14 15:37:58
1040
3
原创 面试官:保证线程顺序执行的方法
使用join():通过join()方法让一个线程等待另一个线程完成。使用:通过计数器实现线程的顺序执行。使用Semaphore:通过许可管理实现线程的顺序执行。使用单线程池:通过单线程池确保任务按提交顺序依次执行。使用:通过锁机制确保线程同步。使用:通过异步任务的链式调用实现顺序执行。
2025-01-13 20:10:48
4430
原创 MySQL不使用子查询的原因
这些案例展示了如何通过不同优化策略提升MySQL查询性能,特别是在处理子查询时。创建合适的索引:经常用于WHERE和JOIN的字段应建立索引,避免在低选择性的字段上建立索引(如性别字段)。避免索引失效的情况:使用函数计算的字段不会使用索引,如应优化为。组合索引的最左前缀法则:确保查询条件从组合索引的最左列开始。使用EXPLAIN分析查询执行计划:通过EXPLAIN关键字可以帮助我们了解查询的执行计划,从而发现性能瓶颈。优化查询语句:避免使用SELECT *,使用LIMIT。
2025-01-12 21:27:38
5079
6
原创 反射的底层实现原理?
反射是 Java 编程语言中的一个强大特性,它允许程序在运行期间动态获取类和操纵类。通过反射机制,可以在运行时动态地创建对象、调用方法、访问和修改属性,以及获取类的信息。反射提供了极大的灵活性,但也带来了运行时性能损耗和安全隐患。
2025-01-11 16:46:13
4437
原创 如何解决MySQL 的深度分页问题?
本文分析了 MySQL 的深度分页问题及其解决方案。对于 MySQL 中的深度分页,我们可以通过合理的优化策略来提高查询效率。具体选用什么方案,需要根据具体场景进行分析,但核心在于理解数据库的工作原理,利用索引、优化查询策略、使用标记分页、分区表、缓存结果等优化技术。通过这些方法,可以显著提升分页查询的性能,改善用户体验。
2025-01-10 17:01:35
284459
2
原创 面试官:为什么Map不能插入null?
综上所述,HashMap和ConcurrentHashMap在对null值的处理、线程安全性、性能等方面存在显著的区别。HashMap允许键和值为null,适用于单线程环境下的数据存储和查询场景,具有较高的性能和简单的使用方式;而ConcurrentHashMap不允许键和值为null,适用于多线程环境下的数据存储和查询场景,具有线程安全性和较高的并发性能。在实际开发中,我们需要根据具体的使用场景和需求来选择合适的Map实现类。
2025-01-09 21:46:48
1581
1
原创 面试官:new Integer(“127“)和Integer.valueOf(“128“)有什么区别
或自动装箱,以便在可能的情况下利用缓存优化。虽然了解这些细节很重要,但在日常编程中,我们应该专注于编写清晰、正确的代码,而不是过度依赖于这些底层优化。这个问题触及了 Java 中整数缓存机制的一个微妙之处。在实际应用中,除非特别需要新对象,否则推荐使用。或自动装箱,通常就足以编写高效且可靠的代码.在 Java 面试中,经常会遇到关于。对象创建和缓存机制的问题。进行值比较,以及优先使用。
2025-01-08 20:18:52
989
3
原创 场景题:如何在1G内存下实现40亿QQ号去重?
布隆过滤器是基于位数组实现的,是一种高效的数据结构,主要用于判断一个元素可能是否存在于集合中。其核心特性包括高效的插入和查询操作,但存在一定的假阳性(False Positives)可能性.根据key值计算出它的存储位置,然后将此位置标识全部标识为1(未存放数据的位置全部为0)。查询时也是查询对应的位置是否全部为1,如果全部为1,则说明数据是可能存在的,否则一定不存在.位数组是指使用位(bit)组成的数组,每个QQ号使用1位(bit)来存储。例如,下标用来标识具体的数字,值为1表示存在,值为0表示不存在。
2025-01-07 22:03:45
1533
2
原创 如何进行千万级别数据跑批优化
在处理大数据量的跑批任务时,需要综合考虑多个方面,包括数据库优化、分片广播、分批获取、事务控制、资源利用、MQ消费、并发度调整、失败任务处理、下游接口时间、线程安全以及异常和监控等。通过合理的设计和优化,可以提高跑批任务的健壮性、可靠性和性能,从而确保业务的顺利进行.
2025-01-07 00:14:01
1558
3
原创 MySQL中深度分页问题的优化
深度分页问题是MySQL中一个常见的性能问题,通过起始ID定位法和索引覆盖+子查询的方法可以有效优化查询速度。选择哪种优化手段取决于具体的业务场景和查询需求。了解这些优化技巧可以帮助我们提高数据库查询的性能,尤其是在处理大量数据时。通过合理的优化,我们可以确保应用即使在数据量增长时也能保持响应迅速。在实际应用中,可能需要根据具体的情况综合使用多种优化手段。例如,在处理非常大的数据量时,可以同时使用更快的存储引擎、增加服务器资源、优化索引、限制分页窗口和采用缓存策略等方法,以达到最佳的性能效果。
2025-01-04 20:32:49
1270
1
原创 MySQL中distinct和group by去重的区别
大部分场景下DISTINCT是特殊的GROUP BY,但二者也有细微的区别,比如它们在查询结果集上、使用的具体业务场景上,以及性能上都是不同的。了解这些差异可以帮助我们根据实际需求选择更合适的方法。
2025-01-02 19:57:14
831
3
原创 创建线程的8种方法
以上就是Java中创建线程的8种方法,每一种方法都有其适用场景和优缺点。希望大家在实际开发中,能根据场景选择合适的方式。例如,小任务可以用Runnable,复杂计算可以用Callable,高并发场景可以用线程池,而异步任务可以用CompletableFuture或ListenableFuture等。通过这些方法的组合,可以让你的代码更加高效、优雅!
2025-01-01 14:20:24
1137
2
原创 实现全局积分排行榜的技术方案
选择哪种技术方案取决于项目的具体需求和现有架构。如果项目已经在使用Redis,并且对实时性要求较高,可以选择基于Redis的方案。如果项目对数据一致性和持久性要求较高,或者不想引入新的中间件,可以选择基于数据库的方案。
2025-01-01 14:03:13
639
原创 面试提问:Redis为什么快?
Redis之所以快,主要得益于其纯内存操作、高效的内存数据结构、单线程模型、I/O多路复用技术和简单高效的通信协议。这些特性使得Redis在处理大规模数据时能够保持高性能,成为许多应用场景下的首选数据库解决方案。希望这篇文章能帮助你更好地理解Redis的内部机制和性能优化技术。
2024-12-30 16:48:47
2129
6
原创 百万数据插入Redis的实现方案
将百万数据插入Redis是一项技术挑战,但通过合理选择实现方案和进行性能优化,可以高效完成任务。本文介绍了Redis的优势与挑战、前置工作的预处理和压缩、多种插入方案以及优化建议。每种方法都有其适用场景,开发者应根据实际情况选择最适合的方案,并注意调整配置参数和监控内存使用,以确保系统的稳定运行。希望这篇文章能帮助你更好地理解如何高效地将大量数据插入Redis。
2024-12-29 16:30:46
1654
原创 幻读、MVCC与MySQL锁:一次搞懂
本文详细介绍了MySQL中的事务隔离级别RR(可重复读)、MVCC(多版本并发控制)机制以及幻读问题。我们探讨了RR隔离级别如何通过MVCC减少幻读问题,以及在当前读操作中幻读问题依然存在的情况。为了彻底解决幻读,我们讨论了两种方案:升级到Serializable隔离级别或在RR隔离级别下使用锁。理解这些概念对于数据库管理员和开发者来说非常重要,它们有助于在保证数据一致性的同时,优化数据库的并发性能。
2024-12-28 22:07:19
507
原创 Spring Boot缓存预热实战指南
缓存预热是指在应用程序启动时,提前将常用的数据加载到缓存中,以减少用户首次访问时的延迟。通过这种方式,系统可以在用户请求到达之前,确保所需的数据已经准备好,从而提高响应速度和用户体验。使用启动监听事件:监听应用上下文初始化完成事件,执行数据加载。使用 @PostConstruct 注解:在Bean初始化后执行缓存预热逻辑。使用 CommandLineRunner 或 ApplicationRunner:在应用启动后执行自定义初始化逻辑。实现 InitializingBean 接口。
2024-12-27 17:02:45
1742
1
原创 面试官:Session和JWT有什么区别?
JWT是一种开放标准(RFC 7519),用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部(Header):包含了关于生成该JWT的信息以及所使用的算法类型。载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。JWT官方规定了7个字段,可供使用:iss(Issuer):签发者。sub(Subject):主题。aud(Audience):接收者。exp。
2024-12-26 12:09:26
1165
1
原创 面试官:如何用Redis实现限流?
限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避免系统负载过高、性能下降甚至崩溃的情况发生。限流的目标在于维护系统的稳定性和可用性,并确保服务质量。保护系统稳定性:过多的并发请求可能导致服务器内存耗尽、CPU 使用率饱和。防止资源滥用:确保有限的服务资源被合理公平地分配给所有用户。优化用户体验:对于网站和应用程序而言,如果任由高并发导致响应速度变慢,会影响所有用户的正常使用体验。保障安全:在网络层面,限流有助于防范 DoS/DDoS 攻击。
2024-12-25 14:31:12
1154
1
原创 面试官:说说MySQL调优?
MySQL调优是一个涉及查询语句、索引、表结构、架构和硬件的综合过程。通过上述方法,可以显著提升数据库的性能和稳定性。每种方法都有其适用场景,需要根据实际情况灵活选择和应用。希望这篇文章能帮助你更好地理解和实践MySQL调优。
2024-12-24 15:08:12
589
1
原创 订单超时自动取消:7大策略与实战技巧
每种方案都有自己的适用场景,大家在选择的时候,记得结合业务需求、订单量、并发量来综合考虑。如果你的项目规模较小,可以直接用延时队列或Redis;而在大型高并发系统中,消息队列和事件流处理往往是首选。当然,代码实现只是第一步,更重要的是在实际部署和运行中进行性能调优,保证系统的稳定性。希望这篇文章能给大家一些启发,也欢迎讨论其他可能的实现思路!
2024-12-23 19:12:02
1169
2
原创 面试官:平时写代码如何进行JVM调优?
JVM调优是一个涉及多方面的过程,需要根据具体的业务需求和性能目标来制定调优策略。通过明确调优原因、分析运行情况、合理设置参数、进行压测和应用配置,我们可以有效地提升JVM的性能,确保应用程序的稳定和高效运行。
2024-12-23 15:29:29
573
原创 面试官:聊聊你对分库分表的理解?
在处理大规模数据库时,是一种常见的优化手段,它可以帮助我们分散数据量、提高性能和可扩展性。分库分表实际上包含两个技术实现:分库和分表。下面我们将详细介绍这两种技术的实现方式和它们的优势。
2024-12-23 15:17:00
831
原创 深入理解Spring AOP
首先,我们需要定义一个切面来负责日志记录。这个切面将包含一个前置通知(Before advice)来在方法执行前记录日志,和一个后置通知(After advice)来在方法执行后记录日志。// 前置通知:在方法执行前调用 @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint) {
2024-12-22 19:27:27
888
2
原创 如何解决MQ消息积压问题?
消息积压是分布式系统中常见的问题,它需要我们从多个角度进行综合考虑和处理。通过合理的设计、监控和优化,我们可以有效地预防和解决消息积压问题,确保系统的稳定性和可靠性。
2024-12-22 14:42:07
1169
1
原创 一文搞懂Cookie、Session、Token、JWT
Cookie和Session是传统的基于服务器的会话管理机制,而Token和JWT则是更为灵活和安全的身份验证和授权机制,适用于分布式系统和前后端分离的应用场景。JWT是Token的一种实现方式,具有更高的可移植性和可扩展性。选择合适的技术可以有效地保护系统稳定运行并提高用户体验。
2024-12-21 19:41:08
943
2
原创 使用Redis实现限流
在分布式系统中,限流是保护服务的重要手段之一。通过限流,可以防止接口被恶意刷请求或突发流量压垮,从而保证系统的稳定性。Redis是一个高性能的键值存储工具,因其高效的读写性能和丰富的数据结构,被广泛用于限流场景。本文将介绍三种使用Redis实现限流的方式,并通过代码示例说明其实现原理和应用场景。限流算法的核心目标是控制资源的访问速率,以防止系统过载。在不同的业务场景下,限流的需求和实现方式也有所不同。例如,在Web服务中,限流可以用于控制用户请求的频率,以防止服务被滥用;
2024-12-20 13:53:53
1545
原创 ThreadLocal类详解
类是Java提供的一种线程局部存储,它为每个使用该变量的线程提供一个独立的变量副本。这意味着,每个线程可以访问自己内部的变量,而不会和其他线程的变量冲突。实例通常被声明为类型。总结来说,不是为了解决多线程访问共享变量的问题,而是为每个线程创建一个单独的变量副本,提供保持对象的方法和避免参数传递的复杂性。使用,建议用static。
2024-12-19 20:13:35
1043
原创 状态码详解
HTTP状态码是HTTP协议中的重要组成部分,它们为客户端和服务器之间的通信提供了标准化的状态反馈。了解和正确使用这些状态码,能够帮助开发者构建更加健壮和用户友好的网络应用。希望本文能够帮助您更好地理解和使用HTTP状态码。
2024-12-19 19:45:35
1086
原创 CPU使用率飙升至100%的诊断与解决方案
CPU使用率飙升至100%是一个复杂的问题,需要从多个角度进行分析和解决。通过理解导致CPU使用率飙升的原因,并采取相应的预防和解决措施,我们可以确保系统的稳定性和性能。希望本文提供的信息和代码示例能够帮助您快速定位和解决CPU使用率飙升的问题。如果您需要进一步的帮助或有其他问题,请随时告知。
2024-12-18 13:21:43
5022
原创 八大设计模式
设计模式是软件设计中的重要工具,它们可以帮助我们解决许多常见的问题。通过这篇文章,我们探讨了8种常用的设计模式,包括它们的基本概念、代码实现以及在JDK和Spring框架中的应用。希望这篇文章能够帮助您更好地理解和应用这些模式。如果您有任何疑问或想要进一步讨论,请随时在评论区分享您的想法。
2024-12-17 20:12:00
800
1
原创 设计模式之工厂模式
工厂模式属于创建型设计模式,它用于解耦对象的创建和使用。通常情况下,我们创建对象时需要使用new操作符,但是使用new操作符创建对象会使代码具有耦合性。工厂模式通过提供一个公共的接口,使得我们可以在不暴露对象创建逻辑的情况下创建对象。简单工厂模式是一种创建型设计模式,它提供了一个静态方法(或其他静态机制)来封装对象的创建过程,客户端只需要传入相应的参数,就可以获取到所需要的对象实例,而无需关心具体的创建细节。定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2024-12-16 15:50:32
949
4
图书管理系统( Spring+Spring MVC+JdbcTemplate)
2025-01-02
基于SpringBoot的前后端分离的电影购票系统
2025-01-01
一个Vue+Express+Mysql的电影售票项目
2025-01-01
宠物医院商城系统后台(基于SpringBoot+Vue前后端分离)
2025-01-01
基于FastAPI的房屋租赁系统
2024-12-31
基于ssm的房屋租赁管理系统
2024-12-31
汽车租赁系统 carRental
2024-12-31
员工管理系统(SpringBoot+Mybatis+Thymeleaf)
2024-12-31
招聘小程序SpringBoot2+Uniapp+Vue2
2024-12-30
房屋租赁系统,基于主流框架 SSM 的实战项目
2024-12-29
基于ssm的房屋租赁管理系统
2024-12-29
基于Java+Springboot的OA办公自动化人事管理系统
2024-12-28
基于python的酒店客房管理系统网站
2024-12-28
SSM-HTML5酒店预订宾馆客房入住管理系统
2024-12-28
基于Java的酒店预订系统
2024-12-28
bookstore电商书城系统
2024-12-27
JSP基于SSM小区物业管理系统
2024-12-27
Java外卖项目(瑞吉外卖项目的扩展)
2024-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人