大家好,这次为大家分享的是关于物联网云平台开发岗位面试,这是一篇关于更加面向项目和技术的面经详解
面试岗位:物联网云平台开发工程师
💼岗位职责:
- 负责物联网云平台框架搭建、架构规划与设计,以及架构优化方案。
- 承担代码编写任务,设定规范和标准,并排查隐患。
- 进行高并发、高可用、高承载设计。
- 主导云平台系统的维护、迭代升级。
- 持续优化公司后端服务的可用性、伸缩性、稳定性。
- 负责存储系统和海外支付系统开发。
📋任职要求:
- 精通 Golang 语言,拥有五年及以上业务云平台开发经验;熟练掌握 MySQL 数据库,具备 MySQL 索引优化、查询优化能力;精通多种非关系型数据库如 redis、kafka,了解其使用场景及限制。
- 精通数据结构和算法,深入理解 golang 并发编程原理,熟悉常用网络开发框架;精通分布式系统,掌握多种服务框架和消息中间件并了解其实现原理。
- 具有大规模分布式系统的设计和开发经验,能独立完成系统设计及开发。
- 有云存储、海外支付系统开发经验,熟悉 linux 下 c/c++开发技术者优先。
- 对音视频开发技术熟悉者优先。
✨面试问题回顾:
一、自我介绍
在这个部分,你需要简洁明了地介绍自己的专业技能、工作经验和项目成果,突出自己与岗位的匹配度。
二、项目业务及难点解决
- 项目的业务是什么?怎么做的?难点在哪?如何解决?
- 消息队列:曾遇到数据倾斜问题,为确保数据不丢和避免重复消费,采取了相应措施。
- redis:使用 hash 以及 Pipline,对 bigkey 进行拆解。
- 数据库:进行性能优化,采用分库分表策略。
三、离职原因
以自己的情况阐述自己离职的真实原因,要真诚且合理。
四、redis 分布式锁实现
我们使用 SET key value NX PX milliseconds
命令来实现分布式锁。
其中:
NX:只有当key不存在时才会设置成功
PX milliseconds:设置key的过期时间为毫秒
这样可以保证在分布式环境中,同一时间只有一个客户端能获取到锁。同时,通过设置过期时间,可以避免因为客户端崩溃导致的死锁问题。
五、设备控制率为何不是 100%
主要是固件存在问题,有 bug。
六、500 万台设备有多少机器
采用了无服务和微服务混合架构。对于MQTT服务,我们使用了5台高性能服务器。这种架构允许我们在保持高可用性的同时,有效地管理大量设备。
七、MQTT 鉴权流程
我们使用AWS的API服务进行鉴权。具体流程如下:
- 设备连接时,发送认证请求到AWS API Gateway
- API Gateway调用Lambda函数进行身份验证
- 验证通过后,返回一个临时token给设备
- 设备使用这个token连接MQTT broker
这种方式既保证了安全性,又提高了系统的可扩展性。
八、云端如何控制权限
借助AWS服务的权限管理来实现云端权限控制。
九、APP 如何连接 MQTT
MQTT 是一种基于发布/订阅模式的消息传输协议,需要对客户端进行鉴权,以确保只有合法的客户端才能连接到服务器并发布和订阅消息。登录成功后生成鉴权文件,然后进行连接。
十、APP 发指令,如何判断有操控权限
利用 MQTT 的权限管理机制。MQTT 服务器可以针对不同的用户、设备和主题设置特定的权限。当 APP 尝试发送指令时,MQTT 服务器会根据预先设定的权限规则进行检查
十一、app 给别的设备发指令,如何拦截
当 APP 尝试给未添加的设备发送指令时,MQTT 服务器会根据其权限管理规则进行判断。如果该设备不在 APP 用户的授权范围内,即未被添加到用户可操作的设备列表中,服务器会返回错误信息,从而实现拦截。
十二、用户调接口如何鉴权
使用 Token
进行鉴权。Token
是一种由服务器生成的加密字符串,包含了用户的身份信息和权限等内容。当用户首次登录系统时,服务器会根据用户的身份验证结果生成一个 Token
,并将其返回给用户。用户在后续调用接口时,需要将 Token
作为参数传递给服务器。
十三、不传密码校验
主要通过 Token
实现,具体细节可能因情况而异。
十四、给 app 推送消息怎么实现的
对于 iOS 平台,使用标准的 Apple Push Notification Service(APNS)。
对于 Android 平台,使用 Google 提供的一套推送服务。其中,最常用的是 Firebase Cloud Messaging(FCM)。
十五、gtoken 是怎么实现的,使用了什么加密算法
调用接口后直接保存至 redis,具体加密算法不太清楚。可能因不同的系统实现而有所差异。
十六、一张表有 100 万数据量,1s 可以支持多少次查询?
一般来说,这个问题的答案很大程度上取决于服务器配置、表结构、索引设计等因素。在我们的系统中,经过优化后,一张百万级数据量的表可以支持1000多并发查询。
十七、介绍一下差分升级
其主要思路是对比两个不同版本的软件,找出它们之间的差异部分,然后只传输和应用这些差异内容,而不是整个新版本的软件,从而大大减少升级所需的数据量和时间。
十八、保障升级安全
通过设备校验和升级包校验来保障升级安全。
十九、数据库死锁发生的场景
通常在大事务以及很多读写操作同时进行时会发生数据库死锁。
二十、go 内存泄漏
Go语言虽然有垃圾回收机制,但仍然可能发生内存泄漏。常见的场景包括:
- 全局变量引用不释放
- 协程泄露(goroutine leak)
- 调用C代码时没有正确释放内存
- 时间驱动事件未正确停止
- 大量使用defer在长期运行的程序中
- 等
二十一、反问环节
- 业务:公司主要从事安防业务。
- 上班时间:10 点到晚上 8 点。
如果你正在准备物联网云平台开发岗位的面试,希望这篇文章能对你有所帮助。祝大家都能顺利拿到心仪的 offer!