自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 postgresql远程连接问题

致命错误: 用户 "postgres" Password 认证失败 (pgjdbc: autodetected server-encoding to be GB2312, if the message is not readable, please check database logs and/or host, port, dbname, user, password, pg_hba.conf)

2024-02-26 15:53:50 224 1

原创 一文了解GC垃圾回收

一文了解GC垃圾回收。

2023-10-24 22:56:19 846

原创 一文拿捏对象内存布局及JMM(JAVA内存模型)

通过这些规则、规范定义了。,而每个线程运行时,都会创建一个工作内存(也叫栈空间),来保存线程所有的私有变量。而JMM内存模型规范中规定所有的变量都存储在主内存中,而主内存中的变量是所有的线程都可以共享的,而对主内存中的变量进行操作时,必须在线程的工作内存进行操作,首先将主内存的变量copy到工作内存,进行操作后,再将变量刷回到主内存中。所有线程只有通过主内存来进行通信。JMM描述的是对程序中变量访问方式的规则规范JVM运行程序的实体是线程,每个线程有其工作空间,用于存储私有变量。

2023-10-12 22:16:44 221

原创 一文理清JVM结构

浅见JVM结构

2023-10-12 22:11:47 745

原创 一文认识ThreadLocal、了解ThreadLocal与Synchronized的区别

ThreadLocal叫做,意思是ThreadLocal中属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

2023-10-11 00:00:00 199

原创 一文拿捏线程的生命周期

Blocked(阻塞):当线程被阻塞时,它暂停执行,并且不会占用CPU资源。Timed Waiting(计时等待):与等待状态类似,但是线程在等待一段特定的时间后会自动唤醒。方法执行完毕或者出现了未捕获的异常时,线程进入终止状态。在终止状态下,线程不会再执行任何代码。Waiting(等待):线程在等待某个特定条件满足时进入等待状态。New(新建):当线程对象被创建时,它处于新建状态。方法使自己进入等待状态,并且只能通过其他线程的通知或者等待时间结束来唤醒。此时,线程已经准备好运行,并且等待系统的调度。

2023-10-10 00:00:00 122

原创 一文拿捏线程和线程池的创建方式

继承 Thread 类并重写 run方法创建线程,实现简单但不可以继承其他类;实现 Runnable 接口并重写 run 方法,避免了单继承局限性,编程更加灵活,实现解耦;实现 Callable 接口并重写 call 方法,创建线程。可以获取线程执行结果的返回值,并且可以抛出异常;使用线程池创建。

2023-10-10 00:00:00 42

原创 来喽来喽、他来喽!

上班快乐

2023-10-09 11:55:36 54

原创 一文拿捏线程和线程池的创建方式

继承 Thread 类并重写 run方法创建线程,实现简单但不可以继承其他类;实现 Runnable 接口并重写 run 方法,避免了单继承局限性,编程更加灵活,实现解耦;实现 Callable 接口并重写 call 方法,创建线程。可以获取线程执行结果的返回值,并且可以抛出异常;使用线程池创建。

2023-10-09 11:37:58 76

原创 一文理清Run()与start()、wait()和sleep()的区别

🌟锁性质不同wait在等待的时候,会释放锁 sleep在睡眠的时候,是抱着锁睡眠,即不会是释放锁所属类不同wait Object 方法sleep Thread基类方法线程进入状态不同调用 sleep 方法线程会进入 TIMED_WAITING 有时限等待状态调用无参数的 wait 方法,线程会进入 WAITING 无时限等待状态唤醒时机不同wait 必须要使用notifyAll() 手动唤醒sleep有两种唤醒手段 第一种时间到 第二种Thread.interupt()

2023-10-09 11:25:58 158

原创 一文拿捏线程池

1 概念线程池是一种用于管理线程的机制,核心思想是资源复用,避免频繁地创建和销毁线程所带来的性能开销。2 原理线程池的原理是预先创建一定数量的线程,并将它们放入一个线程池中。当有任务需要执行时,从线程池中取出一个空闲线程来执行该任务,如果所有线程都在忙,则任务会被放入队列中等待JUC的工具类也会提供一些实例化线程池的方法,但是我们项目中并没有使用,因为都会有潜在的OOM风险,所以我们是对这些参数做了定制,具体是这样的corePoolSize(核心线程数):cpu+1 这个参数要根据具体的服务器配置来定m

