简单场景问题

39 阅读3分钟

前言

5题。

微信支付流程?

整个微信支付流程涉及到三个角色:微信小程序服务端微信平台

  1. 首先,由小程序发起下单请求到服务端服务端生成订单保存到数据库后,将订单号返给前端

  2. 然后,小程序会向服务端发起支付请求,这个请求中会携带着订单号

  3. 服务端根据订单号查询到订单信息后,开始调用微信下单接口从微信平台获取预支付交易标识

  4. 服务端需要将预支付交易标识进行签名之后组装成支付参数,回传给小程序小程序就会弹出支付窗口

  5. 用户通过小程序微信平台付款,并可以获取到支付结果,进行显示

  6. 微信平台还会将订单支付结果推送给我们的后台程序,后台程序需要修改订单状态

Excel有哪些技术方案?

Excel技术方案有:ApachePOIEasyExcel等,EasyExcel是在POI的基础上进行二次开发的。

  1. POI的封装度较低,使用时需要写大量的代码,并且性能也比较低,同时它是对文档一次性导入,容易导致内存溢出;

  2. EasyExcel的封装度比较高,使用起来比较方便,而且它是一条条导入数据,不会导致内存溢出。

在实际开发中,更倾向于使用稳定性更好的方案,所以一般选择EasyExcel作为Excel的导入导出技术方案。

数据统计模块都有哪些统计的维度?

可以考虑以下三个方向:

  • 时间维度
  • 地理维度
  • 用户维度

比如你在京东下了一个订单但是没有支付,30分钟后这个订单过期了,如何关闭订单?

Redisson是一个基于redis实现的Java驻内存数据网格,它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。

Redisson除了提供我们常用的分布式锁外,还提供了一个分布式延迟队列RDelayedQueue,他是一种基于zset结构实现的延迟队列,其实现类是RedissonDelayedQueue

public interface RDelayedQueue<V> extends RQueue<V>, RDestroyable {
    /**
     * Inserts element into this queue with specified transfer delay to destination queue.
     * @param e the element to add
     * @param delay for transition
     * @param timeUnit for delay
     */
    void offer(V e, long delay, TimeUnit timeUnit);

    /**
     * Inserts element into this queue with specified transfer delay to destination queue.
     * @param e the element to add
     * @param delay for transition
     * @param timeUnit for delay
     */
    RFuture<Void> offerAsync(V e, long delay, TimeUnit timeUnit);
}
  • 优点:使用简单,并且其实现类中大量使用lua脚本保证其原子性,不会有并发重复问题。

  • 缺点:需要依赖redis(如果这算一种缺点的话)。

总结Redissonredis官方推荐的JAVA客户端,提供了很多常用的功能,使用简单、高效,推荐大家尝试使用。

什么是QPS?

QPSQueries Per Second)是每秒查询率,用于衡量系统在单位时间内能够处理的请求数量。