自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

代码蒋的博客

欢迎各位一起交流

  • 博客(66)
  • 收藏
  • 关注

原创 线程创建的三种方式和线程池创建的四种方式

要配置一个线程池是比较复杂的,尤其是对于线程池的原理不是很清楚的情况下,很有可能配置的线程池不是较优的,因此在Executors类里面提供了一些静态工厂,生成一些常用的线程池。2.可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)。因此把run()方法称为执行体。线程的执行流程很简单,当执行代码start()时,就会执行对象中重写的void run()方法,该方法执行完成后,线程就消亡了。

2024-07-04 11:03:39 1661 4

原创 线程池的七大核心参数

3. 线程空闲时间(keepAliveTime):当线程池中的线程数量超过核心线程数时,空闲线程在被回收之前等待新任务的最长时间。6. 线程工厂(threadFactory):用于创建新线程的工厂类,一般使用默认的ThreadFactory即可。7. 拒绝策略(handler):当线程池已满并且队列也已满时,对新任务的处理策略,可以是抛出异常、丢弃任务等。1. 核心线程数(corePoolSize):线程池中能够同时执行的线程数量。4. 时间单位(unit):线程空闲时间的单位,可以是秒、毫秒等。

2024-07-04 10:58:06 335

原创 JDK和CGLIB动态代理的区别(高能)

CGLIB则使用的继承机制,针对类实现代理,被代理类和代理类是继承关系,所以代理类是可以赋值给被代理类的,因为是继承机制,不能代理final修饰的类。b.jdk代理是通过反射的方式来实现动态代理,而cglib则是通过为目标类生成一个子类的方式来实现动态代理;a.jdk代理只能对实现了接口的类进行代理,而cglib代理可以对普通类进行代理;JDK动态代理机制是委托机制,只能对实现接口的类生成代理,通过反射动态实现接口类;CGLIB创建代理对象效率较低,执行效率高。JDK创建代理对象效率较高,执行效率较低;

2024-07-03 15:09:14 628

原创 代理模式(Proxy模式)

代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;代理对象可以扩展目标对象的功能;代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;增加了系统的复杂度;

2024-07-03 15:07:45 1225

原创 个人对SpringBoot中约定大于配置的理解

例如,如果模型中有个名为Student的类,那么数据库中对应的表就会默认命名为student。反之,可以配置来达到所期待的方式。SpringBoot的约定大于配置,按我的理解是:对比SpringMVC,需要在web.xml里面配置前端控制器,还需要在核心配置文件(*-servlet.xml)中配置视图解析器啥的,更要配置第三方的Tomcat服务器。这就是SpringBoot的优势,在传统所需要配置的地方,SpringBoot都进行了约定(配置好了),开发人员能配置得更少,更直接地开发项目,写业务逻辑代码。

2024-07-02 14:18:04 551

原创 OpenFeign原理整理

4.基于上面加载的每一个 FeignClient 接口,会生成一个动态代理对象,指向了一个包含对应方法的 MethodHandler 的 HashMap。生成的动态代理对象会被添加到 Spring 容器中,并注入到对应的服务里。2.然后将解析到的数据封装成元数据,并为每一个方法生成一个对应的 MethodHandler 类作为方法级别的代理。6.从动态代理对象 Proxy 中找到一个 MethodHandler 实例,生成 Request,包含有服务的请求 URL(不包含服务的 IP)。

2024-07-02 14:13:15 749

原创 nacos 服务发现失败的问题

后面查找发现是依赖版本不对,spring-cloud-alibaba-dependencies在spring cloud官网上的最新版本不匹配spring boot 和 spring cloud的最新版本,解决方案俩种。2:找了下spring-cloud-alibaba-dependencies的版本,找到有个2022.0.0.0-RC1的版本,试了下可行,同样附可用版本​​​​​​。之后整合gateway也出现问题访问不了,解决方法像之前一样导入loadbalance的依赖就好了。检查发现没有缺少依赖。

2024-07-01 22:12:39 1460

原创 数据库三大范式(详解)

范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。

2024-07-01 22:09:29 3650

原创 Mysql--B+树--数据结构