2023-10-09 11:18:51 67

原创 一文带你穿针引线Redis

一文带你穿针引线Redis1 定位RedisRedis(Remote Dictionary Server)是一个开源的内存数据库(C语言编写的),非关系型数据库(key-value存储系统),属于键值对存储系统。它提供了高性能、持久化、分布式、多种数据结构的支持。默认端口号(6379)

2023-10-09 00:00:00 600

原创 一文带你穿针引线Redis(3)

Redis哈希槽是Redis集群的核心概念之一。在Redis集群中,数据会被分布在不同的节点上,而哈希槽则是用来划分数据所在节点的逻辑单位。哈希槽的数量是固定的,Redis默认将其划分为16384个槽位。当一个新的节点加入Redis集群时,集群会将部分哈希槽从已有节点上迁移至新节点上,直到集群中所有节点的哈希槽数量都比较平均。当有数据需要存储时,Redis会根据数据的键值对应的哈希值,将其映射到一个哈希槽中,并根据哈希槽的分布情况,将数据存储到相应的节点上。

2023-10-08 00:00:00 111

原创 一文带你穿针引线Redis(2)

如果发生故障可能会导致数据丢失。AOF持久化AOF持久化是将每个。

2023-10-07 00:00:00 145

原创 一文带你穿针引线Redis(1)

Redis(Remote Dictionary Server)是一个开源的内存数据库(C语言编写的),非关系型数据库(key-value存储系统),属于键值对存储系统。它提供了高性能、持久化、分布式、多种数据结构的支持。默认端口号(6379)

2023-10-06 00:00:00 123

原创 一文拿捏Spring之IOC、循环依赖、Spring的设计模式

传统情况下是采用new的方式来创建对象,这个对象是由我们来直接控制的,但是有了IOC后,我们可以在IOC运行期间通过DI动态的将依赖的对象进行注入,对象交由spring进行管理。setter方法注入:通过setter方法来注入依赖关系,Spring容器在创建Bean实例后,通过反射调用setter方法来注入依赖关系。构造器注入:通过构造函数来注入依赖关系,Spring容器在创建Bean实例时会先调用该类的构造函数进行初始化。构造器注入:通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。

2023-10-05 00:00:00 189

原创 一文拿捏Spring事务之、ACID、隔离级别、失效场景

据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的。同个类中的调用被@transaction修饰的方法,会失效,因为只有当事务方法被当前类以外的代码调用,才会由spring生成的代理对象来管理。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。),对同一字段的多次读取结果都是一致的,除非数据是被自身事务所修改的,可以阻止脏读和不可重复读,但幻读仍有可能发生。

2023-10-05 00:00:00 224

原创 一文拿捏分布式协调Redis客服端-Redisson

高级的分布式协调Redis客服端 , 专注于分布式系统开发,让用户可以在分布式系统中很方便的去使用Redis

2023-10-04 00:00:00 287

原创 一文拿捏Spring之AOP

