- 博客(36)
- 收藏
- 关注
原创 undo log 和 redo log的区别
在MySQL中,数据被分为多个固定大小的数据页(通常为16KB),缓冲池通过将这些数据页加载到内存中,使得读取和写入操作可以直接在内存中进行,从而避免了频繁的磁盘I/O操作。数据页(Data Page)是MySQL中存储数据的最小单位,通常包含一组数据行。当需要读取或写入数据时,MySQL会首先查找数据页是否已经在缓冲池中,如果在,则直接读取或写入内存中的数据页;当数据库需要回放redo log 的时候,它会按照顺序读取redo log 中的记录并应用到对应的数据页上,从而恢复事务的修改。
2024-02-02 19:13:59
562
原创 mysql索引失效
5.以%开头的like模糊查询会导致索引失效。如果只是尾部匹配,索引不会失效。如果头部匹配,索引会失效。因为%放在左边的时候,代表以任意开头,这时候不知道找哪个就会全盘扫描导致索引失效。候,代表以任意开头,这时候不知道找哪个就会全盘扫描导致索引失效。查询要从索引的最左前列开始,不能跳过索引中的列。2.查询右边范围的列,不能使用索引。3.索引列上进行运算,索引会失效。4.字符串不加单引号,索引会失效。部分违反,只有最左边的命中索引。改变了列值,不满足查询条件。1.违反最左前缀法则。类型转换导致索引失效。
2024-01-26 22:16:37
421
原创 事务的特性
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,这些操作要么同时成功要么同时失败。
2024-01-26 22:13:13
418
原创 redis缓存
缓存击穿:给某一个key设置了过期时间,当key过期的时候,恰好有大量请求,这些请求可能会瞬间把数据库压垮缓存雪崩:是指同一时段大量缓存的key失效或者redis宕机,导致大量请求直接到数据库,带来巨大压力。
2024-01-19 17:46:12
409
原创 数据库常见的锁
记录锁(Record Lock):对数据库表中的记录进行锁定,只锁定指定的记录,其他事务可以并发地操作其他记录。行级锁(Row-Level Lock):粒度更细的锁,只对具体的行进行锁定,可以并发地操作其他行。Next-Key Lock:结合了记录锁和间隙锁,锁定索引记录以及索引范围之间的间隙,防止幻读。间隙锁(Gap Lock):锁定索引范围之间的间隙,用于防止其他事务在锁定范围内插入新的记录。表锁(Table Lock):对整个表进行锁定,锁定期间其他事务无法对表进行读取和修改。
2023-12-11 20:12:57
512
原创 CPU密集型和IO密集型
例如,假设我们有一个需要从磁盘读取大量数据并执行计算的程序。但是,如果将此任务分配给多个CPU内核,其中一些内核可以执行计算任务,而另一些内核可以执行IO操作,以最大限度地利用CPU资源并缩短处理时间。CPU密集型工作负载是指需要大量的CPU时间来执行的工作负载,例如大数据分析、图像处理或者科学计算等。在多核CPU上,CPU密集型工作负载可以被分配到多个CPU内核上并行执行,以缩短处理时间和提高性能。但是,如果将此任务分配给具有多个CPU内核的系统中的多个内核,则可以并行执行排序操作并大大缩短处理时间。
2023-12-07 19:40:25
474
原创 ELK的日志
使用docker cp放到容器内/usr/share/logstash/pipeline目录下。使用docker cp放到容器内/usr/share/logstash/config目录下。使用docker cp放到容器内/usr/share/logstash/config目录下。docker restart重启容器即可。
2023-12-06 20:17:27
532
原创 线程池,7个参数和4大拒绝策略
线程池(Thread Pool)是一种用于管理和复用线程的机制,它可以在程序初始化时创建一定数量的线程,并以池的形式管理这些线程的生命周期。通过线程池,我们可以将多个任务分配给这些线程进行并发执行,从而提高程序的处理效率。
2023-12-05 19:15:09
418
原创 三种定时器
Scheduling适用于简单的定时任务场景,与Spring框架无缝集成,轻量级且易于使用。Quartz适用于复杂的定时任务场景,提供灵活的调度功能和丰富的API,支持分布式部署。XXL-Job适用于分布式环境下的任务调度,提供完善的任务管理和监控功能,适合大规模任务调度。
2023-12-04 20:06:48
353
原创 sychronized
是Java中的关键字,用于实现线程之间的同步。它可以修饰方法或代码块,以确保在同一时间只有一个线程可以访问被。关键字的性能进行了一系列的优化。其中包括锁消除、锁粗化、偏向锁、轻量级锁等技术,以减少。修饰的代码,从而避免多线程环境下的数据竞争和不一致性。是一个用于同步的对象,可以是任意的Java对象。在JDK 1.6及之前的版本中,对。在很多场景下能够提供良好的性能表现。运行结果,各自无重复。
2023-11-30 20:30:35
375
原创 静态,动态,cglib
编写一个实现 InvocationHandler接口的处理器类来代理,创建代理对象,代理对象执行代理返回实体的对象。使用setSuperclass方法让代理类成为实体类的父类,再使用setCallback回调已经设置好的对象。编写一个实现MethodInterceptor接口的处理器类。手动编写代理类进行代理,通常代理类和目标类都实现同一接口。
2023-11-28 20:18:50
350
原创 Spring是如何解决循环依赖的
Spring中的循环依赖(Circular Dependency)指的是两个或多个bean之间相互引用,形成了环形依赖关系。这种情况下,如果不加控制,Spring容器将无法完成依赖注入。
2023-11-28 09:07:22
364
原创 RPC和Http的区别
它定义了客户端和服务器之间的请求-响应模型,以及请求和响应的格式和语义。RPC可以使用不同的传输协议,例如TCP、UDP等,以适应不同的场景和需求。TCP是RPC的常用传输协议,在保证可靠性的同时,还具有较高的传输效率和性能。综上所述,RPC和HTTP是两种不同的通信协议,它们各自有着不同的设计目标、通信方式、接口定义、连接方式和传输协议。常见的RPC框架包括gRPC、Apache Thrift、Dubbo等,它们提供了完整的RPC协议栈和相应的工具,使得开发者可以方便地实现分布式系统中的远程调用功能。
2023-11-25 17:35:58
1241
原创 build设计模式
Builder模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来,两者之间的耦合度也降到最低。Builder模式通常作为配置类的构建器将配置的构建和表示分离开来,同时也是将配置从目标类中隔离出来,避免作为过多的setter方法。当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象。2.建造者独立,容易扩展。
2023-11-24 09:05:39
399
1
原创 http协议和websocket协议之间的区别
2.在WebSocket协议中,客户端和服务器之间建立一条长连接,可以随时互相发送消息。连接建立后,客户端和服务器都可以发送消息,消息格式由应用程序自定义。连接关闭时,需要发送特定的关闭帧进行关闭。1.WebSocket协议是基于TCP的长连接,客户端和服务器之间可以双向发送消息,而不必每次都发送新的请求。这种方式可以实现实时推送和即时通讯等应用,提供更好的实时性和性能。3.WebSocket协议适用于需要实时推送和即时通讯的应用。例如,游戏、在线聊天、视频会议、推送服务、股票行情等。
2023-11-22 19:30:32
33
原创 计算机网络体系结构
物数网传会表应物理层:负责在物理媒介上传输原始比特流,包括电压、光脉冲等,网线、光纤、集线器(Hub)等传输介质,以及调制解调器(Modem)等设备。数据链路层:负责通过物理地址进行寻址,错误检测和纠正,并且管理对物理介质的访问,网卡(Network Interface Card,NIC)、交换机(Switch)等设备,以太网协议(Ethernet)就是在这一层操作的。
2023-11-20 19:10:44
57
1
原创 gitlab搭建
通常情况下,这是一个比较合理的设置,可以让 Puma 充分利用系统资源,提供更好的性能。如果一个 worker 进程在指定的时间内没有完成处理请求,Puma 会认为该进程出现问题,并尝试重启该进程,以确保服务器的稳定性。设置过小的并发数可能会导致任务排队等待过长的时间,而设置过大可能会对系统性能造成压力。在这个示例中,设置了模糊页的内存释放延迟时间为1000毫秒,即1秒。修改puma服务器配置,设置每个worker进程的超时时间为60秒,设置puma服务器的worker进程数由cpu核心数自动决定。
2023-11-18 16:19:13
210
1
原创 生产者消费者消费者模型
缓冲区作为生产者和消费者之间的中介,可以缓解生产者和消费者速度不匹配的问题。生产者和消费者之间需要进行同步和互斥,以确保缓冲区的一致性和线程安全。队列(Queue)和栈(Stack)是两种常见的数据结构,它们在计算机科学中有着广泛的应用。总之,生产者消费者模型是一种非常常见的并发编程模型,可以有效地解耦生产者和消费者之间的关系,并确保线程安全和高效率的数据传输。生产者消费者模型是计算机科学中常见的并发编程模型之一,它通过解耦生产者和消费者的关系,以实现线程安全和高效率的数据传输。
2023-10-30 20:34:57
198
1
原创 数据库分表分库的原则
具体是否需要分库分表还是要看具体的业务场景,例如流水表、记录表,数据量非常容易到达千万级、亿万级,需要在设计数据库表的阶段就进行分表,还有一些表虽然数据量只有几百万,但字段非常多,而且有很多text、blog格式的字段,查询性能也会很慢,可以考虑分库分表。整个数据库读写出现性能瓶颈,例如数据库连接数被打满了(MySQL最大连接数默认150),或者并发量太大导致单个数据库已经无法满足日常的读写需求,就需要将整个库拆开。单表数据量大,读写出现瓶颈,这个表所在的库还可以支撑未来几年的增长。
2023-10-28 14:51:11
125
1
原创 Threadlocal对象的使用
ThreadLocal是Java中的一个类,用于在多线程环境中保存线程本地变量。它允许每个线程拥有自己独立的变量副本,从而避免了线程之间的数据共享问题。ThreadLocal通常用于保存线程相关的上下文信息,比如用户会话、数据库连接、事务等。ThreadLocal的用途线程封闭ThreadLocal可以用来实现线程封闭,这意味着每个线程都可以独立地访问自己的变量,而不会影响其他线程。
2023-10-25 19:43:28
37
1
原创 CAS的操作
CAS(Compare and Swap)是一种用于实现多线程同步的原子操作。它主要用于解决多线程环境下的并发问题,保证共享变量的原子性操作。在Java中,CAS操作是由包提供的。CAS操作包含三个参数:需要修改的内存位置、原始值和新值。CAS操作会比较内存位置的值和原始值是否相等,如果相等,则将内存位置的值更新为新值;否则,不进行任何操作。
2023-10-24 19:22:12
821
原创 spring缓存注解
这些注解需要配合缓存管理器一起使用,常见的缓存管理器包括Ehcache、Redis、Caffeine等。在Spring配置文件中,需要进行相应的配置以启用缓存功能,并指定使用的缓存管理器。
2023-10-18 19:41:25
35
1
原创 springMVC的工作流程
MVC的核心思想是分离关注点(Separation of Concerns),将应用程序的不同功能分割开来,使得每个部分可以独立地进行开发、测试和维护。通过明确的角色划分,实现了低耦合、高内聚的设计,增加了系统的可扩展性和可维护性。MVC(Model-View-Controller)是一种软件设计思想,它将一个应用程序分为三个主要组成部分:模型(Model)、视图(View)和控制器(Controller),每个部分都有不同的职责。MVC)、移动应用开发框架(如iOS的MVC模式)、桌面应用程序等。
2023-10-18 19:29:56
27
1
原创 mysql数据库引擎Inodb
数据库引擎是计算机上的一种软件,它被用来管理、存储和处理数据。数据库引擎是构建数据库系统的基础之一,它提供了一种访问数据和管理数据的方式,并且负责维护数据的完整性和安全性。负责处理数据的存储、检索和管理等功能。不同的数据库引擎有着不同的特点和功能,主流数据库引擎包括 MySQL、Oracle、SQL Server 等。Oracle 的数据库引擎相对于其他的数据库引擎,具有更加强大的扩展性和可靠性,在大型企业级应用中广泛应用。MySQL 作为一种免费的数据库引擎,较为适合中小企业使用。
2023-10-16 19:04:14
60
1
原创 搭建maven私服
D:\software\apache-maven-3.9.4\conf目录下的settings.xml文件。(img-ap4s32kR-1697159704115)](img-RUUqYiYW-1697159704115)]在浏览器中输入http://自己的Linuxip:自己设置的端口。在浏览器中输入http://自己的Linuxip:自己设置的端口。创建完成将创建的仓库加入到组中。创建完成将创建的仓库加入到组中。选择maven hosted。1.下载配置maven。上传Liinux服务器。
2023-10-13 09:18:15
40
原创 swagger的使用
Swagger是一组围绕 OpenAPI 规范构建的开源工具,可帮助您设计、构建、记录和使用 REST API。主要的 Swagger 工具包括:Swagger Editor – 基于浏览器的编辑器,您可以在其中编写 OpenAPI 规范。Swagger UI – 将 OpenAPI 规范呈现为交互式 API 文档。swagger2于17年停止维护,现在最新的版本为 Swagger3(Open Api3)
2023-10-11 19:51:52
32
原创 springboot整合Dockerfile
修改docker.service的配置打开配置文件:指定containerd` 的 socket 文件路径。:指定dockerd:指定dockerd/var/run/docker.sock` 进行本地访问。修改完毕后重启配置命令会重新加载 systemd 的配置文件,以使最新的更改生效。命令会重新启动 Docker 服务。这将停止当前正在运行的 Docker 服务,并重新启动它,以应用任何新的配置更改或修复问题。查看端口是否有效测试服务是否启动开放2375端口。
2023-10-10 19:58:01
97
1
原创 mysql创建主从
p 3306:3306 设置端口 左边是容器端口 右边是mysql端口。-e MYSQL_ROOT_PASSWORD=123 设置root密码。和主数据库一样放到从数据库的conf目录下命名为my.cnf。将配置文件放在主数据库的conf目录下命名为my.cnf。–network wn_docker_net 设置网络。–ip 172.18.12.2 设置ip。进入从数据库,和主数据库的操作一样。这里需要在主数据库查看对应的数据。这里需要在主数据库查看对应的数据。-d mysql 运行镜像。
2023-10-09 19:21:57
31
1
原创 【无标题】
解决IPv4 forwarding disabled网络不能联通的问题。docker search 软件名。docker pull +镜像名称。docker run +镜像。2.查看docker版本号。需要先停止运行在进行删除。1.安装docker。3.重启docker。4.docker网络。查看docker网络。5.docker镜像。查看docker镜像。
2023-10-08 19:35:54
55
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人