自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 serialVersionUID 的作用

2024-10-10 17:05:50 91

原创 有个qps很高的接口 如何实现高效查询,怎么去优化

使用缓存(如Redis、Memcached)来存储热点数据或查询结果,减少对数据库的访问。使用分布式缓存(如Redis Cluster)来支持更大的数据量和更高的并发访问。实施读写分离架构,将查询操作和更新操作分离到不同的数据库服务器上。优化SQL查询语句,避免使用SELECT *,只查询需要的列。使用线程池或连接池来管理资源,减少频繁创建和销毁资源的开销。合理设计缓存键和缓存失效策略,确保缓存的有效性和准确性。将非核心逻辑的查询操作异步化,减少对主处理流程的阻塞。

2024-08-23 14:50:19 269

原创 设计一个登录系统时,分布式如何保证

分布式系统的登录功能需要处理用户认证、授权、会话管理等方面,并且要在多个服务器或服务实例之间保持一致。通过集中认证、分布式会话管理、负载均衡、安全措施、高可用性设计、性能优化和监控管理,可以创建一个健壮且高效的登录系统。在分布式环境中,用户的会话状态应在所有应用实例间同步,以避免登录状态丢失或不一致的问题。对于一些不需要立即处理的操作(如日志记录、统计分析),可以使用异步处理机制(如消息队列)来避免阻塞主登录流程。使用高可用的数据库解决方案,如主从复制、分片、自动故障转移等,确保用户数据的可靠性和可用性。

2024-08-22 23:01:55 540 1

原创 利用java设计模式的思维优化代码

在Java开发中,设计模式提供了一套解决常见软件设计问题的成熟方案。通过合理应用设计模式,可以提高代码的可维护性、可读性和扩展性。以下是几个常用设计模式的示例,说明如何利用设计模式思维来优化代码。

2024-08-21 15:26:20 864

原创 如何提升 RocketMQ 顺序消费性能?

综上所述,提升RocketMQ顺序消费性能需要从消息发送、消费者配置、消息处理逻辑、锁机制、监控与调优以及网络、硬件和软件等多个方面进行综合优化。根据具体的业务场景和技术栈选择合适的优化策略,并持续监控和调整以达到最佳性能。提升RocketMQ顺序消费性能,可以从多个方面进行优化。

2024-08-20 23:24:17 505

原创 内存只有一个g,但是有10g的数据,怎么找出数据的前10个

假设你有一组数据 [5, 12, 3, 8, 15, 7, 19, 2, 10, 6, 20, 1, 14],我们要找出其中的前10个最大值。堆中的10个元素 [5, 6, 7, 8, 15, 14, 19, 12, 10, 20] 就是原始数据中的前10个最大值。最终堆:[5, 6, 7, 8, 15, 14, 19, 12, 10, 20]堆:[3, 6, 5, 8, 15, 7, 19, 12, 10, 20]堆:[2, 3, 5, 6, 15, 7, 19, 12, 10, 8]

2024-08-13 16:40:30 1095 1

原创 java面试题:CPU飙高问题如何排查

在Java面试中,关于CPU飙高问题的排查是一个常见的考点。

2024-08-12 21:26:37 664

原创 Redis主从之间如何同步

之后,主服务器新增了 key3:value3 ,它会将这个写命令发送给从服务器,从服务器执行后也拥有了 key3:value3 ,从而实现数据同步。当从服务器发起同步请求时,主服务器先进行 bgsave 生成 RDB 快照,包含这两个键值对,发送给从服务器。从服务器加载后,与主服务器数据一致。需要注意的是,Redis 主从同步可能会因为网络延迟、主从服务器故障等原因出现数据不一致的情况,需要合理配置和监控以确保数据的可靠性和一致性。在完成全量同步之后,主从服务器进入增量同步阶段。

2024-08-11 16:35:29 323

原创 linux常用命令

示例:tar -czvf archive.tar.gz /path/to/dir,tar -xzvf archive.tar.gz。常用选项:-c(创建),-x(解压),-v(显示过程),-f(指定文件),-z(gzip压缩)。示例:head -n 10 file.txt,tail -n 10 file.txt。常用选项:-l(详细信息),-a(包括隐藏文件),-h(人类可读的文件大小)。常用选项:-r(递归),-i(忽略大小写),-v(取反匹配)。

2024-08-10 21:29:16 600

原创 ThreadLocal的使用场景是什么

ThreadLocal 是 Java 中用于实现线程局部变量的工具,它提供了每个线程独立的变量副本,使得不同线程对该变量的操作不会相互干扰。

