KVSTORE_Pain point_tuchuang_ROS2

strdup() 会在堆上分配新内存来复制字符串


面试官:在主从同步中遇到过什么印象深刻的问题?

候选人 :印象最深的是僵尸连接问题。从节点异常断开后,主节点还保留着dead socket,导致文件描述符泄漏。通过lsof发现大量CLOSE_WAIT状态连接后,我用getsockopt实现了健康检查机制,在每次广播前检测连接状态,死连接立即清理,解决了资源泄漏问题。

智能指针的使用:


问题本质 :在异步编程中,你的主线程 创建了一个对象来处理请求,然后把这个任务扔给工作线程 。在工作线程开始处理时,主线程中的那个原始对象可能已经被销毁了

工厂只负责"制造",调用方负责"使用和销毁"

unique_ptr 就是这个"交接仪式"的契约:工厂交出去就说"归你了",调用方拿到就说"我负责"。

逻辑关系:


1. 复杂的对象生命周期

一个TCP连接涉及多个对象:ConnectionSessionRequestResponse等,它们的生命周期相互交织。

问题本质 :在异步编程中,你的主线程 创建了一个对象来处理请求,然后把这个任务扔给工作线程 。在工作线程开始处理时,主线程中的那个原始对象可能已经被销毁了


三个主人共享访问同一个物理对象,一个修改,大家立即看到变化,所有人放弃,对象才被销毁

因为文件上传上下文的特性:

  • 每个上传应该是独立的

  • 上传状态、进度、错误处理都是独立的

  • 一个上传失败不应该影响其他上传

  • 上传完成就应该立即释放资源

如果用共享模式

  • 多个上传会互相干扰

  • 一个上传出错可能导致所有上传失败

  • 资源不能及时释放

IMS系统项目:多存储文件系统

配置文件("fastdfs")

main.cc(初始化)

→http_handler(解析multipart) //连接存储 connect-》"/etc/fdfs/client/conf"

→file_upload_context(状态管理) ==》委托给存储后端

→storage_factory(创建FastDFs实例)

→fastdfs_backend(调用C API存储)

→返回文件URL

→存储元数据到MySQL

→返回结果给客户端

配置文件("MinIO")

main.cc(初始化,读取配置)

→ http_handler(文件上传解析multipart)

→file_upload_context(状态管理,委托给存储后端)

→storage_factory(工厂动态创建后端MinIO实例)

→MinIO后端初始化

→MinIO连接建立.connect() //解析配置项

→调用后端minIO的API(uploadBlock),文件上传数据块处理

→完成上传到MinIO 调用finishupload

→生成访问url和文件消息

→元数据存储到数据库,资源清理

配置文件("cos")

main.cc(初始化,读取配置)

→ http_handler(文件上传解析multipart)

→file_upload_context(状态管理,委托给存储后端)

→storage_factory(工厂动态创建后端cos实例)

→cos后端初始化

→cos连接建立.connect() //解析配置项

→generateobjectkey()生成对象键

→调用后端cos的API(uploadBlock),文件上传数据块处理

→完成上传到cos 调用finishupload

→生成访问url和文件消息

→元数据存储到数据库

ROS2:bug

这是一个基于Gazebo仿真的TurtleBot3机器人智能控制系统。系统包含三个主要模块:键盘交互处理、机器人安全控制和传感器数据处理,在仿真环境中完成了从用户输入到智能执行的完整闭环。

  • 上层-交互层:键盘控制,处理用户输入和模式切换

  • 中层-决策层:机器人控制,综合传感器数据做安全决策

  • 下层-感知层 :传感器处理,分析激光数据感知环境

面向面试官的表述

"我遇到过一个机器人失控打转的问题,根本原因是沿墙算法没有处理'看不到墙壁'的边界情况。通过系统化的日志分析和PID控制理论,我发现是积分项累积导致的控制发散。解决方案包括边界情况处理、积分限制和多层次安全保护,这个经历让我深刻理解了鲁棒控制的重要性。




分享文件:解析url请求--》解析cmd参数--》生成文件分享标识url md5,时间--》插入数据库-》返回json格式

浏览分享图片:解析url请求--》解析cmd参数--》查询分享记录--》查询文件实际url--》更新访问计数+1---》json格式响应

获取共享文件总数:解析url请求--》解析cmd参数--》查询共享文件总数-》返回json格式

获取共享文件列表:解析url请求--》解析cmd参数--》获取文件总数-》分页查询---》返回json格式

取消文件分享:解析url请求--》解析cmd参数--》更新用户文件共享状态为0--》删除分享记录--》从redis有序删除文件--》redis哈希表删除文件名的映射--》json格式响应

转存文件:解析url请求--》解析cmd参数--》检查文件是否存在--》查询文件的引用计数--》更新文件的引用计数--》插入记录到用户文件列表

更新文件下载计数:解析url请求--》解析cmd参数--》查询共享文件的当前pv值--》更新MYSQL中的pv值----》检查redis是否有该文件--》不存在从MYSQL导入,设置+1

相关推荐
刘火锅4 小时前
Java 17 环境下 EasyPoi 反射访问异常分析与解决方案(ExcelImportUtil.importExcelMore)
java·开发语言·python
cyyt4 小时前
深度学习周报(10.20~10.26)
1024程序员节
朝新_4 小时前
【SpringBoot】详解Maven的操作与配置
java·spring boot·笔记·后端·spring·maven·javaee
西部风情4 小时前
聊聊连续、递增
java·开发语言
蒙娜丽宁4 小时前
Rust 并发编程进阶:线程模型、通道通信与异步任务对比分析
开发语言·网络·rust
Mcband4 小时前
IDEA Debug高阶技巧
java·ide·intellij-idea
学Java的bb4 小时前
RabbitMQ-高级
1024程序员节
又是忙碌的一天5 小时前
java字符串
java·开发语言
Hi202402175 小时前
Qt+Qml客户端和Python服务端的网络通信原型
开发语言·python·qt·ui·网络通信·qml