自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 问答 (1)
  • 收藏
  • 关注

原创 设计模式Demo之简单工厂模式(含代码)

简单工厂模式主要优点 简单工厂模式的主要优点如下:(1) 工厂类包含必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以 免除直接创建产品对象的职责,而仅仅“消费”产品,简单工厂模式实现了对象创建和使用的分 离。 工厂三兄弟之简单工厂模式(四)(2) 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可, 对于一些复杂的类名,通过简单工厂模式可以在一定程度减少使用者的记忆量。(3) 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产.

2022-04-09 22:08:41 416

原创 spring线程池的使用示例,测试拒绝任务和任务装饰器

corePoolSize:核心线程数。 maximumPoolSize:最大线程数。表明线程中最多能够创建的线程数量。keepAliveTime:空闲的线程保留的时间。 unit:空闲线程的保留时间单位。 BlockingQueueworkQueue:用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。1、ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。2、LinkedBlockingQueue:一个基于链表结构的阻.

2022-04-07 22:07:08 676

原创 ThreadLocal使用包括子线程传递实例

1.ThreadLocal的使用主要用于不同线程操作不安全变量时的线程保护 2.ThreadLocal=为Thread提供独有的ThreadLocalMap变量,通过Entry[] table方式存储线程本地变量 3.Thread持有ThreadLocal的引用,所以ThreadLocal需要设置成虚引用避免内存溢出,同时提供删除entry操作避免value值的内存溢出代码示例package com.myzy.auth.reetrantlock;public class TestThreadLoca

2022-04-06 22:44:22 883

原创 ReetrantReadWriteLock源码要点(面试必备)

**1.writeLock**只需要判断状态C是否有读锁或者写锁**2.readLock**判断是否拿到锁,有一下几点:是否有写锁是否有写锁在排队首(为了防止写锁被饿死,因为读锁一般可以获取到锁)是否达到读锁最大限制抢锁修改高16位,读锁状态,是否成功?读写锁使用同一个队列,状态C高16位记录读锁状态也是读锁个数,低16位记录写锁状态***以上是本人在学习过程中记录的东西,希望对你有用!!!!!**...

2022-04-04 22:49:52 266

原创 java 线程wait()与notify()和notifyAll做生产者消费者模式

