自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【每日一题】3186. 施咒的最大总伤害

一个魔法师有许多不同的咒语。给你一个数组 power ,其中每个元素表示一个咒语的伤害值,可能会有多个咒语有相同的伤害值。已知魔法师使用伤害值为 power[i] 的咒语时,他们就 不能 使用伤害为 power[i] - 2 ,power[i] - 1 ,power[i] + 1 或者 power[i] + 2 的咒语。每个咒语最多只能被使用 一次。请你返回这个魔法师可以达到的伤害值之和的 最大值。

2025-10-12 17:00:05 259

原创 【C++项目】基于微服务的即使通信系统

注意:阿里云的短信验证码服务,最近不再给个人开放,所以以下接口中有用到验证码的,一律使用的是固定验证码(1234)

2025-10-02 20:03:38 805

原创 [C++项目组件] 后台服务器部署docker

docker 是一个用 Go 语言实现的应用容器引擎开源项目,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。其广泛应用于开发、测试和生产环境中,帮助开发者和系统管理员简化应用的部署和管理,实现快速的交付,测试和部署。

2025-10-02 19:59:34 495

原创 [ProtoBuf] proto3语法解析

单个proto文件中可以定义多个消息体,而且支持嵌套。每个消息体的字段编号可以重复(完全可以理解为就是C++的类)语法支持我们定义枚举类型并使用。在.proto枚举类型名称:使用驼峰命名法,首字母大写。MyEnum常量值名称:全大写字母,多个字母之间用连接。我们可以定义一个名为PhoneTypeMP = 0;// 移动电话TEL = 1;// 固定电话0值常量必须存在,且要作为第一个元素,这是为了和proto2兼容枚举类型可以定义在消息外,也可以嵌套消息体。

2025-10-02 13:51:26 870

原创 [ProtoBuf] 编写第一个ProtoBuf代码

消息就是定义的结构化对象,我们可以给这个堆笑定义对应的属性内容。为什么要定义消息?在网络传输时,收发双方得有约定好的“协议”,协议其实就是定义结构化的数据(像TCP、UDP的报文就是有结构的)。另外,把数据长期存到数据库时,也会用“对象”把相关元数据整合起来再存储。ProtoBuf则是通过message的方式,支持我们定制协议里的字段,后续还能帮我们生成对应的类和方法来使用这些数据。比如在“通讯录”里,就得给“联系人”定义一个message。

2025-09-29 16:26:02 1043

原创 [Protobuf] Protobuf初见和安装

下载之后将压缩包解压到本地目录下。解压后的文件内包含 bin、include文件,以及一个 readme.txt。

2025-09-29 14:45:00 775

原创 [C++项目组件]Elasticsearch简单介绍

Elasticsearch(简称ES)是开源的分布式搜索引擎,特点丰富:支持分布式部署,无需复杂配置就能自动发现节点,还能自动对索引分片、做副本;提供RESTful风格接口,可对接多数据源,自动平衡搜索负载。它能近乎实时地存储、检索数据,扩展性极强,可扩展到上百台服务器,处理PB级数据。ES由Java开发,以Lucene为核心实现索引和搜索功能,但通过简单的RESTful API隐藏了Lucene的复杂性,让全文搜索更简便。

2025-09-29 09:33:32 1398

原创 [C++项目组件]RabbitMq的简单介绍和使用

RabbitMQ 是一个由 Erlang 语言编写的 开源消息中间件,实现了 AMQP(Advanced Message QueuingProtocol,高级消息队列协议)。它的核心作用是:在分布式系统中传递消息,实现 解耦、异步、削峰填谷 等功能。RabbitMQ 既可以部署在本地,也可以运行在云端,支持多种编程语言客户端。RabbitMQ 就像一个“快递中转站”,生产者把包裹交给它,它根据规则把包裹送到合适的收件人手里,保证安全、可靠、灵活。项目中用于消息队列的实现转发。

2025-09-28 17:06:30 607

原创 [C++项目组件]cpp-httplib与 websocketpp的简单介绍和使用

