自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux如何查看一个端口是否被占用

lsof。

2024-07-31 10:48:38 190

原创 Redis学习[3] ——持久化

Reids 是先执行写操作命令后,才将该命令记录到 AOF 日志里的,这么做其实有两个好处:避免额外的检查开销。

2024-07-30 22:33:03 619

原创 Redis学习[2] ——线程模型

Redis的单线程模型并不是指Redis只有单线程。Redis单线程指的是这个过程是由主线程(单个线程)来完成的。实际上,Redis不止有这一个线程,还存在**后台线程3个后台线程后台线程相当于一个消费者,,拿出任务就去执行对应的方法即可。之所以 Redis 为「关闭文件、AOF 刷盘、释放内存」这些任务创建单独的线程来处理,是因为,如果把这些任务都放在主线程来处理,那么 Redis 主线程就很容易发生阻塞,这样就无法处理后续的请求了。

2024-07-30 20:32:25 558

原创 Redis学习[1] ——基本概念和数据类型

String是最基本的key-value结构,value可以不仅仅是字符串,也可以是数字,value可以容纳的数据长度为512M。List列表是简单的字符串列表,按照插入的顺序排序,可以从头部或尾部向List列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40 亿个元素。Hash是一个键值对集合,即,就是说k-v数据库的v是一个键值对的集合。Hash很适合用来存储对象。Set类型是一个无序且唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。一个集合最多可以存储。

2024-07-29 21:31:14 946

原创 Linux中的守护进程

守护进程(Daemon)是一种,通常用于执行系统或服务管理任务。守护进程。典型的守护进程如web服务器、数据库服务器等。孤儿进程。

2024-07-29 17:11:13 349

原创 用一个例子来学习有限状态机(Finite-state machine,FSM)

Idle,LoggingIn,// 其他状态// 其他事件。

2024-07-28 17:37:56 267

原创 Linux如何通过shell访问一个端口

在Linux系统中,可以通过Shell命令访问一个端口以检查其状态、发送数据或接收数据。

2024-07-27 15:37:52 350

原创 Protobuf序列化原理学习

消息:由于Protocp Buffer主要用于数据存储、网络通信的场景,将称为**消息**。T - L - V:即存储方式。以表示单个数据,最终将所有数据拼接成一个字节流。T - V:即存储方式。Varint和Zigzag编码后的格式就是这种,不需要记录长度,

2024-07-26 11:58:37 402

原创 跳表的简单学习

跳表是可以实现二分查找的有序链表;每个元素插入时随机生成它的level;最底层包含所有的元素;(原始链表)如果一个元素出现在level(x),那么它肯定出现在x以下的level中;每个索引节点包含两个指针,一个向下,一个向右;(Redis实际实现没有向下的,只维护了向右的,为什么?跳表查询、插入、删除的时间复杂度为O(log n),与平衡二叉树接近;

2024-07-14 21:28:23 798

原创 分布式一致性算法:Raft学习

Raft算法又被称为基于日志复制的一致性算法,旨在解决分布式系统中多个节点之间的数据一致性问题。它通过选举一个**领导者(Leader)**,让领导者负责管理和协调日志复制,确保所有节点的数据一致。复制日志在分布式系统中,每个节点都维护着一份日志,记录系统操作的历史。为了保证数据一致性,这些日志需要在所有节点之间保持同步。Raft通过领导者选举和日志复制机制,确保所有节点的日志最终是一致的。心跳机制与选举Raft使用心跳机制来触发选举。

2024-07-09 11:49:22 578

原创 C++下Protobuf学习

Protocol Buffer 消息message和服务service由程序员编写的.proto文件描述。下面显示了一个示例消息// 指定正在使用proto2语法protoc 编译器对.proto和,以操作相应的 protocol buffer。其中.proto文件中的每一个消息有一个对应的类。.proto如果想要将消息类型用在RPC(远程方法调用)系统中,可以在.proto文件中定义一个RPC服务接口,protocol buffer 编译器将会根据所选择的不同语言生成服务接口代码及存根。

2024-07-06 16:37:11 779 1

原创 协程调度模块

调度器内部维护一个。

2024-07-04 22:26:03 620

原创 Linux中的I/O多路复用

在文件I/O过程中,如果为每一个对文件描述符都分配一个独立的进程/线程去完成监听等工作,会导致高并发场景下出现大量的进程/线程,造成资源损耗。因此,I/O多路复用的思想是==通过单个线程同时监控多个文件描述符(包括网络套接字、管道、文件等)进行I/O操作==。目标:单个进程或线程中能够同时处理多个输入或输出作用:单个进程或线程可以同时监视多个文件描述符,避免了创建多个进程或线程的开销**方法:**通过系统调用(selectpollepoll)实现。

2024-07-03 22:30:48 985

原创 IO多路复用学习

在文件I/O过程中,如果为每一个对文件描述符都分配一个独立的进程/线程去完成监听等工作,会导致高并发场景下出现大量的进程/线程,造成资源损耗。因此,I/O多路复用的思想是==通过单个线程同时监控多个文件描述符(包括网络套接字、管道、文件等)进行I/O操作==。目标:单个进程或线程中能够同时处理多个输入或输出作用:单个进程或线程可以同时监视多个文件描述符,避免了创建多个进程或线程的开销**方法:**通过系统调用(selectpollepoll)实现。

2024-07-03 22:28:49 686

原创 C++Muduo网络库初探

在网络I/O中,如果队每个连接都用一个独立的线程来处理,会导致大量的线程资源消耗。因此,出现了一种能够使用一个线程来监听所有网络连接的I/O事件的方法 —— I/O多路复用。常见的I/O复用方法:select、poll、epoll。其中,epoll是一种事件驱动的I/O多路复用的方法。事件驱动的核心是,以事件为连接点,当有IO事件准备就绪时,以事件的形式通知相关线程进行数据读写,进而业务线程可以直接处理这些数据,这一过程的后续操作方,都是被动接收通知,看起来有点像回调操作。

2024-06-19 10:31:57 1057

原创 踩坑记录[10]——LeetCode 104题:二叉树的最大深度

给定一个二叉树root,返回其最大深度。二叉树的是指从根节点到最远叶子节点的最长路径上的节点数。[0, 104]

2024-05-06 14:27:49 434 2

原创 C++设计模式 —— 单例模式的代码实现【C++面试热点】

是一种创建型设计模式, 保证一个类只有一个实例。共有两种代码实现方式:饿汉模式和懒汉模式。

2024-05-06 14:07:35 261

原创 踩坑记录[9]——LeetCode 438题:找到字符串中所有字母异位词

给你两个字符串s1和s2,写一个函数来判断s2是否包含s1的排列。如果是,返回true;否则,返回false。换句话说,s1的排列之一是s2的。给定两个字符串s和p,找到s中所有p的的子串,返回这些子串的起始索引。不考虑答案输出的顺序。指由相同字母重排列形成的字符串(包括相同的字符串)。和p仅包含小写字母。

2024-02-15 09:55:51 1139 1

原创 踩坑记录[8]——LeetCode 567题:字符串的排列

给你两个字符串s1和s2,写一个函数来判断s2是否包含s1的排列。如果是,返回true;否则,返回false。换句话说,s1的排列之一是s2的。

2024-02-10 19:54:44 707 1

原创 踩坑记录[7]——LeetCode 160题:相交链表

的输入如下(你设计的程序。

2024-02-09 09:43:28 970 1

原创 踩坑记录[6]——LeetCode 19题:删除链表的倒数第 N 个结点

由于本题的目的是删除倒数第n个结点,因此需要找到这个结点的前一个结点,也就是倒数第n+1个结点。因此,在。

2024-02-07 17:28:29 789 1

原创 遥感大模型汇总

简介:提出了一种称为RingMo-SAM的多模态遥感图像分割的基础模型,它不仅可以分割光学和SAR遥感数据中的任何内容,还可以识别对象类别。此外,它可以通过参考对象的空间坐标,在视觉上将其响应中的对象接地。提高了SAM在遥感图像上的分割准确性,凸显了 SAM 在遥感图像中部署的潜力,并减少了手动注释的需求。为了处理RS图像中的大尺寸和任意方向的物体,提出了一种新的旋转可变尺寸窗口注意力来取代变压器中原来的完全注意力,减少计算成本和内存占用,同时通过提取学习更好的对象表示来自生成的不同窗口的丰富上下文。

2024-02-05 17:15:56 3201 5

原创 C++学习——模板类的使用:自定义数组

C++泛型编程的一种主要技术是使用模板(templates)。模板允许程序员编写通用的代码,以处理各种数据类型,而不仅仅是特定的数据类型。通过使用模板,可以实现代码的重用性和灵活性,使得在不同类型上编写相似的代码变得更加容易。因此,本案例旨在利用类模板实现一个通用的数组,可以对内置数据类型或自定义数据类型进行存储。

2024-01-30 22:32:53 742 1

原创 踩坑记录[5]——LeetCode 876题:链表的中间结点

题目链接给你单链表的头结点 ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。示例 1:示例 2:提示:踩坑记录题目难度:简单本题目为双指针题型,核心解题思想:定义两个指针快慢指针,快的走两步,当快的走到头,慢的恰好位于中间。本文较为简单,但需要注意:无论是偶数个结点还是奇数个结点,最终都是返回对于第步(已经触发循环结束条件),此时指针所在位置(第一个结点为)为 ,,可知它们一定是奇数。如果一共有奇数个结点,那么当前fast就位于最后一个结点上,此时,所在的位置就是中间位置

2024-01-29 23:38:36 635

原创 踩坑记录[4]——LeetCode 21题:合并两个有序链表

题目链接将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:示例 2:示例 3:提示:踩坑记录题目难度:简单本题目为双指针题型,核心解题思想:定义两个指针分别指向两个有序链表,比较两个指针所指向的值的大小,将小的那个加入到合并的链表中且指针前进一步,以此类推…创建虚拟头节点来简化代码逻辑若不使用空指针,需要在前面对空指针情况进行提前判断,例如:但要注意,当使用虚拟头节点后,最后返回值是,不返回**“虚拟头节点”**部分。最后要将剩下的链表加到

2024-01-23 21:59:34 949

原创 踩坑记录[3]——LeetCode 83题:删除排序链表中的重复元素

给定一个已排序的链表的头head删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。[0, 300]

2024-01-22 23:30:56 409

原创 踩坑记录[2]——LeetCode 5题:最长回文子串

给你一个字符串s,找到s中最长的回文子串。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

2024-01-21 18:59:51 450

原创 踩坑记录 [1]:在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。

2024-01-20 23:44:15 406

空空如也

空空如也

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

TA关注的人

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