
1) 【一句话结论】:为船代现场操作人员设计的移动端应用,核心功能模块需覆盖船舶动态管理、单证全流程处理、现场操作安全记录及实时协同通信;技术栈推荐前端用React Native(跨平台+离线缓存支持),后端用Spring Boot(高并发处理+缓存优化),数据库用MySQL(结构化数据存储)+MongoDB(非结构化日志存储),理由是平衡开发效率、性能与业务复杂度,适配现场离线工作与实时交互需求。
2) 【原理/概念讲解】:老师口吻解释。首先,功能模块设计需满足现场离线工作场景,因此必须设计离线缓存机制。
技术栈选择理由:
3) 【对比与适用场景】:
前端技术对比:
| 技术名称 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| React Native | Facebook开发的跨平台框架,用JavaScript开发原生组件 | 跨平台(iOS/Android),代码复用率约70%,社区生态成熟(如React Native社区、第三方库) | 需要原生APP,对性能要求较高,且需离线功能 | 部分原生功能需开发Native Modules(如复杂地图、摄像头) |
| Flutter | Google开发的UI工具包,用Dart语言 | 自绘UI,性能接近原生,热重载快速迭代,UI自定义性强 | 对UI性能要求极高,且需快速迭代 | 生态相对较新,部分库支持度不如React Native |
后端技术对比:
| 技术名称 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Spring Boot | 基于Spring框架的简化框架,自动配置 | 开发效率高(开箱即用),集成Spring全家桶(Spring MVC、Spring Data),易于维护 | 企业级应用,复杂业务逻辑(如权限、事务) | 对Java知识要求高,高并发下需异步处理(@Async) |
| Go | Google开发的静态强类型语言 | 并发性能高(Goroutine),编译速度快,内存占用低 | 高并发API网关、微服务 | 生态相对较新,库较少,适合轻量级服务 |
数据库技术对比:
| 数据库名称 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| MySQL | 关系型数据库,遵循ACID | 结构化数据存储,事务支持,性能稳定(如索引优化) | 业务核心数据(船舶信息、单证、用户信息) | 非结构化数据存储效率低,需扩展 |
| MongoDB | NoSQL数据库,文档型 | 非结构化数据存储,灵活(如JSON文档),支持高并发读写 | 日志数据、操作记录、用户行为数据 | 事务支持较弱(多文档事务),适合非强一致性场景 |
4) 【示例】:前端离线请求示例(IndexedDB缓存):
前端(React Native)请求(离线时从本地缓存获取):
GET /api/shipments?lastSync=2023-11-01T10:00:00Z
Authorization: Bearer <token>
后端处理(Spring Boot):
@RestController
@RequestMapping("/api/shipments")
public class ShipmentController {
@Autowired
private ShipmentService shipmentService;
@Autowired
private CacheManager cacheManager;
@GetMapping
public ResponseEntity<List<Shipment>> getShipments() {
List<Shipment> shipments = cacheManager.get("shipments", () -> {
return shipmentService.findAll();
});
return ResponseEntity.ok(shipments);
}
}
数据库表(MySQL):
CREATE TABLE shipments (
id INT PRIMARY KEY AUTO_INCREMENT,
shipName VARCHAR(100) NOT NULL,
arrivalTime DATETIME,
cargoType VARCHAR(50),
status VARCHAR(20)
);
日志表(MongoDB):
{
"operationId": "OP123",
"operator": "张三",
"timestamp": "2023-11-01T11:00:00Z",
"action": "靠泊操作",
"details": "船舶编号:S001,靠泊时间:11:00"
}
5) 【面试口播版答案】:各位面试官好,为船代现场操作人员设计的移动端应用,核心功能模块需围绕船舶动态管理、单证全流程处理、现场操作安全记录及实时协同通信。具体来说,船舶动态管理模块用于实时查询船舶靠泊、货物装卸等状态,离线时本地缓存数据;单证处理模块支持提单、舱单等单证的上传、审核,需操作员角色权限控制;现场操作记录模块记录靠离泊、货物装卸等操作,包含操作人员身份验证和时间戳,确保可追溯;实时通信模块与船方、货主实时消息,通过消息重传机制保证可靠性。技术栈方面,前端用React Native,因为它能同时开发iOS和Android,且能集成IndexedDB实现离线缓存;后端用Spring Boot,Java生态成熟,通过@Async异步处理高并发请求,Redis缓存热点数据;数据库用MySQL存储结构化数据(如船舶信息、单证),MongoDB存储非结构化日志(操作记录),这样既能满足现场离线工作需求,又能保障实时通信的稳定性和业务数据的高效存储。
6) 【追问清单】:
7) 【常见坑/雷区】: