本文目录如下:
- Golang、Java面试题
- 二十、Spring Cloud
- 什么是微服务架构?
- 服务拆分 有哪些注意事项?
- 什么是分布式集群?
- 分布式的 CAP 原则?
- 组件 - Spring Cloud 哪几个组件比较重要?
- 组件 - 为什么要使用这些组件?
- 组件 - Nacos 和 Eureka(已停更) 有什么区别?
- 组件 - Ngnix 和 Ribbon 有什么区别?
- Ribbon 负载均衡的原理?
- 组件 - 什么是 服务降级 与 服务熔断?
- 微服务 中如何实现 远程调用?
- REST 和 RPC 远程调用有什么区别?
- 二十一、Spring Security Oauth2
- Oauth2 有哪几种授权模式?
- Oauth2 实现单点登录的系统架构?
- Token码 中存储的是哪些信息,用户信息一般储存在哪里?
- 二十二、Docker
- 什么是 Docker? Docker 由哪些部分组成?
- image.png
- Docker 常用指令有哪些?
- docker run 和 docker start 的区别?
- 二十三、kubernets(k8s)
- 什么是 k8s?
- Docker 和 k8s 有什么区别?
Golang、Java面试题
二十、Spring Cloud
- SpringCloud入门教程 - 包含创建 Spring Cloud项目教程 - CSDN
- 写给小白看的Spring Cloud入门教程 - 掘金
- Spring Cloud 入门总结 - 掘金
什么是微服务架构?
微服务架构 就是根据业务 拆分软件模块,每个模块 单独运行,每个模块本身是 单体。
服务拆分 有哪些注意事项?
- 1.不同微服务, 不要重复开发 相同业务。
- 2.微服务 数据独立,不要访问其它微服务的 数据库。(一个微服务 对应 一个数据库)
- 3.微服务可以将 自己的业务 暴露为 接口,供其它微服务 调用。
什么是分布式集群?
- 分布式系统: 若干个程序部署在若干台不同的计算机上,它们通过 网络 协作完成一个服务。
- 集中式集群: 相同的程序, 在本机部署了多次, 有了 Docker 后这很轻松。
- 分布式集群: 若干个程序在 不同的计算机 上部署了 多次。(强调 容灾能力)
分布式的 CAP 原则?
CAP原则
: 指的是在一个分布式系统中,一致性
(Consistency)、可用性
(Availability)、分区容错性
(Partition tolerance)。- CAP原则 指的是: 这三个要素最多只能 同时实现两点,不可能 三者兼顾。
组件 - Spring Cloud 哪几个组件比较重要?
总体架构
Nacos
/Eureka
: 注册中心: 主管 服务的发现 与 相互调用。(还有 Zookeeper)Feign
: 服务远程调用Ribbon
: 负载均衡器Spring Cloud Gateway
、Zuul
: 服务网关Spring Cloud Config
: 配置中心Hystrix
: 服务监控和保护: 为 微服务 提供了 服务降级 与 熔断 的方案。
组件 - 为什么要使用这些组件?
- ~~Eureka与案例分析-Eureka解决什么问题?~- 已停更~ ——
Eureka 使用教程视频- Ribbon负载均衡原理-Ribbon解决什么问题?
- Nacos-认识和安装Nacos
- 基于 Feign 远程调用
组件 - Nacos 和 Eureka(已停更) 有什么区别?
- Nacos 支持 CP(不保证 可用性) 和 AP; Eureka 只支持 AP(不保证 一致性)。
- Nacos 的阈值是针对 某个具体Service 的,而不是针对所有服务的;但 Eureka 的自我保护阈值是针对 所有服务 的。
- Nacos 使用 Netty, 是 长连接; Eureka 是 短连接, 定时发送。
组件 - Ngnix 和 Ribbon 有什么区别?
Nginx
是 客户端 所有请求统一交给 Nginx,由 Nginx 进行实现 请求转发,属于 服务器端负载均衡。Ribbon
是从 Eureka注册中心 上获取 服务注册信息列表,缓存到本地,然后在 本地 实现 轮询负载均衡 策略。
Nginx
适合于 服务器端实现负载均衡 比如 Tomcat。Ribbon
适合与在微服务中 RPC远程调用 实现 本地服务负载均衡,比如 Dubbo、SpringCloud 中都是采用 本地负载均衡。
Ribbon 负载均衡的原理?
组件 - 什么是 服务降级 与 服务熔断?
服务降级
:
- 超时:当下游的服务响应过慢,上游服务主动停掉一些不太重要的业务,加快 响应速度。
- 程序运行异常:当 下游的服务 因为某种原因 不可用,上游 主动调用本地的一些 降级逻辑,加快 响应速度。
服务熔断
:
- 不调用该 失败的服务,直接返回,快速释放资源。
微服务 中如何实现 远程调用?
- 基于
RestTemplate
发起的 http请求 实现 远程调用。http请求
做 远程调用 是与语言无关的调用,只要知道对方的 ip、端口、接口路径、请求参数 即可。
REST 和 RPC 远程调用有什么区别?
二十一、Spring Security Oauth2
Spring Cloud Alibaba 实战(四)Oauth2篇
Oauth2 有哪几种授权模式?
- 授权码模式 (微信、QQ、Github、Google 授权)
- 简化模式
- 密码模式 (一般项目常用)
- 客户端模式
Oauth2 实现单点登录的系统架构?
客户端
认证中心
:OAuth2 主要实现端,Token 的生成、刷新、验证 都在认证中心完成。- 会员服务:微服务之一,接收到请求后会到认证中心验证。
- 订单服务:微服务之二,接收到请求后会到认证中心验证。
Token码 中存储的是哪些信息,用户信息一般储存在哪里?
Token码是一种用于身份验证和授权的令牌,它通常包含以下数据:
- 用户信息:例如 用户ID 或 用户名。
- 过期时间
- 访问权限:令牌可能包含用户被授予的 特定访问权限,以便系统可以验证用户是否有权访问所请求的资源或执行所请求的操作。
- 随机数或加密密钥:为了增加令牌的安全性,令牌可能包含随机数或加密密钥,用于生成或验证数字签名或加密令牌的内容。
- 其他元数据:令牌可能包含其他元数据,例如令牌类型,发行者信息,客户端ID等。
Token 通常包含一些 用户信息,但是为了安全起见,不应该将所有用户信息存储在 Token 中。
- 将 Token 码作为 键(key), 用户信息 作为 值(value) 存储在Redis中是一种常见的做法,可以提高应用程序的性能和可伸缩性。
- 当需要验证用户身份或访问授权时,应用程序可以使用 Token 作为 键(key) 从 Redis 中检索 用户信息。
二十二、Docker
什么是 Docker? Docker 由哪些部分组成?
# Docker 安装教程 - 详细教程
Docker
是一个用于 开发,交付 和 运行应用程序 的开放平台。Docker 使您能够将 应用程序 与 基础环境 分离,从而实现 快速交付软件。Docker 由三部分组成:
库
:一个总的 仓库,包含 所有的镜像,使用时可以从 库 拉取 镜像 到本地。镜像 (Image)
:从库中拉取下来的 应用,比如 mysql。容器 (Container)
:镜像运行之后就是 容器,容器 和 镜像 可以互相转换。
Docker 常用指令有哪些?
Docker 常用命令汇总 | Docker教程 (超全总结)
docker images
: 查看本地主机的所有镜像docker search 镜像名
: 搜索镜像docker pull 镜像名
: 下载镜像docker run [可选参数] image
: 创建一个 新的容器 并 启动容器
docker start 容器id
: 启动容器docker restart 容器id
: 重启容器docker stop 容器id
: 停止当前运行的容器docker ps
: 列出容器docker kill 容器id
: 强制停止当前容器
docker run 和 docker start 的区别?
点击查看
docker run
: 创建一个 新的容器, 是 将镜像放入容器 并 启动容器。docker start
: 启动一个或多个 已经被停止的容器。类似用法的还有 docker stop 和 docker restart。
二十三、kubernets(k8s)
什么是 k8s?
Docker 和 k8s 有什么区别?
Docker
是用于构建、分发、运行容器的平台和工具。k8s
是一个对 Docker容器 进行 编排 的系统,主要围绕 Pods 进行工作。Pods 是 k8s 生态中 最小的调度单位,可以包含 一个 或 多个容器。