自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 字节跳动青训营AI刷题入营考核 ——找单独的数

有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。基于这些性质,如果我们对整个数组的所有元素进行异或操作,成对出现的数字会相互抵消(变为零),而剩下的唯一那个只出现一次的数字就会被保留下来。这个问题的核心是如何在一组数字中找到那个只出现一次的数字,而其他数字都出现了两次。题目要求时间复杂度为。设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。尽量减少额外空间的使用,以体现你的算法优化能力。解法的关键在于使用**

2024-12-18 16:05:17 385 1

原创 什么是一致性哈希?

一致性哈希算法本质上也是一种取模算法。只不过前面介绍的取模算法是按服务器数量取模,而**一致性哈希算法是对固定值2^32取模不管集群中有多少个节点,只要key值固定,那所请求的服务器节点也同样是固定的。**一致性哈希算法将整个哈希值空间映射成一个圆环,取值范围为0~2322^{32}232-1;计算各个节点的哈希值,将服务器映射到哈希环上;将数据请求的key值进行哈希运算计算出对应的哈希值,映射到哈希环上,然后**沿着哈希环顺时针查找,遇到的第一个服务器就是对应的处理请求服务器**;

2024-08-26 21:50:24 780 1

原创 C++中的多线程编程和锁机制

即在某个 lock_guard 对象的声明周期内,它所管理的锁对象会一直保持上锁状态;而 lock_guard 的生命周期结束之后,它所管理的锁对象会自动解锁 (注:类似 shared_ptr 等智能指针管理动态分配的内存资源 )。与 lock_guard 类似,unique_lock 也是一个 RAII 风格的锁,当对象离开作用域时,它会自动解锁互斥量。的设计是面向 RAII(Resource Acquisition Is Initialization)原则的,即资源管理应当通过对象的生命周期来控制。

2024-08-17 20:51:48 1359

原创 C标准库读写文件:fopen

中的文件操作 API,用于打开、读取、写入和关闭文件。这些函数为文件操作提供了简单的接口。函数:从文件中读取一行,存储到指定的缓冲区中。结构的指针,这个指针用于后续的文件操作。返回值是成功读取的项数。:用于关闭文件并释放与文件相关的资源。: 每个数据项的大小,以字节为单位。函数:用于移动文件指针到指定位置。,则可能遇到文件结尾或发生了错误。函数:打开文件,返回一个指向。: 指向存储读取数据的缓冲区。函数:将数据写入到文件。: 指向已打开的文件的。: 指向已打开的文件的。: 指向要关闭的文件的。

2024-08-15 22:11:53 1151

原创 MySQL学习[5] ——MySQL日志

除了InnoDB存储引擎层生成的undo log和redo log,MySQL在完成一条更新操作后,Server层还会生成一条binlog,事务提交时会将该事务执行过程中产生的binlog统一写入binlog 文件。最开始 MySQL 里并没有 InnoDB 引擎,MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog 日志只能用于归档。

2024-08-14 22:06:20 5823

原创 关系型和非关系型数据库的区别?

所谓的关系模型可以理解为表,因为对于一张表其结构是固定的,每一个记录都会有固定的字段值。

2024-08-14 21:00:54 433

原创 C++中重载、重写和隐藏的区别?

隐藏是指子类中的函数屏蔽了父类中的同名函数。函数名相同,但参数类型、个数不同。子类中重新实现父类中定义的虚函数。是否是虚函数,都会被隐藏。

2024-08-13 21:57:18 406

原创 MySQL学习[4] ——MySQL锁

全局锁就是**对整个数据库实例加锁全库逻辑备份**等场景。加上全局(读)锁后,整个数据库都是。若数据库的数据较多,导致整个处理流程较慢,数据库长时间为只读状态,造成业务停滞、服务长时间不可用。因此,由于,在备份数据库之前先开启事务。整个事务执行期间都在用这个 Read View,而且由于 MVCC 的支持,备份期间业务依然可以对数据进行更新操作。而如。

2024-08-13 19:11:09 5187

原创 C++中有哪几种构造函数?

初始化列表中调用同一个类的另一个构造函数。将源对象的资源移动给新对象。

2024-08-12 21:14:22 193

原创 MySQL学习[3] ——MySQL事务

如果一个事务「读到」另一个未提交事务所修改过的数据,就意味着发生了「脏读」现象。因为这个未提交的事务有可能执行失败而发生回滚,那么这个事务读取到的数据就是过期的数据,于是产生了**「脏读」**在一个事务内多次读取同一个数据,如果出现前后两次读到的数据不一样的情况,就意味着发生了「不可重复读」现象。出现这种情况的主要原因是,事务B在事务A两次读取之间提交了,从而修改了数据库。在一个事务内多次查询某个符合查询条件的「记录数量」,如果出现前后两次查询到的记录数量不一样的情况,就意味着发生了「幻读」现象。

2024-08-12 20:26:38 4911

原创 a++ 和 int a = b 在C++中是否是线程安全的?

而多条指令就意味着可能存在线程安全问题。因为这些语句在编译为汇编指令。

2024-08-11 21:49:11 533

原创 MySQL学习[2] ——MySQL索引