2024-08-10 15:19:13 291

原创 RocketMQ怎么对文件进行读写的?

RocketMQ 通过 CommitLog 和 ConsumeQueue 实现了对消息的存储和索引管理,并通过 MappedFile 类结合内存映射技术,提升了文件的读写性能。顺序写入、内存映射、刷盘机制等技术使得 RocketMQ 在处理海量消息时既能保证高效性,也能确保数据的持久性和可靠性。

2024-08-09 23:46:53 823

原创 BeanFactory 和FactoryBean的区别

BeanFactory 是一个核心接口,负责管理 Bean 的生命周期和提供 Bean 实例,是 Spring 容器的基础。FactoryBean 是用于创建复杂 Bean 的工厂类接口,通过它可以自定义 Bean 的实例化逻辑。

2024-08-09 22:12:18 314

原创 spring事务失效场景

如果事务性方法所在的类没有被 Spring 容器管理(即没有通过 Spring 的 @Component, @Service 等注解标记或通过 XML 配置定义),事务管理将不会生效。Spring 提供了多种事务传播行为(如 REQUIRED, REQUIRES_NEW, NESTED 等),不正确的配置可能会导致事务管理行为不符合预期,进而导致事务失效。@Async 注解通常用于异步执行的方法,这些方法运行在独立的线程中,事务可能无法传播到这些线程,导致事务失效。必须确保使用正确的事务管理器。

2024-08-09 19:05:01 534

原创 Spring用了哪些设计模式?

这些类定义了对数据库操作的算法骨架,而将一些具体的步骤(如SQL语句的编写)延迟到子类中实现。由于不同的对象可能有不同的方法签名,而AOP需要在目标方法执行前后添加额外的行为,因此需要通过适配器来将不同的方法签名统一起来。:观察者模式是一种行为型模式,用于建立一种对象与对象之间的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。以上设计模式在Spring中的应用,不仅提高了Spring框架的灵活性和可扩展性,也为开发者提供了丰富的功能和便捷的编程方式。

2024-08-08 19:01:46 1185 1

原创 Spring的IOC如何实现的

2024-08-07 16:10:56 280

原创 为什么oceanbase分区后查询效率能提高

分区将数据按照特定的规则划分到不同的分区中。当查询只涉及特定分区的数据时,可以快速定位到相关分区,减少了需要扫描的数据量。例如,如果按照时间分区,查询某个时间段的数据时,只需扫描对应的时间分区,而不必扫描整个表。比如,一个大表按照地区分区,那么可以为每个地区的分区创建针对性的索引,提高查询该地区数据的速度。在并发操作时,不同分区的数据可以独立地进行锁定和处理,减少了锁的竞争,提高了并发查询的性能。假设一个表被分区为多个部分,不同的事务在操作不同分区的数据时,相互之间的锁冲突减少。

2024-08-07 12:33:38 592

原创 内存泄漏怎么排查

对于某些缓存或临时对象,可以使用Java中的WeakReference或SoftReference,允许垃圾回收器在内存不足时回收这些对象。2. 分析GC日志: 检查GC日志中是否有频繁的Full GC,如果Full GC频繁发生且内存回收效果不明显,可能存在内存泄漏。1.VisualVM: Java开发中常用的监控和分析工具,可以监控堆内存的使用情况,生成heap dump文件。2.分析Heap Dump: 使用MAT工具打开heap dump文件,分析对象的引用关系,找出可能的泄漏点。

2024-08-07 12:30:18 744

原创 Java基础——方法引用

方法引用(Method References)是一种语法糖,它本质上就是 Lambda 表达式,我们知道Lambda表达式是函数式接口的实例,所以说方法引用也是函数式接口的实例。Tips:什么是语法糖?语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

2024-05-29 20:32:24 210

原创 Java基础——Optional

Optional 类主要解决的问题是臭名昭著的空指针异常NPE(NullPointerException)

2024-05-28 19:02:30 414

原创 Java基础——序列化

ArrayList 中存储数据的数组 elementData 是用 transient 修饰的,因为这个数组是动态扩展的,并不是所有的空间都被使用,因此就不需要所有的内容都被序列化。通过重写序列化和反序列化方法,使得可以只序列化数组中有内容的那部分数据。序列化的类需要实现 Serializable 接口,它只是一个标准,没有任何方法需要实现,但是如果不去实现它的话而进行序列化,会抛出异常。不会对静态变量进行序列化,因为序列化只是保存对象的状态,静态变量属于类的状态。

2024-05-28 18:57:34 320

