说说你这个项目的架构情况吧?
从整体部署情况上,目前这个项目部署在两台服务器上,每台服务器部署一套应用在里面,如果某个服务挂了也不会影响到我们的整体的服务提供。当然,如果我们的服务器资源宽裕的话,可以继续进行部署,不断的进行水平的扩展。数据库,redis等中间件都部署在另一台专门中间件的服务器的上。前端的项目打包后,部署nginx,nginx反向代理到我们的网关,网关再进行各种请求的分发。对外是前端的域名,解析到前端服务器暴露公网,其他的后端及中间件交互都是通过内网的地址来进行交互。
从技术上,我们选取的是spring cloud alibaba微服务框架,ssm,权限satoken,gateway网关,配合mysql,redis,xxl-job,es等中间件来作为整体项目的技术架构。
点评:如果你是直接简历用的鸡哥这个项目可以按上面这个说法来这么说,其中服务器的情况可以根据自身经历进行一定的微调,没有过项目经验以及校招的人,就按这个来说就可以。有经验的,懂服务器部署的,可以根据自身实际情况进行一定的微小调整。
你在这里面主要负责哪些东西?
好的,面试官。我在这个项目里面主要负责技术选型,框架的构建,刷题模块的设计与开发(ps:记住这个地方要给面试官埋沟子,这块说的,让面试官有兴趣延伸)。技术选型主要是评估用户量,服务器资源,工时的预估,选取最快能达成结果和比较主流的技术栈。框架构建这个过程也是看了很多资料,传统的三层,四层,洋葱等等,最终决定选择XX。(ps:这个xx。如果你对领域一点理解都没有,请不要给自己埋坑,踏实的说是三层的架构)。刷题模块就是从0到1 的设计与落地了。从需求沟通到业务建模到原型设计,数据库设计这些都是我来做的,最终开发进行落地。以上就是我负责的内容。
鸡哥点评:这道题一定要埋一埋钩子,什么叫沟子,面试官想问你负责什么就是要问具体的情况了,如果你在这里吸引了他,他一定会问你说的那个东西,那么你相当于提前准备好了,预想好了,应该如何说这些东西,直接就给面试官拉入你的节奏里面了
你的技术选型是怎么做的?
技术选型主要是从几个方面来进行考虑的,需求背景,上手程度,技术生态,成本,工期等等。这个项目的工期比较充足,所以我们可以做自己的框架选型后,再开发业务,不需要选取一些已经做好的框架和业务,在上面二次开发,二次开发对扩展性和可维护性都比较差。我选择从0到1来做这个项目。这个需求社区设计的功能比较多,为了后续更好的扩展,我们选取微服务的形式来进行开发,直接使用的是cloud alibaba,相比于传统cloud,更加方便使用。数据库的数据量不会太大,直接选择mysql即可。缓存就是用redis比较方便。定时任务因为是微服务,选择 xxljob。
你们的前后端的开发模式是什么样的?
我们这个项目采取的方式是前后端分离开发的模式,前后端通过接口文档配合原型来进行开发设计。整体的设计规范由我们后端的接口开发者来进行定义,定义好接口的出入参之后,和前端进行沟通对接。双方确认后,进行开发,文档用的是 apipost,进行团队的协作。按照文档开发完成后,进行前后端联调。联调无问题则进行测试。在此过程中,有任何的变更,都要在联调之间,双方沟通好,保证一致。
编写接口对接的时候,你觉得应该注意些什么?
这个问题从两个层面来说吧,一个是咱们给前端用的接口规范。这块要保证可理解性高,语义简单,定义好公共的出参格式。必填非必填等定义清晰,类型定义清晰。另一个层面是大头,就是咱们后端在编写接口的时候要注意的点。最重要的一个原则是,让前端只负责进行渲染,尽可能的将逻辑进行后移。前端不要根据后端的参数做复杂的逻辑判断和处理。然后就是接口性能层面,对于 c 端项目尽可能在 100~300ms,部分可以到 500ms 以上,再往上就要考虑异步的通知来进行。一定要保证用户的体验。
你的这个刷题业务是怎么做的?
刷题业务整体是这样进行设计的,我先讲一下业务。刷题主要是为了方便看题库,题目是主要的信息,那么题目会分为几个类型,单选,多选,判断,简答。这块可以扩展为设计模式,工厂+策略来做。然后就是题目为了方便查询,会涉及到其中的分类,标签。分类是大类,比如框架,数据库等等,标签是题目的小类,一个题目可以属于多个标签,比如一道 mysql 的题目,既可以属于 mysql 标签,也可以属于基础标签。进行了难度的划分,还有题目的解析。为了方便大家进行精准查找,做了全文检索的高亮设计。
你说其中用到了设计模式,这样设计有什么好处吗?
在目前的项目中,用了几处设计模式,第一块就是题目录入的时候,因为题目类型有四种,未来也可能做一些变种题目类型的变更,于是用工厂+策略模式来进行了一波处理,这样处理的好处是,四个题型各写各的逻辑,互相解耦,互相没有任何影响。然后主逻辑的 service 层代码。也不需要任何变动。当我新增加一种题目类型的时候,也是不需要修改任何主逻辑的代码。直接增加枚举,然后处理其中的逻辑即可。另一处设计模式的使用,是文件相关的适配器模式。在文件的 sdk 上封