自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CPU传统存取数据方式&DMA

由 CPU 直接处理数据的传送,数据拷贝时会一直占用 CPU 的资源。由 CPU 向DMA磁盘控制器下达指令,让 DMA 控制器来处理数据的传送,数据传送完毕再把信息反馈给 CPU,从而减轻了 CPU 资源的占有率。当用户程序向内核发起系统调用时,CPU 将用户进程从用户态切换到内核态;当系统调用返回时,CPU 将用户进程从内核态切换回用户态。网络 I/O磁盘 I/O读操作当应用程序执行 read 系统调用读取一块数据的时候,如果这块数据已经存在于用户进程的页内存中,就直接从内存中读取数据。

2024-04-10 11:28:55 806

原创 零拷贝记录

当涉及到网络编程和IO操作时,数据拷贝是一个常见的性能瓶颈。传统的数据拷贝过程中,数据需要从内核缓冲区复制到用户空间缓冲区,然后再从用户空间缓冲区复制到内核缓冲区,这个过程会耗费大量的CPU时间和内存带宽,降低系统的性能和吞吐量。为了解决这个问题,零拷贝技术应运而生。零拷贝技术是指在数据传输过程中,避免将数据从一块内存拷贝到另一块内存,从而减少了CPU的开销和内存带宽的消耗,提高了系统的性能。

2024-04-10 10:30:37 914

原创 HTTP/UDP/TCP/IP网络协议

同时呢,4位值的是4个bit位,四个比特位的取值范围0-15.因此,这里的首部长度的单位也是4字节,比如:4个bit位 1111 == 15,实际表示的首部长就是60(4*15)字节。发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。

2024-04-03 15:49:31 1222 1

原创 JVM 相关知识点记录

JDK1.8中,Parallel Scavenge 被设置为年轻代(Young Generation)的默认垃圾回收器,而 Parallel Old 是用于老年代(Tenured Generation)的垃圾回收器。

2024-03-14 19:56:33 965 1

原创 Mysql 索引、锁与MVCC等相关知识点

当事务对某一行数据进行改动时,会产生一条Undo日志,多个事务同时操作一条记录时,就会产生多个版本的Undo日志,这些日志通过回滚指针(DB_ROLL_PTR)连成一个链表,称为版本链。是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。排它锁(Exclusive Lock):也称为写锁,事务持有排它锁时,其他事务无法同时持有共享锁或排它锁,用于保护数据的写操作。也叫普通读,读取的是记录数据的可见版本,不加锁,不加锁的普通select语句都是快照读,即不加锁的非阻塞读。

2024-03-13 18:45:17 1097

原创 MQ高可用相关设置

消息丢失的三种情况消息在传入服务过程中丢失MQ收到消息,暂存内存中,还没消费,自己挂掉了,内存中的数据搞丢消费者消费到了这个消息,但还没来得及处理,就挂了,MQ以为消息已经被处理也就是生产者丢失消息、消息列表丢失消息、消费者丢失消息;

2024-03-10 16:52:03 1193

原创 Java后台面试相关知识点解析

SpringBoot里面默认使用动态代理配置在。

2024-03-07 16:28:23 1030

原创 Spring 源码解析

文章目录前言相关Spring的定义接口整体代码StartupStep contextRefresh = this.applicationStartup.start("spring.context.refresh")prepareRefresh()obtainFreshBeanFactory()registerBeanPostProcessors(beanFactory)SpringAOP原码流程@EnableAspectJAutoProxyAnnotationAwareAspectJAutoProxyCre

2024-02-29 09:54:50 968

原创 Netty入门案例

Netty抽象出两组线程池: BossGroup 专门负责接收客户端的连接, WorkerGroup 专门负责网络的读写。BossGroup 和 WorkerGroup 类型都是 NioEventLoopGroupNioEventLoopGroup 相当于一个事件循环组, 这个组中含有多个事件循环 ,每一个事件循环是 NioEventLoopNioEventLoop 表示一个不断循环的执行处理任务的线程, 每个NioEventLoop 都有一个selector。

2024-02-26 15:44:55 382

原创 Nginx缓存相关配置解析

