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

第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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值