- 博客(54)
- 资源 (2)
- 问答 (2)
- 收藏
- 关注
原创 一文带你了解MySQL的Server层和引擎层是如何交互的?
对于很多开发小伙伴来说,每天写SQL是必不可少的一项工作。那不知道大家有没有深入了解过,当我们的一条SQL命令被执行时,MySQL是如何把数据从硬盘/内存中查出来并展示到用户面前的呢?
2023-02-24 19:16:09
1169
原创 MySQL:连explain的type类型都没搞清楚,怎敢说精通SQL优化?
总得来说,我们在进行查询时,查询类型可分为两大类:全部扫描和索引查询。索引查询又可以细分:1,唯一索引等值查询。2,普通索引等值查询。3,普通索引范围查询。4,扫描整个索引树。对于一条查询sql来说,不同的查询类型虽然结果可能是一样的,但是其性能却可能天差地别。
2023-02-13 13:27:27
937
3
原创 tomcat:设计模式用的好,下班就能早
tomcat作为一款经典的轻量级应用服务器,自然也使用了很多优雅的设计模式。今天给大家简单介绍一下tomcat在初始化组件时使用的几种设计模式。
2023-02-13 13:26:40
520
2
原创 MySQL:为什么说应该优先选择普通索引,尽量避免使用唯一索引
在使用MySQL的过程中,随着表数据的逐渐增多,为了更快的查询我们需要的数据,我们会在表中建立不同类型的索引。今天我们来聊一聊,普通索引和唯一索引的使用场景,以及为什么说推荐大家优先使用普通索引,尽量避免使用唯一索引。对于一个普通的二级索引,目的就是为了加速查询,所以我们可能会为表中的某个字段或者某些字段,建立一个普通的二级索引。而对于唯一索引来说,由于其唯一键约束的特性,有时我们会更多的赋予其业务含义。
2023-02-13 13:26:21
802
1
原创 对话面试官:MySQL中int(11)和int(10)有什么区别?
那么对于int类型来说,当定义为无符号int时,最大取值范围是4294967295,数一下长度也就10位,那么难道我们定义int(11)的时候,可以突破int类型的取值上限了吗?对于字符串类型的定义name varchar(20),我们可以清楚的知道,这是表示name这个字段最大长度是20个字符,当name字段的长度超过20字符时,MySQL就会报错。当定义一个无符号int类型,且设置了ZEROFILL属性时,如果数值的长度没有达到显示的宽度时,MySQL会自动的在数值前面补零直至达到定义的宽度。
2023-02-06 12:58:49
685
原创 tomcat优化线程池的思路真的好,每个javaer都应该了解一下
对于一个新任务,有空闲的线程就先用空闲的线程,线程不够用又没达到上限就去创建新线程,线程达到上限就扔到队列排队去,队列满了执行重试机制,重试失败那就没办法了,执行拒绝策略吧
2023-02-06 12:56:28
1692
1
原创 跟同事杠上了,用雪花算法生成的id做主键对MySQL性能有影响?
用雪花算法生成的id做主键,对MySQL性能到底有没有影响?MySQL必须使用连续递增的主键才能发挥最大性能?
2023-02-03 13:23:05
4248
5
原创 对话面试官:MySQL自增主键id快用完了怎么办?
所以,如果你的业务预期会产生很多数据,那么建议你在创建表时,直接使用bigint,无符号的bigint最大值是18446744073709551615,这个数基本可以保证你的业务不受影响了。我们在定义MySQL表时,为了性能考虑,一般会使用MySQL的自增主键id,每个自增id都会定义一个初始值,一般从1开始,然后不停得增加步长(不配置的话步长默认为1)。另外多说几句,建表时采用什么类型的主键,还是要根据具体业务具体分析,合理的主键类型会占用更小的空间,具有更好的性能。可以看到,直接提示主键重复了。
2023-02-03 13:21:10
926
原创 SpringbootAdmin:轻量级的Springboot监控组件,用过的都说好
Springboot Admin是一个管理和监控Springboot项目的组件,分为服务端和客户端,两端通过http进行通信。由于其轻量级的特性,所以特别适合中小项目使用。
2023-02-03 13:20:19
939
原创 被面试官问住了,MySQL两阶段提交是什么鬼?
MySQL通过两阶段提交的机制,保证了redo log和bin log的逻辑一致性,进而保证了数据的不丢失以及主从库的数据一致。
2023-02-03 13:18:28
653
原创 Springboot进阶:如何利用redis快速简单的实现全局接口限流
以上两种利用redis实现限流的方式基本能满足我们大部分的业务需要,对于部分要求限流粒度更高更准的业务,可以引入sentinel来满足业务需要。
2023-01-28 22:45:14
443
原创 不要在线上滥用CopyOnWriteArrayList,姿势不对性能真的很拉胯
从JDK1.5版本,JAVA提供了线程安全的List增强版CopyOnWriteArrayList,其保持线程安全的方式是:每次修改数据时,不会直接修改数据,而是把数据复制出来一份,对复制出来的数组进行操作。可以清楚的看到,在大量写的情况下,CopyOnWriteArrayList的性能是远远不如普通的加锁List的,性能差距可能在100倍以上。通过这样的机制,可以极大程度的提升读的并发性能,所以对于CopyOnWriteArrayList来说,非常适合读多写少或者无锁的场景。
2023-01-28 22:43:45
2052
原创 Spring进阶:3步引入MybatisPlus多数据源,详细配置及原理解析
MybatisPlus(MP)作为mybatis的增强工具,提供了配置多数据源的扩展,通过简单的几步配置,即可使用注解轻松切换数据源。
2023-01-28 22:42:46
3692
原创 有点懵,MySQL使用grant授权后没必要flush privilege?
使用grant命令之后,并不需要再随手加上flush privileges,因为grant 语句会同时修改数据表和内存。只有当我们不规范的直接使用DML语句修改表中权限字段时,才需要使用flush privileges刷新数据。
2023-01-28 22:40:35
473
原创 不规范使用ThreadLocal导致的bug,说多了都是泪
我们在写业务代码时,正确的理解线程的全生命周期以及执行原理,对我们提升代码的健壮性其实很有帮助。有时我们觉得底层原理很枯燥乏味,开发业务就是写增删改查,多线程用的也很少,但我们只是没有意识到,我们的代码一直跑在tomcat提供的线程池中,本身就是一个多线程的环境。除了tomcat的线程池,我们自定义的线程池其实也会有这个问题,大家可以看看自己的业务代码是否踩过这个坑。
2023-01-28 22:39:46
2158
原创 1分钟带你学会MySQL覆盖索引,让你的SQL更高效
覆盖索引是MySQL优化sql性能的一种非常重要而且常用的手段,通过覆盖索引,我们可以直接查询到需要的结果,而不用回表,从而大大减少树的搜索次数,非常明显的提升查询性能。
2023-01-28 22:38:19
373
2
原创 如何利用MDC快速查询应用接口全部执行日志
有没有一种简单高效的方法,即使我们在日志中不打印任何关键字,系统会自动生成一个关键字,让我们一次性查询出这个接口的所有log记录呢?
2023-01-28 22:36:31
712
原创 简单实用,利用redis轻松实现高并发全局ID生成器
Redis作为高性能的KV数据库,并且操作还是原子性的,所以用来做支持高并发的发号器十分合适。
2023-01-15 16:04:27
600
原创 55个常见Springboot应用示例,手把手教你深度学习Springboot
今天给大家推荐一个深度学习实战的Springboot项目,包含了服务端开发常见的55个功能示例,比如logback日志模块的配置、通过AOP切面记录日志、集成mybatisPlus、集成redis、集成RabbitMQ消息队列等等所有常见的功能。项目作者将每一个功能都做成了一个模块,大家使用时只需要按照模块中的readme文档,一步一步的配置就可以完成一个功能的开发。这些项目的代码都是经过大家反复认证过的,只要引入的版本号没问题,就可以在我们的项目中正常的跑起来。1,引入mybatis-plus的包。
2023-01-15 16:02:52
1923
1
原创 函数式接口编程真没那么难,简单几行让你的代码更优雅
函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。JDK8中新增了一个很重要的包:java.util.function,在这个包下的所有接口都是函数式接口。通过函数式接口,可以极大的简化我们的代码,让我们的代码看起来更简洁。包中的接口虽然多,但是大致可以分为4大类,分别是Consumer(消费型)、Supplier(供给型)、Predicate(谓词型)、Function(功能型)。
2023-01-15 16:01:37
140
原创 面试官:MySQL主键为什么不是连续递增的?
设计MySQL表时,我们一般会设置一个自增主键,从而让主键索引尽可能的保持递增的趋势,这样可以避免页分裂,让MySQL顺序写入,大大提高MySQL的性能。当我们创建完一个表后,通过show create table命令,可以看到MySQL定义了AUTO_INCREMENT来指定主键的递增值。在MySQL5.7之前,这个递增值是直接保存在内存里面的,当服务器重启后,MySQL会读取表里面的最大主键id,然后将最大值+1作为下次递增的值。
2022-12-27 23:31:57
395
原创 用BigDecimal计算金额就高枕无忧了?带你了解BigDecimal这5个坑
1,BigDecimal虽然计算精度准确,但是其性能相对double,float是较差的。如果没有高精度计算的要求,那也不必强行使用BigDecimal。2,初始BigDecimal时,建议强制使用字符串的构造参数。3,BigDecimal对象是不可变的,每次计算都会产生一个新对象,所以记得保存做完计算以后的值。
2022-12-27 23:30:42
265
原创 Shiro用起来太痛苦?这个轻量级权限框架一行代码搞定登录
SaToken是一个轻量级的Java权限认证框架,目标是让鉴权变得简单、优雅。其主要解决了登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权等一系列权限相关问题。目前在Gitee上已经有了8.9K的star,足以可见大家对其的认可。使用了SaToken以后,登录有多简单呢?没错,一行代码就可以搞定登录了。
2022-12-27 23:30:09
369
原创 盘点导致Spring事务失效的4个场景
事务是我们日常开发工作中无法避免的一个功能,深刻理解事务的运行机制,正确使用事务的声明式操作,才能让我们写出更健壮的代码。
2022-12-27 23:29:19
190
原创 Java8之22个lambda表达式用法入门示例超简单,这还不会你就out了
lambda表达式简明扼要的以流水线的方式去处理集合内的数据,可以很轻松的完成过滤、分组、收集、归约这类操作。总得来说,lambda的操作分为两类:中间型和最终型。中间型操作。
2022-12-27 23:27:26
441
原创 Springboot全局配置自动格式化日期参数,超简单直接拿去用
日常开发中,时间格式的参数出现频率非常高,很多朋友对时间格式转换也很头疼,或者只知道如何配置,而不知道这些配置如何生效的。今天我们来梳理一下Springboot项目中配置日期转换的三种方式,以及其大致原理。
2022-12-22 22:40:38
1293
原创 当我准备用SpringEvent优雅的解耦时,连续两个bug把我搞懵了
本文主要讲解了SpringEvent基本的使用方法,和平常开发中可能会遇到的一些问题。总的来说,Spring为了让大家用的更轻松,考虑了各种可能发生的情况,但是如果大家不了解背后的实现原理,就可能发生一些本不该出现的bug。
2022-12-22 22:39:25
533
原创 为什么说在SpringAOP中,不要使用this调用方法?
SpringAOP实际上会自动为我们创建一个Proxy,使得调用者能无感知地调用指定方法,本质上就是一个动态代理。我们只有访问这些代理对象的方法,才能获得AOP实现的功能,所以通过this引用是无法去正确使用 AOP 功能的。
2022-12-22 22:39:04
960
原创 Spring项目中自动打印执行sql和耗时,这款神级插件你值得拥有
P6Spy通过对数据源的包装,进而实现了一系列的功能增强,让我们可以方便的打印sql执行情况。但是相应的,如果在生产环境开启p6spy的打印功能,对性能还是由一定的影响的。建议大家在测试环境开启此功能,对跟踪、修复bug都很有帮助。
2022-12-22 22:37:36
728
原创 没事不要乱写close和shutdown方法,搞不好线上就出个大bug
在Spring项目中,我们在定义一个bean的时候,可能会随手写一个close或者shutdown方法去关闭一些资源。但是有时候这两个看起来很正常的方法名,即使我们不添加任何特殊配置,也可能会给我们带来潜在的bug。通过一个简单的bean重现一下这个问题。定义一个系统配置类,在某些条件下,我们会调用这个类的close方法去执行一些关闭资源的动作。通过@Bean将这个类注入到Spring容器中:在很长一段时间内,这段代码都执行得很好。但是有一次系统意外停机时,bug发生了。通过上图可以看到,clo
2022-12-06 22:26:59
381
原创 Spring的@Value注解使用实践及一个经典的易错场景
Spring提供了@Value注解帮助我们注入一个自定义属性或者对象,大大简化了我们的操作。但是如果对其原理不清楚,有时也会遇到一些不可预期的bug。本文主要介绍了@Value注解使用的常见场景及使用方法,以及分享一个比较经典的易错场景。常见的使用方式有以下四种,请注意使用方式的不同。实践1,注入一个字符串启动我们的项目,可以看到控制台打印出我们注入的str的值:2,注入一个自定义属性在application.properties配置文件中配置以下属性:启动项目,控制台打印出来我
2022-12-06 22:26:02
768
原创 为什么说在SpringAOP中,不要使用this调用方法?
SpringAOP是Spring中除了依赖注入以外最为核心的功能,其原理是利用CGlib和JDK动态代理等方式来实现运行期动态方法增强,从而降低系统耦合,提升代码的复用性。不过,在享受AOP强大功能便利的同时,我们也会经常遇到一些看起来莫名其妙的bug。今天,我们来聊一聊,为什么说在AOP方法中,不要轻易使用this调用方法?使用了this会出现什么样的情况?背后的原理是什么?又该如何解决?废话不多说,直接实战上代码。假设我们有一个核心支付类,其中有pay()支付功能,同时会通过record()方法记录都有
2022-12-06 22:24:12
970
原创 Spring进阶:定义bean时容易踩的两个坑,连老手也容易犯错
默认情况下,Spring维护的bean都是单例,但是有时候我们也需要一些非单例bean,比如prototype。定义一个bean为prototype类型很简单,使用@Scope注解即可。@Service//....}定义很简单,但是使用的时候可能并不会产生如我们预期的结果。}}按照预期,每次访问/demo/hello,返回的应该都是一个新的DemoBean实例。为什么会这样呢?@Scope注解有bug?其实问题出现在@Autowired private DemoBean demoBean。
2022-11-28 23:53:25
230
原创 上千star的分布式ID生产黑科技,让你再也不用为生成ID发愁了
sequence虽然大幅提升了性能,但是在某些情况下仍然可能出现重复的情况,比如机器标识重复、起始时间戳被修改重置等,这些问题需要我们特别注意。总得来说,sequence被称为分布式高效ID生产黑科技并不为过,著名的ORM框架mybatis plus用的也是这个组件,大家有兴趣也可以去了解一下。
2022-11-27 13:50:56
295
原创 还在用数据库自增ID做主键?建议了解一下雪花算法生成的分布式ID
本文主要讲解了什么是雪花算法,雪花算法适用的场景以及如何解决雪花算法冲突的问题。当然雪花算法也不是万能的,不能适用所有的场景,建议大家根据实际的业务进行评估,然后选择合适的方案。
2022-11-26 15:55:10
907
原创 如何实现类似订单到期未支付自动关闭的功能?这6种方案任你挑选
本文介绍了常见的6种实现订单关闭的方案,不同的方案都有其适用的场景,各自的优缺点也不尽相同,大家可以根据自己的业务场景,选择合适的方案。如果本文中没有提到你熟悉的技术方案,也欢迎在评论区分享给大家,期待共同学习进步。
2022-11-25 16:02:44
746
原创 盘点导致sql执行速度慢的几种情况,都是生产环境踩过的坑
总的来说,sql执行速度慢会受到很多种情况的影响,比如表锁,行锁。在实际的业务场景中也许会更复杂,但是处理起来的步骤基本大同小异,只要找到问题的根源,知道如何解决,处理起来就可以做到心中有数,游刃有余。
2022-11-24 00:04:23
6759
1
原创 MySQL:如何给字符串加一个高效索引?
在日常需求中,用户使用手机号或者邮箱登录某一个系统,是一个很常见的操作,那如何在类似手机号或者邮箱这样的字段上建立一个合理的索引呢?
2022-11-22 13:48:11
493
原创 在Spring异步线程池中自动传递上下文,这样写轻松又方便
利用ThreadPoolTaskExecutor的TaskDecorator,动态的给一个对象添加一些额外的功能,比生成子类会更加灵活。在我们平常的编码过程中,也建议大家尝试使用装饰模式优化我们的代码。
2022-11-20 21:49:45
935
趣味测试小程序.zip
2021-05-21
linux下文件下载问题[javaee]
2017-03-19
javaee下载文件时,多用户同时下载是否冲突
2016-12-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人