客户端需要访问服务器的数据时,如果都直接向服务器发送请求,服务器接收过多的请求,压力会比较大,也比较耗时;而如果在nginx缓存一定的数据,使客户端向基于nginx的代理服务器发送请求,可以有效节省时间。Nginx缓存机制的作用缓存能够提升性能,学会Nginx中如何使用缓存很重要。Nginx作为静态资源服务器,静态资源变动频率小,缓存能够加速访问。Nginx离用户最近,启用缓存能更好的提高性能,结合Redis可以组成类似二级缓存。完整的官方配置文档。

2024-02-20 17:40:05 1240

原创 Redis主从复制&哨兵&集群搭建解析

bind:指定主节点的IP地址,从节点会连接到该IP地址上。port:指定主节点的端口号。requirepass:指定主节点的认证密码,从节点需要提供正确的密码才能连接到主节点。slaveof:指定从节点连接的主节点的IP地址和端口号。masterauth:指定从节点连接主节点的认证密码。Redis复制过程主节点将写操作写入内存缓冲区,并将写操作发送给从节点。从节点接收到写操作后,将其写入自己的内存中。

2024-02-19 17:14:54 897

原创 SpringMVC 源码学习博客记录

在请求到达服务器时,RequestMappingHandlerMapping将匹配请求路径和请求方法,并将请求映射到适当的处理器方法。SpringMVC 应用启动时会搜集并分析每个 Web 控制器方法,从中提取对应的 "<请求匹配条件,控制器方法>“ 映射关系,形成一个映射关系表保存在一个RequestMappingHandlerMapping的bean 中(详见HandlerMapping)。但客户端只需要一种,这就要求客户端和服务端之间有一种机制,能确保服务端响应的是客户端想要的,这就是内容协商。

2024-01-10 17:23:45 525

原创 Java原生启动Tomcat

这是这样的场景:您正在开发一个 Java Web 应用程序,现在您想要嵌入 Tomcat 以进行单元测试或将 Web 应用程序作为独立的 Java 程序交付。默认情况下,Tomcat 尝试按以下顺序使用这些系统属性:catalina.base、catalina.home和user.dir。运行此程序,您可以看到 WAR 文件的内容被提取到基本目录,您可以使用指定的上下文路径访问 Web 应用程序。这种方法对于测试打包在 WAR 文件中的现有 Web 应用程序非常方便,并且您不必接触它们的代码。

2024-01-03 17:01:48 1098

原创 SpringBoot源码搭建

从v2.3.x开始,SpringBoot开始强制用Gradle构建项目,如需使用maven搭建,可下载。会下载相关依赖的下载,稍等一会儿。这里下载并搭建windows版本。

2023-12-26 17:38:23 461

原创 Linux安装Java环境

检查系统版本检查系统内核版本清空卸载java环境(如果已经安装了)查询java所在位置删除java移除所有java相关包及软件清空java环境变量在/etc/profile等环境变量文件中,删除java相关环境变量。

2023-11-29 15:45:24 453

原创 Linux设置Nginx开机自启

最底部增加这一行: /usr/local/nginx/sbin/nginx。执行重启linux系统的命令reboot。重启Linux后,查看Nginx启动状态。自此已经完成Nginx开机自启。

2023-11-29 10:27:37 851

原创 Mybatis 源码搭建

根据自己实际项目地址修改,ctrl+鼠标左键可打开本地‘http://mybatis.org/dtd/mybatis-3-config.dtd’,将路径指定为本地路径即可。或者本地路径的全路径,如果在非mybatis源码包下,需要写全路径,比如自己定义的mybatis-gabriel项目。将mybatis-parent与mybatis导入idea同一个project下。mybatis需要设置父工程为mybatis-parent,需要注意。新建一个测试模块,这里叫mybatis-gabriel。

2023-11-27 10:09:52 1269

原创 Java 常用设计模式学习记录

单一职责在类的级别上,一个类只负责一项职责;在方法的级别上,一个方法只做一件事。如类A负责两个不同职责:职责1、职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分为A1,A2互不影响。接口隔离客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。这里的接口实际上指的是“超类型”,可以是抽象类abstract class,也可以是接口interface。依赖倒置/控制反转/面向接口编程原则面向接口编程,而不是面向具体的实现类编程。

