自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【2023-05-10】设计模式(代理,装饰器)

代理模式就是你想要访问一个对象,可以通过另一个代理对象来访问这个对象,同时代理对象可以对这个对象进行一个增强操作。代理模式通常分为静态代理模式,动态代理模式,其中动态代理模式又分为jdk动态代理模式和cglib动态代理模式。由于静态代理缺点太明显,所以有了动态代理,动态代理可以不和目标对象实现同一接口或者继承同一个类。静态代理实现同一个接口,将目标对象传递到代理对象里面,代理对象对具体方法进行增强处理。根据名称可知,具体的代理对象是由jdk实现的,在jvm中动态生成代理对象。3、cglib动态代理。

2023-05-10 21:40:12 540

原创 【2023-05-09】 设计模式(单例,工厂)

现在有手机和平板,可以使用上述的普通工厂来创建,但现在给手机和平板分了牌子,有华为手机和苹果手机,华为平板和苹果平板,这样一个产品族的概念(分为手机和平板两个产品族,手机产品族里面包含了华为手机和苹果手机两个产品),那么就可以使用抽象工厂模式。每次新增一个FactoryTest时,只需要新增一个对应的CommonFactory工厂实现类就行,对于之前的工厂和对象不影响。工厂模式主要是为了屏蔽创建对象的过程,主要分为三类(静态工厂,普通工厂,抽象工厂)顾名思义,就是整个系统对外提供的实例有且只有一个。

2023-05-09 22:34:57 617

原创 【2023-05-01】redis集群(主从、哨兵、cluster集群)

作用:1、监控master节点,slave节点和其他Sentinel节点的运行情况(通过ping命令),2、当master节点宕机,三台Sentinel会选举一个slave节点来充当新的master节点。每个节点上都会维护一部分槽,也知道所有的槽对应的节点,请求的数据不在当前节点时,会根据记录的槽对应的节点上去请求数据。:采用的是一主多从模式,一个master节点可以用有多个slave节点,一个slave节点可以有多个slave节点。​ 2、master宕机可以自动选举新的,自动切换,增加了可用性。

2023-05-01 21:00:00 1048

原创 【2023-04-30】redis-缓存雪崩、击穿、穿透,布隆过滤器

现在有key1、key2和key3三个,假如key1在hash函数上的执行结果为1,3,6,key2在hash函数上的执行结果为2,4,5,key3在hash函数上的执行结果为7,9,10,现在要查询key4,三个hash函数的执行结果为1,5,9,而1,5,9分别是key1,key2,key3在三个hash函数执行时标记为的1,而不是key4,所以说是不一定存在。:redis和数据库都不存在的数据,大量请求访问此类数据,最终也会请求到数据库,数据库压力激增,导致数据库操作长时间阻塞,影响其他服务。

2023-04-30 22:49:27 921

原创 【2023-04-26】排序算法:快速排序,选择排序,插入排序,希尔排序,冒泡排序,归并排序

常见的6个排序算法及代码实现:快速排序,选择排序,插入排序,希尔排序,冒泡排序,归并排序。

2023-04-26 20:38:01 92

原创 【2023-04-25】Spring Bean 的生命周期

​ 3.如果实现了ApplicationContextAware接口,就调用实现的setApplicationContext方法。​ 2.如果实现了BeanFactoryAware接口,就调用实现的setBeanFactory方法。​ 1.如果实现了BeanNameAware接口,就调用实现的setBeanName方法。如果Bean实现了DisposableBean接口,就调用实现的destory方法。如果配置了 destroy-method 属性,就会调用他的销毁方法。5) 处理init-method。

2023-04-25 22:26:13 397

原创 【2023-04-24】线、进程切换,redis底层数据结构,DNS解析

由于每个进程都有自己的虚拟地址空间,那么显然每个进程都有自己的页表,那么当进程切换后页表也要进行切换,页表切换后TLB就失效了,cache失效导致命中率降低,那么虚拟地址转换为物理地址就会变慢,表现出来的就是程序运行会变慢,而线程切换不会导致TLB失效,因为线程无需切换地址空间,因此我们通常说线程切换比进程切换快,原因就在这里。而进程则不同,两个不同进程位于不同的屋檐下,即进程位于不同的虚拟地址空间,因此进程切换涉及到虚拟地址空间的切换,这也是为什么进程切换要比线程切换慢的原因。

2023-04-24 20:47:00 361

原创 【2023-04-23】 Java BIO 和 NIO

BIO:服务器实现模式为一个连接一个线程,即用户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情就会造成不必要的线程开销。NIO:服务器实现模式为一个线程处理多个请求连接,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询连接有io请求就进行处理。多个客户端连接到一个服务端。

2023-04-23 21:15:41 93

原创 【2023-04-22】 io操作和java io

