- 博客(1453)
- 资源 (68)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C/C++学习总结
文章目录Markdown常用语法一、面试二、编程语言1.C/C++(1)C和C++进阶的学习笔记总结目录(2)Linux系统编程(3)C语言开源项目(4)C++开源项目(5)Linux运维2.java3.python4.数据结构与算法三、分布式四、Docker,OpenStack五、Github和开源项目学习六、个人简历七、关于测试八、镜像地址或网站九、自勉之语Markdown常用语法 (1)CSDN Markdown空行:  (2)分割线:用三个以上的星号、减号、底线来建立一个分
2020-08-16 20:14:00
2207
1
原创 【c++11】什么情况下需要封装set/get
右值引用版本的build设计模式,如果涉及到管理资源的类,可以使用这个int handle;Cake() {}// 构造原味蛋糕handle = 0;// 构造巧克力蛋糕// 构造抹茶味蛋糕Cake c;return 0;int amount;int speed;int volume;Cake cake;Milk milk;return 0;
2024-07-16 10:13:26
822
原创 【c++11】多线程安全
在C++中,std::lock_guard 是一种用于管理互斥锁的RAII(Resource Acquisition Is Initialization)类。使用condition代替while循环中的unlock和lock操作。多线程队列类(mt_queue),线程之间统一用队列通信,无显式锁。
2024-07-15 10:04:42
841
原创 【c++11】cpp实现模板函数的声明与定义分离
在模板定义的cpp文件中声明其特化版本other.hoher.cppint(int);使用variant(C++17语法)代替上述的方式other.hother.cpp/*visit内部的实现方式可能就是通过index()选择的;or} , t);每个variant=32+8,string bytes+index bytes。每次占用内存过大,需要优化。所以使用data-oriented design进行改造。
2024-07-12 09:43:38
1002
原创 【C++】类型擦除 + 工厂模式,告别 if-else
需求点:假设一个第三方库有提供了很多Msg类,这些Msg类都提供了固定的一个成员函数,但是却没有虚基函数。如何在自己的项目代码中更好的使用这些Msg类内?
2024-07-06 17:22:35
393
原创 【C++11】自己封装RAII类,有哪些坑点?带你了解移动语义的真相
在C++中,std::move 对于智能指针(如 std::unique_ptr 和 std::shared_ptr)非常有用,因为智能指针管理动态分配的资源,如内存。在C++中,std::move 主要用于对象的移动语义,对于大多数内置类型(如整数),移动语义实际上没有意义。对于内置类型(如整数、浮点数等),移动与复制的成本是相同的,因为它们的大小是固定且已知的,且复制的成本非常低廉。在这种情况下,通过使用 std::move,可以避免昂贵的复制操作,提高性能。
2024-07-02 22:04:26
1022
原创 【C++11】深入剖析lambda仿函数的原理,自己动手实现std::function容器
文章目录参考参考【C++11】深入剖析lambda仿函数的原理,自己动手实现std::function容器实现自定义的Function
2024-06-18 13:04:19
297
原创 【C++20工程实战】自己动手实现纯头文件日志库
std::source_location 是 C++20 引入的一个标准库特性,用于获取代码的编译时信息,如文件名、行号、列号和函数名。这对于调试和日志记录非常有用,因为它可以在运行时捕获这些信息,而不需要手动提供。eg:假设我们有一组颜色定义,并希望使用这些定义来生成枚举和字符串数组。X-macro技术的基本思想是使用预处理器宏来定义一组数据或操作,然后通过另一个宏来实际展开这些数据或操作。std::source_location 提供了一种获取编译时源代码位置信息的便捷方法;
2024-06-05 10:19:45
731
原创 C++类型参数技术以及常见的类型擦除容器
这些类型擦除容器在需要存储和操作多态对象时非常有用,可以在运行时决定具体类型,而不需要在编译时知道类型的具体信息。根据具体需求和项目依赖,可以选择使用标准库或 Boost 库提供的类型擦除容器。
2024-05-30 11:07:55
375
原创 C++设计模式之单例模式、模板模式、状态模式、原型模式、CRTP 模式、组件模式、观察者模式、发布-订阅模式、访问者模式
文章目录参考参考游戏开发中经常用到的设计模式【C++】游戏开发常用的设计模式,高手都这样写?单例模式、组件模式、原型模式、访问者模式等
2024-05-26 17:27:43
511
原创 C++ vector,dequeu,list容器中元素的引用失效问题
这是因为std::list在内部使用节点来存储元素,每个节点都包含指向前后节点的指针,因此插入和删除操作只会影响相邻节点的指针,而不会影响其他节点。在这个示例中,即使在列表中插入和删除元素后,ref(原本指向第二个元素的引用)仍然有效,并且保持其值为2。
2024-05-26 14:19:44
445
原创 C++设计模式之策略模式、迭代器模式、适配器模式、工厂模式、超级工厂模式、享元模式、代理模式
puts("喵");puts("汪");然而,在这个案例中,虚函数可有可无,并没有发挥任何价值,因为普通成员函数也可以实现同样效果。虚函数真正的价值在于,作为一个参数传入其他函数时!可以复用那个函数里的代码。puts("喂食");puts("喂食完毕");feed(cat);feed(dog);优点在于,feed 函数只用实现一遍了。puts("喂食");// 重复的代码puts("汪");puts("喂食完毕");// 重复的代码puts("喂食");
2024-05-26 10:19:36
744
原创 服务器并发编程--libevent
Libevent 是一个用C语言编写的、轻量级的开源高性能网络库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。Libevent 已经被广泛的应用,作为底层的网络库;
2024-05-05 17:21:37
979
原创 K8S:常用资源对象操作
如果有一种工具能够来帮助我们管理Pod就好了,Pod不够了自动帮我新增一个,Pod挂了自动帮我在合适的节点上重新启动一个Pod,这样是不是遇到上面的问题我们都不需要手动去解决了。幸运的是,Kubernetes就为我们提供了这样的资源对象:Replication Controller简称RC,RC是Kubernetes系统中的核心概念之一,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当P
2024-04-09 13:34:09
1087
原创 K8S:深入理解POD
在上面的例子中,我们只是单纯的创建了一个 POD 实例,但是如果这个 POD 出现了故障的话,我们的服务也就挂掉了,所以 kubernetes 提供了一个Deployment的概念,可以让 kubernetes 去管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本一直可用的,不会因为一个 POD 挂掉导致整个服务挂掉。在这些当中,只有名字是非常需要的,你也可以指定一个更加复杂的属性,例如在容器启动时运行的命令,应使用的参数,工作目录,或每次实例化时是否拉取映像的新副本。
2024-04-09 13:29:17
905
原创 helm与k8基础
Service:Service是K8S最重要的资源对象,K8S中的Service对象可以对应微服务架构中的微服务。一个Pod表示某个应用的一个是实例。apiserver 对内(集群中的其他组件)和对外(用户)提供统一的 REST API,其他组件均通过 apiserver 进行通信。Node:Node节点是K8S集群中的工作节点,Node上的工作负载由Master节点分配,工作负载主要是运行容器应用。scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
2024-04-07 11:28:12
436
原创 分布式任务队列:cppq
cppq 是一个简单、可靠、高效的 C++17 分布式任务队列。cppq 是一个 C++ 库,用于对任务进行排队并与工作线程异步处理它们。它由 Redis 支持,旨在可扩展且易于入门。客户端将任务放入队列(队列由redis管理)服务器从队列中取出任务并为每个任务启动一个线程任务由多个worker同时处理任务队列用作跨多台机器分配工作的机制。一个系统可以由多个工作服务器和代理组成,从而实现高可用性和水平扩展。
2024-03-21 17:28:39
473
原创 高效的Gitlab Flow最佳实践
三种工作流程,有一个共同点:都采用"功能驱动式开发"(Feature-driven development,简称FDD)。
2024-03-19 15:20:41
1498
原创 taskflow:多线程并行任务
task之间可以并行,那么taskflow和普通线程池的区别在于,可以给task之间添加依赖关系,比如taskA.precede(taskB) 表示taskB依赖taskA;或者taskA.succeed(taskB) 表示taskA依赖taskB;那么构建了这个依赖关系之后,taskflow的能力就是可以在尽可能多的并行处理前提下,保证有依赖的任务之间的调用顺序。首先taskflow是基于graph的,每个独立的task只能在单核单线程上运行,可以看成一个执行单元。例如:B依赖A依赖S;
2024-03-16 10:08:49
799
原创 分布式系统之选举算法
初始化的时候,所有节点都是普通节点。在指定时间内没有收到其他节点Alive信息,则认为自己是主节点,然后向其他节点发送Victory消息,宣布自己是主节点。若发起选举的节点超过一半选票,则成为主节点,状态转换为Leader,其他节点状态有Candidate转换为Follower,leader和follower之间有周期性的心跳包,用于检测主节点存活。在开源的Redis,MongoDB,Zookeeper等软件中也都采用了的选举算法,常用的选举算法有以下三种:Bully算法,Raft算法,ZAB算法。
2024-03-06 09:48:35
685
原创 使用std::unique_ptr Pimpl造成的incomplete type的报错分析和解决
自定义删除器,将delete pImpl的操作,放到widget.cpp源文件中。// 预先声明class Impl;然后在源文件widget.cpp中delete p;这种方法改起来也不复杂,但是弊端也很明显,std::make_unique没法使用了,只能自己手动new,直接看源码吧这里返回的是默认删除器类型的unique_ptr,即std::unique_ptr。// 错误!
2024-02-25 17:11:00
919
原创 Windows安装WSL2精简版教程
打开 控制面版,查看方式可选择大图标,在点击程序与功能—>启用或关闭Windows功能,检查下图中红框圈出内容是否均以打对勾;配置之前的默认登录用户,ubuntu2004.exe config --default-user 导入系统到指定位置,wsl --import WSL版本号。导出系统到指定位置,wsl --export 启动系统后,最好在检查一下虚拟机是否以启动。WSL2需要使用虚拟机,因此需要在系统中启动虚拟机功能。
2024-01-18 14:48:21
5314
原创 【C++20】编译期检测所有未定义行为undefined behavior和内存泄漏(不借助编译选项以及任何外部工具)
【C++20】编译期检测所有未定义行为和内存泄漏,不借助任何外部工具。
2024-01-06 09:57:54
908
原创 使用dlopenC++动态库的函数符号的常规做法
在 C 中,符号名称与函数名称相同:strcpy 的符号将是 strcpy,因为在 C 中没有两个非静态函数可以具有相同的名称。因为 C++ 允许重载(具有相同名称但不同参数的不同函数)并且具有许多 C 所没有的功能(如类、成员函数、异常规范),所以不可能简单地使用函数名称作为符号名称。C++ 有一个特殊的关键字来声明具有 C 绑定的函数:extern “C”。声明为 extern “C” 的函数使用函数名称作为符号名称,就像 C 函数一样。因此,只有非成员函数可以声明为 extern “C”,并且不能重载
2023-11-18 16:31:30
530
原创 Python实现定时对网站进行签到
首先打开我们需要签到的网站,使用Chrome浏览器的F12快捷键(或通过鼠标右键菜单“检查”)打开浏览器的开发者工具,点击 Network 查看所有加载的请求。如下方动图所示,这个时候我们手动点击签到,就会发现出现了一个新的post请求(checkin),不出所料这便是我们签到的请求。将刚刚复制的内容,填写该网站左侧,右侧同时生成了对应的 python requests 代码。剩下的事就很简单了,只需要每天定时执行该代码(模拟发起post签到请求)就可以实现该网站签到。复制cURL(bash)
2023-11-03 10:24:20
466
原创 muduo异步日志库
基本思想是准备2部分buffer:A和B,前端(front end)线程往buffer A填入数据(日志消息),后端(back end)线程负责将buffer B写入日志文件。实现时,在后端设置一个已满缓冲队列(Buffer1~n,2
2023-10-22 09:30:51
596
原创 c++ inline namespace
C++11引入了inline namespace的语法,这个语法可以让程序员在不破坏现有代码的情况下添加新的命名空间。inline namespace的作用是将内层的命名空间成为外层的一个别名。也就是说,当程序员使用外层命名空间的时候,内层命名空间的内容也可以被访问到,不需要加上内层命名空间的限定符。这个特性可以帮助程序员更好地组织代码。举个例子,假设我们有一个命名空间foo,里面包含一个内层命名空间bar。// bar 中的内容// foo 中的内容。
2023-09-25 10:47:16
210
原创 GitLab CI/CD:.gitlab-ci.yml 文件常用参数小结
可以定义跑CI时想要运行的命令或脚本。可以定义想要包含的其他配置文件和模版。可以定义job之间的依赖和缓存。可以执行程序部署并定义部署位置。
2023-09-24 10:58:44
1272
原创 C++正则表达式regex使用总结
正则表达式(regular expression)的C++库regex是一种强大的描述字符序列的工具 , C++11中也将正则表达式纳入了新标准的一部分。regex库中常用组件介绍在头文件中包含了多个我们使用正则表达式时需要用到的组件,即 #includeregex库组件详细介绍如下regex表示有一个正则表达式类,比如:regex pattern(“(.{3})(.{2})_(\d{4})!”)全文匹配,要求整个字符串符合正则表达式的匹配规则。
2023-09-23 17:31:19
2097
原创 cpp-stub使用教程(基于Gtest)
配合Gtest使用,因为Gtest的所有接口都是基于虚函数的;此外,由于一些依赖接口不容易Stub或者Mock(或者写Stub test过于麻烦),因此在Gtest的基础上使用cpp-stub进行单元测试用例编写。
2023-09-21 11:58:35
1984
原创 gdb调试C++程序:Cannot evaluate function -- may be inlined
如果你的程序依赖于libcxx,而不是libstdc++.so.6。对应的可以调整cmake编译选项或者选择Debug类型进行编译。配置~/.gdbinit。
2023-09-20 16:53:40
886
原创 如何下载免费文献
搜索“浙江图书馆”,进入左下方功能栏里的“服务大厅”。同样可以免费下载文献:比如杭州图书馆、绍兴图书馆。操作方法与上面类似,通过支付宝来在线办理读者证。白嫖知网的入口之一,就藏在你天天用的支付宝里。办理完毕后,回到支付宝打开卡包,读者证到手。用刚刚获得的账号,从电脑端登录浙江图书馆。但浙江图书馆使用的人比较多,容易卡顿。下滑找到“中国知网数据库总站”,点击“新用户注册”填信息。可以试一试其他图书馆,
2023-08-28 13:28:21
176
原创 C++设计模式之桥接模式
总之,桥接模式适用于需要将抽象部分和实现部分分离的场景,以实现灵活性、可扩展性和解耦的设计。它可以帮助处理多个维度上的变化,并在运行时动态地切换抽象和实现的关系。eg:手机品牌和软件是两个概念,不同的软件可以在不同的手机上,不同的手机可以有相同的软件,两者都具有很大的变动性。
2023-08-23 17:29:59
1100
原创 C++设计模式之适配器模式
类适配器模式使用继承来适配接口;对象适配器模式通过将适配者对象作为适配器类的成员变量来实现适配;无论是类适配器模式还是对象适配器模式,都可以实现接口适配的效果,选择哪种方式取决于具体的需求和设计考虑。
2023-08-23 17:04:02
1000
Docker学习资料总结.7z
2020-02-08
VS code的linux服务器端的离线安装教程
2019-11-09
Scientific.Toolworks.Understand.v4.0.811.Incl.Keygen-AMPED.zip
2019-09-07
vscode的remote ssh中需要的ubuntu服务器中的sshd配置文件
2022-06-19
postgresql数据库插件PG-Strom中Scan算子执行流程分析
2022-03-16
CUDAppt.zip
2021-12-28
Shell编程ppt[C++教程网cppcourse[1].com].zip
2020-05-06
跟我一起学C++.zip
2020-05-06
NetworkProgramming-master.zip
2020-05-06
muduo_server_learn.zip
2020-03-12
cpptools-osx.vsix
2019-12-05
VSCode Cpptools最新版1.40.2版本.7z
2019-12-04
VSCode Cpptools.7z
2019-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人