第06章 如何应对:商品管理与秒杀模块面试?

6.1 电商项目面试之商品管理(一)

商品记录

编辑——>商品规格(SPU)——>商品参数(SKU)

6.2 电商项目面试之商品管理(二)

https://cloud.tencent.com

对象存储服务:https://console.cloud.tencent.com/cos5

秘钥:AKID0uYw6H9rHRKyLRhTF2hANK3jhOuER8h1

key:QZS6iCRQAfCdnCNI3dy4tSyMTJtDH3Yz

# 腾讯对象存储配置信息

tencent:

secretId: AKID0uYw6H9rHRKyLRhTF2hANK3jhOuER8h1

secretKey: QZS6iCRQAfCdnCNI3dy4tSyMTJtDH3Yz

region: ap-nanjing

bucketName: litemall2020-1253518225

启动:litemall-admin-api

http://localhost:9527/#/goods/list

启动:litemall-wx-api

添加商品——>微信SPU和SKU的信息

6.3 电商项目面试之商品管理(三)

如何二次开发——见视频解说

6.4 电商项目面试之商品管理(四)

第一题:SPU是商品的公共信息,SKU是商品的规格信息。比如说一个小米手机SPU信息是安卓系统,高通的CPU,6.5寸的屏幕,4000毫安的电池等等,但是这部手机的内存容量和颜色是有很多种规格的,假设有三种内存容量和三种颜色。组合在一起就是九种规格方案,也就是九条SKU记录,我们创建数据表的时候,SPU表和SKU表是一对多的关系,也就是说一个SPU记录对应多条SKU记录。

第二题:如果是物理删除,在删除SPU记录之前需要判断SPU记录有没有关联的订单。如果有关联的订单,那么SPU记录是不能删除的,如果没有关联的订单是可以删除SPU记录的。但是删除SPU记录要连带着删除SKU记录,这个是物理删除的情况。如果是逻辑删除,那么就不需要判断还是SPu是否存在关联的订单了。直接在SPU记录的delete字段上设置上True这个值就代表说这条记录已经删除了。那么关联的SKU数据delete字段也要设置上True就代表说删除了。

第三题:我做的电商系统是B2C模式的,也就是单商铺的模式,如果要做多商铺的C2C电商。那么商铺之间的数据是要隔离的,不能交叉访问,所以设计数据表的时候就要引入商铺表。然后呢,让SPU关联到商铺的id,这样的每个商铺就只能看到自己商铺的商品数据了。

第四题:我们做的是单商铺的电商系统,只要商家编辑商品都会形成一条新的商品记录。当用户根据订单查询商品的时候,并不会看到最新的商品记录,而是会查询到他下单时候的商品记录。记录这个就可以防止商家随意篡改订单的商品信息,因为我们现在做的是单商铺的电商网站。所以一个商家的商品记录,包括归档数据还行不成上千万的数据规模。如果做成C2C的多商铺电商系统,那么SPU表和SKU表里边就会保存大量的数据。因为单表超过两千万数据,MYSQL的读写性能就会很差,所以在这种情况下,应该单独创建SPU和SKU的归档数据表。把归档的数据转移存储的归档表里边,这样的就可以实现对SPU和SKU数据表的缩表。这种数据库设计叫做冷热数据分离,

第五题:我们用的是逻辑删除,而不是物理删除。

第六题:前端渲染的速度有很多种优化方案,首先是数据库方面要做好优化。比如说优化SQL语句,多利用索引设置引导innodb缓冲池增加数据库的线程数量。在我的数据库连接池方面需要增加连接的数量,我们可以采用Mysql分区技术,把数据切分存储的不同的硬盘上。多块硬盘的io能力是要好于单块硬盘的,所以MYSQL的读写速度就提升了。如果是大型项目数据库层面要使用集群,数据要做分库分表。还要做读写分离,冷热数据分离等等。其次呢,在程序的后台部分也能做很多提升数据读取速度的改进,比如说引入缓存。把热点的业务数据缓存到radis里边,如果命中缓存的话,就不需要走数据库了。所以读取的速度也就提升了,还有就是后台项目的网络连接方式,可以从bio改成nio。这样的依靠少量的线程就能处理更多的网络请求了,那么再有呢就是增加他们凯特线程的数量,也能实现更大的网络吞吐能力。如果有条件的话,我们可以对他们Tomcat负载均衡也能增加。也能增加后台项目的负载能力。另外呢,我们可以利用CDN服务缓存静态的网页和图片。这样浏览器加载商品信息的时候也会更快一些,那么前端方面也有一些优化的手段。比如说减少HTTP请求能合并的请求就合并成一个HTTP请求。那么素材图片可以使用雪花图,那么商品图片可以使用延时加载的办法。

