关于电商项目面试遇到的问题
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如果数据提交不成功怎么办?我们会重新发送消息,并记录日志,一般重新发送三次,如果仍然失败,我们会邮件或 短信通知相关人员进行处理。
|