自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(129)
  • 问答 (1)
  • 收藏
  • 关注

原创 MinIo的简单使用

它主要被设计来处理大量的非结构化数据,如照片、视频、日志文件、备份和容器/虚拟机镜像等。MiIO具有高可用性、高扩展性、且性能接近线性增长等特点。在 Spring Boot 项目中调用 MinIO,你需要先配置 MinIO 的相关信息,具体步骤如下。其中“d:xxx”为数据存储目录,可以自定义,但不要有中文。然后在yml中进行配置 值为我们上面创建的。我们需要将minIo实例注入到ioc容器中。首先我们需要新建一个桶 名字可以自定义。然后我们需要生成一个key。

2024-11-01 15:53:15 1460

原创 OpenFegin

自定义超时重试机制的实现分为以下两步:1.自定义超时重试类(实现Retryer接口,并重写continueOrPropagate方法)。2.设置配置文件。1.固定间隔重试:每次重试之间的时间间隔固定不变,例如每次重试之间相隔1秒。2.指数重试:每次重试之间的时间间隔按指数递增。例如,初始间隔为1秒,每次重试后加倍,即第一次1秒,第二次2秒,第三次4秒,以此类推。3.随机间隔重试:每次重试之间的时间间隔是随机的,通过引入随机性来防止多个失败请求同时发生。例如,每。

2024-10-08 22:17:40 818

原创 nacos注册中心

注册中心是微服务架构中的一个重要组件,用于服务的注册和发现主要作用为1.服务注册:服务实例启动时将自身信息注册到注册中心,包括服务名称、地址端口等2**.服务发现**:消费者向注册中心查询服务,并获取服务实例信息来访问服务3.服务健康检查: 注册中心定期检查服务实例监控状况,过滤不健康的实例4.服务路由: 提供服务的路由与负载均衡功能5.服务监控:统计服务调用次数,时长等,用于监控服务状态6.服务更新:当服务实例信息变更时,向注册中心发送更新信息通知。

2024-10-02 17:48:11 1157

原创 解决mp框架无法更新null值的问题

在使用mp框架过程中可能会遇到需要将某个字段为null的情况 但是mp自带的方法例如update默认是不支持更新null值的。

2024-09-14 11:08:58 310

原创 自定义注解+反射实现需求

接到一个需求一个员工有诸多信息 现在要记录修改时哪些信息被修改了并需要记录这些信息在一个字段中,同时后台又需要支持按照修改内容进行多选搜索。要记录每一个字段是否修改,按照常规写法会产生大量ifelse 同时代码可读性差 并且代码也不好维护 所以我使用了自定义注解+反射来解决问题。然后需要将源对象要和修改后的对象进行比对 需要遍历对象 这里我用到了反射。首先写一个自定义注解来标记字段的描述。

2024-08-06 15:28:44 357 1

原创 springboot整合极光推送与xxl-job

注意xxl-job-admin与xxl-job-executor-samples中的xxl.job.accessToken一定要一致否则注册会失败。其中代码中已经编写好了许多Handler类 如果自己想增加一些任务自行修改编写便可。通过访问http://localhost:8080/xxl-job-admin/在里面配置执行器与任务 便可正常使用。拉取好后找到其中的sql文件并执行。6.编写xxl-job定时任务。首先去git上拉取大佬的代码。4.封装第三方API。7.在平台中添加任务。

2024-05-06 18:41:14 444 1

原创 新知识-Tuple元组的使用

这次碰到一个需求,大致需要把表A中的字段1和字段2作为共同的表去查表B,并且一次性需要查多条,一开始是想的是根据字段1和字段2去查然后循环多次,但是这样反复访问数据库,性能太差,在导师指导下学会了一个新的方法-使用tuple元组这个元组真的非常有用,假如下次是要根据三个或者多个元素查询那么就可以创建tuple3或者tuplen来完成需求了。

2023-12-01 18:06:31 534

原创 网关问题的解决

今天在测试代码的时候发生了一个”灵异事件“

2023-11-23 16:19:13 520

原创 nacos的部署与配置中心

在集群模式下,所有的实例共享相同的数据,数据变更会自动同步到所有的实例中,客户端可以随机选择任意一个实例进行注册和发现服务。在多集群模式中,可以选择将不同的Nacos 实例组成多个相互独立的集群,每个集群可以拥有自己独立的配置和注册中心,并可以跨集群进行服务注册和发现。1.命名空间:Nacos基于命名空间(Namespace)帮助用户逻辑隔离多个命名空间,这可以帮助用户更好的管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置〈如数据库数据源)可以定义不同的值。

