自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Eureka基本概念

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

2024-07-19 16:59:19 23

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

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

2024-07-19 16:29:20 29

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

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

2024-07-17 17:20:47 181

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

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

2024-05-16 21:48:08 860

原创 JAVA异常体系

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

2024-02-25 22:28:41 367

原创 抽象类和接口的区别

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

2024-02-25 21:55:17 665

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

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

2024-02-24 22:25:31 375

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

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

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

原创 redis-实现分布式锁

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

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

原创 redis删除key的策略

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

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

原创 String,StringBuffer,StringBuilder对比

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

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

原创 Spring-BeanDefinition

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

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

原创 手写spring框架

【代码】手写spring框架。

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

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

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

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

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

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

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

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

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

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

原创 JVM-对象创建过程

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

2024-02-11 20:09:37 337 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 350 1

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

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

2024-02-10 23:24:44 385 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 296 1

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

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

2024-02-08 10:31:36 534

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

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

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

原创 mysql数据库引擎初识

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

2024-01-11 23:02:27 367

原创 mysql索引初识

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

2024-01-08 22:38:33 407

原创 eureka+springboot环境搭建整合

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

2023-10-02 21:36:23 1053

原创 微服务初识

微服务初识

2023-09-30 21:41:56 33

空空如也

空空如也

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

TA关注的人

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