最近面试,经常被问到一个模块该怎么设计?

为什么都喜欢问这么虚的问题?
这个“模块”到底是指一个微服务,还是说一个功能,还是一个jar包呢?
怎么才能回答好这个问题,从哪些方可以作为切入点呢

比如说我开发一个外卖管理后台的项目,就有员工表,餐品分类表等不同实体的表格,其中开发员工表对应内容的功能叫做设计员工模块,设计餐品分类对应表的功能叫开发餐品分类模块。设计一个模块的一般步骤如下:
1.设计并创建编写相关模块的数据库表
2.new model创建一个新的模块,然后导入相关的依赖
3.编写数据库配置文件,然后根据技术选型配置好开发环境,比如spring整合springmvc的配置,spring整合mybatis的配置等
4.编写dao层:创建对应模块表实体类和相关dao,maoper接口
5.编写service层:创建编写对应模块服务类,通过mapper代理调用dao层数据库操作接口
6.编写controller层:在controller层中编写对应的增删改查方法,调用service层
7.功能测试

没有标准答案的问题,才是比较考验人的过往经验,这不,你也感觉无从回答。
一般期望看到这些方面,当然具体回答多少就看考官的能力和面试者能力了,都是没问题的。这里的模块,按自己经验假设就好了,按以往做的多的规模就可以。
1、开发流程;以往是怎样开发一个模块的;有些是直接上代码,有些是做需求分析,再设计,还有第概要和详细之分;那么更有些还会各阶段评审,有批准等;按自己掌握和参与的经验回答就行,不然一细问就漏;
2、设计的流程或方法;一般简单点就是画个图,描述一个实现方法;大一点规模,可能需要需求分解,目标分析,场景分析,再到功能,特性划分;一个比较好用的就是领域驱动设计(Domain-driven design),当然大规模的需要很综合的方法和知识;
3、考虑的方面;设计时就批较抽像,考虑要全面一些,比如功能,性能,稳定性,扩展性,还有存在那些影响等,可以举个例子讲一讲;
4、思路获得的能力;当然一个好的设计,可以是自己搞出来;更多还要去找相关模块的沟通,然后再重构;沟通方式,与那些人沟通等;
5、技能的全面或深度情况;这个就比较泛了,看你做的方向;软件的话,编程语言特点的应用,数据库的选择,模块之间通信或网络协议选择的,技能全面的话考虑比较全面。

当然,有多少说多少,并不是面试官也并不是要全部,只是要了解你的知识储备;

道理很简单,越小的公司(团队)问的问题越“虚”。
小公司需要的是几个人,每个人做一个“模块”拼起来一个系统。更小的公司直接问你“系统”怎么设计。越是大的公司,问的越是颗粒度小的“零件”。
回答这个问题的关键是搞清楚用人单位希望你做什么,而不是技术问题。他们需要的是“成品”。