自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剖析RabbitMQ消息可靠投递

深入分析mq的可靠性投递,考虑极端情况下的处理

2025-03-02 14:35:27 747

原创 谈日志框架解决方案

文章先分析为何需要日志以及日志常见的实现思路,通过分析美团优秀日志框架设计的如何巧妙以及如何实现,最终手把手复现属于自己的日志框架

2025-02-13 00:36:53 997

原创 深分页刨析与解决

深分页(Deep Pagination)是指处理大数据集时,使用传统的分页查询( `LIMIT` 和 `OFFSET`)可能会随着页数的增加查询性能急剧下降。那么如何解决呢?

2025-02-07 03:31:35 715

原创 RabbitMQ基础篇

这篇博客深入探讨了 RabbitMQ 的核心概念和技术实现,从消息生产、消费到消息确认机制,详细解析了如何确保消息的可靠性和高效性。通过实际案例展示了如何配置和优化 RabbitMQ,解决常见的消息丢失、积压和重试问题。

2025-01-17 19:20:10 1419

原创 数据一致性实战方案

数据一致性是指在分布式系统中,各个副本之间保持数据内容、状态和属性的一致性。这在面对分布式系统中可能出现的网络延迟、节点故障、并发更新等问题时尤为重要比如mysql数据更新后,如何同步ES?如何同步Redis?保证数据一致性?

2025-01-16 00:51:02 620

原创 MySQL基准测试和mysqlslap

文章深入探讨MySQL基准测试的重要性,重点介绍性能指标(如TPS、QPS、RT)及其在发现瓶颈中的作用,并详细讲解了mysqlslap工具的使用方法,包括并发量、查询次数、列配置、自定义语句等参数的设置,帮助模拟真实负载并优化数据库性能。

2024-12-05 02:19:19 1104

原创 刨析雪花算法

雪花算法是一种由 Twitter 开发的分布式全局唯一 ID 生成算法,生成 64 位长整型 ID,具有高性能、分布式支持及趋势递增等优点。其结构包括 1 位符号位、41 位时间戳、10 位机器标识(区分不同节点)和 12 位序列号(保证同毫秒内唯一)。与 UUID 和 Redis 的解决方案相比,雪花算法在高并发环境下生成唯一性和有序性 ID 方面表现更优,适用于分布式系统。常用工具如 MyBatis-Plus 已内置实现,可灵活定制以满足不同场景需求。

2024-12-05 02:14:05 1122

原创 讲懂http和https

HTTP 和 HTTPS 是客户端和服务端之间传输数据的协议。

2024-11-28 19:02:41 1359

原创 @Transactional注解详解(事务失效+源码分析)

@Transactional注解使用以及注意事项,以及事务失效的种类和失效原因源码分析

2024-09-22 23:01:06 1687 1

原创 Redis基础篇

Redis是基于内存的KV键值对缓存数据库,常用作数据库、缓存和消息代理。一秒可以高达8w次的写入和10w次的读操作高性能:因为数据存储在内存中,Redis 读写操作非常快速,适用于需要高吞吐量和低延迟的应用场景。丰富的数据类型:Redis 支持多种数据结构,不仅仅是简单的键值对,还包括列表、集合、哈希、位图等。这使得 Redis 能够处理多种复杂的数据操作。持久化:虽然 Redis 是基于内存的,但它支持数据持久化,可以将内存中的数据周期性地保存到磁盘上。

2024-05-24 19:38:11 906

原创 MySQL基础篇

数据持久化的解决方案之一。也就是数据保存到可掉电设备中可以看出持久化的方式很多,为什么选择数据库来持久化?数据库的优势在于它们提供了一种结构化和可管理的方式来存储、组织和检索数据结构化和组织:数据库中的数据是严格按照规则和模式进行存储的,如数据类型,约束等等可管理和检索:数据库提供SQL语句来对数据库进行管理和检索整数类型字节有符号数取值范围无符号数取值范围TINYINT1-128~1270~255SMALLINT20~65535MEDIUMINT3。

2024-05-12 00:06:57 977 1

原创 JWT深入浅出

用户通过用户名密码进行身份验证,服务器端核对用户名密码后,生成JWT返回前端,前端本地存储JWT(推出登录删除JWT即可),并在后续的请求中携带JWT,服务器处理请求时只需要验证JWT的合法性即可(即通过密钥和签名加密算法对Header和payload部分进行加密,若与签名部分相等即为合法)验证 JWT 时,接收方会使用相同的密钥和算法,对接收到的头部和负载进行签名计算,并与 JWT 中的签名部分进行比较。用户通过用户名密码进行身份验证,服务器端验证用户提供的凭据是否正确并确定用户是否有权限访问该资源。

2024-05-11 20:14:14 823

原创 深入Serializable接口

