自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(139)
  • 收藏
  • 关注

原创 JVM 垃圾收集器

E代表Eden区,S代表 Survivor 区,H代表的是 Humongous(G1 用来分配大对象的区域,对于 Humongous 也分配不下的超大对象,会分配在连续的 N个Humongous 中),剩余的深蓝色代表的是0ld区,灰色的代表的是空闲的 region这种思想上的转变和设计,使得G1可以面向堆内存任何部分来组成回收集来进行回收,衡量标准不再是它属于哪个分代,而是哪块内存存放的垃圾最多,回收收益最大,这就是G1收集器的 Mixed GC模式,即混合GC模式。这样实现简单,运行高效。

2024-09-25 18:11:40 1579 2

原创 JVM类加载机制

在 JM 虚拟机实现规范中,通过 classLoader 类加载器把 *.class 字节码文件(文件流)加载到内存,并对字节码文件内容进行验证、准备、解析和初始化,最终形成可以被虚拟机直接使用的 java.lang.class 对象,这个过程被称作类加载。类是在运行期间第一次使用时,被类加载器动态加载至 JVM。JVM不会一次性加载所有类。因为如果一次性加载,那么会占用很多的内存。

2024-09-23 20:04:05 920

原创 JVM 基本组成

线上系统突然宕机,系统无法访问,甚至直接 OOM;线上系统响应速度太慢,优化系统性能过程中发现 CPU 占用过高,原因是因为JVM 的 GC次数过于频繁;新项目上线,需要对JVM的各种参数进行设置;面对上述实际工作中产生的问题,都需要对 JVM 有全面的掌握和了解。

2024-09-23 19:22:47 903

原创 乐观锁、悲观锁

因此,在整个执行过程中,将处于锁定状态。所以,悲观锁是一种悲观思想,它总认为最坏的情况可能会出现,它认为数据很可能会被其他人所修改,所以悲观铁在持有数据的时候总会把资源 或者 数据 铁住,这样其他线程想要请求这个资源的时候就会阻塞,直到等到悲观锁把资源释放为止。当数据被修改时,version 值会 +1。乐观锁的思想与悲观锁的思想相反,它总认为资源和数据不会被别人所修改,所以读取不会上锁,但是乐观锁在进行写入操作的时候会判断当前数据是否被修改过。,乐观锁适用于读多写少的场景,这样可以提高程序的吞吐量。

2024-09-20 17:14:46 492

原创 常见的并发集合(java.util.concurrent)

基本介绍BlockingQueue是并发工具包 java.util.concurrent 中提供的一种线程安全的队列实现,它主要用于生产者-消费者模式中,为多线程应用提供了一种高效和安全的方式来管理共享资源。BlockingQueue 的主要特点是当队列满时,生产者线程会被阻塞,直到有消费者线程消费了队列中的元素,或者等待超时;同样,当队列空时,消费者线程会被阻塞,直到有生产者线程添加了新的元素,或者等待超时。

2024-09-20 09:21:40 940

原创 线程池的类型

适用于处理 CPU 密集型的任务,确保 CPU 在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。e.执行完任务的线程,还可以存活 68 秒,如果在这期间,接到任务,可以继续存活下去;c.如果线程数等于核心线程,把任务添加到LinkedBlockingQueue 阻塞队列。:用于任务分治的线程池实现类,它支持任务的分叉Fork和合并Join ,适合。d.如果线程执行完任务,去阻塞队列取任务,继续执行。b.如果线程数少于核心线程,创建核心线程执行任务。

2024-09-19 17:25:52 529

原创 线程池的状态

该状态的线程池,不会接收新任务,也不会处理工作队列中的任务,同时会中断正在运行的任务;该状态的线程池,不会接收新任务,但是会继续处理工作队列中的任务;该状态的线程池会接收新任务,并处理阻塞队列中的任务;该状态表明所有的任务已经终止,工作线程的数量为0;:线程池中非核心线程空闲的存活时间值和时间单位。:阻塞工作队列,存放等待执行的线程任务;,该状态表示线程池彻底关闭;:线程池的核心线程数;:线程池的最大线程数;:创建新线程的线程工厂。

2024-09-19 11:49:21 453

原创 线程池的执行流程总结

1.提交任务后会首先进行当前工作线程数与核心线程数的比较,如果当前工作线程数小于核心线程数,则直接调用 addWorker() 方法创建一个核心线程去执行任务;2.如果工作线程数大于核心线程数,即线程池核心线程数已满,则新任务会被添加到阻塞队列中等待执行,当然,添加队列之前也会进行队列是否为空的判断;