1)select:进行io操作时会维护一个fdset文件描述符,如果有可写,可读,或异常的状态,会更新到这个fdset,select会阻塞住监视这个fdset,等有数据、可读、可写、出异常或超时就会返回,返回后会遍历整个fdset,找到就绪的fd,进行io操作。:用户在做io请求时,不管有没有完成都立即返回,如果返回结果告知数据未准备好,那么可以立即再次请求,直到io完成。:服务器实现模式为一个线程处理多个请求连接,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询连接有io请求就进行处理。

2023-04-22 16:41:05 378

原创 springcloud2020.0.0,gateway,nacos,loadbalancer

springcloud2020.0.0使用gateway的一个小问题创建gateway服务时只引入了naocs和gateway的依赖,启动后通过lb://方式转发总是报503Spring Cloud 2020.0.0版本之前会自动引入Netflix Ribbon依赖,Netflix Ribbon功能跟loadbalancer一样,因Netflix公司停止维护Ribbon后, 在Spring Cloud 2020.0.0版本之后Spring使用loadbalancer替代了Ribbon, 但是loadba

2021-10-19 15:30:12 483

原创 java集合知识点

集合ListArrayListArrayList 是最常用的 List 实现类,内部是通过数组实现的,它允许对元素进行快速随机访问。数 组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数 组的数据复制到新的存储空间中。当从 ArrayList 的中间位置插入或者删除元素时,需要对数组进 行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入和删除。线程不安全//扩容int newCapacity = oldCapacity + (oldCapacity

2021-03-03 11:06:01 153 4

原创 JVM虚拟机

JVM三种最主要的JVM:Sun公司的HotSpot(常用),BEA公司的JRockit,IBM公司的J9 VMJRE、JVM、JDK三者的关系JDK是Java程序员常用的开发包、目的就是用来编译和调试Java程序的。JRE是指Java运行环境,也就是我们的写好的程序必须在JRE才能够运行。JVM是Java虚拟机的缩写,是指负责将字节码解释成为特定的机器码进行运行,值得注意的是在运行过程中,Java源程序需要通过编译器编译为.class文件,否则JVM不认识本地方法栈主要作用是登记nati

2021-03-03 10:58:40 209 1

原创 docker学习

docker安装(centos)文档地址:https://docs.docker.com/engine/install/centos/1、卸载旧的版本yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \

2021-02-09 15:45:00 136

原创 SpringBoot整合shiro,使用redis的shiro做缓存

shiro配置文件:以.ini结尾的文件,存储权限相关信息,其实是学习是做测试数据用的,做项目的时候都是在数据库里面查询的pom依赖<!-- https://mvnrepository.com/artifact/org.apache.shiro/shiro-core --><dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</a

2021-02-04 15:57:18 278

原创 spring data jpa 学习(二)

AuditingAuditing 是帮我们做审计用的,主要就是创建人,修改人,创建时间,修改时间做自动的填充@CreatedBy 是哪个用户创建的。@CreatedDate 创建的时间。@LastModifiedBy 最后修改实体的用户。@LastModifiedDate 最后一次修改的时间。首先在users表里面添加这四个字段,然后修改实体@Entity@Data@EntityListeners(AuditingEntityListener.class)//不能少public clas

2021-02-01 17:17:50 425

原创 spring data jpa 学习(一)

spring data jpaspring data是spring的一个子项目,在官网就可以发现,springdata和springboot,springcloud等是一个级别的项目springdata主要是做数据层的工作,包含了Spring Data Commons,Spring Data JPA,Spring Data MongoDB,Spring Data Redis等模块,其中Spring Data Commons是公共部分,Spring Data JPA,Spring Data MongoD

2021-02-01 17:15:26 387

原创 mongodb学习以及整合springboot

mongodb下载安装https://www.mongodb.com/try/download/community将压缩包上传至服务器后开始安装1、解压tar -xvf mongodb-linux-x86_64-rhel80-4.4.2.tgz2、移动到/usr/local/mongodb里面mv mongodb-linux-x86_64-rhel80-4.4.2 /usr/local/mongodb3、新建目录#数据存储目录mkdir -p /mongodb/single/dat

2021-01-27 16:23:42 146

原创 RedisTemplate配置序列化方式不起作用

Springboot配置序列化方式不起作用新建springboot模块,引入依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springf

2021-01-27 16:19:26 2140 1

原创 ThreadLocal理解

ThreadLocal怎么理解呢,在我看来就是给每一个Thread提供私有的空间,用来存放数据,这个数据可以再在Thread整个存活周期内被拿到ThreadLocal 的两种典型的使用场景1、任务多且每一个都需要,存在并发安全,比如SimpleDateFormat ,每一个任务都需要,但是又不是并发安全的类,如果在每一个任务里面都new一个SimpleDateFormat 对象的话,太占用内存了,如果只new一个SimpleDateFormat 对象的话有需要加锁,影响并发性能,但是这个类只是拿来做格