Java实体类为什么要实现接口,什么作用??首先看看API文档怎么说。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。首先明确:序列化是指将对象转换为字节序列,而反序列化是指将字节序列转化为对象。在计算机中,涉及底层IO的操作都是由操作系统以字节流的方式进行这两个过程分别对应序列化和反序列化,在Java中通过实现Serializable接口来实现这两个功能。

2024-05-11 16:13:42 846

原创 JDBC 数据库连接

这是一篇关于JDBC的笔记。JDBC是一个JavaAPl,它可以让你用标准的方式连接和执行数据库查询。JDBC是一个纯Java的解决方案,它提供了一个自然的Java接口来处理SQL。JDBC可以访问任何类型的表格数据,尤其是关系数据库。JDBC是Java标准版平台的一部分,由Oracle公司提供。这篇笔记将教你如何使用JDBC进行数据源连接、数据检索和数据更新等操作。快来阅读吧,让你的Java应用更加强大和灵活!

2024-04-12 09:49:26 906

原创 用户认证协议不匹配:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException...

通过修改 MySQL 用户的认证方式,使其与客户端匹配。如果你的客户端不支持该插件,可以将用户的认证方式更改为 “mysql_native_password”。: 如果你使用的是旧版本的 MySQL 客户端,尝试升级到最新版本,以确保支持最新的认证协议。其中,‘your_user’ 是你的用户名,‘your_host’ 是允许连接的主机名或 IP 地址,‘your_password’ 是你的密码。: 如果无法更改用户的认证方式,你可以尝试修改 MySQL 服务器的配置,启用兼容模式,允许旧的认证方式。

2023-08-05 23:07:23 3445

原创 计算机网络知识梳理

备考的朋友们,本博客分别从物理层,链路层,网络层,传输层,应用层对计算机网络进行了系统的知识整理,逻辑清晰严谨,知识点细碎有条理。希望能帮助到学习或者备考计网的朋友们

2023-05-17 22:42:07 2669

原创 刨析Arrays.asList()

Arrays.asList() 并非如你所想,理解底层Arrays.asList(),玩活Arrays.asList()

2023-03-18 14:23:11 766 3

原创 【数据结构Note6】-图-简练易懂知识总结(图存储+BFS+DFS+最小生成树+最短路径+拓扑+逆拓扑)

深度优先搜索(Depth First Search,DFS)历类似于树的先序遍历,是树的先序遍历的推广对于一个连通图,深度优先搜索遍历的过程如下1. 从图中某个顶点v出发,访问v。2. 找出刚访问过的顶点的第一个未被访问的邻接点,访问该顶点。以该顶点为新顶点重复此步骤,直至刚访问过的顶点没有未被访问的邻接点为止。3. 返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该顶点。4. 重复步骤(2)和步骤 (3),直至图中所有顶点都被访问过,搜索结束

2022-12-17 08:00:00 2408 2

原创 【数据结构Note3】- 栈 应用栈求解迷宫路径

求解迷宫路径整体思路就是穷举所有路径。从点出发,按某一方向探索,沿途在经过的位置设下标记。若能走通即某处可以到达。若该点所有方向均没有通路,则原返回,直到有路可走。如此循环直到到达终点,或无路可走返回起点。求解过程会用一个栈path存储迷宫路径上的所有有效坐标。

2022-12-13 01:55:35 2831 1

原创 用二叉树或栈求表达式的值--代码实现+算法分析

解决表达式求值问题有两种方法,一种是利用栈和后缀表达式求解,另一种是二叉树中序存储表达式。所以本文分为栈和二叉树两大部分。

2022-11-28 17:37:15 4335 4

原创 【数据结构Note5】-二叉排序树 BST和平衡二叉树AVL

对于一颗平衡二叉树,如果插入一个结点破坏了平衡。是因为最小平衡二叉树对比插入前高度增加了一!导致其祖先结点对应的子树全部增加一,使得平衡因子异常,我们所做的调整就是回复最小不平衡子树的高度,这样祖先结点相应子树高度也就回复了,排序树重新平衡!

2022-11-22 21:28:52 2623 2

原创 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)

分而治之作为二叉树核心思想,在二叉树的算法种其至关重要的作用。因为二叉树是由根节点和左右子树构成,而左右子树又由根结点和子树的左右子树构成,所以二叉树的问题往往可以转化为左右子树的问题,越分越小直至为空。而这个分而治之的过程就是递归。

2022-11-20 10:00:00 2016 1

原创 输出二叉树中从每个叶子结点到根结点的路径(代码简练,思路易懂)

如果我们在递归函数,传入一个栈,(不要传引用!)每次递归,若当前结点非空那么就将该节点入栈,那么每一层递归都会对应一个栈,==这个栈表示当前结点到根结点的路径==。

