A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

关于电商项目面试遇到的问题

1.       你们项目里面哪些地方用到多线程?      
项目:
秒杀抢购使用了多线程:  场景,我们一共只有100个商品,在最后一刻,我们已经消 耗了99个商品,仅剩最后一个。这个时候,系统发来多个并发请求,这批请求读取到  的商品余量都是99个,然后都通过了这一个余量判断,最终导致超发。
应对策略1: 全部请求采用“先进先出”的队列方式来处理。那么新的问题来了,高 并发的场景下,因为请求很多,很可能一瞬 间将队列内存“撑爆”,然后系统又陷入  到了    异常状态。 放弃 !
应对策略2: 乐观锁,采用带版本号 (Version)更新。实现就是,这个数据所有请 求都有资格去修改,但会获得一个该数据的版本号,只有版本号符合的才能更新成功,  其他    的返回抢购失败。 这样的话,我们就不需要考虑队列的问题
       框架:
    springMVC默认是单例(基于方法),所以每次请求访问就是一个线程。(使用方法内   的变量)
    我们是电商项目设计思路:降低应用之间耦合性,减轻服务器压力。会把应用服务之间    进行拆分,使用了ativeMQ(消息队列),解决了一部分多线程问题。


2.       你项目对于订单是怎么处理的,假如一个客户在下订单的时候没有购买怎么办,对于顾客在购买商品的时候你们怎么处理你们的库存?
1、下单后商品进入购物车, 库存减, 会有一个状态, , 时间为12小时, 超时后自动取消, 库存加
2、用户付款,库存减

3.       计算一下133平方是多少?
         (long)Math.pow(133,2)

4.       你平时测试的流程?
    需求下来时,会先开发Dao层-service层-controller层
    当持久层与业务层写完时,会使用Junit测试业务实现
    然后开发页面及action,在进行本地测试。
    (自测通过后)上传公司内部服务器,测试人员会进行第二轮测试。
    (测试通过后)会走脚本,进行抗压访问测试。

5.       你们数据库怎么设计的?
进公司前已经设计好了, 同事们说参考了淘宝, 只关心自已操作的表

6.       你们怎么处理redis缓存的数据,怎么删除的?
    Java写定时任务,对一些不需要的redis中缓存数据进行销毁。

7.       你觉得分布式开发的缺点是什么?
    环境搭建复杂,开发技术要求高, 各种模块间数据交换容易出现问题,如:保密数据的访 问
    硬件成本高
系统之间交互需要使用远程通信,接口开发增加工作量。
8.       缓存技术你觉得在什么时候用的比较多?
访问频繁的数据, 且数据不经常改变

9.       你们怎么管理你们的内存?
    服务器层面没研究过,主要关心业务逻辑结构,

10.    说说你对于web前端的优化?
    标签不要出现style和onclick这样的内联的样式和事件。
    内容图片的大小的优化   
    商品详情等不经常改变的数据使用freemark网页静态化,

11.    插入商品的话,要求级联插入几张表,你们当时是怎么实现的?
mybatis框架的逆向工程可以根据表关系生成对象和映射表关系,
插入级联表时候,将数据封装到对象直接保存对象即可,
12.   支付接口是怎么做的?
    接口参数,如商品名称、金额等,并通过约定的加密方式及密钥进行加密处理,将以  FORM表单POST或GET的方式发送给支付公司提供的支付网关URL。   
    接口对接时,商城需要提供回调地址,由于接受支付返回的信息,要确保回调地址能正    常接受通知。

13.    redis为什么可以做缓存?
内存数据库,读写速度快

14.    当被问到某个模快存在安全性问题(sso单点登录系统)时,如何回答?
    当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登 录;根据用户提供的登录信息,认证系统进行身份效验,如果 通过效验,应该返回给   用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带   上,作为自己认证的凭据,应用系统接受到 请求之后会把ticket送到认证系统进行效  验,检查ticket的合法性(4,6)。如果通过效验,用户就可以在不用再次登录的情况 下访问应用系统2和 应用系统3了。
     ①用户请求访问业务系统。
      ②业务系统在系统中查看是否有对应请求的有效令牌,若有,则读取对应的身份信    息,允许其访问;若没有或令牌无效,则把用户重定向到统一身份认证平台,并携带业  务系统地址,进入第③步。
      ③在统一身份认证平台提供的页面中,用户输入身份凭证信息,平台验证此身份凭    证信息,若有效,则生成一个有效的令牌给用户,进入第④步;若无效,则继续进行认  证,直到认证成功或退出为止。
      ④用户携带第③步获取的令牌,再次访问业务系统。
      ⑤业务系统获取用户携带的令牌,提交到认证平台进行有效性检查和身份信息获  取。
      ⑥若令牌通过有效性检查,则认证平台会把令牌对应的用户身份信息返回给业务系    统,业务系统把身份信息和有效令牌写入会话状态中,允许用户以此身份信息进行业务  系统的各种操作;若令牌未通过有效性检查,则会再次重定向到认证平台,返回第③步。
  通过统一身份认证平台获取的有效令牌,可以在各个业务系统之间实现应用漫游。
15.solr怎么设置搜索结果排名靠前(得分)?
    Solr内改变打分规则有几种形式:
    1.配置solr的solrconfig.xml中edismax,来改变Boost打分规则
    2.在solr的schema中增加一个字段,该字段专门用于排序
    3.自写一个solr的评分规则。
    一般简单的应用1和2就能满足。
    举一个例子,电商类网站(比如淘宝)的商品搜索:
    1.在商品名称上出现搜索关键字排序靠前,而内容的次之
    2.对多皇冠的买家排序靠前等
    3.对近期发布的商品排序靠前
    4.对最近销售多商品靠前
    综上获得一个综合排名

16.    activeMQ在项目中如何应用的?
用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,同 时也使得系统响应延迟加剧。在使用ActiveMQ后,用户的请求发给队列后立即返回(当   然不能直接给用户提示订单提交成功,提示:您“您提交了订单,请等待系统确认”),    再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列的  服务处理速度远快于数据库,因此用户的响应延迟可得到有效改善。
17.    activeMQ如果数据提交不成功怎么办?
我们会重新发送消息,并记录日志,一般重新发送三次,如果仍然失败,我们会邮件或    短信通知相关人员进行处理。



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马