1.1
电商行业特点
1.
分布式
垂直拆分
:
根据功能模块进行拆分
水平拆分
:
根据业务层级进行拆分
2.
高并发
用户单位时间内访问服务器数量
,
是电商行业中面临的主要问题
3.
集群
抗击高兵发的有效手段
,
同时集群内部实现高可用
4.
海量数据处理
随着公司数据的不断积累
.
自身的数据量很庞大
.
如果高效的处理数据
/
分析
1.2
框架调用流程
1.3 EasyUI
后台调用流程
1.4
分布式项目的设计思想
为了实现架构之间的松耦合
,
将项目根据分布式的思想进行拆分
.
1.
项目的垂直拆分
根据功能模块的不同将项目进行拆分
.
2.
项目的水平拆分
在大型项目中
,
由于开发的人数众多
,
项目复杂度高
.
为了保证项目开发的耦合性低
.
实现项目的水平拆分
.
将一个大型项目根据层级模块进行拆分
.Controller
项目
/Service
项目
Mapper
项目
项目创建时采用
聚合项目
的方式进行管理
1.5
分布式项目的
jar
包如何管理
将项目中用到公共的
jar
包使用服务支撑项目
jt-parent
进行添加
,
其他的项目只需要继
承
jt-parent
后获取对应的
jar
包全部依赖
.
从而实现了
jar
包的统一管理
1.6
介绍一下通用
Mapper
1.
早期使用
JDBC
操作数据库
.
该操作特别的繁琐
,
并且所有的数据需要自己手动的封
装
.
2. JPA:
是
java
持久化的
API(
用面向对象的方式操作数据库
)
思想
User user = new User(); setXXXX
User.setId(1);
User.setName(tom);
工具
API.insert(user); JPA
内部将对象自动转化为
sql
语句
Insert into …….
3. Haibernate
框架
.
号称是自动化的
(ORM)
程序员只需要操作对象
,
从而完成了对数据库的操作
.
缺点
:
1.
做新增
/
删除
/
修改会产生一些冗余的
sql(
出于安全性性考虑
)
2.
如果做多表关联操作
(CRUD) ,
需要装备配置文件
,
通过配置文件进行数据关
联设定
.
同时需要学习
Hql(
语句
)
3.
早期数据库容量是有限
,
超过
500
万后查询效率开始变低
.
4.Mybatis
优点
:
继承
ORM,
摈弃了冗余的
sql(
自己手写
),
5.
通用
Mapper
插件基于
mybaits
的
效果
:
可以实现单表
CRUD
使用对象操作
.(
反射机制
)
1.7 Nginx
是什么
,
有什么作用
Nginx
(engine x)
是一个轻量级的是一个高性能的
HTTP
和反向代理服务器
,
其特点是占
有内存少,
并发
能力强
主要是用来反向代理和实现负载均衡
.
1.8
谈一下反向代理和负载均衡
说明
:
1. Nginx
首先需要监听特定的域名
.
2.
当用户根据域名进行资源访问时
.
首先会访问
nginx
3.
之后
nginx
代替请求者根据内部的配置文件
,
实现反向代理
.
将请求转化为特定的请
求路径进行资源访问
.
4.
当
Nginx
获取资源后将数据返回给用户
.
完成请求的正确的响应
.
负载均衡
:
访问量高时
,
可以让服务器尽量分摊压力
,
实现策略
:
轮询
,
权重
,IP_HASH(
一般不用
)
1.9 Nginx
的健康监测机制
当后台的服务器出现宕机的现象
,
当时
nginx
中的配置文件并没有改变时
,
请求依然会
发往故障的机器
.
需要人为的维护配置文件
,
这样的操作不智能
.
那么
采用健康检测机制
.
可以
实现故障的自动的迁移
.
属性介绍
:
1.max_fails=1
当检测服务器是否正常时
,
如果检测失败的次数达到规定的次数时
,
则断定该服务器故障
,
在规定的时间周期内
,
不会将请求发往该机器
.
2.fail_timeout=60s
定义时钟周期
1.10 Nginx
如何保证请求参数不丢
在
nginx
中添加请求头的参数
,
表示每次请求时
,
携带请求者的请求头信息
,
访问服务器
.
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
1.11
数据库数据如何备份
(
数据备份策略
)
1.
冷备份
:
定期将数据库中的文件进行转储
,
定期进行数据备份
.
2.
热备份
:
搭建数据库主从结构
,
当主库数据发生改变时
,
从库根据主库的二进制日志
文件进行备份
.
3.
双机热备
:
数据库互为主从
,
数据库代理服务器对主库进行心跳检测
,
实现数据的高
可用
,
为了防止主库宕机后发生雪崩现象
1.12
数据库压力大时
,
怎么实现高可用
1.
用数据库代理服务器搭建数据库的读写分离进行分流
.
读取从库数据
,
写数据在主库
可用的数据库代理服务器有
Amoeba
和
Mycat
由于大量的用户的数据库操作都需要通过数据库来完成
.
造成数据库负载过高
.
因为数
据库操作中查询的操作占很大的比重
.
2.
数据库实现双机热备
.
1.13
数据库的优化策略
1.
优化
sql
语句
(
多表操作
) where
左连接 右连接 内连接
原则
:
尽可能根据主键查询
,
尽可能少用关联查询
.
2.
创建索引
(
对经常查询的数据创建索引
)
3.
添加缓存
(Redis/MemCache)
4.
定期进行数据转储
(
将一些查询较少的数据保存到历史表
,
让当前表维护可控的数
据量
)
5.
分库分表
(
需要大量的数据库服务器
)
1.14
什么是
Mycat
是一个数据库中间件
,
实现读写分离
,
分库分表和数据库故障迁移
.
1.15
什么是
Redis,
运行在哪里
开源的内存中的数据结构存储系统
,
可以用做数据库
,
缓存和消息中间件
基于
C
语言开发
,
运行时在内存中
,
运行速度很快
https://mp.weixin.qq.com/s/0Fqp2aGq7c_x_bEK9pOeeg
1.16 Redis
中的数据持久化策略
如果使用时允许丢失部分数据
(
少量的
)
则使用
RDB
模式
,
它的效率高
,
也是
redis
默认的
策略
,
如果不允许丢失数据则采用
AOF
模式
,
它的安全性高
,
但是效率较低
.
1.17 Redis
中的内存维护策略
问题
:
如果数据都存储到
redis
中
,
如果内存占满了
,redis
如何维护
?
解决方案
:
1.
动态的扩容
redis
节点
(
不科学
)
2.
为数据设定超时时间
3.
动态的将不用的数据删除
.(LRU
算法
)
算法介绍
:
内存管理
的一种页面置换算法,对于在内存中但又不用的
数据块
(内存块)叫做
LRU
,操作系统会根据哪些数据属于
LRU
而将其移出内存而腾出空间来加载另外的数据。
1.18 redis
为什么要分片
特点
:
实现动态内存扩容
数据存储机制
:
1.19 Hash
一致性
1.
均衡性
尽可能均匀分片节点中的数据
2.
单调性
实现数据的动态迁移
3.
分散性
由于分布式原因
,
导致不能获取全部节点信息
,
使得一个
key
有多个位置
4.
负载
是分散性另一种表现形式
.
表现为一个位置有多个
key
1.20
知道哨兵机制吗
,
怎么实现的
,
实现了什么功能
功能
:
实现
redis
高可用
机制
:
心跳检测
1.21
哨兵和分片的优缺点
优点
:
1.
分片可以使
redis
动态内存扩容
.
2.
分片可以将数据均匀的分配到不同的节点中
,
使数据分散保存
.
3.
哨兵可以实现
redis
高可用
.
缺点
:
1.
分片如果有一个节点出现宕机则整个分片都不能正常使用
.
2.
哨兵如果发生宕机现象
,
则影响整个
redis
服务
.
升级
:
1.
使用多台
redis
实现内存空间的动态扩容
.
2.
实现在
redis
内存实现高可用
(
不再使用哨兵机制
)
使用组件
(
ruby
)
搭建集群
,
实现分片和高可用的全部功能
.
1.22 Redis
集群
使用
ruby
工具创建集群
.
集群中全部的节点相互之间互相通讯
.
在
redis
内部实现高可
用
.redis
集群是分片和哨兵的集合体
.
1.23
伪静态技术
动态页面不能被搜索引擎收录
.
为了保证搜索引擎的友好性
.
则以
.html
的静态页面形式
展现动态页面数据
1.24
跨域问题
说明
:
在
www.jt.com
中调用
manage.jt.com
时访问不成功
.
原因该操作是一个跨域请求
.
浏览器不允许进行跨域请求
.
会将成功返回的数据进行拦截
.
不予显示
.
一切出于安全性
的考虑
.
1.25
同源策略
规则
:
请求
协议
/
域名
/
端口号
是否相同
,
如果三者都一致
,
那么是同域访问
.(
即同源策略
)
浏
览器可以正常执行
.
除此之外的全部的请求都是跨域请求
.
1.26
怎么解决跨域问题
?
利用
javascript
中
src
属性实现跨域
.
客户端定义回调函数
callback=hello
服务端程序封装特定的
JSON
格式
callback(JSON)
执行回调函数
JSONP
就是基于这个原理实现的
.
JSONP(JSON with Padding)
是
JSON
的一种
“
使用模式
”
,可用于解决主流
浏 览 器 的 跨 域 数 据 访 问 的 问 题 。 由 于 同 源 策 略 , 一 般 来 说 位 于
server1.example.com
的网页无法与不是
server1.example.com
的服务
器沟通,而
HTML
的