在修改树的结构时,可能需要进行节点的分裂和合并操作,以保持树的平衡性。而在B+树中,叶子节点只存储关键字和指向数据的指针,而内部节点存储关键字和指向子节点的指针。通过树的平衡和有序性,B+树的查询操作可以在最坏情况下以O(log N)的时间复杂度完成,这意味着即使对于大量数据,查询也可以很快完成。例如,对于给定的范围条件,可以直接定位到范围内的第一个叶子节点,并沿着链表顺序遍历到最后一个满足条件的叶子节点,从而减少了搜索的次数。非叶子节点的指针:B+树的非叶子节点包含指向子节点的指针,并形成链表结构。

2024-06-30 20:55:11 1766

原创 mysql默认存储引擎--innodb存储引擎(详解)

InnoDB是一个支持ACID事务、行级锁定和高并发的事务型数据库引擎,它与MySQL服务器紧密集成。以下是有关InnoDB存储引擎的要点总结:数据存储和索引:InnoDB将表和索引存储在一个表空间中,而不是像MyISAM表那样分别存储在不同的文件中。这个表空间可以由多个文件组成,并且在操作系统上没有2GB文件大小限制。事务支持:InnoDB支持完整的事务处理,符合ACID(原子性、一致性、隔离性和持久性)属性。它允许在事务中包含多个SQL语句,并提供回滚和提交功能。

2024-06-30 20:51:59 1135

原创 Mysql--悲观锁、乐观锁

首先在谈到并发控制机制的时候,我们通常会提及两种重要的锁策略。悲观锁(Pessimistic Locking)和乐观锁(Optimistic Locking)。这两个是在处理并发的时候采取的不同思路。

2024-06-29 09:36:33 1028

原创 Linux-如何查看服务器中的硬件配置信息

2.hdparm -I /dev/sda(替换 /dev/sda 为你的磁盘设备名):获取SATA硬盘的详细参数。3.smartctl -a /dev/sda(适用于S.M.A.R.T.支持的磁盘):获取硬盘健康状况和详细信息。在Linux服务器上查看硬件配置信息,可以使用一系列命令行工具。1.fdisk -l 或 lsblk -f:列出所有磁盘及其分区情况。

2024-06-29 09:32:58 1088

原创 Gateway 路由(详解)

Gateway网关的路由功能可不是简简单单的“转发”请求,在请求到达网关再流转到指定服务之间发生了很多事儿,它不光可以拒绝请求,甚至可以“篡改”请求的参数,我们接下来就去看看路由这里面的门道。

2024-06-28 14:25:30 969

原创 Java基础知识(入门级开发必看)

数组是数据的集合,一个容器,用来存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。语法:数组名 = new 数据类型[外长度][内长度];,如:num = new int[4][3];语法:数据类型[][] 数组名;,如:int[][] num;语法:数组名[外下标][内下标] = 数据;,如:num[0][0]= 3;语法:数组名[外下标][内下标],获取指定下标是数据。语法:数组名[下标],获取指定下标是数据。

2024-06-28 14:22:46 1011

原创 Redis缓存--热key 问题解决方案

热key问题是指:突然有几十万甚至更大的请求去访问redis上的某个特定key。这样会造成流量过于集中,达到Redis单实例瓶颈(一般是10W QPS级别),或者物理网卡上限,从而导致这台redis的服务器Hold不住,直到缓存服务器垮掉。要解决缓存中的热key问题也简单,主要分两步:监控热key和处理热key。上面的热key问题是面对高并发情况下,不得已的办法,涉及到两级缓存架构有点复杂了,实际情况主要看业务场景是否确实需要。

2024-06-27 08:58:18 1387

原创 Spring框架中的单例Bean是不是线程安全的

ThreadLocal,底层使用map,当前线程的对象作为key,value则是你想让变成私有属性的变量,或实例对象。Dao层会操作数据库,但是每一个和数据库连接的connection,都会被数据库的事务机制管理,如果开启了Spring事务机制,那么也会被其管理。每一个线程到来后,都会去创建map,如果是线程池中的核心线程,这个线程不死亡,它每次执行到这里都会往map中存对象,可能导致内存溢出。,那么这个数就是不安全的,每次线程到来都会被执行一次,count值加一。,那么我们可以有以下几种办法,保证安全。

