自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (1)
  • 收藏
  • 关注

原创 java自定义线程池 拒绝策略 附带lombok安装

线程池代码全文:package scy;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.Executors;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;import lombok.Data;@Datapublic class ThreadPoolDemo impl

2020-09-22 13:18:29 168

原创 mysql char和varchar的区别

char的特点char表示定长字符串,长度是固定的;如果插入数据的长度小于char的固定长度时,则用空格填充;因为长度固定,所以存取速度要比varchar快很多,甚至能快50%,但正因为其长度固定,所以会占据多余的空间,是空间换时间的做法;对于char来说,最多能存放的字符个数为255,和编码无关varchar的特点varchar表示可变长字符串,长度是可变的;插入的数据是多长,就按照多长来存储;varchar在存取方面与char相反,它存取慢,因为长度不固定,但正因如此,不占据多余的

2020-08-25 14:35:34 299 1

原创 常用的JVM 调优参数 docker环境下查看内存情况 gc情况

Xms2g:初始化推大小为 2g;Xmx2g:堆最大内存为 2g;XX:NewRatio=4:设置年轻的和老年代的内存比例为 1:4;XX:SurvivorRatio=8:设置新生代 Eden 和 Survivor 比例为 8:2;– XX:+UseParNewGC:指定使用 ParNew + Serial Old 垃圾回收器组合;XX:+UseParallelOldGC:指定使用 ParNew + ParNew Old 垃圾回收器组合;XX:+UseConcMarkSweepGC:指定使用 .

2020-08-24 14:59:51 830

原创 ThreadLocal类原理以及内存泄漏

简介:  ThreadLocal 是一个本地线程副本变量工具类,在每个线程中都创建了一个 ThreadLocalMap 对象,简单说 ThreadLocal 就是一种以空间换时间的做法,每个线程可以访问自己内部 ThreadLocalMap 对象内的 value。通过这种方式,避免资源在多线程间共享。原理:  线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)

2020-08-21 09:45:32 166

原创 SQL查找是否存在数据,选择count(*)还是limit(1)

