面试

自我介绍:
面试官你好,我是xxx,来自江西抚州,17年毕业于江西先锋软件职业技术大学,软件工程专业,从事软件开发有两年工作经验了,曾在智汇诚信息科技有限公司任职一年,在这期间我做过的项目有汉购网和百叶仓,两个都和商城有关,而汉购网是我最熟悉的项目,我在这个项目中负责商城的单点登录,用户购物车,以及商品搜索模块的开发。商城中的单点登录是使用cas单点登录,用户购物车使用Redis进行存储,搜索模块使用的是solr全文检索。我所掌握的技术以ssm为主,其次是对NOsql和MQ消息中间件技术,数据库方面使用的是Mysql,对于MongoDB和SpringCloud我也有所自学了解。以上就是我的一个简单的自我介绍。

简历中的知识点:
1.ssm框架,SpringBoot
2.Mysql以及优化
3.Redis和MQ消息队列
4.Tomcat,Nginx,协议
5.分布式Dubbo,zookeeper,solr

项目介绍:
-汉购网-
汉购网是一个以特产和美食为主的线上营销平台,项目采用SSM框架开发,系统基于SOA系统架构设计,实行表现层和业务层分离。使用Dubbo作为服务中间件,zookeeper作为服务注册中心搭建的分布式服务架构,系统采用Redis作分布式缓存处理,将一些热门信息或热门商品的页面进行缓存,通过缓存能把绝大多数的请求在读写数据库前进行拦截,大大降低了数据库压力。搜索采用的是solr全文检索,我们创建了一个索引库,将商品数据同步到索引库中,当用户搜索时查询的其实是索引库,同样是降低数据库压力,而数据库和索引库之间的同步我们使用ActiveMQ做消息中间件。数据库使用的是Mysql数据库,并且使用Nginx做反向代理实现负载均衡。整个商城由以下几个模块组成:门户系统,搜索系统,购物车系统,商品详情系统,订单系统,单点登陆系统,支付系统,用户中心等。
而我主要负责单点登录系统,购物车系统以及搜索系统这三个模块。
单点登录系统:
整个商城是分布式架构开发,所以使用以前的共享Session行不通,因为不同模块都分别部署在不同的服务器上。所以我们单独搭建了一个单点登录服务器。当用户访问cas客户端受保护的资源时,cas客户端向cas服务端获取ST服务票据,当用户没有登录时cas客户端就会重定向到cas服务端,cas服务端返回一个登录页面,进行用户认证,当用户认证成功后,浏览器会将Cookie中写入一个TGC登录凭证,Session中写入一个TGT登录票据,cas服务端产生ST服务票据并重定向回cas客户端,csa客户端向cas服务端验证ST服务票据的合法性,验证成功后cas服务端返回登录用户信息给客户端。
如果用户已经登录,并访问受cas保护的资源时,cas客户端向cas服务端获取ST服务票据,cas服务端从浏览器中获取TGC的Cookie,在根据Cookie的值从Session中获取TGT登录票据,如果有则表示用户已登录,产生ST服务票据,并返回给cas客户端。cas客户端收到ST服务票据之后下,向cas服务端验证ST的合法性,cas服务端验证通过后回传登录用户信息给客户端。

购物车:
购物车分为两种状态,一个是用户登录状态,一个是用户未登录状态。当用户未登录时,我们将用户信息保存在Cookie中,当用户登录时,我们将数据保存在Redis中并且将Cookie中的数据同步到Redis。
流程:
查询购物车列表:判断用户登录状态,登录查询Redis中的数据,未登录查询Cookie中的数据。
添加购物车:购物车数据结构为List,判断是否为同一个商家,在判断是否为同一件商品,相同增加数量,不同直接添加。如果不是同一个商家就新建一个cart对象,直接添加购物车列表即可。

-商城项目中的问题-
1.单点登录的访问或跨域问题
项目采用cas单点登录框架完成。首先cas有两大部分,一个是cas客户端,一个是cas服务端。服务端是一个web工程部署在tomcat中,在服务端完成用户认证操作。每次访问系统模块时,都需要去cas完成获取ticket,当验证通过后,访问继续操作。对于cas服务端来说,我们访问的应用模块就是cas客户端。
跨域问题:我们需要理解什么是跨域,什么时候涉及到跨域。
当涉及前端异步请求的时候才涉及到跨域。当异步请求时,访问地址的协议,ip地址,端口号任意一个与当前站点不同时,就会涉及跨域访问。
解决方案:1.使用JQuery提供的jsonp实现。2.W3C提供的CORS(跨域资源共享)解决方案。

2.分布式架构中的Session共享问题
项目中的cas,所有应用如果需要登录时,在web.xml中配置过滤器,做请求转发到cas端。
工作原理:在cas登录后会给浏览器写入一个ticket票据,浏览器的Cookie回缓存这个ticket,在登录其他项目时会拿着浏览器的ticket转发到cas,到cas后根据票据判断是否登录。

3.从前端到后台的实现过程描述
项目采用angularJS框架在controller控制器中完成数据的组装和数据展示,在服务层代码中完成后台请求操作。后端基于前端接口调用,完成数据的增删改查操作。前后端数据交互通过json格式字符串完成。

4.能讲一下Redis的具体使用场景吗?
redis在项目中的应用:1.主要应用在门户系统中的广告信息的缓存,因为门户系统访问量较大,将广告信息缓存到redis中可以减轻数据库的访问压力,提高查询性能。2.应用在用户注册时的验证码缓存。利用redis设置过期时间,当时间到了,reids将自动清除验证码,使验证码失效。3.用在购物车模块,用户登录后,添加的购物车数据保存在reids中。

5.项目使用redis缓存后,持久化具体如何实现?
RDB:保存存储文件到磁盘,同步时间为15分钟,5分钟,1分钟一次,可能出现数据丢失问题
AOF:保存命令文件到磁盘,修改后立即同步或者每秒同步一次。
redis中的五种数据类型:String,list,set,zset,hash

-数据库设计-
1.sql查询中关于查询语句的优化是怎么做的?
1)对查询进行优化,尽量避免全表扫描,首先要考虑在where和order by涉及的列上建立索引
2)应尽量避免在where语句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描
3)尽量避免在where中使用or来连接条件,否则将导致引擎放弃索引而进行全表扫描
4)索引并不是越多越好,索引固然可以提高响应的select的效率,但同时降低了insert和update的效率,因为insert和update时可能重新建立索引,所以建索引应适具体情况来定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值