自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线性数据结构集会

栈可以看作是一种受限制的线性表,只允许在表的一端进行插入和删除操作,这一端被称为栈顶,另一端称为栈底。在栈中,插入新的元素(压栈)会将元素放置在当前栈顶上方,而删除元素(弹栈)会将栈顶元素移除并返回该元素。也就是说,最后压入(插入)栈的元素将成为下一个弹出(删除)的元素。它是由连续的内存空间组成的,每个元素都有唯一的索引,使得可以通过索引访问和修改数组中的元素。存储顺序:栈中的元素按照插入顺序存储,后插入的元素位于较早插入的元素之上。有限容量:栈的容量是有限的,即在一个栈中可以存储的元素数量是有限的。

2023-10-11 19:31:20 390

原创 数据库索引失效

组合索引不包含首字段,其实和模糊查询以通配符开始的原因差不多,不包含首字段无法触发该组合索引。模糊查询以通配符开头,自己都不知道具体要查什么,怎么使用索引呢,所以会导致索引失效。使用OR关键字进行查询时,如果有一个条件没有索引,则索引失效。

2023-09-28 10:41:07 200

原创 数据库索引的分类

B-Tree(Balance Tree 多路平衡查找树)是一种平衡的多路搜索树数据结构,用于实现高效的查找、插入和删除操作。通过控制节点的关键字数目和孩子数目之间的关系,B树可以在保持平衡的前提下减少树的深度,提高查找效率。一般来说,B+树与B树的差异主要存在于叶子节点的结构和指针。组合索引是将数据库表中的多个字段组合成一个索引,相比于单列索引,组合索引可以提供更高效的查询性能。当查询条件涉及到组合索引中的多个列时,数据库可以利用组合索引更快地定位到匹配的数据行。可以组合多个字段创建一个索引。

2023-09-28 09:43:58 134

原创 MySQL的索引概述

当查询涉及到多个表连接、范围查询或使用与索引不匹配的查询条件时,数据库可能无法充分利用索引的优势,甚至需要额外的索引扫描操作,从而导致性能下降。可以通过两个命令来实现:ALTER和CREAT,ALTER语句适用于已存在的表上的索引添加、修改和删除操作,而CREAT语句适用于创建新的表或在已存在的表上创建索引。频繁的写操作:当表需要频繁地插入、更新或删除数据时,索引的维护成本可能会导致写操作的性能下降。少数取值的列:对于某些列的取值少且分布均匀的情况,如性别列等,使用索引可能无法带来明显的性能改进。

2023-09-18 16:32:33 180

原创 初识JVM

JVM(Java Virtrual Machine)Java虚拟机是Java编程语言的核心组件之一,是一种能够在不同平台上执行Java字节码的虚拟机。它提供了跨平台、独立于硬件和操作系统的执行环境。JVM的主要功能包括:类加载:JVM负责将Java源代码编译生成的字节码文件进行加载、验证、准备和解析等操作,并将类信息存储在内部的方法区中。内存管理与垃圾回收:JVM管理程序运行时的内存,包括堆、栈、方法区等。它通过垃圾回收器自动回收不再使用的内存,释放空间,提高内存的利用效率。

2023-09-14 14:29:49 198

原创 初始swagger

Swagger是一种用于描述和定义 RESTful API 的开源规范。它提供了一种统一的方式来描述API的各种细节,包括API的端点、参数、请求和响应的格式。通过使用Swagger,开发人员可以自动生成API文档、客户端代码和服务器存根,从而简化了API的开发和维护工作。Swagger常用于构建和管理Web服务,使得API可读性更高、易于测试和使用。

2023-09-05 19:51:01 53

原创 MySQL的使用时遇到时区问题怎么解决

这里只列举了一小部分时区,世界上还有许多其他时区,每个时区都对应着特定的区域,以确保不同地区的时间一致性。数据库连接URL中添加时区参数:在连接MySQL数据库的URL中,可以添加一个参数来指定时区。若使用MySQL的时区有问题,可以通过在数据库连接字符串中设置时区,或者通过修改MySQL配置文件来解决。EST(东部标准时间):东部标准时间是指美国和加拿大东部地区的时区,如纽约、多伦多等城市所在地。CST(中部标准时间):中部标准时间是指美国和加拿大中部地区的时区,包括芝加哥、墨西哥城等地。

2023-09-05 19:20:15 1897

原创 mysqldump 命令实现数据备份

mysqldump命令是通过与MySQL服务器的交互方式,直接从源数据库中提取数据和结构信息,并保存到备份文件中,从而实现数据库的备份和恢复功能的。它是MySQL提供的一个内置工具,实现了数据库备份的原理和步骤,并提供了相应的参数和选项来满足不同的备份需求。

2023-09-04 13:55:47 773

原创 MySQL数据库的备份和恢复

