坎坎坷坷.
码龄2年
关注
提问 私信
  • 博客:18,091
    18,091
    总访问量
  • 28
    原创
  • 49,593
    排名
  • 220
    粉丝
  • 0
    铁粉
  • 学习成就

个人简介:编程改变世界

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:安徽省
  • 毕业院校: 安徽大学
  • 加入CSDN时间: 2022-08-04
博客简介:

qq_73143395的博客

查看详细资料
  • 原力等级
    成就
    当前等级
    3
    当前总分
    332
    当月
    1
个人成就
  • 获得312次点赞
  • 内容获得17次评论
  • 获得329次收藏
创作历程
  • 21篇
    2024年
  • 7篇
    2023年
成就勋章
TA的专栏
  • C++基础知识
    13篇
  • 分布式理论
    1篇
  • Linux系统编程
    2篇
  • cmake
    2篇
  • git
    2篇
  • ffplay源码刨析
    4篇
  • C++网络编程
    1篇
兴趣领域 设置
  • 软件工程
    内容运营
创作活动更多

AI大模型如何赋能电商行业,引领变革?

如何使用AI技术实现购物推荐、会员分类、商品定价等方面的创新应用?如何运用AI技术提高电商平台的销售效率和用户体验呢?欢迎分享您的看法

186人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

C++基础:enum class作用域枚举 (C++11)

enum class 是C++11引入的一种改进的枚举机制,主要改进了传统的enum类型的作用域控制问题, 故也被称为作用域枚举(scoped enumerations)。那么,他到底解决了什么问题呢?猜到这个代码出了什么问题了吗?没错,当你尝试编译的时候,他会给你报一个write重定义的错误。实际上,enum类型在C++的体系中完全属于特例。
原创
发布博客 2024.10.06 ·
336 阅读 ·
4 点赞 ·
0 评论 ·
7 收藏

分布式理论:拜占庭将军问题

拜占庭将军问题是对分布式共识问题的一种情景化描述,由兰伯特于1082首次发表《The Byzantine Generals Problem》中提及,它是分布式领域最复杂的一个容错模型, 它描述了如何在存在恶意行为的情况下使分布式系统达成一致,了解拜占庭问题对于掌握分布式共识问题具有深刻意义。这个算法虽然可以保证无论叛将如何捣乱,我们都能做出一行的行为,但是这是有前提的。在兰伯特的论文中指出:如果叛将人数为m,将军人数不能少于3m+1,只有这样,口信型拜占庭将军之解才能生效。或者说,
原创
发布博客 2024.10.03 ·
1424 阅读 ·
15 点赞 ·
2 评论 ·
29 收藏

Linux线程标识获取

这个函数提供了C++标准库级别的线程ID,可以很好和C++的 std::thread 库配合,但是很不幸,std::thread::get_id()的值也是进程内有效的,如果你没有跨进程唯一线程标识的需求,使用该函数也是很不错的选择。实际开发中,我们有多种方式来获取线程标识。该系统调用的返回值为 pid_t, 其值一般为一个小整数,它直接代表着内核的任务调度id, 该标识是全局唯一的,多个进程中的不同线程的标识也是唯一的,且 pid_t 的分配方式为轮询分配,短时间启动销毁的多个线程也会获取到不同的标识。
原创
发布博客 2024.09.30 ·
472 阅读 ·
4 点赞 ·
0 评论 ·
5 收藏

C++基础:折叠表达式(C++17)

C++17 引入了一种新的语法特性,叫做折叠表达式,它允许编译器在模板参数包展开时进行元编程操作。折叠表达式的引入极大地简化了元编程代码,使其变得更为直观和简介。
原创
发布博客 2024.09.07 ·
585 阅读 ·
5 点赞 ·
0 评论 ·
10 收藏

Linux系统编程:监视文件系统变化(inotify)

你是否有过这样的需求,监控某个文件的修改情况,一旦某个文件的内容被修改你的进程就能观察到,对准对情况进行文件备份之类的操作。在Linux 环境下,内核提供了inotify API 用于监控文件系统的情况,可以用于监视文件的创建,修改,删除等事件。inotify用于当内核发生文件系统相关的某种事件后,用于通知用户空间,方便用户做出具体的操作。inotify 可以监控单个的文件,也可以监控整个目录,当一个目录被监控时,inotify会返回关于该目录本身及其内部文件的事件。
原创
发布博客 2024.08.22 ·
924 阅读 ·
21 点赞 ·
0 评论 ·
29 收藏

Cmake基础教程--第2章:打印信息和变量操作

