Day209(1),java锁的面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

spring.cloud.nacos.discovery.server-addr= localhost:8848

3、添加Nacos客户端注解

在客户端微服务启动类中添加注解

@EnableDiscoveryClient //服务发现功能

4、启动客户端微服务

启动注册中心

启动已注册的微服务,可以在 Nacos 服务列表中看到被注册的微服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HE9iHsmP-1614784096529)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303123417446.png)]

  • 跟上面步骤一样给service-vod、service-oss配置注册中心避免报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55Yso9Iz-1614784096531)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303161206277.png)]


服务调用-Feign

====================================================================

一、Feign


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时自行封装服务调用客户端的开发量。

二、实现服务调用


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3D9zcoAZ-1614784096532)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303113950630.png)]

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、测试

添加一个小节

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aJlJkeg0-1614784096533)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303160657127.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CslIKZde-1614784096535)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303160715674.png)]

  • 点击删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7DVZveuf-1614784096537)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303160725907.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ltoWScim-1614784096538)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303160736348.png)]

  • 检查数据库和阿里云视频点播

在这里插入图片描述

  • 被删除了,测试成功

完善删除课程业务

==================================================================

一、service_vod服务


需求:删除课程的同时删除云端视频,要求添加一个可以删除多个视频的方法

  • 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_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);

//2、根据课程id删除章节部分

eduChapterService.removeChapterByCourseId(id);

//3、根据课程id删除课程描述

eduCourseDescriptionService.removeById(id);

//4、根据课程id删除课程本身

int result = baseMapper.deleteById(id);

if (result>=1){

return true;

}else {

throw new AchangException(20001,“删除失败”);

}

}

阿昌发现的小BUG,优化方案如下

当之前上传了视频后点击确认,在点击添加小节,会发现视频在存在,并没清空,所以在添加小节弹框的时候将文件列表清空,保证每次添加的时候都没有文件,不然会导致小节表中的视频id为null,方法调用出现错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p81Uyb9u-1614784096544)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303183917505.png)]

  • 测试

三、小节删除功能


发现根据老师过来,加入自己的想法后有点bug,所以阿昌打算再多写接口,来实现小节删除功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q19kDTrH-1614784096545)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184144696.png)]

1、前端部分

  • 页面方法

//删除小节

removeVideo(videoId) {

this.$confirm(“此操作将永久删除小节信息, 是否继续?”, “提示”, {

confirmButtonText: “确定”,

cancelButtonText: “取消”,

type: “warning”,

}).then(() => {

//点击确定,执行then方法

video.deleteByVideoIdAndAliyun(videoId).then((resp) => {

//删除成功

//提示信息

this.$message({

type: “success”,

message: “删除成功!”,

});

//刷新页面

this.getChapterVideoByCourseId();

});

});

}

  • api方法

//根据小节id删除单个阿里云视频

deleteByVideoIdAndAliyun(videoId) {

return request({

url: /eduservice/edu-video/deleteVideoByid/${videoId},

method: delete,

})

},


2、后端部分

  • EduVideoController

//删除小节

@DeleteMapping(“/deleteVideoByid/{id}”)

public R deleteVideoByid(@PathVariable String id){

eduVideoService.removeVideoIdAndAliyun(id);

return R.ok();

}

  • EduVideoService

void removeVideoIdAndAliyun(String id);

  • EduVideoServiceImpl

//根据小节id删除视频和小结内容

@Override

public void removeVideoIdAndAliyun(String id) {

EduVideo eduVideo = baseMapper.selectById(id);

String videoSourceId = eduVideo.getVideoSourceId();

if (!StringUtils.isEmpty(videoSourceId)){

//根据视频id删除阿里云视频

vodClient.removeAliyunVideoById(videoSourceId);

}

//删除小节id

baseMapper.deleteById(id);

}

  • 测试

点击删除小节后,数据库和阿里云点播的视频都被删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RnabXy7U-1614784096547)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184703861.png)]

点击删除章节,如果她下面有小节的话就会提示不能删除

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FFTFhdnI-1614784096548)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184655715.png)]


熔断器Hystrix

====================================================================

一、 Hystrix 基本概念


1、Spring Cloud调用接口过程配合

Spring Cloud 在接口调用上,大致会经过如下几个组件配合:

Feign -----> Hystrix —> Ribbon —> Http Client(apache http components 或者 Okhttp) 具体交互流程上,如下

图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-az4vffvq-1614784096550)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184820464.png)]

阿昌的理解

先接口化请求调用,对指定请求的地址进行设定,并交给Feign过来;Feign实际去请求远程提供的接口;如果中途出现异常由Hystrix来中断和熔断服务;如果请求是一个集群,当请求传递给Ribbon后,会根据各个因素和设定的规则来选择要请求的哪个服务器接口来处理,最后httpClient来获取请求并执行调用最后的方法并返回

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vhlvONrO-1614784096551)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184829952.png)]


2、Hystrix概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIvinTfh-1614784096553)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184852327.png)]

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

x概念

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pIvinTfh-1614784096553)(../../../../../AppData/Roaming/Typora/typora-user-images/image-20210303184852327.png)]

总结

这份面试题几乎包含了他在一年内遇到的所有面试题以及答案,甚至包括面试中的细节对话以及语录,可谓是细节到极致,甚至简历优化和怎么投简历更容易得到面试机会也包括在内!也包括教你怎么去获得一些大厂,比如阿里,腾讯的内推名额!

某位名人说过成功是靠99%的汗水和1%的机遇得到的,而你想获得那1%的机遇你首先就得付出99%的汗水!你只有朝着你的目标一步一步坚持不懈的走下去你才能有机会获得成功!

成功只会留给那些有准备的人!

[外链图片转存中…(img-9Zul1jMc-1713598133101)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-JgkAb10G-1713598133101)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值