因为数据库可能会遭受故障、硬件故障、自然灾害、人为错误、黑客攻击等不可预测的事件,这些事件可能导致数据丢失,但数据库中的数据都很重要,为了避免数据永久性丢失,备份是非常必要的。备份策略的灵活性:根据不同的需求和场景,可以使用不同的备份策略,例如全量备份、增量备份、差异备份等,以满足不同级别的恢复要求。定期进行备份:建立一个合理的备份计划,根据业务需求和数据变动频率,定期执行数据库备份操作,确保备份的时效性和及时性。[数据库实现备份的方式多种多样,本文提供的几种方式仅供参考]或者指定的其他位置。

2023-09-02 18:32:23 302

原创 Java中的异常

Exception又分为检查型异常和运行时异常两种类型,其中检查型异常需要在代码中显式处理,而运行时异常可以选择捕获处理,但通常建议在代码中对可能引发的运行时异常进行适当处理。在方法声明中指定可能抛出的异常类型(可以是具体异常类或其父类),调用该方法时,调用者需要使用 try-catch 块或继续向上层方法抛出异常。上图中我列出了Java中的异常类型以及部分常见的异常,在Java中Throwable接口是异常的顶级父接口,Throwable接口有两大子接口,分别是Error和Exception。

2023-09-01 22:26:11 39

原创 微服务的通信

在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通信协议。常见的序列化协议包括json、xml、 hession、 protobuf、thrift、text、 bytes等,目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。

2023-09-01 21:56:53 292

原创 Redis入门的基本使用流程

创建一个配置类,注入RedisTemplate,用于创建自定义模板类,也可以使用SpringRedisTemplate或RedisTemplate。@Bean// 创建自定义模板类// 配置json类型的序列化工具//这样key会用字符串方式保存// 这个是value的序列化方式,通过JSON格式序列化// 通过 setConnectionFactory() 方法,RedisTemplate 可以与 Redis 数据库建立连接,利用连接工厂提供的连接管理能力,进行高效的数据操作。

2023-08-28 19:29:26 49

原创 Redis是单线程为什么速度还那么快?

Redis在某种程度上可以被称为单线程,因为它使用一个主线程来处理所有的客户端请求。在实际运行中,Redis使用了多个线程来处理不同的任务,例如后台持久化、主从复制和集群管理等。此外,Redis还使用了一些技术手段来充分利用多核处理器的性能,例如通过将数据分片到不同的CPU核心上并行处理,以提高整体性能。Redis使用键值对的方式来存储数据。它通过监听和响应不同的事件,如连接事件、读写事件等,来实现高效的请求处理。Redis使用了异步的非阻塞I/O模型,可以在等待数据时处理其他请求,提高了并发性能。

2023-08-28 18:28:42 36

原创 Nacos

官网说:服务(Service)是 Nacos 世界的一等公民。gRPC那么为什么说,“服务(service)是nacos世界的一等公民”?这句话是什么意思?我认为,官网将服务(service)称为Nacos世界的一等公民,意味着在Nacos中,服务是核心和重要的概念,具有特殊的地位和重要性。具体来说,这句话传达了以下几个方面的含义:服务是核心实体:在Nacos中,服务是指提供具体功能的微服务或应用程序。Nacos将服务视为核心实体,所有其他功能(如注册、发现、配置等)都围绕着服务展开。

2023-08-24 23:23:15 44

原创 微服务的基础概念

微服务是一种软件架构模式,它将一个大型的应用程序拆分成一组小型、独立的服务。每个服务都可以独立开发、部署和扩展,且可以使用不同的编程语言和技术栈。这些服务之间通过轻量级的通信机制进行交互,通常是通过使用HTTP协议的API进行通信。微服务架构的主要目标是提高应用程序的可伸缩性、灵活性和可维护性。由于每个服务都是独立的,因此可以独立地进行部署和扩展,而不会对整个应用程序产生影响。此外,微服务还可以使团队更加敏捷,因为不同的团队可以独立地开发和维护不同的服务。

2023-08-22 19:34:35 68

原创 级联查询和联合查询的区别

级联查询(Cascade Query)是指在一个查询中嵌套使用另一个查询的结果,将多个查询连接在一起,形成一条长的查询语句。它用于获取多个数据集之间的相关信息。在级联查询中,一个查询的结果作为下一个查询的输入,以此类推。这样可以通过查询多个表或多个数据集,获取更全面的数据信息。联合查询(Join Query)是通过连接两个或多个表格的公共字段,将它们的记录连接在一起形成一个结果集。联合查询根据连接条件从不同表格中提取相关的记录,并生成一个包含所有相关信息的结果集。

2023-08-21 21:37:43 919 1

原创 Linux入门篇

Linux,全称GNU/Linux,是一个开源、免费的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。

2023-08-21 19:30:08 55 1

原创 四种常用线程池

