答:传智所学项目的业务逻辑不够复杂,模块也不多,所以建议项目周期为5-8个月。
2.项目团队有多少人,如何分配的?
答:项目团队一般由6-10个人组成,4-5个人是java后台的,1-2个是前端,2个产品。
3.在项目中充当什么样的角色?
答:在项目中的职位是组员或者组长,主要负责开发功能模块,后期配合测试修改bug。
4.项目中遇到的最大的问题是什么?
等。
5.如何保证所负责与需求相符合?
答:在做模块之前,与产品经理确定好需求,再与项目负责人确定好技术选型应用,在开发过程中遇到业务问题与产品经理和项目负责人及时沟通。
答:商品模块:添加或者修改商品时,数据库、redis、静态页面如何同步信息。
购物车:添加的商品数量与库存数量的对比。商品价格变动同步。购物车的存储。
订单:商品数量与库存的同步,商品价格的准确性。提交订单的方式,如何验证订单。
7.所负责模块里有哪些功能?(不要上来就说增删改查)
答:商品模块的功能:添加商品时,商品图片的上传以及存储,商品价格确保准确性,商品的上下架。也可以简单介绍下查询的各种条件或删除的各种条件。以及商品信息同步(数据库、redis、静态页面等),商品id的生成规则。
8.在项目开发过程中遇到不会的功能是如何处理的?
答:技术问题:首先是谷歌,在网上查看各种资料以及博客。其次是与同事交流。最后再去找领导。
业务问题:业务问题首先找经理沟通,技术问题首先google百度
9.项目中前台与后台是如何进行数据交互的?
10.如何实现数据库与redis同步?
答:用消息队列mq实现。具体操作是在添加或者修改数据的时候,用mq来同步到数据库与redis,加上事务,确保reids与数据库数据一致。
11.在项目开发过程中还有哪些工作内容?
答:与项目经理去客户公司确定用户需求,与同事配合完成单元测试,与测试人员配合完成测试并修改bug,bug提交
12.项目共有多少张表?所做模块用到多少张表?表与表之间的关系?
答:180-220(选一个具体数值)。
商品模块:商品表,库存表,品牌表,分类表,商品详情表,规格表,图片表,商品排序表,商品筛选表,图片资源类型表,图片资源表,商品日志表,晒单图片说明表。
购物车:商品表,品牌表,分类表,库存表,用户表,库房表,购物车表,购物项表,优惠券表,商品推荐表。
订单:订单表,用户表,用户地址表,商品表,品牌表,分类表,库存表,库房表,地区表,物流信息表。
13.插入商品的话,要求级联插入几张表,你们当时是怎么实现的?
答:商品表,商品详情表,库存表,图片表,日志表。
14.项目中用的注解开发还是手动注入?分别如何实现?为什么?
答:注解开发,在类、属性、方法上写注解。因为项目中需要配置的太多,用注解可以简化开发。
答:看日志大小存放,一般是15天或者30天。存放在一个单独的服务器目录。
16.生产环境与开发环境在上线部署的时候应该如何配置?
答:生产环境:
1、上线之前备份之前的项目
3、关停服务
4、替换之前的项目
5、启动服务,观察日志,是否异常
17.开发时数据库中数据从哪来?数据量有多大?
答:开发时数据库数据部分来自客户或者运营,部分自己添加,部分来自网络爬虫扒的数据。
18.如何保证库存?
答:用mq+redis。
19.如果日志存储量过大如何处理?
答:定期清除日志,日志一般存放在另一台服务器上,15-30天清理一次。
20.在项目开发过程中如何进行测试?压力测试如何做?
答:对自己所负责模块进行单元测试,然后交给公司测试人员进行测试。一般压力测试都是测试人员做,VisualStudio自带的工具,还有LoaderRunner(LR),轻量级的工具有Apache项目中的ApacheBench。
21.项目的并发量有多大?用了多少台服务器?
答:并发量500-1000,服务器数量一般是10-20台左右,具体数量看图
22.在项目中,是如何分配开发任务的?
答:开会时,由项目经理与组长分配到个人需要负责开发的功能模块。
23.项目中的技术选型的依据是什么?
答:1.什么技术更适合当前项目的业务需求,例如互联网项目查询条件比较多,数据库框架选用mybatis;传统项目查询条件比较单一,选用hibernate比较合适。
2.如果两个技术都适用于项目,就看架构师更熟悉哪个技术,因为如果大部分开发人员都不会,企业会负担很高的学习成本。
24.项目的安全问题是如何解决的?
环境安全:初期通过购买云服务
程序安全;token+签名
25.用户分为几种?每种所对应的权限?权限具体是如何实现的?
答:一般后天项目中普通用户、普通管理员、超级管理员。用shiro框架具体实现。
普通用户:访问。普通管理员:管理后台信息。超级管理员:所有权限。
26.电商项目是否上线?用户量有多少?
答:可以说上线(找一个地方性的小型电商网站)或者测试没有完成,项目还没有上线。可以说用户量有日活量:几千。
27.商品的属性是如何进行存储的?
答:需要存储到商品表,商品详情表,库存表,日志表等。
28.工作之余有没有在研究一些流行的技术?
答:有,再看一些技术博客。比如说跨域,如何解决高并发,不同系统之间的通信。
29.在项目中如何实现页面跳转并把当前页面数据传递到跳转页面?
答:把要传递的数据放在request域中(转发)。
30.所负责模块的查询都有那些条件?那些是静态条件、哪些是动态条件?
答:商品的价格区间,商品的品牌,商品的分类,型号,颜色,大小,男/女,商品名称。
静态条件:商品的价格区间,商品的品牌,商品的分类,型号,颜色,大小,男/女
动态条件:商品名称,商品类型
31.所负责模块中删除数据的时候直接删除就可以么?如果不是需要做哪些操作?
答:如果单表的可以进行逻辑删除,不会进行物理删除。级联删除,删除该条数据不影响到其他表中的数据就可以直接删除,否则要进行级联删除,这里也是指的逻辑删除。
32.支付是如何做的?
33.表是如何设计的?
答:可以说是项目经理或者架构师设计的。自己所负责模块可以根据项目需求来设计有哪些字段,需要关联到哪些表。尽量推行单表设计,不定义外键约束。
34.面向服务通过什么样的方式实现?
答:soa架构,表现层与服务层分离,用dubbo和zookeeper搭配完成。
35.如何提高代码质量?在项目中如何优化代码?
答:尽量减少不必要的操作,尽量不要用到三层以上的for循环与递归。写代码的时候要给关键代码写上注释。相同功能的代码进行抽取,抽取原则不影响功能的正常运行。
36.商品的审核如何做的?
答:添加或者修改,商品的价格以及库存等重要信息要进行二次填写,以保证准确率。
前台js校验,后台java代码校验。
37.在项目中如何调试bug?
答:1.以dug方式运行项目,打断点调试。2.查看项目中的错误日志。3.测试人员使用专业测试工具进行测试。4.运行脚本对代码进行测试。
38.查询商品的时候如果redis没有数据,可以抛异常么?如果不可以如何做?
答:不可以用throws抛异常,可以用trycatch捕获异常。因为在redis中查询不到数据,还要对数据库进行查询,如果throws抛异常则不能按正常业务运行。
答:购物车有三种。1.存放在Cookie。2.放在缓存里面。3.放到数据库里面。
40.购物车里面商品种类可以无限添加么?同一种商品的数量有限制么?
答:不可以,京东最多只可以添加八十种(足够使用了),避免占用太多存储空间;商品数量根据商品类型来控制,一般不超过200种。
41.如果库存数量少于购物车用户添加的数量如何处理?
答:每次用户访问购物车的时候,都发送ajax请求查询一遍redis或者数据库,如果存库数量少于购物车中商品数量,发送消息进行提示,并做相应修改。
42.生成订单具备的条件?如何保证这些条件?
答:商品数量不能超过限制数量和库存数量。限制数量在前台用js校验,后台查询数据库校验库存。
43.首页展示的轮播图,在页面中是如何存放的?在数据库中是如何存放的?
答:页面中存放的是图片地址,在数据库中存放的也是图片的地址。图片存放在另一台服务器上面。
44.用户地址是如何保存实现的?(具体)
答:用户的地址是单独存放在一张数据库表中的,需要绑定用户的id,还需要设置默认路径。
45.在电商项目中如何针对不同的用户做推送?
46.如何迁移数据库(mysql)?
答:这里介绍的是mysql数据库,如果被问到其他的可以说只知道mysql的。
1.数据库直接导出,拷贝文件到新服务器,在新服务器上导入。
2.使用【MySQLGUITools】中的MySQLMigrationTool。
3.数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL服务下。
47.服务器宕机如何处理?全部宕机如何处理?
答:配置主从服务器,运维人员搭建集群后,从服务器会给主服务器发送信息,如果主服务器没有响应,那就启用从服务器。一般不会全部宕机,如果全部挂掉,就重启。
48.一件商品只有2件,现在被他人购买一件,这边如何修改当前用户的商品信息?
答:这个考察的是对库存的安全校验。商品上架多少库存讲库存缓存在redis中下单就在redis减少,异步在库存数据库中也减少商品查询只查询redis中的商品库存更新后更新redis库存;在用户点击添加到购物车按钮时,发送ajax查询redis。
dubbo服务开发流程,运行流程?zookeeper注册中心的作用?端口是多少?
答:dubbo主要是发布服务和调用服务。
使用流程:
第一步:要在系统中使用dubbo应该先搭建一个注册中心,一般推荐使用zookeeper。
第二步:有了注册中心然后是发布服务,发布服务需要使用spring容器和dubbo标签来发布服务。并且发布服务时需要指定注册中心的位置。
第三步:服务发布之后就是调用服务。一般调用服务也是使用spring容器和dubbo标签来引用服务,这样就可以在客户端的容器中生成一个服务的代理对象,在action或者Controller中直接调用service的方法即可。
Zookeeper注册中心的作用主要就是注册和发现服务的作用。类似于房产中介的作用,在系统中并不参与服务的调用及数据的传输。
49.******消息中间件acitveMQ的作用、原理?几种模式,每种的特点及使用问题?MQ发送消息失败怎么办?
答:Activemq的作用就是系统之间进行通信。当然可以使用其他方式进行系统间通信,如果使用Activemq的话可以对系统之间的调用进行解耦,实现系统间的异步通信。原理就是生产者生产消息,把消息发送给activemq。Activemq接收到消息,然后查看有多少个消费者,然后把消息转发给消费者,此过程中生产者无需参与。消费者接收到消息后做相应的处理和生产者没有任何关系。
Activemq有两种通信方式,点到点形式和发布订阅模式。如果是点到点模式的话,如果消息发送不成功此消息默认会保存到activemq服务端知道有消费者将其消费,所以此时消息是不会丢失的。如果是发布订阅模式的通信方式,默认情况下只通知一次,如果接收不到此消息就没有了。这种场景只适用于对消息送达率要求不高的情况。如果要求消息必须送达不可以丢失的话,需要配置持久订阅。每个订阅端定义一个id,在订阅是向activemq注册。发布消息和接收消息时需要配置发送模式为持久化。此时如果客户端接收不到消息,消息会持久化到服务端,直到客户端正常接收后为止。
50.Tomcat集群中怎么实现共享
答:用dubbo与zookeeper配合来实现tomcat共享。
1,tomcat自身提供的session集群共享
2,编写tomcat的session插件对session进行存储
3,使用javaweb规范中的filter对request对象的getSessio()进行拦截替换实现集群共享
51.前台做过静态页面么?Freemark如何生成静态页面?生成模板的命令?
答:做过。
第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
第二步:设置模板文件所在的路径。
第三步:设置模板文件使用的字符集。一般就是utf-8.
第四步:加载一个模板,创建一个模板对象。
第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
第七步:调用模板对象的process方法输出文件。
第八步:关闭流。
@Test
publicvoidgenFile()throwsException{
//第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。
Configurationconfiguration=newConfiguration(Configuration.getVersion());
//第二步:设置模板文件所在的路径。
configuration.setDirectoryForTemplateLoading(newFile("D:/workspaces-itcast/term197/e3-item-web/src/main/webapp/WEB-INF/ftl"));
//第三步:设置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
//第四步:加载一个模板,创建一个模板对象。
Templatetemplate=configuration.getTemplate("hello.ftl");
//第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。
MapdataModel=newHashMap<>();
//向数据集中添加数据
dataModel.put("hello","thisismyfirstfreemarkertest.");
//第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。
Writerout=newFileWriter(newFile("D:/temp/term197/out/hello.html"));
//第七步:调用模板对象的process方法输出文件。
template.process(dataModel,out);
//第八步:关闭流。
out.close();
}
52.什么是存储过程?好处?
答:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。
好处:1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。
53.Shiro如何进行权限控制?
答:1.通过浏览器访问路径,配置文件查看,是否需要认证等,如果不需要,直接访问controller
2.如果需要认证,通过配置文件的loginUrl,跳到这个地址,输入用户名、密码等
54.solr的原理?分词器的原理?如何设置高亮显示?
答:Solr是基于Lucene开发的全文检索服务器,而Lucene就是一套实现了全文检索的api,其本质就是一个全文检索的过程。全文检索就是把原始文档根据一定的规则拆分成若干个关键词,然后根据关键词创建索引,当查询时先查询索引找到对应的关键词,并根据关键词找到对应的文档,也就是查询结果,最终把查询结果展示给用户的过程。
IK分析器的分词原理本质上是词典分词。现在内存中初始化一个词典,然后在分词过程中逐个读取字符,和字典中的字符相匹配,把文档中的所有的词语拆分出来的过程。
55.秒杀功能能否与正常的商品购买放在同一台服务器上?
答:可以,但是尽量不要这么做。因为秒杀商品,抢购的用户会比较多,并发量过高容易引起宕机,导致正常购买商品功能也不能正常使用,所以建议放在不同服务器上。
56.redis是内存数据库,如果宕机了,如何解决数据丢失的问题?
方案二:使用redis集群。Redis实现了主从复制的特性:执行复制的从服务器会连接上主服务器,接受主服务器发送的整个数据库的初始副本;之后主服务器执行的写命令,都会被发送给所有连接着的从服务器去执行,从而实时地更新从服务器的数据集。因为从服务器包含的数据会不断地进行更新,所以客户端可以向任意一个从服务器发送读请求,以此来避免对主服务器进行集中式的访问。
57.商品存入数据库怎么保证数据库数据安全
答:设置后台用户的权限,并对数据库修改做好记录(日志),保证责任到人。
58.项目中商品小图片点开后,单品页面是大图片,这些图片是如何处理的