我目前主要从事软件开发和软硬件结合类项目,接触的技术方向比较广,包括Java后端、Vue前端、Android应用、数据库、服务器部署以及硬件设备对接等。平时做项目时,不只是负责某一个页面或者某一个接口,很多时候会从需求整理开始,一直到功能开发、设备联调、部署上线和后期维护都参与。
后端开发主要使用Java,常用的技术有Spring Boot、Spring MVC、MyBatis、MyBatis-Plus、Spring Security等。能够根据项目需求搭建后端服务,完成用户登录、权限管理、业务数据管理、文件上传下载、消息通知、数据统计、设备管理等功能。
在后端代码设计上,我比较注重结构清晰和后期维护。通常会把接口、业务逻辑、数据库操作和公共功能分开处理,避免所有代码都堆在一起。对于项目中常见的参数错误、接口异常、重复提交、数据状态不一致等问题,也会通过参数校验、统一异常处理、事务控制、日志记录等方式进行处理。
如果项目模块比较多,也接触过Spring Cloud、Nacos、Gateway、OpenFeign等相关技术,可以根据实际情况进行服务拆分、接口调用、统一配置和网关管理。不过在技术选择上,我更倾向于根据项目规模来决定,不会为了使用微服务而强行拆分。中小型项目优先保证简单、稳定和方便维护。
数据库方面主要使用MySQL,能够完成数据库表设计、字段规划、数据关系设计、SQL编写、分页查询和数据统计。开发过程中也会根据查询情况增加索引,处理慢查询、重复查询以及数据量较大时的性能问题。
对于一些访问频繁但变化不大的数据,会使用Redis做缓存。Redis也会用于保存登录状态、验证码、临时数据、任务状态和设备在线状态等。消息队列方面接触过RabbitMQ,主要用于异步任务、消息通知、设备数据处理以及不同服务之间的业务解耦。
前端主要使用Vue,做过Vue 2和Vue 3项目,常用的有Vue Router、Vuex、Pinia、Axios、Vite、Element UI和Element Plus。能够根据原型图或者参考页面完成后台管理系统、数据展示页面、设备控制页面和业务操作页面。
前端常见的功能,例如表格、表单、弹窗、分页、树形菜单、文件上传、数据导出、权限按钮、图表展示等,都可以独立完成。与后端联调时,可以根据接口文档封装请求,处理登录状态、Token失效、接口报错和页面权限等问题。
除了普通后台系统,也做过大屏展示、工业设备界面、平板端页面和车载中控类界面。这类页面除了功能实现,还需要考虑屏幕尺寸、横屏显示、按钮大小、操作习惯和状态反馈,和普通网页项目会有一些区别。
Android方面主要使用Java,也了解Kotlin。能够使用Android Studio开发手机、平板、工业一体机和车载终端应用。做过登录、接口请求、数据展示、文件下载、设备状态显示、后台服务、消息接收、参数配置和版本升级等功能。
针对工业设备或者车载终端长时间运行的情况,也处理过应用开机自启动、全屏显示、横屏适配、前台服务、断网重连、异常恢复和运行日志等问题。部分项目还需要调用设备厂家提供的SDK或者系统接口,完成设备信息读取、系统设置和硬件控制。
硬件对接是我接触比较多的一部分。对接过控制板、传感器、串口设备、蓝牙设备、USB设备和网络设备。常见的通信方式包括RS232、RS485、Modbus、TCP、UDP、WebSocket、MQTT和蓝牙通信等。
进行硬件对接时,一般会先看厂家提供的通信协议,了解指令格式、数据长度、校验方式和返回规则,然后再编写数据发送和解析逻辑。硬件通信过程中经常会遇到数据接收不完整、粘包、拆包、超时、设备掉线、重复返回等问题,这些通常需要结合原始通信日志一点点排查。
对于需要实时显示设备状态的项目,我会把通信模块和页面业务分开处理。通信模块负责连接设备、发送指令和解析数据,页面只负责展示状态和接收用户操作。这样后期更换设备协议或者调整页面时,修改起来会相对简单。
服务器方面,我能够进行Linux系统的基础操作,包括查看日志、检查端口、管理进程、配置文件权限、安装运行环境和排查网络问题。项目部署时经常会使用Nginx、Docker和Docker Compose。
能够完成Java后端、Vue前端、MySQL、Redis、RabbitMQ等服务的部署,也能处理容器网络、端口映射、环境变量、文件挂载、日志限制和自动重启等配置。对于多个容器之间无法访问、宿主机端口不通、数据库连接失败等问题,也有一定的排查经验。
平时开发使用IDEA、Android Studio、VS Code、Navicat、Postman、Apifox等工具。代码管理主要使用Git,可以进行分支创建、代码提交、合并、冲突处理和版本回退。
总体来说,我的技术方向不是只做前端或者只做后端,而是更偏向完整项目开发。普通的管理系统可以完成前后端开发,涉及Android终端和硬件设备的项目也可以参与接口设计、设备通信和现场联调。遇到问题时,我更习惯先通过日志、接口数据和通信数据定位原因,再进行针对性处理。
我参与过的项目类型比较多,主要包括企业管理系统、Android应用、工业终端软件、车载中控系统、设备管理平台、数据采集系统和软硬件结合类项目。
在项目中,我通常会参与需求沟通、功能整理、数据库设计、接口设计、前后端开发、Android开发、硬件联调和服务器部署。有些项目由多人共同完成,我负责其中的主要模块;也有一些规模较小的项目,是从开发到部署基本独立完成。
企业管理系统是接触比较多的一类项目,通常采用Java和Vue前后端分离的方式开发。系统中会包含用户管理、角色管理、菜单权限、业务数据管理、文件管理、数据统计、操作日志和系统配置等功能。
开始开发前,会先根据客户的实际工作流程整理功能。很多客户一开始只能描述自己平时是怎么操作的,并不能直接说出系统应该有哪些模块。这时需要把他们的工作流程拆分成可以开发的功能,确认每类人员可以查看什么、操作什么,以及不同业务状态之间如何流转。
需求明确后,会根据业务内容设计数据库表和接口。对于存在上下级、分类、审批状态或者多角色协作的业务,会提前把数据关系理清楚,避免项目做到后面才发现表结构无法支持。
在权限管理方面,做过角色权限、菜单权限、按钮权限和数据范围控制。例如普通员工只能查看自己的数据,部门负责人可以查看本部门数据,管理员可以查看所有数据。除了页面上隐藏按钮,后端接口也会进行权限判断,避免用户直接调用接口操作无权限的数据。
在业务功能中,也做过Excel导入导出、文件上传下载、批量处理、定时任务、数据统计和消息通知等功能。如果导入的数据量比较大,会先对数据格式进行校验,再分批写入数据库,避免一次性处理导致接口超时。
对于耗时比较长的任务,例如批量文件处理、数据同步或者设备任务,不会让前端一直等待接口返回,而是将任务放到后台执行。前端可以查看任务状态、执行进度和失败原因,出现问题后也可以重新执行。
Android应用方面,做过普通手机应用,也做过平板、工业一体机和车载终端应用。这类项目通常需要和后台系统配合使用,通过接口获取业务数据、上传操作结果或者接收平台下发的任务。
普通Android项目中,主要完成登录、业务列表、详情展示、拍照上传、文件下载、消息提醒和个人设置等功能。工业终端和车载应用则更加关注长期运行的稳定性,需要处理开机启动、全屏显示、横屏布局、后台服务和网络断开后的自动恢复。
部分设备的Android系统经过厂家定制,与普通手机系统存在差异。有些权限可以直接使用,有些功能则需要厂家提供SDK。例如控制设备重启、读取设备编号、控制屏幕亮度或者调用底层硬件接口。在这种情况下,需要根据设备文档和厂家技术人员一起进行调试。
我也参与过车载中控和设备控制类项目。界面上会展示设备当前状态,并提供开关、调节和控制功能。用户点击按钮后,应用不会简单地直接修改界面状态,而是先向硬件发送控制指令,等硬件返回执行结果后再更新页面。
这样可以避免界面显示已经开启,但实际设备并没有执行成功的问题。如果硬件没有返回结果,系统会提示操作超时;如果设备掉线,则会将控制功能暂时禁用,并提示检查设备连接。
硬件对接过程中,会根据厂家提供的协议开发通信功能。例如一条指令中可能包含帧头、设备地址、命令类型、数据长度、具体参数和校验值。程序需要按照协议生成指令,发送给设备,再把设备返回的数据解析成温度、开关状态、传感器数值或者故障信息。
实际联调时,经常会遇到文档与设备返回数据不完全一致的情况。此时需要结合发送日志、接收日志和实际设备状态逐项确认。有时问题出在软件解析上,有时是硬件固件问题,也有可能是通信线路不稳定。
对于串口或者网络通信,我会增加心跳检测、超时判断、断线重连和错误日志。数据接收时会先放入缓冲区,再根据帧头和数据长度进行拆包,避免一次接收到多条数据或者只接收到半条数据时解析失败。
在物联网设备平台项目中,做过设备添加、设备绑定、在线状态、数据上报、远程控制、告警记录和运行日志等功能。平台需要同时管理多台设备,并根据设备编号区分每台设备的数据。
设备上线后会定期发送心跳,平台根据最后一次通信时间判断设备是否在线。设备上报数据后,后台会进行格式校验和数据保存,同时把最新状态推送到管理页面。管理人员在网页上发送控制指令后,平台再将指令转发给对应设备。
如果设备数量较多,所有数据都直接写入数据库会造成较大压力,因此部分实时状态会先保存在Redis中,重要数据和历史记录再写入数据库。一些不需要立即完成的任务,则通过消息队列异步处理。
第三方平台对接也是项目中的常见内容。对接过地图、短信、文件服务和其他业务系统。对接前会先确认对方接口的请求方式、鉴权方式、签名规则、参数格式和错误码。
开发完成后,不只是确认接口能够正常调用,还会处理超时、返回数据为空、Token失效和第三方服务异常等情况。重要接口会记录请求和返回日志,方便出现问题时判断是本地系统问题还是第三方平台问题。
在服务器部署方面,我可以独立完成前端、后端和相关服务的部署。项目规模较小时,可以直接在Linux服务器上部署;项目服务较多时,则会使用Docker或Docker Compose。
部署内容一般包括Java服务、Vue前端、MySQL、Redis、RabbitMQ、Nginx和设备通信服务。部署时需要配置数据库地址、服务端口、文件目录、日志目录和环境参数,还要处理容器之间的网络访问。
项目上线后,如果出现接口无法访问、服务自动退出、数据库连接失败或者容器之间无法通信等问题,我会通过系统日志、应用日志、容器日志、端口状态和网络连接逐步排查。
在团队协作中,我会提前和前端、后端、Android及硬件人员确认接口格式和通信协议,减少联调过程中反复修改。接口发生变化时也会及时更新文档,避免不同人员使用不同版本的数据格式。
项目交付前,会对主要业务流程、用户权限、异常操作、设备通信和断网情况进行测试。交付后也会根据客户实际使用情况继续修改功能、解决问题和发布新版本。
这些项目经历让我对一个系统从需求到落地的整个过程比较熟悉。除了写代码以外,也能够处理接口联调、设备通信、现场问题和服务器部署。面对不熟悉的设备或者业务时,我通常会先把流程和协议弄清楚,再逐步完成开发和验证。
| 角色 | 职位 |
| 负责人 | 高级JAVA开发工程师 |
| 队员 | iOS工程师 |
| 队员 | 安卓工程师 |
| 队员 | 前端工程师 |
| 队员 | 后端工程师 |