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

相关推荐
leonkay几秒前
Golang语言闭包完全指南
开发语言·数据结构·后端·算法·架构·golang
Allnadyy10 分钟前
【C++项目】从零实现高并发内存池(一):核心原理与设计思路
java·开发语言·jvm
雅欣鱼子酱16 分钟前
Type-C供电PD协议取电Sink芯片ECP5702,可二端头分开供电调整亮度,适用于LED灯带户外防水超亮灯条方案
c语言·开发语言
浑水摸鱼仙君18 分钟前
SpringSecurity和Flux同时使用报未认证问题
java·ai·flux·springsecurity·springai
一叶飘零_sweeeet24 分钟前
Java 线程模型底层解密:从内核原理到生产级架构选型,全链路实战指南
java· java线程模型
似水明俊德34 分钟前
07-C#
开发语言·c#
am心1 小时前
企业开发项目流程记录
java
浩子智控1 小时前
python程序打包的文件地址处理
开发语言·python·pyqt
Jackey_Song_Odd1 小时前
Part 1:Python语言核心 - 序列与容器
开发语言·windows·python
Elnaij1 小时前
从C++开始的编程生活(20)——AVL树
开发语言·c++