自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 搭建redis主从同步实现读写分离(原理剖析)

为什么要学习redis主从同步,实现读写分析。因为单机的redis虽然是基于内存,单机并发已经能支撑很高。但是随着业务量的发展还是存在单机请求上限的瓶颈。所以redis提供了读写分离,主从同步的模式。可以让redis集群指定主节点,与从节点,一般来说大部分的业务都是读多,写少,所以一般都是让主节点来接收写请求,从节点来接收读请求。

2025-04-05 22:32:58 462

原创 一问讲透redis持久化机制-rdb aof

redis作为内存数据库,常常作为系统的缓存使用,但是内存是断电清空数据的,所以redis提供了自己的一套持久化机制,主流的是rdb和aof两种持久化机制,常常混合使用在实际使用中。

2025-04-03 22:52:59 322

原创 zookeeper基础命令详解

先启动一个zookeeper客户端连接zookeeper,如果还没有启动zookeeper集群的参考本文启动之后再做后续操作。此时可以发现节点名称是有序递增,且cZid也是有序递增,可以用于追溯分布式环境的事件顺序。创建节点(-e 临时节点(重启或者超时就消失 -s 有序序列))testseq0000000002被删除消失。进入命令行界面,输入Help查看有哪些指令。关闭zkCli之后,临时节点消失。

2024-12-14 18:10:50 837

原创 zookeeper集群部署(单机 windows)

注意:zookeeper集群数量推荐最好是奇数个,这是因为zookeeper集群需要选举leader节点,半数以上的会被选举为Leader节点,且集群半数以上存活,代表zookeeper集群存活。server后面第一个数字1-3代表刚才配置的myid的数字,zookeeper集群中有哪些服务器,后面ip是每个集群的ip地址,因为是单机所以都是localhost,后面的第一个端口是通信端口,第二个是选举端口。4.添加myid文件,myid文件是用来唯一标识每个zookeeper实例在集群中的id。

2024-12-14 12:36:23 955

原创 yun切换国内镜像

1.直接下载阿里云的 YUM 源配置文件来替换原有的配置。3.更新 YUM 源并测试。2.清除 YUM 缓存。

2024-12-08 10:15:05 253

原创 Docker基础概念

为什么要学习docker?docker是现在主流流行的容器化部署服务的技术栈之一。过去传统部署服务器的时候有这些缺点1.各种中间件,数据库等部署麻烦,版本控制难度大2.一个服务器可能有多个服务运行,一个服务如果把整个服务器占满资源,直接影响到多个服务的稳定性docker有哪些优势?1.直接可以通过指令直接install各种中间件,通过指令一键部署配置运行2.容器化部署可以做到容器化隔离环境,各个服务之间不会互相影响,加强了服务的稳定性。

2024-11-13 21:06:51 572 1

原创 zookeeper选举kafka集群的controller

kafka集群的controller是kafka集群中一个有特殊作用的broker,负责整个kafka集群的具体来说,Controller Broker的作用包括:1‌.主题管理‌:Controller负责创建、删除主题以及增加主题的分区。当使用kafka-topics.sh脚本进行这些操作时,大部分后台工作由Controller完成‌1。2‌.分区重分配‌:通过kafka-reassign-partitions.sh脚本对主题的分区进行细粒度的分配和管理。

2024-10-05 17:09:07 1355

原创 kafka-windows集群部署

部署本文步骤可以先阅读这一篇博客,这篇是关于单机kafka部署测试的。本文用到的文件均是这一篇博客中的文件修改配置部署的。kafka基本概念以及用法。

2024-10-05 11:30:45 776

原创 kafka基本概念以及用法

kafka是一个分布式流处理工具,被全球大量公司广泛应用在大数据处理领域。

2024-10-03 17:31:20 1647 1

原创 Eureka基本概念

不管是消费服务者还是消费提供者,都是服务,服务启动之后会注册到eureka的注册中心去,当服务消费者请求调用某个服务的时候,会根据eureka注册中心提供的服务列表,负载均衡去请求对应的ip。

2024-07-19 16:59:19 600 1

原创 微服务概念篇-服务提供者/服务消费者

服务消费者和服务提供者是相对来说的,比如:服务A调用服务B,服务B调用服务C对于服务B来说,他是服务A的服务提供者,但是同时又是服务C的服务消费者。

2024-07-19 16:29:20 620

原创 java多线程有哪些实现方式?

