自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 300万数据导入优化方案,从80s优化到8s(实测)

前景在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。写本文的背景是因为在工作中遇到了大数据的导入和导出,问题既然来了逃跑不如干掉它!!!只要这一次解决了,后期遇到同样的问题就好解决了。废话不多说,开始撸起来!!!1 传统POI的的版本优缺点比较其实想到数据的导入导出,理所当然的会想到apache的poi技术,以及Excel的版本问题。

2022-11-03 15:09:30 543 1

原创 SQL优化

SQL优化

2022-10-29 17:42:18 216

原创 spring的循环依赖

一级缓存为:singletonObjects二级缓存为:earlySingletonObjects三级缓存为**:singletonFactories**

2022-07-01 16:07:42 301

原创 spring的简易流程

代码如下:首先需要一个ApplicationContext,输入参数也是一个AppConfig配置类(主要来定位到bean的目录)在ZhouyuApplicationContext需要是创建一个bean,怎么创建一个bean呢?创建一个Map beanDefinitionMap = new HashMap();用来存放bean的定义(单例还是原型,是否懒加载,class的类型等),key为bean的名字。创建一个Map...

2022-06-30 16:14:47 114

原创 BlockingQueue阻塞队列

BlockingQueue阻塞队列:顾名思义起到阻塞的作用,将生产者和消费者隔离起来,提高安全性。

2022-06-27 16:26:09 218

原创 JMM(Java的内存模型)

JMM(Java的内存模型)主要是针对可见性、有序性、原子性三方面的规则。可见性:有序性:原子性:

2022-06-19 19:02:08 78

原创 Kafka相关1

参考官网是学习kafka的最好途径kafka官网由于Kafka是用Scala语言开发的,运行在JVM上,因此在安装Kafka之前需要先安装JDKyum install java-1.8.0-openjdk* -ykafka依赖zookeeper,所以需要先安装zookeeperwget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gztar -zxvf apac

2021-12-07 11:26:07 59

原创 Rabbitmq

Rabbitmq的高级特性1.确认机制(producer—>rabbitmq broker)从生产者发布消息到broker的这个过程,broker接收到消息的确认。这里分两种状态confirm:生产者把消息发送到broker时,可能出现两种状态,1.ack(表示broker接收成功) 2.nack(表示broker拒收消息)return:表示broker接收消息成功,但是没有队列去存放消息,最终会把消息退回给生产者。channel.confirmSelect(); ch

2021-11-23 20:36:23 1365

原创 中间件MQ

一说到 MQ ,大家想到的是它的作用1.应用解耦(提高容错性、维护性)2.异步提速3.削峰填谷四种mq的区别:rabbitmq的架构学习任何的技术,如果有官网那是最好的呢,因为网页上的其他技术都是基于官网出来的。RabbitMQ 官方地址:http://www.rabbitmq.com/从官网得知,有六种工作模式:...

2021-11-22 09:47:11 1217

原创 zookeeper的搭建

单台机器:wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gztar -zxvf apache-zookeeper-3.5.8-bin.tar.gzcd apache-zookeeper-3.5.8-bincp zoo_sample.cfg zoo.cfg bin/zkServer.sh start conf/zoo.cfgps -ef|grep

2021-10-19 17:13:13 308

原创 redis缓存和性能

缓存穿透:穿透从字面上理解,透过去,用户访问了一个缓存和数据库都不存在的key,这样的话,缓存的意义就不存在了,一下子数据库的压力就大了。解决方法:1.对不存在的key缓存起来,并增加一个过期的时间60s2.使用布隆过滤器,经过布隆过滤器的过滤,key不存在的,肯定不存在。配合方法1缓存击穿:一大部分缓存的key在某一时刻全部失效,此时这一部分的访问请求会直接作用在数据库上面,增加了数据库的压力。解决方法: 给这些key在失效时间内,增加一小段随机的时间,让这些key不会在同一时间内全部失效。缓

2021-10-14 17:42:05 237

原创 redis的高并发分布式锁

高并发情形下:redis需要加锁redis加了锁之后,需要解锁。加锁和解锁之间,可能服务器出现问题,可以用try-fianlly来保证解锁。如果还没执行到finally的时候,系统就崩溃了,那么这个锁就永远锁住了,怎么处理?所以我们需要给锁加一个过期的时间,防止出现锁加上去没有释放的情形。如果加的锁,业务还没执行完成,过期时间时间到了,那么这个锁就失效了,怎么弄?增加一段锁续命的逻辑。如果第一个加的锁,被后面的请求解锁了,怎么处理?给每个用户的请求加上自己的user或者加上自己的线程的id。上

