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

相关推荐
2501_9411118410 分钟前
分布式日志系统实现
开发语言·c++·算法
培风图楠18 分钟前
Java个人学习笔记
java·笔记·学习
梅梅绵绵冰19 分钟前
SpringMVC的配置响应-页面跳转,回写数据
java
A***279519 分钟前
后端服务限流配置,Spring Cloud Gateway
java·运维·数据库
222you20 分钟前
SpringBoot对SpringMVC的整合
java·spring boot·后端
珹洺30 分钟前
Java-Spring入门指南(三十二)Android SQLite数据库实战
java·数据库·spring
刘一说30 分钟前
深入理解 Spring Boot 高级特性:条件化 Bean 注册机制
java·spring boot·后端
Han.miracle38 分钟前
JavaEE ——多线程的线程安全集合类
java·java-ee
未来之窗软件服务44 分钟前
幽冥大陆(二十三)python语言智慧农业电子秤读取——东方仙盟炼气期
开发语言·python·仙盟创梦ide·东方仙盟·东方仙盟sdk·东方仙盟浏览器
不会c嘎嘎1 小时前
C++ -- stack和queue
开发语言·c++·rpc