2024-06-27 08:52:55 380

原创 如何避免C++中的内存泄漏

C++11引入了智能指针(如std::unique_ptr、std::shared_ptr等),它们可以自动管理内存,当智能指针离开其作用域时,会自动释放所指向的内存,这大大降低了内存泄漏的风险。尽量使用C++标准库中的容器(如std::vector、std::string等),它们内部已经实现了复杂的内存管理逻辑,可以大大降低内存泄漏的风险。在极端情况下,内存泄漏可能导致程序崩溃。使用new或malloc等函数分配的内存,在不再需要时,如果没有使用delete或free释放,就会发生内存泄漏。

2024-06-26 15:32:38 965

原创 Java中的@AllArgsConstructor注解(详解)

简化构造函数的编写:通常情况下,Java 类中需要手动编写。注解可以自动生成一个包含所有实例变量的构造函数,减少编码量。提供的一个注解,用于自动生成一个包含所有参数的构造函数。对于@Service注解中也可使用。来初始化类的实例变量。

2024-06-26 14:13:51 1552

原创 @AllArgsConstructor、@NoArgsConstructor、@RequiredArgsConstructor的区别以及在springboot常用地方

只要记得,那些字段需要赋值,就把它列进构造方法的参数里面即可。

2024-06-26 14:11:15 2854

原创 Spring Event实现以及使用场景

1、SpringEvent 介绍 Spring事件(Spring Event)是Spring框架的一项功能,它允许不同组件之间通过发布-订阅机制进行解耦的通信。对应的设计模式是观察者模式。2、实现过程2.1 、发布事件定义 Spring Event 根类为org.springframework.context,ApplicationEvent。应用系统定义业务事件时继承ApplicationEvent,扩展业务属性。2.2、 事件发布 在sprin

2024-06-25 09:38:02 1003

原创 SpringEvent (详解)

数据同步更新:可以使用 Spring Event 来实现数据的同步更新,例如,在分布式系统中,当某个节点的数据发生变化时,可以触发事件并将事件传递给其他节点,从而实现数据的同步更新。领域事件处理:可以使用 Spring Event 来实现领域事件的处理,例如,在订单管理系统中,可以使用 Spring Event 来处理订单状态的变化,从而触发相关的业务逻辑。总之,Spring Event 可以在应用程序中实现事件的传递和处理,提高应用程序的性能、并发能力和灵活性,同时也能够实现一些复杂的业务逻辑和功能。

2024-06-25 09:36:26 2529

原创 Mybatis中BaseEntity作用

新建各种对象的时候,一般来说,有几个属性是所有对象共有的,比如说id,is_del,is_enable这些,然后设置一个基础对象,以后新建所有对象的时候都继承它,就省的每次都要写这些共有的属性了。

2024-06-20 21:32:49 641

原创 Mybatis配置(详解)

MyBatis将执行SQL语句的相关操作都封装成接口方法,用户通过Mapper文件或注解来配置对应的SQL语句,消除了样板式代码,使得代码更加简洁易懂。1.数据库连接管理:使用JDBC进行数据库操作时,需要手动获取数据库连接、释放数据库连接等操作,在高并发的情况下还需要面对连接池的问题。MyBatis采用了不同的架构和设计理念,封装了JDBC底层操作,并提供了更方便、高效的CRUD编程接口以及自动参数映射和结果集处理,大大简化了数据库开发。2、接口文件中定义方法,方法名与映射文件中的id一致,返回。

2024-06-20 15:13:50 4981 1

原创 C/S、B/S架构(详解)

CS架构(Client-Server Architecture)是一种分布式计算模型,其中客户端和服务器之间通过网络进行通信。在这种架构中,客户端负责向服务器发送请求,并接收服务器返回的响应。服务器则负责处理客户端的请求,并返回相应的结果。CS架构通常用于构建大型的网络应用程序,如Web应用程序、电子邮件系统、数据库管理系统等。BS架构(Browser-Server Architecture)是一种基于Web的分布式计算模型,其中浏览器作为客户端,服务器作为服务端。

2024-06-19 11:27:43 10369

原创 什么是Linux挂载