2023-11-24 11:05:49 840

原创 SpringBean 生命周期各种BeanPostProcessor调用时机整理

【代码】SpringBean 生命周期各种BeanPostProcessor调用时机整理。

2023-11-16 15:15:12 59

原创 Spring源码搭建及相关知识点记录

spring-web:模块提供基本的面向Web的集成功能,例如多部分文件上传功能,以及初始化一个使用了Servlet侦听器和面向Web的应用程序上下文的IoC容器。spring-webmvc:模块(也称为Web-Servlet模块)包含用于Web应用程序的Spring的模型-视图-控制器(MVC)和REST Web Services实现。因为低级切面的功能比较基本。代理创建器来进行解析的,将高级切面转换成低级切面,用来处理被@AspectJ注解标注的切面类和Spring Advisors的。

2023-11-08 17:03:13 50

原创 SpringCloud Alibaba学习记录

华为云博客原文CSDN原博客Sentinel 控制台包含如下功能:查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信 息,最终可以实现秒级的实时监控。规则管理和推送:统一管理推送规则。生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。Sentinel 2.0 将降级规则改名称为熔断规则实时监控:监控接口通过的QPS和拒绝的QPS。

2023-11-06 14:45:04 41

原创 SpringCloud学习记录

需要声明是Springboot的Bean,添加注解@Component,名称必须以RoutePredicateFactory结尾,这个是命名约束。如果不按照命名约束来命名,那么就会找不到该断言工厂。前缀就是配置中配置的断言。可以直接复制Gateway中已经实现的断言工厂,修改对应的内容,避免踩坑。继承父类AbstractRoutePredicateFactory,并重写方法。需要定义一个Config静态内部类,来接收断言配置的数据。

2023-10-23 16:04:45 195

原创 Containerd 入门

默认Containerd管理的容器仅有lo网络,无法访问容器之外的网络,可以为其添加网络插件,使用容器可以连接外网。containerd 默认配置文件在 /etc/containerd 目录下,名称为 config.toml。ctr 命令功能太少,因此 containerd 支持客户端工具扩展,推荐使用 nerdctl。执行脚本文件,基于/etc/cni/net.d/目录中的*.conf配置文件生成容器网络。创建名为mynet的网络,其中包含名为cni0的网桥。解压cni插件工具至上述创建的目录中。

2023-09-05 16:52:29 117

原创 K8s 容器暴露端口

需要容器内部服务与宿主机同一网段特点:当Pod调度到哪个节点就使用哪个节点的IP地址,客户端使用IP地址访问容器里面的服务。一个node只能启动一个pod端口,端口不能冲突。可以直接访问 192.168.54.129。

2023-08-28 16:54:28 357

原创 Nginx 加‘/‘区别

实际访问代理地址:http://127.0.0.1:8899/v1/pt/apply/page。实际访问代理地址:http://127.0.0.1:8899/v1/pt/apply/page。实际访问代理地址:http://127.0.0.1:8899/v1/pt/apply/page。实际访问代理地址:http://127.0.0.1:8899/v1/pt/apply/page。实际访问代理地址:http://127.0.0.1:8899/v1/pt/apply/page。

2023-08-15 16:23:57 48

原创 Promethus 配置记录

保存后重启Prometheus,http://localhost:9090/rules,查看上述配置的规则,出现则说明配置成功。配置文件中的PromQL(expr)表达式可以在Prometheus的Graph界面运行一下,检验是否符合需要。Prometheus 是可以在运行时自动加载配置的。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。Prometheus 会从 http://hadoop202:9090/metrics 上拉取数据。

2023-08-15 10:20:04 108

原创 Jvm 内存调优命令行

如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件,format=b是通过二进制的意思,file指定输出目录文件。Metaspace元空间主要是存储类的元数据信息,各种类描述信息,比如类名、属性、方法、访问限制等,按照一定的结构存储在Metaspace里。:设置每个线程的堆栈大小。

2023-07-31 15:14:53 767

原创 Haproxy 配置文件

