1. 服务端安装 服务端是Azure下的Ubuntu 20.04,直接命令安装: sudo apt update sudo apt install mysql-server 1.1. 配置 运行安全脚本: sudo mysql_secure_installation 依次会执行以下操作: 为root用户设置密码 删除匿名账号 取消root用户远程登录 删除test库和对test库的访问权限 刷新授权表使修改生效 接下来测试mysql服务是否正常启动: systemct...
摘要: 基于`ucontext_t`实现非对称协程,本文只涉及协程,不涉及协程的调度。
1 协程模块概述 1.1 概念 首先大致了解以下什么是协程,可以参考以下链接: 协程第一话 协程到底是怎样的存在? 协程第二话 协程和IO多路复用更配哦~ 协程的近况、设计与实现中的细节和决策 [一文彻底弄懂C++开源协程库libco——原理及应用](https://...
1. 线程模块概述 该模块基于pthread实现。c++11中的thread也是由pthread封装实现的,但是没有提供读写互斥量,读写锁,自旋锁等,所以sylar在项目中自己封装了pthread。 包括以下类: Thread:线程类,构造函数传入线程入口函数和线程名称,线程入口函数类型为void(),如果带参数,则需要用std::bind进行绑定。线程类构造之后线程即开始运行,构造函数在线程真正开始运行之后返回。 锁模块封装了信号量、互斥量、读写锁、自旋锁、原子锁: Semaphore:信号量,基于sem_t实现。 `...
1 配置模块概述 主要用于定义/声明配置项,并且从配置文件中加载用户配置。一般而言,一项配置应该包括以下要素: 名称**:配置项的名称,对应一个字符串,必须唯一,不能与其他配置项产生冲突。 类型**:配置项的数据类型,可以是基本类型,但也应该支持复杂类型和自定义类型。 值**:配置项的值。 默认值**:配置项的默认值,考虑到用户不一定总是会显式地给配置项赋值,所以配置项最好有一个默认值。 配置变更通知**:一旦用户更新了配置值,那么应该通知所有使用了这项配置的代码,以便于进行一些具体的操作,比如重新打开文件,...
摘要: 介绍日志模块,主要包括日志级别、日志格式化、日志输出、日志分类等功能。
1 日志模块概述 日志对于一个库或者框架来说是非常重要的,它可以帮助开发者了解程序的运行状态,排查问题,优化性能等。具体来说,日志模块用于格式化输出程序日志,方便从日志中定位程序运行过程中出现的问题。这里的日志除了日志内容本身之外,还应该包括文件名/行号,时间戳,线程/协程号,模块名称,日志级别等额外信息,甚至在打印致命的日志时,还应该附加程序的栈回溯信息,以便于分析和排查问题。 一个完善的日志模块应该具备以下特点: 多日志级别**:如DEBUG、INFO、WARN、ERROR、FATAL等,用于区分日志的重要性和严重性。 日志格式化*...
1 概念 宏定义是一种预处理指令,用于在源代码中定义一些常量、函数或代码片段的缩写形式。 通过宏定义,可以将一段代码片段或者常量值与一个标识符相关联,然后在代码中使用该标识符来代替相应的代码或值。 1.1 无参宏 通常,宏定义使用#define关键字来创建,其基本形式是: #define 宏名称 宏取代文本 宏名称:标识符,用于代表宏定义的名称。 宏取代文本:宏定义的内容,可以是常量、表达式、代码片段等。 比如,定义一个常量宏: #define PI 3.141...
Day1 --- 518. 零钱兑换 II 题目 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 题解 这道题是一个典型的完全背包问题,与[前一日](http...
1. 内建函数 __builtin 函数是 GCC 的内建函数,用于提高代码的执行效率,是一种相当神奇的位运算函数。 1.1. __builtin_ctz() count trailing zeros 的缩写,即计算末尾的零的个数。 __builtin_ctz() 函数用于返回一个整数的二进制表示中从右往左第一个1的位置,返回基于0的索引位置。 或者说,返回括号内数的二进制表示数末尾0的个数。 int __builtin_ctz(unsigned int x); int __builtin_ct...
Day1 --- 303. 区域和检索-数组不可变 题目 给定一个整数数组nums,处理以下类型的多个查询: 计算索引left和right(包含left和right)之间的nums元素的和,其中left <= right 实现NumArray类: `NumArray(i...
摘要: 主要对C语言的一些基础知识进行简单的复习和记录
指针 * 用于声明指针变量或者获取指针变量所指向的变量。 & 用于获取变量的地址。 指针是一个变量,其值为另一个变量的地址。 一级指针 一级指针是最基本的指针类型,它存储的是变量的内存地址。在内存中,一级指针占用的空间大小固定,通常为4字节或8字节(取决于操作系统的位数,32位系统为4字节,64位系统为8字节)。 int a = 10; //声明一个int类型的变量 int *p; //声明一个指向int类型的指针 *p = &a; //将指针p指向变量a ...