24k 词
回顾一下之前做的轻量级高并发网络服务器项目 项目部署在VMware的乌班图系统上,运行效果如下: 终端启动: 浏览器访问: 系统流程主线程用epoll这种多路复用机制监听客户端连接,当有read或者write事件发出请求时,将请求加入到线程池,线程池中的一个线程争抢到锁,开始执行任务,任务包括解析请求与生成响应,包括对信号的序列化与反序列化,最终发布的静态资源为js页面,这里简单让ai写了一个电子木鱼的效果并进行一些润色,系统适配Linux。 线程池类 head-only threadpool class #ifndef THREADPOOL_H #define THREADPOOL_H #include <pthread.h> #include <cstdio> #include <list> #include <exception> #include "locker.h" using namespace std; // 线程池类 template&...
5.8k 词
这是一个轻量级异步日志器(async logger)。目标是用现代 C++(线程、互斥、条件变量)实现一个线程安全、低阻塞的日志写入方案:生产者将格式化后的日志消息推入队列,后台消费者线程异步写入文件并可选地输出到终端。整体实现包含一个简单的占位符格式化(暂用{},可自行修改)、类型到字符串的通用转换和优雅的后台线程关闭机制。 hpp #ifndef MY_LOG #define MY_LOG #include <iostream> #include <queue> #include <mutex> #include <string> #include <condition_variable> #include <thread> #include <fstream> #include <atomic> #include <sstream> #include <vector> #include <stdexcept> /** * @brief 将单...
34k 词
一些C++中经常会接触的概念,包括中间件,数据结构封装等模块 了解原理,实现基本功能,实际运用的时候还需要根据具体需求进行扩展和优化 一般肯定直接用STL封装好的 内存池 Memory Pool 共享指针 Shared Pointer 函数封装 Function Encapsulation 双向链表容器 List 双端队列容器 Deque BST和AVL实现map 1. 基于二叉搜索树 (BST) 的实现 2. 基于 AVL 树的实现 无序映射表 unordered_map 单例模式 Singleton 内存池 Memory Pool内存池是一种预先分配一大块内存,然后按需分配小块内存的技术 内存池可以减少频繁的内存分配和释放操作从而提高性能 用一个栈实现: classDiagram class MemoryPool { char* _pool size_t _objectsize size_t _totalsize stack~void*~ _freelist void* a...
1.7k 词
什么是字符串匹配 暴力解法 KMP算法 具体实现 补充:   KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,用于在一个主串中查找一个模式串的位置。它通过预处理模式串,避免了在匹配失败时重复比较已经匹配的部分,从而提高了匹配效率。 该算法在1977年被提出,取三位贡献者的姓名首字母组成算法名称。 什么是字符串匹配字符串匹配问题是计算机科学中的一个经典问题,其核心目标是在一个较长的文本串(Text)中查找是否存在一个或多个与给定模式串(Pattern)完全相同的子串。 例如: 文本串(T):"ABABDABACDABABCABAB" 模式串(P):"ABABCABAB" 那么模式串可以在文本串的索引11处匹配   暴力解法知道控制语句用法的人都知道,这个问题可以套两层循环来解决,从文本串的第1个字符开始,与模式串逐字符比对,如果发现不匹配,则从文本串的第2个字符开始重新比对,以此类推,该解法时间复杂度为$O(m*n)$,效率较低。   KMP算法KMP算法通过预处理模...
608 词
出于科研项目的需求,我需要开发一个能个性化定制界面与功能的BLE手机上位机软件,在经过简单的调研后,主要有以下两种开发路径: Android Studio MIT APP Inventor 其中AS需要Java基础,且开发周期长;MIT APP Inventor图形化编程,20min可上手,于是我选择后者,最终也能达到我想要的效果。 选择建议如下: 选 Android Studio:如果你想成为专业开发者,或开发功能复杂、可发布的商业应用。 选 MIT App Inventor:如果你是学生,或只想快速做一个简单应用 于是在B站看了几个包浆的教学视频后,我开始上手制作,过程意外地顺利 首先,你需要明确你的APP要包含哪些模块 如下图所示,在登陆官网后,你可以把你需要的模块在侧边栏拖入主页面 依次描述我的思路 上图中组件1是BLE设备搜索与断联按钮 2是BLE连接状态,3是波形图,4是实时数值,5是清空按钮; 当然也有后端组件Ⅰ,是BLE模块,这个在官网没有,需要下载拓展包,https://iot.appinventor.mit.edu/ 这个网站里可以...