此处记录一些后端框架相关
主流框架盘点
语言
框架
综合评级
流行度
性能
学习曲线
企业级功能
生态丰富度
开发效率
长期维护
社区支持
部署运维
最佳场景
Java
Spring Boot
★★★★★
★★★★★
★★★★☆
★☆☆☆☆
★★★★★
★★★★★
★★★★★☆
★★★★★
★★★★★
★★★★☆
大型企业应用、金融系统、高并发微服务
Python
FastAPI
★★★★★
★★★★☆
★★★★★
★★★☆☆
★★☆☆☆
★★☆☆☆
★★★★★
★★★★★☆
★★★★★
★★★★★☆
高性能API、微服务、机器学习服务
Python
Django
★★★☆☆
★★★★☆
★★☆☆☆
★★☆☆☆
★★★☆☆
★★★★☆
★★★★☆
★★★★★
★★★★★
★★★★☆
全栈Web应用、CMS、内容平台
Python
Flask
★★★☆☆
★★★★☆
★★☆☆☆
★★★★★
★☆☆☆☆
★★★★★
★★★★★
★★★★★
★★★★★
★★★★☆
小型应用、API服务、快速原型
Node.js
Express
★★★☆☆
★★★★☆
★★☆☆☆ ...
此处记录一些摄像头监控相关知识
音视频基础知识记录参考链接
视频流程全解1234567891011121314graph LR A[数据] --> B[解协议] B --> C[封装格式数据] C --> D[解封装] D --> E[音频压缩数据] E --> G[音频解码] G --> I[音频原始数据] I --> K[视音频同步] K --> L[音频驱动/设备] D --> F[视频压缩数据] F --> H[视频解码] H --> J[视频原始数据] J --> K K --> M[视频驱动/设备]
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数 ...
什么是可执行文件
可执行文件(executable file)指的是可以由操作系统进行加载执行的文件。
可执行文件的格式:
windows平台:PE(Portable Executable)文件结构
Linux平台:ELF(Executable and Linking Format)文件结构
哪些领域会用到PE文件结构
病毒与反病毒
外挂与反外挂
加壳与脱壳(保护与破解)
无源码修改功能,软件汉化等等
如何识别PE文件
PE文件的特征(PE指纹)
分别打开.exe .dll .sys 等文件,观察特征前2个字节
UE二进制方式打开文件,前两个字节是4D 5A表示得字符是MZ,然后0x3c的地址处如果说是E0 00 00 00,就到000000E0地址处查看前两个字节是不是50 45,表示得字符是PE,如果上述的都满足,就说明这个文件是PE文件。
不要仅仅通过文件名的后缀名来认定PE文件(因为后缀名是可以改的)
PE文件结构
DOS部分是历史遗留问题,以前是DOS系统
PE文件头是给windows用的
节表,当前文件一共分成多少部分,就是一个索引目录
节数据,存具体 ...
APC机制APC机制使耗时操作可以异步回调处理
线程是不能被“杀死”,“挂起”,“恢复”的,线程在执行的时候自己占据着CPU,别人怎么可能控制它呢?
如果说线程如果想“死”,一定是自己执行代码把自己杀死,不存在”他杀”这种情况!
如果要改变一个线程的行为该怎么办呢?
可以给他提供一个函数,让它自己去调用,这个函数就是APC(Asyncroneus Procedure Call),即异步过程调用
_KAPC_STATE123456789101112kd> dt _KTHREADnt!_KTHREAD ... +0x034 ApcState : _KAPC_STATE ...kd> dt _KAPC_STATEnt!_KAPC_STATE +0x000 ApcListHead : [2] _LIST_ENTRY//两个APC队列(分别是内核APC和用户APC),存储着要给他提供的APC函数,在某个时刻线程会检查自己的APC链表执行。链表中的内容与当前地址一样则说明该链表为空 +0x010 Process : Ptr3 ...
编译原理相关知识点
编译器具有非常模块化的高层结构,可以看成多个阶段构成的”流水线”结构
编译器主要包含五个部分
词法分析 字符序列 -> 记号序列
语法分析 记号序列 -> 抽象语法树(AST)
语义分析 抽象语法树 -> 中间表示(intermediate representation)
优化
代码生成 中间表示(IR) -> 目标代码
词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成
目前进度:https://www.bilibili.com/video/BV1m7411d7iS?p=11&vd_source=f235f2108c2a3afdf8d1609bde0b4591 2.4.1继续,有限状态自动机
词法分析任务:从字符流到记号流
字符流:和被编译的语言密切相关(ASCII,Unicode,or …)
记号流:编译器内部定义的数据结构,编码所识别出的词法单元
词法分析例子如下:
1234if (x>5) y="hello";els ...
python相关知识点
python入门python入门
安装指导
注释
1234#这里是注释内容"""这里是注释内容"""
多行文本一并打印:
1234print("""你好世界""")#python中的每个print都会自动另起一行
变量不需要定义类型
次方
123**5#表示3的5次方9**#9的平方
导入库和使用库
12import mathmath.函数名([参数])
字符串 str
整数 int
浮点数 float
布尔类型 bool
空值类型 NoneType
…
1234s = "hello world"len(s)#返回字符串的长度,这里是11s[0]#取字符串第一个字符type(变量名)#返回该变量的类型名
python的交互模式
区别与命令行模式,命令行模式是保存整个文件然后一行一行执行
交互模式是输入一行执行一行,关闭后代码全部消失。
交互模式可以不用print直接看到执行结果。
可以在下图位置打开py ...
此文是针对Google开源项目风格指南的笔记
风格 (style, 亦称作可读性 (readability)) 是用于管理 C++ 代码的惯例. “风格” 这一术语略有不准确, 因为这些惯例并非仅仅囊括代码格式.
为读者优化, 而非为作者优化
和现有代码保持一致
避免使用奇特或危险的语法结构
避免使用那些正常水平的 C++ 程序员认为棘手或难以维护的语法结构
需要注意我们的规模
举例来说, 一定要避免污染全局命名空间 (global namespace): 如果所有人都往全局命名空间里塞东西, 就很难避免上亿行代码之间的符号冲突 (name collision), 也难以修复冲突.
在必要时为优化让路
目前代码的目标版本是 C++20
针对C++谷歌代码规范的vscode拓展cpplint
头文件相关自给自足的头文件
通常每个 .cc/ .cpp 文件应该有一个配套的 .h 文件. 常见的例外情况包括单元测试和仅有 main() 函数的 .cc 文件.
头文件应该自给自足 (self-contained, 也就是可以独立编译), 并以 .h 为扩展名 ...
imgui开发记录
环境配置imgui库下载
detours库下载
imgui的使用需要提前安装dx库:安装执行文件:DXSDK_jun10.exe,安装好后文件夹名称:Microsoft DirectX SDK(June 2010)
imgui环境配置配置DX库在配置-VC++目录-包含目录加入DX安装路径根目录的include文件夹,$(DXSDK_DIR)是表示DX安装目录的宏
配置-链接器-常规-附加库目录加入DX安装路径根目录Lib文件夹,$(PlatformTarget)是表示当前项目是x86或x64,因为Lib文件夹下分x86和x64文件夹要针对性选择库文件,因此使用该宏
配置-链接器-输入-附加依赖项中添加库的名字
项目中导入头文件#include <d3d9.h>,根据引入的d3d版本来导入头文件
配置imgui下图可以取到对应版本的DX实例:用于实验imgui
新建项目后,将imgui-master文件夹中的所有.h和.cpp文件拖拽到项目文件夹中(可以新建一个文件夹存放),然后还要将backends文件夹中的选对应的文件(根据需要DX9还是 ...
包含虚拟机和docker相关知识点
虚拟化网络设置docker网络Docker网络剖析
官方文档给出了5种网络驱动模型,如下:
bridge:网桥类型网络;其实就是五大虚拟化网络模型中的NAT网络,只不过这里叫做bridge网桥类型.需要映射接口才能让外部访问到容器
默认bridge不支持容器名dns
自定义bridge支持容器名dns
host:该模式仅在linux可用,理解成容器变成了宿主的一个应用了.其原理是容器使用宿主机的网络空间,因此会直接看到并使用宿主机所有网络功能
None:啥网络都没有
123456789101112131415#docker命令# 1. 创建自定义bridge网络docker network create my-custom-bridge# 2. 使用自定义bridge启动容器(支持容器名DNS)docker run -d --network my-custom-bridge --name app1 nginx# 示例:host模式启动容器(--network host)docker run -d --network host --na ...