
IT
文章平均质量分 52
儒雅的读书人
这个作者很懒,什么都没留下…
展开
-
300万数据导入优化方案,从80s优化到8s(实测)
前景在项目开发中往往需要使用到数据的导入和导出,导入就是从Excel中导入到DB中,而导出就是从DB中查询数据然后使用POI写到Excel上。写本文的背景是因为在工作中遇到了大数据的导入和导出,问题既然来了逃跑不如干掉它!!!只要这一次解决了,后期遇到同样的问题就好解决了。废话不多说,开始撸起来!!!1 传统POI的的版本优缺点比较其实想到数据的导入导出,理所当然的会想到apache的poi技术,以及Excel的版本问题。转载 2022-11-03 15:09:30 · 645 阅读 · 1 评论 -
SQL优化
SQL优化原创 2022-10-29 17:42:18 · 280 阅读 · 0 评论 -
spring的循环依赖
一级缓存为:singletonObjects二级缓存为:earlySingletonObjects三级缓存为**:singletonFactories**原创 2022-07-01 16:07:42 · 805 阅读 · 0 评论 -
spring的简易流程
代码如下:首先需要一个ApplicationContext,输入参数也是一个AppConfig配置类(主要来定位到bean的目录)在ZhouyuApplicationContext需要是创建一个bean,怎么创建一个bean呢?创建一个Map beanDefinitionMap = new HashMap();用来存放bean的定义(单例还是原型,是否懒加载,class的类型等),key为bean的名字。创建一个Map...原创 2022-06-30 16:14:47 · 168 阅读 · 0 评论 -
BlockingQueue阻塞队列
BlockingQueue阻塞队列:顾名思义起到阻塞的作用,将生产者和消费者隔离起来,提高安全性。原创 2022-06-27 16:26:09 · 289 阅读 · 0 评论 -
JMM(Java的内存模型)
JMM(Java的内存模型)主要是针对可见性、有序性、原子性三方面的规则。可见性:有序性:原子性:原创 2022-06-19 19:02:08 · 104 阅读 · 0 评论 -
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 · 381 阅读 · 0 评论 -
redis缓存和性能
缓存穿透:穿透从字面上理解,透过去,用户访问了一个缓存和数据库都不存在的key,这样的话,缓存的意义就不存在了,一下子数据库的压力就大了。解决方法:1.对不存在的key缓存起来,并增加一个过期的时间60s2.使用布隆过滤器,经过布隆过滤器的过滤,key不存在的,肯定不存在。配合方法1缓存击穿:一大部分缓存的key在某一时刻全部失效,此时这一部分的访问请求会直接作用在数据库上面,增加了数据库的压力。解决方法: 给这些key在失效时间内,增加一小段随机的时间,让这些key不会在同一时间内全部失效。缓原创 2021-10-14 17:42:05 · 310 阅读 · 0 评论 -
redis的高并发分布式锁
高并发情形下:redis需要加锁redis加了锁之后,需要解锁。加锁和解锁之间,可能服务器出现问题,可以用try-fianlly来保证解锁。如果还没执行到finally的时候,系统就崩溃了,那么这个锁就永远锁住了,怎么处理?所以我们需要给锁加一个过期的时间,防止出现锁加上去没有释放的情形。如果加的锁,业务还没执行完成,过期时间时间到了,那么这个锁就失效了,怎么弄?增加一段锁续命的逻辑。如果第一个加的锁,被后面的请求解锁了,怎么处理?给每个用户的请求加上自己的user或者加上自己的线程的id。上原创 2021-10-11 12:01:24 · 282 阅读 · 0 评论 -
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 · 185 阅读 · 0 评论 -
redis持久化、主从、哨兵
redis的持久化策略rdb(快照)以二进制的形式存放于dump.rdb文件中。可以在配置文件中redis.conf中设置缓存同步的策略,比如多少时间同步一次,多少次操作同步一次等,后台会根据bgsave指令,进行异步的同步数据,当然也可以手动执行save指令,进行数据的同步。aof以指令的形式存放于appendonly.aof文件中。需要在redis.conf中开启aof:appendonly yes,可以设置多久同步一次,如果相同的指令很多,可以设置自动重写的频率和大小。两者各有优缺点。re原创 2021-09-27 17:50:53 · 112 阅读 · 0 评论 -
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 · 151 阅读 · 0 评论 -
Mysql事务相关
事务MySQL的事务的四大特性(ACID):具体的概念网上资料一大把原子性 一致性 隔离性 持久性因为事务隔离性的不同,可能产生一下数据相关问题:具体的概念网上资料一大把脏写 脏读 不可重复读 幻读所以MySQL根据隔离性,把事务分为几个级别:具体的概念请百度读未提交 读已提交 可重复读 串行化锁解读表锁:锁住整个表,一般用于数据库迁移读锁:读操作(自己session和其他session),写操作(自己session会报错,其他session会阻塞) 写锁:原创 2021-07-18 19:11:44 · 87 阅读 · 0 评论 -
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 · 128 阅读 · 0 评论 -
Mysql索引优化
1.联合索引的第一个字段是范围查询,一般不走索引优化措施:强制使用索引force index 使用覆盖索引2.in或or在数据量大的情况下会走索引,数据量小的话全表扫描3.like kk%一般情况下会走索引覆盖索引中使用了索引下推。使用联合索引查询的时候,不仅仅只拿联合索引的第一个字段进行过滤,5.6之后,会把该SQL里面涉及的联合索引的字段都拿出来进行过滤,最后在回表查询,这样就减少了与数据库的的交互次数,减少了开销。用于只能二级索引。Mysql如何选择合适的索引?可以...原创 2021-07-14 23:00:59 · 209 阅读 · 0 评论 -
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 · 126 阅读 · 0 评论 -
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 · 200 阅读 · 0 评论 -
MySQL的索引
MySQL的索引索引可以理解为排好序的数据结构,为什么要用索引呢???当然有前提,数据量要足够的大,小数据量就没必要建立索引的,因为索引也是占用空间的。数据结构很多,MySQL到底使用的是哪种数据结构呢???四种数据结构如图显示二叉树红黑树(类似二叉树)B-TREEB+TREEHash表MySQL索引普遍用的是第四种。现在讲讲第三种和第四种的区别。B-TREE和B+TREE的区别。相同点:数据结构一样,节点都是从左到右按顺序增大排列的。不同原创 2021-07-11 18:01:40 · 83 阅读 · 0 评论 -
Java对象的创建相关
上面思维导图表示的是类加载的整个流程。既然是分配内存,我们得知道一个类有多大???怎么查看呢??下面依赖可以查看一个类的大小<dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version></dependency>其中涉及到:1.指针.原创 2021-07-04 16:01:31 · 90 阅读 · 0 评论 -
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 · 415 阅读 · 0 评论 -
DevOps的思想
DevOps概念介绍在DevOps入门篇的开始,我们首先来了解一下DevOps这个概念。从字面上看,DevOps就是Dev + Ops。Dev可以理解为Development,也就是开发;也可以理解为Developer,也就是开发人员。Ops可以理解为Operation,也就是运维;也可以理解为Operator,也就是运维人员。所以从字面上来看,DevOps就是如何开发软件,如何交付软件,如何运...原创 2019-12-19 14:44:37 · 332 阅读 · 0 评论