业务设计和思路 能力 应该如何提高呢 一哥

来源:2-8 使用 try finally 资源泄露隐患

安然2015

2020-10-02

一哥好,我在实习中有一个需求,抽象之后 有些类似 优惠券系统里面的一些功能。我看到了您有一门优惠券系统设计的课程,但是我看目录里没有涉及到 我下面将要涉及到的问题,我还未买那门课。我是第一次买您的课,所以借此机会在这里向您请教一个问题。

假如优惠券系统需要增加这么一个

“自动催促使用优惠券 配置中心“

1.基于优惠券截止时间的 提醒
优惠券过期前_ x__天 触发消息提醒,提醒间隔时间 为_y_天,最大提醒次数为_z_次。一旦优惠券过期,便不再提醒。

2.基于 优惠券领取时间的 提醒
优惠券领取_m_天后 触发消息提醒,提醒间隔时间 为 _n_天,最大提醒次数为_p_次。一旦优惠券过期,便不再提醒。

我自己的思路是这样。不知道是否合理 以及一哥的思路是什么?
如果设定的是规则1 那么定时任务每天都会去 用户-优惠券 表中 去查询 优惠券截止时间-当前时间<x的 用户id,然后消息提醒系统会被触发。

如果设定的是规则2 那么定时任务每天都会去 用户-优惠券 表中 去查询 当前时间-优惠券领取时间>m的 用户id,然后消息提醒系统会被触发。

我有几个不太清晰的点:

  1. x y z和 m n p 这几个参数是否需要存储在 单独的一张表里? 表的几个关键字段为
    提醒类型
    提醒时间
    提醒间隔
    提醒次数

2.查到了要发送消息的 对象用户 集合后,怎么实现 对他们 发送 有间隔时间 和 提醒次数 的消息呢?是要定义一个 消息类吗? 属性有 消息对象 消息间隔时间 消息提醒次数吗。不知道这样是否正确

3.我实习的过程中,感觉遇到的困难有很多,比如不知道中间件怎么用,比如排查bug等等。但是我感觉最大的困难在于 需求来了,不知道 功能应该怎么去设计,代码应该怎么去写(比如上述的优惠券系统的例子)。这让我很沮丧,我上网搜索了很多,比如下面的截图,可是我发现 似乎没有找到 具有参考性的代码或者 实用的思路。
图片描述
**我其实是想问两个问题:**一,对于这种业务设计,有没有推荐的学习途径(可以是书,也可以是课程,异或其他) 二,真正工作中,碰到不会做的业务需求,应该怎样去需求答案(毕竟也没有人可以一直辅助)

**

除了上述具体问题的疑惑

**,我还想请教您一下 在一哥您看来,我有这些问题的背后 是欠缺了什么能力,以及日后可以如何的改进和进步。想听听您的建议

说了这么多 也不知道有没有表述清楚 还望一哥海涵!

写回答

1回答

张勤一

2020-10-03

安然你好:

    你这里所说的问题以及个人在职业生涯中的疑问我很清晰了。我先去解释下怎么设计你所说的优惠券提醒功能。其实,这里所说的两个问题都是一样的,或者说类似的,实现了一个,另一个照猫画虎即可。

    如何实现:优惠券过期前_ x__天 触发消息提醒,提醒间隔时间 为_y_天,最大提醒次数为_z_次。一旦优惠券过期,便不再提醒。

    由于需要记录一些提醒的信息,比如间隔时间、最大提醒次数,那么,一定需要有地方去存储这些累加的记录信息。用什么呢?MySQL 吗?我这里觉得 MySQL 并不好,用 Redis 最好。为什么呢?因为提醒的是用户,那么,针对哪些用户的提醒,你需要去记录吧。那么,无疑,这会导致 MySQL 中记录了太多的数据。而 Redis 则不会了,我个人觉得这个需求,1个 map 就搞定了。(就是去记录你操作过的数据,新增以及累加)

    推送消息怎么设计消息类,这个其实是看推送系统的,它们需要什么样的消息,你对应填充就好,不需要你来设计的。一般的推送消息,至少要求你的消息中包含有这样的几类信息:

    (1)用户标识(userId、手机号码、邮箱、手机的 Mac 地址等等),用于确定推送消息发给谁

    (2)消息体,用于确定需要发送什么消息给用户

    (3)推送时间,用于告诉推送系统哪个时间发给用户

    当然,并不是说所有的推送系统都是这样要求的,我这里给出的只是“消息体”的最小需求。


    那么,第二个问题,怎样提高业务设计能力呢?

    你这里说的一个点很重要,你是应届学生,目前还在实习。我可以肯定的告诉你一句话:“纸上学来终觉浅,绝知此事要躬行”。大学课本里面的东西,相对来说,老旧、过时,且仅仅存在于理论层面。到真正的企业中做企业级开发,不会、不知道、不懂,是再正常不过的事情了。这个千万不要去抱怨和沮丧,我刚刚走出校门的时候比你还差!

    任何事情都需要时间的,会设计业务实现肯定需要你有足够的经验,你想想,如果你之前做过这个事,那么,我再让你做一遍,是不是就会了,就很简单呢?

    其实,你在做企业级开发时,做多了之后,你会发现,万物都是相通的,这个、那个,不都是一回事。所以,之所以你遇到这个问题,是因为刚刚走出校门,还没有做过太多的事情,或者说没做过事情。我个人的建议是好好学习基础,如果是 Java 方向,那么,Java 语言、Spring、SpringMVC、SpringBoot 将会是 Java 体系学习和应用的必经之路。而企业级的项目的话,目前对你来说还是太早了,你不一定能够接受。听我说,先搞好基础,再做好企业里面简单的开发,然后再去考虑实战型的课程。

    有问题,随时在问答区问我,我的优惠券课程先不要买,那个课程有点难度,先把基础打好。


    我是勤一,致力于将这门课程的问答区打造为 Java 知识体系知识库,Java 知识体系 BBS!共同建造、维护这门课程,我需要每一个你!

2
1
安然2015
非常感谢!
2020-10-03
共1条回复

Java实操避坑指南 SpringBoot/MySQL/Redis错误详解

掌握业务开发中各种类型的坑,,Java web开发领域通用

452 学习 · 204 问题

查看课程