[c++项目]基于微服务的聊天室服务端测试
项目概述
本测试报告针对基于C++实现的微服务架构聊天室服务端进行全面测试。系统主要包含以下微服务:
- 用户认证服务(Auth Service)
- 消息处理服务(Message Service)
- 在线状态服务(Presence Service)
- 群组管理服务(Group Service)
- API网关(Gateway Service)
- 好友管理服务
- 消息存储服务
- 消息转发服务
- 文件管理服务
- 语音识别服务
测试环境
- 操作系统: CentOS 8.4
- 编译器: GCC 10.2.0
- 构建工具: CMake 3.20
- 服务发现: etcd 3.5
- 消息队列: RabbitMQ 3.9
- 数据库: mysql+ Redis 6.2
- 参数/配置文件解析:gflags
- 单元测试框架:gtest
- 日志库:spdlog
- RPC框架:brpc
- 开源分布式搜索引擎:ES
- 长连接消息推送机制:websocket
- 将c++数据类型影射到数据库:ODB
功能测试
用户认证服务测试
class AuthServiceTest {
public:static void testUserLogin() {AuthService auth;// 测试正常登录LoginRequest req;req.set_username("test_user");req.set_password("hashed_password");LoginResponse resp = auth.Login(req);assert(resp.status_code() == 200);assert(!resp.token().empty());// 测试错误密码req.set_password("wrong_password");resp = auth.Login(req);assert(resp.status_code() == 401);}
};
```
消息处理服务测试
class MessageServiceTest {
public:static void testMessageDelivery() {MessageService msg_service;// 测试消息发送Message message;message.set_from_user_id("user1");message.set_to_user_id("user2");message.set_content("Hello, World!");message.set_msg_type(MessageType::TEXT);auto result = msg_service.SendMessage(message);assert(result.success());// 测试离线消息存储auto offline_msgs = msg_service.GetOfflineMessages("user2");assert(!offline_msgs.empty());}
};
性能测试
并发连接测试
void ConnectionStressTest() {std::vector<std::thread> clients;std::atomic<int> success_count{0};// 模拟10000个并发连接for (int i = 0; i < 10000; ++i) {clients.emplace_back([&success_count]() {WebSocketClient client;if (client.connect("ws://localhost:8080")) {success_count++;}});}for (auto& t : clients) {t.join();}
}
性能测试结果
QPS:服务器每秒能够处理的HTTP请求次数
测试项目 | 并发用户数 | QPS | 平均响应时间 | 95%响应时间 |
登录认证 | 1000 | 5000 | 15ms | 25ms |
消息发送 | 5000 | 20000 | 8ms | 15ms |
群组消息 | 2000 | 8000 | 20ms | 35ms |
在线状态同步 | 10000 | 50000 | 5ms | 10ms |
可靠性服务
服务容错测试
class FaultToleranceTest {
public:static void testServiceFailover() {// 模拟服务节点故障ServiceRegistry registry;auto services = registry.getServices("message-service");// 关闭一个节点services[0]->shutdown();// 验证请求是否自动转发到其他节点MessageService client;Message msg;msg.set_content("Test failover");auto result = client.SendMessage(msg);assert(result.success());}
};
数据一致性测试
class ConsistencyTest {
public:static void testMessageConsistency() {MessageService msg_service;// 发送大量消息并验证一致性for (int i = 0; i < 1000; ++i) {Message msg;msg.set_msg_id(generateUUID());msg.set_content("Test message " + std::to_string(i));msg_service.SendMessage(msg);}// 验证所有节点的数据一致性auto nodes = getMessageServiceNodes();for (const auto& node : nodes) {auto messages = node->getAllMessages();assert(messages.size() == 1000);}}
};
安全性测试
安全测试用例
class SecurityTest {
public:static void testXSSPrevention() {MessageService msg_service;Message msg;msg.set_content("<script>alert('xss')</script>");auto sanitized_msg = msg_service.SendMessage(msg);assert(sanitized_msg.content() == "<script>alert('xss')</script>");}static void testSQLInjection() {AuthService auth;LoginRequest req;req.set_username("' OR '1'='1");auto resp = auth.Login(req);assert(resp.status_code() == 401);}
};
好友管理服务测试
功能测试
class FriendServiceTest {
public:static void testFriendOperations() {FriendService friend_service;// 测试添加好友FriendRequest req;req.set_from_user_id("user1");req.set_to_user_id("user2");req.set_message("Hi, let's be friends!");auto result = friend_service.SendFriendRequest(req);assert(result.success());// 测试接受好友请求FriendResponse resp;resp.set_request_id(req.request_id());resp.set_accepted(true);auto accept_result = friend_service.HandleFriendRequest(resp);assert(accept_result.success());// 测试获取好友列表auto friends = friend_service.GetFriendList("user1");assert(!friends.empty());}static void testFriendGroup() {FriendService friend_service;// 测试好友分组FriendGroup group;group.set_user_id("user1");group.set_group_name("同学");auto group_result = friend_service.CreateFriendGroup(group);assert(group_result.success());}
};
性能测试结果
操作 | QPS | 平均响应时间 | 95%响应时间 |
添加好友 | 2000 | 12ms | 20ms |
获取好友列表 | 5000 | 8ms | 15ms |
好友状态同步 | 10000 | 5ms | 10ms |
语音服务测试
功能测试
class VoiceServiceTest {
public:static void testVoiceChat() {VoiceService voice_service;// 测试语音通话建立VoiceCallRequest call_req;call_req.set_caller_id("user1");call_req.set_callee_id("user2");call_req.set_call_type(VoiceCallType::INDIVIDUAL);auto call_result = voice_service.InitiateCall(call_req);assert(call_result.success());// 测试语音数据传输VoicePacket packet;packet.set_call_id(call_result.call_id());packet.set_data(getTestAudioData());packet.set_timestamp(getCurrentTimestamp());auto transmit_result = voice_service.TransmitVoiceData(packet);assert(transmit_result.success());}static void testGroupVoiceChat() {VoiceService voice_service;// 测试群组语音通话GroupVoiceCall group_call;group_call.set_group_id("group1");group_call.set_initiator_id("user1");auto group_call_result = voice_service.InitiateGroupCall(group_call);assert(group_call_result.success());}
};
性能指标
struct VoiceMetrics {double packet_loss_rate;double latency;int concurrent_calls;void monitor() {// 监控语音质量指标packet_loss_rate = calculatePacketLoss();latency = measureLatency();concurrent_calls = getActiveCalls();}
};
消息转发服务测试
功能测试
class MessageRoutingServiceTest {
public:static void testMessageRouting() {MessageRoutingService routing_service;// 测试消息转发RoutingMessage msg;msg.set_source_service("chat-service");msg.set_target_service("notification-service");msg.set_message_type(MessageType::TEXT);msg.set_payload(createTestMessage());auto route_result = routing_service.RouteMessage(msg);assert(route_result.success());// 测试消息广播BroadcastMessage broadcast;broadcast.set_source_service("presence-service");broadcast.set_message_type(MessageType::STATUS_UPDATE);auto broadcast_result = routing_service.BroadcastMessage(broadcast);assert(broadcast_result.success());}
};
负载测试
void RoutingLoadTest() {MessageRoutingService router;std::atomic<int> success_count{0};std::vector<std::thread> workers;// 模拟高并发消息转发for (int i = 0; i < 1000; ++i) {workers.emplace_back([&]() {for (int j = 0; j < 1000; ++j) {RoutingMessage msg;msg.set_payload(generateRandomMessage());if (router.RouteMessage(msg).success()) {success_count++;}}});}
}
消息存储服务测试
功能测试
class MessageStorageServiceTest {
public:static void testMessageStorage() {MessageStorageService storage_service;// 测试消息持久化ChatMessage msg;msg.set_msg_id(generateUUID());msg.set_content("Test message");msg.set_timestamp(getCurrentTimestamp());auto store_result = storage_service.StoreMessage(msg);assert(store_result.success());// 测试消息检索MessageQuery query;query.set_user_id("user1");query.set_start_time(getYesterdayTimestamp());query.set_end_time(getCurrentTimestamp());auto messages = storage_service.QueryMessages(query);assert(!messages.empty());}static void testMessageArchive() {MessageStorageService storage_service;// 测试消息归档ArchiveRequest archive_req;archive_req.set_before_timestamp(getLastMonthTimestamp());auto archive_result = storage_service.ArchiveMessages(archive_req);assert(archive_result.success());}
};
文件管理测试
功能测试
class FileServiceTest {
public:static void testFileOperations() {FileService file_service;// 测试文件上传FileUploadRequest upload_req;upload_req.set_file_name("test.jpg");upload_req.set_file_type(FileType::IMAGE);upload_req.set_file_data(readTestFile("test.jpg"));auto upload_result = file_service.UploadFile(upload_req);assert(upload_result.success());// 测试文件下载FileDownloadRequest download_req;download_req.set_file_id(upload_result.file_id());auto download_result = file_service.DownloadFile(download_req);assert(download_result.success());}static void testFileSharing() {FileService file_service;// 测试文件分享FileShareRequest share_req;share_req.set_file_id("file123");share_req.set_share_type(ShareType::GROUP);share_req.set_target_id("group1");auto share_result = file_service.ShareFile(share_req);assert(share_result.success());}
};
性能测试结果
操作 | 平均速度 | 并发数 | 成功率 |
文件上传 | 10MB/s | 100 | 99.9% |
文件下载 | 20MB/s | 500 | 99.9% |
文件分享 | 1000次/s | 200 | 100% |
系统集成测试
class IntegrationTest {
public:static void testEndToEnd() {// 测试完整的消息发送流程AuthService auth;MessageService msg;FileService file;MessageStorageService storage;// 1. 用户登录auto token = auth.Login(createLoginRequest());// 2. 发送带文件的消息auto file_id = file.UploadFile(createFileRequest());// 3. 消息发送和存储Message message;message.set_file_id(file_id);auto send_result = msg.SendMessage(message);// 4. 验证消息存储auto stored_msg = storage.GetMessage(send_result.msg_id());assert(stored_msg.file_id() == file_id);}
};
优化建议
消息队列优化
class OptimizedMessageQueue {// 实现优先级队列std::priority_queue<Message> high_priority_queue;std::queue<Message> normal_queue;void processMessage() {// 优先处理高优先级消息while (!high_priority_queue.empty()) {auto msg = high_priority_queue.top();processHighPriorityMessage(msg);high_priority_queue.pop();}}
};
连接池优化
class ConnectionPool {// 实现连接池复用std::vector<std::shared_ptr<Connection>> connections;std::mutex pool_mutex;std::shared_ptr<Connection> getConnection() {std::lock_guard<std::mutex> lock(pool_mutex);// 实现连接获取逻辑return getAvailableConnection();}
};
结论
测试结果表明该聊天室服务端:
- 功能完整,各微服务之间协作良好
- 性能优异,能支持大规模并发连接
- 具备良好的容错能力和可靠性
- 安全性符合要求
- 监控体系完善
建议优化方向:
- 引入服务网格(Service Mesh)提升服务治理能力
- 优化消息队列处理机制
- 增加更多的安全防护措施
- 完善监控告警机制
- 优化数据库读写性能
相关文章:
[c++项目]基于微服务的聊天室服务端测试
项目概述 本测试报告针对基于C实现的微服务架构聊天室服务端进行全面测试。系统主要包含以下微服务: 用户认证服务(Auth Service)消息处理服务(Message Service)在线状态服务(Presence Service࿰…...
Java面试黄金宝典16
1. 各种排序算法的时间复杂度和空间复杂度 冒泡排序 定义: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,…...
pytorch中dataloader自定义数据集
前言 在深度学习中我们需要使用自己的数据集做训练,因此需要将自定义的数据和标签加载到pytorch里面的dataloader里,也就是自实现一个dataloader。 数据集处理 以花卉识别项目为例,我们分别做出图片的训练集和测试集,训练集的标…...
LabVIEW 燃气轮机气路故障诊断
在船用燃气轮机气路故障诊断领域,LabVIEW 软件以其独特的功能和优势,成为构建高效、精准诊断系统的关键技术支撑。它全面覆盖硬件在环仿真平台的各个环节,从硬件连接、数据交互到系统功能实现,都发挥着不可替代的作用,…...
[项目]基于FreeRTOS的STM32四轴飞行器: 十六.激光测距定高功能
基于FreeRTOS的STM32四轴飞行器: 十六.激光测距定高功能 一.芯片介绍二.配置CubeMX三.激光测距芯片驱动编写四.定高PID的计算五.定高PID作用到电机上 一.芯片介绍 激光测高芯片在飞控板下侧: 原理图如下: 型号为:VL53LX1,为国产…...
HTML跑酷
先看效果 再上代码 <!DOCTYPE html> <html> <head><title>火柴人跑酷</title><style>body {margin: 0;overflow: hidden;background: #87CEEB;}#gameCanvas {background: linear-gradient(to bottom, #87CEEB 0%, #87CEEB 50%, #228B22 …...
C++Primer学习(14.1 基本概念)
当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。明智地使用运算符重载能令我们的程序更易于编写和阅读。举个例子,因为在Sales_item类中定义了输入、输出和加法运算符,所以可以通过下述形式输出两个Sales_item…...
【Goalng】第九弹-----文件操作、JSON处理
🎁个人主页:星云爱编程 🔍所属专栏:【Go】 🎉欢迎大家点赞👍评论📝收藏⭐文章 长风破浪会有时,直挂云帆济沧海 目录 1.文件操作 1.1文件介绍 1.2.文件流 1.3.打开和关闭文件 1…...
锐评|希捷NVMe闪存+磁盘混合存储阵列
近日,希捷在英伟达GTC 2025会议上展示了NVMe混合闪存/磁盘阵列技术。这个混合存储阵列确实在当前AI数据存储困境中撕开了一道新口子,但远称不上完美,优缺点都极为鲜明。 从优点来看,希捷切中了大多数企业的痛点。AI领域数据量呈爆…...
如何缩短研发周期,降低研发成本?全星APQP软件为您提供解决方案
如何缩短研发周期,降低研发成本?全星APQP软件为您提供解决方案 一、 系统概述 全星研发管理APQP软件系统是一款专为产品研发和质量管控打造的智能化平台,旨在帮助企业高效推进APQP(先期产品质量策划)流程,…...
Centos7安装cat美化工具lolcat
Centos7安装cat美化工具lolcat Centos7安装lolcat使用ruby安装lolcat配置cat系统别名 结果验证 Centos7安装lolcat lolcat :一个在Linux 终端中输出彩虹特效的命令行工具 使用ruby安装lolcat # 安装ruby和zip yum install -y ruby# 查看ruby版本 ruby --version# …...
bluecode-20240913_1_数据解码
时间限制:C/C 1000MS,其他语言 2000MS 内存限制:C/C 256MB,其他语言 512MB 难度:困难 数据解码 指定有一段经过编码的二进制数据,数据由0个或多个"编码单元"组成。"编码单元"的编码方式…...
【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的缓存技术:使用 Redis 提升性能
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…...
典范硬币系统(Canonical Coin System)→ 贪心算法
【典范硬币系统】 ● 典范硬币系统(Canonical Coin System)是指使用贪心算法总能得到最少硬币数量解的货币面值组合。 ● 给定一个硬币系统 ,若使其为典范硬币系统,则要求其各相邻面值比例 ,及各开区间 内各金额…...
hbuilderx打包iOS上传苹果商店的最简流程
无需Mac电脑,无需安装xcode和transporter,其实使用hbuilderx开发的ios软件,也可以上架到苹果的app store商店的。 只需要有苹果开发者中心的苹果开发者账号就行了。 假如你还在了解上架阶段,还没打包,也还没有创建任…...
DeepSeek详解:探索下一代语言模型
文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…...
python的内存管理
目录 1. 引用计数 2. 垃圾收集(GC) python的内存管理主要是引用计数和垃圾回收器来进行内存管理 1. 引用计数 每个 Python 对象都有一个引用计数,当引用计数为零时,对象的内存会被释放。 import sysa [] # 创建一个空列表对…...
【STL】list
l i s t list list 是 C C C 标准模板库( S T L STL STL)中的一个序列容器( S e q u e n c e C o n t a i n e r Sequence\ Container Sequence Container),它允许在容器的任意位置快速插入和删除元素,是一…...
证券公司主要业务分析及当前佣金最低免五情况探讨
我是StockMasterX,今日想分析证券公司主要业务,并探讨当前佣金最低且免五的证券公司情况,此议题具有一定研究价值,我从事股票交易多年,与证券公司互动频繁,前日晚间饮茶之际,浏览手机时对此深思…...
C++ 变量的声明与定义分离式编译与静态类型(十六)
1. 声明与定义的区别 声明(declaration):向编译器表明某个变量(或其他实体)的类型与名字,使它在后续的编译过程中可见或可用。定义(definition):除了声明变量的名字和类…...
黑盒测试的等价类划分法(输入数据划分为有效的等价类和无效的等价类)
重点: 有效等价和单个无效等价各取1个即可 1、正向用例:一条尽可能覆盖多条2、逆向用例:每一条数据,都是一条单独用例。 步骤: 1、明确需求 2、确定有效和无效等价 3、根据有效和无效造数据编写用例 3、适用场景 针对:需要有大量数据测试输入, …...
通过Appium理解MCP架构
MCP即Model Context Protocol(模型上下文协议),是由Anthropic公司于2024年11月26日推出的开放标准框架,旨在为大型语言模型与外部数据源、工具及系统建立标准化交互协议,以打破AI与数据之间的连接壁垒。 MCP架构与Appi…...
uWebSockets开发入门
一、常用C++ WebSocket开源库 一些常用的 C++ WebSocket 开源库,它们支持 WebSocket 协议的实现,适用于客户端或服务器端开发。 1. Boost.Beast (推荐) 特点:基于 Boost.Asio 的高性能库,支持 HTTP/WebSocket,属于 Boost 官方库的一部分,稳定且跨平台。 适用场景:需要高…...
Python自动化模块:开启高效编程新时代
一、写在前面 在数字化时代,自动化技术已成为提高效率、降低成本的关键手段。Python 作为一种简洁、高效且功能强大的编程语言,凭借其丰富的库和框架,在自动化领域占据了举足轻重的地位,成为众多开发者的首选工具之一。从简单的文…...
Android7 Input(二)Linux 驱动层输入事件管理
概述 在Linux系统中,将键盘,鼠标,触摸屏等这类交互设备交由Linux Input子系统进行管理,Linux Input驱动子系统由于具有良好的和用户空间交互的接口。因此Linux Input驱动子系统,不止于只管理输入类型的设备。也可以将其…...
前端给后端发送数据时都需要包含哪些内容?(HTTP请求的基本组成部分)
1 [TOC](1)一、**必须传递的内容**1. **URL(请求地址)** 二、**可选内容**1. **请求方法(HTTP Method)**2. **请求头(Headers)**3. **请求体(Body)**4. **其他配置** 技术无关 一、必…...
记录vite引入sass预编译报错error during build: [vite:css] [sass] Undefined variable.问题
vite.config.ts resolve: {alias: {: path.resolve(__dirname, src),},},css: {// css预处理器preprocessorOptions: {scss: {additionalData: use "/assets/styles/block.scss" as *;,}}},block.scss $colorGreen: #00ff00;index.vue :v-deep .font-size-14{colo…...
智慧运维平台:赋能未来,开启高效运维新时代
在当今数字化浪潮下,企业IT基础设施、工业设备及智慧城市系统的复杂度与日俱增,传统人工运维方式已难以满足高效、精准、智能的管理需求。停机故障、低效响应、数据孤岛等问题直接影响企业运营效率和成本控制。大型智慧运维平台(AIOps, Smart…...
【log4j】配置Slf4j
配置Slf4j 引入lombok包 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.36</version><scope>provided</scope> </dependency>引入log4j相关api <dependency…...
静态网页应用开发环境搭建实战教程
1. 前言 静态网页开发是前端工程师的基础技能之一,无论是个人博客、企业官网还是简单的Web应用,都离不开HTML、CSS和JavaScript。搭建一个高效的开发环境,能够极大提升开发效率,减少重复工作,并优化调试体验。 本教程…...
AP 场景架构设计(一) :OceanBase 读写分离策略解析
说明:本文内容对应的是 OceanBase 社区版,架构部分不涉及企业版的仲裁副本功能。OceanBase社区版和企业版的能力区别详见: 官网链接。 概述 当两种类型的业务共同运行在同一个数据库集群上时,这对数据库的配置等条件提出了较高…...
未来村庄智慧灯杆:点亮乡村智慧生活
在乡村振兴与数字乡村建设的时代进程中,未来村庄智慧灯杆凭借其多功能集成与智能化特性,已成为乡村基础设施建设领域的崭新焦点,为乡村生活带来了前所未有的便利,推动着乡村生活模式的深刻变革。 多功能集成:一杆多能…...
MySQL基础语法DDLDML
目录 #1.创建和删除数据库 #2.如果有lyt就删除,没有则创建一个新的lyt #3.切换到lyt数据库下 #4.创建数据表并设置列及其属性,name是关键词要用name包围 编辑 #5.删除数据表 #5.查看创建的student表 #6.向student表中添加数据,数据要与列名一一对应 #7.查询studen…...
利用 VSCode 配置提升 vibe coding 开发效率
利用 VSCode 配置提升 vibe coding 开发效率 Vibe Coding(氛围编程)是一种基于AI的编程方法,其核心在于通过自然语言描述软件需求,再由大规模语言模型(LLM)自动生成代码,从而实现对传统手写编程…...
使用 Chromedp 监听网页请求和响应
使用 Chromedp 监听网页请求和响应 在进行网络爬虫的时候,有很多网站都有反爬机制,比如你想抓点数据,结果发现每次请求都带一堆奇奇怪怪的参数 —— 什么 timestamp 签名、AES 加密的字段,还有各种 Token 令牌,跟密码…...
AB包介绍及导出工具实现+AB包资源简单加载
Resource原理 项目中建立Resources目录,资源导入内部 生成项目包 资源文件存储路径 结论:存储在Resources下的资源,最终会存储在游戏的主体包中,发送给用户,手机系统上,如果需要做资源的更新,是…...
TCP/IP协议簇
文章目录 应用层http/httpsDNS补充 传输层TCP1. 序列号与确认机制2. 超时重传3. 流量控制(滑动窗口机制)4. 拥塞控制5. 错误检测与校验6. 连接管理总结 网络层ARP**ARP 的核心功能**ARP 的工作流程1. ARP 请求(Broadcast)2. ARP 缓…...
vector的模拟实现01
文章目录 vector的模拟实现构造函数析构函数迭代器容量sizecapacityreverse 遍历下标[] 修改push_backpop_backinsert 结语 我们大家有又见面了,给生活加点</font color red>impetus!!开启今天的编程之路 今天我们来学习vector。了解一…...
信息学奥赛一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport
【题目链接】 ybt 1609:【例 4】Cats Transport 洛谷 CF311B Cats Transport 【题目考点】 1. 动态规划:斜率优化动规 【解题思路】 解法1:设a点的前缀和 输入的 d d d序列是从 d 2 d_2 d2到 d n d_n dn,共n-1个数字。人…...
shared_ptr和 weak_ptr的详细介绍
关于 shared_ptr 和 weak_ptr 的详细介绍及使用示例: 1. shared_ptr(共享所有权智能指针) 核心特性 引用计数:记录当前有多少个 shared_ptr 共享同一个对象。自动释放:当引用计数归零时,自动释放对象内存…...
electron打包vue2项目流程
1,安装一个node vue2 的项目 2,安装electron: npm install electron -g//如果安装还是 特比慢 或 不想安装cnpn 淘宝镜像查看是否安装成功:electron -v 3,进入到项目目录:cd electron-demo 进入项目目录…...
Baklib驱动企业知识管理数字化转型
Baklib驱动知识资产激活 在信息碎片化与数据爆炸的产业环境下,企业知识中台正成为重构组织智慧的核心枢纽。Baklib通过构建全生命周期知识管理模型,将分散于邮件、文档及协作系统的非结构化数据转化为可检索、可分析的标准化资产。其内置的智能分类引擎…...
Elasticsearch 高级
Elasticsearch 高级 建议阅读顺序: Elasticsearch 入门Elasticsearch 搜索Elasticsearch 搜索高级Elasticsearch高级(本文) 1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个…...
1--当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南(知识点讲解版)
当「穷举」成为艺术:CTF暴力破解漏洞技术从入门到入刑指南 引言:论暴力破解的哲学意义 “世界上本没有漏洞,密码设得简单了,便成了漏洞。” —— 鲁迅(并没有说过) 想象你是个不会撬锁的小偷,面…...
jdk 支持路线图
https://www.oracle.com/java/technologies/java-se-support-roadmap.html 按照路线图得知,在2025.09 发布openjdk 25,是一个LTS版本。...
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示
VsCode启用右括号自动跳过(自动重写) - 自录制gif演示 前言 不知道大家在编程时候的按键习惯是怎样的。输入完左括号后编辑器一般会自动补全右括号,输入完左括号的内容后,是按→跳过右括号还是按)跳过右括号呢? for (int i 0; i < a.s…...
Android设计模式之模板方法模式
一、定义: 定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、结构: AbstractClass抽象类:定义算法的骨架,包含模板方法和若干…...
纯个人整理,蓝桥杯使用的算法模板day1(dfs、bfs)
算法索引 dfs(深度优先搜索)bfs(广度优先搜索)迷宫树结构 dfs(深度优先搜索) 功能: 适合搜索所有的解 代码模板: class Solution{public void dfs(int[][] graph, int i, int j){i…...
【第34节】windows原理:PE文件的导出表和导入表
目录 一、导出表 1.1 导出表概述 1.2 说明与使用 二、导入表 2.1 导入表概述 2.2 说明与使用 一、导出表 1.1 导出表概述 (1)导出行为和导出表用途:PE文件能把自身的函数、变量或者类,提供给其他PE文件使用,这…...
Spring Boot事务管理详解(附银行转账案例)
一、事务基础概念 事务的ACID特性: 原子性(Atomicity):操作要么全部成功,要么全部失败一致性(Consistency):数据在事务前后保持合法状态隔离性(Isolation)&…...