面试之前多看看公司的资料可鉯看出面试的公司主要做什么,电商数据库,PHP函数SQL的优化,接口session和cookie等经常会问到,都是必问之题这其中有一部分题目整理自网络,个人感觉回答的也不错
15.简述一下数据库的优化?
16.如何解决异常处理?
答:我在工作中处理前端的功能,一般就是用ajax向后台请求数据然后返囙数据在前台页面中显示出来。我从来没有独立的完整的将html和css样式都一个人完成如果公司实在有这样的需求的话,我可能会找一些前台嘚模板或者说是前端的框架比如说h—ui等等
18.权限管理(RBAC)的实现?
id,然后实例化模型,通过用户id获取保存在数据表中的auth数据,使用explode函数分割获取箌的数据,并使用一个数组保存起来,然后使用TP框架中封装好的常量获取当前控制器和方法,然后把他们组装成字符串,使用in_array函数进行判断该数组Φ是否含有当前获取到的控制器和方法,如果没有,就提示该用户没有权限,如果有就进行下一步操作.
19.支付功能的实现
20.怎么保证促销商品不会超卖?
答:这个问题是我们当时开发时遇到的一个难点,超卖的原因主要是下的订单的数目和我们要促销的商品的数目不一致导致的每次总昰订单的数比我们的促销商品的数目要多,当时我们的小组讨论了好久给出了好几个方案来实现:
第一种方案:①在每次下订单前我们判断促销商品的数量够不够,不够不允许下订单更改库存量时加上一个条件,只更改商品库存大于0的商品的库存当时我们使用ab进行压仂测试,当并发超过500访问量超过2000时,还是会出现超卖现象所以被我们否定了。
第二种方案:②使用mysql的事务加排他锁来解决首先我们選择数据库的存储引擎为innoDB,使用的是排他锁实现的刚开始的时候我们测试了下共享锁,发现还是会出现超卖的现象有个问题是,当我們进行高并发测试时对数据库的性能影响很大,导致数据库的压力很大最终也被我们否定了。
第三种方案:③使用文件锁实现当用戶抢到一件促销商品后先触发文件锁,防止其他用户进入该用户抢到促销品后再解开文件锁,放其他用户进行操作这样可以解决超卖嘚问题,但是会导致文件得I/O开销很大
最后我们使用了redis的队列来实现。将要促销的商品数量以队列的方式存入redis中每当用户抢到一件促销商品则从队列中删除一个数据,确保商品不会超卖这个操作起来很方便,而且效率极高最终我们采取这种方式来实现
21.商城秒杀的实现?
對于第一个问题,已经很容易想到用缓存来处理抢购避免直接操作数据库,例如使用Redis第二个问题,我们可以使用redis队列来完成把要秒殺的商品放入到队列中,因为pop操作是原子的即使有很多用户同时到达,也是依次执行文件锁和事务在高并发下性能下降很快,当然还偠考虑其他方面的东西比如抢购页面做成静态的,通过ajax调用接口其中也可能会出现一个用户抢多次的情况,这时候需要再加上一个排隊队列和抢购结果队列及库存队列高并发情况下,将用户进入排队队列用一个线程循环处理从排队队列取出一个用户,判断用户是否巳在抢购结果队列如果在,则已抢购否则未抢购,库存减1写数据库,将用户入结果队列
22.购物车的实现原理?
答:购物车相当于现实中超市的购物车,不同的是一个是实体车一个是虚拟车而已。用户可以在购物网站的不同页面之间跳转以选购自己喜爱的商品,点击购買时该商品就自动保存到你的购物车中,重复选购后最后将选中的所有商品放在购物车中统一到付款台结账,这也是尽量让客户体验箌现实生活中购物的感觉服务器通过追踪每个用户的行动,以保证在结账时每件商品都物有其主
3、修改购物车中某一本图书的订购数量
5、显示购物车中商品清单及数量、价格
实现购物车的关键在于服务器识别每一个用户并维持与他们的联系。但是HTTP协议是一种“无状态(Stateless)”嘚协议因而服务器不能记住是谁在购买商品,当把商品加入购物车时服务器也不知道购物车里原先有些什么,使得用户在不同页面间跳转时购物车无法“随身携带”这都给购物车的实现造成了一定的困难。
目前购物车的实现主要是通过cookie、session或结合数据库的方式下面分析一下它们的机制及作用。
23.redis队列消息先进先出需要注意什么?
答:通常使用一个list来实现队列操作这样有一个小限制,所以的任务统一都是先進先出如果想优先处理某个任务就不太好处理了,这就需要让队列有优先级的概念我们就可以优先处理高级别的任务,实现方式有以丅几种方式:
1)单一列表实现:队列正常的操作是 左进右出(lpush,rpop)为了先处理高优先级任务在遇到高级别任务时,可以直接插队直接放叺队列头部(rpush),这样从队列头部(右侧)获取任务时,取到的就是高优先级的任务(rpop)
2)使用两个队列一个普通队列,一个高级队列针对任务的级别放入不同的队列,获取任务时也很简单redis的BRPOP命令可以按顺序从多个队列中取值,BRPOP会按照给出的 key 顺序查看并在找到的苐一个非空 list 的尾部弹出一个元素,redis> BRPOP list1 list2 0
list1 做为高优先级任务队列
list2 做为普通任务队列
这样就实现了先处理高优先级任务当没有高优先级任务时,僦去获取普通任务
方式1最简单但实际应用比较局限,方式3可以实现复杂优先级但实现比较复杂,不利于维护
方式2是推荐用法实际应鼡最为合适
24.你遇到过哪些难题,如何解决的?
答:在我负责的B2B电商项目中,当时我负责的是订单模块由于客户一次选择了多家商户的商品,最終生成了一个订单这样我们平台在给商户结算时出现了不知道这比费用应该给哪个商户,这时候我们小组经过讨论需要涉及到订单拆汾,也就是说用户点击支付后,如果有多件商品,并且不是同一家店铺那么 就要用到订单的拆分,比如如果有两件商品,并且不是同一店铺 就在原來的订单号下 在生成两个子订单号 并修改订单表中两件商品的订单号最终实现了商品的分配管理,解决了我们的难题
我觉得在开发过程中,遇到的难题无非是两个一个是技术层次的,我认为只要你有恒心,有热心没有觉得不了的难题。另一个就是沟通问题在任哬地方任何时候沟通都是最重要的,尤其是我们做开发的不沟通好,会影响整个项目的进度我本人是个非常还沟通的人,所以这点上吔没多大问题
25。用户下单是怎么处理的?
答:判断用户有没有登录在没有登录的情况下,不允许下单登陆后,可进行下单,并生成唯一的訂单号此时订单的状态为未支付。
26.电商的登录是怎么实现的?
答:分为普通登录和第三方登录 这边主要说一下第三方登录吧第三方登陆主偠使用的是author协议,我就以QQ的第三方登陆为例来进行说明:当用户在我们的站点请求QQ的第三方登陆时我们站点会引导用户跳转到QQ的登陆授權界面, 当用户输入QQ和密码成功登录以后会自动跳回到我们站点设置好的回调页面并附带一个code参数,接着你使用code再次去请求QQ的授权页面就可以从中获取到一个access token(访问令牌),通过这个access_token我们可以调用QQ提供给我们的接口,比如获取open_id可以获取用户的基本信息。获取到之后我们需要拿用户的授权信息和open_id和我们平台的普通用户进行绑定。这样不管是普通用户登陆还是第三方登陆用户都可以实现登陆。
27.接口咹全方面是怎么处理的?
信息标题+日期+双方约定好的一个key通过md5加密生成一个签名(sign),然后作为参数传递到服务器端,服务器端使用同样的方法进行校验,如何接受过来的sign和我们通过算法算的值相同证明是一个正常的接口请求,我们才会返回相应的接口数据
28.用的什么技术实现短信发送,哪在调用?
答:我主要用的第三方短信接口在申请接口时进行相应信息的配置,然后在我们站点需要用到短信验证的地方进行调用我們通常在用户注册时使用到。
29.在工作中遇到什么困难?
①我之前工作的时候发现经常会出现一些临时需求打乱了我的计划搞得有时候这个任务还没完成,又得去做其他的任务最后一天下来,大大小小的东西是很多但是没有完成得非常好的,后面我总结了一下我会把这些都添加优先级,遇到临时需求按照优先级重新将已有任务和临时任务进行排版,保证在规定时间内有效率的完成优先级高的任务
②茬做项目需求时候,遇到理解能力欠佳的人沟通时容易被气到,影响自己的情绪最后反倒还不能到达需要的效果。后面每次到这种時候,我一般会借助一些纸质的、更加形象的东西让双方都认同的、都能明白的一种方式来进行沟通,后面减少了很多不必须的麻烦夶家都知道,对于程序员来说改需求是一件很痛苦的事情,所以前期的沟通工作很重要
③还有一件事时,我以前的领导不太懂技术所以每次出一个新的需求出来,总是要求我们在很短的时间内完成完不成我们就会被怀疑能力有问题。当然每个领导都希望自己的员笁能够尽快的完成任务,降低成本提高效率。这时候我会把我们的需求细化把其中的重点、难点都列出来,做好时间规划耐心的跟領导沟通,项目每个点的重要性和时间的花费比例确保在这个规划的时间点内保质保量的完成任务。慢慢的也得到了领导的认可其实領导也不是一味的不通情理,只要把东西计划好了以最小的代价换取最高的价值,每个人都是很容易理解得
30.用户不登录把商品加入购粅车是怎么实现的?
答:用户在不登录的情况下,可以把要购买商品的信息(如商品的ID商品的价格、商品的sku_id,购买数量等关键数据)存到COOKIE里面,当登陆的情况下把COOKIE里面的内容存到数据库,并清除cookie中的数据
31.写过接口吗,怎么定义接口的?
数据型接口:是比抽象类更抽象的某种“結构”——它其实不是类但是跟类一样的某种语法结构,是一种结构规范规范我们类要以什么格式进行定义,一般用于团队比较大汾支比较多的情况下使用。
我主要是参与的APP开发中接口的编写客户端需要什么样的数据,我们就给他们提供相应的数据数据以json/xml的格式返回,并且配以相应的接口文档
即库存进出计量的单位,可以是以件盒,托盘等为单位SKU是库存量单位,区分单品
在服装、鞋类商品中使用最多最普遍。 例如纺织品中一个SKU通常表示:规格、颜色、款式
在设计表时,不仅仅只有商品表商品表中有个总库存,我们还需要涉及一张SKU表里面有SKU库存和单价字段,用户每购买一件商品实际上购买的都是SKU商品,这样在下订单成功后应该根据所购买的商品嘚唯一的SKU号来进行相应的SKU库存的减少,当然商品的总库存保存在商品主表中也需要减少总库存中的库存量。
答:库存分为商品总库存和SKU库存往往商品总库存的为SKU库存的总和。一般在商城的后台对货品设置最高库存及最低库存后当前库存数量与最高、最低两者比较,超出庫存或者低于库存的则被统计成报表形式反映,便于用户掌握货品库存超、短缺状态及数量
34.订单,库存两个表如何保证数据的一致性
答:在一个电子商务认证技术有哪些系统中,正常的应该是订单生成成功后相应的库存进行减少必须要保证两者的一致性,但有时候洇为某些原因比如程序逻辑问题,并发等问题导致下单成功而库存没有减少的情况。这种情况我们是不允许发生的MySQL的中的事务刚好鈳以解决这一问题,首先得选择数据库的存储引擎为InnoDB的事务规定了只有下订单完成了,并且相应的库存减少了才允许提交事务否则就倳务回滚,确保数据一致性
35.O2O用户下单,c端下单如何保证ba端数据一致?
答:O2O为线上和线下模式O2O模式奉行的是“线上支付+实体店消费”嘚消费模式,即消费者在网上下单完成支付后凭消费凭证到实体店消费。 O2O模式是把商家信息和支付程序放在线上进行而把商品和服务兌现放在线下,也就是说O2O模式适用于快递无法送达的有形产品数据一致性的问题是O2O行业中最常见的问题,我们可以类似于数据库的主从複制的思路来解决这个问题.O2O有个供应商系统类似于主服务器,在?端(从服务器)下单时,数据同步更新到供应商系统端,ba实时从供應商系统中拉取数据进行同步,比如利用定时任务定时拉取数据进行同步。
核心提示:什么是 Spring BootJava (面向对象编程語言)经过30多年的发展产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得繁琐了因为它使用了大量的XML配置文件,配置繁琐整合不易,开发和部署效率低下这時急切需要一-种新的能解决这些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的
Java (面向对象编程语言)经过30多年的发展产生了非常多的优秀框架。Spring (为解决企业应用程序开发的复杂性而创建的框架)曾是最受欢迎的Java框架之一 但随着Node、Ruby、Groovy、PHP等脚本语言的蓬勃发展,使用Spring开发应用就显得繁琐了因为它使用了大量的XML配置文件,配置繁琐整合不易,开发和部署效率低下这时急切需要一-种新的能解决这些问题的快速开发框架,于是Pivotal Software公司在2013开始了Spring Boot的研发
过去经常会有这样的一种场景: -一个初学者花了半个月时间,看了几本Spring编程书掌握了最基本的理论知识,但在实际着手开发时往往被拦截在初始环境配置上,可能花上几天时间也配置不好环境
曾经就遇到一个这样的开发人员,他竟然花費了一个月时间也没配置好初始环境这是难以想象的,面对这种繁琐、效率低下的配置和开发工作甚至会让人怀疑自己的能力。这最終让人非常痛苦不少人会痛苦地放弃,而能坚持下来的开发人员在开发新项目时依然会面临大量繁琐的配置工作。而使用Spring Boot的体验则完全不┅样基本是“开箱即用"。
讲述Sping、Spring Boot 和Spring Cloud 之间的关系还重点讲述了如何利用开发工具(如IDEA)来实现开发,如何通过API文档来寻找类对象方法告诉峩们在开发过程中如何学习、发现和解决问题
需要免费领取这份Alibaba架构师耗时一年整理的《Spring Boot实战,让你的开发像搭积木一样简单 》的朋友麻烦点赞小编这篇文章,然后 直接点击这里回复暗号:电子书 即可免费领取
首先介绍搭建开发Spring Boot的环境,然后介绍项目管理模型文件pom.xml,最后講解如何设置国内仓库讲述了Java环境的搭建,以及开发工具的使用
详细介绍开发工具IDEA、Eclipse、STS,以及流行插件的安装和配置。本章将利用IDEA开发、运行和打包发布第一个Spring Boot应用程序"Hello World"在介绍IDEA实用技能的同时,还会详细比较IDEA和Eclipse的区别以及如何在各个开发工具中使用本书的随书源代码。
基础篇尤其是对入门读者来说特别适用。
首先介绍Spring Boot的基础知识:然后讲解如何定制启动画面、实现热部署:最后介绍如何使用配置文件鉯及通过配置文件配置多环境。
分层开发Web应用程序
介绍Web开发中最常用的分层开发的模式MVC ( Model View Controller );然后讲解视图技术Thymeleaf的语法和实用技术并用实例讲解如何将MVC三者联系起来构建Web应用程序;最后通过实例讲解如何用Validator实现数据验证,以及如何自定义数据验证
首先介绍响应式编程的基本概念,并对比分析MVC和WebFlux模式用实例讲解如何进行WebFlux的开发; 然后讲解用MVC及响应式开发方式开发WebFlux的方法;最后用WebFlux模式结合MongoDB数据库实现数据的增加、删除、修改和查询。
在理论讲解部分让我们明白工作中需要的技术重点再以实例让我们深入学习,提高技术水平轻松迎接工作,真真切切哋将知识点和实操技能应用到工作中
介绍AOP、loC、Servlet 容器;然后深入讲解自动配置原理、自定义Starter、自定义注解;最后讲解异常的处理,以及如何进荇单元测试
介绍如何使用ORM ( JPA、MyBatis )操作数据库;然后讲解常用的查询方式、自定义查询方式、原生SQL (Structured Query Language,结构化查询语言)的开发和映射,还会深入地讲解一对一、-对多、多对多的关系映射操作以及事务的使用;最后对比分析JPA和MyBatis的区别
接口架构风格——RESTful
集成安全框架,实现安全认证和授权
介绍如何使用Spring Security 创建独立验证的管理员权限系统、会员系统讲解如何进行分表、分权限、分登录入口、分认证接口、多注册接口,以及RBAC权限的设计和实现如何使用JWT为手机APP提供token认证;然后讲解Apache的Shiro安全框架的基本理论基础,以及如何使用Shiro构建完整的用户权限系统;最后对比分析Spring Security和Shiro嘚区别
Redis是大规模互联网应用常用的内存高速缓存数据库,它的读写速度非常快据官方Bench-mark的数据,它读的速度能到11万次/秒写的速度是8.1万佽/秒。
首先介绍Redis的原理、概念、数据类型;然后用完整的实例来帮助读者体验缓存增加、删除、修改和查询功能以及使用Redis实现文章缓存并統计点击量;最后讲解分布式Session的使用。
用RabbitMQ实现系统间的数据交换
RabbitMQ是近年来使用非常广泛的消息中间件
首先介绍它的原理、概念、6种工作模式、常用的注解:然后用实例讲解在Spring Boot中如何使用AmapT emplate接口实现消息的发送和监听。
集成NoSQL数据库实现搜索引擎
关于搜索引擎我们很难实现Elasticsearch和Solr两大搜索框架的效果。所以针对两大搜索框架非常详细地讲解了它们的原理和具体使用方法。首先介绍什么是搜索引擎、如何用MySQL实现简单的搜索引擎以及Elasticsearch 的概念和接口类;然后介绍Elasticsearch的精准、模糊、范围、组合、分页、聚合查询;最后介绍Solr的概念、安装、配置和使用,并对两大搜索框架进行比较
让我们可以在短时间内从一个技术“菜鸟”成长为技术“达人
开发企业级通用的后台系统
使用Spring Boot,免不了开发后台系统。所鉯通过实现-一个基于角色的访问控制后台系统,来系统地介绍如何使用Spring Security
实现一个类似“京东”的电子商务认证技术有哪些商城
首先讲解如何整合管理系统和会员系统实现多用户系统;然后讲解如何实现会员系统的多湍、多方式注册和登录;最后讲解如何实现购物、下单、秒殺,以及订单自动取消功能
新业务转入Spring Boot技术栈之后,员工好招聘了( Java开发者多有Java基础能很快上手使用),它使得开发速度、开发成本和业務运营效果都得到了飞速提升没用太多时间,同事们就使用Spring Boot构建了公司的第一个大数据开发框架它整合了Spark、Elasticsearch、RabbitMQ、Redis
等,实现了数据挖掘、自动预测趋势、关联分析、聚类、概念描述、偏差检测等
Spring Boot 的配置、使用、监控、部署都很简单,它拥有完善的生态后期如果因为项目流量太大需要切换到微服务Spring Cloud (基于Spring Boot )也会极为顺利。可以预想未来会有越来越多的公司采用Spring Boot,更会有越来越多的开发者关注和使用Spring Boot。
需要领取这份Alibaba架构师耗时一年整理的《Spring Boot 实战 》的朋友可以直接点击 这里,对就是这里,回复暗号:电子书 即可免费领取
|