摘要:
项目中需要用到smtp协议来发送邮件告警,后端的技术栈主要是Java和C++,Java项目里直接在网上找的现成的类完美实现,163邮箱,腾讯邮箱和阿里邮箱均测试通过,不幸的是C++的项目也需要使用smtp协议来发送邮件,惯例先度娘,CSDN逛了一圈,例程也不少但是每个下边留言都有这样和那样的问题,c 阅读全文
摘要:
概述系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。 演示Demo实现功能:1.... 阅读全文
摘要:
一:树的定义 树是一种数据结构,由n(n>1)个有限结点组成一个有层次关系的集合。形状像一颗倒立的树而得名。分为:无序树,有序树,二叉树,满二叉树,完全二叉树,平衡二叉树(AVL),二叉查找树(二叉搜索树、BST),霍夫曼树,红黑树,B-tree(B-树或者B树),B+树,B*树等。 节点结构体(C 阅读全文
摘要:
一:概述 链表(Linked list)由一些节点组成,物理存储非连续的线性表。其中每个节点都会存储下个节点的指针,由于实际存储空间不连续,对链表插入节点,删除节点可以达到O(1)的复杂度,但是对一个节点的访问需要O(n)的时间。 链表有单向链表,双向链表。 二:单向链表 单向链表的每个节点有数据项 阅读全文
摘要:
这就是一个代理模式,让王工改需求,需要联系李总,李总再把工作安排给王工,最终完成了同样的目的,但是有个了中间人。 同样在Java里的代理模式,也这个道理,客户端不直接访问实际的对象,而是通过中间的代理对象来访问实际对象。 代理模式分为静态代理和动态代理 静态代理 代理和被代理对象在代理之前是确定的。 阅读全文
摘要:
License是软件的授权许可,规定了获得代码后拥有的权利,比如代码是否可用于商业领域,如用到商业领域是否声明版权等信息。 世界上的开源许可证(Open Source License... 阅读全文
摘要:
一:概述链表(Linked list)由一些节点组成,物理存储非连续的线性表。其中每个节点都会存储下个节点的指针,由于实际存储空间不连续,对链表插入节点,删除节点可以达到O(1)的复杂度,但是对一个节点的访问需要... 阅读全文
摘要:
昨天Github上一个项目彻底爆红了网络,短短一天star数突破一万,Issues已破1800,大家纷纷说出有关企业的不合理加班行为,句句吐露程序员的心声,掀起了一波抵制加班潮,抵制996。该项目里还带了一个网页... 阅读全文
摘要:
概述 系统托盘就是在系统桌面底部特定的区域显示运行的程序。windows在任务栏状态区域,linux在布告栏区域。应用程序系统托盘功能,是比较普遍的功能,本篇将详细的介绍如何实现该功能。 演示Demo实现功能: 1.应用启动后,任务栏,系统托盘可以看到该程序。 2.点击右上角×关闭窗口,自动隐藏窗口 阅读全文
摘要:
说明实际开发过程中,生成的应用文件不会用默认的图标,同时程序启动后任务栏的图标也需要修改,还有窗口的图标,这样显得程序不那么low。更改程序的图标有多种方式,基于Qt Creator或vs开发的方式有区别,任务栏... 阅读全文
摘要:
一:说在前头我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级,冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位越来越少了,基... 阅读全文
摘要:
说明 实际开发过程中,生成的应用文件不会用默认的图标,同时程序启动后任务栏的图标也需要修改,还有窗口的图标,这样显得程序不那么low。更改程序的图标有多种方式,基于Qt Creator或vs开发的方式有区别,任务栏图标和窗口图标,只需加入一段代码即可实现,本文开发环境是qt5.9.7+vs2017。 阅读全文
摘要:
管理员启动dos窗口开启防火墙:netsh advfirewall set allprofiles state on关闭防火墙:netsh advfirewall set allprofiles state of... 阅读全文
摘要:
一:说在前头 我的第一份工作是做生产工具,当时用的MFC,IDE是VC6.0,现在想想真是古董级别,10年至今,微软也一直没有对MFC进行升级, 冥冥中感觉微软自己都放弃MFC了,市场上貌似MFC的岗位越来越了,基本上也都是原先的项目维护,qt已经成为新的客户端开发的趋势, 顺者昌,逆者亡,无奈只能 阅读全文
摘要:
1.不同人修改了不同的文件 a.账户A,账户B分别从远端拉取了相同分支 b.账户A修改了main.cpp文件后提交到远端,账户B修改fun.cpp文件提交远端时会报如下错误 解决办法: ... 阅读全文
摘要:
作者... 阅读全文
摘要:
一:安装 Flink官网下载地址:https://flink.apache.org/downloads.html 选择1.6.3版本 下载: 解压: 查看本机host 进入flink目录,修改conf/flink-conf.yaml文件 修改conf/masters文件,修改后内容如下: 启动单机版 阅读全文
摘要:
一:插件管理器Vundle 1.简介 Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。vim Vundle插件官方地址:https://github.com/VundleVim/Vundle.vim。 2.安装步骤 a.安 阅读全文
摘要:
1.创建分支 a.直接创建 git branch dev(分支名) b.基于某个历史版本创建分支 git branch dev HEAD2.查看分支 git branch -av3.删除分支 git bran... 阅读全文
摘要:
一:简介 GIT是一个开源的分布式的版本控制系统,是由Linus 为了管理Linux内核开发而开发的一个开源的版本控制软件。相比SVN,它采用分布式版本库方式。 二:工作区,暂存区和版本库 左侧为工作区,编辑文件所在的目录,右侧为版本库,其中index区域是暂存区,标记为"master"代表mast 阅读全文
摘要:
C++11引入了thread类,大大降低了多线程使用的复杂度,原先使用多线程只能用系统的API,无法解决跨平台问题,一套代码平台移植,对应多线程代码也必须要修改。现在在C++11中只需使用语言层面的thread可以解决这个问题。 阅读全文
摘要:
一:概述 项目中经常用遇到多线程操作共享数据问题,常用的处理方式是对共享数据进行加锁,如果多线程操作共享变量也同样采用这种方式。 为什么要对共享变量加锁或使用原子操作?如两个线程操作同一变量过程中,一个线程执行过程中可能被内核临时挂起,这就是线程切换,当内核再次切换到该线程时,之前的数据可能已被修改 阅读全文
摘要:
一:async std::async:用于创建异步任务,可以代替创建线程,函数原型:async(std::launch::async | std::launch::deferred, f, args...),第一个参数是创建策略std::launch::async:立即创建线程std::launch 阅读全文
摘要:
一.概述 单例模式就是一个类只能被实例化一次 ,也就是只能有一个实例化的对象的类。减少每次都new对象的开销,节省系统资源,同时也保证了访问对象的唯一实例。常用于如下场景:1.频繁实例化然后销毁的对象。2... 阅读全文
摘要:
libevent实现Tcp Server基于bufferevent实现/********************************************************Copyright (C),... 阅读全文
摘要:
CConfig.h#ifndef _CCONFIG_H#define _CCONFIG_H#include #include #include #include using namespace std;class... 阅读全文
摘要:
一:获取libeventgithub地址:https://github.com/libevent/libevent/releases下载2.1.8稳定版二:编译libevent我是用的visual studio ... 阅读全文
摘要:
一:linux重定向0,1,2分别表示标准输入,标准输出和标准错误输出,一般情况下默认是标准输出a. 1>log:标准输出重定向的log文件b. 2>log:错误输出重定向到log文件c. 2>&1: 错误输出重... 阅读全文
摘要:
一:安装logstash1.拉取镜像docker pull logstash:5.6.112.创建目录mkdir /docker/logstashcd /docker/logstash3.创建配置文件touch ... 阅读全文
摘要:
一:介绍 map是STL的关联式容器,以key-value的形式存储,以红黑树(平衡二叉查找树)作为底层数据结构,对数据有自动排序的功能。命名空间为std,所属头文件<map> 二:常用操作 容量:a.map中实际数据的数据:map.size()b.map中最大数据的数量:map.max_size( 阅读全文
摘要:
一:介绍 set是STL的关联式容器,以红黑树(Red-Black Tree)作为底层数据结构。自动去重,保证每个元素唯一,并对数据进行排序。 命名空间为std,所属头文件为<set> 二:常用操作 容量:a.set中实际数据的数据:set.size()b.set中最大数据的数量:set.max_s 阅读全文
摘要:
一:介绍 list底层为链表,非连续内存,不支持[]操作符,支持任意位置的插入操作。 命名空间为std,所属头文件为<list> 二:常用操作 容量:a.元素个数:list.size()b.判断是否为空:list.empty() 修改:a.尾部添加元素:list.push_buack()b.首部添加 阅读全文
摘要:
一:介绍 信号量也是系统核心对象,它允许多个线程同一时刻访问同一资源,但需限制同一时刻访问资源的最大线程数目。 信号量遵循规则:1.当前资源计数大于0,信号量有效。2.当前资源计数等于0,信号量无效。3.系统不允许当前资源数量为负。4.当前资源数量不能大于最大资源数量。 二:函数说明 创建信号量: 阅读全文
摘要:
一:介绍 vector是C++标准模板库,是一个容器,底层是数组,为连续内存。命名空间为std,所属头文件为<vector> 注意:不是<vector.h>vector存储数据时,会分配一个存储空间,如果继续存储,该分配的空间已满,就会分配一块更大的内存,把原来的数据复制过来,继续存储,这些性能也会 阅读全文
摘要:
一:介绍 事件Event实际上是个内核对象,事件分两种状态:激发状态和未激发状态。分两种类型:手动处置事件和自动处置事件。手动处置事件被设置为激发状态后,会唤醒所有等待的线程,一直保持为激发状态,直到把它设置为未激发状态。自动处置事件被设置为激发状态后,会唤醒一个等待中的线程,然后会自动设置成未激发 阅读全文
摘要:
一:介绍 互斥对象是系统内核维护的一种数据结构,保证了对象对单个线程的访问权。 二:函数说明 创建互斥对象: HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全属性结构指针,可为NULL,表示默认安全性 BOOL bInit 阅读全文
摘要:
一:介绍 临界区指的是一个访问共用资源(例:全局变量)的程序片段,该共用资源无法同时被多个线程访问的特性。有多个线程试图同时访问临界区,那么在有一个线程进入后其他所有试图访问此临界区的线程将被挂起,并... 阅读全文
摘要:
临界区指的是一个访问共用资源(例:全局变量)的程序片段,该共用资源无法同时被多个线程访问的特性 阅读全文