![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 83
烟火星辰madi
这个作者很懒,什么都没留下…
展开
-
MySQL核心参数优化文件my.ini详解
MySQL核心参数优化文件my.ini详解原创 2023-01-30 22:13:00 · 1401 阅读 · 0 评论 -
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 · 943 阅读 · 0 评论 -
【Spring】定时任务@Scheduled多线程问题
SpringBoot使用@scheduled定时执行任务的时候是在一个单线程中,如果有多个任务,其中一个任务执行时间过长,则有可能会导致其他后续任务被阻塞直到该任务执行完成。也就是会造成一些任务无法定时执行的错觉。可以通过如下代码进行测试: @Scheduled(cron = "0/1 * * * * ? ") public void deleteFile() throws InterruptedException { log.info("111delete success, t原创 2021-08-30 15:00:23 · 8282 阅读 · 1 评论 -
spring batch使用读数据的问题
概述本篇博客是记录使用spring batch做数据迁移时时遇到的一个关键问题:数据迁移量大时如何保证内存。当我们在使用spring batch时,我们必须配置三个东西: reader,processor,和writer。其中,reader用于从数据库中读数据,当数据量较小时,reader的逻辑不会对内存带来太多压力,但是当我们要去读的数据量非常大的时候,我们就不得不考虑内存等方面的问题,因为若数据量非常大,内存,执行时间等等都会受到影响。问题是什么在上面的内容当中我们已经提到了,我们面临的问题是数据原创 2021-02-09 21:38:34 · 1184 阅读 · 2 评论 -
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 · 547 阅读 · 0 评论 -
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 阅读 · 0 评论 -
Java并发多线程-知识点1
1、说一说自己对于 synchronized 关键字的了解从JVM层面的monitor对象了解synchronize的底层实现:首先Synchronized关键字他可以保证他所修饰的方法或者代码块在任何时候都只能有一个线程可以执行。他底层的监视器锁(monitor)是依赖操作系统的Mutex Lock来实现的,因为线程的挂起和唤醒都需要操作系统的帮助,而操作系统实现线程的切换是需要从用户状态转换到内核状态,这个时间比较长,时间成本比较高在JDK1.6之前Synchronize是一种重量级锁,但是在J原创 2020-09-27 13:29:22 · 180 阅读 · 0 评论 -
Java四种引用类型
引用类型简介Java开发者肯定都很熟悉java中的4种引用类型,它们从强到弱分别是:但可能大多数对4种引用类型的理解都只停留在概念的记忆上,而并不了解四种引用的实现原理。下面我们结合源代码了解下四种引用的实现原理。当然在了解四种引用的实现原理之前,首先得了解下JVM中实现对象可达性判断的原理。对象可达性判断目前,大多数JVM都是使用可达性分析算法来判断对象的是否可达。可达性分析算法以GC Roots对象作为起始点进行搜索。当一个对象与GC Roots对象没有任何引用链相连时(也即引用有向图中从GC原创 2020-09-27 13:29:58 · 161 阅读 · 0 评论 -
Springboot 项目JVM优化
一,Spring Boot 扫包优化@SpringBootApplication注解自动获取应用的配置信息,会给应用带来一些副作用。由自动配置( auto-configuration )和 组件扫描 ( component scanning )组成,这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有三方面的影响:1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量原创 2020-09-27 13:30:10 · 199 阅读 · 0 评论 -
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 · 399 阅读 · 0 评论 -
GC四大算法
什么是GC分代收集算法次数上频繁收集Yong区:Minor GC次数上较少收集Old区:Full GC基本不动的Perm区(1.8被元空间代替)GC四大算法前奏:为了解决引用计数法的循环引用问题, Java 使用了可达性分析的方法。通过一系列的“GC roots”对象作为起点搜索。如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的。要注意的是,不可达对象不等价于可回收对象, 不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收。第原创 2020-09-27 13:30:49 · 603 阅读 · 0 评论 -
GC Root总结
判断一个对象是否可以被回收1.引用计数法(了解即可)2.可达性分析所谓的’GC roots’或者说tracing GC 的‘根集合’ 就是一组必须活跃的引用。基本思路就是通过一系列名为‘GC roots’的对象作为起点,从这个被称为GC roots的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明对象不可用,也即给定一个集合的引用作为根出发,通过引用关系遍历对象图,能够遍历到的(可达性的)对象就被判定为存活,没有被遍历到的自然被判定为死亡。...原创 2020-09-27 13:31:07 · 201 阅读 · 0 评论 -
Java-线程池专题详解
实现多线程的三种方式,继承Thread,实现Runnable 和 实现 Executor接口 ,具体参考:Java 多线程 三种实现方式1、什么是线程池: java.util.concurrent.Executors提供了一个 java.util.concurrent.Executor接口的实现用于创建线程池多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的原创 2020-09-27 13:31:18 · 1280 阅读 · 0 评论 -
Java并发编程:阻塞队列
Java并发编程:阻塞队列在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么原创 2020-09-27 13:31:37 · 83 阅读 · 0 评论 -
详解synchronized与Lock的区别与使用
技术点:1、线程与进程:在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。2、Thread的几个重要方法:我们先了解一下Thread的几个重要方法。a、start()方法,调用该方法开始执行该线程;b、stop()方法,调用该方法强制结束该线程执行;c、join方法,调用该方法等待该线程原创 2020-09-27 13:31:48 · 120 阅读 · 0 评论 -
Dubbo知识点
1.dubbo是什么?dubbo是阿里的开源的基于java的高性能rpc分布式服务框架,现已(2018)成为Apache基金会的孵化项目2.为什么要用到dubbo(你们技术选型的时候为什么要考虑到用它)?因为它是阿里的开源项目,国内很多的互联网都在用。已经经过了很多线上的考验。内部使用了Netty、Zookeeper确保了高性能高可用性。使用Dubbo可以将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,可用于提高业务复用灵活扩展,是前端应用能更快的响应多变的市场需求。3.Dubbo的协原创 2020-07-26 10:32:40 · 431 阅读 · 0 评论 -
java并发之CountDownLatch、Semaphore和CyclicBarrier
AVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch、Semaphore和CyclicBarrier。CountDownLatchCountDownLatch是一个计数器闭锁,主要的功能就是通过await()方法来阻塞住当前线程,然后等待计数器减少到0了,再唤起这些线程继续执行。 这个类里主要有两个方法,一个是向下减计数器的方法:countdown(),其实现的核心代码如下:public boolean tryReleaseShared(int releases) {原创 2020-09-27 13:32:22 · 209 阅读 · 0 评论 -
El和Jstl使用知识点
El和Jstl使用知识点使用传统方式在jsp中获取作用域数据(1) 使用传统方式在jsp中获取作用域的数据有什么不方便的地方?答: 缺陷: 1、书写比较繁琐 2、需要导包 3、需要强转(2) 简述El表达式的作用?答:让 jsp 书写起来更加的方便。简化在 jsp 中获取作用域或者请求数据的写法。也会搭配 Jstl 来进行使用。EL表达式获取请求实体和请求头和Cookie数据...原创 2019-07-13 09:59:46 · 252 阅读 · 0 评论 -
ajax实现省市县三级联动
根据mvc分层思想v层(视图层)select.jsp(未封装公共方法)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+":/...原创 2019-07-16 12:12:50 · 512 阅读 · 0 评论 -
当Springboot项目集成Spring Security时有关iframe内容为空,head和body都是空的问题解决
当使用springBoot项目集成Spring Security时,使用前端框架iframe,即使放了权限和路径,iframe框架还会报如下错误当我在使用iframe来展示子页面的时候,发现总是返回,“localhost 拒绝了我们的连接请求。”,并且返回结果"Failed to load response data"问题截图如下:甚至有的说是跨域的问题,但显然我不是,还有的说是http中...原创 2019-08-25 16:24:38 · 1139 阅读 · 1 评论 -
jsp+servlet整合案例总结
jspJSP 全名为 Java Server Pages,中文名叫 java 服务器页面,其根本是一个简化的 Servlet 设计,它 [1] 是由 Sun Microsystems 公司倡导、许多公司参与一起建立的一种动态网页技术标准。特点:本质上还是 Servlet跨平台,一次编写处处运行组件跨平台健壮性和安全性JSP2.0中的一个主要功能是JSP fragment,它的基本...原创 2019-07-12 16:03:15 · 480 阅读 · 0 评论 -
idea 报错 Cannot run program "C:\Program Files\Java\jdk1.8.0_121\bin\java" (in directory "G:\MAVENPROJ
一直用的eclipse,之前配置过idea,工作忙完运行小demo时,突然发现idea的maven 插件无法使用,使用java -version 和 mvn -v 命令输出正常,得到java 和maven 安装正常且正确配置了环境变量。IDEA 实在没用过,无奈求助百度没什么有用的信息,机会渺茫之际在stackflow找到一个相同的问题。经尝试果然有效,现将解决步骤记录下以备以后使...原创 2019-10-07 08:52:31 · 8462 阅读 · 0 评论 -
对公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解
本篇文章主要是记录自己的学习笔记,主要内容是:公平锁、非公平锁、可重入锁、递归锁、自旋锁的理解,并实现一个自旋锁。一、公平和非公平锁(1)公平锁和非公平锁是什么?公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队打饭,先来后到。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的循序,有可能后申请的线程比先申请的线程优先获取锁。但是,在高并发的情况下,有可能会造成优先级反转或者饥饿现象。(2)公平锁和非公平锁的区别是什么?并发包中ReentrantLock的创建可以指定构造函数的boolea原创 2020-09-27 13:32:37 · 313 阅读 · 0 评论 -
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 · 288 阅读 · 0 评论 -
全面理解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 · 73 阅读 · 0 评论 -
Java内存模型(JMM)
Java 内存模型基础什么是 Java 内存模型(JMM-共享内存模型)内存模型描述了程序中各个变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节。(共享变量是存放在堆内存中,对于局部变量等不会在线程之间共享)Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此Java1.5版本对其进行了重构,现在的Java8仍沿用了Java1.5的版本。Java 线程之间原创 2020-09-27 13:32:46 · 262 阅读 · 0 评论 -
JAVA中的COPYONWRITE容器
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。1. 什么是CopyOnWrite容器C原创 2020-09-27 13:32:54 · 138 阅读 · 0 评论 -
CAS的底层原理
CAS是什么CAS的全程为Compare-And-Swap,它是一条CPU并发原语。它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的。CAS并发原语体现在JAVA语言中就是sun.misc.Unsafe类中的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令。这是一种完全依赖于硬件的功能,通过它实现了原子操作。再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一一个过程,并且原语的执行必须原创 2020-09-27 13:33:03 · 141 阅读 · 0 评论 -
线程池ThreadPool,线程池底层ThreadPoolExecutor方法七大参数,拒绝策略,以及实际开发中高并发下用到哪个线程池?
为什么要用线程池基本的三个线程池的底层就是ThreadPoolExecutor类ExecutorService threadPool = Executors.newFixedThreadPool(int);//固定线程数的线程池,,执行长期的任务,性能好ExecutorService threadPool = Executors.newSingleThreadExecutor(); //单线程的线程池,,一个任务一个任务执行ExecutorService threadPool = Executor原创 2020-09-27 13:33:13 · 138 阅读 · 0 评论 -
volatile学习(可见性,不保证原子性,禁止指令重排(双端检索机制))
volatile是java虚拟机提供的轻量级的同步机制:1.保证可见性:线程之间可见性(及时通知)2.不保证原子性3.禁止指令重排先了解一下jvm同步由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(或者称为栈空间),工作内存是每个线程的私有数据区域,而java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝到自己的栈空间,然后对变量进行操作,操作完成后再将变原创 2020-09-27 13:33:29 · 130 阅读 · 0 评论 -
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 · 3945 阅读 · 0 评论 -
redis-redisTemplate模糊匹配删除
原创 2020-07-20 14:03:42 · 618 阅读 · 0 评论 -
创建node web项目服务器运行前端项目
在vue_shop同级创建一个文件夹vue_shop_server存放node服务器使用终端打开vue_shop_server文件夹,输入命令 npm init -y初始化包之后,输入命令 npm i express -S打开vue_shop目录,复制项目打包好dist文件夹,粘贴到vue_shop_server中在vue_shop_server文件夹中创建app.js文件,编写代码如下:const express = require('express')const app = express原创 2020-07-11 22:15:53 · 512 阅读 · 0 评论 -
wget: 无法解析主机地址
CentOS 6 ,虚拟机 NAT网络模式下出现问题[root@hadoop102 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo--2018-10-09 14:22:53-- http://mirrors.aliyun.com/repo/Centos-6.repo正在解析主机 mirrors.aliyun.com... 失败:域名解析暂时失败。wget: 无法.原创 2020-07-11 21:56:04 · 2334 阅读 · 0 评论 -
Spring中的AOP原理
0 为什么需要AOP现在有一个情景:我们要把大象放进冰箱,步骤为:打开冰箱->放入大象->关闭冰箱如果再把大象拿出来,步骤为:打开冰箱->拿出大象->关闭冰箱代码如下: public void put() { System.out.println("打开冰箱..."); System.out.println("放入大象..."); System.out.println("关闭冰箱..."); } publi原创 2020-07-10 21:29:03 · 1648 阅读 · 0 评论 -
100万条数据的一张表,如何查询优化?
1.两种查询引擎查询速度(myIsam 引擎 )InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行。MyISAM只要简单的读出保存好的行数即可。注意的是,当count()语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count()或者count(主键),加上where col 条件。其中col列是表的主键之外的其他具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。转载 2020-09-27 13:33:39 · 419 阅读 · 0 评论 -
处理百万级以上的数据提高查询速度的方法
处理百万级以上的数据提高查询速度的方法: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 · 769 阅读 · 0 评论 -
搞清楚线上CPU100%,频繁FullGC排查
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及 Full GC 次数过多的问题。当然,这些问题最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出 jstack 和内存信息,然后重启系统,尽快保证系统的可用性。这种情况可能的原因主要有两种:代码中某个位置读取数据量较大,导致原创 2020-09-27 13:34:04 · 290 阅读 · 0 评论 -
pgsql 开发sq
时间查询需求前台列表查询 根据修改和创建时间排序(修改时间没有以创建,修改有以修改) 分页查询原创 2020-06-28 16:10:05 · 5458 阅读 · 0 评论 -
Postgresql 数据库插入当前时间命令
摘要此命令适用于远程连接工具如navicat、命令行等使用下面的函数可以获取当前的日期和/或时间∶Date包含日期(如2017-09-25 15:35:12),TIME只有时间(如 15:35:12),其中precision代表毫秒保留的精度,不选默认为6位CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPCURRENT_TIME (precision)CURRENT_TIMESTAMP (precision)LOCALTIMELOCALTIMESTAM原创 2020-06-28 16:04:05 · 11619 阅读 · 0 评论