资料内容:
面试官你好,很高兴来咱们公司面试.
我叫,老家是.从事这个 java 开发已经 4 年了。这几年的开发中,熟悉使用 hibernate、
spring,springmvc,mybatis 等主流框架,dubbo+zookeeper 分布式开发,熟练使用
redis、mongodb 等非关系型数据库。消息队列有 rocketMQ。springcloud 微服务架构,关
系数据库这方面,我们是用过 my sql,oracle,搜索引擎还包括 ES一、项目介绍
我在之前做的是旅游的项目,这个项目采用的是 Springcloud 框架。
项目主要分了三个平台:商家平台、运营商平台、前台网站平台,
前台网站主要的功能主要就是注册与登陆,首页管理(导航栏,搜索框,广告,热门推荐),秒杀
活动,详情页模块,评论模块等等。
这就是我们项目的一个简单的介绍(微笑一下)接下来给您介绍一个项目的架构
二、项目架构
我们项目当时开发是考虑到项目的访问量可能会比较大,所以考虑用的是 springcloud 微
服务架构,微服务的话可以分解巨大单体式应用,开发效率高,各服务之间代码解耦合,每个
服务只关注一个业务功能都能独立开发部署,一个服务宕机不会影响其他服务。我们还部署
一个 Nginx+zuul 的集群,静态资源直接通过 ngnix 进行访问,动态请求通过 zuul 网关进
行安全验证(也就是咱们说的动静分离)。然后通过 zuul 服务路由对于客户端的请求进行
安全效验,与请求的分发去访问各个微服务,服务统一是注册到 Nacos 上,zuul 服务路由在
调用咱们的服务时,服务和服务之间相互调用时通过 feign 来进行调用,feign 具有负载均
衡和熔断的能力.可以让我们的访问压力分摊,当服务请求失败时还可以快速做出响应,防止
出现服务雪崩的现象。持久层我们采用的是 mybatis,因为 MyBatis 可以进行更为细致的
SQL 优化,可以减少查询字段。数据库我们采用的是 mysql 数据库,为了减少数据库的压
力,我们配置了两台 mysql 服务,并且配置了读写分离。网站的广告页导航栏和广告这些
查询比较多但更新比较少的模块,我们采用的是 redis 缓存以防止大量的请求对数据库造
成压力,同时也提高了查询效率。项目中我们还用了 rocketmq 的事物消息,来保证我们事
物的一致性。详情页我们使用了 freemarker,提高了我们程序访问的性能。搜索引擎的
话,我们采用的是 es,因为 es 的实时性比较好而且支持分布式。针对一些数据量比较大,
结构松散,查询频繁的数据,我们采用了 mongodb 进行存储。登录注册我们选用的是 shiro
安全框架,因为它使用简单,满足我们的认证预授权需求,对密码进行了加密,可以方便我们
的快速开发,