自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 base64转MultipartFile并下载到本地

【代码】base64转MultipartFile并下载到本地。

2023-05-23 15:55:35 245

原创 java打包加载配置文件

通过idea的maven install进行打包,打包完之后发现没有将相关配置文件打包进去。此处发现在项目打包过程中需要进行相关配置。即需要在pom文件下,加上如下代码。

2023-05-18 09:10:52 352

原创 获取企业微信access-token

获取企业微信access-token

2022-06-08 10:54:43 884

原创 实体类按照ASCII编码排序,并用&拼接

ASCII编码排序,并用&拼接

2022-06-08 09:43:26 578

原创 为什么我的MySQL会“抖”一下?

一条sql语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只是随机,而且持续时间还很短。SQL语句为什么变慢了在前面的日志系统:一条SQL更新语句是如何执行的?文章中,介绍了WAL机制。InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作。这个操作叫作redo log(重做日志),也就是酒店掌柜用来记账的粉板,在更新内存写完redo log后,就返回给客户端,本次更新成功。做下类比可以知道,掌柜记账的账本就是数据文件,记账用的粉板是日志文件(

2021-11-08 16:58:59 84

原创 怎么给字符串字段加索引?

在使用邮箱登录的时候,怎么在邮箱这样的字段上建立合理的索引?假如,现在维护一个支持邮箱登录的系统,用户表是这么定义的:mysql> create table SUser(ID bigint unsigned primary key,email varchar(64),...)engine=innodb; 在使用邮箱登录的时候,在业务代码中一定会出现类似于这样的语句:select f1,f2 from SUser where email = 'xxx';如果email这个字段上没有

2021-11-08 16:55:19 327

原创 Mysql为什么有时候会选错索引?

在Mysql中一张表其实是可以支持多个索引的。但是,在写sql的时候,并没有主动指定使用哪个索引,也就是说,使用哪个索引是由mysql来确定的。有时候会出现这种情况,一条本来可以执行得很快的sql语句,但是因为mysql选错了索引,而导致执行速度变得很慢。有如下一张表,并且对a、b字段建立索引:CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRI

2021-05-26 17:58:54 156

原创 Springboot集成阿里云OSS

安装SDK方式一:在Maven项目中加入依赖项(推荐)<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --><dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.1

2021-04-29 10:12:06 889 1

原创 Quartz定时任务

quartz.properties配置文件:通常情况下,通过quartz.properties属性配置文件(默认使用该文件)结合StdSchedulerFactory来使用Quartz。StdSchedulerFactory会加载属性配置文件并实例化一个Scheduler。默认情况下,Quartz会加载classpath下的“quartz.properties”文件作为配置属性,如果找不到则会使用quartz框架自己jar下的ora/quartz包底下的“quartz.properties”文件。也可

2021-04-26 16:19:27 2056

原创 事务注解@Transactional失效的3种场景及解决办法

Transactional失效场景介绍第一种失效场景Transactional注解标注方法修饰符为非public时,@Transactional注解将会不起作用。例如代码如下:定义一个错误的@Transactional标注实现,修饰一个默认访问符的方法@Componentpublic class TestServiceImpl { @Resource TestMapper testMapper; @Transactional void insertTestWron

2021-04-07 13:53:20 1278

原创 普通索引和唯一索引,应该怎么选择?

在不同的业务场景下,应该选择普通索引,还是唯一索引?每个人都有一个唯一的身份证号,在业务代码中已经保证了不会写入两个重复的身份证号。如果需要按照身份证号查姓名,就会执行类型这样的sql语句:select name from user where id_card = '********************'所以,一定会考虑在id_card字段上建立索引。由于身份证号字段较大,不建议把身份证号当作主键,那么,现在有两个选择,一、给id_card字段创建唯一索引,要么创建一个普通索引。如果业务代码已

2021-03-17 14:11:59 178

原创 事务到底是隔离的还是不隔离的?

这篇文章在讲解的时候,如果没有特殊说明,都是默认autocommit = 1;如果是可重复读隔离级别,事务T启动的时候会创建一个视图 read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟启动时看到的一样。也就是说,一个在可重复读隔离级别下执行的事务,好像与世无争,不受外界影响。但是,在行锁的时候,一个事务要更新一行,如果刚好有另外一个事务拥有这一行的行锁,它又不能这么超然了,会被锁住,进入等待状态。那么问题来了,既然进入了等待状态,那么等到这个事务自己获取到行锁要更新数据的

2021-03-09 11:50:44 110

原创 行锁功过:怎么减少行锁对性能的影响?

mysql的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一个更新在执行,这就会影响到业务并发度。InnoDB是支持行锁的,这也是MyISAM被InnoDB替代的重要原因之一。行锁就是针对数据表中行记录的锁。比如事务A更新了一行,而这时候事务B也要更新同一行,则必须等事务A的操作完成后才能进行更新。数据库中还有一些没那么一目了然的概念和设计,这些概念和设计如果理解和使用不当

2021-03-09 11:43:14 119

原创 全局锁和表锁

数据库锁涉及的初衷是处理并发问题。作为多用户共享的资源,当出现并发访问的时候,数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。根据加锁的范围,mysql里面的锁大致可以分为全局锁,表级锁,行锁全局锁全局锁就是对整个数据库实例加锁。mysql提供了一个加全局读锁的方法,命令时Flush tables with read lock(FTWRL)。当你需要让整个库处于只读状态的时候,可以使用这个命令,之后其他线程的以下语句会被阻塞:数据更新语句(增删改),数据定义语句(建表、

2021-03-09 11:41:43 62

原创 深入浅出索引(下)

执行select * from T where k between 3 and 5 需要执行几次树的搜索操作,会扫描多少行?mysql> create table T (ID int primary key,k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '',index k(k))engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'

2021-03-09 11:38:45 70

原创 深入浅出索引(上)

索引的出现其实就是为了提高数据查询的效率,就像书的目录一样索引的常见模型常见的也比较简单的可以用于提高读写效率的数据结构:哈希表、有序数组、搜索树哈希表:是一种以键-值(key-value)存储数据的结构,我们只要输入待查找的值即key,就可以找到其对应的值即value。哈希的思路很简单,把值放在数组里,用一个哈希函数把key换算成一个确定的位置,然后把value放在数组的这个位置。 不可避免的,多个key值经过哈希函数的换算,会出现同一个值得情况。处理这种情况的一种方法是,拉出一个链表。**哈希

2021-03-09 11:30:29 150 1

原创 事务隔离:为什么你改了我还看不见?

事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在Mysql中,事务支持是在引擎层实现的。Mysql是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如Mysql原生的MyISAM引擎就不支持事务,这也是MyISAM被InnoDB取代的重要原因之一隔离性和隔离级别事务特性:有ACID(Atomicity、Consistency、Isolation、Durability,即原子性,一致性,隔离性,持久性)当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read)、不可重复

2021-02-06 10:23:03 75

原创 下载网络图片到本地

通过开辟线程块下载图片,亲测好用,直接上代码:package com.xunma.web.test;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;/** * @author tangn * @date 2021/1

2021-01-30 13:46:39 178 1

原创 日志系统: 一条sql更新语句是如何执行的

从一个表的一条更新语句说起,表的创建语句如下:create table T(ID int primary key, c int);这个表有一个主键ID和一个整形字段c如果要将ID=2这一行的值增加1,sql语句就会这么写:update T set c=c+1 where ID = 2;首先,查询语句的那一套流程,更新语句也是同样会走一遍和查询流程不一样的是,更新流程还涉及两个重要的日志模块,即redo log(重做日志)和binlog(归档日志)。redo log(物理)日志模块如果每一

2021-01-29 11:12:31 172 3

原创 一条sql查询语句是如何执行的

一、mysql分为server层跟存储引擎server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖mysql的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等存储引擎层负责数据的存储和提取,其架构模式是插件式的,支持InnoDB(默认、常用)、MyISAM、Memory等多个存储引擎在create table语句中使用engine=memory,来指定使用内存引擎创建表,不同存储引擎的表数据存期方式不同

2021-01-29 11:08:24 82

原创 Date的时间比较

Date.before()、Date.after()、Date.equals()获取本地时间和指定时间进行比较,此处使用了date时间比较的after方法,代码如下public static void main(String[] args) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); // 获取当天时间的第二天

2020-10-30 19:00:38 1243

原创 Stream

函数式接口java8提供了很多新的特性,Lambda表达式,函数式接口,Optional,新的日期类api。在聊Stream之前我们先来说下什么是函数式接口Lambda表达式很多人都在使用了,而函数式接口则是为了支持Lambda表达式,Java8提供了很多内置的函数式接口,如Runnable,Comparator等是从原有的API升级来的,而有些是Java8新增的,如Consumer等。@FunctionalInterfacepublic interface Runnable { publi

2020-10-29 11:39:33 154

原创 Lombok

LOMBOK使用Lombok减少样板代码使用lombok可以减少在应用程序中的许多部分中几乎没有改动的情况下重复的代码,通过简单的注释集来代替某些重复的代码Lombok的使用idea需要在file -> settings -> plugins中下载安装lombok插件jar文件仍然需要包含在使用project lombok批注的任何项目的类路径中,maven用户可以将lombok作为依赖项添加到项目pom.xml文件中<依赖项> <依赖性>

2020-10-29 11:37:42 209

原创 Swagger的使用

此篇文章涉及到其他方面,例如:Resultful api规范,https协议一、在开篇讲解swagger之前,首先来了解下resultful api规范1、Resultful简介:Resultful是一种比较流行的一种API规范,结构清晰,便于前端开发者进行区分访问接口资源2、Resultful风格接口:Rest是一种架构风格,表示的是Representational State Transfer表现状态转移,客户端通过访问url来获得网络上的资源表征,获得资源表征来抓变应用的状态。网络中的所有数

2020-10-29 11:35:52 347 1

原创 Swagger的配置

一、jar的引入<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version></dependency><!-- https://mvnrepository.com/artifact/io.springfox/spring

2020-09-23 15:13:35 239

原创 idea实现git项目回滚

要回滚的项目右键,点击git,点击Show History选择要回滚的地方,右键Copy Revision Number可以看到刚刚copy后的内容是    d507950407ad1ee3e788b5a61320292d2a1acfb9然后项目右键,点击git,点击Repository,点击Reset HEAD…可以看到如下页面修改成下图所示    To Commit里面填写的是刚刚copy过来的内容

2020-09-23 14:49:40 362

原创 Java获取jpg图片的高、宽

直接看代码

2020-09-16 11:54:51 252

原创 Maven的下载安装及环境变量配置

一、Maven简介maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的项目管理工具软件,由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。总结:Maven是一个项目管理工具,主要用于Java平台的项目构建、依赖管理和项目生命周期管理二、Maven下载下载地址:http://maven.apache.org/download.cgi选择第二行第一列的压缩包下载三、Maven安装将下载好后的安装包直接进行

2020-07-23 16:49:36 142

原创 JDK的下载安装及环境变量配置

JAVA-JDK的安装及环境变量配置为什么要安装jdk?因为基于java开发的东西都需要它一、下载安装包JDK1.8百度云下载路径:链接:https://pan.baidu.com/s/1bt-1cVuDvJMC9Z9_o5BJJg提取码:pel6网盘放的是jdk1.8版本中的1.8.0_152的版本如果大家想下载别的版本,可以去官网:www.oracle.com下载点击Support,可以看到下面这个页面点击Software Downloads选择java选择Java (J

2020-07-23 13:57:35 239

空空如也

空空如也

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

TA关注的人

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