例如,需要按照任务提交的顺序依次执行任务时,可以使用SingleThreadPool。通过ScheduledThreadPool,可以方便地执行定时任务,而无需手动管理线程的创建和销毁。该线程池维护固定数量的线程,线程数不会随着任务的增加而增加。如果所有线程都处于忙碌状态,新任务会被放入等待队列中,直到有空闲线程可用。由于线程数不受限制,可以根据任务的数量动态调整线程数,提高系统的响应速度。该线程池根据需要创建新线程,但在可用线程可用时重用旧线程。该线程池只有一个线程在工作,所有任务按照顺序执行。

2023-08-20 22:56:23 1246 1

原创 JDBC的基本执行流程

JDBC(Java Database Connectivity)是Java语言中用于访问关系型数据库的一种标准API。它提供了一组接口和类,使Java应用程序能够与各种数据库进行连接、执行SQL查询和更新操作,并处理数据库的结果。

2023-08-20 22:19:46 581 1

原创 Synchronized锁升级

轻量级锁(Lightweight Locking):轻量级锁是为了解决短时间内的竞争而引入的优化机制。当一个线程请求获取锁时,JVM会将对象头中的Mark Word字段复制到自己的线程栈帧中,并通过CAS(比较并交换)操作尝试将对象的状态从无锁状态转换为轻量级锁状态。如果竞争成功,则进入临界区执行,如果竞争失败,则升级为重量级锁。轻量级锁的目标是提供更快的锁获取和释放操作。

2023-08-19 22:50:13 147

原创 Redis

Redis是一种是用 C 语言开发的开源的高性能内存数据存储系统,它也被称为数据结构服务器。它以键值对的形式存储数据,并将数据保存在内存中,以提供快速的读写访问;Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

2023-08-19 19:39:05 36

原创 消息中间件之RocketMQ

消息中间件(Message Broker)是一种软件或服务,用于处理分布式系统中的消息传递。消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统 的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。RocketMQ是一个开源的分布式消息中间件,由阿里巴巴集团开发,现在是Apache的一个顶级项目。它被设计用于在大规模分布式系统中处理高并发的消息传递。

2023-08-15 19:48:39 146 1

原创 什么是Spring框架中的IOC容器

IOC(Inverse of Control,控制反转)容器是Spring框架的一个关键组件,属于Spring的Core模块,用于创建和管理bean对象。它通过读取配置文件或注解,了解应用程序中各个对象之间的依赖关系,并负责创建和注入这些对象的依赖关系。具体来说,IOC容器通过依赖注入(Dependency Injection,简称DI)的方式,自动将对象之间的依赖关系注入到对象中,而不需要手动创建依赖对象。这样可以实现对象之间的松耦合,提高代码的可维护性和可测试性。

2023-08-10 22:58:54 261 1

原创 线程池的执行流程

线程池是一种用于管理和复用线程的机制。它是在并发编程中常用的设计模式之一,可以提高线程的利用率并降低线程创建和销毁的开销。线程池维护一定数量的线程,并根据需要从线程池中获取线程来执行任务,执行完任务后线程会被返还给线程池以供下次使用。

2023-07-20 19:58:36 217 1

原创 ReentrantLock与synchronized的区别

当一个线程进入 synchronized 代码块或方法时,它会尝试获取锁,如果锁被其他线程占用,则线程进入阻塞状态,直到锁被释放。synchronized是简单、易用并且具有自动释放锁的机制;ReentrantLock 在一些复杂的同步需求场景下提供了更多的灵活性和功能选择,提供更加精细的锁定控制和同步操作。ReentrantLock 是 java.util.concurrent 包下的类,是一个可重入的互斥锁,它提供了与 synchronized 相同的功能,但具有更灵活的控制能力。

2023-07-20 18:58:57 53 1

原创 CopyOnWriteArrayList核心源码阅读

CopyOnWrite (COW) 是一种并发编程中的机制,主要用于读多写少的场景。它的基本原理是进行写操作时,先对数据进行拷贝(复制),然后对拷贝后的数据进行修改,从而保证并发读取操作的线程是安全的,不会受到写操作的影响。CopyOnWriteArrayList 是 Java 并发编程中的一个线程安全的集合类,它的作用是提供一种可变的列表结构,保证在并发读取操作时线程安全。三、常用方法的具体实现及注释。

2023-07-20 17:34:15 44 1

原创 线程的实现方式

在通过该方式实现时,需要被重写的方法变成了call()方法,在实现了Callable接口后,由于Thread的构造方法中不能接收一个Callable的对象,并且我们想将该线程需要实现的任务传入Thread对象中,因此选择FutureTask类来包装Callable对象,因为FutureTask类实现了RunnableFuture接口,而RunnableFuture接口是Runnable接口的子接口。同方式1的实现过程基本一致。