2024-09-19 11:19:39 782

原创 代理模式——静态代理、动态代理

静态代理是以硬编码的方式,手动定义创建的代理类动态代理的代理类是在运行时动态创建的,在JDK的核心类库中,可以使用Java.lang.reflect.Proxy 类和 InvocationHandler 接口来生成动态代理基于接口的动态代理(jdk自带 Proxy)JDK动态代理是基于接口实现的代理,只能代理实现了接口的类。

2024-09-10 16:35:51 1244

原创 Java反射机制(Reflection)

反射(Reflection)是一种Java程序运行期间的动态技术,可以在运行时(runtime)检查、修改其自身结构或行为。通过反射,程序可以访问、检测和修改它自己的类、对象、方法、属性等成员。

2024-09-09 20:17:28 982

原创 消息中间件 --RocketMQ

消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统 的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间 件,常见的角色大致也就有Producer(生产者)、Consumer(消费者)例如:寄快递。

2024-09-05 18:08:53 1097

原创 消息中间件 --Kafka

Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。生产者发送消息,多个消费者只能有一个消费者接收到消息生产者发送消息,多个消费者都可以接收到消息producer:发布消息的对象称之为主题生产者(Kafka topic producer)topic:Kafka将消息分门别类,每一类的消息称之为一个主题(Topic)consumer:订阅消息并处理发布的消息的对象称之为主题消费者(consumers)broker:已发布的消息保存在一组服务器中,称之为Kafka集群。

2024-09-04 17:48:49 1268 2

原创 ElasticSearch--倒排索引

是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基 于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布, 是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速, 安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他 语言中都是可用的。

2024-09-04 16:47:46 1357

原创 Swagger

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用 Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述 文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个 描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文 档即代码。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。

2024-08-23 15:46:06 1451 1

原创 微服务事务管理

重启项目,先启动shop_product服务,再重启shop_order服务,观察结果会发现如果没有模拟异常的情况下会在浏览器输出商品信息,同时数据库表中的商品表中的商品库存会减少一个,订单表中会显示下单信息。观察结果,如果模拟一个除0错误,浏览器会报错,同时数据库表中的商品表中的商品库存不会减少,订单表中的数据也不会变化,商品表的数据会回滚回去。如果此时要保证⼀致性,就必须等待⽹络恢复,完成数据同步后,整个集群才对外提供服务,服务处于 阻塞状态,不可⽤。

2024-08-23 11:03:44 1528

原创 微服务保护

什么是雪崩问题?微服务之间相互调⽤,因为调⽤链中的⼀个服务故障,引起整个链路都⽆法访问的情况。限流是对服务的保护,避免因瞬间⾼并发流量⽽导致服务故障,进⽽避免雪崩是⼀种预防措施。超时处理、线程隔离、降级熔断是在部分服务故障时,将故障控制在⼀定范围,避免雪崩。是⼀种补救 措施。Sentinel是阿里巴巴开源的一款微服务流量控制组件。官网地址: https://sentinelguard.io/zh-cn/index.html。

2024-08-22 16:10:09 1443

原创 微服务⽹关

总结: ⽹关搭建步骤:1. 创建项⽬,引⼊nacos服务发现和gateway依赖2. 配置application.yml,包括服务基本信息、nacos地址、路由路由配置包括:1. 路由id:路由的唯⼀标示2. 路由⽬标(uri):路由的⽬标地址,http代表固定地址,lb代表根据服务名负载均衡3. 路由断⾔(predicates):判断路由的规则,4. 路由过滤器(filters):对请求或响应做处理。

2024-08-21 18:37:59 681

原创 Spring 面试题总结

Spring Ioc有三种注入方式:构造注入、Setter注入、属性注入;构造注入:使用构造方法注入bean;Setter注入:使用Setter方法注入bean;属性注入:使用成员属性注入bean,不推荐。原因:使用私有的成员属性变量,依靠反射实现,破坏封装,只能依靠IoC容器实现注入,不严谨;11. Spring中常见的ApplicationContext实现类有哪些?记忆关键字:分别介绍每种实现类或子接口根据项目类路径classpath下的配置文件加载bean。

2024-08-21 15:16:41 1000

原创 微服务通信

Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本 地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。

2024-08-20 17:47:15 831

原创 微服务注册中心

Nacos 致⼒于帮助您发现、配置和管理微服务。Nacos 提供了⼀组简单易⽤的特性集,帮助您快 速实现动态服务发现、服务配置、服务元数据及流量管理。nacos的作⽤就是⼀个注册中⼼,⽤ 来管理注册上来的各个微服务Ribbon是 Netflixfa 发布的⼀个负载均衡器,有助于控制 HTTP 和 TCP客户端⾏为。

