- 博客(132)
- 收藏
- 关注
原创 MongoDB
MongoDB是一个开源的NoSQL 文档型数据库,由 C++ 语言实现,设计目标是提供高性能、高扩展性和灵活的数据存储方案。它采用格式存储数据,支持动态模式(Schema-less),适用于处理非结构化或半结构化数据。选择 MongoDB:当需要处理非结构化数据、快速迭代开发或应对高并发大数据场景时。选择 MySQL:当业务需要严格的事务一致性(如支付系统)或复杂 SQL 查询时。Go 语言集成:通过官方驱动可高效操作 MongoDB,代码简洁且性能优异。
2025-03-28 15:51:42
402
原创 gin框架 bind(验证规则)
当验证失败时,Gin会返回默认的错误信息。你可以自定义错误信息,以提供更友好的用户体验。err!= nil {ok {returnreturn})在这个例子中,我们将验证错误信息提取出来,并以数组的形式返回给客户端。以上就是Gin框架中binding标签的常见验证规则和使用方法。通过合理使用这些规则,可以确保客户端发送的数据符合服务器的要求。
2025-02-20 09:19:21
299
原创 Git:把单个commit合到本地分支
如果某个功能分支上有部分提交实现的功能也适用于其他分支,但又不想合并整个功能分支,就可以使用。执行上述命令后,会展示出提交历史,其中每行开头的一长串字符便是commit的哈希值。当不小心删除了某个重要的提交,但又不想通过复杂的操作来恢复整个提交历史时,可以使用。在同时维护多个版本的软件时,一个版本上的修复可能也需要应用到其他版本。分支)上发现一个重要的问题修复提交,而这个修复也需要应用到主分支(如。分支上修复了一个导致程序崩溃的bug,该修复对应的提交哈希为。若要将单个commit合并到你的分支,可使用。
2025-01-23 18:39:21
566
原创 git使用-合并代码查看是否冲突解决冲突
的优点是可以使提交历史更加线性,避免了合并提交,让提交历史看起来更简洁。但它的缺点是可能会修改提交历史,如果多人在同一个分支上工作,使用。如果有冲突,它会显示未合并的路径,以及冲突的文件列表,你可以打开这些文件,手动解决冲突。可能会导致其他人在拉取代码时出现问题,因为他们的提交会基于不同的历史。查看是否有冲突,若有冲突,会显示冲突的文件,你需要手动打开这些文件并解决冲突。(此处为开发人员的代码开发操作,不涉及具体的 git 命令)(此处为开发人员的代码开发操作,不涉及具体的 git 命令)
2025-01-17 14:46:37
945
原创 go 自己写序列化函数不转义
背景:算法传给我一个map[int32]string类型的值(map的值本身是json转化成的string),我需要把这个值生成一个文件上传到OSS,但是发现通过url下载下来的文件里面有转义字符。解决:搜索了一些方式发现都是会有转移的,所以决定自己写一个Marshal()。原因:直接通过json.json.Marshal(),最后肯定会发生转义的。
2024-12-18 18:57:27
417
原创 LeetCode59. 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。
2024-11-14 15:30:22
318
原创 滑动窗口算法-leetcode209.长度最小的子数组
滑动窗口算法是一种用于处理数组、字符串等序列数据结构的优化技术。它通过维护一个窗口(通常是一个子数组或子字符串),并在序列上滑动这个窗口来解决问题。该算法可以将嵌套的循环问题转换为单循环问题,从而降低时间复杂度。
2024-11-14 14:19:12
383
原创 认识Pulsar
较大的消息负载可能会导致内存使用峰值,从而导致性能下降。Pulsar 采用限速机制进行消息分发,避免了流量激增,提高了消息送达率。您可以设置阈值来限制可传送到客户端的消息数量和条目的字节大小,从而在每单位时间的流量超过阈值时阻止后续传送。例如,当您将调度速率限制配置为每秒 10 条消息时,每秒可传送到客户端的消息数最多为 10。
2024-10-11 16:32:39
1309
原创 git提交命令压缩
开发需求可能涉及到多次提交,如果提交到公司开发环境分支上会非常难看,最好将多次提交压缩为一次提交,然后再提mr。保存并关闭文本编辑器。Git 将打开另一个文本编辑器,让你编辑新的压缩提交的提交信息。编辑提交信息,然后保存并关闭编辑器。命令强制推送压缩后的提交。这可能会导致与其他协作者的冲突,因此请确保在执行此操作之前与团队成员进行沟通。命令查看更新后的提交历史。应该看到最近的三个提交已合并为一个提交。请注意,如果你已将更改推送到远程仓库,则需要使用。将第二个和第三个提交前的。
2024-10-08 21:25:54
501
原创 docker+k8s相关面试题
Kubernetes(通常简称为K8s)是一个开源的容器编排平台,用于自动化应用程序的部署、扩展和管理。它最初由Google开发,并于2014年发布为开源项目,现在由Cloud Native Computing Foundation(CNCF)进行维护。Kubernetes旨在解决在分布式系统中部署和管理容器化应用程序时遇到的挑战。下面是一些关键概念和组件,帮助你更好地理解Kubernetes:节点(Nodes):节点是运行Kubernetes的物理或虚拟机器。每个节点都可以托管一个或多个容器。
2024-03-18 13:55:07
3596
原创 kafka面试题
data为Message的具体内容。这样做的原因是还没有被足够多副本复制的消息被认为是“不安全”的,如果 Leader 发生崩溃,另一个副本成为新 Leader,那么这些消息很可能丢失了。1、 这其实是分布式场景下的通用问题,因为我们知道CAP理论下,我们只能保证C(一致性)和A(可用性)取其一,如果支持读写分离,那其实对于一致性的要求可能就会有一定折扣,因为通常的场景下,副本之间都是通过同步来实现副本数据一致的,那同步过程中肯定会有时间的消耗,如果支持了读写分离,就意味着可能的数据不一致,或数据滞后。
2024-02-17 16:58:00
1169
原创 搭建一个完整的Kubernetes集群
Kubernetes 支持容器网络插件,使用的是一个名叫 CNI 的通用接口,它也是当前容器网络的事实标准,市面上的所有容器网络开源项目都可以通过 CNI 接入 Kubernetes,比如 Flannel、Calico、Canal、Romana 等等,它们的部署方式也都是类似的“一键部署”。在本篇的最后部分,我会介绍到它。不过,不同于对 Ceph 的简单封装,Rook 在自己的实现中加入了水平扩展、迁移、灾难备份、监控等大量的企业级功能,使得这个项目变成了一个完整的、生产级别可用的容器存储插件。
2023-12-21 15:23:25
1070
原创 golang单测
Testify是一个功能强大且易于使用的测试工具包,提供了丰富的断言方法和辅助函数。它扩展了Go的内置testing包,使测试编写更简洁、可读性更高。由于goland自动生成的测试函数使用了反射,但是大多数情况下是不使用的,使用断言这种方式,所以就用了下面的Testify。导入库:go get github.com/stretchr/testify/assert。
2023-12-20 17:04:02
712
原创 Golang for i 和for range性能对比
通过数据对比,在开发过程中,如果数据量在10000以内,for rang 性能更好一些,如果数据量超过10000,使用for i性能更好一些,需要结合具体使用场景来看。因此,在选择循环结构时,应根据具体情况和代码可读性进行权衡。循环内部会获取切片的长度,并直接访问切片的底层数组。这避免了额外的内存分配和复制操作,从而提高了性能。是通过访问底层数组或切片来获取元素的,而不需要逐个访问每个元素。循环在每次迭代时需要进行更多的工作,如获取索引和对应的值。然而,对于一般的迭代任务,性能差异可能并不明显,并且。
2023-12-19 09:57:15
619
原创 项目串讲(后端)要讲哪些东西?
首先就是文件的目录,每个文件夹里都是什么东西,包含什么内容,有什么功能。最后就是具体到项目功能实现的接口(API),包括接口的名称,请求方法,请求参数,接口实现的逻辑,这个逻辑最好要画一个流程图,这样在串讲的时候会更加清晰,然后最好配上代码,把那个逻辑的代码截张图,标清楚第一步怎么样,第二步怎么样,再这就是把每一步用到的数据库表也写上去,这样就结合代码了,说明你真的看代码了,根据代码理解逻辑了,最后就是这个接口返回什么参数以及在这个接口中就是把数据查了一下,还是赋值存储入库了,入的哪个库,说清楚。
2023-10-12 15:37:17
462
原创 分布式锁的实现方式
分布式锁是指分布式应用各节点对共享资源的排他式访问而设定的锁。分布式CAP理论:任何一个分布式系统都不无法同时满足一致性、可用性和分区容错性,最多执行同时满足两项。在互联网领域绝大数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证最终一致性,只要这个最终时间是在用户可以接受的范围内容即可。
2023-09-12 09:35:24
228
原创 golang—面试题大全
Go中Map是一个KV对集合。底层使用hash table,用链表来解决冲突 ,出现冲突时,不是每一个Key都申请一个结构通过链表串起来,而是以bmap为最小粒度挂载,一个bmap可以放8个kv。每个map的底层结构是hmap,是有若干个结构为bmap的bucket组成的数组。每个bucket底层都采用链表结构。bmap 就是我们常说的“桶”,桶里面会最多装 8 个 key,这些 key之所以会落入同一个桶,是因为它们经过哈希计算后,哈希结果是“一类”的,关于key的定位我们在map的查询和赋值中详细说明。
2023-08-13 21:21:28
5203
2
原创 操作系统—网络系统
零拷贝技术是一种优化技术,用于减少数据在内核空间和用户空间之间的拷贝次数,从而提高数据传输的效率。通过避免不必要的数据拷贝,直接将数据从源缓冲区传输到目标缓冲区,减少CPU的负担,提升系统性能。IO多路复用(IO Multiplexing)是一种操作系统提供的IO处理机制,通过同时监视多个文件描述符(FD)的IO状态,实现对这些IO事件的异步处理。常见的IO多路复用技术包括select、poll和epoll。
2023-08-12 15:36:49
297
原创 Redis—集群
全量复制、基于长连接的命令传播、增量复制。主从服务器第一次同步的时候,就是采用全量复制,此时主服务器会两个耗时的地方,分别是生成 RDB 文件和传输 RDB 文件。为了避免过多的从服务器和主服务器进行全量复制,可以把一部分从服务器升级为「经理角色」,让它也有自己的从服务器,通过这样可以分摊主服务器的压力。第一次同步完成后,主从服务器都会维护着一个长连接,主服务器在接收到写操作命令后,就会通过这个连接将写命令传播给从服务器,来保证主从服务器的数据一致性。
2023-08-11 21:17:51
1246
原创 MySQL—缓存
InnoDB会把存储的数据划分为若干个页,以页作为磁盘和内存交互的基本单位,一个页默认大小为16KB,MySQL启动时,InnoDB会为buffer pool申请一篇连续的内存空间,然后按照默认的16KB的大小划分出一个个的页,buffer pool中的页就叫做缓存页。有了 Free 链表后,每当需要从磁盘中加载一个页到 Buffer Pool 中时,就从 Free链表中取一个空闲的缓存页,并且把该缓存页对应的控制块的信息填上,然后把该缓存页对应的控制块从 Free 链表中移除。
2023-08-10 20:20:54
1278
1
原创 操作系统—调度算法
扫描调度算法性能较好,不会产生饥饿现象,但是存在这样的问题,中间部分的磁道会比较占便宜,中间部分相比其他部分响应的频率会比较多,也就是说每个磁道的响应频率存在差异。
2023-08-10 09:33:43
218
原创 Redis—缓存
当我们在写入数据库数据时,在布隆过滤器里做个标记,这样下次查询数据是否在数据库时,只需要查询布隆过滤器,如果查询到数据没有被标记,说明不在数据库中。时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是。,导致请求在访问缓存时,发现缓存缺失,再去访问数据库时,发现数据库中也没有要访问的数据,没办法构建缓存数据,来服务后续的请求。为了减少对业务的影响,我们可以启用。
2023-08-10 09:02:33
1221
原创 计算机网络—IP
其中对于 A、B、C 类主要分为两个部分,分别是网络号和主机号。主机号全为1指定某个网路下的所有主机,用于广播主机号全为0指定某个网络而 D 类和 E 类地址是没有主机号的,所以不可用于主机 IP,D 类常被用于多播,E 类是预留的分类,暂时未使用。ping 是应用层命令,ping应用的底层,用的是网络层的ICMP协议ICMP是利用了IP协议进行消息的传输。。Ping 是计算机网络中常用的诊断工具,用于测试网络连接和测量网络延迟。
2023-08-09 21:03:02
1849
原创 MySQL—事务
多版本并发控制(Multi-Version Concurrency Control,简称 MVCC)是一种用于实现事务隔离的技术。在 MySQL 中,InnoDB 存储引擎使用 MVCC 来实现事务的隔离性,提高数据库并发性能。MVCC 的基本思想是为每个事务操作提供一个数据版本的快照,这样事务就可以在它自己的数据快照上独立运行,而不会受到其他并发事务的影响。通过这种方式,MVCC 可以在不使用加锁的情况下实现高效的事务隔离,从而提高系统的并发性能。
2023-08-09 17:01:21
347
原创 MySQL—锁篇
两阶段锁协议(Two-Phase Locking Protocol,简称 2PL)是一种用于控制并发事务的锁定协议,以确保事务的一致性和隔离性。两阶段锁协议可以防止脏读(Dirty Read)、不可重复读(Non-repeatable Read)和幻读(Phantom Read)等问题,从而实现事务的隔离级别。两阶段锁协议的基本思想是将事务的执行过程分为两个阶段:加锁阶段(Locking Phase)和解锁阶段(Unlocking Phase)。加锁阶段(Locking Phase)
2023-08-09 16:59:55
957
原创 MySQL—索引
聚簇索引(Clustered Index)和非聚簇索引(Non-Clustered Index)是两种不同类型的数据库索引,它们在数据存储和查询性能方面有一些区别。聚簇索引并不是一种独立的索引类型,而是指数据行与索引行在存储上的排列方式。在聚簇索引中,表中的数据行按照索引键的顺序存储在磁盘上。换句话说,聚簇索引定义了表中数据的物理存储顺序。由于聚簇索引决定了数据的物理顺序,因此每个表只能有一个聚簇索引。在具有聚簇索引的表中,数据行的查找非常快,因为索引键值可以直接指向数据行的存储位置。
2023-08-09 16:57:32
764
原创 MySQL—日志
redo log 是物理日志,记录了某个数据页做了什么修改,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志。在 MySQL 中,redo log(重做日志)是一种事务日志,用于记录已经执行的事务对数据库的修改操作。它用于确保事务的持久性和数据的一致性。当一个事务对数据库进行修改操作时,MySQL 首先会将这些修改操作记录到 redo log 中,然后再将修改操作应用到内存中的数据页。
2023-08-09 16:47:47
449
原创 Redis—持久化
出来的重写子进程会先将与主线程共享的内存数据以 RDB 方式写入到 AOF 文件,然后主线程处理的操作命令会被记录在重写缓冲区里,重写缓冲区里的增量命令会以 AOF 方式写入到 AOF 文件,写入完成后通知主进程将新的含有 RDB 格式和 AOF 格式的 AOF 文件替换旧的的 AOF 文件。加载完 RDB 的内容后,才会加载后半部分的 AOF 内容,这里的内容是 Redis 后台子进程重写 AOF 期间,主线程处理的操作命令,可以使得。最后在重写工作完成后,将新的 AOF 文件覆盖现有的 AOF 文件。
2023-08-09 08:58:04
675
原创 计算机网络—HTTP
粘包问题是指在基于 TCP 协议的数据传输过程中,由于 TCP 是一个面向字节流的可靠传输协议,接收方在接收数据时可能会将多个数据包收到一起,形成一个“粘在一起”的数据包。这种现象称为粘包。粘包问题通常出现在客户端和服务器之间发送的数据包较小或发送速度较快的情况下。TCP 无法识别应用层数据边界:TCP 是一个面向字节流的传输协议,它只负责保证数据的可靠传输,但无法识别应用层数据的边界。因此,当发送方连续发送多个数据包时,接收方可能会一次性接收到这些数据包,导致粘包问题。TCP 流量控制和拥塞控制。
2023-08-08 21:42:00
1859
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人