Clay 的技术空间

用进废退 | 艺不压身

大纲

前言

本文将介绍 CMake 的常用语法,包括查找源文件、指定输出目录、设置编译参数、链接第三方库等。

查找文件

查找源文件

1
2
3
4
5
6
7
8
# 查找 src 目录下的所有源文件,并保存到 SOURCE_FILES 变量
aux_source_directory(src SOURCE_FILES)

# 查找 src 目录下所有以 .cpp 开头的文件,并保存到 SOURCE_FILES 变量
file(GLOB SOURCE_FILES "src/*.cpp")

# 递归查找 src 目录下所有以 .cpp 开头的文件,并保存到 SOURCE_FILES 变量
file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")
阅读全文 »

大纲

前言

本文将介绍 CMake 是什么,并使用 CMake 编译第一个 C/C++ 项目。

主流的构建工具

构建工具主要用途适用平台特点常见使用场景
Make 经典构建系统 Unix/Linux/macOS,Windows(MinGW / Cygwin)GNU 工具链标配,依赖 MakefileLinux 系统编译、跨平台项目
CMake 跨平台构建配置生成器跨平台不直接编译,生成 Makefile / Ninja / VS 工程跨平台 C/C++ 项目管理
Ninja 高性能并行构建跨平台构建速度快,文件依赖解析简单 CMake、Chromium、LLVM 等大型项目
NMake 命令行 Make 工具(微软版)Windows 随 MSVC 提供,适合命令行构建简单项目 MSVC 环境下的轻量构建
MSBuild 编译和管理 Visual Studio 项目(.sln/.vcxprojWindows 与 VS 深度集成,支持 MSVC 编译器 Visual Studio 传统项目构建
Meson 现代化构建系统跨平台默认用 Ninja 构建,语法简单 GNOME、GStreamer 等项目
BazelGoogle 出品构建系统跨平台支持大型代码库、分布式构建 TensorFlow、Google 内部项目
SCons 基于 Python 实现的构建系统跨平台配置用 Python 脚本编写,依赖少嵌入式或定制化构建流程

CMake 基本概念

什么是 CMake

CMake 是用于构建、测试和软件打包的开源跨平台工具。

为什么要学习 CMake

  • 企业项目:不管是构建 Linux 程序还是自动化构建 VS 程序,业内大量公司都在使用 CMake。
  • 开源项目:QT、OpenCV、GoogleTest、KDE、OGRE、Android NDK、鸿蒙 ETS NDK 等知名开源项目都使用了 CMake。
  • 职业发展:CMake 适用于跨平台自动化构建和部署、持续集成、测试驱动开发、自动化单元测试等场景。
阅读全文 »

大纲

概述

高可用架构方案分类

高可用方案保证数据强一致性使用说明描述
主从复制支持单主只适用于对可用性和数据一致性要求较低的业务场景。
MMM支持单主基本淘汰了,在一致性和高并发稳定性等方面有些问题。
MHA支持单主有少数开发者还在用,但也有些问题,也是趋于淘汰的 MySQL 主从高可用方案。
MGR支持单主 / 多主基于 MySQL 官方从 5.7.17 版本开始引入的组复制技术。
MySQL Cluster支持多主 MySQL 官方提供的一种分布式数据库解决方案,只支持 NDB 引擎。
Galera Cluster支持多主引领时代的主从复制高可用技术。
Galera Cluster for MySQL支持多主 MySQL 对 Galera Cluster 的实现。
MariaDB Galera Cluster (MGC)支持多主 MariaDB 对 Galera Cluster 的实现。
Percona XtraDB Cluster (PXC)支持多主 Percona 对 Galera Cluster 的实现,目前业界使用 PXC 的会多一些。
MySQL InnoDB Cluster支持单主 / 多主 MySQL 官方推出的一套完整高可用性解决方案。
阅读全文 »

大纲

前言

在开发过程中经常会遇到这样一个问题,每天或者每月必须定时去执行一条 SQL 语句,下面这篇文章主要给大家介绍如何使用 MySQL 自带的事件调度器定时执行 SQL 语句。

启用事件调度器

查看事件调度器的运行状态

1
show variables like '%sche%';

阅读全文 »

大纲

前言

本文主要介绍 SpringBoot 3 如何使用 AOT 技术,包括在 Windows、Linux 平台使用 GraalVM 将 SpringBoot 应用编译成原生镜像(二进制可执行文件)。

AOT 与 JIT

  • AOT:Ahead of Time(提前编译),程序执行前,全部被编译成机器码
  • JIT:Just in Time(即时编译),程序边编译边运行

编译器与解释器

编程语言的分类

  • 编译型语言:依赖编译器 (Complier),如 C、C++
  • 解释型语言:依赖解释器 (Interpreter),如 JavaScrpt、Python
阅读全文 »

大纲

前言

本文主要介绍 SpringBoot 3 如何整合 Actuator、Prometheus 与 Grafana,实现微服务应用的监控。

官方文档

概念介绍

可观测性

可观测性 (Observability) 一般是指对线上应用进行观测、监控、预警等,包括的详细内容如下:

  • 健康状况:组件状态、存活状态等,属于 Health 范畴
  • 运行指标:CPU、内存、垃圾回收、吞吐量、响应成功率等,属于 Metrics 范畴
  • 链路追踪
  • ……
阅读全文 »

前言

本文主要介绍如何使用 Docker 在本地快速搭建 SpringBoot 3 的开发环境(单机),其中包括 Redis,ZooKeeper,Kafka,Kafka-UI,Prometheus,Grafana 服务的安装。

版本说明

软件版本说明
Docker24.0.7
CentOS7.9 宿主机操作系统
阅读全文 »

前言

本文主要介绍 Debian 如何安装 MySQL 5.7 数据库,适用于 Debian 10 、Debian 11。

环境说明

软件版本
Debian11
MySQL5.7.42

准备工作

  • 更新系统软件
1
sudo apt-get update
阅读全文 »