2023-11-06 14:39:43 759

原创 总结-关于stream流的利用

在工作中遇到了一个需求,很费劲的写了出来,但是导师看了直摇头,一顿操作帮我修改了,修改之后代码非常简洁,现对这部分做一个回顾总结。以后对这种集合还有字符串的操作 可以优先考虑使用到stream流来进行操作。

2023-11-03 13:53:12 158

原创 MapStruct的用法

最近工作中发现公司代码中频繁用到MapStruct,了解之后发现特别好用,特此记录一下@Mapper。

2023-11-02 19:18:57 295

原创 谈一下对注解的理解?注解起到了什么作用?

3.实现代码生成和处理:注解可以用于实现代码生成和处理,例如通过注解生成代码、进行静态分析、实现自定义的编译时检查等。1.提供额外的配置信息:注解可以用于为代码提供额外的配置信息,例如配置数据库连接、事务管理等。2.提供说明和文档:注解可以用于为代码提供说明和文档,帮助其他开发人员理解代码的用途和行为。谈一下对注解的理解?注解起到了什么作用?

2023-09-18 10:22:40 368

原创 二级索引为何存主键不存数据的内存地址

3.支持覆盖索引查询:由于二级索引存储的是主键值,而不是数据的内存地址,所以在某些情况下,可以通过二级索引直接获取到查询所需的数据,而不需要再去访问主键索引或数据页,从而提高查询效率。2.索引更新更高效:当数据行发生更新时,只需要更新对应的二级索引中的主键值,而不需要更新存储数据的内存地址,从而提高了索引的更新效率。1.索引大小更小:存储主键值而不是数据的内存地址可以减小索引的大小,节省存储空间。

2023-09-04 19:13:54 329

原创 不用 ThreadLocal 你会想用什么方式存用户信息

每个线程可以通过自己的标识(如线程 ID)来访问和修改自己的用户信息。使用自定义的上下文对象:可以创建一个自定义的上下文对象,将用户信息存储在该对象中。每个线程可以通过获取自己的上下文对象来获取和修改自己的用户信息。使用全局变量:将用户信息存储在全局变量中,通过访问全局变量来获取用户信息。需要注意的是,全局变量需要进行适当的同步控制,以确保线程安全。使用参数传递:将用户信息作为参数传递给需要使用的方法或函数。这样可以确保每个方法或函数都有自己的用户信息副本,避免了线程安全问题。

2023-08-29 09:53:52 145

原创 hashmap的扩容算法

在进行扩容操作时,HashMap会重新计算每个键值对的哈希值,并根据新的容量重新确定它们在新数组中的位置。因此,在设计HashMap时,需要合理选择初始容量和负载因子,以减少扩容操作的频率,提高HashMap的性能。HashMap的扩容算法是为了在HashMap中存储的键值对数量达到一定阈值时,自动扩容HashMap的容量,以保持较低的负载因子,提高HashMap的性能。遍历原数组中的每个桶(bucket),将每个桶中的键值对重新计算哈希值,并放入新数组的对应位置。

2023-08-28 19:18:55 332

原创 java网络编程

正常情况下是客户端和服务端直接进行交互的 但是在这个时候有一个中间人在客户端和服务端之间盗取和篡改双方通讯的内容Https使用CA证书和加密来解决中间人攻击。

2023-08-25 08:58:29 135

原创 1000亿数据,无限制的内存, 插入到hashmap中, 怎么快速、安全的插入

5.考虑多线程下hashmap的线程安全问题,使用加锁或者使用ConcurrentHashMap。3.考虑hashmap的初始容量和负载因子,设置一个合理的值。1.分批插入 可以将数据分成不同的批次 不要一次插入。4.选择合适的hash函数,减少哈希碰撞的次数。2.使用多个线程并行插入,充分利用资源。

2023-08-18 16:07:02 513

原创 HashMap和TreeMap的区别

1.hashmap底层是通过数组加链表和红黑树实现的而treemap就是纯红黑树实现。2.treemap中的键值对是有序的而hashmap是无序的。3.treemap的crud性能要比hashmap高。4.treemap占用的空间资源要比hashmap多。

2023-08-18 15:51:34 100

原创 mysql的char和varchar的区别

