1.京淘项目架构设计
1.1电商网站行业特点
1.1.1 高并发
概念: 同一时间内,有大量的用户访问服务器.
常识: tomcat服务器能够支持的并发链接数 220个/秒 (软件依赖硬件设备) 生产环境
升级: tomcat调优设计 增加tomcat运行内存 JVM调优 tomcat可以支持1000个/秒
危害: 如果服务器处于高负载运行环境 极其容易产生宕机现象. 用户响应不及时(主要矛盾) 用户体验差. 赔款 条款规定
1.1.2 分布式思想
1).分布式计算 将任务进行拆分 拆分为若干个计算单元 之后由不同的线程执行再有特定的组件进行汇总. (大数据)
例子: 一个人完成一项任务(线程)需要10个小时,问10个人同时干活要多久1个小时完成.
2).分布式系统
说明:由于业务需要 将复杂程序按照特定的规则进行拆分.
规则1: 按照业务模块拆分 前端/秒杀/商品/后端…
规则2: 按照层级拆分 pojo/Mapper(Dao)/Service/Controller/VO/页面
作用: 在架构设计环节实现了代码的松耦合.(解耦) 提高网站扩展性.
1.1.3 集群/高可用性(HA)
集群概念: 由多台服务器公共完成同一项任务
HA概念: 如果在服务器运行过程中发生了宕机的现象,则无需人为的干预,程序可以实现自动的故障迁移.
1.1.4 安全性
国内安全做的最好的: 阿里巴巴(支付宝) 技术研发部: 达摩院 安全部: 神盾局(安全专家/黑客) 360安全卫士(最大xx软件)
阿里风控系统: 动态监控交易是否安全.(指纹/刷脸支付)
假设:某个人盗取了你的手机信息.
1.判断是否为好友
2.判断你们之前是否有交易记录
3.登录地点是否为常用地点.
4.转账账户是否异常…
5.是否重置过交易密码…
交易存在风险. 第二天才可能受理.
1.2京淘架构设计
2.关于京淘表设计
2.1 常见表关系
实质: 看问题的角度不同,则得到的结果不同 切记站在一头考虑问题
2.1.1 一对一
例子1: 用户表----用户详情表
分析: 1个用户 -----> 1个详情表信息
1个详情 -----> 1个用户
2.1.2 一对多
案例: 用户和订单
分析: 1个用户 -----> 多个订单
1个订单 ------> 1个用户
2.1.3 多对多
规则: 多对多是双向一对多
案例: 用户 —角色 — 权限
分析: 1个用户-------多个角色 1->多
1个角色-------多个用户 1->多
2.1.4 京淘物理模型图设计
补充内容:
1.表与表关联关系通过主外键进行关联.
2.主键不能重复的.
3.外键如果不做特殊要求(唯一性约束) 可以重复
读表:
规则1: 主键和外键 同一行中 一个主键对应一个外键 一对一的
多行中 一个外键对应 多个主键 一对多
规则2: 多对多: 多对多一般都会有中间表 3张表组成.
2.2 导入数据库
1).新建数据库链接地址
2).动态导入数据库
3.IDEA环境搭建
3.1 新建工作空间
在本地工作目录中新建文件目录
3.2 利用IDEA打开新空间
File -----Open ----- 选择上述文件目录 即可
3.3 修改IDEA 配置
3.3.1 安装lombok插件
3.3.2 修改键位
3.3.3 自动匹配大小写
3.3.4 设定自动编译
3.3.5 设定自动保存
3.4 maven
3.4.0 Maven说明
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。
Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。
3.4.1 maven文件说明
注意事项: 我们是专业的开发人员 所有要求软件 路径不要有中文/空格/特殊字符/尽量不要放C盘.
3.4.2 Maven工作原理复习
部件: 本地仓库 私服镜像 中央仓库
关于mavenjar包下载异常:
3.4.2 关于settings文件说明
1).本地仓库地址
2).仓库位置
3).私服镜像设定
4). jdk环境配置
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>
1.8
</maven.compiler.compilerVersion>
</properties>
</profile>
5).maven配置
3.4.3 创建maven项目
1).创建项目
2).选择依赖项
3.5 关于maven操作说明
3.5.1 关于坐标说明
说明:maven的坐标与本地仓库进行绑定.通过坐标查询本地仓库中的jar包文件 之后进行项目的依赖.
异常信息: 如果maven坐标报错 则可能是导入异常 需要检查版本信息及本地仓库中的jar包是否正确.
<!--maven的依赖项 添加jar包文件 导入该项目-->
<dependency>
<!--组ID:一般都是公司域名倒写 -->
<groupId>org.springframework.boot</groupId>
<!--项目名称-->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号-->
<version>2.4.3</version>
</dependency>
3.5.2 关于maven jar包传递性说明
说明: 如果A.jar 依赖 B.jar, B.jar 依赖 C.jar 当程序添加A.jar包时.maven会自动的解析动态依赖 A/B/C三个包文件.
jar包查询网址: https://mvnrepository.com/
工作原理:
当maven添加jar包文件时,会通过依赖的坐标去本地仓库中查找对应的jar包文件.之后解析该文件下的POM.xml文件,如果该文件中有自己的依赖项,则重复执行上述操作,直到所有的依赖项全部加载完成为止.
maven这么做的意义: 主要解决了jar包依赖冲突问题.
3.5.3 Maven如何保证jar包传递的安全性
知识讲解: SHA1算法
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS)。SHA-1可以生成一个被称为消息摘要的160位(20字节)散列值,散列值通常的呈现形式为40个十六进制数。
知识补充:
1. 如果对同一个数据进行hash(sha1)计算 问: 结果是否相同 必然相同…
2. 如果对不同的数据进行hash计算 问: hash结果是否不同? 不一定 HASH碰撞
3. 如果对1M, 1K的数据 进行相同的hash计算 问:计算速度谁快 hash不会因为内容大小而影响速度
工作原理:
4 关于SpringBoot相关配置说明
4.1 关于POM.xml文件说明
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
parent定义父级jar包文件 一般的父级的打包类型 jar包 java程序 /war包 web程序/POM 聚合工程
SpringBoot需要依赖spring/springMVC等的相关jar包文件
统一定义了当前SpringBoot版本的相关依赖jar包信息.该依赖信息可以被子项目继承
注意事项: SpringBoot整合当前主流的框架jar包 某些特殊的项目需要自己单独整合
-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jt</groupId>
<artifactId>springboot_demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_demo1</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--maven的依赖项 添加jar包文件 导入该项目
需要什么功能 单独依赖某些包即可.
-->
<dependency>
<!--组ID:一般都是公司域名倒写 -->
<groupId>org.springframework.boot</groupId>
<!--项目名称-->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<!--执行测试代码时有效-->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!--插件信息-->
<plugins>
<!--负责maven相关操作 项目 编译/测试/打包等操作 如果没有回报没有主清单 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4.2 关于maven操作说明
1.compile 利用maven工具将程序进行编译 将.java文件 编译为.class文件
2.clean 删除target文件目录
3.install 将项目进行打包处理 target目录中保存 (个别同学没有该文件) / 本地仓库中保存
4.3 关于项目发布测试
1).准备jar包文件
2).java项目发布
万能的关闭命令: ctrl + c
4.4 作业
掌握什么是开箱即用 了解springBoot程序执行过程…