随性思考
不死奇迹
和一群有趣的灵魂,享受有趣的故事
展开
-
浅谈高级程序员、架构师、技术经理、技术总监和CTO的理解
高级程序员、架构师、技术经理、技术总监和CTO的职责原创 2022-08-12 14:41:15 · 504 阅读 · 0 评论 -
正则表达式30分钟入门
正则表达式30分钟入门转载 2021-07-09 17:24:36 · 46 阅读 · 0 评论 -
强烈推荐的一个“在线C++编译网站”
网站地址原创 2021-03-03 11:56:41 · 922 阅读 · 0 评论 -
C的结构体继承机制,实现多态
注意: 基结构必须实现“虚析构函数”,否则使用dynamic_cast进行转换时会报错!!!原创 2021-01-19 14:55:38 · 656 阅读 · 0 评论 -
只能在堆上创建对象和栈上创建对象示例
/// <summary>/// 只能在堆上创建对象/// </summary>class HeapObj{protected: HeapObj() {} //创建栈对象必须会调用构造函数,只需要将构造设为不能被访问就行 ~HeapObj() {} //为了此类能作为基类使用,使用protected类型public: static HeapObj* CreatSO() { return new HeapObj();原创 2020-11-23 16:48:55 · 131 阅读 · 0 评论 -
一篇非常好的TCP报文发送讲解
链接地址转载 2020-11-22 21:57:28 · 1160 阅读 · 0 评论 -
kafka高效的原理
参加知乎文章:https://zhuanlan.zhihu.com/p/78335525原创 2019-12-03 18:55:53 · 189 阅读 · 0 评论 -
自定义的C++读取文件的类(按行读取实例)
类的声明#pragma once#include <fstream>class ReadFileModule{public: ReadFileModule(); ~ReadFileModule(); /* Desc: 设置需要读的文件的文件名(全路径) Param: string 文件全路径名 Return: bool 设置...原创 2019-06-19 18:24:06 · 1513 阅读 · 0 评论 -
记录一下“使用新的库时,提示应用的库与源码不匹配的解决方法”
当编译器出现使用的库与源码不匹配的报错时,处理方式如下:1. 先看包含的源码的路径有没有正确包含进来,可是在代码中#include一个源码头文件试下是否正常。若不正常,则应该先查看下包含文件的路径是否正确包含。2. 查看包含的新库的路径是否正常,确定引用的库是否全部引用!...原创 2019-06-21 10:22:34 · 400 阅读 · 0 评论 -
自定义实现std::string 分割函数
typedef enum EM_ValueType{ VT_INT = 0, VT_DOUBLE} ValueType;template<typename T>void ParseReadLine(const std::string& readLine, const std::string& split, ValueType type, std...原创 2019-06-21 17:11:48 · 803 阅读 · 0 评论 -
记录了解的第一个C++并行计算库
Visual Studio 2010中的本机C ++库已得到扩展,可为并行编程提供丰富的支持。 用户可以使用不同的层与并行运行时进行交互,其中最高的一个是并行模式库(使用头文件ppl.h)。 在其中,用户可以找到不同的结构,允许他们快速并行化他们的程序,而无需广泛了解调度决策,底层线程,周围环境等。其中一个构造是parallel_for构造,它允许用户并行化一个for- 快速循环。 它的近亲是pa...原创 2019-06-21 17:30:13 · 924 阅读 · 0 评论 -
std::list 的比较
sort() 函数模板定义在头文件 algorithm 中,要求使用随机访问迭代器。但 list 容器并不提供随机访问迭代器,只提供双向迭代器,因此不能对 list 中的元素使用 sort() 算法。但是,还是可以进行元素排序,因为 list 模板定义了自己的 sort() 函数。sort() 有两个版本:无参 sort() 函数将所有元素升序排列。第二个版本的 sort() 接受一个函数对象或 ...转载 2019-06-18 10:56:03 · 835 阅读 · 0 评论 -
关于C++运行时,Release的exe运行时提示需要Debug库的支持的问题
情况描述: 运行Release版本exe时,需要使用第三方的动态库,运行时提示需要第三方debug版本的库!!!解决过程: 在查找本地配置确认本地配置没问题后,将怀疑对象转入第三方库的编译过程。最后确认是如下图所示的配置中使用了Debug版本的lib导致的!!!...原创 2019-07-11 11:28:51 · 640 阅读 · 0 评论 -
C++判断端口是否被占用的方法
一般检测一个端口是否被占用的方法是看bind是否成功,其实在Windows中有两个API可以获取到当前系统端口的占用情况(GetTcpTable/GetUdpTable),利用这两个函数就可检测端口占用情况。但在较复杂系统环境下,端口占用表可能随时改变,可能存在两个以上进程使用上述方法检测到同一空闲端口,在这种情况下,可使用Bind方法进行端口选择。一、通过GetTcpTable/GetUdp...转载 2019-07-11 14:22:53 · 7946 阅读 · 0 评论 -
记——VS运行路径的问题
问题: VS工程的“工作目录”使用默认的目录,VS生成的exe运行时需要加载一个配置文件,我们将配置文件放在我们VS设置的运行目录下。当使用VS运行工程时,提示找不到该配置文件;当直接运行生成后的exe文件时,加载配置文件正常!原因: 当使用VS运行工程时,其运行目录为.vcxproj文件所在的目录!!当直接运行exe时,其运行目录为exe所在的目录。解决方案: 手动设置VS的输出目录和调试的...原创 2019-07-30 17:51:08 · 1454 阅读 · 0 评论 -
CMake使用
转自 https://www.cnblogs.com/hansjorn/p/4886368.htmlCMakeList相关cmake使用示例与整理总结 http://blog.csdn.net/wzzfeitian/article/details/40963457/ 对应的demo:https://github.com/carl-wang-cn/demo/tree/master/cmakeC...转载 2019-07-31 18:27:45 · 449 阅读 · 0 评论 -
C++获取目录下的所需文件
bool ParseDose::GetImageFileName(std::string catalog, std::vector<std::string>& lstFileName){ intptr_t hFile = 0; struct _finddata_t fileInfo; std::string pathName, exdName; ...原创 2019-08-01 12:02:20 · 207 阅读 · 0 评论 -
http和tcp/ip协议的描述
参考博客:https://juejin.im/post/5d75c116f265da03d9255dd1原创 2019-10-09 11:00:44 · 87 阅读 · 0 评论 -
自定义std::map的排序
std::map的内部排序是按照红黑树进行的,所以,查询时间复杂度为O(log2n).STL中map的定义是:复制代码1 template<class _Kty,2 class _Ty,3 class _Pr = less<_Kty>,4 class _Alloc = allocator<pair<const _Kty, _Ty&g...原创 2019-06-03 15:42:48 · 6779 阅读 · 0 评论 -
C++快速打印log日志文件
/*Des: 写log日志Param: str 需要输入到日志的字符串*/void WriteToLog(char* str);{if (str == NULL){return;}FILE* log;errno_t error = fopen_s(&log, "C:\\ARTCheck_log.txt", "a+");if (error == -1) ...原创 2019-05-31 13:36:03 · 2288 阅读 · 0 评论 -
CPU的用户态和内核态的解释
CPU的两种工作状态:内核态(管态)和用户态(目态)。内核态: 1.系统中既有操作系统的程序,也有普通用户程序。为了安全性和稳定性,操作系统的程序不能随便访问,这就是内核态。即需要执行操作系统的程序就必须转换到内核态才能执行!!! 2. 内核态可以使用计算机所有的硬件资源!!!用户态:不能直接使用系统资源,也不能改变CPU的工作状态,并且只能访问这个用户程序自己的存储空间!!!!三...转载 2018-08-13 19:30:59 · 10158 阅读 · 3 评论 -
自定义实现内存池
内存池: 1.创建一个结构体管理内存池。 2.重载new和delete操作符 3.执行new时,“先执行重载new操作符函数”,再执行“构造函数”!! 4.执行delete时,“先执行虚构函数”,再执行“重载delete操作符函数”代码: struct ST_MemoryPool { char* pStart; //总内存块的起始位置 char* pUseS...原创 2018-08-13 14:39:15 · 282 阅读 · 0 评论 -
抽奖实现
// 抽奖.cpp : 定义控制台应用程序的入口点。 //include “stdafx.h”include include include using namespace std;/***************** 中奖描述: 一等奖(A): 10 权重 二等奖(B): 20 权重 三等奖(C): 20...原创 2018-08-14 10:48:16 · 369 阅读 · 0 评论 -
二叉树及其演变的二叉树
二叉树,完全二叉树,满二叉树,平衡二叉树的区别度:指的是一个节点拥有子节点的个数。如二叉树的节点的最大度为2。 深度:树的层数,根节点为第一层,依次类推。 叶子节点:度为0的节点,即没有子节点的节点。树:树的每一个节点,可以有n(后续节点)个子节点,但每个节点只有一个前驱节点。二叉树:除叶子节点外,每个节点只有两个分支,一个是左子树,另一个为右子树,每个节点的最大度数为2。满二...原创 2018-08-03 19:10:01 · 216 阅读 · 0 评论 -
二叉树及其演变的二叉树
二叉树,完全二叉树,满二叉树,平衡二叉树的区别度:指的是一个节点拥有子节点的个数。如二叉树的节点的最大度为2。 深度:树的层数,根节点为第一层,依次类推。 叶子节点:度为0的节点,即没有子节点的节点。树:树的每一个节点,可以有n(后续节点)个子节点,但每个节点只有一个前驱节点。二叉树:除叶子节点外,每个节点只有两个分支,一个是左子树,另一个为右子树,每个节点的最大度数为2。满二...原创 2018-11-09 10:08:11 · 165 阅读 · 0 评论 -
生产者与消费者实现总结
1.使用join模式加入线程时,一定要一起先创建对象,再一起join, 否则,假如先创建td_1对象,td_1.join(),后再创建td_2对象,这时,程序只会执行td_1,因为 2.原子操作的实现跟普通数据类型类似,但是它能够在保证结果正确的前提下,提供比mutex等锁机制更好的性能。3.提示:开发过程中,对于多线程的情况下,单个基础数据类型的数据共享安全,尽量使用原子操作代替...原创 2018-07-28 15:47:10 · 1255 阅读 · 0 评论 -
生产者与消费者-锁机制实现
// Windows下多线程.cpp : 定义控制台应用程序的入口点。 //include “stdafx.h”include include include include using namespace std;static bool bIsReady = false; std::mutex mt_ready;void SetIsReady(...原创 2018-07-28 15:43:13 · 769 阅读 · 0 评论 -
生产者与消费者-atomic原子操作实现
// Windows下多线程.cpp : 定义控制台应用程序的入口点。 //include “stdafx.h”include include include include include using namespace std;static bool bIsReady = false; std::mutex mt_ready;void...原创 2018-07-28 15:39:30 · 546 阅读 · 0 评论 -
C++的STL库中的vector的resize和reserve函数的比较
vector的resize和reserver两个函数 相同点: 都是用于给vector变量重新分配容量 不同点: 1. resize函数扩容后,会改变capacity,同时改变size!!! 2. reserve用来(预留空间,)改变capacity,不改变size,会去分配内存,但不会构造出对象;如果改变后的capacity比当前capa...原创 2018-08-31 10:00:34 · 363 阅读 · 0 评论 -
自定义实现定时器
/************************类功能描述**********************/ Master类: 1. 使用单例模式实现Master类 2. 用于管理定时器、创建定时器、销毁定时器 3. 定时器内存管理MyTimer类: 1. 使用工厂模式实现定时器 2. 用于实现定时器的功能constant.h: ...原创 2018-09-02 15:49:28 · 612 阅读 · 0 评论 -
C++11封装一个类似于node.js的异步执行闭包函数
线程池增加子任务函数将1函数作为另一个类的成员变量,使其可供该类使用:将1与2的新类的成员变量绑定:在新类中使用该异步函数原创 2019-05-23 11:50:23 · 185 阅读 · 0 评论 -
下载正版windows软件网站!!!
https://msdn.itellyou.cn/原创 2019-05-09 17:21:27 · 948 阅读 · 0 评论 -
C++获取运行时的目录
char* GetExePath(){//获取应用程序目录CHAR szapipath[_MAX_PATH];//(D:\Documents\Downloads\TEST.exe)memset(szapipath, 0, _MAX_PATH);GetModuleFileName(NULL, szapipath, _MAX_PATH);//获取应用程序名称char szPath[_MA...原创 2019-04-25 13:31:16 · 2062 阅读 · 0 评论 -
C++11的无固定形参的回调
//任务回调函数定义typedef std::function< void() > ACTask;void ACBusinessManager::AddChildThreadTask(ACTask task){if (task){m_taskManager->AddTask(task);}}//调用过程:[ = ] :为传值调用!![ & ]...原创 2019-04-29 18:49:34 · 257 阅读 · 0 评论 -
C++传统的回调函数和使用C++11特性后的回调函数
还可以使用不限制形参的回调函数(原因: 因为lambda表达式产生了可调用的对象,这个对象这里称做一个闭包(closure),可以保存在std::function对象里面。closure(闭包)的定义是,一个函数和它所引用的非本地变量(非lambda表达式内部定义的变量)的一个集合。):...原创 2019-04-27 16:06:23 · 1429 阅读 · 1 评论 -
指针数组和数组指针的区别
char p[3][4]; // 二维数组指针数组:char* a[4]; 表示存放了4个char* a的数组将一个二维数组赋给指针数组如下表示for(int i=0; i<3; i++){a[i] = p[i];}数组指针:char (*b)[4]; 表示一个指针b指向了一个含有4个指针的一维数组将一个二维数组赋给数组指针如下表示b = p;b++; 即b = ...原创 2019-02-11 09:58:02 · 144 阅读 · 0 评论 -
C++ explicit关键字
***C++ explicit关键字***explicit用来防止由构造函数定义的隐式转换。google的c++规范中提到explicit的优点是可以避免不合时宜的类型变换,缺点无。所以google约定所有单参数的构造函数都必须是显示的,只有极少数情况下拷贝构造函数可以不声明称explicit。例如作为其他类的透明包装器的类。effective c++中说:被声明为exp...转载 2018-11-23 09:27:50 · 92 阅读 · 0 评论 -
抽奖实现
// 抽奖.cpp : 定义控制台应用程序的入口点。 //include “stdafx.h”include include include using namespace std;/***************** 中奖描述: 一等奖(A): 10 权重 二等奖(B): 20 权重 三等奖(C): 20...原创 2018-07-28 15:37:26 · 238 阅读 · 0 评论