gtest集成测试组件
Gtest概述GTest是一个跨平台的C++单元测试框架,由google公司发布。gtest是为了在不同平台上为编写C++单元测试而生成的。它提供了丰富的断言、致命和非致命判断、参数化等等测试所需的宏,以及全局测试,单元测试组件。 使用头文件 1#include <gtest/gtest.h> 框架初始化接口 1testing::InitGoogleTest(&argc, argv); 调用测试样例 1RUN_ALL_TESTS(); CMake 12345678910111213141516171819202122232425cmake_minimum_required(VERSION 3.10)project(main)include(CheckCXXCompilerFlag)CHECK_CXX_COMPILER_FLAG("-std=c++17" COMPILER_SUPPORTS_CXX17)CHECK_CXX_COMPILER_FLAG("-std=c++11"...
spdlog日志组件
Spdlog介绍spdlog 是一个高性能、超快速、零配置的C++ 日志库,它旨在提供简洁的API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。以下是对spdlog 的详细介绍和使用方法。 github链接:https://github.com/gabime/spdlog 特点 高性能:spdlog 专为速度而设计,即使在高负载情况下也能保持良好的性能。 零配置:无需复杂的配置,只需包含头文件即可在项目中使用。 异步日志:支持异步日志记录,减少对主线程的影响。 格式化:支持自定义日志消息的格式化,包括时间戳、线程ID、日志级别等。 多平台:跨平台兼容,支持Windows、Linux、macOS 等操作系统。 丰富的 API:提供丰富的日志级别和操作符重载,方便记录各种类型的日志。 spdlog与glog组件对比glog 和spdlog 都是流行的C++...
Redis基本指令
redis基本指令redis中最核心的两个命令set123456789user@Ubuntu:~$ SET key value [expiration EX seconds | PX milliseconds] [NX|XX]SET key value expiration EX seconds:设置key并设置过期时间(单位是秒)SET key value expiration PX seconds:设置key并设置过期时间(单位是毫秒)[NX|XX]:如果key存在,更新key和value如果key不存在,创建新的键值对,原来的ttl会失效 redis文档给出的语法格式说明: []相当于一个独立的单元,表示可选项(可有可无的)其中 | 表示 “或者” 的意思,多个只能出现一个。[]和[]之间,是可以同时存在的。 12345678127.0.0.1:6379> set key1 123 ex 10OK127.0.0.1:6379> ttl key1(integer) 6127.0.0.1:6379> ttl key1(integer)...
Redis单线程模型
...
Redis内部数据结构
Redis数据结构概述 字符串:等同于std::string 哈希:等同于std::unoredered_map 列表:等同于std::vector 集合:等同于std::set 有序集合:等同于std::map 数据结构:redis中hash背后的实现,不一定是一个标准的哈希表。在特定的场景下,使用别的数据结构实现,但是保证时间复杂度符合承诺。编码方式:redis内部底层的实现。redis所有的key都是字符串,value的类型是存在差异的 数据结构和内部编码 数据结构 内部编码 介绍 string raw 最基本的字符串(底层就是持有一个char数组) int redis通常也会用来实现一些计数这样的功能,当value就是一个整数的时候此时可能redis会直接使用int来保存 embstr 针对短字符串进行特殊优化 ...
Redis指令概述
redis指令redis服务器指令重启redis服务器 1user@Ubuntu:~$ service redis-server restart 查看redis服务器状态 12345678910111213141516user@Ubuntu:~$ sudo service redis-server status● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2024-09-17 19:12:13 CST; 20s ago Docs: http://redis.io/documentation, man:redis-server(1) Process: 14011...
传输层概述
传输层说明 如果只想关注计算机网络的应用: 熟悉:应用场景,端口号 了解:传输层功能,特性。 如果想深入学习计算机网络: 熟悉:传输层功能,特性。 熟悉:端口号 传输层功能 实现端到端的通信 复用分用: 复用(从上到下):在发送数据的时候,多个进程可以使用同一个传输层协议 分用(从下到上):在接收数据的时候,传输层可以把数据正确的交给应用层目的进程。 差错检测: TCP检测出差错后立即丢弃数据。 UDP检测出错误后直接丢弃数据,且不通知发送方。 想传输层提供两种服务: 面向连接的、可靠的端到端传输服务(TCP):确保数据无差错,不丢失。开销大,实时性差。 无连接的,不可靠的端到端传输服务(UDP):数据可能出错、丢失,但是速度快,开销小。 端口号 作用:通过端口号标识一个特定进程: 注意:每台主机的端口号是相互独立的。 注意:TCP、UDP两种协议的端口号是独立的。 通过TCP/UDP协议,通过Socket套接字 = { IP地址 : 端口号...
UDP协议
UDP说明 如果只想关注计算机网络的应用: 了解:UDP特点,功能。 熟悉:应用场景。 如果想深入学习计算机网络: 熟悉:UDP特点,报文格式,应用场景。 熟悉:UDP校验和。 概述UDP(User Datagram Protocol,用户数据报协议)是一种无连接的传输层协议,属于TCP/IP协议族,其核心设计目标是提供高效但不可靠的数据传输服务。它直接基于IP协议工作,仅通过复用/分用和校验和机制实现基本的数据传输功能,无需建立连接或维护复杂的状态信息。 特点(面试题) UDP首部很小,只占8B。 UDP每次传输一个完整的报文,不支持报文自动拆分、重装。 UDP是无连接的,不可靠的(可靠性可以交给应用层处理),也不支持拥塞控制。 UDP支持一对一(封装为单播IP数据报)、一对多传输(封装成广播/多播IP数据报) UDP协议不支持报文拆分、重装。因此应用层报文长度不超过UDP协议上限。 报文格式 16位源端口号:表示发送进程的端口号 16位目的端口号:表示接收进程的端口号 16位UDP长度:表示整个数据报的长度(UDP首部 +...
TCP协议
TCP协议说明 如果只想关注计算机网络的应用: 了解:TCP特点,功能。 知道:TCP通过三次握手,四次挥手建立连接即可。 熟悉:应用场景 如果想深入学习计算机网络: 熟悉:TCP特点,功能,报文格式,应用场景。 熟悉:TCP全部功能和机制。 TCP概述TCP(Transmission Control...
哈希表hash
hash概述在Redis中,哈希类型是指值本身有是一个键值对结构,形如: 12key = "key",value = {{field1, value1}, {field2, value2}} {: height=75%, width=75%} 注意:哈希类型中的映射关系通常为field-value,用于区分Redis整体的键值对(key-value),注意的是这里的value是指field对应的值,不是键(key)对应的值。 相关命令HSET 功能:设置hash中指定的字段(field)和值(value)时间复杂度:$O(1)$返回值:添加的字段的个数 123456HSET key field value [field value..]127.0.0.1:6379> hset key f1 111(integer) 1127.0.0.1:6379> hset key f2 222 f3 333 f4 444(integer)...