普遍的写法:SQL:SELECT count(*) FROM table Java:int nums = xxDao.countXxxxByXxx(params);if ( nums > 0 ) { //当存在时,执行这里的代码} else { //当不存在时,执行这里的代码}优化的写法:SQL:SELECT 1 FROM table LIMIT 1Java:Integer exist = xxDao.existXxxxByXxx(params);if ( ex

2020-08-20 09:16:37 1301

原创 jvm垃圾回收调优

新生代调优新生代的特点TLAB thread-local allocation buffer,线程局部缓冲区,线程使用自己私有区域分配对象内存所有的new 操作的内存分配非常廉价死亡对象的回收代价是零;因为采用复制算法,存活的对象使用复制算法到Survivor区域,剩下都是需要被回收的大部分对象用过即死,只有少数对象存活Minor GC 的时间远远低于Full GC新生代优化空间更大一些如何给新生代调优呢?是不是将新生代内存调得越大越好?下面是Oracle官方文档说明截图网页链接:h

2020-08-19 09:12:46 116

原创 java如何创建一个不可修改的集合

Collections. unmodifiableCollection(Collection c) 上代码 感兴趣的可以复制试试import java.util.ArrayList;import java.util.Collection;import java.util.Collections;import java.util.List;public class test { public static void main(String[] args) { List&lt

2020-08-18 11:24:34 922

原创 eclipse使用插件快速构建spring boot和spring cloud项目

首先下载最新的eclipse,我用的是2020年6月发布的版本。操作开始Help–>Eclipse Marketplace 然后在输入框输入 Spring Tool 4选第一个,我已经下载过了,所以是Installed。下载完后 File–>New–>Other 选择如下:然后选择版本就可以了,最后选择一下用什么组件。这里是eureka多节点集群的链接...

2020-08-14 10:16:44 209

原创 MongoDB面试专题(31道题)

你说的 NoSQL 数据库是什么意思?NoSQL 与 RDBMS 直接有什么区别?为什么要使用和不使用NoSQL 数据库?说一说 NoSQL 数据库的几个优点?NoSQL 是非关系型数据库,NoSQL = Not Only SQL。关系型数据库采用的结构化的数据,NoSQL 采用的是键值对的方式存储数据。在处理非结构化/半结构化的大数据时;在水平方向上进行扩展时;随时应对动态增加的数据项时可以优先考虑使用 NoSQL 数据库。在考虑数据库的成熟度;支持;分析和商业智能;管理及专业性等问题时,应优先考虑.

2020-08-13 11:28:03 764

原创 Linux 中的用户模式和内核模式

  之前写java多线程阻塞的时候提到过用户态和内核态。链接如下:java锁  MS-DOS 等操作系统在单一的 CPU 模式下运行,但是一些类 Unix 的操作系统则使用了双模式,可以有效地实现时间共享。在 Linux 机器上,CPU 要么处于受信任的内核模式,要么处于受限制的用户模式。除了内核本身处于内核模式以外,所有的用户进程都运行在用户模式之中。  内核模式的代码可以无限制地访问所有处理器指令集以及全部内存和 I/O 空间。如果用户模式的进程要享有此特权,它必须通过系统调用向设备驱动程序

2020-08-12 15:35:01 1192

原创 Eureka集群 Eureka高可用 服务注册Eureka集群 含yml配置文件

为何选择Eureka Server集群  如果一个Eureka server发生宕机,某些微服务也出现故障的时候。Eureka Client中的缓存就无法更新,可能会影响微服务之间的调用,所以为了高可用性,我们在线上选择集群模式。本文代码以2个节点为例子。  配置系统的hosts,Windows系统的hosts文件路径是C:\Windows\System32\drivers\etc\hosts;Linux以及Mac OS等系统路径为/etc/hosts。一行代码就行。复制代码环节# 单个eure

2020-08-11 11:28:18 1216

原创 docker架构图以及组件讲解

书上看到的,整理下来。图中包含的组件:Docker daemon(Docker守护进程)Docker daemon是一个运行在宿主机(DOCKER_HOST)的后台进程。可通过Docker客户端与之通信。Client(Docker客户端)Docker客户端是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。图中,docker build等都是Docker的相关命令。Images(Docker镜像)Docker镜像是一个只读模版,它包含创建D

2020-08-10 10:20:37 1134 1

原创 一篇文章了解GC----jvm中Minor GC和Full GC/Major GC以及jdk1.8中默认GC

简述Java内存分配与回收策略以及Minor GC和Major GC。对象优先在堆的Eden区分配大对象直接进入老年代长期存活的对象将直接进入老年代  当Eden区没有足够的空间进行分配时,虚拟机会执行一次Minor GC。Minor GC通常发生在新生代的Eden区,在这个区的对象生存期短,往往发生GC的频率较高,回收速度比较快。Full GC/Major GC发生在老年代,一般情况下,触发老年代GC的时候不会触发Minor GC,但是通过配置,可以在Full GC前执行一次Minor GC,

2020-08-07 17:01:05 1025

原创 秒懂TCP为什么是三次握手 两次不行

电话通了,场景一玲玲:我们下午3点出来约会吧。李雷:3点没下课,4点吧。如果是这样结束,那就是两次握手,李雷注定单身。电话通了,场景二玲玲:我们下午3点出来约会吧。李雷:3点没下课,4点吧。玲玲:好的,4点见。这就是三次握手的作用!...

2020-08-06 16:10:45 572 1

原创 spring boot-2.1.16整合swagger-2.9.2 含yml配置文件

java代码package com.oauth.util;import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import springfox.documentation.

2020-08-05 09:49:05 3734 1

原创 JVM内存模型和分区情况(图文)

方法区用于储存虚拟机加载的类,常量,静态变量等数据。堆存放对象的实例,所有对象和数组都在堆上分配,是jvm所管理的内存中最大的一块区域。栈虚拟机栈,java执行方法的内存模型。存储局部变量表,操作数栈,动态链接,方法出口等信息。本地方法栈和虚拟机栈类似,不过本地方法栈是native关键字修饰的(底层为C),虚拟机栈是虚拟机执行的java方法。程序计数器jvm中最小的一块区域,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复.

2020-08-03 14:28:03 286

原创 redis之缓存穿透,缓存击穿,缓存雪崩解决方案

缓存穿透  查询一个一定不存在的数据,如果DB查不到数据,也不写入缓存,会导致每次请求都去DB查询,可能导致DB挂掉。解决方案:1.如果DB返回数据为空,也缓存这个数据,但是过期时间比较短。2.布隆过滤器。将一定不存在的数据过滤掉,布隆过滤器可以设置误差范围。它说没有就一定没有,它说有,也不一定有。误差越小,相对应占用空间越大。缓存击穿  对某个key设置了过期时间,在过期时,恰好有大量的请求访问。请求访问DB并且重新缓存到redis中。大量请求访问DB的时候可能使DB挂掉。解决方案:1.使

2020-07-31 10:59:18 102

原创 消息队列---kafka的ack机制

0:生产者不会等待broker的ack,这个延迟最低,但是服务挂掉的时候会丢数据。1:服务端会等待ack值,leader副本确认接受到消息后发送ack,如果leader挂掉后,也可能会丢数据。-1:服务端会等待所有的follower副本接受数据后才会收到leader发送的ack,不会丢数据。用的时候ack的值是字符串 “0”,“1”,"-1"...

2020-07-30 09:44:57 606

原创 redis---有哪些数据淘汰策略

noeviction:默认策略,当内存使用达到限制后,大部分写入内存的命令会报错,del命令和其他几个命令除外,数据不淘汰。allkeys-lru:尝试回收使用最少的键,让新添加的数据有空间存放。volatile-lru:尝试回收使用最少的键,仅限在过期集合的键,让新添加的数据有空间存放。allkeys-random:随机回收键,让新添加的数据有空间存放。volatile-random:随机在过期集合中回收键,让新添加的数据有空间存放。volatile-ttl:回收在过期集合中的键,优先回收存活.

2020-07-29 15:32:59 193

原创 java多线程篇---常用线程池与线程池的原理(全)

java线程池如何实现  线程池中的线程,其实就是抽象为静态内部类worker,通过AQS框架实现。这个线程被存放在线程池中的HashSet workers成员变量中。需要执行的任务放在成员变量workerQueue中,所以流程就是从workerQueue中取出任务,放到workers中执行。创建线程池主要的构造参数corePoolSize:核心线程数。maxinumPoolsize:线程池允许的最大线程数。keepAliveTime:超过核心线程数那部分闲置线程所存活的时间。workQueu

2020-07-29 11:48:06 152

原创 redis---简洁描述持久化(rdb与aof)

  redis之所以快,是因为缓存都在内存中。重启一下电脑,或者程序关闭一下,数据就没了。为了保存数据,所以有了持久化的概念。所谓持久化,就是把数据存到磁盘中,数据库中等。  RDB:  rdb其实和微信截图差不多,这个时间点,你截到了什么东西,那就是什么东西,在截图的结果中,别人给你发消息,是截不到的。这个也是redis默认的持久化方式。如果你非要问没截到的数据怎么办,那你问问自己写的代码100%没bug?rdb主要有三种触发方式:1.save  这个命令会阻塞redis,redis不会处理其他

2020-07-28 15:04:38 165

原创 3.hashMap和hashtable 还有个concurrentHashMap

  hashMap的存储结构:答案就是数组+链表+黑红树(一种特定的二叉树)。hashMap只允许一个key为空,既然说到key,那key肯定是不可以重复的,第二次put的值就会把前一个值给覆盖。遍历顺序是不确定的,但是访问速度很快。  hashtable,注意t是小写的。其实看源码就会发现只比hashMap多个synchronized。多个锁的概念,所以它的线程是安全的,hashMap线程不安全。  concurrentHashMap,既然谈到了线程问题,那就得谈谈concurrent包下的它。has

2020-07-28 09:53:17 73

原创 2.随便整理---volatile关键字

  volatile这个关键字在1中提到过。这个关键字其实主要就是可见性和有序性。至于原子性,玩过线程池的人应该都知道,这个关键字就不够用了,一般都用atomic(接下来会写一点线程池的)。  那它究竟是怎么完成可见性的呢,这个唠深一点可以说cpu缓存,L1-L3的缓存与内存,volatile在汇编后,会多一个lock的字眼。操作系统看到它后会直接把内容写到内存中,而不是缓存中,其他的线程要写缓存中的数据,需要去内存中拿。有序性的话比较好理解,就是操作不可重新排序。  很多人都说这个关键字有原子性,其实

2020-07-27 14:59:26 87

原创 1.随便整理---synchronized

2222

2020-07-27 11:31:48 262 1

richfaces中文开发文档

richfaces中文开发文档 纯中文 适合维护老项目的人

2020-10-12

空空如也

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

TA关注的人

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