2021-10-11 12:01:24 248

原创 redis集群和水平扩展

redis集群的搭建redis集群的搭建流程是建立在redis的主从和哨兵搭建的基础上。第一步:在第一台机器的/usr/local下创建文件夹redis-cluster,然后在其下面分别创建2个文件夾如下(1)mkdir -p /usr/local/redis-cluster(2)mkdir 8001 8004第一步:把之前的redis.conf配置文件copy到8001下,修改如下内容:(1)daemonize yes(2)port 8001(分别对每个机器的端口号进行设置)(3)pid

2021-10-08 16:55:23 130

原创 redis持久化、主从、哨兵

redis的持久化策略rdb(快照)以二进制的形式存放于dump.rdb文件中。可以在配置文件中redis.conf中设置缓存同步的策略,比如多少时间同步一次,多少次操作同步一次等,后台会根据bgsave指令,进行异步的同步数据,当然也可以手动执行save指令,进行数据的同步。aof以指令的形式存放于appendonly.aof文件中。需要在redis.conf中开启aof:appendonly yes,可以设置多久同步一次,如果相同的指令很多,可以设置自动重写的频率和大小。两者各有优缺点。re

2021-09-27 17:50:53 67

原创 redis五种数据及其应用场景

redis的安装流程,见官网:redis下载/安装建议用稳定版5种常用类型的应用场景String类型:计数器INCR article:readcount:{文章id} GET article:readcount:{文章id}Web集群session共享spring session + redis实现session共享分布式系统全局序列号INCRBY orderId 1000 //redis批量生成序列号提升性能Hash类型:HSET key field valu

2021-09-24 17:27:34 96

原创 Mysql事务相关

事务MySQL的事务的四大特性(ACID):具体的概念网上资料一大把原子性 一致性 隔离性 持久性因为事务隔离性的不同,可能产生一下数据相关问题:具体的概念网上资料一大把脏写 脏读 不可重复读 幻读所以MySQL根据隔离性,把事务分为几个级别:具体的概念请百度读未提交 读已提交 可重复读 串行化锁解读表锁:锁住整个表,一般用于数据库迁移读锁:读操作(自己session和其他session),写操作(自己session会报错,其他session会阻塞) 写锁:

2021-07-18 19:11:44 63

原创 Mysql索引优化

分页的优化:select * from employees limit 10000,10;要想优化这个SQL,首先得理解这条SQL是怎么执行的。MySQL会从数据库把前10010条数据都查询出来,然后过滤掉前10000条记录,留下后面10条记录,最终返回给客户端。优化手段:尽量返回少的字段在排序阶段,尽量走索引如果employees这张表的主键是自增且连续的,可以这样优化走主键select * from employees where id > 10000 limit 10;.

2021-07-16 20:17:53 82

原创 Mysql索引优化

1.联合索引的第一个字段是范围查询,一般不走索引优化措施:强制使用索引force index 使用覆盖索引2.in或or在数据量大的情况下会走索引,数据量小的话全表扫描3.like kk%一般情况下会走索引覆盖索引中使用了索引下推。使用联合索引查询的时候,不仅仅只拿联合索引的第一个字段进行过滤,5.6之后,会把该SQL里面涉及的联合索引的字段都拿出来进行过滤,最后在回表查询,这样就减少了与数据库的的交互次数,减少了开销。用于只能二级索引。Mysql如何选择合适的索引?可以...

2021-07-14 23:00:59 101

原创 MySQL的内部组件结构

如图所示:SQL的执行顺序bin-log日志binlog是Server层实现的二进制日志,他会记录我们的cud操作。Binlog有以下几个特点:1、Binlog在MySQL的Server层实现(引擎共用)2、Binlog为逻辑日志,记录的是一条语句的原始逻辑3、Binlog不限大小,追加写入,不会覆盖以前的日志 所以说,如果我们不小心把库删了,可以用bin-log来恢复数据。只能恢复bin-log开启之后的数据,之前的数据恢复不了,因为没有记录到bin-log里面。具体操作可以参考网上.

2021-07-13 18:36:25 83

原创 Explain的解读

Explain使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是执行这条SQL注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中id:表示sql中几个select的执行顺序,id越大,执行优先级越高。select_type:执行的复杂程度,有simple,primary,derived等table:执行的是哪

2021-07-12 13:14:16 161

原创 MySQL的索引

