![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
学习日记
文章平均质量分 83
book多得
努力努力再努力
展开
-
面试官:MySQL的七种日志
error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。原创 2024-03-11 10:35:49 · 1146 阅读 · 0 评论 -
Redis分段锁,如何设计?
一个分布式系统中,存在客户端多个用户,同时通过多个业务微服务,发起一个数据修改。如果没有分布式锁机制保证,在那多台机器上的多个服务可能进行并发修改操作,导致数据修改的不一致,出现脏读脏写,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。上图中,哪个客户端的服务抢占了分布式锁,就可以去扣减库存。其他服务没获取到分布式锁,就不进行后续操作。原创 2024-03-07 17:02:51 · 1372 阅读 · 1 评论 -
常见四种限流算法详解(附:javaDemo)
现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CDN、消息队列、多级缓存、异地多活。但是无论如何优化,终究由硬件的物理特性决定了我们系统性能的上限,如果强行接收所有请求,往往造成雪崩。这时候限流熔断就发挥作用了,限制请求数,快速失败,保证系统满负载又不超限。极致的优化,就是将硬件使用率提高到100%,但永远不会超过100%原创 2024-03-07 17:01:22 · 1092 阅读 · 1 评论 -
面试官:如何设计幂等性接口
什么是幂等性?所谓幂等性,就是一次操作和多次操作同一个资源,所产生的影响均与一次操作的影响相同。"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。原创 2024-02-20 09:43:59 · 962 阅读 · 0 评论 -
从底层理解MySQL-字符类型
MySQL中除了数值类型外,另一个用的比较多的就是字符类型了。字符类型有很多不同种类:VARCHAR,CHAR,BLOB,TEXT原创 2024-02-20 09:42:58 · 1081 阅读 · 0 评论 -
接口性能优化常见12式
本文将给小伙伴们分享一下接口优化的常用方案。原创 2024-01-25 17:27:53 · 1551 阅读 · 0 评论 -
面试官:请问泛型擦除、泛型上界、泛型下界、PECS原则 是什么?
泛型的本质是 类型参数化,解决类型爆炸的问题。所谓泛型是指将类型参数化,以达到代码复用提高软件开发工作效率的一种数据类型。原创 2024-01-25 17:26:55 · 874 阅读 · 1 评论 -
常用正则表达式,复制粘贴即用
校验密码强度校验中文由数字、英文字母、下划线组成的字符串 校验邮箱地址校验身份证号 校验日期校验金额校验手机号检查IE版本校验IP地址 校验URL 校验文件路径及扩展名 文件路径的正则表达式: 扩展名的正则表达式:提取Hex颜色值匹配HTML标签原创 2024-01-18 14:34:43 · 1123 阅读 · 0 评论 -
Guava:Throwables 异常工具
Guava Throwables 类Throwable 类,简化异常和错误的传播与检查。原创 2024-01-06 16:58:08 · 569 阅读 · 0 评论 -
Guava:Cache强大的本地缓存框架
Guava Cache 非常强大,它并没有后台任务线程异步的执行 load 或者 reload 方法,而是通过请求线程来执行相关操作。为了提升系统性能,我们可以从如下两个方面来处理 :配置 refresh < expire,减少大量线程阻塞的概率。采用异步刷新的策略,也就是线程异步加载数据,期间所有请求返回旧的缓存值。尽管如此,我们在使用这种方式时,依然需要考虑的缓存和数据库一致性问题。原创 2024-01-06 16:51:01 · 2282 阅读 · 0 评论 -
if-else太丑?策略模式则是杀鸡用牛刀?Map+函数式接口方法刚刚好!
Map+函数式接口 用上了Java8的新特性lambda表达式 判断条件放在key中 对应的业务逻辑放在value中这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑原创 2023-12-11 10:38:37 · 94 阅读 · 0 评论 -
Guava:常用功能,防止阁下重复造轮子
Guava 常用功能,防止阁下重复造轮子。原创 2023-10-12 11:32:07 · 161 阅读 · 0 评论 -
Springboot GET和POST请求的常用参数获取方式
可以在控制器方法的参数上使用@RequestParam注解来获取请求中的参数值。可以为@RequestParam注解的参数提供默认值,以处理参数缺失的情况。可以使用@RequestParam Map来获取所有的请求参数键值对。如果参数是作为路径的一部分传递的,可以使用@PathVariable注解来获取参数值。可以在控制器方法的参数列表中添加HttpServletRequest对象,然后从中获取请求参数。原创 2023-09-02 23:06:12 · 661 阅读 · 0 评论 -
BigDecimal百科全书
在需要精确的小数计算时再使用BigDecimal,BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。故一般精度的计算没必要使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的, 在进行每一次四则运算时,都会产生一个新的对象 ,所以在做加减乘除运算时要记得要保存操作后的值。原创 2023-08-30 23:10:57 · 320 阅读 · 0 评论 -
RocketMQ详解+实战+常见面试题
在发布-订阅模型中,消息的发送方称为发布者(Publisher),消息的接收方称为订阅者(Subscriber),服务端存放消息的容器称为主题(Topic)。生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,也就是说每条消息只能被一个消费者消费。总的来说,RocketMQ是一个功能强大的消息中间件系统,具备高吞吐量、可靠性、分布式支持和灵活的消息模型等特点,适用于构建可靠的分布式系统和实时数据处理系统。这是RocketMQ特有的一个功能。原创 2023-06-06 14:21:58 · 2646 阅读 · 0 评论 -
windows安装RocketMQ
输入:start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true。启动单机的消息队列服务比较简单,不需要写配置文件,只需要依次启动本机的NameServer和Broker即可。浏览器输入地址:http://127.0.0.1:8081/ ,并修改管理界面需要为简体中文。可以自己修改一下应用的端口,和rocketmqserver的ip和端口。进入bin目录下,双击启动mqnameserv.cmd。启动后窗口不要关闭;原创 2023-06-04 15:27:44 · 11448 阅读 · 10 评论 -
布隆过滤器
值得注意的是,4 这个 bit 位由于两个值的哈希函数都返回了这个 bit 位,因此它被覆盖了。目前我们知道布隆过滤器可以支持 add 和 isExist 操作,那么 delete 操作可以么,答案是不可以,例如上图中的 bit 位 4 被两个值共同覆盖的话,一旦你删除其中一个值例如 “tencent” 而将其置位 0,那么下次判断另一个值例如 “baidu” 是否存在的话,会直接返回 false,而实际上你并没有删除它。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。原创 2023-05-31 14:57:12 · 602 阅读 · 0 评论 -
ThreadLocal八股文
1. 为什么要⽤ ThreadLocal?答:为了解决并发编程时,公共资源数据安全问题。(也可使⽤锁的⽅式)并发编程是⼀项⾮常重要的技术,它让我们的程序变得更加⾼效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题JDK出现了很多技术⼿段,⽐如:使⽤或Lock,给访问公共资源的代码上锁,保证了代码的 原⼦性。原创 2023-05-15 14:37:05 · 600 阅读 · 1 评论 -
ReentrantLock 原理
ReentrantLock是Lock接⼝的默认实现,是⼀种独占锁。相对synchronized⽽⾔,ReentrantLock 提供了更多的操作⽅式以及更细粒度的加锁⽅式。主要特性:1.可重⼊。ReentrantLock是可重⼊锁,因为它会记录之前获得锁线程对象,保存在exclusiveOwenerThread变量中,当⼀个线程要获取锁时,会先判断当前线程是不是已经获取锁的线程。synchronized也是可重⼊锁。12。原创 2023-05-14 15:03:17 · 698 阅读 · 2 评论 -
HashMap
对于要求查询次数特别多,查询效率比较高同时插入和删除的次数比较少的情况下,通常会选择ArrayList,因为它的底层是通过数组实现的。对于插入和删除次数比较多同时在查询次数不多的情况下,通常会选择LinkedList,因为它的底层是通过链表实现的。但现在同时要求插入,删除,查询效率都很高的情况下我们该如何选择容器呢?那么就有一种新的容器叫HashMap,他里面既有数组结构,也有链表结构,所以可以弥补相互的缺点。而且HashMap主要用法是get()和put() 。原创 2023-04-28 15:11:56 · 1015 阅读 · 0 评论 -
JVM垃圾回收GC 详解(java1.8)
目录垃圾判断算法(你是不是垃圾?)引用计数法可达性算法对象的引用强引用软引用弱引用虚引用对象的自我救赎垃圾回收算法--分代标记清除算法复制算法标记整理法垃圾处理器最容易想到的一种方式是引用计数法,啥叫引用计数法,简单地说,就是对象被引用一次,在它的对象头上加一次引用次数,如果没有被引用(引用次数为 0),则此对象可回收以上代码 ref 引用了右侧定义的对象,所以引用次数是 1 如果在上述代码后面添加一个 ref = null,则由于对象没被引用,引用次数置为 0,由于不被任何变量引用,此时即被回收,原创 2023-04-22 17:13:34 · 1406 阅读 · 0 评论 -
java十五种锁思维导图
原创 2023-03-28 11:51:26 · 132 阅读 · 0 评论 -
Redis队列详解(springboot实战)
MQ应用有很多,比如ActiveMQ,RabbitMQ,Kafka等,但是也可以基于redis来实现,可以降低系统的维护成本和实现复杂度,本篇介绍redis中实现消息队列的几种方案,并通过springboot实战使其更易懂。 1. 基于List的 LPUSH+BRPOP 的实现2. 基于Sorted-Set的实现3. PUB/SUB,订阅/发布模式4. 基于Stream类型的实现原创 2023-03-23 14:19:01 · 8352 阅读 · 1 评论 -
volatile 详解
有什么用?volatile是一个特征修饰符(type specifier). volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。一句话:主要用于解决变量在多个线程之间的可见性原创 2023-03-13 13:55:01 · 265 阅读 · 0 评论 -
mysql锁分类大全
前言为什么会出现锁MySQL中的锁是为了保证并发操作的正确性和一致性而存在的。当多个用户同时对同一份数据进行操作时,如果不加控制地进行读写操作,就可能导致数据不一致的问题。例如,当多个用户同时对同一行数据进行写操作时,就可能出现数据被覆盖的情况。这时,通过使用锁,可以控制用户对数据的访问,保证同一时间只有一个用户对数据进行修改或者读取操作,从而避免数据的不一致。原创 2023-03-10 16:04:09 · 814 阅读 · 0 评论 -
主流的“对象转换工具”使用示例大全以及性能的对比
总结 BeanUtils.copyProperties 是大家代码里最常出现的工具类,但只要你不把它用错成 Apache 包下的,而是使用 Spring 提供的,就基本还不会对性能造成多大影响。 但如果说性能更好,可替代手动get、set的,还是 MapStruct 更好用,因为它本身就是在编译期生成get、set代码,和我们写get、set一样。 其他一些组件包主要基于 AOP、ASM、CGlib,的技术手段实现的,所以也会有相应的性能损耗原创 2023-03-08 15:26:09 · 1480 阅读 · 0 评论 -
线性数据结构:数组 Array
数组是数据结构还是数据类型?数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数组,而是说,通过连续的索引 idx,也可以线性访问相邻的数据。那么当你定义了数据的存储方式,也就定义了数据结构。所以它也是被归类为数据结构。原创 2023-02-24 15:24:28 · 631 阅读 · 0 评论 -
System.arraycopy详解
System.arraycopy这个方法之前用得很少,前段时间在一个项目需要对很多字节的处理,使用这个方法是非常有用的。这个方法的作用大家应该都是知道的吧:就是把一个数组中某一段字节数据放到另一个数组中。至于从第一个数组中取出几个数据,放到第二个数组中的什么位置都是可以通知这个方法的参数控制的。原创 2023-02-24 15:01:55 · 448 阅读 · 0 评论 -
线性数据结构:链表 LinkList
链表的历史于1955-1956年,由兰德公司的Allen Newell、Cliff Shaw和Herbert A. Simon开发了链表,作为他们的信息处理语言的主要数据结构。链表的另一个早期出现是由 Hans Peter Luhn 在 1953 年 1 月编写的IBM内部备忘录建议在链式哈希表中使用链表。到 1960 年代初,链表和使用这些结构作为主要数据表示的语言的实用性已经很好地建立起来。原创 2023-02-24 11:52:37 · 657 阅读 · 0 评论 -
新手编写IntelliJ IDEA插件
整篇内容的学习还是蛮简单的,哪怕你之前没开发过 IDEA 插件,按照这样的套路往下折腾也是可以完成插件开发的。类似这样的知识内容只是平时常做业务开发所以接触的也不多,乍一听上去还是很陌生的,不过有这样的资料就可以上手了。本章节初步介绍 IDEA 插件的方式和一个非常简单的基本功能,后续我们在 Gradle 创建插件的基础上,继续开发其他案例功能,逐步学习 IDEA 插件开发用到的各项技巧用于完成所需要解决的问题。在学习的过程中可以自行尝试扩展一些其他组件入口,打印不同的工程信息。原创 2023-01-18 09:54:55 · 1047 阅读 · 0 评论 -
设计模式:备忘录模式,优雅的备份数据
此种设计模式的方式可以满足在不破坏原有属性类的基础上,扩充了备忘录的功能。虽然和我们平时使用的思路是一样的,但在具体实现上还可以细细品味,这样的方式在一些源码中也有所体现。在以上的实现中我们是将配置模拟存放到内存中,如果关机了会导致配置信息丢失,因为在一些真实的场景里还是需要存放到数据库中。那么此种存放到内存中进行回复的场景也不是没有,比如;Photoshop、运营人员操作ERP配置活动,那么也就是即时性的一般不需要存放到库中进行恢复。转载 2023-01-12 14:12:20 · 164 阅读 · 0 评论 -
synchronized底层monitor原理
synchronized底层使用monitor来控制锁的活动。了解monitor中的各个属性值的含义,锁的竞争流程。转载 2023-01-09 18:07:58 · 871 阅读 · 0 评论 -
springBoot整合easyPoi,填充Excel模板
模板是处理复杂Excel的简单方法,复杂的Excel样式,可以用Excel直接编辑,完美的避开了代码编写样式的雷区,同时指令的支持,也提高了模板的有效性。下面列举下EasyPoi支持的指令以及作用,最主要的就是各种fe的用法转载 2023-01-06 16:05:15 · 3539 阅读 · 2 评论 -
7种单例模式实现
目录单例模式介绍0. 静态类使用1. 懒汉模式(线程不安全)2. 懒汉模式(线程安全)3. 饿汉模式(线程安全)4. 使用类的内部类(线程安全) 推荐5. 双重锁校验(线程安全)6. CAS「AtomicReference」(线程安全)7. Effective Java作者推荐的枚举单例(线程安全)总结 单例模式可以说是整个设计中最简单的模式之一,而且这种方式即使在没有看设计模式相关资料也会常用在编码开发中。因为在编程开发中经常会遇到这样一种场景,那就是需要保证一个类只有一个实例哪怕多线程同时访问,并需要提原创 2022-12-05 11:04:26 · 422 阅读 · 0 评论 -
自定义注解前置知识
@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE)——局部变量@Target(ElementType.ANNOTATION原创 2022-11-12 23:20:53 · 276 阅读 · 0 评论 -
手写简易AOP,彻底悟懂AOP
AOP 意为:面向切面编程,通过预编译的方式和运行期间动态代理实现程序功能功能的统一维护。其实 AOP 也是 OOP 的延续,在 Spring 框架中是一个非常重要的内容,使用 AOP 可以对业务逻辑的各个部分进行隔离,从而使各模块间的业务逻辑耦合度降低,提高代码的可复用性,同时也能提高开发效率。原创 2022-11-10 17:41:58 · 595 阅读 · 0 评论 -
Spring AOP中@Pointcut切入点表达式详解
一、瞅一眼标准的AspectJ Aop的pointcut的表达式二、SpringAop的十一种AOP表达式三、演示使用1、execution:2、within:3、this:4、target:5、args:6、@target:7、@args:8、@within:9、@annotation:10、reference pointcut:11、bean:四、类型匹配语法五、表达式的组合原创 2022-11-10 15:45:35 · 3436 阅读 · 0 评论 -
四个问题理解spring的三级缓存
也无法确认什么时会调用当前对象, 是在其他对象的执行过程中进行调用的, 而不是人为指定的, 所以必须要保证容器中任何时候都只有一个对象供外部调用, 所以在三级缓存中,完整了一件代里对象替换非代理对象的工作, 确定返回的是唯一的对象。容器中,对象都是单例的,意味着根据名称只取一个对象的值, 此时同时存在两个对象的话,使用的时候应该取哪一个呢?不行, 因为成品和半成品对象会放到一起, 在进行对象获取的时候有可能取到半成对象, 这样的对象是没办法使用的。在整个容器中, 包含了同名的代理对象和非代理对象。原创 2022-10-08 14:09:15 · 204 阅读 · 0 评论 -
JAVA一键生成数据库( HTML、DOC、MD)文档
日常的开发工作中,经常会和数据库打交道,在某些场景可能会需要数据库表结构的文档,今天分享个简洁好用的数据库表结构文档生成工具screw。screw目前支持MySQL、Oracle、SqlServer、MariaDB、PostgreSQL等数据库,生成文档目前支持html、word、markdown文档格式。Gitee地址:screw: 简洁好用的数据库表结构文档工具,支持MySQL/MariaDB/SqlServer/Oracle/PostgreSQL/TIDB/CacheDB 数据库。...原创 2022-08-15 15:00:21 · 801 阅读 · 0 评论 -
Springboot全局日期格式化的方式
注解需要用在实体类的时间字段上,而只有使用相应的实体类,对应的字段才能进行格式化。所以如果有一些需要特殊处理的类型是很费劲的,这里了解一下就行。注解方式严格意义上不能叫全局时间格式化,只是部分格式化,因为。注解还是需要逐个逐个的加到属性上,所以接下来我们使用。不建议用这个注解,在使用此种配置后,字段手动配置。而且这个全局配置优先级别比。这是小编认为最优的方法,前边看到使用。注解自定义一个全局格式化类,分别对。...原创 2022-08-01 14:28:19 · 279 阅读 · 0 评论