第七题:我们先来看一下SKU数据,比如说床垫儿有这么多种规格。而且这个字段的类型是Jason数组,那么真实类型的字段级别设置了索引。查找的效率也不是很高,所以用户想要根据规格参数去查找数据。MySQL的执行效率真的是很低,我们要引入新的技术来应对。这里呢,我推荐使用elastic search,简称为额es,它是一个全文搜索引擎。最适合从海量数据中快速提取我们想要的数据,关于es技术,我放在后面的章节跟大家详细的说明。因为电商项目的内容非常多,所以为了课程整体的平衡性,我就把一些技术放到其他的章节去讲。毕竟其他类型的项目也是需要s技术的好了,这道题呀,你可以这么去回答我做的电商项目,支持用户按照参数去查找商品,那么我们录入商品之后,支持用户按照参数去查找商品,那么我们录入商品之后,就会把商品数据保存到数据库的SQL。SKU数据表里边,然后把可以用来检索的参数和商品名称以及主键值。写到es里边,用户解锁商品的时候,我们就到es中查找,然后呢得到商品的id。接下来呢,从数据库中提取商品的信息,最后呢渲染到页面上面。

第八题:非常好回答yes,不能替代SQL数据表虽然es用来检索数据。但是颜色里边并不是存放了一个商品的全部信息,只是存放了用来被检索的那部分属性信息。Mr渲染的时候,详细的规格信息还是要从SKU数据表里边读取的。

第九题:这个问题又是跟es技术相关,全文检索里边有中文分词技术,可以实现语义分析。就拿最好看的全面屏手机来说吧,没有任何商品叫这个名字,所以我们要用到中文分词技术。提取其中的名词忽略形容词,于是中文分词之后的结果就是全面屏手机。我们按照这个关键字到es中去检索,就能得到搜索的结果了。好了,这道题你可以这么去回答,我们给rc添加了中文分词技术,提取搜索信息里边的名词。忽略形容词用户搜索最好看的全面屏手机的时候,最终是按照全面屏手机这个关键字来检索商品的。

第十题:我们用的是腾讯云的对象存储服务开通对象存储服务之后呢,我们在微商城的后台系统配置上secret id和secret key。还有app和存储系统的信息,通过腾讯云的一篇接口就能把图片上传到云端了。我们是利用腾讯云的对象存储服务来充当涂装服务器的好了,各位同学以上这些呢,就是有关商品管理模块的主要面试题了。

6.5 电商项目面试之秒杀业务(一)

解决数据库超售方案(一)

解决数据库超售方案(二)

解决数据库超售方案(三)

6.6 电商项目面试之秒杀业务(二)

解决秒杀业务方法演示

pom.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

mooc

demo

1.0-SNAPSHOT

redis.clients

jedis

3.0.1

Application.java

import redis.clients.jedis.Jedis;

import java.util.concurrent.LinkedBlockingDeque;

import java.util.concurrent.ThreadPoolExecutor;

import java.util.concurrent.TimeUnit;

public class Application {

public static ThreadPoolExecutor pool=new ThreadPoolExecutor(

10,100,10, TimeUnit.SECONDS,

new LinkedBlockingDeque()

);

public static void main(String[] args) {

Jedis jedis=new Jedis("localhost",6379);

jedis.auth("123456");

//逻辑库

jedis.select(1);

jedis.set("kill_num","50");

jedis.del("kill_list");

jedis.close();

for (int i=0;i<1000;i++){

pool.execute(new KillTask());

}

}

}

KillTask.java

import redis.clients.jedis.Jedis;

import redis.clients.jedis.Transaction;

public class KillTask implements Runnable {

@Override

public void run() {

Jedis jedis=new Jedis("localhost",6379);

jedis.auth("abc123456");

jedis.select(1);

jedis.watch("kill_num","kill_list");

int num=Integer.parseInt(jedis.get("kill_num"));

if(num>0){

Transaction transaction=jedis.multi();

transaction.decr("kill_num");

transaction.rpush("kill_list","9527");

transaction.exec();

}

else {

Application.pool.shutdown();

}

jedis.close();

}

}

6.7 电商项目面试之秒杀业务(三)

6.8 本章总结

资源

微云链接:

链接:https://share.weiyun.com/4Ruecunx 密码:m4xy7s