2023-07-17 19:49:56 102 1

原创 AES算法的CBC和ECB两种工作模式

AES算法有多种加密模式,其中最常见的两种模式是 ECB(Electronic Codebook)和 CBC(Cipher Block Chaining),除了ECB和CBC,还有其他的AES加密模式,如CFB(Cipher Feedback)、OFB(Output Feedback)和CTR(Counter)等。实现步骤:CBC模式的实现步骤与ECB模式基本一致,但由于CBC模式加了一个IV参数,因此在创建完密钥对象后,根据具体需求,通过某些方式生成自己需要的16个字节的IV参数。

2023-07-17 19:11:43 1511 1

原创 Java的反射机制

Java的反射机制是指在运行时动态地获取类的信息并操作类的属性、方法和构造函数等。

2023-07-15 14:52:49 43 1

原创 基于FTP协议进行文件的上传和下载

无论是上传文件或是下载文件,第一部都需要先建立连接,因此,第一步的实现方法是相同的,不过,由于下载文件时是将读取到的文件存放至本地文件,因此采用的是文件输出流,但在文件上传过程中,是将本地文件读取至程序中并上传,因此需要定义的是文件输入流,以便读取本地文件并上传。它定义了客户端和服务器之间的通信规则,使得用户可以通过网络上传和下载文件,以下分别是文件的下载以及上的过程。① 连接ftp服务器并验证用户名、密码。② 切换目录至上传文件处。1. 文件下载的过程。② 切换至个人目录。

2023-07-10 18:58:36 1186 1

原创 Hash算法总结

哈希算法是一种将任意长度的输入数据映射为固定长度的输出的算法。它是通过应用特定的哈希函数对输入数据进行计算,从而产生唯一的哈希值。不同的Hash算法它们的实现步骤几乎一致,只是生成的内容不同,安全系数不尽相同,以下我将叙述不同算法的相同实现步骤。生成的结果长度固定,且相同的内容生成的结果不变,但不同的内容生成的结果大概率不相同(不排除产生哈希冲突的可能);当完成主要的计算步骤后,将得到的字节数组转换成字符串,就会得到我们熟悉的hash值。3. 获取消息摘要(加密结果)。加密过程是单向的、不可逆的;

2023-07-10 18:08:44 94 1

原创 JavaMail之SMTP协议的邮件传输过程

需要注意的是,SMTP协议只负责邮件的传输,不涉及邮件的查看和存储。SMTP服务器负责将邮件转发给接收方的SMTP服务器,直到邮件最终被送达到接收方的邮件服务器。(由于每次通过SMTP协议进行邮件传输时都需要创建会话,因此可以对该部分的代码进行封装,方便对该段代码进行复用。为了确保邮件可以成功发送到目标邮箱,我们在创建被发送的邮件对象时需要写明邮件的信息,如邮件的标题、发件人信息、收件方式以及收件人信息等。邮件的内容包括邮件的正文、附件等,在传输过程中,将邮件的内容分为不同的部分分别写,最后合并进行发送。

2023-07-10 17:15:13 934

原创 LinkedList源码阅读

LinkedList类继承自AbstractSequentialList类,并且实现了List, Deque Cloneable, java.io.Serializable接口,因此,LinkedList不仅可以作为单列集合来使用(适合应用于频繁修改集合内容、多写少读的场景),还可以作为队列(双端队列,因为它实现的是Deque接口)、栈来使用,此外LinkedList还可以被克隆和序列化传输。由于LinkedList中的方法繁多,但实现结果类似,因此我将对部分方法的代码逻辑表述我的理解。

2023-05-31 00:00:59 50 1

原创 HashMap的数据结构

HashMap中采用链表来应对哈希冲突的问题,众所周知,不同的Node对象计算出的hash值可能会相同,为了能够将Node对象都进行有效的存储,所以采用了链表结构来解决此类问题,但由于链表达到一定长度时会造成查找的负担,因此满足一定条件后,会将链表结构转变为一个同样可以有效存储所有Node对象但方便查找的一种数据结构——红黑树。这是因为当存储元素相对较少时,链表和红黑树的查询时间相差无几,但TreeNode节点占用的空间是普通Node节点的两倍,因此只有当存储的数据足够多时才转为红黑树。

2023-05-25 13:39:14 901 1

原创 ArrayList扩容方式的理解

1.若创建ArrayList对象时使用ArrayList的无参构造方法public ArrayList()时,则默认存放元素的数组element Data[]的长度为0;2.若创建ArrayList对象时使用ArrayList的有参构造方法public ArrayList(int initial Capacity)时,集合的初始容量为用户指定值。ArrayList集合是基于object[]数组实现的,在ArrayList类中定义了一个elementData[]数组来接收放入集合中的元素,

2023-04-25 18:16:58 90 1

空空如也

空空如也

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

TA关注的人

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