haproxy的配置文件大概可以分两段:第一段配置是global配置段即全局配置段,主要是针对haproxy的进程和安全相关的配置;第二段是proxies代理配置段,主要是配置haproxy前端监听那个地址那个端口以及后端server的名称、地址、端口,以及server相关属性等配置;而proxies配置段里又分defaults配置段,这个部分主要是定义后续的backend,listen这两个段的默认配置;什么意思呢?也就是在后面的配置中如果我们没有写对应参数,它默认会继承defaults里的配置;

2023-07-26 15:26:17 1681

原创 Keepalived 部署及配置

keepalived的主要由vrrp stack、checkers、ipvs wrapper以及控制组件配置文件分析器,IO复用器,内存管理这些组件组成,其中vrrp stack 是用来实现vip的高可用;checkers用于基于不同协议对后端服务做检测,它两都是基于系统调用和SMTP协议来完成对vip的转移,以及故障转移后的邮件通知,以及vip和后端服务的检测;ipvs wrapper主要用于生成ipvs规则;

2023-07-24 10:02:29 1421

原创 openssl证书颁发

表示加密算法(生成的私钥为了安全要进行加密),这里选择des3算法和(根据 口令,盐值,迭代次数 推算出来对称加密密钥)对私钥做对称加密。私钥生成后,您的私钥文件现在将作为 server.key 保存在您的当前目录中,并将用于生成CSR(因为csr这个里面包含公钥,所以这里需要私钥来生成对应的公钥)生成的server.key为加密私钥文件,私钥就保存在这个文件内,一般文件内的私钥已被加密,只有通过口令才能得到原私钥。指生成的私钥文件 1024指生成的私钥长度,还可以选2048,4096,默认是1024。

2023-07-19 15:08:09 67

原创 LVS 负载均衡服务搭建

Linux 标准内核的一部分,Linux 2.4 之前,必须重新编译内核才能支持负载均衡类型核心原理实践案例两层修改请求数据包中的 MAC 地址后转发LVS DR 模式三层将请求数据包重新封装后转发四层修改请求数据包目标地址种的IP或IP+端口后进行转发七层解封请求数据包在HTTP层判断请求头后进行转发DNS域名多个 A 解析、智能解析万网、DNSPodLVS 相关术语DS:Director Server,指的是前端负载均衡器节点。

2023-07-19 14:40:12 192

原创 Nginx 配置Https及ACL

客户端在收到证书后,首先将签名取下,使用CA的公钥(CA的公钥是大家都知道的)对签名进行解密拿到摘要1,客户端再用hash算法对明文信息进行加密得到摘要2,对比两个摘要是否相等,若相等,则证明此明文信息没有进行过篡改则去除其中服务器server的公钥,查看明文信息中的其他信息。在上述配置中,当用户IP地址不在“acl_group”中定义的“admin”或“user”组时,会返回403 HTTP状态码,禁止对“/admin”和“/user”路径的访问。首先,需要定义规则,将用户分组并定义与其相关的属性。

2023-07-17 11:26:07 147

原创 Haproxy 状态页内容

【代码】Haproxy 状态页内容。

2023-07-13 11:20:47 154

原创 Kafka 部署安装及相关操作记录

⾃定义反序列化类,需要实现 org.apache.kafka.common.serialization.Deserializer 接⼝。

2023-07-04 15:35:39 269

原创 RabbitMq 相关深度操作

尚硅谷笔记整理。

2023-06-28 15:07:24 165

原创 RocketMQ ⾼级原理记录

RocketMQ ⾼级原理学习记录

2023-06-08 17:02:15 77

原创 RocketMQ部署及简单API应用

整理RocketMQ常用API,原生及Spring整合

2023-06-08 11:19:42 405

原创 Java 锁相关知识汇总及锁升级

synchronized是Java中的关键字,是一种同步锁。修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。

2023-04-07 11:43:58 607

原创 Docker安装Oracle

Docker安装配置Oracle详细教程(持久化)

2023-03-22 16:45:24 194

原创 @DS(“slave“) 多数据源兼容事务问题解决方案

@DS("slave") 多数据源兼容事务问题解决方案

2023-02-21 16:27:52 1671

RocketMQ黑马笔记

RocketMQ黑马笔记

2023-06-08

RocketMQ原生API简单应用

Rocket_API_BaiLi/图灵笔记

2023-06-07

空空如也

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

TA关注的人

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