当 U 盘插入 Linux 后,系统给 U 盘分配一个目录文件(比如 sdb1),就位于 /dev/ 目录下(/dev/sdb1),但无法通过 /dev/sdb1/ 直接访问 U 盘数据,访问此目录只会提供给你此设备的一些基本信息(比如容量)-n:在默认情况下,系统会将实际挂载的情况实时写入 /etc/mtab 文件中,但在某些场景下(例如单人维护模式),为了避免出现问题,会刻意不写入,此时就需要使用这个选项;想通过命令行的方式访问某个U盘中的数据,如图所示为Linux系统文件目录和U盘的文件系统目录,

2024-06-19 11:23:13 1575 1

原创 数据库引擎有哪些?

数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。 使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系数据库。这包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引、视图和存储过程)。可以使用 SQL Server Management Studio 管理数据库对象,使用 SQL Server Profiler 捕获服务器事件。这是MySQL 5.5或更高版本的默认存储引擎。它提供了

2024-06-18 10:32:22 1295

原创 索引(如何创建、如何用)

索引是一种数据结构,它保存了数据列的值和指向它们所在行的指针,以便在查询时快速定位匹配的行。索引可以理解为一本书的目录。当你需要查找一本书中的某一页内容时,你可以先查找目录,找到相关的章节和页码,然后直接翻到对应的页码。在数据库中,索引就是一张包含了列名和对应数据位置的表格。当你查询数据时,系统会先查找索引,然后根据索引指向的位置查找数据。

2024-06-18 10:06:29 1166

原创 Spring中Bean的作用域

singleton 是 Spring 容器默认的作用域,当一个 Bean 的作用域为 singleton 时,Spring 容器中只会存在一个共享的 Bean 实例,并且所有对 Bean 的请求,只要 id 与该 Bean 定义相匹配,就只会返回 Bean 的同一个实例。从图 2 的输出结果中可以看到,两次输出的结果并不相同,这说明在 prototype 作用域下,Spring 容器创建了两个不同的 Person 实例。Spring 容器在初始化一个 Bean 的实例时,同时会指定该实例的作用域。

2024-06-17 09:56:28 553

转载 Bean生命周期

xml与@Bean方式一样System.out.println("初始化方法");System.out.println("销毁方法");实例化后置处理器-实例化前实例化实例化后置处理器-实例化后属性填充(扫描@Autowired @Value @Resource 注解,完成自动注入)处理Awar接口初始化后置处理器-初始化前三种方式初始化初始化后置处理器-初始化后(会根据情况包装为代理类,即AOP)销毁。

2024-06-17 09:52:26 676

原创 kafka常用命令(详细)

说明:在${KAFKA_HOME}/config/server.properties中配置 delete.topic.enable 为 true,这样才能生效,删除指定的 topic主题。参数 --topic 指定 Topic 名,–partitions 指定分区数,–replication-factor 指定备份(副本)数。# LOG-END-OFFSET: 当前最高水位偏移量,也就是最近一个读取消息的偏移量,同时也是最近一个提交到集群的偏移量。–from-beginning:表示从头开始接收数据。

2024-06-16 10:41:46 4409

原创 使用SpringBoot对接Kafka

不难看出,在Springboot中,使用kafka的关键在于, 它是 Spring 提供的 Kafka 生产者模版,用于向 Kafka 集群发送消息。并且把 Kafka 的生产者客户端封装成了一个 Spring Bean,提供更加方便易用的 API。它有三个主要属性::生产者工厂类,用于创建 KafkaProducer 实例。:默认主题名称,如果在发送消息时没有指定主题名称,则使用该默认主题。

2024-06-16 10:33:56 2885 1

原创 神仙级编程神器

IDE相对于编辑器来说,集成了编译、调试、语法高亮等软件开发工具和环境,这些功能都极其适用于开发者的日常工作中,而这些在Vim中都可以通过强大丰富的插件扩展完成,自由度极高,不仅装的一手好逼,还真真切切地用着爽。Atom兼容所有平台,拥有时尚的界面、 文件系统浏览器和扩展插件市场,这让都是它的表象,而它的核心优势,就是能够兼容Vim模式,这让一大批Vim的忠实用户直呼过瘾。作为文本编辑器,Vim最大的优势是速度和效率,这是其它编辑器难以企及的。最重要的是,它是免费的,光是这点就很吸引人了。