2021-01-27 16:14:52 119

原创 excel操作---poi、easyexcel

poi导入依赖<!-- https://mvnrepository.com/artifact/org.apache.poi/poi 03版--><dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version></dependency>

2021-01-27 16:11:12 251 1

原创 Rabbitmq搭建集群---普通,镜像

搭建普通集群注意,一定要在三台虚拟机上运行起来,可以看到管理界面,我最开始就是没有,搞了半天也不知道咋回事,然后我全部重来,先做到每台都能访问,然后在停掉,再后台启动,再。。。。三台虚拟机(centos7)#要修改主机名,并且在/etc/hosts里面配置映射192.168.40.20 mq1192.168.40.21 mq2192.168.40.22 mq3三台主机上rabbitmq的cookie一样,位置/var/lib/rabbirmq/.erlang

2020-12-29 11:14:43 197

原创 springboot整合rabbitmq

springboot整合rabbitmq新建springboot项目,添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>添加配置spring: rabbitmq: host: 192.168.137.10

2020-12-25 16:13:36 109

原创 rabbitmq---安装,学习(七种消息模型)

rpm -ivh erlang-23.1.5-1.el7.x86_64.rpm //安装erlang包rpm -ivh rabbitmq-server-3.8.9-1.el7.noarch.rpm //安装rabbitmq-server结果报错了[root@localhost ~]# rpm -ivh rabbitmq-server-3.8.9-1.el7.noarch.rpm warning: rabbitmq-server-3.8.9-1.el7.noarch.rpm: Header V4 .

2020-12-21 23:09:50 307

原创 JUC-java.util.concurrent学习(五)--ForkJoin,CompletableFuture