实体信息:C++ HTTP 库(轻量级:仅需一个头文件,不依赖任何外部库;跨平台:支持 Windows、Linux、macOS 等操作系统;支持同步和异步操作:开发者可按需选择操作方式;支持 HTTP/1.1:实现 HTTP/1.1 协议,包含持久连接、管道化等特性;支持:便于文件上传场景;支持 SSL/TLS:通过 OpenSSL 或 mbedTLS 库,支持 HTTPS 和 WSS;简单易用:API 设计简洁,易学习使用;性能良好:轻量级但性能表现出色,适配多种应用场景;

2025-09-28 16:46:31 1596

原创 [C++项目组件]Etcd的简单介绍和使用

Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeeper 框架更加轻量化。以下是关于 etcd 的安装与使用方法的详细介绍。Etcd在项目中的作用是:作为服务注册发现中心。// pplx::task 并行库异步结果对象// 阻塞方式 get(): 阻塞直到任务执行完成,并获取任务结果。

2025-09-28 16:32:19 659

原创 [C++项目框架库]redis的简单介绍和使用

Redis(Remote Dictionary Server)是一个开源的高性能键值对(key-value)数据库。它通常用作数据结构服务器,因为除了基本的键值存储功能外,Redis 还支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)以及范围查询、位图、超日志和地理空间索引等。内存中数据库:Redis 将所有数据存储在内存中,这使得读写速度非常快。

2025-09-28 15:30:47 489

原创 [C++项目框架]ODB的简单介绍

ODB 指的是一个 C++ 的 ORM 框架(Object-Relational Mapping),它的作用就是把 C++ 类和关系型数据库(比如 MySQL)里的表进行映射。也就是说,我们在C++定义一个类,用ODB的编译器对这个类进行处理,ODB 会自动生成对应的 SQL 表结构和访问代码。这样你就可以通过操作 C++ 对象来完成数据库的增删改查,而不用手写 SQL。

2025-09-28 15:27:56 1176

原创 【C++项目组件】brpc的简单介绍和使用

brpc 是用 C++ 语言编写的工业级 RPC 框架,常用于搜索、存储、机器学习、广告、推荐等高性能系统。搭建能在一个端口支持多协议的服务,或访问各种服务:使用 brpc 的 http 实现比libcurl方便多了;从其他语言可通过 HTTP/h2+json 访问基于 protobuf 的协议。redis 和 memcached,线程安全,比官方 client 更方便。rtmp/flv/hls,可用于搭建流媒体服务。支持 thrift,线程安全,比官方 client 更方便。

2025-09-28 12:01:05 618

原创 [C++项目框架]Spdlog的简单介绍

性能:从性能测试结果来看,spdlog 在同步调用场景下的性能优于 glog。当涉及到大量日志数据时,spdlog 显示出更快的处理速度。异步日志:spdlog 支持异步日志记录,这在处理高负载应用程序时非常有用,可以减少日志操作对主线程的影响。易用性:spdlog 提供了更简单的集成和配置方式,只需包含头文件即可使用,而 glog 可能需要额外的编译和配置步骤。功能:glog 提供了一些特定的功能,如条件日志记录和信号处理,这些在某些场景下可能非常有用。使用场景。

2025-09-28 11:30:23 1011

原创 [C++项目框架]gflags和gtest的简单介绍

gflags 是 Google 开发的一个开源库,用于 C++ 应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。易于使用:gflags 提供了一套简单直观的 API 来定义和解析命令行标志,使得开发者可以轻松地为应用程序添加新的参数。自动帮助和文档:gflags 可以自动生成每个标志的帮助信息和文档,这有助于用户理解如何使用程序及其参数。类型安全。

2025-09-28 10:47:34 955

原创 【Linux网络】一.网络基础(1)

例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。在实际的开发中,会话,表示,应用这三层是无法分开的,所以再实际中,一般就是五层协议。报文=报头+有效载荷。

2025-06-14 19:36:55 729 3

原创 【五子棋在线对战】三.数据管理模块实现

mysql链接共享,所以在多个线程同时执行sql语句时会导致竞争,所以需要加锁保护,这里有一个新的写法在加锁的地方用括号括起来,这样就变成了一个区间,区间结束之后锁会自动释放。user_table的初始化就是mysql_create()要传入的参数也是mysql_create这个函数所需要的参数,析构函数就直接调用mysql_destroy即可。实现一个mysql客户端来访问服务器进行数据的操作,为了项目的可拓展性,针对管理的每一张表都去设计一个类,我们这里是针对用户的数据所以设计的就是user类。

2025-06-08 10:54:41 673 3

原创 【五子棋在线对战】二.项目结构设计 && 实用工具类模板的实现

所以日志的实现大致思想就是:设置一些日志等级,在测试项目的时候要打印出信息,项目上限之后把日志打印到文件中。实用工具类模板主要负责提前实现一些代码中会用到的边缘代码,提前实现了就可以在项目中直接使用了。在实现项目中,肯定会遇到bug,以及在项目上线之后也要定期观察项目的情况。localtime(time_t * t) 根据时间戳生成时间格式。这个工具主要用于数据库的连接&&初始化,句柄的销毁,语句的执行。fp,char* fromat,…time_t time(NULL) 获取时间戳。