存储方式:char是固定长度的字符类型,它会根据定义的长度存储固定数量的字符,不足的部分会使用空格进行填充。而varchar是可变长度的字符类型,它会根据实际存储的字符数量来动态分配存储空间,不会浪费额外的空间。存储空间:由于char是固定长度的,所以它的存储空间是固定的,不受实际存储的字符数量影响。而varchar的存储空间是根据实际存储的字符数量来动态分配的,所以它的存储空间通常会比char更节省。索引使用:char和varchar都可以被索引,但是由于char是固定长度的,所以在使用索引时效果更好。

2023-08-18 09:05:35 399

原创 即然利用反射机制可以破坏单例模式,有什么方法避免呢?

私有构造方法中添加防止多次实例化的逻辑:在单例类的私有构造方法中,可以添加逻辑来检查是否已经存在实例,如果存在则抛出异常或返回已有的实例。这样即使通过反射创建了新的实例,也能在构造方法中进行拦截。使用静态内部类实现单例:静态内部类在类加载时被初始化,且只会被加载一次,因此可以保证单例的唯一性。通过静态内部类实现的单例模式不会受到反射攻击的影响。使用枚举实现单例:枚举类型的实例是唯一的,且在反射攻击下是安全的。可以使用枚举来实现单例模式,这样就不会受到反射攻击的影响。

2023-08-10 20:21:07 1399

原创 扩容为什么每次都是扩大2倍,或者说为什么容量是2的幂次

内存利用率高:容量选择为2的幂次时,可以通过位运算来计算哈希桶的索引,而不需要使用取模运算。此外,容量选择为2的幂次时,哈希桶的数量是固定的,不会出现浪费内存的情况。均匀分布:哈希表的性能与哈希桶的负载因子(即每个桶中元素的平均数量)有关。当容量选择为2的幂次时,哈希函数的取模运算可以简化为位运算(与操作),这样可以保证哈希桶的索引在扩容前后的分布是均匀的,减少了哈希冲突的概率。效率高:将容量扩大为原来的两倍,可以通过简单的位运算(左移1位)来计算新的哈希桶的索引,而不需要进行复杂的计算。

2023-08-10 19:10:16 303

原创 在哪些场景下索引会变得越来越慢

2.锁竞争,当多个并发操作同时对同一个索引进行读取或更新时,可能会发生锁竞争,导致索引操作的等待时间增加,从而降低了索引的性能。3. 查询复杂度增加,当查询的复杂度增加时,如涉及多个表的连接、子查询或复杂的条件筛选,索引的使用效率可能会下降,导致查询变慢。4. 索引失效,如果索引的选择不当或者数据分布不均匀,可能会导致索引失效,即数据库无法有效地使用索引来加速查询,从而导致查询变慢。1.索引过多,如果数据库中存在过多的索引,每次更新数据时都需要更新多个索引,这会增加索引维护的开销,导致索引操作变慢。

2023-08-10 16:45:33 459

原创 redis和mysql中的数据以哪个为准,并且会不会存在一致性的问题

异步更新:在更新MySQL数据后,异步更新Redis中的数据,可以使用消息队列等机制来实现异步更新,提高系统的性能和可靠性。数据过期策略:设置Redis中缓存数据的过期时间,确保缓存数据不会过期太久,从而减少数据不一致的可能性。监控和恢复机制:定期监控Redis和MySQL中数据的一致性,并在发现数据不一致时进行修复。读写双写:在更新MySQL数据时,同时更新Redis中的数据,确保数据的一致性。

2023-08-10 16:10:56 415

原创 为什么选择HashMap

这样可以保持HashMap的平均负载因子较低,减少哈希冲突的概率,提高性能。4.线程不安全:HashMap是非线程安全的,这意味着在多线程环境下使用HashMap时,需要额外的同步措施来保证线程安全。但正因为它是非线程安全的,HashMap的性能相对较高,适用于单线程或者多线程读操作远远多于写操作的场景。2.使用灵活,HashMap可以存储键值对,其中键和值可以是任意类型的对象。1.速度快,hashmap插入、查找和删除操作的时间复杂度都是常数级别的(O(1)),在大多数情况下具有非常高的执行效率。

2023-08-09 15:00:13 177

原创 协程和线程的区别

线程的调度是由操作系统决定的,它可以在不同的核心上并行执行。总的来说,线程适合于并发执行多个任务,可以利用多核处理器的优势,但需要更多的内存和开销。协程适合于处理大量的轻量级任务,可以减少内存消耗和切换开销,但无法利用多核处理器的优势。而协程是协作式的,只有一个协程在执行,其他协程需要等待当前协程主动释放控制权才能执行。切换开销:线程的切换需要保存和恢复线程的上下文,这涉及到内核态和用户态之间的切换,开销较大。内存消耗:线程需要独立的堆栈空间,每个线程都有自己的堆栈,因此线程的内存消耗较大。