CMake项目时基于一个名为 CMakeLists.txt 的文件来构造的,注意大小写不能拼写错误。我们在CMakeLists.txt 中使用CMake Language来编写项目的构建逻辑,其语法类似与命令式编程语言。执行cmake时,会从根CMakeLists.txt 文件开始执行。
原创
发布博客 2024.08.15 ·
850 阅读 ·
8 点赞 ·
0 评论 ·
16 收藏

Cmake基础教程--第1章:初识cmake

从本篇文章开始,我会出一系列文章,致力于Cmake工具的学习使用。阅读本文章之前,作者默认读者会使用基础的命令行工具且具有C++基础。
原创
发布博客 2024.08.07 ·
742 阅读 ·
11 点赞 ·
0 评论 ·
15 收藏

C/C++基础:宏

(a > b)?return 0;(a > b)?return 0;(a > b)?(a > b)?a : b }?(a > b)?a : b }但是如果这个宏的替换列表很长呢?// 这是正确的实现// 这是正确的实现 # define max(a , b) {
原创
发布博客 2024.07.25 ·
1174 阅读 ·
20 点赞 ·
0 评论 ·
11 收藏

C++基础 auto 和 decltype的区别

这意味着你不需要显式写出变量的类型,编译器会根据你赋予的初始值来确定类型。这对于复杂类型、模板编程或是避免重复冗长的类型名称尤其有用,可以提高代码的可读性和编写效率。所以,decltype(x) 是变量名的规则,而 decltype((x)) 是表达式的规则,井水不犯河水,参数如果是变量名,就返回其声明的类型;除此之外,decltype还可以将表达式用()包裹,此时decltype的推导就不单单是表达式所属实体的类型,而是会继续通过表达式来推断出值类别来判断引用属性,
原创
发布博客 2024.06.04 ·
344 阅读 ·
5 点赞 ·
0 评论 ·
4 收藏

std::shared_ptr使用new和make_shared两种方法构造关于访问权限的区别

C++11给开发者提供了十分好用的智能指针 std::shared_ptr ,合理的使用智能指针可以一定程度的避免内存泄漏问题。int一般来说,这两个构造方法并无太大的区别,但我们更建议使用 make_shared 来创建智能指针,其在一些情况下效率更优。但今天开发时,遇到了无法使用 make_shared 而 new 操作正常的情况,本博客即记录该现象。
原创
发布博客 2024.03.10 ·
705 阅读 ·
8 点赞 ·
1 评论 ·
9 收藏

cmake基础教程(下)

因为 main.cpp 中调用 a.cpp 和 b.cpp 中实现的函数,我们这里将 dir1/ 和 dir2/ 下的源码编译为静态库,再链接到 main.cpp 生成的可执行文件中。同时,我们之前并没有去区分编译出的文件是release版本还是debug版本,这里我们希望能指定编译的版本,并且将对应版本的动态库放置到对应的目录下。这里注意,我们在使用静态库或者动态库的时候,除了需要库文件以外,还需要头文件,所以这里我们还需要把头文件所在的目录添加进来。用于将指定的动态库或者静态库链接到指定的可执行文件。
原创
发布博客 2024.03.07 ·
1006 阅读 ·
17 点赞 ·
1 评论 ·
23 收藏

cmake基础教程(上)

我们希望在顶层的 CmakeList.txt 中接着调用src/下的 CMakeLists.txt 继续去构建项目,并且将最终生成的可执行文件安装到bin/下。因为构建的时候会产生大量的中间文件,一般我们会先创建一个build文件夹,在build文件夹中使用cmake命令。执行过会可以发现,build出现了大量的中间文件,并且生成了MakeFile,在build目录中使用命令。在实际的项目开发中,我们为了让项目的结构清晰,一般会有固定的模式来组织目录,下面给出一个典型的结构.
原创
发布博客 2024.03.02 ·
860 阅读 ·
27 点赞 ·
1 评论 ·
19 收藏

C++基础:异步操作(std::async, std::future, std::packaged_task, std::promise)

std::packaged_task是一个将任务和future绑定在一起的模板,是一种对任务的封装,可以通过方法std::get_future来获得绑定的函数的返回值类型的future。C++11之后提供了实用的thread库,但 thread 在 join 的时候并不能获取到任务结束的返回值,对于刚刚介绍的异步操作async,其返回值为一个std::future对象,而不是一个确定的值,当你需要使用这个值的时候,可以调用future的get方法,get会一直阻塞,直到future就绪,然后返回该值。
原创
发布博客 2024.03.01 ·
411 阅读 ·
9 点赞 ·
0 评论 ·
9 收藏

C++基础:右值引用,移动语义和完美转发