2024-08-20 15:21:43 751

原创 微服务案例搭建

Spring框架提供的RestTemplate类可⽤于在应⽤中调⽤rest服务,它简化了与http服务的通信⽅式,统 ⼀了RESTful的标准,封装了http链接, 我们只需要传⼊url及返回值类型即可。相较于之前常⽤的 HttpClient ,RestTemplate是⼀种更优雅的调⽤RESTful服务的⽅式。在Spring应⽤程序中访问第三⽅REST服务与使⽤Spring RestTemplate类有关。

2024-08-20 12:46:47 675

原创 微服务基础知识

SOA 全称为 Service-Oriented Architecture,即⾯向服务的架构。它可以根据需求通过⽹络对松散耦合 的粗粒度应⽤组件(服务)进⾏分布式部署、组合和使⽤。⼀个服务通常以独⽴的形式存在于操作系统进程 中。站在功能的⻆度,把业务逻辑抽象成可复⽤、可组装的服务,通过服务的编排实现业务的快速再⽣,⽬ 的:把原先固有的业务功能转变为通⽤的业务服务,实现业务逻辑的快速复⽤。通过上⾯的描述可以发现 SOA 有如下⼏个特点:分布式、可重⽤、扩展灵活、松耦合。

2024-08-19 19:40:30 787

原创 Spring中Bean的“一生”(生命周期)

BeanDefinition存储到一个名为beanDefinitionMap对象存储在一个名为singletonObjects的MapSpring Bean的生命周期是从 Bean 实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。Bean的实例化阶段。

2024-08-18 21:57:00 1272

原创 Spring Boot自动配置原理

自动装配是指在应用程序启动时,SpringBoot根据classpath类路径下的依赖自动装配应用程序所需的一系列bean和配置类,从而减少开发者的配置工作,提高开发效率。需求: 自定义redis-starter,要求当导入redis坐标时,SpringBoot自动创建Jedis的Bean参考: 可以参考mybatis启动类的应用创建redis-spring-boot-autoconfigure模块。

2024-08-18 15:29:42 6222 5

原创 redis持久化机制、Redis 删除策略、企业级解决方案

当我们客户端访问不存在的数据时,先请求redis,但是此时redis中没有数据, 此时会访问到数据库,但是数据库中也没有数据,这个数据穿透了缓存,直击数据库,我们都知道数据 库能够承载的并发不如redis这么高,如果大量的请求同时过来访问这种不存在的数据,这些请求就都会 访问到数据库,简单的解决方案就是哪怕这个数据在数据库中也不存在,我们也把这个数据存入到redis 中去,这样,下次用户过来访问这个不存在的数据,那么在redis中也能找到这个数据就不会进入到缓存 了。所以 Redis 提供了持久化功能!

2024-08-16 17:19:26 1123

原创 Spring-data-redis

说明: 在 SpringBoot2.x 之后,原来使用的jedis 被替换为了 lettucejedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接池lettuce : 采用netty,实例可以再多个线程中进行共享,不存在线程不安全的情况!可以减少线程数据了@Bean//1.创建自定义模板类//配置json类型的序列化工具//这样key会用字符串方式保存/*** 测试自定义。

2024-08-15 19:15:49 1407

原创 Jedis的使用以及Java和redis的连接

注意:定义配置类JavaConfig,自定义序列化策略@Autowired@Test//保存对象Student stu = new Student(1,"彭老师","拉面");//获取对象Student stu2 = new Student(2,"彭老师","拉面");Student stu1 = new Student(2,"彭老师","拉面");Student stu3 = new Student(2,"彭老师","拉面");

2024-08-15 12:42:16 889

原创 整合springboot、mybatis-plus、做的电影的增删改查以及使用七牛云做图片的上传

同时数据库表中的字段必须与实体类中的属性一致,假如数据库中的字段为mo_id而实体类中的属性为moId(小驼峰)两者才会映射上。新建一个mapper包里面新建一个mapperMovie接口,继承公共的数据访问层BaseMapper<Movie>编写接口的实现类MovieServiceImp,继承公共的业务实现类实现业务层接口中定义的方法。观察结果将演员改为张嘉佳11,票房改为10 点击修改按钮,会发现数据修改成功。观察结果发现编号为29的数据被删除了,同时七牛云里面的图片也被删除。

2024-08-15 11:02:38 893

原创 SpringBoot事务-调度-缓存