2025-06-04 20:45:07 1009 1

原创 【五子棋在线对战】一.前置知识的了解

本文章旨在对五子棋在线对战的代码进行实现的全过程,包括了代码的环境,前置知识的了解,和项目的整体架构。

2025-05-31 15:18:58 586 1

原创 【算法提升】分组 day_tow

个人认为这题最难的点在于如何想到使用二分的算法来解题。正向求解:就是去看每一组中需要分多少个人,但是这样求解代码我根本写不出来。所以根据的思想,我们可以从最终结果去倒推。枚举最终的分配结果中,最多的人数(设为x)如果你对二分非常熟悉,你就很敏锐的发现这题可以使用二分来求解 当然需要确定左右边界左边界最小就是1,右边界就是所有声部的种类中,人数最多的那个数量 当然上图的a,b,c这些人数需要使用hash表来存储。

2025-05-30 21:12:18 294

原创 【微服务即时通讯系统-服务端】 一.项目开发功能需求和框架设计

本系列文章旨在构建一个即时通信系统,类似于微信,当然是非常简化的版本,这篇文章让我们先来了解一下这个项目的整体框架设计以及需要实现的功能。

2025-05-26 21:21:13 576

原创 【算法提升】牛牛冲钻五 && 最长无重复子数组 && 重排字符串 one_day

使用hash表存储已经进入窗口内的值,如果出现重复元素,就出窗口然后再统计结果’后面的数据要根据前面两个的状态来确定,我的做法是使用动态规划的方式。//判断是否可以重拍,x<=(n+1)/2。今天最有难度的题目,整体思路使用贪心。//2.优先处理出现次数最多的字母。//1.每次处理一批相同的字母。//3.每次摆放中间隔一个位置。非常经典的滑动窗口的题目。

2025-05-26 21:07:01 301

原创 [MySQL]视图+用户管理

同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。我们在一开始学习数据库的时候,就发现系统默认给我们配置了一些库,而用户信息就储存在mysql这个库的user表中。我们一直用的是root的用户,在实际使用中我们不会这么做,这时候就要用到mysql的用户管理。张三只能操作mytest这个库,而李四只能操作msg这个库。刚创建的用户没有任何权限,需要给用户授权。只有select权限,其他的权限都没有。修改了视图之后,原始的数据也会收到影响。

2025-04-18 12:37:23 578 3

原创 [MySQL] 事务管理(二) 事务的隔离性底层

即当我们某个事务执行快照读的时候,对该记录创建一个Read View读视图,把它比作条件,用来判断当前事务能够看到哪个版本的数据,既可能是当前最新的数据,也有可能是该行记录的undo log里面的某个版本的数据。**Read View就是事务进行快照读操作的时候生产的读视图(Read View),**在该事务执行的快照读的那一刻,会生成数据库系统当前的一个快照,记录并维护系统当前活跃事务的ID(当每个事务开启时,都会被分配一个ID,这个ID是递增的,所以最新的事务,ID值越大)。增删改,都叫做当前读。

2025-04-16 13:31:56 773 1

原创 [MySQL] 事务管理(一) 事务的基本概念

事务就是一组DML语句组成这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的。现在看概念我认为事务就是一组的SQL语句事务的执行结果,必须使数据库从一个一致状态,改变到另一个一致性的状态。当事务成功提交,数据库处于一致性的状态,但是当事务没有提交被迫中断时,未完成的事务对数据库的修改已经被填入到数据库中,这个时候数据库就处于一种不一致的状态,所以事务的一致性是由原子性来保证的。

2025-04-15 13:35:00 1172 4

原创 [MySQL] 索引

MySQL 中的数据文件,是以page为单位保存在磁盘当中的MySQL 的CURD 操作,都需要通过计算,找到对应的插入位置,或者找到对应要修改或者查询的数据。而只要涉及计算,就需要CPU参与,而为了便于CPU参与,一定要能够先将数据移动到内存当中为了更好的进行上面的操作,MySQL 服务器在内存中运行的时候,在服务器内部,就申请了被称uffer Pool的的大内存空间,来进行各种缓存。其实就是很大的内存空间,来和磁盘数据进行IO交互。为何更高的效率,一定要尽可能的减少系统和磁盘IO的次数。

2025-04-13 17:22:27 1082 4

原创 [MySQL] 表的内连和外连

