2.你再详细介绍一下你的这个项目,我对你这个项目还挺感兴趣的
3.这个项目都用了那些技术?
当时回答:用到的后端框架是SpringBoot,数据库是MySql,Redis作为一个缓存中间件,大概就是这些。
4.Redis是怎么用的,用Redis来解决什么问题呢?
当时回答:Redis主要是分担数据库和后端的压力,因为这是一秒杀系统,在某一个时间点,会有大量的用户访问,这个时候直接去访问数据库的话,可能会造成宕机的风险,用了Redis呢,用户访问的时候,可以把信息先读取到Redis缓存中,在Redis中进行数据的操作等用户操作完数据后,再把数据提交到数据库中,因为Redis是一个基于缓存的数据库,它的读写效率还是很高的。
5.我想问一下你这个Redis是自己搭得吗?还是用的是现成的?
6.那你搭的时候有没有考虑它的高可用?
当时回答:因为当时做的时候,测试数据没那么大,就搭了两个,相当于是一个小集群,对于它的高可用还没有考虑那么多。
7.你这个系统有上线吗?
当时回答:没上线,相当于做了一个小demo。
8.那你做完这个系统,如果将来要上线,你觉得那些地方需要改进一下?
当时回答:就像你刚刚说的Redis,我当时只搭了两个,以后要是上线的话,这肯定是不满足需求的,因为上线的话,用户流量要大很多这是一个问题,还有就是Redis对库存的管理,因为Redis是采用分布式的一种策略,每个Redis都有不同的库存,对各个Redis上库存数量统一,也就是一致性问题。
9.我这里看你是用Redis做的缓存是吧,那你具体说一下怎么做的缓存?
当时回答:1.秒杀商品查询
进入到秒杀商品首页时,从redis缓存中读取秒杀商品,如果商品的集合不存在,从数据库中把当期符合的秒杀商品记录读取到redis缓存中,存入到hash中,从缓存读取,在Java中对集合中的商品按照平台规定的排序字段进行排序,显示在页面
进入到秒杀商品的详情页,点击抢购时,判断缓存中是否存在秒杀商品且商品的数量是否大于0,如果满足则抢购成功,生成订单存入到缓存的hash中,key是userId值是HashMap,HashMap中存储的是这个用户的订单,key是订单编号,value是订单对象。秒杀商品的数量-1,如果秒杀商品的数量为0,将秒杀商品从缓存中删除。
进入到支付页面时,发送一个获得二维码URL的Ajax请求,访问微信支付的远程接口,根据订单号、金额获得一个URL,根据QRious插件生成二维码,支付页面再发送一个Ajax请求,每个3秒调用微信支付查询功能,轮询5分钟,如返回支付成功,则向成功页面跳转,将订单写入到数据库中,从缓存中删除,如果支付失败或支付超时,将订单从缓存中删除,将缓存中的秒杀商品数量+1。
10.用缓存的时候,有考虑过缓存穿透、或者缓存击穿一些概念嘛?
当时回答:因为这个我真的了解不多,当时我就说这方面了解的不多。
11.那有配过Redis持久化吗?
当时回答:因为这个我了解不多。
12.那你这个开发框架用的是什么呀?
当时回答:主要说了自动配置
**当时回答:**这个没有深入了解,就是知道怎么用
16.那你这个系统有用到队列吗?
当时回答:针对队列我还没在实际项目中应用过,但是我这个项目还是存在问题的,虽然Redis做了集群操作,当时秒杀的时候,某一刻的请求是非常大的,这样可能会把Redis 的带宽打满,这个时候我们可以使用RabbitMQ做一个削减峰值的功能,大量请求过来的时候,可以先把请求存在队列中,等过来请求高峰期后,再慢慢去消费队列中的请求。
17.你们这个项目有打包上线嘛?
当时回答:这个没有,这个当时是实验室老师带我们做个一个项目,相当于是模拟这样一个场景,这个项目存在的问题还是比较多的,上线的话还是比较强的。
18.JVM的内存模型了解多少?
19.你简历上写的意向城市是杭州,一定要是在杭州吗?
20.你的户口在哪里吗?对户口有要求吗?