- 博客(471)
- 资源 (6)
- 收藏
- 关注
原创 消息队列之关于如何实现延时队列
首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。下订单成功后,在30分钟内没有支付,自动取消订单外卖平台发送订餐通知,下单成功后60s给用户推送短信。如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存淘宝新建商户一个月内还没上传商品信息,将冻结商铺等用户登录之后5分钟给用户做分类推送;用户多少天未登录给用户做召回推送;关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
2023-12-23 22:30:53 350
原创 【MySQL】事务
MySQL事务是指对数据库的一组操作要么全部成功,要么全部失败。事务是由 MySQL 的引擎来实现的,我们常见的 InnoDB 引擎它是支持事务的。不过并不是所有的引擎都能支持事务,比如 MySQL 原生的 MyISAM 引擎就不支持事务,也正是这样,所以大多数 MySQL 的引擎都是用 InnoDB。MySQL的事务默认是自提交式模式,如果想要开启事务,必须以begin命令开始,以commit或者rollback命令结束。
2023-10-14 13:57:57 330
原创 redis 缓存设计
缓存预热就是系统上线后,提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!解决方式:Java中可以使用初始化白名单数据缓存雪崩就是瞬间过期数据量太大,导致对数据库服务器造成压力。如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。Cache Aside(旁路缓存)策略;
2023-10-14 07:30:00 273
原创 redis 集群(cluster)
由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集。Redis集群是一个提供在多个Redis节点间共享数据的程序集,Redis集群可以支持多个Master。相关材料redis集群知识点。
2023-09-19 07:00:00 312
原创 redis 哨兵(sentinel)机制
redis Sentinel,即Redis哨兵,在Redis 2.8版本开始引入。哨兵的核心功能是主节点的自动故障转移。Redis 在 2.8 版本以后提供的哨兵(Sentinel)机制,它的作用是实现主从节点故障转移。它会监测主节点是否存活,如果发现主节点挂了,它就会选举一个从节点切换为主节点,并且把新主节点的相关信息通知给从节点和客户端。监控、选主、通知。
2023-09-18 08:00:00 351
原创 redis 主存复制
主存复制,就是master以写为主,slave以读为主,当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。这个模式可以保证多台服务器的数据一致性,且主从服务器之间采用的是「读写分离」的方式。主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。也就是说,所有的数据修改只在主服务器上进行,然后将最新的数据同步给从服务器,这样就使得主从服务器的数据是一致的。主要功能特性读写分离。
2023-09-17 07:00:00 141
原创 redis 事务
watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事务执行失败。
2023-09-16 12:03:58 184
原创 redis 持久化机制
持久化、主存复制(及读写分离)、哨兵、以及集群几种技术分别解决了Redis高可用的什么问题?Redis的持久化技术,主要是RDB和AOF两种持久化方案;在介绍RDB和AOF方案时,不仅介绍其作用及操作方法,同时介绍持久化实现的一些原理细节及需要注意的问题。最后,介绍在实际使用中,持久化方案的选择,以及经常遇到的问题等。Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据永久丢失,需要定期将Redis中的数据以某种形式(数据/命令)从内存保存到磁盘;
2023-09-15 21:08:08 307
原创 redis 初识与入门
Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存消息队列分布式锁等场景。Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。除此之外,Redis 还支持事务持久化。
2023-09-12 23:00:05 397
原创 redis 核心数据结构
redis是一个开源的使用C语言编写的一个kv存储系统,是一个速度非常快的非关系远程内存数据库。它支持包括String、List、Set、Zset、hash五种数据结构。除此之外,通过复制、持久化和客户端分片等特性,用户可以很方便地将redis扩展成一个能够包含数百GB数据和每秒处理上百万次的请求的系统。目前支持多种语言的api,方便用户使用。
2023-09-10 14:07:30 351
原创 redis I/O多路复用机制
所谓 I/O 多路复用机制,就是说通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或写就绪),能够通知程序进行相应的读写操作。Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务,而 I/O 多路复用就是为了解决这个问题而出现。优点:就是这种方式非常容易让人理解,写起代码来非常的自然,符合人的直线型思维。
2023-09-08 22:18:36 1649
原创 递归思想以及常见的算法题
递归函数定义基础情况处理(边界问题处理)递归调用递推到当前层以计算n!(n的阶乘)为例:下面是代码模板public void recur(int level, int param) { // 场景不同,参数不同// 先编写终止条件(没有终止条件的递归就是无限递归,类似死循环)// 处理结果数据return;// 处理当前层逻辑(有时需要先处理当前层逻辑再递归到下一导,// 有时候需要递归到下一层根据返回结果处理当前层,所以需要灵活运用)// 进入到下一层(即开始递归)
2023-08-20 16:42:15 170
原创 【架构设计】如何设计一个高性能短链系统
所谓系统设计,就是给一个场景,让你给出对应的架构设计,需要考虑哪些问题,采用什么方案解决。很多面试官喜欢出这么一道题来考验你的知识广度和逻辑思考能力。
2023-08-08 23:33:31 843
原创 Go 代码生成利器 Go Generate
在Go语言中,go generate 命令是一个非常有用的工具,它可以帮助我们自动化地生成代码。本文将详细介绍如何使用 go generate 命令,并提供一些示例来说明它的用法。go generate 命令是一个用于自动化生成Go代码的工具。它可以在Go源文件中的特殊注释中指定命令,然后在运行 go generate 命令时自动执行这些命令。这些命令可以用来生成代码、格式化代码、运行测试等等。
2023-08-08 22:24:59 2644
原创 链表基础知识
链表是一种物理存储结构上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表的结构是多式多样的,当时通常用的也就是两种:(1)第一种是无头非循环单向链表(2)第二种是带头循环双向链表无头单向非循环列表:结构简单,一般不会单独用来存放数据。实际中更多是作为其他数据结构的子结构,比如说哈希桶等等。带头双向循环链表:结构最复杂,一般单独存储数据。实际中经常使用的链表数据结构,都是带头双向循环链表。
2023-07-29 12:40:45 425
原创 最近很火的 LangChain 你了解吗
LangChain 是一个 2023 年 1 月(v0.0.64)在 GitHub 上新开源的新框架,框架的作用是可以通过可组合性使用 LLM 构建你的应用程序。现阶段更新频率较高。有 Python 和 JS 的两种版本。和 AIGC 一样的热度,广受追捧,Stars 已经冲到了 38k 左右。官方的说辞:LangChain 是一个用于开发由语言模型驱动的应用程序的框架。具有数据意识:将语言模型与其他数据源连接起来。具有自主性:允许语言模型与其环境进行交互。
2023-07-16 19:51:44 2815
原创 【MySQL】资深开发竟然不清楚int(1)和int(10)的区别
int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 … 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。
2023-07-05 22:34:40 556
原创 Go GC之三色标记算法
为了解决原始标记清除算法带来的长时间 STW,多数现代的追踪式垃圾收集器都会实现三色标记算法的变种以缩短 STW 的时间。主流的垃圾收集器基本上都是基于可达性分析算法来判定对象是否存活的。根据对象是否被垃圾收集器扫描过而用白、灰、黑三种颜色来标记对象的状态的一种方法。而其中白色对象—表示对象尚未被垃圾收集器访问过。显然在可达性分析刚刚开始阶段,所有的对象都是白色的,若在分析结束之后对象仍然为白色,则表示这些对象为不可达对象,对这些对象进行回收。黑色对象。
2023-05-21 21:19:22 1749 1
原创 Go 并发之channel(通道)
通道类型的值本身就是并发安全的,这也是 Go 语言自带的、唯一一个可以满足并发安全性的类型。它使用起来十分简单。在声明并初始化一个通道的时候,需要用到 Go 语言的内建函数make。就像用make初始化切片那样,传给这个函数的第一个参数是代表了通道的具体类型的类型字面量。在声明一个通道类型变量的时候,首先要确定该通道类型的元素类型,这决定了可以通过这个通道传递什么类型的数据。比如,类型字面量chan int,其中的chan是表示通道类型的关键字,而int则说明了该通道类型的元素类型。
2023-05-20 22:48:47 3973 5
原创 设计模式 单例模式(创建型)
单例模式(Singleton Pattern),是最简单的一个模式。单例模式基本定义:程序运行时,在java虚拟机中只存在该类的一个实例对象。单例模式指的是全局只有一个实例,并且它负责创建自己的对象。单例模式不仅有利于减少内存开支,还有减少系统性能开销、防止多个实例产生冲突等优点。主要解决:一个全局使用的类频繁地创建与销毁。因为单例模式保证了实例的全局唯一性,而且只被初始化一次,所以比较适合全局共享一个实例,且只需要被初始化一次的场景,例如数据库实例、全局配置、全局任务池等。
2023-05-20 00:40:06 1141 1
原创 Java RSA加解密算法学习
RSA加密默认密钥长度是1024,但是密钥长度必须是64的倍数,在512到65536位之间即可。RSA加密数据有长度限制,如果加密数据太长(大于密钥长度)会报错,此时的解决方案是 可以分段加密。RSA如果采用分段加密,当密钥对改为2048位时,RSA最大加解密文大小也需要调整:RSA密钥长度=1024时, 最大加密明文长度是117,解密明文长度是128;RSA密钥长度=2048时, 最大加密明文长度是245,解密明文长度是256;
2023-04-13 02:00:20 3770
原创 Go panic的学习
defer语句将函数调用保存到一个列表上。保存的调用列表在当前函数返回前执行。Defer通常用于简化执行各种清理操作的函数。通俗地说,就是defer保证函数调用不管在什么情况下(即使当前函数发生panic),在当前函数返回前必然执行。另外defer的函数调用符合先进后出的规则,即先defer的函数后执行。
2023-03-16 22:43:52 2562 1
转载 Go 内存分配的学习
程序中的数据和变量都会被分配到程序所在的虚拟内存中,内存空间包含两个重要区域:栈区(Stack)和堆区(Heap)。函数调用的参数、返回值以及局部变量大都会被分配到栈上,这部分内存会由编译器进行管理;不同编程语言使用不同的方法管理堆区的内存,C++ 等编程语言会由工程师主动申请和释放内存,Go 以及 Java 等编程语言会由工程师和编译器共同管理,堆中的对象由内存分配器分配并由垃圾收集器回收。
2023-01-02 13:41:51 1052
原创 Go 性能优化之pprof 实战
pprof 是在做性能优化前的性能分析工具。用它可以访问并分析性能数据文件,它还会根据我们的要求,提供高可读性的输出信息。Go 在语言层面上集成了 profile 采样工具,只需在代码中简单地引入runtime/pprof或者net/http/pprof包,即可获取程序的 profile 文件,并通过 profile 文件来进行性能分析。net/http/pprof基于runtime/pprof包进行封装,并在 HTTP 端口上暴露出来。
2022-12-22 10:46:58 4301 2
原创 Go sync.Pool池化的学习
Go 语言标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。复用之前的内容,不用每次新建提前准备好,不用临时创建采用性能高的存储做缓存,更加提高响应速度 其实看下来跟我们的对象池,没什么区别,我们对象池也就是复用之前创建好的对象。最后发散下思想,影响我们的程序性能的有以下几个,存储、计算、网络等,其实都可以做缓存,或者提前准备好,亦或者复用之前的结果。
2022-12-18 22:19:45 1243
原创 【MySQL】日志文件原理学习
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。通过分析日志,我们可以优化数据库性能,排除故障,甚至能够还原数据, 不管是哪个数据库产品,一定会有日志文件。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。
2022-12-18 14:13:30 1397
转载 最强聊天机器人ChatGPT面世,AI又来抢饭碗了?
近日,OpenAI发布了一个全新的聊天机器人模型ChatGPT,它能够模拟人类的语言行为,与用户进行自然交互。在推特网友们晒出的截图中,ChatGPT不仅能流畅地与人对话,还能舞文弄墨、编写代码……创作天马行空的内容也不在话下,它几乎无所不能。由于该测试目前免费,一经推出就被访问者“挤爆”,上线仅5天用户数量就已突破100万。12月2日,就连特斯拉CEO埃隆·马斯克也在推特账号上表示,“很多人被困在一个疯狂的ChatGPT循环中?”
2022-12-17 23:24:32 1946
原创 Go 协程(goroutine)调度原理
Goroutine调度是一个很复杂的机制,尽管Go源码中提供了大量的注释,但对其原理没有一个好的理解的情况下去读源码收获不会很大。下面尝试用简单的语言描述一下Goroutine调度机制,在此基础上再去研读源码效果可能更好一些。
2022-12-12 23:20:35 3487 1
原创 Go context.Context的学习
Context仅仅是一个接口定义,根据实现的不同,可以衍生出不同的context类型;cancelCtx实现了Context接口,通过WithCancel()创建cancelCtx实例;timerCtx实现了Context接口,通过WithDeadline()和WithTimeout()创建timerCtx实例;valueCtx实现了Context接口,通过WithValue()创建valueCtx实例;三种context实例可互为父节点,从而可以组合成不同的应用形式;
2022-12-11 16:06:27 1398
原创 Go sync.WaitGroup的学习
sync代码包的WaitGroup类型和Once类型都是非常易用的同步工具。它们都是开箱即用和并发安全的。利用WaitGroup值,我们可以很方便地实现一对多的 goroutine 协作流程,即:一个分发子任务的 goroutine,和多个执行子任务的 goroutine,共同来完成一个较大的任务。在使用WaitGroup值的时候,我们一定要注意,千万不要让其中的计数器的值小于0,否则就会引发 panic。另外,
2022-11-27 13:32:50 1139
原创 Go 开发环境安装之Goland和vscode
Go语言或将成为新的主力开发语言,Go是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,所以我们有必要学习并掌握它。第一件事情,就是把环境搭建起来,大家可以跟着步骤一起将Go语言开发环境搭建起来。
2022-11-26 15:00:11 2039
原创 Go 终端命令手册
go mod edit :编辑go.mod文件,接 -fmt 参数格式化 go.mod 文件,接 -require=golang.org/x/text 添加依赖,接 -droprequire=golang.org/x/text 删除依赖,详情可参考 go help mod edit。go mod init:初始化go mod, 生成go.mod文件,后可接参数指定 module 名,上面已经演示过。go fix会把指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。
2022-11-26 13:59:13 1294
原创 Go sync.atomic原子操作的学习
我们把这两篇文章一起总结一下。相对于原子操作函数,原子值类型的优势很明显,但它的使用规则也更多一些。首先,在首次真正使用后,原子值就不应该再被复制了。其次,原子值的Store方法对其参数值(也就是被存储值)有两个强制的约束。一个约束是,参数值不能为nil。另一个约束是,参数值的类型不能与首个被存储值的类型不同。也就是说,一旦一个原子值存储了某个类型的值,那它以后就只能存储这个类型的值了。
2022-11-13 23:04:06 1358
原创 Go sync.Cond条件变量的学习
sync.Cond 条件变量用来协调想要访问共享资源的那些 goroutine,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的 goroutine。
2022-11-09 23:37:27 846
原创 Go sync.Mutex互斥锁的学习
相比于 Go 语言宣扬的“用通讯的方式共享数据”,通过共享数据的方式来传递信息和协调线程运行的做法其实更加主流,毕竟大多数的现代编程语言,都是用后一种方式作为并发编程的解决方案的(这种方案的历史非常悠久,恐怕可以追溯到上个世纪多进程编程时代伊始了)。比如,在解锁未锁定的写锁或读锁时的表现,又比如,对写操作之间互斥的实现方式。这其中还包括了我的一些理解。因为在一个 goroutine 执行的流程中,可能会出现诸如“锁定、解锁、再锁定、再解锁”的操作,所以如果我们忘记了中间的解锁操作,那就一定会造成重复锁定。
2022-11-05 17:27:34 1390
原创 Go 并发编程模型
Go 语言中实现了两种并发模型,一种是依赖于共享内存实现的线程-锁并发模型,另一种则是CSP(Communicationing Sequential Processes,通信顺序进程)并发模型。
2022-11-04 23:29:33 1211 1
rocketmq_broker.conf
2020-12-04
redis主存复制数据同步过程日志
2020-12-02
redis面试题及答案(上).pdf
2019-10-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人