- 博客(520)
- 收藏
- 关注
原创 索引下推
索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。 在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给
2022-01-26 15:08:47 4805 4
原创 索引长度
在设置 utf8mb4 字段的字符长度时,可能会抛出一个异常:"Specified key was too long; max key length is 1000 bytes"。也就是在给表的索引字段添加字符长度时,超过了最大索引长度 1000 字节。一、原因分析关于索引长度的限制,最主要的因素就是存储引擎和字符集。字符集的影响在于,不同的字符集,单个字符包含的最大字节数有所不同。比如 utf8 字符集,一个字符最多包含 3 个字节。而 utf8mb4 一个字符最多包含 4 个字节。对于 In
2022-01-26 15:01:36 3205
原创 LeetCode 27:移除元素
题意给你一个数组 nums 和一个 val,原地移除所有数值等于 val 的值,并返回移除后数组的新长度。示例输入:nums = [0,1,2,2,3,0,4,2], val = 2输出:5, nums = [0,1,4,0,3]解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。提示必须使用 O(1) 空间复杂度并原地修改输入数组。0 <= len(nu..
2022-01-26 10:33:24 764
原创 String的长度限制
String的长度限制想要搞清楚这个问题,首先我们需要翻阅一下String的源码,看下其中是否有关于长度的限制或者定义。String类中有很多重载的构造函数,其中有几个是支持用户传入length来执行长度的:public String(byte bytes[], int offset, int length) 可以看到,这里面的参数length是使用int类型定义的,那么也就是说,String定义的时候,最大支持的长度就是int的最大范围值。根据Integer类的定义,java...
2022-01-24 11:04:57 3555
转载 几个智力题
1. 只有两个无刻度的水桶,一个可以装6L水,一个可以装5L水,如何在桶里装入3L的水提示:这个问题的本质就是利用两个水桶的已知容量倒来倒去,问题的解法并不唯一。先将5L的桶装满,将5L的桶的水倒入6L的桶中。这时5L的桶是空的,6L的桶中有5L的水 再将5L的桶装满,倒入6L的桶中。这时5L的桶有4L的水,6L的桶是满的 将6L的桶中的水倒掉,5L的桶的水倒入6L的桶中。这时5L的桶是空的,6L的桶中有4L的水 将5L的桶装满,倒入6L的桶中。这时5L的桶还有3L的水,6L的桶是满的。
2022-01-19 17:39:13 494
转载 Spring Boot Admin
Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序。应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 SBA 中,然后就可以实现对 Spring Boot 项目的可视化管理和查看了。Spring Boot Admin 可以监控 Spring Boot 单机或集群项目,它提供详细的健康 (Health)信息、内存信息、JVM 系统和环境属性、垃圾回收信息、日志设置和查看、定时任务查看、Sprin...
2022-01-19 16:25:11 212
转载 java合成图片
场景前端有一个神器——canvas,这个画布标签可以处理各种图片的合成,可以精确到图片的具体坐标,加水印,去水印,简直不要太简单!那java后端可以处理吗?请大声的告诉他,能,必须能!今天小编告诉你一个神器——image-combiner,合成图片so easy!环境jdk1.8 spring boot搭建引入pom文件<dependency> <groupId>com.freewayso</groupId> <artifa
2022-01-19 16:07:24 965
转载 Mac 下 IDEA 中 SpringBoot 如何利用 DevTool 开启热部署
一、首先 pom.xml 中 依赖 和 构建 部分 二、IDEA 配置 注意这一步一定不要改错地方,认准 IntelliJ IDEA -> Preferences…三、退出 IDEA 编辑器,重启项目应用 配置很简单,一定要注意,特别是操作2 ,认准配置设置的地方认准 IntelliJ IDEA -> Preferences…...
2022-01-19 11:13:41 337
转载 mysql 行行比较查询写法
环境准备数据库版本: MySQL 5.7.20-log建表 SQL:DROP TABLE IF EXISTS `t_ware_sale_statistics`;CREATE TABLE `t_ware_sale_statistics` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `business_id` bigint(20) NOT NULL COMMENT '业务机构编码', `ware_inside_cod
2022-01-19 10:43:10 1038
转载 springboot banner
PK创意闹新春,我正在参加「春节创意投稿大赛」,详情请看:春节创意投稿大赛新年新气象,别光顾着打扮自己,也要打扮下自己吃饭的家伙SpringBoot的banner你在SpringBoot服务每次启动的时候是不是都能看到下面输出的日志(默认的图案格式) . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )___ | '_ | '_| | '_ / _` | \ \ \ \...
2022-01-19 09:47:20 11517
原创 SpringBoot集成Druid
Druid是一个阿里开源的连接池组件加⼊了日志监控,不需要额外的界面开发详细介绍可以看官方文档:https://www.alibabacloud.com/help/zh/doc-detail/72987.htm在springboot 2.0 以上默认都是使⽤用Hikari数据源, Hikari与Druid都是当前⽐比较优秀的数据源com.alibaba.druid.pool.DruidDataSource 基本配置参数如下:连接池运行原理连接池初始化的时候按照initialSi.
2022-01-14 16:53:46 1883
转载 分布式链路追踪(概念)
分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等。本文使用分布式Trace来简称分布式链路追踪。本篇文章只是从大致的角度来阐述什么是分布式Trace,以及一个分布式Trace系统具备哪些要点和特征。场景先从几个场景来看为什么需要分布式Trace场景1开发A编写了一段代码,代码依赖了很多的接口。一个调用下去没出结果,或者超时了,Debug之后发现是接口M挂了,然后找到这个接口M的负责人B,告知B接口挂了。B拉起自己的调用和De
2022-01-14 16:14:19 2376
原创 31.栈的压入、弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例1输入:[1,2,3,4,5],[4,5,3,2,1]返回值:true说明:可以通过push(1) => push(2) => push(3) => pu..
2022-01-14 11:02:35 146
原创 mybatis的#{}占位符和${}拼接符
#{}占位符:占位使用#{}意味着使用的预编译的语句,即在使用jdbc时的preparedStatement,sql语句中如果存在参数则会使用?作占位符,我们知道这种方式可以防止sql注入,并且在使用#{}时形成的sql语句,已经带有引号,例,select * from table1 where id=#{id} 在调用这个语句时我们可以通过后台看到打印出的sql为:select * from table1 where id=‘2’ 加入传的值为2.也就是说在组成sql语句的时候把参数默认为字符串。
2022-01-14 09:58:51 2755
原创 包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。此栈包含的方法有:push(value):将value压入栈中 pop():弹出栈顶元素 top():获取栈顶元素 min():获取栈中最小元素思路 & 解答主要是两个栈,一个存储所有元素的datas stack,一个存储最小值 mins stack。push一个元素的时候,都需要push进datas stack,但是push进入mins stack需要满足条件:
2022-01-12 19:31:21 132
转载 maven 详解
最近做了个项目,但是这个项目需要 30 多个 jar包。他只能从网上一个个去下载,下载完还要一个一个手动导e好不容易搞完了,结果却发现有些 jar 包版本竟然不兼容,搞了一天也没搞好。真的是“豆腐拌腐乳-越搞越糊涂!。”经过一个多月的疯狂加班,这个项目终于做好了,张三部署好测试环境之后就交给测试人员李四了。张三想着终于能好好摸鱼了,谁知道李四工作特认真,一会就测出来一堆 bug。张三只能立即去更改 bug,改完还要手动编译、打包项目。最多的时候一天打包了十几次,可把张三累坏了。...
2022-01-12 15:16:23 974
转载 获取spring容器对象,初始化bean,自定义bean Scope,FactoryBean,自定义类型转换,Enable开关等
一 如何获取spring容器对象1.实现BeanFactoryAware接口@Servicepublic class PersonService implements BeanFactoryAware { private BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.be
2022-01-12 12:16:51 1396 1
转载 一些情况下会导致事务自动提交
正常来说,当我们开启一个事务之后,需要 commit 或者 rollback 来结束一个事务的,但是有时候,一些操作会自动帮我们提交事务,如果大家不了解隐式事务的话,那么在具体使用事务的事务可能就会遭遇一些莫名其妙的问题。1. DDL 操作首先一点就是 DDL 操作会隐式提交事务,这个松哥在之前的文章中其实有说过,我们再来一起回顾下:所有的 DDL 语句都会导致事务隐式提交,换句话说,当你在执行 DDL 语句前,事务就已经提交了。这就意味着带有 DDL 语句的事务将来没有办法 rollback
2022-01-11 19:16:32 1728
转载 SpringBoot+RabbitMQ 实现 RPC 调用
说到 RPC(Remote Procedure Call Protocol 远程过程调用协议),小伙伴们脑海里蹦出的估计都是 RESTful API、Dubbo、WebService、Java RMI、CORBA 等。其实,RabbitMQ 也给我们提供了 RPC 功能,并且使用起来很简单。今天松哥通过一个简单的案例来和大家分享一下 Spring Boot+RabbitMQ 如何实现一个简单的 RPC 调用。注意关于 RabbitMQ 实现 RPC 调用,有的小伙伴可能会有一些误解,心想这还
2022-01-11 11:13:09 1117
转载 ForkJoinPool
本文的主要目的是介绍 ForkJoinPool 的适用场景,实现原理,以及示例代码。说在前面可以说是说明,也可以说下面是结论:ForkJoinPool 不是为了替代 ExecutorService,而是它的补充,在某些应用场景下性能比 ExecutorService 更好。ForkJoinPool 主要用于实现“分而治之”的算法,特别是分治之后递归调用的函数,例如 quick sort 等。ForkJoinPool 最适合的是计算密集型的任务,如果存在 I/O,线程间同步,sleep() 等会
2022-01-10 19:53:46 862
转载 count(*) 性能
当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 count(1)、count(*)、count(字段) 等。到底哪种效率是最好的呢?是不是 count(*) 效率最差?我曾经以为 count(*) 是效率最差的,因为认知上 selete * from t 会读取所有表中的字段,所以凡事带有 * 字符的就觉得会读取表中所有的字段,当时网上有很多博客也这么说。但是,当我深入 count 函数的原理后,被啪啪啪的打脸了!
2022-01-10 16:42:58 358
转载 RESTful理解
什么样才叫真正的 RESTful ?其实网上 RESTful 的文章有挺多的,不过有些讲的糊里糊涂的,而且很大部分都忽略了 HATEOAS。在之前的面试中面试官就问过我,你怎么理解 RESTful 的,英文全称是啥?为什么叫这个名字?当时我人都傻了。面试官不讲武德,针对我这个刚出社会的小伙子。其实有很多人也稀里糊涂的,也包括我自己。就面向资源呗,不加动词咯,还能咋滴,我加动词不也能用吗?而且我之前还特不能理解,为啥这叫架构?我特意搜索了下架构的解释。软件架构是有关软件整
2022-01-10 15:38:13 163
转载 mysql 批量插入
最近新的项目写了不少各种 insertBatch 的代码,一直有人说,批量插入比循环插入效率高很多,那本文就来实验一下,到底是不是真的?测试环境:SpringBoot 2.5 Mysql 8 JDK 8 Docker首先,多条数据的插入,可选的方案:foreach循环插入 拼接sql,一次执行 使用批处理功能插入搭建测试环境`sql文件:drop database IF EXISTS test;CREATE DATABASE test;use test;DROP T
2022-01-10 14:59:15 4161 1
转载 mysql查询前百分之几的数据(以25%为例)
因为mysql没有top的用法,而且limit后也不支持子查询所以实现相对麻烦,可以使用类似于Oracle中伪列的用法select @rownum:=@rownum+1,student.*from (select @rownum:=0) row ,student;可以看到表中有5条数数据select round(count(*)/4) from student补充一下这里的rownum只是个变量名,也可以是用其他的,不一定非得@rownumselect @rownum:=@r.
2022-01-06 10:46:05 2307
原创 AtomicReference,AtomicStampedReference
AtomicReference1、使用场景:解决并发修改多个属性说到CAS理论,在java中我们第一个就想到了atomic类,一般常见的有AtomicInteger、AtomicBoolean等java.util.concurrent包下面的类,但是这个只能并发修改一个属性,如果我需要对多个属性同时进行并发修改,并且保证原子性呢?AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普
2022-01-06 10:27:56 863
转载 Mysql-如何建表更符合业务
索引索引是 数据库中 对某一列或者多个列的值进行预排序的数据结构也就是说你存放数据的时候 其实已经排列好顺序了。索引可以理解为数据的 目录InnoDB中,主键是一个特殊的索引字段主键InnoDB中, 每个表都有一个主键如果你没有声明某个字段为主键,则表中 有一个 非空的唯一索引(Unique NOT NULL) 会默认成为主键如果有多个 非空的唯一索引,则选择 第一个定义的索引为主键如果没有 unique not null,则InnoDB会自动创建一个 6字节的指针,作为
2021-12-29 16:41:20 302
原创 MySQL-连表查询详
MySQL连表查询是一把双刃剑,一方面通过连表查询可以简化SQL的数量;但另一方面如果连接的表数据量较大,或者连接的表较多,其产生的笛卡尔积会成指数级增长,所以有些公司会禁用连表查询。一、连表查询简介连表查询即两张表或多张表联合查询,联合查询得到的结果称为笛卡尔积,假设A表中有n条记录,B表表中有m条记录,则它们联合查询得到的笛卡尔积为:n*m大家可能听过很多种连接方式,比如内连接、外连接、自然连接、交叉连接、左连接以及右连接,但MySQL的连表查询其实只有3种:内连接、外连接、自然连接。 其中
2021-12-27 15:23:59 6143
转载 Redis 6.0中的多线程
在Redis 6.0 推出之后,我想去了解下为什么采用多线程,现在采用的多线程和以前版本有什么区别?为什么这么晚才使用多线程?Redis不是已经采用了多路复用技术吗?不是号称很高的性能了吗?为啥还要采用多线程模型呢?本文就来分析下这些问题以及背后的思考。Redis为什么最开始被设计成单线程的?Redis作为一个成熟的分布式缓存框架,它由很多个模块组成,如网络请求模块、索引模块、存储模块、高可用集群支撑模块、数据操作模块等。很多人说Redis是单线程的,就认为Redis中所有模块的操作都是
2021-12-27 11:12:12 840
原创 查询出每个分组中的 top n 条记录
问题描述需求:查询出每月 order_amount(订单金额) 排行前3的记录。例如对于2019-02,查询结果中就应该是这3条:解决方法MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7我们先写一个查询语句。根据 order_date 中的年、月,和order_amount进行降序排列。然后,添加一个新列:order_amount(本条记录在本月中的名次)。执行结果:...
2021-12-24 10:33:43 332
转载 6个延时队列的实现方案
【编者的话】个人比较喜欢一些实践类的东西,既学习到知识又能让技术落地,能搞出个demo最好,本来不知道该分享什么主题,好在最近项目紧急招人中,而我有幸做了回面试官,就给大家整理分享一道面试题:“如何实现延时队列?”。下边会介绍多种实现延时队列的思路,文末提供有几种实现方式的GitHub地址。其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。延时队列的应用什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说..
2021-12-23 15:34:33 1132
转载 秒杀设计的注意点
高并发下如何设计秒杀系统?这是一个高频面试题。 这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。掌握了这些,以后就可以和面试官好好聊一聊了。
2021-12-23 14:34:36 501
原创 SpringBoot整合Ehcache缓存
一、Ehcache介绍EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP API等特点。主要的特性有: 快速 简单 多种缓存策略 缓存数据有两级:内存和磁盘,因此无需担心
2021-12-23 12:15:55 591
转载 Mybatis-Plus整合多数据源
提出问题在平时开发中,经常会遇到在一个项目里需要使用多个数据源的情况,比如有一部分数据在数据源A,另一部分数据在数据源B,业务需要把这两部分的数据做合并然后从接口返回。又或者操作完数据源A后,需要切换数据源,操作数据源B。这样的需求,怎么实现?解决问题其实在mybatis-plus就有相关的实现,是一个基于SpringBoot快速集成多数据源的启动器。首先要搭建一个springBoot+Mybatis+Mybatis-Plus的项目,搭建项目就不演示了,比较简单。这里讲怎么使用多数据源,
2021-12-22 18:35:17 2603
转载 策略模式之规则执行器
业务场景近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示:if (是否海外用户) { return false;}if (刷单用户) { return false;}if (未付费用户 && 不再服务时段) { return false}if (转介绍用户 || 付费用户 || 内推用户) { return true;}复制代码按照上述的条件我们可以得出的结论是:咱们的的主要流程主要是基于 and
2021-12-22 10:46:28 656
原创 Dubbo 实战
一 为什么需要 dubbo很多时候,其实我们使用这个技术的时候,可能都是因为项目需要,所以,我们就用了,但是,至于为什么我们需要用到这个技术,可能自身并不是很了解的,但是,其实了解技术的来由及背景知识,对于理解一项技术还是有帮助的,那么,dubbo是怎么被提上日程的呢?在互联网的发展过程中,在以前,我们只需要一个服务器,将程序全部打包好就可以,但是,随着流量的增大,常规的垂直应用架构已无法应对,所以,架构就发生了演变。1 单一应用架构2 应用和数据库单独部署3 应用和数据库集群部署4
2021-12-17 14:40:40 1160
转载 springboot整合dubbo
一、本文示例说明1.1 框架版本Dubbo 版本<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.5</version></dependency>复制代码Spring Boot 版本<p
2021-12-17 14:37:52 507
转载 java参数校验的一些工具
一、前言今天和小伙伴们分享一个常用的工具类,共计四个方法,使用场景比较广泛,有用于校验某个对象或对象中指定属性为空值时,直接返回异常,常用语校验前端请求参数;也有当值不为空时,执行指定动作,可减少大量的if条件,如:mybatis请求参数设置;还有用于判断当值不为空时,替代为新值,完成后续动作。这样描述可能不够清晰,这里花哥列举了几个使用场景,更多的场景需要小伙伴们根据自己业务需求合理使用。//场景一,点击登录时,后端校验用户名if(StringUtils.isEmpty(name)){
2021-12-07 14:40:39 1302
转载 Mysql在什么情况下会使用内部临时表
union执行为了便于分析,使用一下sql来进行举例CREATE TABLE t1 ( id INT PRIMARY KEY, a INT, b INT, INDEX ( a ) );delimiter ;;CREATE PROCEDURE idata ( ) BEGINDECLARE i INT; SET i = 1; WHILE ( i <= 1000 ) DO INSERT INTO t1 VALUES ( i, i, i ); S
2021-12-07 11:28:35 515
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人