MySQL的索引索引可以理解为排好序的数据结构,为什么要用索引呢???当然有前提,数据量要足够的大,小数据量就没必要建立索引的,因为索引也是占用空间的。数据结构很多,MySQL到底使用的是哪种数据结构呢???四种数据结构如图显示二叉树红黑树(类似二叉树)B-TREEB+TREEHash表MySQL索引普遍用的是第四种。现在讲讲第三种和第四种的区别。B-TREE和B+TREE的区别。相同点:数据结构一样,节点都是从左到右按顺序增大排列的。不同

2021-07-11 18:01:40 52

原创 Arthas和常量池以及对象池

阿里巴巴的开源JVM调优工具。Arthas官网解释一切问题。Arthas不熟悉的话,直接查看快速入门,怎么下载,怎么开始玩。哪些指令是我们经常用到的。1.dashboard2.thread3.thread pid4.thread b5.jad xxx.class 反编译代码看是否正确6.ognl @对象全路径@属性,可以改变属性的值对GC日志的分析可以项目一启动就加载日志,参数如下:-Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+Pr

2021-07-09 22:59:27 280

原创 JVM调优工具

JVM调优工具很多,底层还是这些指令在运行,可能不同的工具封装了这些指令。1.jmapjmap用来查看内存的信息。jmap -histo pid > ./log.txtjmap -heap pidjmap -dump:format=b,file=eureka.hprof pid2.jstack查看死锁的情况查看堆中的信息查看jvm进程中cpu飙升的原因,可以定位到代码的行数jstack -pidtop -p jstack 19663|grep -A 10 4cd03.jin

2021-07-07 23:33:31 89

原创 垃圾收集器G1和ZGC

随着jdk的发展,垃圾收集器也是在不停的发展中……首先看图:1. G1收集器(-XX:+UseG1GC)从图中我们看得出,堆内存分割成了一个个小的region,每个region可能是eden、可能是s、可能是old,可能是h区。G1默认把堆内存分成2048个region。每个region是2的幂次方m。大对象存于h区,而不是直接放在old区。默认新生代占堆内存5%,有参数可以调节。G1收集器的执行过程:和CMS比较,初始标记,并发标记,最终标记几乎一样。差别在于筛选回收。筛选回收会STW,相对

2021-07-06 21:46:09 229

原创 垃圾收集器相关

jvm中垃圾是怎么收集的呢???1.垃圾收集算法1.1标记-复制:用于Eden1.2标记-清除:用于Old1.3标记-整理:用于Old2.垃圾收集器2.1Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC)新生代采用复制算法,老年代采用标记-整理算法。2.2Parallel Scavenge收集器(-XX:+UseParallelGC(年轻代),-XX:+UseParallelOldGC(老年代))新生代采用复制算法,老年代采用标记-整

2021-07-05 18:58:41 56

原创 Java对象的创建相关

上面思维导图表示的是类加载的整个流程。既然是分配内存,我们得知道一个类有多大???怎么查看呢??下面依赖可以查看一个类的大小<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version></dependency>其中涉及到:1.指针.

2021-07-04 16:01:31 48

原创 JVM类加载机制

学习了这么长时间,对于一个类是怎么被加载的一直不清楚。想找一个源码来看看,但是又不知道从哪里下手,真是有点尴尬。机会来了,机会来了……首先我们通过一张图来稍微了解一下类是什么来加载的???类加载器:引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包应用程序类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类自

2021-06-30 21:18:13 39

转载 CPU密集型 vs IO密集型

CPU密集型(CPU-bound)CPU密集型也叫计算密集型,指的是系统的硬盘、内存性能相对CPU要好很多,此时,系统运作大部分的状况是CPU Loading 100%,CPU要读/写I/O(硬盘/内存),I/O在很短的时间就可以完成,而CPU还有许多运算要处理,CPU Loading很高。在多重程序系统中,大部份时间用来做计算、逻辑判断等CPU动作的程序称之CPU bound。例如一个计算圆周率至小数点一千位以下的程序,在执行的过程当中绝大部份时间用在三角函数和开根号的计算,便是属于CPU bound

2021-03-26 11:23:17 104

原创 IDEA创建类时添加类注释,已有的类补充类注释(详细)