顾名思义,右值引用就是对右值引用的类型,通过右值引用,右值的生命周期会获得延长,只要右值引用的变量还活着,该右值临时量就会一直活下去。其最终会输出5,换言之,左值引用也是引用,如果打印i,ref1,ref2的地址,会发现三者地址也是一样的,对ref2的修改也会改变i本身的值。forward 完美转发实现了参数在传递过程中保持其值属性的功能,即若是左值,则传递之后仍然是左值,若是右值,则传递之后仍然是右值。在C++11以后,C++所有的值都必属于左值,将亡值,纯右值三者之一,其中,将亡值和纯右值都属于右值。
原创
发布博客 2024.02.25 ·
422 阅读 ·
10 点赞 ·
1 评论 ·
7 收藏

C++基础:智能指针

在创建智能指针时,可以给对象指定一个删除器,当智能指针的引用计数为零时,会自动调用该删除器来释放对象的内存,比如我们用std::shared_ptr来管理动态数组,std::shared_ptr的默认删除器不支持删除数组对象,我们就可以指定删除器。std::shared_ptr使用引用计数来保证浅拷贝的内存释放问题,每一个shared_ptr的拷贝都会指向同一块内存,只有当最后一个shared_ptr拷贝析构的时候,才会将其指向的内存释放。相对于原始指针来说,智能指针不需要手动释放内存,其内存会自动释放。
原创
发布博客 2024.02.24 ·
1023 阅读 ·
27 点赞 ·
0 评论 ·
24 收藏

C++面向对象基础:设计模式(下)

代码解释:上述代码中,如果我们希望创建ExportXm, ExportJson或者ExportTxt类的对象并使用其Export方法,我们可以创建一个其对应的工厂类实例并用于初始化总工厂ExportData对象,然后就可以通过ExportData实例来使用你需要的类的方法。抽象工厂是工厂方法模式的一种变种,为了缩减工厂实现子类的数量,不必给每一个产品分配一个工厂类,可以将产品进行分组,每组中的不同产品由同一个工厂类的不同方法来创建。为每一个子类建立一个对应的工厂子类,这些工厂子类实现同一个抽象工厂接口。
原创
发布博客 2024.02.21 ·
804 阅读 ·
20 点赞 ·
0 评论 ·
22 收藏

C++面向对象基础:设计模式(中)-- 单例模式详解

当持有锁的线程执行到new操作时,若其仅仅执行到1->2但还并未调用构造函数,此时会出现这样的情况:_instance指针已经拿到了new的返回值,此时已经不是nullptr,但因为还没有调用构造函数此时的_instance还没有实际的数据,而处于其他地方的线程可能会在这个时候直接将_instance返回并使用,这会导致严重的线程安全问题,这绝不是我们希望发生的。这个设计模式的定义实在是简单明了,也是最常用的设计模式,用该设计模式可以定义一个类仅会有一个实例对象,并且可以全局访问。注意这里实现的几个细节。
原创
发布博客 2024.02.19 ·
887 阅读 ·
26 点赞 ·
1 评论 ·
23 收藏

C++面向对象基础:设计模式(上)

通过该设计模式,只要DataCenter类的CalcTemperature方法发生改变,我们都可以调用Nodify方法使得所有订阅了该类的终端发生变化,是否订阅也取决于客户,DataCenter不关心是否有类订阅了自身。如以上代码,使用模版方法模式,我们可以在保证Show方法总体结构不变的情况下,通过子类重写父类的protected方法,来改变Show的部分执行过程。设计模式可以认为是解决问题的固定套路,是满足设计原则的情况下,慢慢迭代出来的套路,学习设计模式,可以让我们深入理解面向对象的思想。
原创
发布博客 2024.02.15 ·
1060 阅读 ·
26 点赞 ·
2 评论 ·
21 收藏

git push 推送代码出错ssh: Could not resolve hostname gitee.com: Temporary failure in name resolution

师兄说过:重启解决百分之99的问题,师兄诚不欺我。遇到奇怪的错误,都不妨关机重启试试,说不定就解决了呢?
原创
发布博客 2024.02.13 ·
1077 阅读 ·
8 点赞 ·
1 评论 ·
7 收藏

Git基础教程

Git和GitHub或者Gitee并不是一种东西,GitHub是基于Git的代码托管服务平台,而Git则是分布式版本控制系统。可以把Gitee看成一个百度云盘,我们可以把git仓库推送至Gitee,或者把Gitee的git仓库拉取下来,对比百度云盘,Gitee的功能则可以和Git无缝衔接。
原创
发布博客 2024.02.06 ·
960 阅读 ·
26 点赞 ·
1 评论 ·
22 收藏
加载更多