02 2022 档案
摘要:std::variant C++17增加stdvariant实现类似union的功能,但却比union更高级,variant主要是为了提供更安全的union。举个例子union里面不能有string这种类型,但stdvariant却可以,还可以支持更多复杂类型,如map等。 std::variant
阅读全文
摘要:C++11 thread_local c++11引入thread_local关键字,用thread_local修饰的变量具有thread周期,从属于访问它的线程,线程第一次访问它时创建它且只创建一次(与被static的修饰的变量是一样的,多实例共享一份),线程结束时系统释放该变量。简单点说就是变成在
阅读全文
摘要:1.noexcept 的修饰和操作 C++ 相比于 C 的一大优势就在于 C++ 本身就定义了一套完整的异常处理机制。 然而在 C11 之前,几乎没有人去使用在函数名后书写异常声明表达式, 从 C11 开始,这套机制被弃用,所以我们不去讨论也不去介绍以前这套机制是如何工作如何使用, 你更不应该主动去
阅读全文
摘要:并行与并发 1 并行基础 std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含 <thread> 头文件, 它提供了很多基本的线程操作,例如 get_id() 来获取所创建线程的线程 ID,使用 join() 来加入一个线程等等,例如: #include <
阅读全文
摘要:正则表达式 1.正则表达式简介 正则表达式不是 C++ 语言的一部分,这里仅做简单的介绍。 正则表达式描述了一种字符串匹配的模式。一般使用正则表达式主要是实现下面三个需求: 检查一个串是否包含某种形式的子串; 将匹配的子串替换; 从某个串中取出符合条件的子串。 正则表达式是由普通字符(例如 a 到
阅读全文
摘要:智能指针与内存管理 1 .RAII 与引用计数 引用计数这种计数是为了防止内存泄露而产生的。 基本想法是对于动态分配的对象,进行引用计数,每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次, 每删除一次引用,引用计数就会减一,当一个对象的引用计数减为零时,就自动删除指向的堆内存。 在
阅读全文
摘要:容器 1 .线性容器 std::array 看到这个容器的时候肯定会出现这样的问题: 为什么要引入 std::array 而不是直接使用 std::vector? 已经有了传统数组,为什么要用 std::array? 先回答第一个问题,与 std::vector 不同,std::array 对象的大
阅读全文
摘要:面向对象 委托构造 C++11 引入了委托构造的概念,这使得构造函数可以在同一个类中一个构造函数调用另一个构造函数,从而达到简化代码的目的: #include <iostream> class Base { public: int value1; int value2; Base() { value
阅读全文
摘要:模板 C++ 的模板一直是这门语言的一种特殊的艺术,模板甚至可以独立作为一门新的语言来进行使用。模板的哲学在于将一切能够在编译期处理的问题丢到编译期进行处理,仅在运行时处理那些最核心的动态服务,进而大幅优化运行期的性能。因此模板也被很多人视作 C++ 的黑魔法之一。 外部模板 传统 C++ 中,模板
阅读全文
摘要:if constexpr 正如本章开头出,我们知道了 C11 引入了 constexpr 关键字,它将表达式或函数编译为常量结果。一个很自然的想法是,如果我们把这一特性引入到条件判断中去,让代码在编译时就完成分支判断,岂不是能让程序效率更高?C17 将 constexpr 这个关键字引入到 if 语
阅读全文
摘要:C++ 本身已经具备了常量表达式的概念,比如 1+2, 3*4 这种表达式总是会产生相同的结果并且没有任何副作用。如果编译器能够在编译时就把这些表达式直接优化并植入到程序运行时,将能增加程序的性能。一个非常明显的例子就是在数组的定义阶段: #include <iostream> #define LE
阅读全文
摘要:在传统 C 和 C++ 中,参数的类型都必须明确定义,这其实对我们快速进行编码没有任何帮助,尤其是当我们面对一大堆复杂的模板类型时,必须明确的指出变量的类型才能进行后续的编码,这不仅拖慢我们的开发效率,也让代码变得又臭又长。 C11 引入了 auto 和 decltype 这两个关键字实现了类型推导
阅读全文
摘要:初始化列表 初始化是一个非常重要的语言特性,最常见的就是在对象进行初始化时进行使用。在传统 C++ 中,不同的对象有着不同的初始化方法,例如普通数组、 POD (Plain Old Data,即没有构造、析构和虚函数的类或结构体)类型都可以使用 {} 进行初始化,也就是我们所说的初始化列表。而对于类
阅读全文
摘要:1 什么是闭包 闭包有很多种定义,一种说法是,闭包是带有上下文的函数。说白了,就是有状态的函数。更直接一些,不就是个类吗?换了个名字而已。 一个函数,带上了一个状态,就变成了闭包了。那什么叫 “带上状态” 呢? 意思是这个闭包有属于自己的变量,这些个变量的值是创建闭包的时候设置的,并在调用闭
阅读全文
摘要:1.左值、右值的纯右值、将亡值、右值 左值 (lvalue, left value),顾名思义就是赋值符号左边的值。准确来说,左值是表达式(不一定是赋值表达式)后依然存在的持久对象。 右值 (rvalue, right value),右边的值,是指表达式结束后就不再存在的临时对象。 而 C+
阅读全文
摘要:前提安装和启动好zookeeper,hadoop (1) yarn-site.xml 在原来的yarn-site.xml上,加上 <property> <name>yarn.resourcemanager.am.max-attempts</name> <value>4</value> <descri
阅读全文
摘要:集群环境规划 将整个 ha 搭建完成后,集群将形成以下模样 hadoop101 hadoop102 hadoop103 NameNode NameNode NameNode JournalNode JournalNode JournalNode DataNode DataNode DataNode
阅读全文
摘要:在root权限下 1)创建user1用户,并修改user1用户的密码 #创建用户 [root@hadoop101 ~]# useradd user1 #创建密码 [root@hadoop101 ~]# passwd user1 2)配置user1用户具有root权限,方便后期加sudo执行root权
阅读全文
摘要:1 索引操作 1) 创建索引 对比关系型数据库,创建索引就等同于创建数据库 在HTTP工具中,向 ES 服务器发 PUT 请求 : http://127.0.0.1:9200/shopping { "acknowledged"【响应结果】 : true, # true 操作成功 "shards_ac
阅读全文
摘要:1 相关概念 1.1 单机 & 集群 单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。 除了负载能力,单点服务器也存在其他问题: 单台机器存储容量有限 单服务器容易出现单
阅读全文
摘要:ElasticSearch 官网 https://www.elastic.co/cn/ 中文社区 https://elasticsearch.cn/ 1.1 什么是 ElasticSearch ? ElasticSearch(弹性搜索):是一款开源的分布式、 RESTful 风格的搜索和数据分析引擎
阅读全文
摘要:Beego 本文主要是对官方文档搬运 中文新版文档网站 https://beego.gocn.vip/ 快速开始 首先确保自己已经安装了 GO,版本在 1.16 之上,同时设置了 GOPATH 环境变量,并且将 GOPATH/bin 加入到了环境变量。 我们建议你直接使用最新的稳定版本,因为我们会尽
阅读全文
摘要:GORM 写这博客时,gorm最新版本是v1.22.5。实际使用时,文档以官方文档为准。本文主要是对官方文档的搬运。 官方文档 https://gorm.io/zh_CN/docs/index.html 连接到数据库 GORM 官方支持的数据库类型有: MySQL, PostgreSQL, SQli
阅读全文
摘要:worker pool(goroutine池) 在工作中我们通常会使用可以指定启动的goroutine数量–worker pool模式,控制goroutine的数量,防止goroutine泄漏和暴涨。 一个简易的work pool示例代码如下: func worker(id int, jobs <-
阅读全文