文章目录
- 1. java基础(1)
- 2. javaweb(1)
- 3. ssm+springboot+springCloud(1.5)
- 4. 企业开发的项目: 技术说明(1.5)
-
- 4.1 针对电商项目来说: SPU和SKU是什么, 用来表示什么?
- 4.2 前后端分离
- 4.3 Shiro和SpringSecurity权限校验框架的区别
- 4.4 分布式缓存redis在项目中如何实现高可用
- 4.5 常用的消息中间件有那些,底层都用什么协议,有什么区别
- 4.6 常用的高并发解决方案有那些
- 4.7 如何实现CAS单点登录
- 4.8 用户恶意频繁添加购物车, 添加购物车跨域问题, cookie禁用怎么办等常见的购物车问题如何解决(面试官: 项目中遇到了那些问题
- 4.9 怎么实现微信支付接入
- 4.10 为什么对数据库分库分表?
- 4.11 如何处理超时无效订单
- 4.12 如何完成一个秒杀,涉及的技术有那些,如何实现
- 4.13 如果保证不同数据库的事务一致性
- 4.14 描述openrestry(nginx+lua)和nginx的区别
- 4.15 git代码冲突解决常见的解决方式
- 4.16 如何实现项目的限流,解决方式是什么?
- 4.17 项目中如何实现文件的存储和管理的?FastDFS
- 4.18 FastDFS分布式文件存储和管理常见的坑有那些,如何避免
- 4.19 第三方oauth技术是如何实现的,采用的qq,微信,还是微博,具体怎么实用的
- 5. 面试总结(3,4)
1. java基础(1)
2. javaweb(1)
3. ssm+springboot+springCloud(1.5)
9.1 Spring Cloud 你们在项目中如何使用?
- SpringCloud概述
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 - SpringCloud(SpringBoot)如何构建微服务项目
- 创建一个父级项目:
统一springboot, springcloud的版本 - 创建一个子级项目:公共类的子级项目
统一维护其它自己项目要用到类 - 创建一个子级项目: 数据源的子级项目
- 创建一个网关的子级项目: GateWay
- 创建一个业务的子级项目: service
比如:
==商品业务的子级项目
==订单业务的子级项目
==秒杀业务的子级项目 - 创建一个业务接口的子级项目: openFeign
比如:
==商品业务接口的子级项目
==订单业务接口的子级项目
==秒杀业务接口的子级项目 - 创建一个用户访问入口的子级项目: web
- SpringCloud构建的微服务项目之间的调用关系(执行流程)
用户通过客户端访问—>web入口---->GateWay子级项目 ---->openFeign子级项目—>service子级项目—>数据库
9.2 Spring Cloud 的各个组件说明
9.2.1 Eureka组件: SpringCloud的服务发现和注册的组件(作用阿里的Nacos)
- 注册中心 : Eureka server, 负责"保存"的服务(服务指的service子级项目的controller配置路径)
- 生产者: Eureka Client, 负责将服务发送到注册中心,由注册中心负责保存.
- 消费者: Eureka Client, 作用: 用户就是消费者,在客户端输入访问地址(地址服务),如果在注册中心由服务,就去访问,
如果在注册中心没有改服务,就报404
总结: 注册中心, 生产者, 消费者 三者之间的关系,以及通过心跳机制来管理服务
9.2.2 Ribbon:负载均衡客户端,需要结合RestTemplate(HttpClient)进行服务的调用
- 默认的负载均衡:轮询
- 服务器启动时,先从Eureka server获取服务列表,然后在请求微服务时,通过RestTemplate进行http调用
- 自定义访问策略
实现步骤: 自定义一个类, 实现Rule接口,那么我们自定义的类就是一个策略类(代码里面就是算法,确定访问方式)
方式一: 在定义的类上面加上@Configuration这个注解(注意: 该配置类不能被springboot扫描到)
方式二:在全局配置文件application.yml配置 策略类.
9.2.3 Feign:Feign默认集成了Ribbon,用它来管理服务(管理controller配置的路径)
Feign可以通过@FeignClient 注解标识一个接口,通过该接口生成一个代理类来进行远程的微服务调用
9.2.4 Hystrix : 熔断限流的组件
为了防止微服务直接调用时,由于某一个微服务宕机导致整个项目无法访问(雪崩现象),这里采用Hystrix来阻断对存在宕机,异常情况的请求,直接本地返回
- 1)Ribbon集成,首先引入相关的依赖,接着开启@EnableHystrix
接着在调用微服务方法上添加 @HystrixCommand(fallbackMethod = “hiError”)指定服务异常的之后本地执行的方法 - 2)Feign集成,在微服务绑定的接口@FeignClient(value = “service-hi”,fallback = SchedualServiceHiHystric.class)中指定异常时调用本地接口实现
- 判定失败:Hystrix会在某个服务连续调用N次不响应的情况下,立即通知调用端调用失败,避免调用端持续等待而影响了整体服务,执行本地业务。
- 恢复服务:Hystrix间隔时间会再次检查此服务,如果服务恢复将继续提供服务。Hystrix间隔几秒会让其中一个请求去调用远程微服务,如果调用成功,就表示服务正常,后面就重新链接
- 开路 断路
9.2.5 GateWay :网关组件
GateWay (网关):
GateWay的主要功能是路由转发和过滤器。路由功能是微服务的一部分,
比如/api/user转发到到user服务,/api/shop转发到到shop服务。GateWay默认和Ribbon结合实现了负载均衡的功能。
作用:限流处理,认证和授权,单点登录,日志管理等等
GateWay的位置:
客户端发送请求---------所有请求------->GateWay网关: 路由分发----------->openFeign: 远程调用-------->service业务
9.3 Ribbon和Feign区别
-
Ribbon添加maven依赖 spring-starter-ribbon 使用@RibbonClient(value=“服务名称”) 使用RestTemplate调用远程服务对应的方法
-
feign添加maven依赖 spring-starter-feign 服务提供方提供对外接口 调用方使用 在接口上使用@FeignClient(“指定服务名”)
-
Ribbon和Feign的区别: Ribbon和Feign都是用于调用其他服务的,不过方式不同。
- 启动类使用的注解不同,Ribbon用的是@RibbonClient,Feign用的是@EnableFeignClients。
- 服务的指定位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
- 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign则是在Ribbon的基础上进行了一次改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求。不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。
9.4 Spring Cloud 注意的细节
注意: 配置Feign,以及Rabbion的配置类上, 一定不能被springboot的引导类扫描到.
9.5 springCloud版本号更新的方式
-
采用版本名+版本号,其中版本名采用伦敦地铁站命名,其中按照地铁首字母A-Z依次命令如Hoxton.SR9。但是现在已更改为主版本号.次版本号.修订号如2020.0.0
-
旧版本命名方式中,开发的快照版本(BUILD-SNAPSHOT)到里程碑版本(M),开发的差不多到会发布的候选发布版(RELEASE),最后到正式版(SR)版本。
-
新版本命名是
YYYY.MINOR.MICRO[-MODIFIER]
,拿2020.0.1-SNAPSHOT 这个版本来说,其中YYYY为年份全称、MINOR为辅助版本号、MICRO为补丁版本号。MODIFIER同上述修饰关键节点,BUILD-SNAPSHOT、里程碑M,正式发行版本RELEASE等当前已发布SpringCloud稳定版本见下图,在线查看地址:https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies
9.6 SpringCloud和SpringBoot有版本兼容的
浏览器访问https://start.spring.io/actuator/info,在返回的数据中找到spring-cloud即可以查看SpringCloud与SpringBoot版本对应关系。
4. 企业开发的项目: 技术说明(1.5)
4.1 针对电商项目来说: SPU和SKU是什么, 用来表示什么?
==SPU: strand product unit 标准产品单位(并不是一个具体的商品)
比如: 华为 P40 (商品详情页,规格和包装介绍)
华为P40产品标准: cpu高通870, 尺寸6.7
==sku: strored keeping unit 进入库存储单位(表示的就是一个具体的商品)
比如: 华为P40 红色,内存8G+256,表示一个具体的商品
4.2 前后端分离
前后端分离的目的: 实现前端和后台的数据不耦合,最终的效果是前后端都能够独立存在
前端人员开发: 独立开发前端代码
对于前端工程师:调用接口地址,接收json,解析json
后端人员开发: 独立开发后端代码
对于后端java工程师:提供业务的具体接口,响应json数据
后端人员通过swagger自动生成接口地址文档,
swagger使用参考地址: 点击访问swagger
4.3 Shiro和SpringSecurity权限校验框架的区别
相同点:
1:认证功能: 判断当前用户登录是否正确
2:授权功能: 如果用户登录成功,根据用户的角色把角色对应的权限数据(用户能够方位的资源)查询出来,赋值给当前用户.
3:加密功能
4:会话管理
5:缓存支持
6:rememberMe功能…
不同点:
优点:
1:Spring Security基于Spring开发,项目中如果使用Spring(SpringBoot)作为基础