只会打印main,因为run方法并没有开启一个新的线程,run方法只是保存线程运行的代码块,不会创建新的线程,只是一个普通方法。tips:start方法才是新开启线程,此时代码会先答应出来main,然后才是run方法中的线程名。

2024-07-17 17:20:47 275

原创 常用Lamda表达式以及其使用过程中容易引发故障的点

本文用到的实体类都在下面。

2024-05-16 21:48:08 952

原创 JAVA异常体系

RuntimeException是程序运行中的异常,CheckedException是程序编译时候的异常。Erroe是程序无法处理的错误,一旦出现这个错误将导致程序被迫停止运行,比如OutOfMemoryError(内存溢出错误)和StackOverflowError(堆栈溢出错误)等。java的所有异常类都是继承于Throwable类的,Throwable下有Exception和Error类,

2024-02-25 22:28:41 410

原创 抽象类和接口的区别

2 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;抽象类官方的定义是具备抽象方法的类就是抽象类,实际上抽象类可以在class上面添加abstract关键字。接口是Java对单独特性的一种抽象,比如鸟和飞机都会飞,那他们都可以具备飞这个特性,那就可以用接口来抽象。1 抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法;2.抽象类的建立就是为了给子类继承的,如果没有继承的抽象类是没有意义的。

2024-02-25 21:55:17 710

原创 分布式ID方案以及各自方案优缺点

过去在单体架构的时候,数据库也是单库单表的时候,id可以随意设置数据库自增或者本地生成之类的都可以, 但是在分布式系统下,存在分库分表的情况,你单表的自增id是无法保证全局系统数据的id的一致性问题,所有引入分布式id的概念。在一些电商APP后者网站中,会有各种的订单id,退款id之类的,是可以直接看出来一些业务信息的,比如下单时间之类的。估分布式id的生成方案最好是要具备一定的业务性和可读性的总结来说分布式id最好具备以下特性:1.高可用2.高性能3.可读性,具备一定的业务信息。

2024-02-24 22:25:31 450

原创 redis-如何统计海量UV统计

UV统计是很多电商常见的一个需求,与PV不同的是,PV是统计应用的点击量或者浏览量,UV是单个页面单个用户去重之后的访问次数。如果用redis实现该功能,PV完全可以用计数器实现,UV可能大家会想到用redis的set不断去添加,但是如果你的网站并发量非常大,你将维护以后巨大的set。这时候就要介绍一个redis专门用于该类型场景的数据结构HyperLogLog了。

2024-02-23 15:34:50 511 1

原创 redis-实现分布式锁

redis在高并发环境下,大量请求线程并发get 或者set redis中的缓存数据可能出现数据不一致性问题。

2024-02-23 14:34:48 410 1

原创 redis删除key的策略

实际上redis是两种机制混合搭配作为自己的删除key的策略,保障服务器的内存和CPU资源的一个平衡。

2024-02-23 08:47:51 600 1

原创 String,StringBuffer,StringBuilder对比

运行结果是:分析原因:String是java里面一个不可变化字符串,如果有修改,要新开辟内存空间,废除过去的内存空间,这会导致大量的GC回收,性能在拼接过多字符串的时候会越来越差。而StringBuffer,StringBuilder都是动态字符串,可以随意拼接。

2024-02-22 14:41:57 375 1

原创 Spring-BeanDefinition

BeanDefinition是spring中定义bean的属性和行为的核心,提供了创建和管理bean的基础信息。

2024-02-18 22:51:30 384 1

原创 手写spring框架

【代码】手写spring框架。

2024-02-18 16:30:14 409 1

原创 Java重载和重写如何区分?

1.java重载(overlloading),重写(Overriding)是java面向编程的重要概念。

2024-02-17 21:26:29 381 1

原创 Spring-bean的创建生命周期

可以看出来 spring的依赖注入大概步骤:遍历对象的成员变量上面是否存在@Autowired注解,如果存在就到spring容器里面找到该bean注入。可以发现spring构造方法的参数注入是先根据类型,再根据变量名字去定位到底注入哪个bean。如果生成多个OrderService类的bean,在AppConfig新建三个bean。运行之后成功打印出test,这个是一个最简单的对象交给spring管理的例子。在UserService中定义orderService。打印出注入的OrderService对象。

2024-02-15 16:16:03 410 1

原创 JVM-对象在内存上的分配