代码如下package com.myzy.auth.reetrantlock;import java.util.concurrent.atomic.AtomicInteger;/** * 场景介绍: * 一个生产者 120个消费者 * 生产者生产目标是100个,到了100个就不生产了;同时生产者在存在可以卖的茶大于5个同时已经生产了大于10个的情况下可以休息,然后等待消费者的唤醒 * 消费者只要有茶叶都可以买,没有茶叶可以唤醒生产者,然后等待生产,除非生产者已经生产了100个而.

2022-03-28 22:21:37 152

原创 使用ReentrantLock+Condition实现的单个生产者多个消费者模式

代码如下import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * 场景介绍: * 一个生产者 120个消费者 * 生产者生产目标是100个,到了100个就不生产了;同时生.

2022-03-27 15:38:43 706

原创 hashcode() equals()看懂一片够了

1 3 5 存map 实现有序存取Map<Test, Integer> map = new HashMap<>(); Test test1 = new com.myzy.auth.controller.Test(); test1.setCode(1); Test test2 = new com.myzy.auth.controller.Test(); test2.setCode(2); Test te

2021-08-16 22:05:42 63

原创 从jvm看String(应对面试)

从jvm看String(应对面试…(一))首先String是我们开发中很常用的引用类型,同时也很重要。位置:我们在使用String的时候可以使用字面量直接使用(String a = “abc”),也可以通过new对象来创建一个String对象来使用。那这不同的使用方式他到底放在那里呢?1.通过字面量来使用字符串,jvm会先从字符串常量池中查找是否有相同的(equals),如果有就直接从常量池中返回字符串的地址,如果没有就会在常量池中创建当前字符串然后返回地址。所以这个时候我们的字符串是放在常量池中

2021-05-18 23:15:49 101

原创 方法区的GC回收为什么那么难

方法区的GC回收为什么那么难背景:hotspotjvm,在jdk1.7之前,方法区的回收回收方法区主要回收的是不使用的常量以及类型。如果要回收不使用的类型首先要满足这个类以及这个类的派生类的实例在堆中没有然后加载这个类的类加载器已经被回收然后这个类的class没有被任何地方引用,就是无法在任何地方使用这个类的class所以砸门方法区的回收要求是很严格的,所以方法区也会出现很多问题,导致垃圾回收的效果不是太好。做不到方法去永久代的说法。所以java8之后取消永久代也是对整个jvm的提升,

2021-05-18 23:00:22 270

原创 jvm学习记录二(包会)

上一章大致介绍了jvm内存模型,下来接着各区的详细内容先从最不熟悉的来,虚拟机栈。虚拟机栈都知道是运行咱们方法的,实际上他的里面放了一个一个的栈针,同时每一个线程中都会独有一份虚拟机栈的内存空间。这是为什么呢?可以想一想,如何不是每个线程独有一份,那栈里面的栈针(每一个栈针就是一个方法)谁知道是哪个线程的,jvm也不是上帝(QUQ).所以我们的jvm大佬在设计jvm的时候每一个线程都会有一根栈资源和对应的程序计数器(各自记录自己的垃圾代码执行到哪里了)。我们的每一个栈针(就是每一个java方法

2021-05-16 15:17:25 75

原创 jvm学习笔记

## 本文主要记录学习jvm中的要点笔记供以后参考1.jvm整体设计架构![在这里插入图片描述](https://img-blog.csdnimg.cn/20210514225218457.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0Fubm90YXRpb25aWg==,size_16,color_FFFFFF,t_70以上图秒速了jvm

2021-05-14 23:28:55 387 5

原创 源码阅读List

源码阅读-JDK list(一)首先查看List接口的上下继承关系。查看第一个方法:1.通过其实现类来学习这个方法:实现类方法很多,首先通过常用的arrayList来学size()方法arraylist中返回的是这个size属性值在arraylist发生crud的时候会对这个值进行同步修改。**1.**add方法,调用重载的add方法,传入添加的新元素,当前数组引用,当前数组长度,然后通过grow()方法后添加元素,然后容量 size=s+1,自增。2.remove(int in

2021-01-31 21:59:58 103

原创 分库分表

分库分表package com.lyz.sharding.algorithm;import java.util.Collection; import java.util.LinkedHashSet; import com.dangdang.ddframe.rdb.sharding.api.ShardingValue; import com.dangdang.ddframe.r...

2020-03-02 21:20:46 195

原创 位运算基础

位运算基础位运算基础&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0|按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^按位异或若参加运算的两个二进制位值相同则为0,否则为1~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1<<左移用来将一个数的各二进制位全部左移N位,右补0>>右移将...

2019-07-01 23:36:50 267

原创 ant的安装、使用,build.xml简单编写

ant的安装、使用,build.xml简单编写下载ant解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:ANT_HOME:,PATH:D:\apache-ant-1.9.2%ANT_HOME%\bin)测试方法:开始–>运行–>cmd进入命令行–>键入 ant 回车,如果看到Buildfile: build.xml does n...

2019-07-01 23:00:58 674

原创 AtomicInteger的使用(高并发)

AtomicInteger的使用(高并发)普通代码处理高并发,对count进行++操作:public class MyAtomicInteger { private static final Integer threadCount = 20; private static Integer num = 0; private static void increase() {...

2019-06-30 00:39:03 1470 1

原创 threadLocal简单使用

threadLocal简单使用简单代码及注释如下:public class MyThreadLocal { //每个线程独有threadLocal static ThreadLocal<Person> threadLocal = new ThreadLocal<>(); public static void main(String[] args)...

2019-06-28 00:05:22 468

原创 简单明了thrift调用关系

简单明了thrift调用关系三、 Thrift的工作原理1.普通的本地函数调用过程例如,有如下关于本地函数的调用的java代码,在函数caller中调用函数getStr获取两个字符串的拼接结果:代码3.1 本地函数调用调用方和被调用方都在一个程序内部,只是cpu在执行调用的时候切换去执行被调用的函数,执行完被调用函数之后,再切换回来执行调用之后的代码,其调用过程如下图3.1所示:...

2019-06-27 23:35:36 752

原创 实际开发常用linux命令(必会)

实际开发常用linux命令(必会)这是博主每天都会使用的命令:cp -r {文件路径}fileName1 {dest文件路径}scp -r {文件路径}fileName1 {destUrl}:{dest文件路径}rm -rf {文件路径}fileName1mv fileName1 fileName1mkdir fileName1cd …llvi fileName1cat fi...

2019-06-27 23:27:08 905

原创 ArrayList集合中替换某一元素

ArrayList集合中替换某一元素/** * @ClassName:ChangeElement * @Description:TODO * @Author:ZY * @Date:2019/6/25 0025 22:44 * @Version:1.0 **/public class ChangeElement { public static void main(String...

2019-06-25 23:13:21 13691 1

原创 生产消费者同步容器

生产消费者同步容器利用wait(),notifyAll(),方法交替生产和消费容器内变量,利用同步锁实现同步容器/** * @ClassName:MyContainer * @Description:TODO使用wait(),notifyAll(),编写生产者消费者容器,get,put方法,2个生产线程 * 10个消费线程 * @Author:ZY * @Date:2019/6/24...

2019-06-24 23:55:57 110

原创 ReenTrantLock简单使用

ReenTrantLock简单使用/** * @ClassName:MReenTrantLock * @Description:TODO加入锁,保证一次执行,同时也防止并发影响数据有效性 * @Author:ZY * @Date:2019/6/24 0024 22:34 * @Version:1.0 **/public class MReenTrantLock extends Th...

2019-06-24 23:01:19 194

原创 ArrayList集合中的循环删除

ArrayList集合中的删除错误示范:ArrayList<Object> objects = new ArrayList<>(); for (int i = 0; i < 10; i++) { objects.add(i); } for (int i = 0; i < 5; i++) ...

2019-06-17 00:14:51 266

原创 Shiro使用及原理(二)

Shiro使用及原理(二)步骤:编写shiro-permission-realm.ini配置文件如下:[main]#定义凭证匹配器credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher#散列算法credentialsMatcher.hashAlgorithmName=md5#将凭...

2019-06-14 23:59:10 118

原创 json忽略空字段

json忽略空字段 @JsonInclude(JsonInclude.Include.NON_NULL) private String name; private String color; public String getName() { return name; } public void setName(String...

2019-06-12 22:34:44 2797

原创 Shiro的使用及原理(一)

Shiro的使用及原理(一)加密算法使用MD5不可逆加密public static void main(String[] args) { //MD5加密 Md5Hash md5Hash = new Md5Hash("666", "123", 64); System.out.println(md5Hash); }自定义Realm实现数据...

2019-06-09 22:40:53 220

原创 集合之API使用大全(示例)NO.1

集合之API使用大全(示例)NO.1话不多说直接上代码:public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("0"); list.add("1"); list.add("...

2019-06-08 10:30:15 254

原创 代码优化之ArrayList中ensureCapacity的使用

代码优化之ArrayList中ensureCapacity的使用对于ArrayLis中有一个方法ensureCapacity(int n),这个方法可以对ArrayList低层的数组进行扩容,显示的调用这个函数,如果参数大于低层数组长度的1.5倍,那么这个数组的容量就会被扩容到这个参数值,如果参数小于低层数组长度的1.5倍,那么这个容量就会被扩容到低层数组长度的1.5倍。说这么多,总而言之,记住...

2019-06-08 09:37:47 219

原创 枚举类的使用(java基础)

定义枚举类public enum EnumDemo { INSERT, UPDATE, FINDALL}测试方法public class MyDemo { public static void main(String[] args) { System.out.println(EnumDemo.INSERT); System....

2019-06-05 22:32:05 172

原创 Thrift框架入门使用及原理(学习之路)

Thrift框架入门使用及原理下载thrift.exe文件下载地址:http://archive.apache.org/dist/thrift/0.9.3/下载完成后,把文件名改成thrift.exe(切记)增加环境变量在path中增加以下环境变量:测试安装thrift是否成功在cmd中输入以下,测试成功!编写.thrift文件service HelloService { ...

2019-06-01 23:29:00 1483

原创 反序列化攻击原理及防御措施(已解决)

反序列化攻击原理及防御措施(已解决)**java序列化算法透析**Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述...

2019-05-23 22:49:23 8393 1

原创 SpringCloud注册中心Eureka源码分析(四)

SpringCloud注册中心Eureka源码分析服务获取与服务续约继续查看DiscoveryClient的initScheduledTasks函数,不难发现在其中还有两个定时任务,分别是“服务获取”和“服务续约”:if (this.clientConfig.shouldFetchRegistry()) { renewalIntervalInSecs = this.c...

2019-05-23 22:25:06 756

原创 SpringCloud注册中心Eureka源码分析(三)

SpringCloud注册中心Eureka源码分析服务注册在理解了多个注册中心信息的加载后,我们再回头看看DiscoveryClient类是如何实现“服务注册”行为的,通过查看它的构造类,可以找到它调用了下面这个函数:private void initScheduledTasks() { int renewalIntervalInSecs; int expBa...

2019-05-01 22:59:34 540

原创 微服务中服务注册时提供的元数据

元数据

2019-04-30 22:50:34 1145

原创 SpringCloud注册中心Eureka源码分析(二)

SpringCloud注册中心Eureka源码分析serviceUrls在获取了Region和Zone的信息之后,才开始真正加载Eureka Server 的具体地址。他根据传入的参数按一定算法确定加载位于哪一个Zone配置的serviceUrls。int myZoneOffset = getZoneOffset(instanceZone, preferSameZone, availZone...

2019-04-29 23:30:00 589

原创 SpringCloud注册中心Eureka源码分析(一)

首先,对于服务注册中心、服务提供者、服务消费者这三个主要元素来说,后两者在整个运行机制中是大部分通信行为的主动发起者,而注册中心主要是处理请求的接收者。所以,我们可以从Eureka的客户端作为入口看看它们是如何完成这些主动通信行为的。

2019-04-27 23:12:15 668

原创 深入分析JVM类加载机制(一)

Java体系中定义了3中类加载器,分别如下:Bootstrap ClassLoader(引导类加载器).负责加载下述3中情况下所制定的核心类库:%JAVA_HOME%/jre/lib目录 -Xbootclasspath参数所指定的目录 系统属性sun.boot.class.path指定的目录中特定名称的jar包Extension ClassLoader(扩展类加载器)加载扩展类,拓...

2019-04-27 09:55:05 475

原创 SpringCloud(Finchley.RELEASE版本)+SpringBoot(2.0.3.RELEASE)微服务框架搭建

@SpringCloud(Finchley.RELEASE版本)+SpringBoot(2.0.3.RELEASE)微服务框架搭建eureka注册中心由于项目需要,以及应对高并发建议搭建高可用注册中心,pow依赖以及配置文件如下:<dependencies> <dependency> <groupId>org.sp...

2019-04-27 00:43:58 1732

原创 Lucence全文检索基础知识及代码分享

Lucence全文检索创建索引库public class LucenceFirst { @Test public void createIndex() throws Exception { Directory directory = FSDirectory.open(new File("要创建的索引库位置").toPath()); Inde...

2018-09-10 22:24:46 514

原创 SSM处理表单提交包含上传文件的整个表单的办法

SSM处理表单提交包含上传文件的整个表单的办法别再找了,各种说法都有,但是我翻看了很多都不全,我就把我写的还算全套拿出来。。。。。 我的前台代码是:&lt;%-- Created by IntelliJ IDEA. User: Administrator Date: 2018/5/4 Time: 21:56 To change this template use Fi...

2018-09-09 23:11:16 1976

空空如也

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

TA关注的人

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