IDEA创建类时添加类注释,已有的类补充类注释idea创建类时添加类注释(细节)File -> Settings -> Editor -> File and Code Templates[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xb8ynrsm-1605753222841)(IDEA创建类时添加类注释,已有的类补充类注释(详细).assets/1.png)]创建一个模板Includes页签,新建一个java_header模板(后面有一些可用的模

2020-11-19 10:34:30 1825

原创 Linux>>CentOS 7镜像下载

CentOS 7镜像下载官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/step1: 进入下载页,选择阿里云站点进行下载Actual Country 国内资源 Nearby Countries 周边国家资源阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/每个链接都包括了镜像文件的地址、类型及版本号等信息选择当前国家资源区站点下载,获取资源速度比较快step1: 进入阿里

2020-11-11 22:58:30 360

原创 java log4j日志级别配置详解

1.1在项目的classpath下或者resource包下(maven项目)新建一个log4j.properties文件,初始项目配置如下参数就足够了,更详细配置可继续看1.4 log4j日志级别配置;#通过根日志记录器指定日志级别及输出源 #日志输出的优先级: debug < info < warn < error < fatal#定义根日志记录器的日志级别(info)及输出源的别名(console,myFile)#该定义让日志在控制台和文件输出,并且只输出info级别

2020-10-21 10:51:28 1473

原创 SpringMVC的详细流程(一)

SpringMVC的详细流程Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。与之相反的是基于组件的、事件驱动的Web框架,如Tapestry、JSF等。  Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是Dispatcher

2020-09-25 18:08:33 202

原创 Java计时器StopWatch

一、最简单的计时在我们的程序中不免需要对某一个运算或者方法进行计时,以便我们来观察该运算或方法是否符合我们的预期,所以在我们刚开始接触 Java 的时候都能写出类似下面这样的代码来计时:```javapublic static void main(String[] args) { Long startTime = System.currentTimeMillis(); doSomeThing(); Long endTime = System.currentTimeMillis();

2020-09-25 17:20:24 579

原创 如何使用log.debug()

log4j是一个开源的日志,共分为六个等级:LOG、DEBUG、INFO、WARN、ERROR、和FATAL。DEBUG是其中的一种日志级别。一般我们用这个方法的时候都是这样的: if (log.isDebugEnabled()) { log.debug("CheckSalePackageIsExistsLimit 类: 查询耗时", System.currentTimeMillis() - startReq); }意思是:如果log4j的配置中开启debug

2020-09-23 15:29:30 4369

原创 Idea使用httpclient调用接口

1.、关于下面这种方式呢,不建议使用,因为用了下面的,其实就和postman没区别了2、正确的使用方式2.1、Post请求2.1.1、@RequestBody不写的话,按照下面的正常调用就行了,但是如果写上了里面参数使用了required=true,一定不能让DTO对象为null,否则就会报错org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing 或者将

2020-09-11 10:15:00 1406

转载 Xshell连接centOS7(设置)

0、对于如下配置的宿主机(此处即为windows主机)1、编辑→虚拟网络编辑器 配置完毕后的状态如下:注:(1)其中的子网IP就是根据宿主机的IP修改得来的,即修改第三位。(2)其“NAT设置”配置如右图,是根据子网IP修改最后一位得到的。2、虚拟机→设置→网卡适配器的配置如下图3、cd /etc/sysconfig/network-scriptsvi ifcfg-eno167...

2020-02-29 18:07:38 2085

转载 Intellij IDEA菜单项中Compile、Make和Build的区别

Compile、Make和Build的区别针对Java的开发工具,一般都有Compile、Make和Build三个菜单项,完成的功能的都差不多,但是又有区别。编译,是将源代码转换为可执行代码的过程。编译需要指定源文件和编译输出的文件路径(输出目录)。Java的编译会将java编译为class 文件,将非java的文件(一般成为资源文件、比如图片、xml、txt、poperties等文件)原封不...

2020-01-17 16:50:32 131

原创 DevOps的思想

DevOps概念介绍在DevOps入门篇的开始,我们首先来了解一下DevOps这个概念。从字面上看,DevOps就是Dev + Ops。Dev可以理解为Development,也就是开发;也可以理解为Developer,也就是开发人员。Ops可以理解为Operation,也就是运维;也可以理解为Operator,也就是运维人员。所以从字面上来看,DevOps就是如何开发软件,如何交付软件,如何运...

2019-12-19 14:44:37 265

原创 Thymeleaf的快速了解

开发传统Java WEB工程时,我们可以使用JSP页面模板语言,但是在SpringBoot中已经不推荐使用了。简单说, Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较于其他的模板引擎,它有如下四个极吸引人的特点:动静结合:Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以让美工在浏览器查看页面的静态效果,也可以...

2019-12-19 14:16:01 316

转载 用一个bat文件调用另外两个bat文件

@echo offstart d:\1.batstart c:\2.bat这样是2个任务同时执行,应该怎么改,谢谢@echo offstart /wait d:\1.batstart /wait c:\2.bat@echo offcall d:\1.batcall c:\2.batstart 是在新窗口运行调用的文件,call是在当前的窗口运行。 start /wait是指启动...

2019-12-11 10:27:11 1466

空空如也

空空如也

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

TA关注的人

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