自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL核心参数优化文件my.ini详解

MySQL核心参数优化文件my.ini详解

2023-01-30 22:13:00 1372

原创 java对象驼峰命名属性转JSON下划线命名属性

jackson实现:import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.PropertyNamingStrategy;public static void main(String[] args) throws JsonProcessingException

2021-09-02 09:35:17 936

原创 【Spring】定时任务@Scheduled多线程问题

SpringBoot使用@scheduled定时执行任务的时候是在一个单线程中,如果有多个任务,其中一个任务执行时间过长,则有可能会导致其他后续任务被阻塞直到该任务执行完成。也就是会造成一些任务无法定时执行的错觉。可以通过如下代码进行测试: @Scheduled(cron = "0/1 * * * * ? ") public void deleteFile() throws InterruptedException { log.info("111delete success, t

2021-08-30 15:00:23 8240 1

原创 基金TA系统简介

本文将汇总自己在平时工作中了解的基金TA系统以及相关账户知识,相关资料来源于工作总结以及网络。本篇文章主要按照以下几点来介绍基金TA系统基金账户知识人们购买基金可在场内购买,既在证券营业部开设证券账户,通过证券交易所的交易系统购买基金份额,基金份额托管在证券营业部并登记在证券登记系统中。也可以在通过基金公司或者其代销机构开设基金账户,购买基金,其份额托管在基金公司或者代销机构,并登记在中登TA系统中。以下以在场外购买开放式基金为场景,介绍TA系统以及相关账户知识。基金TA系统TA系统全称为开

2021-02-12 22:48:51 6342

原创 spring batch使用读数据的问题

概述本篇博客是记录使用spring batch做数据迁移时时遇到的一个关键问题:数据迁移量大时如何保证内存。当我们在使用spring batch时,我们必须配置三个东西: reader,processor,和writer。其中,reader用于从数据库中读数据,当数据量较小时,reader的逻辑不会对内存带来太多压力,但是当我们要去读的数据量非常大的时候,我们就不得不考虑内存等方面的问题,因为若数据量非常大,内存,执行时间等等都会受到影响。问题是什么在上面的内容当中我们已经提到了,我们面临的问题是数据

2021-02-09 21:38:34 1170 2

原创 将Vue页面导出为pdf格式并进行下载

1.使用npm下载两个插件a.将html页面转换成图片npm install --save html2canvas b.将图片生成pdfnpm install jspdf --save2.在utils文件夹中创建一个名字叫个htmlToPdf.js的文件,内容如下:// 导出页面为PDF格式import html2Canvas from 'html2canvas';import JsPDF from 'jspdf';export default { install(Vue, opti

2021-02-09 20:49:52 401

原创 在vue项目中使用rem适配实现h5页面

1.安装依赖npm install amfe-flexible -Snpm install postcss-px2rem -S2.引入lib-flexible// 在入口main.js中 引入 lib-flexibleimport "amfe-flexible/index.js";注意事项(important): 由于flexible会动态给页面header中添加标签,所以务必请把目录 public/index.html 中的这个标签删除!!!3.配置post-px2remvuec

2020-12-30 10:28:02 918

原创 h5 rem是如何实现自适应布局的?

摘要:rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高。本文讲的是如何使用rem实现自适应。 rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了。但是我对rem综合评价是用来做web app它绝对是最合适的人选之一。rem是什么?rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起

2020-12-30 10:22:15 1266

原创 vue element-ui按需引入

1.安装elementuinpm i element-ui -S2.按需引入需要下载插件npm install babel-plugin-component -D3.然后,将 .babelrc 修改为:{ "presets": [ ["env", { "modules": false, "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]

2020-10-12 16:40:48 378

原创 vue实现动态改变title

想要实现vue动态改变页面title,需要给每个页面设置标题。并且在路由发生变化时修改页面titlerouter - index.jsconst router = new Router({ mode: 'history', routes: [ { path: '/index', name: 'index', component: Index, meta:{

2020-09-27 13:38:29 394

原创 SpringBoot 集成阿里云 RocketMQ 实战之快速入门

RocketMQ 是什么Github 上关于 RocketMQ 的介绍:RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件。具有以下特性:支持发布/订阅(Pub/Sub)和点对点(P2P)消息模型在一个队列中可靠的先进先出(FIFO)和严格的顺序传递支持拉(pull)和推(push)两种消息模式单一队列百万消息的堆积能力支持多种消息协议,如 JMS、MQTT 等分布式高可用的部署架构,满足至少一次消息传递语义提供 docker 镜像用于隔离测试和云集群部署提供配置、指标

2020-09-27 13:34:13 537

原创 搞清楚线上CPU100%,频繁FullGC排查

处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题。当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出 jstack 和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致

2020-09-27 13:34:04 257

原创 处理百万级以上的数据提高查询速度的方法

处理百万级以上的数据提高查询速度的方法:1.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这

2020-09-27 13:33:48 761

转载 100万条数据的一张表,如何查询优化?

1.两种查询引擎查询速度(myIsam 引擎 )InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count()或者count(主键),加上where col 条件。其中col列是表的主键之外的其他具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。

2020-09-27 13:33:39 413

原创 volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))

volatile是java虚拟机提供的轻量级的同步机制:1.保证可见性:线程之间可见性(及时通知)2.不保证原子性3.禁止指令重排先了解一下jvm同步由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(或者称为栈空间),工作内存是每个线程的私有数据区域,而java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝到自己的栈空间,然后对变量进行操作,操作完成后再将变

2020-09-27 13:33:29 126

原创 线程池ThreadPool,线程池底层ThreadPoolExecutor方法七大参数,拒绝策略,以及实际开发中高并发下用到哪个线程池?

为什么要用线程池基本的三个线程池的底层就是ThreadPoolExecutor类ExecutorService threadPool = Executors.newFixedThreadPool(int);//固定线程数的线程池,,执行长期的任务,性能好ExecutorService threadPool = Executors.newSingleThreadExecutor(); //单线程的线程池,,一个任务一个任务执行ExecutorService threadPool = Executor

2020-09-27 13:33:13 137

原创 CAS的底层原理

CAS是什么CAS的全程为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一一个过程,并且原语的执行必须

2020-09-27 13:33:03 139

原创 JAVA中的COPYONWRITE容器

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。1. 什么是CopyOnWrite容器C

2020-09-27 13:32:54 138

原创 Java内存模型(JMM)

Java 内存模型基础什么是 Java 内存模型(JMM-共享内存模型)内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节。(共享变量是存放在堆内存中,对于局部变量等不会在线程之间共享)Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1.5版本对其进行了重构,现在的Java8仍沿用了Java1.5的版本。Java 线程之间

2020-09-27 13:32:46 257

原创 对公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解

本篇文章主要是记录自己的学习笔记,主要内容是:公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解,并实现一个自旋锁。一、公平和非公平锁(1)公平锁和非公平锁是什么?公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的循序,有可能后申请的线程比先申请的线程优先获取锁。但是,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。(2)公平锁和非公平锁的区别是什么?并发包中ReentrantLock的创建可以指定构造函数的boolea

2020-09-27 13:32:37 304

原创 java并发之CountDownLatch、Semaphore和CyclicBarrier

AVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。CountDownLatchCountDownLatch是一个计数器闭锁,主要的功能就是通过await()方法来阻塞住当前线程,然后等待计数器减少到0了,再唤起这些线程继续执行。 这个类里主要有两个方法,一个是向下减计数器的方法:countdown(),其实现的核心代码如下:public boolean tryReleaseShared(int releases) {

2020-09-27 13:32:22 209

原创 详解synchronized与Lock的区别与使用

技术点:1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。2、Thread的几个重要方法:我们先了解一下Thread的几个重要方法。a、start()方法,调用该方法开始执行该线程;b、stop()方法,调用该方法强制结束该线程执行;c、join方法,调用该方法等待该线程

2020-09-27 13:31:48 116

原创 Java并发编程:阻塞队列

Java并发编程:阻塞队列在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么

2020-09-27 13:31:37 81

原创 Java-线程池专题详解

实现多线程的三种方式,继承Thread,实现Runnable 和 实现 Executor接口 ,具体参考:Java 多线程 三种实现方式1、什么是线程池: java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的

2020-09-27 13:31:18 1274

原创 GC Root总结

判断一个对象是否可以被回收1.引用计数法(了解即可)2.可达性分析所谓的’GC roots’或者说tracing GC 的‘根集合’ 就是一组必须活跃的引用。基本思路就是通过一系列名为‘GC roots’的对象作为起点,从这个被称为GC roots的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明对象不可用,也即给定一个集合的引用作为根出发,通过引用关系遍历对象图,能够遍历到的(可达性的)对象就被判定为存活,没有被遍历到的自然被判定为死亡。...

2020-09-27 13:31:07 198

原创 GC四大算法

什么是GC分代收集算法次数上频繁收集Yong区:Minor GC次数上较少收集Old区:Full GC基本不动的Perm区(1.8被元空间代替)GC四大算法前奏:为了解决引用计数法的循环引用问题, Java 使用了可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象, 不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。第

2020-09-27 13:30:49 583

原创 SpringBoot项目优化和Jvm调优

项目调优作为一名工程师,项目调优这事,是必须得熟练掌握的事情。在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。在这边有一篇比较好的文章,推荐给大家!SpringBoot项目配置Tomcat和JVM参数一、修改配置文件关于修改配置文件application.properties。SpringBoot项目详细的配置文件修改文档其中比较重要的有:server.tomcat.max-connections=0 # Maximum number of connect

2020-09-27 13:30:38 395

原创 Springboot 项目JVM优化

一,Spring Boot 扫包优化@SpringBootApplication注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量

2020-09-27 13:30:10 197

原创 Java四种引用类型

引用类型简介Java开发者肯定都很熟悉java中的4种引用类型,它们从强到弱分别是:但可能大多数对4种引用类型的理解都只停留在概念的记忆上,而并不了解四种引用的实现原理。下面我们结合源代码了解下四种引用的实现原理。当然在了解四种引用的实现原理之前,首先得了解下JVM中实现对象可达性判断的原理。对象可达性判断目前,大多数JVM都是使用可达性分析算法来判断对象的是否可达。可达性分析算法以GC Roots对象作为起始点进行搜索。当一个对象与GC Roots对象没有任何引用链相连时(也即引用有向图中从GC

2020-09-27 13:29:58 159

原创 MyBatis底层原理执行分析

1.MyBatis 流程图二。 运行过程中涉及到的类或接口1.1.1 Resources©用于加载 MyBatis 核心配置文件1.1.2 XMLConfigBuilder©用于解析 xml 文件(核心配置文件)1.1.3 Configuration©用于存放 xml 文件解析后的结果1.1.4 DefaultSqlSessionFactory©是 SqlSessionFact...

2020-09-27 13:29:36 106

原创 Java并发多线程-知识点1

1、说一说自己对于 synchronized 关键字的了解从JVM层面的monitor对象了解synchronize的底层实现:首先Synchronized关键字他可以保证他所修饰的方法或者代码块在任何时候都只能有一个线程可以执行。他底层的监视器锁(monitor)是依赖操作系统的Mutex Lock来实现的,因为线程的挂起和唤醒都需要操作系统的帮助,而操作系统实现线程的切换是需要从用户状态转换到内核状态,这个时间比较长,时间成本比较高在JDK1.6之前Synchronize是一种重量级锁,但是在J

2020-09-27 13:29:22 177

原创 Java并发多线程-知识点2

一.谈谈你对volatile的理解1.volatile是Java虚拟机提供的轻量级的同步机制1.1保证可见性1.2不保证原子性1.3禁止指令重排2.JMM你谈谈JMM(Java内存模型,简称JMM)本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:1.线程解锁前,必须把共享变量的值刷新回主内存。2.线程加锁前,必须读取主内存的最新值到自己的工作内存。3.加锁解锁是同

2020-09-27 13:29:10 105

原创 MySql 索引的命中规则

在解释索引命中规则的前提下, 先了解一下如下原则:最左匹配原则:最左前缀匹配原则, mysql会一只向右匹配直到遇到范围查询(>, <, between, like)就停止匹配, 比如a=1 and b=2 and c>3 and d=4 如果建立了(a,b,c,d)顺序的索引, d是用不到索引的, 如果建立(a,b,d,c)的索引, 则都可以使用到, a,b,d的顺序可以任意调整.= 和 in 可以乱序, 比如 a=1 and b=2 and c=3 建立(a,b,c)索引可以任意

2020-09-27 13:28:35 532

原创 vue.js通过路由跳转页面的三种方式

现有如下场景,点击父组件的li元素跳转到子组件中,并携带参数,便于子组件获取数据。<li v-for="article in articles" @click="getDescribe(article.id)">methods:方案一: getDescribe(id) {// 直接调用$router.push 实现携带参数的跳转 this.$router.push({ path: `/describe/${id}`,

2020-09-27 13:27:15 1573

原创 Dubbo知识点

1.dubbo是什么?dubbo是阿里的开源的基于java的高性能rpc分布式服务框架,现已(2018)成为Apache基金会的孵化项目2.为什么要用到dubbo(你们技术选型的时候为什么要考虑到用它)?因为它是阿里的开源项目,国内很多的互联网都在用。已经经过了很多线上的考验。内部使用了Netty、Zookeeper确保了高性能高可用性。使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,是前端应用能更快的响应多变的市场需求。3.Dubbo的协

2020-07-26 10:32:40 430

原创 List的线程安全

非线程安全的原因ArrayList与LinkedList都是线程不安全的,以ArrayList的add方法源代码为例:public boolean add(E e) { ensureCapacityInternal(size + 1); elementData[size++] = e; return true;}假如线程A和线程B分别往List中插入A和B。其一:elementData[size++] = e;这行代码不是原子操作 是分两部执行的 第一步:element

2020-07-26 06:44:34 284

转载 全面理解Java内存模型(JMM)及volatile关键字

https://blog.csdn.net/javazejian/article/details/72772461?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.

2020-07-25 22:28:25 71

原创 Postgresql 创建序列

首先创建序列-- 创建序列create sequence seq_user_camera_version increment by 1 minvalue 1 no maxvalue start with 1;第二步创建表-- 建表,并用上面的序列作为主键自增序列CREATE TABLE public.user_camera_version ( id int4 NOT NULL DEFAULT nextval('seq_user_camera_version'::regclass),

2020-07-20 15:21:34 3943

原创 redis-redisTemplate模糊匹配删除

2020-07-20 14:03:42 616

原创 Vuex 详细教程

最详细的Vuex教程什么是Vuex?vuex是一个专门为vue.js设计的集中式状态管理架构。状态?我把它理解为在data中的属性需要共享给其他vue组件使用的部分,就叫做状态。简单的说就是data中需要共用的属性。引入Vuex(前提是已经用Vue脚手架工具构建好项目)1、利用npm包管理工具,进行安装 vuex。在控制命令行中输入下边的命令就可以了。 npm install vuex --save要注意的是这里一定要加上 –save,因为你这个包我们在生产环境中是要使用的。2、新建一个

2020-07-12 12:50:06 181

空空如也

空空如也

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

TA关注的人

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