cpp的lambda和bind
基本表达式[capture](parameters) -> return-type {body} 当没有返回类型时, 可以省略 -> return-type 变量捕获与lambda闭包实现 [] 不截取任何变 [&] 截取外部作用域中所有变量,并作为引用在函数体中使用 [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用 [=, &foo] 截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用 [bar] 截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量 [x, &y] x按值传递,y按引用传递 [this] 截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。 lambda 的底层实现lambda 其实是c++的语法糖,是通过c++编译器生成class来实现的,看一个简单的例子。 #include <functional> using namespace std; int main(int argc, char* argv[]) { i...
cpp中的并发
cpp11之后,cpp本身对并发的支持大大增强,这里记录一下 1 std::thread classcpp的thread类型,创建即运行,不像java那样需要start,thread表示一个系统资源,一个系统线程 构造函数 function construct constructor 1 c++thread() noexcept; constructor 2 thread( thread&& other ) noexcept; constructor 3 template<class F, class... Args>explicit thread(F&& f, Args&&... args); copy constructor thread(const thread&) = delete; assign copy operator thread& operator=(const thread&) = delete; assign move operator thre...
Java开发手册_黄山版
《Java 开发手册》是 Java 社区爱好者的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,整理成册后,众多社区开发者踊跃参与打磨完善,系统化地整理成册,当前的最新版本是黄山版。 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码会人为地增加排查问题的难度;数据库的表结构和索引设计缺陷带来的系统架构缺陷或性能风险;工程结构混乱导致后续项目维护艰难;没有鉴权的漏洞代码容易被黑客攻击等。所以本手册以 Java 开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程结构、设计规约七个维度,再根据内容特征,细分成若干二级子目录。此外,依据约束力强弱及故障敏感性,规约依次分为【强制】、【推荐】、【参考】三大类。在延伸的信息中,“说明”对规约做了适当扩展和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及真实的错误案例。 手册的愿景是码出高效,码出...
一大坨知识-12-Netty
1.核心组件1. 整体结构1. Core 核心层 Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。2. Protocol Support 协议支持层 协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持自定义应用层协议。Netty 丰富的协议支持降低了用户的开发成本,基于 Netty 我们可以快速开发 HTTP、WebSocket 等服务。3. Transport Service 传输服务层 传输服务层提供了网络传输能力的定义和实现方法。它支持 Socket、HTTP 隧道、虚拟机管道等传输方式。Netty 对 TCP、UDP 等数据传输做了抽象和封装,用户可以更聚焦在业务逻辑实现上,而不必关系底层数据传输的细节。 2. 逻辑架构 1. 网络通信层网络通信层的职责是执行网络 I/O 的操作。它支持多种网络协议和 I/O模型的连接操作。当网络数据读取到内核缓冲区后,会...
一大坨知识-11-Docker&K8S
chroot 是在 Unix 和 Linux 系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。 虚拟化技术_VMware 、VirtualBox、KVM 虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以将物理机的CPU、内存、硬盘、网络等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,构建虚拟的应用程序执行环境。这就是我们通常说的虚拟机。 虚拟机的优点: 提升IT效率、降低运维成本 更快地部署工作负责 提高服务器可用性 虚拟机的缺点: 占用资源较多、性能较差 扩展、迁移能力较差 1. Why Docker场景 开发人员在本地编写代码,并使用Docker容器与其他同事共享劳动成果。 使用Docker将应用程序推送到测试环境中,并执行自动和手动测试。 开发人员可以在开发环境中对其进行修复,然后将其重新部署到测试环境中以进行测试和验证。 测试完成后,将修补程序推送给生产环境就像将更...
一大坨知识-10-ES
Elasticsearch可以实现 秒级 的搜索,cluster 是一种分布式的部署,极易扩展这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 1. 概述特点 安装方便 :没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群 JSON :输入/输出格式为 JSON,意味着不需要定义 Schema,快捷方便 RESTful :基本所有操作 ( 索引、查询、甚至是配置 ) 都可以通过 HTTP 接口进行 分布式 :节点对外表现对等(每个节点都可以用来做入口) 加入节点自动负载均衡 多租户 :可根据不同的用途分索引,可以同时操作多个索引 支持超大数据 : 可以扩展到 PB 级的结构化和非结构化数据 海量数据的近实时处理 功能 分布式的搜索引擎 分布式:Elasticsearch自动将海量数据分散到多台服务器上去存储和检索 全文检索 提供模糊搜索等自动度很高的查询方式,并进行相关性排名,高亮等功能 数据分析引擎(分组聚合)...
一大坨知识-9-分布式
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 1. 发展历程 入口级负载均衡 网关负载均衡 客户端负载均衡 单应用架构 应用服务和数据服务分离 应用服务集群 应用服务中心化SAAS 数据库主备读写分离 全文搜索引擎加快数据统计 缓存集群缓解数据库读压力 分布式消息中间件缓解数据库写压力 数据库水平拆分适应微服务 数据库垂直拆分解决慢查询 划分上下文拆分微服务 服务注册发现(Eureka、Nacos) 配置动态更新(Config、Apollo) 业务灰度发布(Gateway、Feign) 统一安全认证(Gateway、Auth) 服务降级限流(Hystrix、Sentinel) 接口检查监控(Actuator、Prometheus) 服务全链路追踪(Sleuth、Zipkin) 2. CAP 一致性 (2PC、3PC、Paxos、Raft) 强一致性: 数据库一致性 ,牺牲了性能 ACID :原子性、一致性、隔离性、持久性 弱一致性: 数据库和缓存 , 延迟双删、重试 单调读一致性: 缓存一...
一大坨知识-SpringCloud-8
Why SpringCloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等,都可以用 spring boot 的开发风格做到一键启动和部署。 SpringCloud(微服务解决方案) Dubbo(分布式服务治理框架) Rest API (轻量、灵活、swagger) RPC远程调用(高效、耦合) Eureka、Nacos Zookeeper 使用方便 性能好 即将推出SpringCloud2.0 断档5年后17年重启 SpringBoot是Spring推出用于解决传统框架配置文件冗余,装配组件繁杂的基于Maven的解决方案, 旨在快速搭建单个微服务,SpringCloud是依赖于SpringBoot的,而SpringBoot并不是依赖与SpringCloud,甚至还可以和Dubbo进行优秀的整合开发 MartinFlower 提出的微服务之间是通过RestFulApi进行通信,...
一大坨知识-7-Spring
1. 设计思想&Beans1、IOC 控制反转IoC(Inverse of Control:控制反转) 是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value, Map中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 IoC容器就像是⼀个⼯⼚⼀样,当我们需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。 DI 依赖注入 DI:(Dependancy Injection:依赖注入) 站在容器的角度,将对象创建依赖的其他对象注入到对象中。 2、AOP 动态代理AOP (Aspect-Oriented Programming:⾯向切⾯编程) 能够将那些与业务⽆关,却为业务模块所共同调⽤的逻辑或责任(例如事...
一大坨知识-6-Kafka
1. Why kafka消息队列的作用: 异步、削峰填谷、解耦 中小型公司 ,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ (开源、社区活跃)是不错的选择; 大型公司,基础架构研发实力较强,用 RocketMQ (Java二次开发) 是很好的选择。 如果是 大数据领域 的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范。 RabbitMQ RabbitMQ开始是用在电信业务的可靠通信的,也是少有的几款 支持AMQP 协议的产品之一。 优点: 轻量级,快速,部署使用方便 支持灵活的路由配置。RabbitMQ中,在生产者和队列之间有一个交换器模块。根据配置的路由规则,生产者发送的消息可以发送到不同的队列中。路由规则很灵活,还可以自己实现。 RabbitMQ的客户端支持大多数的编程语言,支持 AMQP 协议。 缺点: 如果有大量消息堆积在队列中,性能会急剧下降 每秒处理几万到几十万的消息。如果应用要求高的性能,不要选择RabbitMQ。 RabbitMQ是Erlang开发的,功...