自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一名互联网的吊车尾

一名互联网的吊车尾

  • 博客(19)
  • 收藏
  • 关注

原创 Redis在项目中的正确使用

缓存穿透:问题:比如在我们的系统中搜索一个不存在id的产品,这个产品对应的id就不会存到redis中,数据库中也不会有这个id。所有当我们不停的发送根据这个id查询的请求时,就会直接命中到我们的数据库。当请求量非常大时就会把我们的数据库给干宕机。解决方案:当搜索一个不存在的产品id时,首先会因为我们的redis中没有数据进而去查询我们的db,然后查询到一个null,这个时候我们也将这个产品id进行缓存起来,对应的value为null即可,然后设置一个失效时间。为什么要设置一个失效时间呢,首先可以节省

2021-03-01 23:43:44 359 3

原创 使用ThreadLocal引起的内存泄漏问题

用例:先给大家看一段代码测试下:我们先设置了JVM堆内存的大小为30M。new Thread(() -> { System.out.println("1==" + Runtime.getRuntime().freeMemory()); threadLocal.set(new byte[1024 * 1024 * 10]); System.out.println("2==" + Runtime.getRuntime().freeMemory());// threa

2021-02-24 01:05:05 206

原创 java中的四种引用 强、弱、软、虚

前言:我们都知道当eden满了会触发minor gc,那这时候被回收的都是一些什么对象呢?1.强引用强引起:简单的理解为我们自己new出来的一个对象。Student student = new Student();student.setName("luo_li");//当对象为null后gc就会回收这个没有用的对象student = null;System.gc();System.out.println(student);System.in.read();...

2021-02-23 23:37:13 164 1

原创 java中动态代理以及Spring AOP详解

第一步找增强器第二部创建代理对象,把增强器设置都代理对象中通过代理对象调用第一步找增强器下图是创建bean的其中一个流程Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.让BeanPostProcessors有机会返回一个代理而不是目标bean实例Object bean = resolveBeforeInstantiation(beanName, mbdToUse);

2021-02-03 23:18:27 163

原创 消息中间件Kafka

流程图:关键字解释:Kafka Cluster:由多个Kafka服务组成,每个kafka可以叫做一个broker,其中的一个broker会被选组为控制器(Kafka Controller)。Topic:topic顾名思义是主题的意思,我们会将不同的消息类型发往到不同的topic下。partition:分区,topic下的一个单位,topic的内部可以划分出多个partition用来分片存储我们的消息数据。用于存储海量数据,和提高并发能力。bin/kafka‐topics.sh ‐‐creat

2021-01-04 23:51:31 191

原创 JAVA中使用synchronized关键字实现 生产者和消费者 (虚假唤醒)

前置知识wait()方法:让当前线程处于等待状态,会释放当前的锁对象。其他线程可以重新拿到锁。notifyAll()方法:唤醒所有线程。synchronized :当前线程拿到锁后,其他现在就无法再去获取锁,会进行监视等待。这个前置知识必须要先知道,后面也会演示给同学们看for example:public class Test { public static void main(String[] args) { Test2 test2 = new Test2();

2020-12-04 01:09:24 242 1

原创 腾讯cos文件管理系统 web直传和后端上传实现

一、后端加密,前端直传1. WED端直传的流程图SecretId SecretKey等参数可以参考官方文档获取cos官方文档<dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.24</version></dependency><depend

2020-11-27 20:19:39 2429 1

原创 Redis5 的新特性 Redis Stream整合Spring Boot

Redis Stream 介绍Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不

2020-11-21 00:49:36 4375

原创 Zookeeper的基本命令详解和ACL和watch监听机制

Zookeeper的结构Zookeeper的接口类似于文件系统的接口一样:Zookeeper命令每个节点在zookeeper中被称做znode,我们可以对节点进行create创建节点,delete删除节点。zookeeper的节点有多种类型:分别为临时节点 、持久节点、临时有序节点、持久有序节点、容器节点、TTL节点命令演示:create /dir [value ] 默认创建持久节点get /dir 获取节点下的数据set /dir 对节点进行设置值create -e /dir1

2020-11-21 00:46:31 473

原创 SpringBoot整合Sharding JDBC实现数据库的分表

前言:随着公司的发展,公司的数据量也是会越来越多,为存储更多的数据量,为了让查询效率得到提升,前期数据库的设计也是至关重要,所以现在的一些分库分表的框架都逐渐出现在大众的视野中。今天想拿Sharding JDBC来是实现一个简单的分表。框架信息:Springboot + Mybatis + Sharding JDBC配置信息:server.port=8084mybatis.config-location=classpath:META-INF/mybatis-config.xmlspr

2020-10-29 15:58:54 427

原创 阿里云安装kafka及java整合

由于公司需要使用kafka作为项目的一个消息中间件,所以不得不先提前了解下,下面都是我个人的踩的一些小坑,主要是设计到与java整合的地方。下载地址https://archive.apache.org/dist/kafka/事先准备由于消息都是保存到zk中的,所有我们的服务器中需要启动zookeeper。kafka的启动./kafka‐server‐start.sh ‐daemon config/server.properties创建主题./kafka-topics.sh.

2020-10-21 15:50:16 271

原创 线程池的创建的使用

在并发量较高的项目中,我们往往会涉及到线程的创建与销毁的问题,由于线程的创建和销毁是很消耗我们的性能的,所以我们会在项目中引进线程池,来让我们的线程可以循环的使用,避免不停的去创建销毁线程。 线程的创建 ThreadPoolExecutor statsThreadPool = new ThreadPoolExecutor( 10, 10, 0L, TimeUnit.MILLISECONDS, new Li.

2020-08-28 13:51:07 115

原创 springboot整合Redis实现发布订阅

everybody good…,之前有分享过关于RabbitMq的相关文章,然后公司的技术领导就跟我说,其实redis也能实现MQ的一些功能,然后我就迫不及待的去了解下,就跟大家分享下,当然了,如果你的项目中已经引用的RabbitMq或其他的Mq就算了,但一般的项目中都回用到redis嘛,建议你们可以尝试实现一个消息的发布和订阅,不管是实现发送短信啊,还是其他的,反正可以试试嘛。因为我们的项目是使用spingboot进行开发的,所有就直接用spingboot工程给大家具体的来演示下了。配置和引入Re.

2020-08-24 22:12:41 840

原创 springcloud整合zookeeper作为注册中心实现原理

SpringCloud微服务中使用zookeeper做为注册中心的相关配置。<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId></dependency>spring: application: na.

2020-08-22 02:12:16 599

原创 RabbitMq的个人笔记

一、RabbitMq发送消息与接收消息的大致步骤生成者创建连接工厂ConnectionFactory并设置连接属性通过工厂创建连接Connection connection = connectionFactory.newConnection();通过连接创建channel Channel channel = connection.createChannel();然后发送消息到交换机中 channel.basicPublish(exchangeName, routingKey, basi

2020-08-21 02:51:14 168

原创 springboot整合Mybatis的一对多

第一步yml配置spring: datasource: url: jdbc:mysql://localhost:3306/dev?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC password: 123456 username: root driver-class-name: com.mysql.jdbc.Drivermybatis: m.

2020-06-16 01:04:39 331

原创 JAVA对象分配中的逃逸分析

前言:new出来的对象一定是储存在堆中的吗?1. JIT简介JIT 是 just in time 的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速 Java 程序的执行速度。首先,我们大家都知道,通常通过 javac 将程序源代码编译,转换成 java 字节码,JVM 通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。为了提高执行速度,引入了 JIT 技术。在运行时 JIT 会把翻译过的机器码保存起

2020-06-15 00:59:36 426 2

原创 [JVM内存结构模型][调参优化][垃圾回收机制]

1. JVM内存结构模型图2. 栈stack每个线程都会为自己创建一个私有的JVM栈,当前线程中每一次的方法调用都会创建出一个新的栈帧,每个栈帧中都会有自己的局部变量,操作数栈,动态链接,方法出口等等,当方法结束后当前栈帧也就会被销毁掉。局部变量:每一个栈帧都会包含一个本地变量的数组,用于储存本地变量,本地变量的大小是在编译的时候确定的。操作数栈:每一个栈帧都会包含一个操作数栈,jvm会将变量的值加载到操作数栈上,对变量值进行操作,然后对应的结果就会出栈赋值给我们的变量。动态链接:class文

2020-06-14 19:33:46 173

原创 JAVA类加载器和双亲委派机制

1. 类加载器(ClassLoader)的创建引导类加载器会创建 Launcher对象,然后执行其构造方法来创建Ext类加载器和App类加载器,其Classload默认是由AppClassLoad来实现的。public class Launcher { private static URLStreamHandlerFactory factory = new Launcher.Factory(); private static Launcher launcher = new Launche

2020-06-13 01:14:57 476

空空如也

空空如也

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

TA关注的人

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