2024-06-14 09:33:29 392

原创 怎样设计一个消息队列?

对于来说,不管是 RocketMQ、Kafka 还是其他消息队列,**它们的本质都是:一发一存一消费。**下面我们以这个本质作为根,一起由浅入深地聊聊 MQ。

2024-06-14 09:11:22 1130

原创 SpringBoot集成slf4j日志配置

-定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->首先,定义日志的名称:LOG_HOME;其次,设置输出value定义为日志的存储路径,日志都会存储在该路径下。这里勿在logback文件中使用相对路径,不管是 windows 系统还是 Linux 系统,日志存储的路径必须要是绝对路径。5.2 定义日志的输出格式-- 定义日志格式 -->首先,定义日志格式的名称:LOG_PATTERN其次,设置日志的具体格式value。"%d" 表示日期(也可以使用"%date");

2024-06-13 10:59:26 2100 3

原创 消息队列常见的使用场景

通过一个 MQ,Pub/Sub 发布订阅消息这么一个模型,A 系统就跟其它系统彻底解耦了。因此,我们需要去考虑一下我们的业务系统中是否有类似的场景,就是一个系统或者一个模块,调用了多个系统或者模块,互相之间的调用很复杂,维护起来很麻烦。但是其实这个调用是不需要直接同步调用接口的,如果用 MQ 给它异步化解耦,也是可以的,你就需要去考虑在你的项目里,是不是可以运用这个 MQ 去进行系统的解耦。

2024-06-13 10:49:31 869

原创 消息队列(完整版)

发送进程仍然无条件把消息写入队列的尾部,但接收进程却可以有选择地读取某个特定类型的消息中最接近队列头的一个,即使该消息不在队列头。相应消息一旦被读取,就从队列中删除,其它消息维持不变。发送进程把消息发送到队列尾部,接受进程从消息队列头部读取消息,消息一旦被读出就从队列中删除。消息被顺序插入队列中,其中发送进程将消息添加到队列末尾,接受进程从队列头读取消息。4、实例:以阻塞方式不断从消息队列(关键字为0x1234)中读取消息,并打印接收到的消息类型、长度和数据等,当接收到内容为“exit”的消息时程序结束。

2024-06-13 10:43:31 1135

原创 MQTT和HTTP区别

今天突然想起来当时面试的时候被问了mqtt和http,自我感觉mqtt答的还行,http则是答的一团糟,所以打算整理一下,用来记录。它们都是属于应用层的协议,且都是基于tcp/ip协议栈。

2024-06-12 20:41:03 741

原创 MQTT详细讲解

MQTTMQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在设备之间传输消息。它通常用于物联网(IoT)和传感器网络中,可以在不同设备之间进行可靠的通信,而且资源消耗相对较低。MQTT基于发布/订阅模型,允许设备发布消息到特定主题(topic),并让订阅了相同主题的设备接收这些消息。这使得MQTT成为了在资源受限或需要实时通信的环境中非常有用的协议,比如监控系统、传感器网络、智能家居等领域。

2024-06-12 20:38:47 1064

原创 RabbitMQ、RocketMQ、Kafka(详解三大MQ)

Kafka是由LinkedIn开发的一款高吞吐量、分布式的消息队列系统,它采用类似于发布/订阅的消息模型,将生产者产生的消息写入到日志文件中,消费者则通过拉取方式获取消息。总体来说,RabbitMQ、RocketMQ和Kafka都是非常优秀的消息队列系统,它们都具有高可靠性、高吞吐量、易于部署等特点。RabbitMQ提供了多种消息传递模式,如点对点、订阅和发布/订阅等,同时也支持多种编程语言,如Java、Python、Ruby等,可以轻松集成到不同的应用程序中。

2024-06-11 08:49:53 501

原创 RocketMq和RabbitMq的对比【主流消息队列】

首先整理这个文章是因为我正好有机会实战了一下rocketmq,的一个开源消息中间件。所以就与以往中rabbitmq进行小小的比较一下。这里主线的根据常见面试问题进行整理。

2024-06-11 08:46:59 1074

空空如也

空空如也

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

TA关注的人

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