先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
正文
Dropwizard:http://www.dropwizard.io
(关注单个微服务的开发)
Consul、etcd&etc.(微服务的模块)
Spring Cloud并不是一种技术,他是一系列技术框架的集合。它利用 Spring Boot 的开发便利性简化了分布式系统基础设施的开发,如服务发现、服务注册、配置中心、消息总线、负载均衡、 熔断器、数据监控等,都可以用 SpringBoot 的开发风格做到一键启动和部署
1、Spring Cloud和Spring Boot是什么关系
SpringBoot:
-
快速开发单个微服务
-
专注于快速、方便集成的单个微服务个体
-
使用了默认大于配置的理念
-
可以单独使用
SpringCloud:
-
基于 Spring Boot 实现的开发工具,必须基于Spring Boot开发
-
关注全局的服务治理框架
-
离不开 Spring Boot
2、Spring Cloud相关基础服务组件
-
服务发现——Netflix Eureka (
Nacos
) -
服务调用——Netflix Feign
-
熔断器 ——Netflix Hystrix
-
服务网关 ——Spring Cloud GateWay
-
分布式配置——Spring Cloud Config (
Nacos
) -
消息总线 —— Spring Cloud Bus (
Nacos
)
3、Spring Cloud的版本
Spring Cloud 并没有熟悉的数字版本号,而是对应一个开发代号。
开发代号看似没有什么规律,但实际上首字母是有顺序的,比如: Dalston 版本,我们可以简称 D 版本,对应的 Edgware 版本我们可以简称 E 版本。
小版本:
Spring Cloud 小版本分为 :
-
M : MileStone , M1 表示第 1 个里程碑版本,一般同时标注 PRE ,表示
预览版版
。 -
SR : Service Release , SR1 表示第 1 个正式版本,一般同时标注 GA : (GenerallyAvailable), 表示
稳定版本
。
========================================================================
1、基本概念
是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
常见的注册中心:
-
Eureka(原生,2.0遇到性能瓶颈,停止维护)
-
Zookeeper(支持,专业的独立产品。例如:dubbo)
-
Consul(原生,GO语言开发)
-
Nacos
Nacos 可以与 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud
Config
- 通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
Nacos主要提供以下四大功能:
-
服务发现和服务健康监测
-
动态配置服务
-
动态DNS服务
-
服务及其元数据管理
Nacos结构图:
2、Nacos下载和安装
(1)下载地址和版本:
下载地址:https://github.com/alibaba/nacos/releases
下载版本:nacos-server-1.1.4.tar.gz 或 nacos-server-1.1.4.zip,解压任意目录即可
2 ) 启动nacos服务
- Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式)
启动命令:sh startup.sh -m standalone
- Windows
启动命令:cmd startup.cmd 或者双击startup.cmd运行文件。
访问:http://localhost:8848/nacos
用户名密码:nacos/nacos
把service-edu微服务注册到注册中心中,service-vod步骤相同
- 注意,在service包下的都需要配置nacos服务器,因为都配置了下面的nacos配置
不然会报错
1、在service模块配置pom
配置 Nacos 客户端的 pom 依赖
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
2、添加服务配置信息
配置application.properties,在客户端微服务中添加注册Nacos服务的配置信息
nacos注册中心
spring.cloud.nacos.discovery.server-addr= localhost:8848
3、添加Nacos客户端注解
在客户端微服务启动类中添加注解
@EnableDiscoveryClient //服务发现功能
4、启动客户端微服务
启动注册中心
启动已注册的微服务,可以在 Nacos 服务列表中看到被注册的微服务
- 跟上面步骤一样给service-vod、service-oss配置注册中心避免报错
====================================================================
1、基本概念
- Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。
Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。
-
Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解,并整合了Ribbon和Eureka,从而让Feign的使用更加方便。
-
Spring Cloud Feign是基于Netflix feign实现,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供这两者的强大功能外,还提供了一种声明式的Web服务客户端定义的方式。
-
Spring Cloud Feign帮助我们定义和实现依赖服务接口的定义。在Spring Cloud feign的实现下,只需要创建一个接口并用注解方式配置它,即可完成服务提供方的接口绑定,简化了在使用Spring CloudRibbon时自行封装服务调用客户端的开发量。
1、需求
删除课时的同时删除云端视频
2、在service模块添加pom依赖
org.springframework.cloud
spring-cloud-starter-openfeign
3、在调用端启动类添加注解
@EnableFeignClients
4、创建包和接口
创建 client 包
@FeignClient注解
用于指定从哪个服务中调用功能 ,名称与被调用的服务名保持一致。
@GetMapping注解
用于对被调用的微服务进行地址映射。
@PathVariable注解
一定要指定参数名称,否则出错
@Component注解
防止,在其他位置注入CodClient时idea报错
@Component
@FeignClient(“service-vod”)//指定调用的服务名,前提要注册到nacos注册中心中
public interface VodClient {
//根据视频id删除阿里云视频
@DeleteMapping(“/eduvod/video/removeAliyunVideoById/{id}”)
public R removeAliyunVideoById(@PathVariable(“id”) String id);
}
5、调用微服务
在【调用端】的VideoServiceImpl中调用client中的方法
//根据课程id删除小节
@Override
public void removeVideoByCourseId(String id) {
//查询云端视频id
EduVideo eduVideo = baseMapper.selectById(id);
String videoSourceId = eduVideo.getVideoSourceId();
//判断小节中是否有对应的视频文件
if (!StringUtils.isEmpty(videoSourceId)){
//有就删除
vodClient.removeAliyunVideoById(videoSourceId);
}
//删除小节
baseMapper.deleteById(id);
}
6、测试
添加一个小节
- 点击删除
- 检查数据库和阿里云视频点播
- 被删除了,测试成功
==================================================================
需求:删除课程的同时删除云端视频,要求添加一个可以删除多个视频的方法
- VodController
//根据id删除多个阿里云视频
@DeleteMapping(“/removeBatch”)
public R removeBatch(@RequestParam(“videoIdList”) List videoIdList){
vodService.removeMoreVideo(videoIdList);
return R.ok();
}
- service
接口
//根据id删除多个阿里云视频
void removeMoreVideo(List videoIdList);
Impl
//根据id集合删除多个视频
@Override
public void removeMoreVideo(List videoIdList) {
//将集合转换为1,2,3格式
String str = StringUtils.join(videoIdList.toArray(), “,”);
try {
//初始化对象
DefaultAcsClient client = InitObject.initVodClient(ConstantVodUtils.ACCESSKEY_ID, ConstantVodUtils.ACCESSKEY_SECRET);
//创建删除视频request对象
DeleteVideoRequest request = new DeleteVideoRequest();
//向request设置要删除视频的id值
request.setVideoIds(str);
//调用初始化对象的方法实现删除
DeleteVideoResponse response = client.getAcsResponse(request);
System.out.println(“RequestId = “+ response.getRequestId()+”\n”);
}catch (Exception e){
throw new AchangException(20001,“视频删除失败”);
}
}
- Swagger测试
service_edu去调用service_vod接口实现删除多个视频的功能
-
给service_edu启动类上加
@EnableFeignClients
-
创建接口标注
@FeignClient
指定调用的服务名
@Component
@FeignClient(“service-vod”)//指定调用的服务名,前提要注册到nacos注册中心中
- 在接口下创建调用service_vod的方法
//根据多个视频id删除多个阿里云视频
@DeleteMapping(“/eduvod/video/removeBatch”)
public R removeBatch(@RequestParam(“videoIdList”) List videoIdList);
- VideoServiceImpl.java
//根据课程id删除小节
@Override
public void removeVideoByCourseId(String id) {
//根据课程id查询课程里面的所有视频
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq(“course_id”,id);
wrapper.select(“video_source_id”);
List eduVideos = baseMapper.selectList(wrapper);
List list = new ArrayList<>();
for (EduVideo eduVideo : eduVideos) {
String sourceId = eduVideo.getVideoSourceId();
if (!StringUtils.isEmpty(sourceId)){
list.add(sourceId);
}
}
//根据多个视频id,删除多个视频
if (list.size()>0){
vodClient.removeBatch(list);
}
QueryWrapper queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq(“course_id”, id);
baseMapper.delete(queryWrapper2);
}
- EduCourseServiceImpl
//删除课程
@Override
public boolean removeCourse(String id) {
//1、根据课程id删除小节
eduVideoService.removeVideoByCourseId(id);
Kafka进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
}
QueryWrapper queryWrapper2 = new QueryWrapper<>();
queryWrapper2.eq(“course_id”, id);
baseMapper.delete(queryWrapper2);
}
- EduCourseServiceImpl
//删除课程
@Override
public boolean removeCourse(String id) {
//1、根据课程id删除小节
eduVideoService.removeVideoByCourseId(id);
Kafka进阶篇知识点
[外链图片转存中…(img-6Ne6zx40-1713598164379)]
Kafka高级篇知识点
[外链图片转存中…(img-gqhFhwWS-1713598164380)]
44个Kafka知识点(基础+进阶+高级)解析如下
[外链图片转存中…(img-lNH8I5ZT-1713598164380)]
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-eDxnp2hL-1713598164381)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!