test1类是return user ,user可能还存在外部引用,这种的对象不会随着方法调用结束,随着栈帧一起被销毁,可以逃出当前的作用域,称之为内存逃逸。如果栈帧没有一块连续的空间足以存放当前对象,此时会有标量替换的机制,将对象成员变量分解存储在栈帧或者寄存器之上。标量替换是基于逃逸分析条件下才会生效的,一般标量替换参数和逃逸分析参数都要同时开启。编码中一般要减少产生内存逃逸的编码,减少堆的压力,也就是减少gc。关闭逃逸分析的时候,对象都会存储在堆上,gc次数明显上升。

2024-02-11 23:02:09 348 1

原创 JVM-对象创建过程

初始化指的是:例如a=12 ,实际上jvm初始化的时候 会先给a初始化一个0的值,后面在init方法赋值具体的数值分配内存机制:1.指针碰撞机制(默认机制):如果java堆的内存的空间是绝对规整的,就维护一个内存指针作为分界点,新分配对象空间就挪动指针。

2024-02-11 20:09:37 386 1

原创 JVM参数设置

XX:MetaspaceSize :元空间触发full gc的初始阈值,默认是21M,如果回收之后 ,大量空间被回收,会适当缩减该阈值,如果很少空间被回收,则适当扩张该阈值。所以一般建议给-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize一样的初始值,减少full gc。3.方法区:-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize。-Xss越小,则每个线程可分配的栈大小越小,则系统可以同时开启的线程数越多。2.堆:Xms Xmx。

2024-02-11 11:17:16 462 1

原创 JVM内存模型概述以及内存分配机制(附代码验证)

1.类装载子系统:负责将class文件加载到JVM虚拟机内存中2.字节码执行引擎3.堆:基本创建的对象实例都会在这里分配内存,所有线程可以共享的区域,一般方法区或者栈帧的变量都会存储对应在堆的指针4.栈:又成栈帧,每开启一个线程,JVM就会分配一个栈帧区域5.本地方法栈:JVM内存很多是C++实现的,该内存空间是专门分配给C++本地方法的6.程序计数器:每个线程都有,用于记录当前线程执行字节码的地址。

2024-02-10 23:24:44 441 1

原创 JVM-类加载运行全过程概述

1.编写完整个项目Java代码启动2.windows系统下的java.exe(C++编写实现)调用jvm.dll(C++实现,C++的库函数)创建一个JVM虚拟机3.C++程序创建一个引导类加载器实例4.C++继续调用java代码,创建JVM启动器,实例是com.misc.Launcher,该类会继续创建其他的类加载器。5.loadClass调用我们自己编写的类6.C++调用我们的java代码里面的main函数。

2024-02-09 21:26:12 339 1

原创 JVM-双亲委派机制详解以及实例代码验证

2.虽然parent方法依次从应用类加载器指向引导类加载器,但是他们并不是父子继承关系,只是方法调用关系,接下来会深入源码剖析。1.可以看到应用类加载器加载的范围,包括了扩展类加载器和引导类加载器,但是实际他只会加载当前的项目的jar运行项目下面的类。扩展类加载器可以自行下钻对应的方法,这里展示下钻最后一步,最后传入的变量为null,因引导类加载器为C++实现。最后定位到 parent只是一个成员变量,故解答了,应用类加载器和扩展类加载器是调用关系,而不是继承关系。全局搜索到Laucher类。

2024-02-08 10:31:36 673

原创 一文讲透四大数据库隔离级别

数据库事务是日常开发工作中经常使用到的,要想深入理解数据库事务,需要先了解数据库的四大隔离级别的特点,以及他们对数据库事务的影响,才能知道实际运用数据库事务的时候如何编写业务代码数据库事务(从上到下的隔离性依次递增):1.读未提交-RU(read-uncommited)2.读已提交-RC(read-commited)3.可重复读-RR(repeatable-read)4.串行化-SR(SERIALIZABLE)

2024-01-13 21:54:28 2222 1

原创 mysql数据库引擎初识

提示:本篇内容Mysql版本号为5.7。

2024-01-11 23:02:27 397 1

原创 mysql索引初识

实际建立索引要根据数据结构的特点,针对不同的业务去确定要选取哪种数据结构作为索引,其中B+tree原理要深刻掌握,面试种该索引的数据结构是面试官最经常考察的点。

2024-01-08 22:38:33 450 1

原创 eureka+springboot环境搭建整合

以上就是eureka和springboot整合的步骤,搭建了一个简单的eureka-client和eureka-service,初步体验了eureka的服务注册和服务发现功能。

2023-10-02 21:36:23 1552 1

原创 微服务初识

微服务初识

2023-09-30 21:41:56 56

空空如也

空空如也

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

TA关注的人

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