- 博客(89)
- 收藏
- 关注
原创 CMS、G1、ZGC
G1 将堆内存分为多个大小相等的独立区域 Region,每个 Region 都可以扮演Eden、Survivor、Old 区的角色,这样可以不像其他垃圾回收器那样整个代进行回收,它是对Region进行回收。G1 可以建立可预测的停顿时间模型,用户可以指定一个期望的停顿时间,G1 会根据这个目标来调整垃圾回收的策略,尽量保证每次垃圾回收的时间不超过设定的停顿时间。G1 能充分利用多CPU、多核环境下的硬件优势,使用多个垃圾收集线程同时进行垃圾回收工作,减少垃圾回收的停顿时间。3.可预测的停顿时间。
2024-09-09 23:33:32
430
1
原创 设计模式应用
JDK Proxy、CGLIB 动态代理。JDK 动态代理基于接口实现,CGLIB代理通过继承目标类来实现。Spring中的Bean默认是单例的,方便不同组件共享一个对象。约定了模板,用户通过实现接口来制定具体的功能。SpringAOP 日志、事务、监控。
2024-09-09 21:07:55
656
2
原创 2024/8/14
但是当自旋超过一定的次数,或者一个线程在持有锁,一个在自旋,又有第三个来访时,轻量级锁升级为重量级锁。当线程调用该方法时,Java虚拟机会自动获取该方法所属对象的锁,并在方法执行结束时释放该锁,实现对该方法的加锁和解锁操作。需要注意的是,锁升级过程是不可逆的,即锁从偏向锁升级到轻量级锁后,就不能再回到偏向锁的状态。轻量级锁阶段(Lightweight Locking):是指当锁是偏向锁的时候,被另外的线程所访问,偏向锁就会升级为轻量级锁,其他线程会通过自旋的形式尝试获取锁,不会阻塞,从而提高性能。
2024-08-15 08:59:31
944
原创 2024/8/13
Zset 对象能支持范围查询(如 ZRANGEBYSCORE 操作),这是因为它的数据结构设计采用了跳表,而又能以常数复杂度获取元素权重(如 ZSCORE 操作),这是因为它同时采用了哈希表进行索引。redis 中是使用了一个【哈希表】保存所有键值对,哈希表中存放的是指向键值对数据的【指针】(dictEntry*)redis 中 key 是字符串对象,value 可以是字符串对象,也可以是集合数据类型对象。跳表的相邻两层的节点数量最理想的比例是2:1,查找复杂度可以降低到O(logN)
2024-08-14 11:06:07
339
原创 7.26
使用当你需要执行一个计算并希望得到结果时。使用runAsync当你只想执行一个操作而不需要返回值时。这两个方法都可以使你的程序在多线程环境中更加高效和响应迅速,特别适合处理 I/O 密集型或计算密集型任务。通过合理使用这两个方法,可以显著提高应用程序的性能和可扩展性。使用thenApply当你需要对异步计算的结果进行转换并返回新结果时。使用thenAccept当你只想处理结果而不需要返回值时。使用当你需要将一个的结果传递给另一个异步操作时。
2024-07-27 14:46:16
1406
原创 --7.4
用于读取 Request 请求的 body 部分并且 Content-Type 为 application/json 格式的数据,接收到数据之后会自动将数据绑定到 Java 对象上去。这个注解是@Controller和@ResponseBody的合集,表示这个是控制器bean,并且是将函数的返回值直接填入 HTTP 响应体中。是REST风格的控制器。是一系列依赖关系的集合,因为它的存在,项目的依赖之间的关系对我们来说变得简单了。
2024-07-04 20:31:37
333
原创 Dubbo 服务路由
服务路由包含一条路由规则,路由规则决定了服务消费者的调用目标,即规定了服务消费者可调用哪些服务提供者。Dubbo 目前提供了三种服务路由实现,分别为条件路由 ConditionRouter、脚本路由 ScriptRouter 和标签路由 TagRouter。其中条件路由是我们最常使用的。
2024-04-08 13:33:47
1649
原创 Dubbo 负载均衡
负载均衡是在支持应用程序的资源池中的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。负载均衡器是位于用户与服务器组之间的设备,充当不可见的协调者,确保均等使用所有资源服务器。
2024-04-08 11:54:59
1136
原创 Dubbo 序列化
(serialization)在的资料处理中,是指将或状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。
2024-04-07 22:07:02
1328
原创 远程过程调用(远程调用)
分布式计算中,远程过程调用RemoteProcedureCall,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用Java RMI。RPC是一种进程间通信。
2024-04-07 20:39:47
1275
原创 服务注册 Zookeeper
是启用 zookeeper 注册中心唯一必须指定的属性,而在生产环境下,address通常被指定为集群地址,如protocol 与 address 分开配置的模式也可以,如。
2024-04-07 19:34:23
1144
原创 Dubbo 服务发现
Dubbo是一个高性能、轻量级的分布式服务框架,提供了服务注册和服务发现的功能。在Dubbo中,服务的注册和发现是通过注册中心来实现的。注册中心的作用是集中存储和管理服务的元数据信息,包括服务的地址、协议、调用方式等。Dubbo框架支持多种注册中心,包括Zookeeper、Redis、Multicast、Simple等。其中,Zookeeper是最常用的注册中心之一。配置注册中心:首先,在Dubbo配置文件中配置注册中心的地址和连接信息。
2024-04-07 16:16:58
1153
原创 Spring MVC 的返回值有哪些
除了上述类型外,还可以返回其他自定义的POJO对象,Spring MVC会尝试将其转换为适当的响应类型。- 返回一个逻辑视图名(view name),Spring MVC会使用视图解析器(View Resolver)将逻辑视图名解析为具体的视图对象,并进行渲染。- 方法的返回类型为void时,表示该方法会直接渲染响应,一般用于通过`HttpServletResponse`对象手动设置响应内容。- 返回一个具体的视图对象,比如`JSPView`、`FreeMarkerView`等。
2024-04-03 12:10:28
530
原创 Spring MVC 的执行流程
5、处理器 Controller 根据请求执行对应的业务逻辑,返回 ModelAndView 对象给适配器,适配器再给前端控制器。3、前端控制器通过处理器映射器 HandlerMapping 根据请求 URL 找到对应的处理器 handler。6、DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;2、请求首先到达 Spring MVC 的前端控制器 DispatcherServlet。4、前端控制器使用处理器适配器调用处理器处理请求。
2024-04-03 11:47:27
520
原创 分享一下设计模式的学习
设计模式是在软件设计过程中,经过实践和总结得出的描述、解决软件设计问题的一种经验总结。它是一种被广泛接受和验证的最佳实践,用于解决特定类型的问题,并提供了可重用的解决方案。设计模式提供了一种在特定情境下构建和组织代码的方式,以解决常见的设计问题。它们是根据软件设计原则和设计思想来定义的,可以帮助软件开发人员更好地理解和解决相似的设计问题。设计模式的目标是提高软件设计的可复用性、可扩展性和易维护性。它们通过使用已经被验证的解决方案来减少重复的代码编写,并使软件设计更加灵活和可扩展。
2024-03-31 19:49:32
1044
原创 lInux 常用命令
在Linux中,vi是一种文本编辑器,广泛用于命令行环境下的编辑任务。vi具有强大的功能和灵活性,非常适合程序员和系统管理员使用。要使用vi编辑文件,可以按照以下步骤操作:打开终端(命令行界面)。在终端中使用vi命令加上要编辑的文件路径来启动vi。例如,要编辑一个叫做myfile.txt的文件,可以在终端中输入。vi会打开指定的文件,并显示文件的内容。vi/texttext:n:N请注意,这只是一些常用的命令示例。vi。
2024-03-26 17:14:42
1175
原创 主从复制的实现
MySQL 的主从复制依赖于 binlog ,也就是记录 MySQL 上的所有变化并以二进制形式保存在磁盘上。复制的过程就是将 binlog 中的数据从主库传输到从库上。这个过程一般是的,也就是主库上执行事务操作的线程不会等待复制 binlog 的线程同步完成。1、从库生成,一个 I/O 线程,一个 SQL 线程;2、I/O 线程去请求主库的 binlog,并将得到的 binlog 日志relay log(中继日志) 文件中;3、主库会。
2024-03-25 19:54:16
558
原创 Java 内存模型概述
在并发编程中,需要解决两个问题:线程之间如何通信和线程之间如何同步通信是指线程之间以何种机制来交换信息在命令式编程中,通信机制主要分为两种:共享内存和消息传递Java 的并发采用的是共享内存模型。
2024-03-21 16:04:19
374
原创 聊一聊基础
面向对象编程在解决问题的时候,会先抽象出对象,再使用对象去解决问题。面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。面向对象编程有三大特性,继承、封装、多态 使得面向对象编程更易于维护、复用、扩展。
2024-03-21 13:43:44
279
原创 数据库三范式
在满足第一范式的基础上,要求表中的所有非主键列都完全依赖于主键。例如,在订单表中,订单号作为主键,产品名称和产品价格作为非主键列,如果产品价格依赖于产品名称而不是订单号,那么产品价格就不满足第二范式。第三范式(3NF)。这意味着非主键列之间的依赖关系应该通过主键来建立,而不是通过其他非主键列。例如,在员工表中,如果部门名称依赖于部门ID,而不是员工ID,那么这种依赖关系就是传递依赖,不符合第三范式。第一范式(1NF)。例如,在学生表中,如果一个学生的地址由多个州组成,那么这个地址应该被拆分为多个列。
2024-03-20 22:14:28
203
转载 CompletableFuture
作者:架构悟道链接:https://juejin.cn/post/7124124854747398175来源:稀土掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2024-03-20 18:43:16
40
原创 线程池知识点总结
池化思想:线程池、字符串常量池、数据库连接池提高资源的利用率预先创建多个线程对象,放入缓冲池中如果核心线程数是5,来5个任务,每个线程对应一个任务在执行如果来10个任务,且任务队列的长度是5,那么就是5个在被执行,5个在任务队列如果来15个任务,最大线程数是10的话,那么就会扩充5个线程如果来16个任务,那么总会有一个任务去触发拒绝策略,进行相应的处理。
2024-03-05 21:45:09
392
原创 Java基础知识点
方法重载:方法重写:IO流中提供了一个直接操作字符的接口,方便我们对字符进行流操作如果是音频文件、图片等媒体文件用字节流比较好如果涉及到字符的话,比如说中文,使用字符流比较好IO中有字节缓冲流和字符缓冲流它属于是设计模式中的装饰器模式,在不改变原有对象的情况下,来增强子类的功能使用缓冲流,可以把数据加载至缓冲区,一次读取、写入多个字节,降低IO次数使用缓冲流的作用主要体现在read()和write(int b),不带字节数组的方法的时候,使用缓冲流的话可以显著提高性能。为什么会提高性能呢?其实就是缓冲流中自
2024-03-05 19:24:09
1212
原创 ElasticSearch相关知识点
ES的作用:ES是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容ELK技术栈:ES结合kibana、Logstash、Beasts,也就是 elastic stack。被广泛应用在日志数据分析、实时监控等领域。ES与lucene:为什么不用lucene?因为这个是个类库,还需要写很多API。ES的实时更新很强大相较于Solr。
2024-03-03 11:01:24
522
原创 JVM垃圾回收详解
JavaGuide下图中的Eden区、两个S区S0、S1都属于新生代JDK8版本之后永久代被元空间取代,元空间使用的是直接内存元空间,不再与堆连续,而是直接存在于本地内存,也就是机器的内存。理论上机器内存有多大,元空间就有多大。在之前的版本中,字符串常量池存在于永久代中,在大量使用字符串的情况下,容易出现OOM异常,此外JVM加载的class总数、方法的大小等都很难确定,因此对永久代大小难以确定。
2024-03-02 15:30:29
1096
原创 MyBatis知识点
mybatis-config.xml文件下,进行数据库连接信息的配置,加载一些映射文件构建会话对象工厂,SqlSessionFactory创建对话SqlSessionExeCutor执行器,执行CRUD操作MapperdStatement对象,封装某一个标签。
2024-03-01 19:46:54
404
原创 Spring框架知识点
答:AOP是面向切面编程,是指哪些与业务实现无关,但又对多个对象产生影响的公共行为和逻辑,将他们横向抽取并封装为一个可重用的模块,这个模块就叫“切面”。作用就是降低代码耦合度,提高了系统的可维护性日志Spring中内部的事务处理异常处理Spring中的事务是如何实现的?
2024-03-01 16:28:46
845
原创 redis是单线程,为什么这么快?
redis是纯内存操作,C语言编写,执行速度非常快。采用单线程,避免不必要的上下文切换,不用考虑线程安全问题。采用I/O多路复用模型,非阻塞I/O。例如:bgsave和bgrewriteaof都是在后台执行操作,不影响主线程使用,不会产生阻塞。
2024-02-28 19:38:28
344
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人