2022-11-19 17:18:28 4525 3

原创 【数据结构Note5】-哈夫曼树

对不同的字符赋予权值,就得到了带权的结点,相应构建哈夫曼树。每一个字符对应哈夫曼树的叶子结点,规定查找路径向左为编码1,向右为编码0。该叶子的查找路径就对应了字符的唯一编码。

2022-11-16 23:42:55 1012 1

原创 【数据结构Note5】- 线索二叉树-(深入刨析理解构造线索二叉树+如何利用线索非递归遍历二叉树)

深入理解为什么要右线索二叉树,如何构造线索二叉树,如何利用线索非递归遍历二叉树?构造线索二叉树的过程就是将二叉链表中的空指针改为指向前趋和后继的线索的过程。也就是说二叉树线索化就是修改空指针的过程。

2022-11-09 23:41:53 1050 4

原创 【数据结构Note3】- 栈和队列 基础到实战-入门到应用

理解并实现栈和队列,利用栈和队列完成进制转换和表达式求值。深入理解栈和队列,懂得栈和队列的相互转化

2022-10-29 22:56:48 470 6

原创 【数据结构Note2】- 链表 - 基础到实战-入门到应用

本文结合基础知识和实战项目讲解链表,从入门到精通!!单链表,双向链表,链表中常见算法,链表反转的四种算法,存储结构和存取结构区别,环形链表,快慢指针,链表有关项目实战

2022-10-14 23:33:09 1747 6

原创 【数据结构Note2】-链表扩展-静态链表

静态链表是供缺少指针的高级语言实现链表结构的一种方式。静态链表融合顺序表和链表的优点,既能快速访问元素,又能快速增加或删除数据元素。

2022-10-09 23:52:09 939 3

原创 Java 基本数据类型-包装类-String的相互转换(总结+代码实现)

一文彻底读懂基本数据类型、包装类、String三者之间的相互转换

2022-09-23 18:55:12 596 5

原创 【数据结构Note3】_栈和队列的相互转换

所谓的栈和队列的相互转换就是,用栈的数据结构来实现队列数据的先进先出,用队列的数据结构来实现栈的先进后出。

2022-09-06 17:15:25 522 6

原创 Java【数据结构笔记】快速排序

快排三种时间复杂度得求解你懂了吗?快排实现得要点是什么?如何用最简得代码实现快排?

2022-08-13 23:34:45 428 12

原创 命名空间-using namespace std

在C语言中只有一个全局作用域所有的全局标识符共享一个作用域这使得标识符之间可能发生冲突。C++中提出了命名空间的概念命名空间将全局作用域分成不同的部分不同命名空间中的标识符可以同名而不会发生冲突命名空间可以发生嵌套全局作用域也叫默认命名空间命名空间的定义形式namespace命名空间名 { …… };使用命名空间形式命名空间;或者命名空间::成员名命名空间可以在全局作用域或其他命名空间内部定义,但不能在函数、结构体或类内部定义,且要保证命名空间之间不会出现名字冲突。

2022-05-22 01:10:20 11565 10

原创 牛顿迭代法求方程的根

牛顿迭代法(牛顿-拉弗森方法)五次及以上多项式方程没有根式解(就是没有像二次方程那样的万能公式),这个是被伽罗瓦用群论做出的最著名的结论。没有根式解不意味着方程解不出来,数学家也提供了很多方法,牛顿迭代法就是其中一种。简而言之就是说:通过反复求切线的斜率无限逼近求得f(x)的解,也就是方程的根。重点:牛顿-拉弗森方法是否总是收敛(总是可以求得足够近似的根)?牛顿-拉弗森方法源于直觉,这种直觉本身有一定程度的合理性。我们来看看收敛的充分条件:若f(x)二阶可导,那么在待求...

2022-05-18 22:59:05 4630 1

原创 cin/cout 输入流/输出流深度挖掘

一文读懂C++流类库的原理和使用,体悟流类库的精髓

2022-05-13 19:47:08 3634 7

原创 【数据结构Note1】- 顺序表

线性表得顺序存储实现,动态分配空间实现顺序表,顺序表实现雷区

2022-04-27 16:49:42 2146 10

原创 memset()函数的使用总结和细节

memset() 函数可以说是初始化内存的“万能函数”,常常也用来清空一个结构类型的变量或数组。通常为新申请的内存进行初始化工作。它是直接操作内存空间,mem即“内存”(memory)的意思。该函数的原型为:# include <string.h>void *memset(void *s, int c, unsigned long n);//第一个参数是地址(供操作的结构体或数组或指针)//第二个是将设置每个字节的值(memset直接对字节操作)//unsigned long n是

2022-04-25 18:59:36 1628 5

空空如也

空空如也

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

TA关注的人

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