Component@Aspect@Slf4j​public void before() { // 前置通知log.info("AopAspect1.....before....方法执行了");​public void after() { // 后置通知log.info("AopAspect1.....after....方法执行了");​public void afterReturning() { // 返回后通知,只有方法正常返回了,那么此时才会执行该方法。

2023-10-04 00:00:00 113

原创 一文拿捏基于redis的分布式锁、lua、分布式性能提升

如果结果是0,则表示setnx失败了,那本次就没有获取到锁,可以通过循环的方式一直尝试获取锁,直至其他客户端释放了锁(delete掉key)后,就可以正常执行setnx命令获取到锁。本身咱们在不使用缓存和分布式锁的情况下,也可以实现详情页或者首页三级分类信息的展示,使用了缓存和分布式锁,只是对核心功能的一个增强,按照00P思想,会直接侵入代码不易维护,所以需要将这种从上到下的关系优化为从左到右的增强,即AOP思想AOP是spring提供的一个面向切面编程思想,其底层原理是动态代理,项目中是这样做的。

2023-10-03 02:00:00 1171

原创 一文拿捏分布式、分布式缓存及其问题解决

传统的计算模型通常是集中式的,所有的计算任务和数据处理都由完成。然而,随着数据量和计算需求的增加,集中式系统可能会面临性能瓶颈和可靠性问题。故而引出了分布式↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓。

2023-10-03 00:00:00 1605

原创 一文拿捏SpringMVC的调用流程

完整版SpringMVC调用流程

2023-10-02 13:47:58 530

原创 一文拿捏 Spring Bean的生命周期

Aware系列接口setBeanName()方法--->用于在Bean实例化后,将Bean的名称传递给Bean实例setBeanFactory()方法--->用于在Bean实例化后,将BeanFactory(即Spring容器)传递给Bean实例setApplicationContext()方法--->用于在Bean实例化后,将ApplicationContext(即Spring应用上下文)传递给Bean实例BeanPostProcessor对象 --(初始化执行的方法-类比aop)

2023-10-02 13:45:00 187

原创 Redis面试必看

概述:布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上由一个很长的二进制向量(二进制数组)和一系列随机映射函数(hash函数)。作用:布隆过滤器可以用于检索一个元素是否在一个集合中。添加元素:将商品的id(id1)存储到布隆过滤器假设当前的布隆过滤器中提供了三个hash函数,此时就使用三个hash函数对id1进行哈希运算,运算结果分别为:1、4、9那么就会数组中对应的位置数据更改为1。判断数据是否存在:使用相同的hash函数对数据进行哈希运算,得到哈希值。

2023-10-01 21:24:18 28

原创 不管是初学者还是面试都必看RabbitMQ(AMQP)宝典

RabbitMQ的架构组成,四种路由、五种工作模式、应答机制、重试机制、延时队列的构建、以及消息丢失、消息积压、消息重复消费、保证消息顺序等一系列RabbitMQ相关问题的解决方案🎉🎉🎉各位少侠觉得有用一箭三连哦🤞。

2023-10-01 14:06:41 63

原创 一文成为MySQL调优老鸟

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

2023-09-28 10:08:17 330

原创 数据库数据表设计思想二

数据库设计一般交由后端开发人员直接设计(无论是否有经验),而不会让经验丰富的开发人员包揽(做评审即可)。数据没必要一次完整的设计出来,开发过程中,难免会对数据库进行调整的,保证数据的骨架没有问题 【 增删字段、添加中间表、加视图都不会造成多大的影响 】数据库设计是后端部分需求转换的过程(一般业务),类比原型设计是前端部分需求转化的过程,通过数据库分库、分表就能大致划分后端功能结构,如果后端开发人员跳过了数据库的设计,大概率会出现分不清功能结构的状况,只能根据页面原型猜测需要哪些接口,这种看到一个功能开

2023-09-28 09:05:42 267

原创 数据库数据表设计思想一

数据库设计一般交由后端开发人员直接设计(无论是否有经验),而不会让经验丰富的开发人员包揽(做评审即可)。1. 数据没必要一次完整的设计出来,开发过程中,难免会对数据库进行调整的,保证数据的骨架没有问题 【 增删字段、添加中间表、加视图都不会造成多大的影响 】2. 数据库设计是后端部分需求转换的过程(一般业务),类比原型设计是前端部分需求转化的过程,通过数据库分库、分表就能大致划分后端功能结构,如果后端开发人员跳过了数据库的设计,大概率会出现分不清功能结构的状况,只能根据页面原型猜测需要哪些接口,这种看

2023-09-28 09:02:55 388 1

原创 电商项目常用的五个设计模式场景及分析实现

*单例模式(Singleton Pattern)**是一种创建型设计模式,它确保类只有一个实例,并提供一个全局访问点。在单点登录模块中,我们选择使用单例模式来管理已登录用户的状态。这是因为我们需要在不同的应用组件中共享用户的登录状态,而且不希望多次实例化登录管理器。// 私有静态内部类确保线程安全的延迟初始化设计模式说明单例模式被用来确保系统中只有一个实例。这是因为登录状态需要全局管理,多个实例会导致数据不一致性。单例模式通过静态内部类方式实现了懒加载,确保了线程安全。

2023-09-27 21:04:27 1295

原创 面试题总结9月

Get请求携带的数据会以字符串形式拼接在URL上,可以从url上看到,不安全。Get请求携带的数据有大小限制一般是4K,而Post请求携带的数据大小无限制。Post请求携带的数据存放在requestBody中,较安全。Get请求具有幂等性且可以被浏览器缓存,Post请求则不可以。(使用匿名函数触发事件)'// 使用匿名函数来定义点击事件处理。Post请求是向服务器提交数据的。Get请求事项服务器请求数据的。

2023-09-26 20:01:14 61

原创 MySQL高级百科(逻辑/存储架构、事务、日志、MVCC、主从复制)

MySQL innodb逻辑/存储架构、事务、日志、MVCC、主从复制..

2023-09-23 15:59:15 42

转载 RabbitMQ问题分析及应对策略

rabbitmq的常见问题,消息重复消费,消息积压,消息丢失,分析及应对策略

2023-09-23 10:19:31 188

原创 终于弄懂了✨HashMap和ConcurrentHashMap

内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。

2023-09-22 20:27:03 153

原创 Mybatis动态SQ、分页以及一二级缓存

MyBatis 是一个优秀的持久层框架,用于处理数据库操作。MyBatis 通过将 SQL 语句与 Java 对象进行映射,使得开发人员能够通过对象来操作数据库,而无需编写底层的 SQL 语句。总之,MyBatis 通过将 SQL 语句与 Java 对象进行映射,简化了对数据库的操作,提高了开发效率。

2023-09-22 18:15:45 67

原创 立即拿捏过滤器和拦截器

过滤器和拦截器都是基于AOP思想实现的,用于处理某个统一的功能。

2023-09-22 13:56:35 37

转载 OpenFeign原理

如果项目中使用的是 GetMapping、PostMapping 之类的注解,没有使用 RequestMapping,那么 OpenFeign 也可以解析。来封装远程服务调用的过程,在上面的例子中看到的 helloWorldService 其实是一个特殊的接口,它是由 OpenFeign 组件中的 FeignClient 注解所声明的接口。OpenFeign 其实底层调用的是 Feign 的方法,生成了代理类,使用的是 JDK 的动态代理,然后 bean 注入。OpenFeign 组件的前身是。

2023-09-20 09:21:08 123

原创 一分钟带你通透Nginx三大核心

正向代理、反向代理、负载均衡、动静分离

2023-09-18 19:26:25 67

原创 Java相关技术延伸工作圈子

浅拷贝:对于基本数据类型,如int、float、double等,Java会自动进行值传递,因此不会产生新的对象,只是将原对象的值传递给新对象。对于引用数据类型,如数组、字符串、类等,Java会创建一个新的对象,并将原对象的引用指向新对象。这样,新旧对象共享同一块内存,对其中一个对象的修改会影响另一个对象。深拷贝:对于基本数据类型,Java不会进行深拷贝,因为基本数据类型的值传递就是深拷贝。对于引用数据类型,可以使用以下方法实现深拷贝:使用clone()方法:需要实现Cloneable。

2023-09-12 21:00:52 59

原创 SpringCloud微服务相关与SpringBoot专题

在项目启动的时候的会自动读取classpath路径下META-INE文件夹下spring.factories文件中的内容读取就是org.springframework.boot.autoconfigure.EnableAutoConfiguration该键所对应的值,该键所对应的值就是配置类的全类名,然后通过导入器(Importselector)将这个类导入到spring容器中,在该类中所配置的哪些类也被导入到了spring容器中。并配合条件注解来决定当前这个配置是否要生效。

2023-09-12 20:31:42 61

原创 一篇玩转RabbitMQ

消费者手动确认:在消费者处理完消息之后,手动发送确认信号告诉RabbitMQ消息已经被正确处理,这样RabbitMQ才会将消息从队列中删除。这种方式可以保证消息不会被重复消费,但如果消费者在处理消息时出现异常,消息就会被丢失。消息持久化:RabbitMQ默认将消息存储在内存中,如果发生宕机或者重启,未被消费的消息都会丢失。为了防止消息丢失,可以将消息持久化到磁盘中。需要注意的是,消息持久化会带来一定的性能损失。生产者确认:生产者在发送消息时,可以要求RabbitMQ发送一个确认信号,告知生产者消息是否已经被

2023-09-12 19:40:28 156

idea的maven配置

1.maven 2.idea 3.setting 4.repository

2022-03-09

空空如也

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

TA关注的人

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