C++ 字符串
std::string 的内存布局 std::string 通常用 SSO(Small String Optimization):短字符串直接存在对象内部,长字符串才堆分配。 观察分配阈值: 123456789101112131415#include <cstdlib>#include <iostream>#include <string>void* op...
C++ lambda and bind
基本表达式 1[capture](parameters) -> return-type {body} 当没有返回类型时, 可以省略 -> return-type 变量捕获与lambda闭包实现 [] 不截取任何变量 [&] 截取外部作用域中所有变量,并作为引用在函数体中使用 [=] 截取外部作用域中所有变量,并拷贝一份在函数体中使用 [=, &...
C++ 迭代器与 traits
迭代器是 STL 的"胶水"——算法不认容器,只认迭代器;容器只要暴露迭代器,就能对接整套算法库。这套设计的关键,是给迭代器分类别(category),让算法按能力分派到最优实现。traits 则是"编译期问迭代器属性"的接口,是泛型代码的基础设施。C++20 用 concepts 重写了这套体系,引入了 sentinel 和 contiguous 迭...
C++ 编译期计算
"编译期计算"是 C++ 区别于大多数语言的核心能力:把能在编译期算出来的东西全部前移到编译期——更早发现错误、运行期零开销、生成更紧凑的代码。这条路从 C++98 的模板元编程一路演进到 C++26 的静态反射,工具越来越多也越来越人道。 这篇把整套编译期计算的版图画出来:模板元编程、if constexpr、fold 表达式、type traits、constexpr...
C++ 异常与错误处理
C++ 有两套并行的错误处理体系:异常(exception)处理"不该发生但发生了"的意外,错误即值(std::optional / std::expected)处理"完全可能发生"的预期失败。很多人混用它们,结果要么用异常做流程控制、要么对所有失败都返回 expected 把调用方淹没在 if (!result) 里。这篇把两套机制的边界、异常的生命...
C++ Concurrency
cpp11之后,cpp本身对并发的支持大大增强,这里记录一下 std::thread class cpp的thread类型,创建即运行,不像java那样需要start,thread表示一个系统资源,一个系统线程 构造函数 function construct constructor 1 thread() noexcept; constructor 2 thread(thre...
Java Coding Guidelines - The Yellow Mountain Edtion
《Java 开发手册》是 Java 社区爱好者的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,整理成册后,众多社区开发者踊跃参与打磨完善,系统化地整理成册,当前的最新版本是黄山版。 现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:五花八门的错误码会人为地增加排查问题的难度;数据库的表结...
一大坨知识-12-Netty
核心组件 整体结构 1. Core 核心层 Core 核心层是 Netty 最精华的内容,它提供了底层网络通信的通用抽象和实现,包括事件模型、通用API、支持零拷贝的 ByteBuf 等。 2. Protocol Support 协议支持层 协议支持层基本上覆盖了主流协议的编解码实现,如 HTTP、Protobuf、WebSocket、二进制等主流协议,此外 Netty 还支持...
一大坨知识-11-Docker&K8S
chroot 是在 Unix 和 Linux 系统的一个操作,针对正在运作的软件行程和它的子进程,改变它外显的根目录。一个运行在这个环境下,经由 chroot 设置根目录的程序,它不能够对这个指定根目录之外的文件进行访问动作,不能读取,也不能更改它的内容。 虚拟化技术 VMware 、VirtualBox、KVM 虚拟化技术就是在操作系统上多加了一个虚拟化层(Hypervisor),可以...
一大坨知识-10-ES
Elasticsearch可以实现 秒级 的搜索,cluster 是一种分布式的部署,极易扩展这样很容易使它处理PB级的数据库容量。最重要的是Elasticsearch是它搜索的结果可以按照分数进行排序,它能提供我们最相关的搜索结果(relevance) 概述 特点 安装方便 :没有其他依赖,下载后安装非常方便;只用修改几个参数就可以搭建起来一个集群 JSON :输入/输出格式为...
一大坨知识-9-分布式
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。 发展历程 入口级负载均衡 网关负载均衡 客户端负载均衡 单应用架构 应用服务和数据服务分离 应用服务集群 应用服务中心化SAAS 数据库主备读写分离 全文搜索引擎加快数据统计 缓存集群缓解数据库读压力 分布式消息中间件缓解数据库写压力 数据库水平拆分适应微服务 数...
一大坨知识-SpringCloud-8
Why SpringCloud Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等,都可以用 spring boot 的开发风格做到一键启动和部署。 SpringCloud(微服务解决方案) Dubbo(分布式服务治理框...
一大坨知识-7-Spring
设计思想&Beans IOC 控制反转 IoC(Inverse of Control:控制反转) 是⼀种设计思想,就是将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。 IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value, Map中存放的是各种对象。将对...
一大坨知识-6-Kafka
Why kafka 消息队列的作用: 异步、削峰填谷、解耦 中小型公司 ,技术实力较为一般,技术挑战不是特别高,用 RabbitMQ (开源、社区活跃)是不错的选择; 大型公司,基础架构研发实力较强,用 RocketMQ (Java二次开发) 是很好的选择。 如果是 大数据领域 的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界...
一大坨知识-5-Redis
WhyRedis 速度快,完全基于内存,使用C语言实现,网络层使用epoll解决高并发问题,单线程模型避免了不必要的上下文切换及竞争条件; Name GuavaCache Tair EVCache Aerospike 类别 本地JVM缓存 分布式缓存 分布式缓存 分布式nosql数据库 应用 本地缓存 淘宝 Netflix、AWS 广告 性能 非常高 较高 很高 较高 ...
一大坨知识-4-MySQL篇
WhyMysql? NoSQL数据库四大家族 列存储 Hbase K-V存储 Redis 图像存储 Neo4j 文档存储 MongoDB 海量Aerospike Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL 数据库 。T级别大数据高并发的结构化 数据存储, 采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD) 上,读写操作达...
一大坨知识-3-多线程篇
线程调度 线程状态 线程是cpu任务调度的最小执行单位,每个线程拥有自己独立的程序计数器、虚拟机栈、本地方法栈 线程状态:创建、就绪、运行、阻塞、死亡 线程状态切换 方法 作用 区别 start 启动线程,由虚拟机自动调度执行run()方法 线程处于就绪状态 run 线程逻辑代码块处理,JVM调度执行 线程处于运行状态 sleep 让当前正在执行的线程休眠(暂停执...
一大坨知识-2-JVM篇
JVM内存划分 JVM运行时数据区域 堆、方法区(元空间)、虚拟机栈、本地方法栈、程序计数器 Heap(堆) 对象的实例以及数组的内存都在堆上进行分配,堆是线程共享的区域,用来存放对象实例,也是垃圾回收(GC)的主要区域。开启逃逸分析后,某些未逃逸的对象可以通过标量替换的方式在栈中分配。 堆细分: 新生代、老年代 新生代分为:Eden区、Survivor1区、Survivor2区 方法...
一大坨知识-1-基础篇
不错的帖子, COPY一下 一大坨知识全都来自于此,原来帖子的名字如下: 这些年,背过的面试题 今天看到一篇文章,感叹失败的原因可能有很多条,但成功的道路只一条,来之前准备了半年,上篇俗称八股文,下篇是一些经验总结供大家参考。 网络基础 TCP三次握手 三次握手过程: 客户端——发送带有SYN标志的数据包——服务端 一次握手 Client进入syn_sent状态 服务端——发送带有SY...
C++ Coroutines
C++20 引入的协程(Coroutines)是一种可暂停、可恢复的函数。普通函数从入口跑到结尾一次性完成;协程可以在中途挂起(suspend),把控制权交还调用者,之后从挂起点继续执行。 类比:普通函数是一段单次播放的录音;协程是可以暂停、续播、还能边播边产值的播放器。 核心价值:用同步的线性代码风格写出异步逻辑,避免回调地狱与状态机手写。但 C++20 只提供“协程机制”(编译器变换...









