- 博客(125)
- 收藏
- 关注
原创 CentOS7 编译升级GCC至9.3.0
FROM centos:7.9.2009 RUN yum -y update &&\ yum -y install gcc gcc-c++ &&\ yum -y install wget &&\ yum -y install lbzip2 &&\ yum -y install gcc automake autoconf libtool make &&\ ...
2021-08-26 13:09:06
974
原创 C++关键字学习 -- volatile
一、volatile 介绍 参看:volatile详解 参看:C Language Keywords Indicates that a variable can be changed by a background routine. Keywordvolatileis an extreme opposite ofconst.It indicates that a variable may be changed in a way which is absolutely unpredicta...
2021-02-18 18:00:32
1495
转载 boost::shared_ptr 分析与实现
boost::shared_ptr 分析与实现、 boost::shared_ptr 分析与实现 /************************************************************ * file: shared_ptr * * desc: 本文将对boost::shared_ptr作一详细的介绍。 本文介绍的不是用法,而是 * 智能指针的原理,结构以及boost对其的实现. 最后还会给出一个简化了的实现。 * * author: whiteear * date..
2021-02-18 15:42:57
1136
原创 模板函数参数完美转发
右值引用 首先我们先来看一下传统的左值引用。 <span style="color:#000000"><code>int main() { int a = 10; int &b = a; // 定义一个左值引用变量 b = 20; // 通过左值引用修改引用内存的值 return 0; } </code></span> 反汇编如下: <span style="color:#000000"><code>int
2021-02-10 14:23:47
725
原创 并发IO模型 Proactor
Proactor: Proactor将所有I/O操作都交给主线程和内核来处理,工作线程仅仅负责业务逻辑。使用异步I/O模型(aio_read和aio_write)来实现Proactor模式的工作流程是: 1、主线程调用aio_read向内核注册socket上的读完成事件,并告诉内核用户缓冲区的位置,以及读操作完成时如何通知应用程序(可以用信号) 主线程继续处理其他逻辑 2、当socket上的读数据被读入用户缓冲区后,内核向应用进程发送一个信号,已通知应用程序数据已经可用 3、应用进程预.
2021-02-04 15:14:03
415
原创 C++编译模式
一、C++编译模式通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的,在编 译(compile)时不需要与其他文件互通,只需要在编译成目标文件后再与其他的目标文件做一次链接(link
2021-01-25 17:27:13
659
2
原创 关于c++的头文件依赖
关于c++的头文件依赖 正在看google c++编程规范,里面对头文件依赖是这么说的: 使用前置声明(forward declarations)尽量减少.h文件中#include的数量。 当一个头文件被包含的同时也引入了一项新的依赖(dependency),只要该头文件被修改,代码就要重新编译。如果你的头文件包含了其他头文件,这些头文件的任何改变也将导致那些包含了你的头文件的代码重新编译。因此,我们宁可尽量少包含头文件,尤其是那些包含在其他头文件中的。 使用前置声明可以显著减少需要包含的头文件数
2021-01-07 16:56:00
700
1
原创 C++11多线程 detach和join的区别
多线程编程是必须要掌握的,以前多线程基本是靠系统API或者第三方库完成的,比如windows的API函数CreateThread,linux创建线程函数pthread_create,但是这样编写的代码不可移植,不能跨平台,比如windows的多线程程序拿到linux下是跑不起来的,相反也一样,很不方便,然而C++11语言本身支持多线程,和平台无关,下面就来简单认识多线程 # include<iostream> # include<thread>//C++...
2021-01-06 22:12:10
1278
1
原创 C++ 原子操作 std::atomic<T>
class Test { public: Test() = default; void CThreadFunc() { for (int i = 0; i < 10000; ++i) { //std::lock_guard<std::mutex> lck(Test::m_s_ivalue_mutex); //m_iValue需要加锁才可正常工作 m_iValue++; .
2020-09-05 19:35:39
585
原创 纤程
纤程的操作 首先要注意的一个问题是,实现线程的是Wi n d o w s内核。操作系统清楚地知道线程的情况,并且根据M i c r o s o f t定义的算法对线程进行调度。纤程是以用户方式代码来实现的,内核并不知道纤程,并且它们是根据用户定义的算法来调度的。由于你定义了纤程的调度算法,因此,就内核而言,纤程采用非抢占式调度方式。 需要了解的下一个问题是,单线程可以包含一个或多个纤程。就内核而言,线程是抢占调度的,是正在执行的代码。然而,线程每次执行一个纤程的代码—你决定究竟执行哪个纤程(随着我们讲解
2020-09-05 01:02:33
413
转载 线程池封装及使用
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池 目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短。 传统多线程方案中我们采用的服务器
2020-09-05 00:34:23
672
原创 线程同步之 mutex和条件变量
https://blog.csdn.net/m0_37621078/article/details/89766449
2020-09-03 21:56:38
233
原创 C++ 线程同步 event事件
https://blog.csdn.net/QWERDF10010/article/details/79652280
2020-09-03 14:05:52
232
原创 kafka 学习
Kafka幂等性原理及实现剖析、事务:https://www.cnblogs.com/smartloli/p/11922639.html
2020-08-09 11:31:39
172
原创 内存对齐算法
//(32bit,x86环境,vs2010) struct test { char m1; unsigned int m2; char m3; double m4; char m5; }; 对其执行sizeof(test),得到值为32,并且我们对里面每个变量取sizeof,确实是所属类型的大小,但为什么不是1+4+1+8+1=15呢,我们执行下面代码来计算每个变量之间的地址偏移量: test t; ...
2020-07-21 14:05:45
418
原创 C++类大小详尽讲解
https://blog.csdn.net/longjialin93528/article/details/80160467
2020-07-21 13:08:30
190
原创 hashmap
HashMap原理: https://www.jianshu.com/p/dde9b12343c1 LinkedHashMap(线程安全):原理https://www.jianshu.com/p/8f4f58b4b8ab STL的map和hashmap比较:https://blog.csdn.net/lyq_csdn/article/details/80630872
2020-07-15 23:48:42
177
原创 结构体作为map的键值
这里首先给出容器map的原型: 1 2 3 4 5 6 7 8 template< classKey, classT, classCompare = less<Key>, classAlloc = alloc> classmap{ ... } 可以看到模板参数一共有四个,第...
2020-06-25 14:03:16
1181
原创 设计模式之模板模式
钩子方法源于设计模式中模板方法(Template Method)模式,模板方法模式的概念为:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。其主要分为两大类:模版方法和基本方法,而基本方法又分为:抽象方法(Abstract Method),具体方法(Concrete Method),钩子方法(Hook Method)...
2020-05-08 10:55:00
314
原创 C++ 杂项知识
c++子类和父类成员函数重名 1.子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数。 2.子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name。 3.子类和父类参数不同,函数名相同,有virtual关键字,则不存在多态...
2020-05-08 10:53:23
257
转载 深入理解正则表达式高级教程
http://www.zjmainstay.cn/deep-regexp#%E6%A6%82%E5%BF%B5%E4%B8%89%E8%B4%AA%E5%A9%AA%E6%A8%A1%E5%BC%8F%E4%B8%8E%E9%9D%9E%E8%B4%AA%E5%A9%AA%E6%A8%A1%E5%BC%8F
2020-04-21 14:58:42
199
原创 C++正则表达式(regex_match、regex_search与regex_replace)
前言 1 转义字符 2 regex_match 2.1 基本概念 2.2 匹配结果 2.3 实例 3 regex_search 3.1 基本概念 3.2 实例 4 regex_replace 4.1 基本概念 4.2 扩展 5 匹配忽略大小写 6 帮助网站 1 转义字符 cout << regex_match("123", regex(...
2020-04-17 18:36:58
7556
原创 redis 教程1
redis使用: 设置后台启动 修改 redis.conf 配置文件: daemonize no -->>daemonize yes 启动:./redis-server ./redis.conf 启动客户端:./redis-cli -p 6379 测试是否可用:输入ping 返回pong ...
2020-04-15 22:19:56
147
原创 正则表达式使用
boost: 问题的提出: Boost.Regex作为Boost对正则表达式的实践,是C++开发中常用模式匹配工具。但在这次使用过程中发现,它他对中文的支持并不好。当我们指定/w匹配时,包含“数”或“节”等字的字符串就会出现匹配失败的问题。 解决方案: 思路:把字符都转换成宽字符,然后再匹配。 需要用到以下和宽字符有关的类: 1、wstring: 作为STL中和string相对应的类,...
2020-04-15 15:51:32
693
原创 k8s 搭建efk
#cd /usr/local/install-k8s #mkdir efk添加 Google incubator 仓库 #helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator创建命名空间 #kubectl create namespace efk 部署 Elasticsearch #...
2020-04-05 23:19:57
1359
1
原创 k8s 搭建dashboard
#mkdir dashboard #helm fetch stable/kubernetes-dashboard //从仓库中获取stable/kubernetes-dashboard 提示需要更新仓库 #helm repo update 更新仓库 #helm fetch stable/kubernetes-dashboard //从仓库中获取stable/kubernetes-d...
2020-04-05 17:19:41
319
原创 k8s Helm的使用
https://github.com/helm/helm/blob/master/docs/charts.md 什么是 Helm 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制,很大程度...
2020-04-05 16:14:51
471
原创 k8s 集群安装之创建harbor仓库
在每个节点上/etc/docker/daemon.json文件中添加"insecure-registries":["https://Hub.fanwang.com"] vim /etc/docker/daemon.json "insecure-registries":["https://Hub.fanwang.com"]# 追加到最后面,前一行需要添加逗号 systemctl restart ...
2020-04-05 15:03:35
474
原创 k8s 集群安装教程
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Master 节点$ kubeadm init# 将一个 Node 节点加入到当前集群中$ kubeadm join <Master节点的IP和端口 > 1. 安装要求 在开始之前,部署Kubernetes集群机器需要满...
2020-04-05 12:01:13
280
原创 泛型编程之类型萃取
类型萃取 在编程中我们可能时常会听到类型萃取这个高大上的"学术名词",我们今天来探究一下这个高大上的学术名词 到底是何方神圣,先看看官方的解释类型萃取使用模板技术来萃取类型(包含自定义类型和内置类型)的某些特 性,用以判断该类型是否含有某些特性,从而在泛型算法中来对该类型进行特殊的处理用来提高效率或者其他。 例如:在STL中的destory算法根据函数的参数类型的特性:是否有trivia...
2020-03-30 17:16:32
307
原创 虚拟机网络模式
Vmware提供了三种外部主机与内部虚拟机的匹配模式:Nat,仅主机,桥接。一般默认是Nat,这也是最理想的一种模式。 Nat在外部主机上表现为vmnet8虚拟网卡 仅主机表现为vmnet1虚拟网卡 桥接则和本身本地连接或者wireless一致,这取决于vmware的配置。 一、桥接 所谓的桥连接,只需要配置一个和真是主机的ip同一个网段的ip即可,假如我们windows机...
2020-03-29 15:43:05
177
原创 kubernetes 学习日志 - pod生命周期
kubectl向api server发送指令,api server通过读取etcd内的配置信息调度kubelet,kubelet通过CRI执行容器环境初始化,在初始化的时候会启动一个pause基础容器,接下来执行多个initC的初始化(线性初始化),若InitC正常退出,则进入MainC。 readness:判断容器内的进程是否可被外网访问,可访问,readness检测完成则pod的状态为:...
2020-02-19 09:15:08
541
原创 kubernetes 学习日志 - 资源清单
1、k8s中的资源概念 1.1 什么是资源 1.2 集群资源分类 名称空间级别: kubeadm安装的k8s集群时,默认将k8s组件放到kube-system命名空间下去运行,通过kubectl getpod的时候,可能无法获取到pod的一些信息,因为getpod默认获取的是 -n default 集群级别:role,在任意一个名称空间下定义,在集群中的其...
2020-02-18 21:02:50
310
原创 kubernetes 学习日志 - pod介绍
1、pod概念 1.1 分类 自助式pod(一旦死亡无法恢复) 控制器管理的pod 1.2 pod介绍 1.2.1 container pause:基础容器,同pod一同启动 其他容器: 共用pause的网络栈和存储卷 ...
2020-02-16 21:21:51
287
原创 kubernetes 学习日志 - 介绍说明
资源管理器对比: MESOS,Docker Swarm,kubernetes borg架构介绍: 由BorgMaster和BorgLet组成 BorgMaster:负责请求的分发,存在多个副本(奇数) BorgLet:监听paxos中的请求,并处理请求 scheduler:调度器,将请求写入 paxos中 K8S架构图: kubectl:命令管理工具 schedul...
2020-02-16 19:43:07
240
原创 设计模式原则
目录 一、开闭原则 1、定义 2、扩展定义 3、实现方法 二、里式替换原则 1、定义 2、实现方法 三、依赖倒置原则 1、定义 2、实现 四、单一职责原则 1、定义 2、实现 五、接口隔离原则 1、定义 2、实现 2.1优点 2.2实现方法 六、迪米特法则 1、定义 2、实现 七、合成复用原则 1、定义 2、实现 一、开闭原则 1、定义 ...
2020-02-05 12:41:38
726
原创 设计模式之(结构模式)组合模式
在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。 组合模式的定义与特点 组合(Composite)模式的定义:有时又叫作部分-整体...
2019-12-19 13:14:52
191
原创 设计模式之观察者模式
观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在主题对象的状态发生变化时,会通知所有的观察者。 观察者模式角色如下: 抽象主题(Subject)角色:抽象主题角色提供维护一个观察者对象集合的操作方法,对集合的增加、删除等。 具体主题(ConcreteSubject)角色:将有关状态存入具体的观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发通知。具...
2019-12-10 00:23:14
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