第1章大型互联网公司的基础架构——1.9 LSM Tree
**LSM Tree(Log-Structured Merge Tree)是一种对高并发写数据非常友好的键值存储模型,同时兼顾了查询效率。**LSMTree是我们下面将要介绍的NoSQL数据库所依赖的核心数据结构,例如BigTable.、HBase、 Cassandra、TiDB 等。
1.9.1 LSM Tree 的原理
LSM Tree的有效性基于一个结论:**磁盘或内存的顺序读/写数据性能远高于随机读/写数据性能。**这个结论不仅对传统的机械硬盘成立,对SSD硬盘同样成立。
顺序读/写和随机读/写的区别:
- 顺序读/写:按照文件中数据的顺序有序地进行读/写操作。例如,向某磁盘文件的尾部追加数据就是一种典型的顺序写操作。
- 随机读/写:它不遵循文件中数据的先后顺序进行数据的读取与写入。
**LSM Tree模型的思想就是在磁盘上用顺序读/写代替了随机读/写,充分发挥磁盘的读/写性能优势。**LSM Tree模型主要包括如下几个组成部分。
- MemTable
- Immutable MemTable
- SSTable
(1)MemTable
**MemTable是一种内存中的结构,用于保存SSTable最近更新的数据,并且按照数据Key的字典序将数据有序地组织起来。**LSM Tree模型并不限定MemTable的具体实现方式,只要保证数据有序、读/写效率高即可,红黑树、跳跃表等数据结构都是实现MemTable的适当选择。
LSM Tree模型接收到写数据请求后会直接在MemTable中处理,针对新增、修改、删除类型的写请求分别会执行不同的逻辑。
- 新增数据:直接将数据插入MemTable中。
- 修改数据:如果在MemTable中存在此数据Key,则直接修改;否则,将数据插入MemTable中。
- 删除数据:LSM Tree模型不删除数据,而是将数据状态标记为tombstone(墓碑),表示此数据已被删除。可见,删除数据的流程与修改数据的流程类似。如果在MemTable中存在此数据Key,则将数据状态修改为tombstone;否则,将携带tombstone状态的数据插入MemTable中。
由于最近更新的数据都被保存在内存中,而内存是易失性存储,所以通常使用预写日志(Write-Ahead Log,WAL)的方式保证数据的可靠性——在数据修改命令被提交到MemTable之前,先追加记录到磁盘上的WAL文件中。
(2)Immutable MemTable
当MemTable中存储的数据达到一定大小(默认为32MB)时,MemTable会变成只读的Immutable MemTable,后台线程将它持久化为基于磁盘的SSTable文件。为了不影响写数据请求的处理,LSM Tree会新建一个空白的MemTable接管工作。
(3)SSTable
LSM Tree将数据持久化到磁盘后的结构称为SSTable(Sorted String Table)。顾名思义,SSTable保存了基于数据Key按照字典序排序后的数据集合,它是一种持久化的、有序且不可变的键值对存储结构。数据Key、Value被连续地存储在SSTable文件中,同时在文件的尾部存储数据Key在文件中位置的偏移量并将其作为稀疏索引,用于提高在SSTable中查找某数据Key的速度。图1-40展示了 SSTable的结构。
当MemTable达到一定的大小后,它最终会被刷写到磁盘中变成SSTable文件,所以在不同的SSTable中可能存在相同的数据Key。**对于某个特定的数据,在最新的SSTable中存储的对应记录才是它的最新值,其他SSTable中的对应记录都是冗余数据。**这会浪费存储空间。所以,LSM Tree会周期性地对SSTable进行合并操作,通过将多个SSTable合并为更大的SSTable来清除冗余记录。
LSM Tree使用Level划分SSTable文件,Level N的SSTable文件会经过合并操作下沉到Level N+1, Immutable MemTable被持久化成的SSTable文件处于Level 0。合并操作的主要策略是 Leveled Compaction Strategy(LCS),此策略保证:
- 所有Level的SSTable文件大小均一致,默认为160MB;
- 每个Level会限制此层内所有SSTable文件的总大小,层级越高,限制的阈值越大,如Level 1的文件总大小为10GB,Level 2的文件总大小为100GB等;
- 不仅单个SSTable的内部数据有序,而且同一 Level内的SSTable之间也是有序的。
当Level N的文件总大小达到阈值时,会触发LCS的合并操作:在Level N中选择一个SSTable和Level N+1中与其数据Key有交集的SSTable进行合并,合并结果是生成若干新的SSTable,且它们各自的大小都不超过160MB,这些SSTable文件下沉到LevelN+1。如果Level N+1的文件总大小也达到阈值,则继续执行同样的合并操作,直到某一层的文件总大小在限制的阈值内,或者到达最后一层。
图1-41简单描述了合并操作过程。假设Level 1的SSTable文件总大小超过阈值,那么Level 1中的1个SSTable选择Level 2中与它有交集的2个SSTable进行合并,生成了 3个新的SSTable。
这3个SSTable被归入Level 2。我们发现Level 2的文件总大小也超过阈值,于是Level 2中的某个SSTable与Level 3中有交集的3个SSTable继续合并操作,生成一个新的SSTable被归入Level 3,如图1-42所示。
由于Level 0的SSTable文件来自Immutable MemTable,所以这些SSTable之间可能有数据Key重叠。但是经过合并操作,Level 1~N每一层的SSTable之间就不会有数据Key重叠了,一个数据Key在某一层至多存在一次。
我们可以轻易地发现,层级越低,数据越新。如果某数据存在于Level 1、Level 3、Level 5,那么Level 1对应的数据值是最新的。
1.9.2 读/写数据的流程
LSM Tree处理客户端的写数据请求的流程如下所述,如图1-43所示。
- 将写数据信息记录到WAL文件中。
- 在MemTable中写入数据,此时就可以将响应数据返回给客户端。
- 当MemTable中存储的数据大小达到阈值时,将其变为Immutable MemTable,新的MemTable继续对外提供服务。
- Immutable MemTable被持久化为SSTable文件,处于Level 0。
- 如果Level 0的SSTable文件大小达到阈值,则执行合并操作,Level 0的SSTable文件逐渐下沉到Level 1。
- 以此类推,如果Levels的SSTable文件大小达到阈值,则继续通过合并操作将SSTable文件下沉到Level N+1。
在LSM Tree中查找数据时,按照数据值的新旧程度,查找顺序为MemTable、Immutable MemTable、Level 0 SSTable、Level 1 SSTable,直到Level N SSTable。LSM Tree处理客户端的读数据请求,当然也要保证读取到数据最新值,其流程如下。
- 在MemTable中查找数据。
- 如果未找到数据,则在Immutable MemTable中继续查找。
- 如果未找到数据,则在Level 0最新的SSTable文件中查找。
- 如果在Level 0的所有SSTable文件中都找不到数据,则继续在Level 1查找。
- 以此类推,直到在某一层找到数据,或者在最后一层也未找到数据。
总结
什么是LSM Tree呢?
- LSM Tree(Log-Structured Merge Tree)是一种对高并发写数据非常友好的键值存储模型,同时兼顾了查询效率。
LSM Tree有效性是基于什么得到的?
- 磁盘或内存的顺序读/写数据性能远高于随机读/写数据性能。
顺序读/写和随机读/写的区别:
- 顺序读/写:按照文件中数据的顺序有序地进行读/写操作。例如,向某磁盘文件的尾部追加数据就是一种典型的顺序写操作。
- 随机读/写:它不遵循文件中数据的先后顺序进行数据的读取与写入。
LSM Tree模型的核心思想?
- 在磁盘上用顺序读/写代替了随机读/写,充分发挥磁盘的读/写性能优势。
什么是MemTable呢?
- MemTable是一种内存中的结构,用于保存SSTable最近更新的数据,并且按照数据Key的字典序将数据有序地组织起来。
MemTable针对新增、修改、删除类型的写请求分别会执行不同的逻辑?
- 新增数据:直接将数据插入MemTable中。
- 修改数据:如果在MemTable中存在此数据Key,则直接修改;否则,将数据插入MemTable中。
- 删除数据:LSM Tree模型不删除数据,而是将数据状态标记为tombstone(墓碑),表示此数据已被删除。可见,删除数据的流程与修改数据的流程类似。如果在MemTable中存在此数据Key,则将数据状态修改为tombstone;否则,将携带tombstone状态的数据插入MemTable中。
什么是SSTable呢?
- LSM Tree将数据持久化到磁盘后的结构称为SSTable(Sorted String Table)。
- SSTable保存了基于数据Key按照字典序排序后的数据集合,它是一种持久化的、有序且不可变的键值对存储结构。
- 数据Key、Value被连续地存储在SSTable文件中,同时在文件的尾部存储数据Key在文件中位置的偏移量并将其作为稀疏索引,用于提高在SSTable中查找某数据Key的速度。
LSM Tree处理客户端的写数据请求的流程?
- 将写数据信息记录到WAL文件中。
- 在MemTable中写入数据,此时就可以将响应数据返回给客户端。
- 当MemTable中存储的数据大小达到阈值时,将其变为Immutable MemTable,新的MemTable继续对外提供服务。
- Immutable MemTable被持久化为SSTable文件,处于Level 0。
- 如果Level 0的SSTable文件大小达到阈值,则执行合并操作,Level 0的SSTable文件逐渐下沉到Level 1。
- 以此类推,如果Levels的SSTable文件大小达到阈值,则继续通过合并操作将SSTable文件下沉到Level N+1。
LSM Tree处理客户端的读数据请求的流程?
- 在MemTable中查找数据。
- 如果未找到数据,则在Immutable MemTable中继续查找。
- 如果未找到数据,则在Level 0最新的SSTable文件中查找。
- 如果在Level 0的所有SSTable文件中都找不到数据,则继续在Level 1查找。
- 以此类推,直到在某一层找到数据,或者在最后一层也未找到数据。
相关文章:
第1章大型互联网公司的基础架构——1.9 LSM Tree
**LSM Tree(Log-Structured Merge Tree)是一种对高并发写数据非常友好的键值存储模型,同时兼顾了查询效率。**LSMTree是我们下面将要介绍的NoSQL数据库所依赖的核心数据结构,例如BigTable.、HBase、 Cassandra、TiDB 等。 1.9.1 …...
053 性能压测 单机锁 setnx
文章目录 性能压测-压力测试索引thymeleafnginx减少数据库查询(代码有bug)缓存 安全单机锁(防止缓存击穿)setnx pom.xml 性能压测-压力测试 1 响应时间(Response Time: RT):响应时间指用户从客…...
眼见不一定为实之MySQL中的不可见字符
目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前,正在看博客的您先…...
【Java 面试 八股文】JVM 虚拟机篇
JVM 虚拟机篇 1. JVM组成1.1 JVM由那些部分组成,运行流程是什么?1.2 什么是程序计数器?1.3 你能给我详细的介绍Java堆吗?1.4 Java 虚拟机栈1.4.1 Java Virtual machine Stacks (java 虚拟机栈)1.4.2 栈和堆的区别1.4.3 垃圾回收是否涉及栈内…...
达梦数据库学习笔记@1
目录 达梦数据库学习笔记一、表空间管理(一)默认表空间(二)相关数据字典(三)表空间操作(四)临时表空间管理 二、重做日志管理(一)系统视图(二&…...
条款23:宁以non-member、non-friend替换member函数
1.使用场景举例 网络浏览器类 当然这一功能也可以由一个non-menber函数(更好的封装,本条款的核心立意)提供: 面向对象守则要求数据应该尽可能的被封装,然而与直观相反地,member函数clearEverything带来的封…...
代码审计初探
学会了基础的代码审计后,就该提高一下了,学一下一些框架的php代码审计 先从一些小众的、已知存在漏洞的cms入手 phpems php的一款开源考试系统 源码下载 https://down.chinaz.com/soft/34597.htm 环境部署 windows审计,把相关文件放到phps…...
2025前端框架最新组件解析与实战技巧:Vue与React的革新之路
作者:飞天大河豚 引言 2025年的前端开发领域,Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化,两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…...
Eclipse自动排版快捷键“按了没有用”的解决办法
快捷键按了没有用,通常是因为该快捷键方式被其他软件占用了,即别的软件也设置了这个快捷键,导致你按了之后电脑不知道该响应哪个软件。 解决办法:1.将当前软件的这个快捷键改了;2.找到占用的那个软件,把那…...
小型字符级语言模型的改进方向和策略
小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…...
请简述一下Prefab(预制体)的本质是什么?
在 Unity 中,Prefab(预制体)是一种非常重要的资产类型。 Prefab 本质上是一个可重复使用(开发者可以在场景中多次实例化同一个预制体)的游戏对象模板(预制体就像一个模板,对预制体本身的修改会…...
【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台 地址: Gitee:https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务,长文本翻译支持流式回调(todo)分布式文本多语言翻译结果存储服…...
使用GPU训练模型
1.说明 本地训练模型可以用CPU和GPU,但是GPU的性能比CPU要好得多,所以如果有独立显卡的,尽量还是用GPU来训练模型。 使用GPU需要安装Cuda和Cudnn 2.安装Cuda 安装cuda之前,首先看一下显卡支持的cuda版本,在命…...
DPVS-3: 双臂负载均衡测试
测试拓扑 双臂模式, 使用两个网卡,一个对外,一个对内。 Client host是物理机, RS host都是虚拟机。 LB host是物理机,两个CX5网卡分别在两个子网。 配置文件 用dpvs.conf.sample作为双臂配置文件,其中…...
Spring Security+JWT+Redis实现项目级前后端分离认证授权
1. 整体概述 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制到资源,用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程,确保用户是谁。 1.1.1 …...
马斯克宣布Grok语音模式正式上线:早期测试版本 可能有一些问题
快科技2月23日消息,据报道,马斯克旗下xAI团队近期动作频频,继2月18日直播发布Grok最新版本Grok3后,马斯克又在社交平台X上宣布,Grok语音模式早期测试版现已在Grok应用程序上线,并对其表现给予了高度评价。 …...
P9631 [ICPC 2020 Nanjing R] Just Another Game of Stones Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: chmax ( l , r , k ) \operatorname{chmax}(l,r,k) chmax(l,r,k):对每个 i ∈ [ l , r ] i \in [l,r] i∈[l,…...
请求go构建缓存,go clean -cache
go clean -cache go 构建时会产生很多缓存, 一般是目录:/Users/xxx/Library/Caches/go-build 此目录README: This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …...
安全面试4
文章目录 给的源码是ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者从关注的点上有什么不同框架代码审计的流程无框架代码审计的流程 反序列的时候,unserialize()反序列一个字符串的时候,对象会有一些魔术方法…...
HTML之JavaScript DOM操作元素(1)
HTML之JavaScript DOM操作元素(1) 3.对元素进行操作1.操作元素的属性 元素名.属性名 ""2.操作元素的样式 元素.style.样式名 "" 样式名 "-" 要进行驼峰转换3.操作元素的文本 元素名.innerText 只识别文本元素名…...
SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当下这个高速发展的时代,网络科技正以令人惊叹的速度不断迭代更新。从 5G …...
【十一】Golang 指针
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 指针指针定义指针初始化& 操作符new 函数初始…...
“conda”不是内部或外部命令,也不是可运行的程序或批处理文件
有的时候,我们发现在cmd黑框中输入conda时,cmd会显示“conda”不是内部或外部命令,也不是可运行的程序或批处理文件,那这时候该怎么解决呢? Step01:我们找到Anconda的安装目录。然后找到里面的bin文件夹&am…...
通过LM Studio本地私有化部署DeepSeek-R1模型,无网络也能用
打开LM Studio官网https://lmstudio.ai/ 选择适合自己的操作系统,下载LM Studio安装包 本地电脑安装成功后运行LM Studio,顶部文本框输入deepseek,点击搜索模型 在搜索结果中选择7B参数模型, 如上图右侧提示“No result found”说…...
GPU和FPGA的区别
GPU(Graphics Processing Unit,图形处理器)和 FPGA(Field-Programmable Gate Array,现场可编程门阵列)不是同一种硬件。 我的理解是,虽然都可以用于并行计算,但是GPU是纯计算的硬件…...
CMake管理依赖实战:多仓库的无缝集成
随着软件复杂度的增加,单个项目可能需要依赖多个外部库或模块。这些依赖项可能是来自不同的代码仓库,如ATest和BTest。为了实现高效的依赖管理,CMake提供了多种方式来处理这种多仓库的情况。下面我们将详细介绍几种常见的方法,并通…...
Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法
明确需要编辑器和编译器,并选择自己要用什么(我选的编辑器是VSCode:Visual Studio Code;编译器是gcc)下载VSCode并配置环境变量(这里没啥问题),安装C/C的拓展安装Cygwin,…...
2025最新版!Fiddler抓包实战:深度解析短视频评论采集技术
2025最新版!Fiddler抓包实战:深度解析短视频评论采集技术(脱敏) 声明: 本文仅供学习交流使用,请勿用于非法用途。 导语: 短视频数据采集又有新突破!你是否好奇如何安全、高效地获…...
Linux信号
目录 1. 信号的概念搞定(输出结论,支撑我们的理解) 补充知识 2.信号的产生 补充知识 3.信号的保存 4.阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作函数 sigprocmask sigpending 5. 信号的…...
git,bash - 从一个远端git库只下载一个文件的方法
文章目录 git,bash - 从一个远端git库只下载一个文件的方法概述笔记写一个bash脚本来自动下载get_github_raw_file_from_url.shreanme_file.shfind_key_value.sh执行命令 END git,bash - 从一个远端git库只下载一个文件的方法 概述 github上有很多大佬上传了电子书库…...
深度学习(5)-卷积神经网络
我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...
flex布局自定义一行几栏,靠左对齐===grid布局
模板 <div class"content"><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"item">1222</div><div class"…...
(五)趣学设计模式 之 建造者模式!
目录 一、 啥是建造者模式?二、 为什么要用建造者模式?三、 建造者模式怎么实现?四、 建造者模式的应用场景五、 建造者模式的优点和缺点六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方…...
【CentOS7】安装MinIO
下载rpm包 wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230809233022.0.0.x86_64.rpm 安装 rpm -ivh minio-20230809233022.0.0.x86_64.rpm 运行 server 后面跟着的使minio 的数据目录;console-address 后面跟着的是minio 的管理…...
vLLM学习1
调用方式 一、vLLM 提供的两种调用方式 1. Offline Batched Inference(离线批处理) 调用特点:一次性传入一批(batch)的请求,等待所有请求都处理完毕后,一次性返回推理结果。对用户而言&#x…...
ABC 385
目录 C. Illuminate Buildings D. Santa Claus E. Snowflake Tree C. Illuminate Buildings dp[ i ][ j ]:选择的 i 个建筑,间隔为 j。这样只需要两层循环就可以了,o(n^2) 其实本质只是个一维 dp,但我还需…...
綫性與非綫性泛函分析與應用_1.例題(下)-半母本
第1章 實分析與函數論:快速回顧(下) 五、基數;有限集和無限集相關例題 例題1:集合基數的判斷 判斷集合和集合B=\{a,b,c,d,e\}的基數關係。 解析: 可以構造一個雙射,例如,,,,。 所以,兩個集合具有相同的基數。 例題2:可數集的證明 證明整數集是可數集。 解析: …...
49 set与map的模拟实现
目录 一、源码及框架分析 二、模拟实现map和set (一)复用红黑树的框架,并支持insert (二)支持迭代器的实现 (三)map支持 [ ] (四)整体代码实现 一、源码及框架分析…...
鸿蒙NEXT应用App测试-通用测试
注意:大家记得学完通用测试记得再学鸿蒙专项测试 https://blog.csdn.net/weixin_51166786/article/details/145768653 注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章…...
LangChain 技术入门指南:探索语言模型的无限可能
在当今的技术领域,LangChain 正逐渐崭露头角,成为开发语言模型应用的强大工具。如果你渴望深入了解并掌握这一技术,那么就跟随本文一起开启 LangChain 的入门之旅吧! (后续将持续输出关于LangChain的技术文章,有兴趣的同学可以关注…...
UE5销毁Actor,移动Actor,简单的空气墙的制作
1.销毁Actor 1.Actor中存在Destory()函数和Destoryed()函数 Destory()函数是成员函数,它会立即标记 Actor 为销毁状态,并且会从场景中移除该 Actor。它会触发生命周期中的销毁过程,调用 Destroy() 后,Actor 立即进入销毁过程。具体…...
STM32基础篇(二)------GPIO
GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置为8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 输入…...
亲测Win11电脑可以安装LabVIEW的版本,及2015、2018、2020版本直接的区别
下面是我电脑的信息 设备名称 DESKTOP-04HHS8S 处理器 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 机带 RAM 16.0 GB (15.7 GB 可用) 设备 ID 82798104-C565-4167-A21E-5EB5DEFAA541 产品 ID 00331-20300-00000-AA678 系统类型 64 位操作系统, 基于 …...
Idea2024中搭建JavaFX开发环境并创建运行项目
Idea2024中搭建JavaFX开发环境并创建运行项目 本文以Java语言为例演示如何创建JavaFX开发项目和部署开发环境,读者可以根据个人实际灵活选择相关参数。 一、项目创建与环境搭建步骤 新建JavaFX项目,选择适合项目实际的语言、系统和JDK。 项目设置-设置…...
认知重构 | 自我分化 | 苏格拉底式提问
注:本文为 “认知重构 | 自我分化” 相关文章合辑。 心理学上有一个词叫:认知重构(改变 “非黑即白,一分为二” 的思维方式) 原创 心理师威叔 心理自救 2024 年 10 月 26 日 19:08 广东 你有没有过这样的时候&#x…...
MFC开发:如何创建第一个MFC应用程序
文章目录 一、概述二、MFC 的主要组件三、创建一个MFC窗口四、控件绑定消息函数 一、概述 MFC 是微软提供的一个 C 类库,用于简化 Windows 应用程序的开发。它封装了 Windows API,提供面向对象的接口,帮助开发者更高效地创建图形用户界面&am…...
nodejs:vue 3 + vite 作为前端,将 html 填入<iframe>,在线查询英汉词典
向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 详见上一篇:nodejs:express js-mdict 作为后端ÿ…...
基于 Python Django 的校园互助平台(附源码,文档)
博主介绍:✌Java徐师兄、7年大厂程序员经历。全网粉丝13w、csdn博客专家、掘金/华为云等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不…...
玩转 Java 与 Python 交互,JEP 库来助力
文章目录 玩转 Java 与 Python 交互,JEP 库来助力一、背景介绍二、JEP 库是什么?三、如何安装 JEP 库?四、JEP 库的简单使用方法五、JEP 库的实际应用场景场景 1:数据处理场景 2:机器学习场景 3:科学计算场…...
【Linux】基于UDP/TCP服务器与客户端的实现
目录 一、UDP (一)Server.hpp (二)Server.cpp (三)Client.hpp (四)Client.cpp (五)User.hpp 二、TCP (一)多进程版本的服务器与…...