JUC-java.util.concurrent学习(五)–ForkJoin做任务拆分合并public class MyForkJoin extends RecursiveTask<Long> { private Long start; private Long end; private Long temp=5000L; public MyForkJoin(Long start, Long end) { this.start = start;

2020-12-19 14:24:44 112 1

原创 函数型接口

函数型接口函数型接口public class MyFunction { public static void main(String[] args) { Function<String, String> function = new Function<String, String>() { @Override public String apply(String s) { return s; }

2020-12-19 14:21:32 99 1

原创 JUC-java.util.concurrent学习(四)---线程池

JUC-java.util.concurrent学习(四)线程池三大方法//ExecutorService executorService = Executors.newSingleThreadExecutor();//单个线程执行任务//ExecutorService executorService = Executors.newFixedThreadPool(3);//创建固定线程执行任务ExecutorService executorService = Executors.newCached

2020-12-19 14:14:38 119 2

原创 JUC-java.util.concurrent学习(三)---BlockingQueue

BlockingQueueQueue和List,Set是同一级的,Queue下面有阻塞队列 BlockingQueue,双端队列BlockingDeque,非阻塞队列AbstractQueue阻塞:在队列为空拿去的时候会阻塞,在队列满了往里面放的时候会阻塞四组API操作抛出异常有返回值,不抛出异常阻塞等待超时等待添加addofferputoffer移除removepolltakepoll判断首elementpeek/** * 抛出

2020-12-19 14:11:30 87 1

原创 JUC-java.util.concurrent学习(二)---Callable,CountDownLatch,CyclicBarrier,Semaphore,ReadWriteLock

JUC-java.util.concurrent学习(二)CallableRunnable是不能返回结果的,不能抛出异常的@FunctionalInterfacepublic interface Callable<V> { /** * Computes a result, or throws an exception if unable to do so. * * @return computed result * @throws Exc

2020-12-19 13:05:38 255 2

原创 JUC-java.util.concurrent学习(一)

JUC-java.util.concurrent学习(一)1、、并发问题public class SelaPhone { public static void main(String[] args) { Phone phone=new Phone(); new Thread(()->{ for (int i = 0; i < 25; i++) { phone.sela(); } }).sta

2020-12-19 12:59:48 132 1

原创 CAS原子操作

CAS翻译成中文为比较并交换,是对cpu的层面而言,在java中主要是通过java.util.concurrent.atomic包下的一些原子操作类实现的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Qn5VLRu-1607501914269)(D:\Typora\Image\image-20201209153931566.png)]这些类的实现是通过unsafe类实现,而unsafe类执行的是native方法,底层是由c++写的public final boole

2020-12-09 16:21:16 91

原创 JMM内存模型

JMM内存模型三大特性:可见性:对于共享变量,两个线程同时使用一个线程做了修改,另一个线程会不会知道原子性:原子性就相当于事务,如果有多个步骤,必须同时执行(不能打乱步骤)有序性:在将代码转化为汇编指令时,处理器为了达到更好地执行效果,可能会重排指令,也就是说会和我们写的代码执行顺序不一样,但是它会保证在单线程下执行结果是不变得,但是如果在多线程并发的情况下,就是能会出问题八大原子操作read:将主内存中的变量读取出来,方便后面的load操作使用load:将read操作的值加载到线程的工作内存

2020-12-08 17:17:40 82

原创 BeanUtils.getPropertyDescriptors()首字母大写问题

BeanUtils.getPropertyDescriptors()今天使用BeanUtils.getPropertyDescriptors()碰到了一个问题(也不能称为问题吧)@Getter@Setter@ToStringclass Date{//数据类 private String zAccountNo;//主(对)端专线号 private String userName;//用户名称}public class MyTest { public static void m

2020-12-02 10:33:11 1803

原创 阿里云短信验证码开发

阿里云短信验证码开发准备首先需要在阿里云上开通短信服务,然后在AccessKey里面设置用户和用户组,并把用户加入到用户组里面然后创建一个key密码一定要事先记住,后面是不会在显示密码的然后在用户组里面添加短信权限管理再去短信服务里面添加签名和模板一定要注意用词,不然阿里不会通过的到这里所需阿里的东西都差不多准备好了,在快速学习里面有一个查看demo,可以看到开发例子开发新建service@Servicepublic class MessageServiceImpl im

2020-11-10 18:20:25 254

原创 Mybatis中的#和$的区别(预编译)

Mybatis中的#和$的区别在mybatis中有两种传递值的方法,分别是用#{xxx}和${xxx}现有sql语句查询用户做登录,使用${xxx}的话,sql语句如下select * from user where name = ${name} and password = ${password}用mybatis走数据库的话,可能就是select * from user where name = 'xiaozhu' and password = '123456'这样看似没有问题,但是如果密

2020-11-07 15:13:14 711

原创 Mybatis-plus的使用和学习

Mybatis-plus的使用和学习推荐官网学习https://baomidou.com/guide/1、首先准备数据DROP TABLE IF EXISTS user;CREATE TABLE user( id BIGINT(20) NOT NULL COMMENT '主键ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年龄', email VARCH

2020-11-07 14:25:00 831

原创 Java类的加载机制-双亲委派机制

Java类的加载机制-双亲委派机制jdk8默认的类加载器有三种启动类加载器–Bootstrap ClassLoader扩展类加载器–Extension ClassLoader应用程序类加载器–Application ClassLoader启动类加载器(Bootstrap ClassLoader)是虚拟机实现的,通过getparent方法时拿不到的,为null,启动类加载器主要是负责加载java的基础类,jdk文件夹中lib文件夹目录中jar包的类扩展类加载器(Extension ClassL

2020-11-05 20:31:00 189

原创 url传递数组后端接受不到

url传递数组后端接受不到用url传递数组时不好拼接,传递后端总是有问题前端post用body传json串,后端用dto接收时加一个@RequestBody注解,就可以了,不建议用url拼接数组,特别是多维数组,很难受{ "group_list": [{ "group_name": "我的分组", "group_id": 1, "order_num": 0, "order_list": ["20190421894232","20190421894232"] }], "busine

2020-11-04 19:17:57 697

原创 springmvc~~利用HandlerMethodArgumentResolver在调用时注入用户

springmvc利用HandlerMethodArgumentResolver在调用时注入用户首先做好准备,新建springboot项目,添加web和lombok依赖,新建controller,user@Getter@Setter@ToStringpublic class User { private String name; private String sex; private Integer age;}@RestControllerpublic class HelloCont

2020-10-31 16:55:24 244

原创 git~~版本回退

回退版本现有三次已提交的记录$ git logcommit 2ed35f2ee155acd1ac0c4645fbb20babb23a323f (HEAD -> main, origin/main, origin/HEAD)Author: zhugl2 <zhugl2CRUN2020!>Date: Fri Oct 16 15:04:29 2020 +0800 第三次提交commit 0d676a622ac0045c2c9f5531d4d4e415fbb40325

2020-10-18 20:52:06 105

原创 redis~~持久化

持久化redis有两种持久化方式:rdb和aof,redis有一个子进程专门用来做持久化的rdb:可以在指定的时间间隔里对数据进行快照(数据备份)aof:redis记录每一次写的操作,重启服务后会对执行这些命令来恢复数据redis默认使用的是rdb的持久化方式,如果启动aof持久化方式的话,需要修改redis.conf配置文件appendonly yes ##no不启用rdb持久化# The filename where to dump the DBdbfilename dump.rdb

2020-10-18 20:51:44 70

springboot-shiro-redis

springboot整合shiro,使用redis做缓存层

2021-02-04

空空如也

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

TA关注的人

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