我的面试题. 业务抽象能力测试.


1. public enum Status {
    TRADE(3, "交易中"),
    PAY(4, "支付中"),
    CANCEL(5, "取消"),
    ONLINE_PAYED(6, "线上支付成功"),
    CASH_PAYED(7, "现金支付成功"),
    CASH_FINISH(8, "现金完成"),
    ONLINE_FINISH(9, "在线完成"),
    ADJUSTING(10, "订单调价中");
2.怎么理解业务中的状态. 什么情况下你会用一个字段,什么情况下你会用两个字段.
 状态和流程有什么关系.

3.说说你之前工作模块.小模块内部有模块划分么 看到这种语句,从模块化的角度你有什么想法

    class A xxxx{

       public A(){

            currentThread = new B(this);

       }

    }

4.你们的代码结构有反应模块划分么,如何区分模块边界.

5. 订单流. 司机状态,乘客状态.
理论上司机状态是基于订单状态计算的. 现在搞了两个字段维护: 订单状态和司机状态, 会导致数据不一致的情况发生. 这样的设计需要:
1.司机发起任何操作之后,不仅要判断司机状态和订单状态. 而且要校验二者的一致性.
2. 维护这两个字段的系统要定时检查数据一致性,并修复.
不然司机端只需要关闭端,重新打开即可.从服务端打开.

司机端的页面锁也是挺奇怪的方案. 司机端处于什么页面,都是有服务端自己决定的. 司机端自己加锁,就要保证和服务端的每个接口要保证幂等性. 当端和服务端状态不一致. 并且服务端的状态已经处于端上状态+动作的下一个状态.那么久应该返回成功,而不是返回错误码.

故:1.所有接口要对端锁的做幂等返回 2.维护方要提供一个checkAndSyncOrderStateAndDriverState()方法.供每一次调用使用.

你可能感兴趣的:(架构)