通过将多个字段组合成一个索引,这个索引就叫做联合索引。联合索引的非叶子节点用两个字段的值作为 B+Tree 的 key 值。当在联合索引查询数据时,先按 product_no 字段比较,在 product_no 相同的情况下再按 name 字段比较。这是**最左匹配原则,按照最左优先的方式进行索引的匹配。在使用联合索引进行查询的时候,如果不遵循「最左匹配原则」,联合索引会失效**,这样就无法利用到索引快速查询的特性了。

2024-08-11 16:40:55 5121

原创 MySQL学习[1] ——MySQL基础

以执行一条 SQL 查询语句的流程为例,如下图所示:MySQL可以分为两层:Server层和存储引擎层。其中:Server层负责管理连接、分析和执行SQL存储引擎层负责数据的存储和提取第一步肯定是要先连接 MySQL 服务,然后才能执行 SQL 语句。MySQL服务器中由Server层的**「连接器」**管理这部分工作,经过 TCP 三次握手成功后,连接器会验证用户输入的用户名和密码,并获取用户的权限,(就算中途管理员修改了用户的权限,也不会影响本次连接)。

2024-08-09 15:26:39 4585

原创 C++ 指针和引用的区别?

sizeof。

2024-08-06 22:36:50 371

原创 C++ 一个指针占用多少内存?

C++ 中一个指针占用多少内存?在32位系统中,占用4字节;在64位系统中,占用8字节。

2024-08-06 22:35:30 184

原创 Redis学习[7] ——如何使用Redis实现分布式锁?

分布式锁是用于分布式环境下并发控制的一种机制,用于控制某个资源。如下图所示:Redis,可以用来保存分布式锁,且Redis的,可以应对高并发的锁操作常见。

2024-08-04 15:16:37 4999

原创 C++中指针和引用的区别?

sizeof。

2024-08-03 17:04:19 390

原创 Redis学习[6] ——Redis缓存设计

通常来说,为了保证缓存和数据库中的数据一致性,需要给Redis缓存中的数据**设置过期时间**。当缓存过期后,则用户的请求会从数据库读取数据,并将数据再次存入到Redis缓存中。当**大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增**,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。发生缓存雪崩有两个原因:大量数据同时过期;

2024-08-03 14:34:49 4499

原创 C++中const关键字的作用?

可以将其定义在头文件中而不会引起重复定义问题,每个包含该头文件的源文件都各自拥有一个。修饰一个函数的参数,表示在函数内部不能修改这个参数,一般搭配引用或指针使用。修饰一个变量,阻止这个变量被改变,在定义变量时必须初始化。也可以修饰指针变量,分为:常量指针和指针常量。:表示返回的值不能修改,通常用于返回引用类型。:表示该成员函数不能修改类的成员变量,显式用。可以定义一个不可修改的常量,const。

2024-08-02 20:27:02 669

原创 Redis学习[5] ——Redis过期删除和内存淘汰

惰性删除策略:不主动删除过期键,每当从数据库访问key时,如果检测到这个key过期了,则删除这个key。优点:只有在访问时才会检测,消耗很少的系统资源,对CPU时间友好。缺点:如果一个过期的key一直没有被访问,那么会始终最早数据库内,造成内存空间浪费,对内存不友好。定期删除策略:每隔一段时间**「随机」从过期字典中取出一定数量的 key 进行检查,并删除其中的过期key。**具体流程从过期字典中随机选取20个key;检查这20个key是否过期,删除已过期的key;

2024-08-02 19:19:29 5269 1

原创 Redis学习[4] ——Redis集群

主从复制模式中,主从服务器之间采用的是**「读写分离」的方式。主服务器可以进行读写操作,当发生写操作时自动将写操作同步给从服务器,而从服务器一般是只读,并接受主服务器同步过来写操作命令,然后执行这条命令。**也就是说,所有的数据修改只在主服务器上进行,然后将最新的数据同步给从服务器,这样就使得主从服务器的数据是一致的。主从服务器之间的命令复制是**异步**进行的。但是,与Raft算法不一致的是,主服务器并不会等到从服务器实际执行完命令后,再把结果返回给客户端,而是**

2024-08-01 11:13:58 3979

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

lsof。

2024-07-31 10:48:38 1199

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

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

2024-07-30 22:33:03 5016

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

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

2024-07-30 20:32:25 4272

原创 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 4447

原创 Linux中的守护进程

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

2024-07-29 17:11:13 477

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

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

2024-07-28 17:37:56 580

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

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

2024-07-27 15:37:52 714

原创 Protobuf序列化原理学习

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

2024-07-26 11:58:37 4428

原创 跳表的简单学习

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

2024-07-14 21:28:23 3978

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

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

2024-07-09 11:49:22 8432

原创 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 5008 1

原创 协程调度模块

调度器内部维护一个。

2024-07-04 22:26:03 827

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

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

2024-07-03 22:30:48 4785

原创 IO多路复用学习

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

2024-07-03 22:28:49 801

原创 C++Muduo网络库初探

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

2024-06-19 10:31:57 5378

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

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

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

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

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

2024-05-06 14:07:35 375

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

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

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

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

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

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

空空如也

空空如也

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

TA关注的人

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