内连接实际上我们已经见过了,就是使用where语句对两种表的笛卡尔积进行筛选,也是在开发过程中使用的最多的连接查询。简单来说就是在两张表之间把逗号编程inner join 把where条件变成on即可。左外连接就是把左边的表的全部信息显示出来,这里显示个人信息,所以放在左边的是学生表。如果联合查询,右侧的表完全显示我们就说是右外连接。外连接分为了左外连接和右外连接。我们就说是左外连接。

2025-04-12 11:49:29 335

原创 [MySQL]复合查询

我们前面在增删查改里面的查询都是对一张表进行的查询,但是在实际开发中,这是不够的。

2025-04-10 17:09:17 701

原创 [MySQL] 内置函数

2.要求显示exam_result表中的信息,显示格式:“XXX的语文是XXX分,数学XXX分,英语XXX分”2.md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串。4.password()函数,MySQL数据库使用该函数对用户加密。4.截取EMP表中ename字段的第二个到第三个字符。3.database()显示当前正在使用的数据库。3.将EMP表中所有名字中有S的替换成’上海’5.以首字母小写的方式显示所有员工的姓名。1.获取emp表的ename列的字符集。

2025-04-09 17:03:58 448

原创 [MySQL] 表的增删查改(查询是重点)

我们再来看看where和order by 结合使用的例子。

2025-04-08 16:14:06 1373 5

原创 [MySQL] 表的约束

真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。上一小节我们就提到了约束的概念,这篇我们来系统的认识约束。

2025-04-05 16:25:18 792

原创 [MySQL]数据类型

2.当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)。例子:有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]支持小数最大位数d是30。另外,我们存入100.0,看似是长度是4,但是系统会在插入时判断这个数字为100.00,所以还是不可以插入的。

2025-03-31 17:57:36 825 3

原创 [MySQL] 库的操作 && 表的操作

这里就是一个创建数据库的例子,框内的东西可以不填,因为有默认设置,而这些东西是什么呢?

2025-03-28 12:08:53 751 4

原创 [贪心算法] 加油站 && 单调递增的数字 && 坏了的计算器 && 合并区间 && 无重叠区间

暴力解法:两层for循环,(先写一下,优化版本就是根据暴力解法写出来的)优化:当从a位置出发到f位置的时候发现油变成负数了,,所以我们直接从f的下一个位置开始出发寻找,这样时间复杂度就变低了(这里的diff表示gas[i]-cost[i]

2025-03-26 10:39:11 534

原创 [贪心算法]最长回文串 && 增减字符串匹配 && 分发饼干

我们可以存下每个字母的个数,然后分类讨论。

2025-03-22 18:54:07 677 2

原创 [贪心算法]买卖股票的最佳时机 && 买卖股票的最佳时机Ⅱ && K次取反后最大化的数组和 && 按身高排序 && 优势洗牌(田忌赛马)

暴力解法就是两层循环,找出两个差值最大的即可。优化:在找最小的时候不用每次都循环一遍,只要在i向后走的时候,每次记录一下最小的值即可。

2025-03-20 20:59:46 1702

原创 MySQL:数据库基础

数据库(Database,简称DB),长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据"仓库"。用来存放管理数据。

2025-03-19 22:31:17 1605

原创 [贪心算法] 摆动序列

这里我们的贪心体现在,这里我们只需要找到每一个拐点位置的数字即可,证明:当我们在A点时,我们下一步的选择有四种。

2025-03-17 20:34:02 532

原创 [贪心算法]-最大数(lambda 表达式的补充)

我们一般使用的排序比较大小都是a>b 那么a在b的前面a=b 无所谓a<b a在b的后面本题的排序则是ab>ba 那么a在b的前面ab=ba 无所谓ab<ba a在b的后面。

2025-03-17 19:51:25 646

原创 [C语言]字符串函数模拟实现strlen,strcpy,strcat,memcpy,memmove,memset

memcpy和strcpy很像,但是memcpy可以拷贝任意类型,所以函数返回值类型和函数参数这里用的时void*将 ptr 所指向的内存块的前 num个字节都设置为指定的值 value。通常用于将一段内存初始化为特定的值。memmove和memcpy也是一样的,但是memmove可以处理源内存区域和目标内存区域有重叠的情况。strlen是获取字符串的长度以‘\0’结尾但是不包括。strcat将一段字符串追加到另一段字符串后面。上面的代码便于理解,下面的代码写起来行数更少。判断是正向赋值还是反向。

2025-03-17 17:09:14 258

空空如也

空空如也

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

TA关注的人

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