百度网盘:链接: https://pan.baidu.com/s/1UBSJaWNobkTmZ7uTGVMRQg 密码: 1bpw

如果失效联系v:itit11223344

内容来源于网络如有侵权请私信删除

mysql数据库表缩表_Java项目面试实操 提升大厂面试成功率 第06章 笔记相关推荐

  1. MySQL数据库应用 多表查询_mysql数据库-多表查询

    今日任务 完成对MYSQL数据库的多表查询及建表的操作 教学目标 掌握MYSQL中多表的创建及多表的查询 掌握MYSQL中的表关系分析并能正确建表 昨天内容回顾: ​ 数据库的创建 : create ...

  2. excel查询mysql数据库表,excel创建数据表/查询mysql数据库中所有表名

    excel两个表格,数据库表与专门查询该数据库信息的表.在查询表中以多个项目进行查询符合条件的数据. 可以用"筛选"这个功能,在菜单里,对两个列进行筛选,符合条件的就会显示出来.很 ...

  3. 一文搞懂MySQL数据库分库分表

    如果数据量过大,大家一般会分库分表.分库需要注意的内容比较少,但分表需要注意的内容就多了. 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没用过 ...

  4. Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作

    二.Django连接MySQL数据库以及建表的操作 准备工作:安装Python访问MySQL的模块 一.修改project同名目录下面的__init__.py文件 二.修改project同名目录下面的 ...

  5. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...

    <Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法>要点: 本文介绍了Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法,希望对您有用.如果有 ...

  6. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...

     mysql数据库创建,表创建模等模板脚本 -- 用root用户登录系统,运行脚本 -- 创建数据库 create database mydb61 character set utf8 ; -- ...

  7. 4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)

     mysql数据库创建,表创建模等模板脚本 --用root用户登录系统,执行脚本 --创建数据库 create database mydb61 character set utf8 ; --选择数 ...

  8. php如何在mysql数据库里创建表_php创建mysql数据库以及数据表

    php创建mysql数据库以及数据表 用php链接到mysqli,成功后利用,mysqli_query()创建数据库以及数据表. $con = mysqli_connect("localho ...

  9. php导出数据库的指定表数据,MYSQL教程mysql数据库导出指定表数据的方法

    <MYSQL教程mysql数据库导出指定表数据的方法>要点: 本文介绍了MYSQL教程mysql数据库导出指定表数据的方法,希望对您有用.如果有疑问,可以联系我们. 导读:linux下导出 ...

最新文章

  1. what???现在的研究生和导师普遍都没有真正理解科研的本质
  2. 线程安全的集合类、CopyOnWrite机制介绍(转)
  3. docker --restart=always 参数 docker重启容器自动重启
  4. Java代码实现负载均衡六种算法(强烈建议收藏)
  5. html equls比较方法,编写高质量equals方法
  6. JavaScript通俗易懂(一)-变量提升
  7. 使用html-table模块生成html格式
  8. 爬虫5_python2_使用 Beautiful Soup 解析数据
  9. python中bytes用法_Python中BytesIO的使用场景,什么时间应该使用BytesIO?
  10. 长虹电视刷机固件包汇总
  11. 西门子s1200教程_西门子S-1200入门PLC视频教程百度云资源下载
  12. 高等数学(第七版)同济大学 习题2-4 个人解答
  13. 毕业设计管理系统Part4:教师上传课题,修改课题,删除课题
  14. 利用模版元编程将传统冒泡排序性能提升两倍以上
  15. 教师资格证上传照片时显示“内部服务器错误”解决方法(亲测有效)
  16. awk if 使用方法
  17. 锂离子电池种类介绍和分类
  18. [K/3Cloud]关于选单操作
  19. Origin坐标轴上的连字符修改为负号
  20. oracle表空间怎么改名字,修改oracle数据文件和表空间名字

热门文章

  1. C#使用IconFont字体图标的动态加载(&#xe格式转换)
  2. java调用驱动_Java中间件及其驱动调用、加载方法及转换装置的制造方法
  3. C语言二维数组的四种遍历方式
  4. 【调剂】广东省杰青广州大学范立生教授课题组接收计算机学硕调剂
  5. win10操作系统怎么查看电池损耗,电池使用时间
  6. iOS - 备忘录模式(Memento Pattern)
  7. 公钥私钥证书与https
  8. 微软内置输入法使用指南
  9. OpenCV copyTo()函数
  10. 镇江网络SEO:如何让百度收录网站,提高竞争力?