原创 Session、Cookie和Token的主要区别

cookie是由Web服务器保存在用户浏览器上的小文件(key-value格式),包含用户相关的信息。客户端向服务器发起请求,如果服务器需要记录该用户状态,就使用response 向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie, 以此来辨认用户身份。Cookie 可以设置过期时间,过期后浏览器会自动删除。

2024-05-22 16:08:34 1261

原创 基于Token的身份验证流程

用户首次登录,将输入的账号和密码提交给服务器。服务器对输入内容进行校验,若账号和密码匹配则验证通过,登录成功。服务器会生成一个Token(如JWT),这个Token包含了用户的身份信息、有效期等,并且会被签名以保证其完整性和真实性。然后服务器将这个Token返回给客户端。客户端拿到返回的Token后,将其保存在本地(如cookie/localStorage)。作为公共参数,以后每次请求服务器时都携带该Token(通常放在HTTP请求的Header中,如Authorization字段),提交给服务器进行

2024-05-22 15:57:11 855

原创 Java并发总结

由上图可以看出:线程创建之后它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这时候处于 READY(可运行) 状态。可运行状态的线程获得了 CPU 时间片(timeslice)后就处于 RUNNING(运行) 状态。当线程执行 wait()方法之后,线程进入 WAITING(等待) 状态。进入等待状态的线程需要依靠其他线程的通知才能够返回到运行状态TIMED_WAITING(超时等待) 状态相当于在等待状态的基础上增加了超时限制,比如通过 sleep(long milli

2024-05-20 16:07:10 260

原创 java集合注意事项

2024-05-20 14:56:03 246

原创 Java基础——异常

捕捉错误的理想时机是在编译时,然后并不是所有的错误都可以在编译的时候发现,在运行的时候发生不正常的情况。在Java中采用类的形式对异常问题进行描述和封装对象。对比Exception和ErrorException 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

2024-05-19 23:28:26 667

原创 Java基础——类

创建了Student类的实例对象,同时把Student的对象赋值给变量s,s实际上是一个当前对象在堆内存上的引用,s被存放在栈内存中,指向实际的student的对象,而实际上Student的对象是存储在堆内存中的。当一个对象被创建后,对象保存在堆内存中,Java程序不允许直接访问堆内存的对象,不管是数组还是对象,当程序访问引用变量的成员值或者方法时,实际上是访问引用变量的所指向的数组或者对象的成员变量或者方法。2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;

2024-05-19 23:18:08 573

原创 Java基础——字符串

基本数据类型、包装类 转成字符串,调用String类的public String valueOf(int n)可将int型转换为字符串相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(doubled)、valueOf(boolean b)可由参数的相应类型到字符串的转换。下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同字符串,而 s3 和 s4 是通过 s1.intern() 方法取得一个字符串引用。

2024-05-17 19:09:52 1071

原创 Java基础——数据类型

Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。

2024-05-17 17:58:14 302

原创 变量和常量

标识符就是为程序代码中的变量,常量,方法,类,接口等指定的含有一定特殊含义的名称。跟我们世界万物的所拥有的名称或者我们每个人的姓名类型。标识符可以是任意的顺序的大小写字母、数字、下划线和美元符号组成,但是标识符首字母不能以数字开头。

2024-05-17 16:51:52 528

原创 在 Kubernetes 中应对 OOM:Java 应用程序

在Java应用程序领域,OutOfMemoryError(OOM)问题是一个挑战,当应用程序耗尽其分配的内存时会发生。传统上,在处理标准Java设置中的OOM时,该过程涉及触发堆转储 - 即应用程序在特定时间点的内存快照。这个诊断工具通过提供应用程序内存使用情况的状态来帮助开发人员准确定位与内存相关的问题。在Kubernetes中,当Java应用程序遇到OOM时,平台会启动重新启动以保持运行的顺利进行。与传统设置不同,在那里OOM可能导致完全关闭,Kubernetes会自动恢复,确保持续可用性。

2024-02-21 15:17:53 1089

原创 MySQL设计开发&使用规范

【强制】业务中列值选择性很少的字段,如:status、is_delete字段类型使用tinytint(1)。虽然timestamp仅占用4字节,但是范围为1970-01-01 00:00:00:01到2038-01-01 00:00:00。:varchar规约varchar(32)、varchar(64)、varchar(255)【建议】存储金钱的字段,建议用int单位’分’比如100元,存储为10000分。【建议】使用varchar(20)存储手机号,不要使用整数。(财务金钱字段除外,可能为负值)

2024-01-27 23:33:19 1018

原创 在 Spring Boot 中使用事务

您可以使用 @Transactional 注解的 rollbackFor 或 noRollbackFor 属性来自定义回滚行为。@Service// ...在这个例子中,我们指定 RuntimeException 不应触发回滚。这在您希望在事务内保留更改,即使发生错误时也很有用。

2024-01-24 17:41:48 1550

原创 OceanBase使用规范

所有使用OceanBase的数据库。降低故障率和维护成本。

2024-01-21 22:55:42 1645

原创 Java多线程基础:虚拟线程与平台线程解析

虚拟线程成为一个颠覆性的变革者,提供了轻量级、高效的并发性,与平台线程资源密集型的特性形成鲜明对比。它们通过在最小资源开销下使大量并发任务成为可能,从而改变了Java处理多线程的方式,简化了编程模型并增强了应用程序的可扩展性。然而,在这个新背景下对ThreadLocal的使用的复杂性突显了需要谨慎考虑的必要性。虽然ThreadLocal在传统线程中保持特定于线程的数据方面仍然是一个强大的工具,但在虚拟线程中,它的应用变得更加复杂,需要替代策略来进行状态和上下文管理。

2024-01-16 20:25:46 1208

原创 使用注解@GrpcService在Spring Boot 中开始使用gRPC

在现代微服务架构中,不同服务之间高效、健壮和可扩展的通信至关重要。gRPC是由Google开发的高性能开源框架,使客户端和服务器应用能够无缝、高效地进行通信。本文将指导您通过使用@GrpcService注解将gRPC集成到Spring Boot应用程序中的步骤。在微服务和分布式系统的世界中,高效和可扩展的通信机制的需求比以往任何时候都更为关键。作为开发人员和架构师寻找强大而有效的方式来促进服务间通信的时候,他们经常在REST和gRPC之间进行权衡。

2024-01-15 18:00:15 2014

原创 OceanBase与MySQL兼容性对比

OB针对于高并发和大数据更有优势,公司的dba让我们把数据从mysql迁移到OceanBase了,这里记录一下OceanBase的MySQL模式。OceanBase的MySQL模式兼容MySQL5.7的绝大部分功能和语法,兼容MySQL5.7版本的全量以及8.0版本的部分JSON函数。

2024-01-13 19:29:03 2078

原创 使用OceanBase必知的十件事

使用MySQL JDBC驱动连接OceanBase时,版本必须<=8.0.25,大于该版本可能会出现奇奇怪怪的问题分区表创建:3年内单表行数可能超过10亿行或者单表容量超过200GB,推荐创建分区表;分区表在表创建的时候需要指定,后续不支持改造,也不下支持分区数量、分区类型、分区键值的在线调整;建分区表时,表上的每一个主键、唯一键所对应的字段里都必须至少有一个字段包含在表的分区键字段中;不建议使用全局索引(删除分区的时候会重建全局索引,期间全局索引不可用)对于分区表,为了保障业务sql的访问

2024-01-13 18:30:08 633

原创 Springboot中的@DependsOn注解

在我的最近的Spring Boot项目中,我遇到了涉及两个Bean的情况,Bean1和Bean2。在初始化过程中,我需要Bean2依赖于Bean1。其中Spring中的注解,允许我指定在创建Bean2之前,Spring应确保Bean1已初始化。

2024-01-12 15:34:21 856

原创 在Java中正确使用Optional

为了使代码更简洁清晰,我们可以使用ifPresent()方法,该方法接受一个Consumer或一个Runnable,或者两者都接受。让我们看一下具体的用法。但是,只有在正确使用的情况下,Optional对象才是安全的。在上面的示例中,只有当wallet不为null时,即存在时,才将money添加到savings中。使用Optional.empty(),我们可以创建一个不包含任何类型的空的optional对象。现在让我们看一下Optional类中的不同方法,我们可以利用这些方法来编写促进空安全的清晰代码。

2024-01-12 09:25:40 1036

原创 Java 内存泄漏:原因、检测和预防

尽管 Java 语言具有强大的自动垃圾回收功能,但 Java 中的内存泄漏对于程序猿来说仍然是一个具有挑战性的问题。当应用程序不再需要对象但仍从其他对象引用对象时,就会发生这些泄漏,从而阻止垃圾收集器回收其内存。随着时间的推移,这可能会导致应用程序性能显着下降,甚至导致应用程序因OutOfMemoryError. 这篇文章旨在深入研究 Java 内存泄漏的细微差别,探索其检测方法和预防策略。

2024-01-11 11:01:04 1873

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除