在项目开发中,绝大多数情况下都是通过同步方式处理业务逻辑的,但是比如批量处理数据,批量发送邮件,批量发送短信等操作容易造成阻塞的情况,之前大部分都是使用多线程来完成此类任务而在Spring 3+之后,就已经内置了@Async注解来完美解决这个问题,从而提高效率。此时我们开启事务管理,同时模拟一个除0错的异常,我们继续观察结果会发现页面上会报错(500),同时数据库表中也只会新增模拟异常之前的一条数据。观察结果我们会发现页面上会显示成功,同时我们会发现数据库表中也会新增三条数据。:在业务层的实现类添加了。

2024-08-14 19:39:30 802

原创 Redis

随着互联网网站的兴起,传统的关系数据库在应付动态网站,特别是超大规模和高并发的纯动态网站已经显得力不从心,暴露了很多难以克服的问题。如商城网站中对商品数据频繁查询、对热搜商品的排行统计、订单超时问题、以及微信朋友圈(音频,视频)存储等相关使用传统的关系型数据库实现就显得非常复杂,虽然能实现相应功能但是在性能上却不是那么乐观。nosql这个技术门类的出现,更好的解决了这些问题,它告诉了世界不仅仅是sql。问题现象海量用户高并发罪魁祸首——关系型数据库性能瓶颈:磁盘IO性能低下。

2024-08-14 17:00:36 855

原创 springboot整合mybatis以及mybatis-plus 开发

MyBatis最佳搭档,只做增强不做改变,为简化开发、提高效率而生。详细信息请看官方文档MyBatis-Plus 🚀 为简化开发而生。

2024-08-13 22:01:38 1428

原创 使用七牛云进行文件上传以及文件删除

3、查看个人秘钥,注册完成账号后,会有一个秘钥,上传文件的时候进行授权和认证。2、在里面创建空间,一个空间相当于一个文件夹,就是将对象上传到的地方。1、注册七牛云账号,完成后选择对象存储。进入七牛云开发者中心。

2024-08-12 19:46:44 1105

原创 springboot的web开发

只要静态资源放在类路径下: called /static (or /public or /resources or /METAINF/resources 访问 : 当前项目根路径/ + 静态资源名。绑定的机制:SpringMVC 绑定请求参数的过程是通过把表单提交请求参数,作为控制器中方法参数进行绑定的。method=常量,此请求的类型(get,post),若不设置则此请求适配所有的请求方式。localhost:8080/login/王老师/123。@GetMapping 查询。

2024-08-12 18:44:17 729

原创 SpringBoot搭建和使用

随着动态语言的流行(Ruby、Scala、Node.js), Java的开发显得格外的笨重;繁多的配置、低下的开 发效率、复杂的部署流程以及第三方技术整合难度大。在上述环境下,Spring Boot由此诞生,它的设计是为了使您能够尽可能快地启动和运行。它使用 “习惯 优于配置” (项目中存在大量的配置,而 Spring Boot 内置一个习惯性的配置,让你无须手动进行配 置)的理念让你的项目快速运行起来。

2024-08-11 22:51:46 713

原创 SpringAOP 面向切面编程

AOP(Aspect-Oriented Programming: 面向切面编程):将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性;

2024-08-08 19:13:32 1329

原创 Java设计模式以及代理模式

代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。

2024-08-07 23:34:30 941

原创 SpringIOC整合dbUtil做的增删改查以及转账业务的实现

dbUtil-阿帕奇提供操作数据库的插件1.事务管理应该由service层进行实现代码优化:目的:业务层进行事务管理1.同一个业务方法的多个dao方法公用一个connection对象3.通过连接对象进行事务的统一管理。

2024-08-07 23:28:31 1248

原创 Spring注解(annotation)以及Spring 配置类

替换:<context:property-placeholder location="classpath:message.properties"></context:property-placeholder>替换:<context:component-scan base-package="com.apesource"></context:component-scan>作用:用于把当前方法的返回值作为bean对象存入spring的容器中。替换:<bean id="" class=""></bean>

2024-08-06 21:52:45 1036

原创 SpringDI(依赖注入) 以及SpringIOC容器对Bean管理

是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器注入当前bean对象所需要的另外一个bean对象。(例如在(MyBatis整合Spring 时,SqlSessionFactoryBean依赖(IoC容器注入一个Datasource数据源bean );接口 InitializingBean。request=======>一个请求创建一个。session=======>一个会话创建一个。singleton=====>单例(默认)prototype=====>多例。

2024-08-06 21:03:19 594 1

原创 初识Spring以及SpringIOC

重要重要。

2024-08-05 21:10:19 1001

空空如也

空空如也

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

TA关注的人

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