项目描述:Uber
了解“Uber”的简要介绍,并学习本项目中我们将实现的功能。
简介
Uber 是全球最大的网约车公司。除了核心的乘客接送服务外,他们还提供食品和物品配送等服务。其用户群体(包括消费者和司机)正在迅速增长。因此,Uber 的工程团队持续探索更高效的方法,以将附近的司机合理分配给用户。
本章讨论的场景和问题聚焦于高效司机分配功能,并探讨如何对其进行优化。
问题描述
假设你是 Uber 工程团队的一名开发者。团队正计划对司机派单流程以及客户端应用的可访问性功能进行优化,特别关注雨天情况下的司机分配效率。
当用户请求乘车时,系统首先会筛选出距离用户最近的司机。接着,系统将从每位司机的位置出发,规划通往用户位置的路径,并判断司机是否能够顺利抵达上车点。
城市地图被划分为多个检查点,每两个检查点之间的通行存在一定的成本。我们将计算每位司机通过多个检查点到达用户位置所需的总成本。该成本取决于路径上各检查点之间积聚的雨水量。最终,选择路径总成本最低的司机为该用户提供服务。行程结束后,系统需计算车费,并更新可访问性插件,将费用金额以语音形式播报出来。此外,为了帮助新司机快速上手,我们将为其推荐那些找到订单概率较高的路线。同时,我们还将调整排名机制,让低排名司机也有机会成为高评分司机。
功能需求
为实现上述功能,我们需要引入以下特性:
-
功能 #1: 在用户附近至少选出 n 名最近的司机,排除距离过远的司机。
-
功能 #2: 计算在受降雨影响的城市中,两点之间路径上的最大积水深度。
-
功能 #3: 为每位司机从当前位置到用户位置规划一条路径,并计算出行成本,以便选出成本最低的司机。
-
功能 #4: 将计算出的车费转换为英文单词,使系统能够识别并处理。
-
功能 #5: 实现拼车功能,允许司机同时搭载多位乘客。当司机接上拼车乘客后,系统应为其推荐一条可能遇到更多拼车乘客的路线。
-
功能 #6: 引入城市中最长的路线,以最大化发现乘客的可能性。
-
功能 #7: 不再总是优先选择高排名司机,而是智能匹配司机与乘客,使高排名司机更有可能被选中,但低排名司机也应有一定机会被分配任务。
-
功能 #8: 为司机找到前往乘客位置的最短路径。
理解这些功能需求并设计相应的解决方案,有助于我们将所需功能成功集成到 Uber 系统中。
在接下来的课程中,我们将讨论这些功能的推荐实现方式。在开始之前,建议你先思考如何实现这些功能。在思考过程中,你会意识到需要解决的一些底层问题。而这些问题的解决方案,同样适用于许多常见的编程面试题。