2023-08-08 15:52:29 376

原创 线上获取redis的key有什么方式

监控工具:可以使用Redis的监控工具(如RedisInsight、Redis Desktop Manager等)来查看Redis中的key。这些工具提供了可视化界面,可以方便地浏览和搜索Redis中的key,并提供了一些额外的功能,如过滤、排序等。Redis的客户端库:可以使用Redis的客户端库(如Jedis、redis-py等)在应用程序中编写代码来获取Redis的key。Redis命令行工具:可以使用Redis的命令行工具(如redis-cli)连接到Redis服务器,并使用。

2023-08-08 15:30:12 551

原创 pipeline

但需要注意的是,Pipeline并不保证原子性,即在执行过程中可能会出现部分命令执行成功而部分命令执行失败的情况。在Redis中,Pipeline(管道)是一种用于批量执行多个命令的机制,可以减少客户端与服务器之间的网络往返次数,提高执行效率。添加命令到Pipeline:通过调用Pipeline对象的命令方法,将要执行的命令添加到Pipeline中。获取结果:执行完Pipeline后,可以通过遍历Pipeline对象的结果列表,获取每个命令的执行结果。执行Pipeline:通过调用Pipeline对象的。

2023-08-08 15:09:38 149

原创 进程什么时候会进入阻塞状态

等待I/O操作:当进程需要进行输入/输出操作,但是所需的数据还没有准备好或者输出设备还没有空闲时,进程会进入阻塞状态,等待I/O操作完成。等待进程间通信:当进程需要进行进程间通信,如等待消息、等待共享内存的写入等,但是所需的通信操作还没有完成时,进程会进入阻塞状态。等待资源:当进程需要访问共享资源,但是该资源已经被其他进程占用时,进程会进入阻塞状态,等待资源的释放。等待锁:当进程需要获取一个锁,但是该锁已经被其他进程持有时,进程会进入阻塞状态,等待锁的释放。

2023-08-07 19:05:18 1050

原创 undo log、redo log和bin log

1.undo log是一种用于撤销回退的日志,MYSQL会记录更新前的数据到undo log日志文件里面,当事务回滚或者数据库崩溃时,可以用undo log进行回退2.undo log在事务开始前产生,事务提交时并不会直接删除,而是会将对应的undo log放入删除列表中,后台有专门的线程purge thread进行回收处理。

2023-08-05 14:49:19 187

原创 什么是 WAL 技术?它有什么特点?

WAL技术的核心思想是在对数据库进行任何修改之前,先将相应的日志记录写入到持久化的日志文件中。先写日志,再写数据:在WAL技术中,对数据库的修改操作首先被写入到日志文件中,然后再将修改后的数据写入到磁盘。通过读取日志文件中的日志记录,可以将这些操作应用到数据库中,从而恢复到崩溃前的一致性状态。顺序写入的特性使得WAL技术在性能上具有优势,因为磁盘的顺序写入速度通常比随机写入速度更快。需要注意的是,WAL技术是一种通用的数据库事务日志技术,在不同的数据库管理系统中可能会有一些细微的差异。

2023-08-05 10:37:07 1083

原创 为什么要用ThreadLocal保存登录信息?有什么缺点和优点?

优点:缺点:

2023-08-04 20:51:05 1159

原创 Synchronized锁升级过程

自旋锁会假设在不久将来,当前的线程可以获得锁,因此虚拟机会让当前想要获取锁的线程做几个空循环(这也是称为自旋的原因),一般不会太久,可能是50个循环或100循环,在经过若干次循环后,如果得到锁,就顺利进入临界区。轻量级锁状态(轻量级锁):当多个线程竞争同一个锁时,偏向锁会升级为轻量级锁。在轻量级锁状态下,线程会尝试使用CAS(Compare and Swap)操作来获取锁,如果成功获取锁,则进入临界区执行代码。如果获取锁失败,表示有其他线程竞争锁,那么线程会膨胀为重量级锁。

2023-08-04 20:38:31 183

原创 索引下推的理解与举例

MySQL 5.6 引入的索引下推优化(index condition pushdown), 可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。先找到姓张的人然后进行回表查询看他是不是10,是则返回,而有了索引下推之后 他会同时判断是否姓张和年龄是否为10 同时满足才会进行回表查询。如果没有索引下推 当我们 使用。

2023-08-04 20:28:30 187

原创 覆盖索引的理解与举例

此时根据name会找到 主键id 此时只能返回id和name而不能返回password,这时就会回表查询找到对应的行消耗了性能,如果我们建立一个联合索引name,password 那么在找到name的同时也会找到passwode同时非聚簇索引叶子结点会存储主键id值这是就能直接返回这三个字段而不用进行回表查询,这样就提高了效率 ,但是如果我们再加入一个字段grade就会又需要回表查询了。覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

2023-08-04 20:26:58 282

原创 数据库索引失效的情况

5,如果mysql评估使用索引比全表更慢,则不使用索引,但是我们一般忽略这个问题因为一个是不稳定,二是不同版本下的优化器执行也不一样。6.类型转换:如果索引列存在类型转换,那么也不会走索引,比如某列为字符串类型,而查询的时候设置了 int 类型的值就会导致索引失效;4.如果使用or分割符,如果or前面的条件中的列有索引,后面的列没有索引,那么涉及到的索引都不会被用到。3.如果最索引字段使用模糊查询,如果是头部模糊索引将失效,如果是尾部模糊索引则正常。1.对添加了索引的字段进行函数运算。

2023-08-04 20:24:17 362

原创 InnoDB有哪些特性

事务支持:InnoDB支持ACID(原子性、一致性、隔离性和持久性)事务,可以保证数据的完整性和一致性。它使用多版本并发控制(MVCC)来实现事务的隔离性,支持读已提交和可重复读两种隔离级别。它支持多个事务同时读取同一表的不同行,同时也支持并发事务对同一表的不同行进行修改。自动崩溃恢复:InnoDB具有自动崩溃恢复的能力,可以在数据库异常关闭后自动进行恢复操作,保证数据的一致性。热备份:InnoDB支持在线热备份,可以在数据库运行的同时进行备份操作,减少对数据库的影响。

2023-08-04 14:11:32 650

原创 lock和synchronized有啥区别吗

锁的可中断性:synchronized在获取锁时,如果锁已被其他线程持有,当前线程会进入阻塞状态,直到获取到锁为止,无法被中断。而lock提供了可中断锁的特性,即在获取锁时,如果锁已被其他线程持有,当前线程可以选择中断等待,而不是一直等待下去。锁的公平性:synchronized是非公平锁,即多个线程竞争锁时,无法保证获取锁的顺序。获取锁的方式:synchronized是Java语言内置的关键字,可以直接在方法或代码块中使用,而lock是一个接口,需要通过实例化具体的锁对象来获取锁。

2023-08-04 09:45:07 98

原创 了解Java的锁么?可以详细说说么?你一般怎么用

与synchronized相比,ReentrantLock提供了更灵活的锁控制,可以实现更复杂的锁定行为。ReentrantLock还提供了公平锁和非公平锁的选择,以及可中断锁的特性。当一个线程进入synchronized代码块时,会尝试获取锁,如果锁已被其他线程持有,则该线程会被阻塞,直到获取到锁为止。synchronized关键字具有自动释放锁的特性,当线程执行完synchronized代码块或方法后,会自动释放锁。在实际使用中,我根据具体的需求和场景选择合适的锁机制。是的我了解Java的锁机制。

2023-08-04 09:43:37 100

原创 怎么设计线程池,怎么判断一个线程是否空闲,谁来判断?

线程池会根据任务队列的容量和线程池的大小来决定是否创建新的线程来执行任务,或者将任务放入队列等待执行。线程池会根据任务队列的状态来判断是否有空闲线程可用,如果有,则将任务分配给空闲线程执行。4.执行任务,线程池会自动从任务队列中取出任务,并将其分配给空闲的线程执行。线程池会根据任务的优先级和调度策略来决定任务的执行顺序。线程池的大小决定线程池中可以同时执行的线程的数量,任务队列的容量决定可以等待执行的线程数量。1.确定线程池,线程池的大小应该根据系统的处理能力和任务的类型来确定,避免线程过多或过少。

2023-08-02 12:30:02 782

原创 Java并发编程

当我们线程创建过多时,容易引发内存溢出,因此我们就有必要使用线程池的技术了。线程池(ThreadPool)将多个线程预先存储在一个“池子”内,当有任务出现时可以避免重新创建和销毁线程所带来性能开销,只需要从“池子”内取出相应的线程执行对应的任务即可。池化思想在计算机的应用也比较广泛,比如以下这些:内存池(Memory Pooling):预先申请内存,提升申请内存速度,减少内存碎片。连接池(Connection Pooling):预先申请数据库连接,提升申请连接的速度,降低系统的开销。

2023-07-30 10:03:54 514

空空如也

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

TA关注的人

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