最全Day208,顺利拿到offer

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 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,“删除失败”);

}

}

  • 测试

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

  • 查看数据库

课程id为101的全部都删除了


2、前端部分

  • 编写api方法

guli-admin\src\api\teacher\course.js

//课程列表数据查询

removeCourseById(courseId){

return request({

url: “/eduservice/edu-course/removeCourseById/”+courseId,

method: ‘get’,

})

}

  • 引入api

guli-admin\src\views\edu\course\list.vue

//引入要调用的方法,course.js文件

import course from “@/api/teacher/course.js”;

  • 调用方法

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

removeCourseById(id) {

this.$confirm(“此操作将永久删除该课程记录, 是否继续?”, “提示”, {

confirmButtonText: “确定”,

cancelButtonText: “取消”,

type: “warning”,

}).then(() => {

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

course.removeCourseById(id).then((resp) => {

//删除成功

//提示信息

this.$message({

type: “success”,

message: “删除成功!”,

});

//刷新页面

this.getList();

});

});

}

  • 效果测试

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

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


  • 前端导航栏

<el-form

:inline=“true”

class=“demo-form-inline”

style=“margin-left: 20px; margin-top: 12px”

<el-input

v-model="courseQuery. "

placeholder=“请输入名称”

<el-button type=“primary” icon=“el-icon-search” @click=“getList()”

查询</el-button

<el-button type=“default” @click=“resetData()”>清空

  • 效果

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


三、课程列表中的编辑课程基本信息、编辑课程大纲功能


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

  • 前端

<el-button type=“primary” size=“mini” icon=“el-icon-edit”

编辑课程基本信息</el-button

<el-button type=“info” size=“mini” icon=“el-icon-edit”

编辑课程大纲</el-button

  • 修改路由

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

  • guli-admin\src\views\edu\course\chapter.vue

根据连接中是否有id值来决定是否回显数据

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

  • guli-admin\src\views\edu\course\info.vue

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


阿里云视频点播

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

一、介绍


参考文章:

https://blog.csdn.net/qq_33857573/article/details/79564255


视频点播( ApsaraVideo for VoD )是集音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分

发加速于一体的一站式音视频点播解决方案。

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

二、开通视频点播云平台


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

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

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

资费说明

https://www.aliyun.com/price/product?spm=a2c4g.11186623.2.12.7fbd59b9vmXVN6#/vod/detail

  • 后付费

  • 套餐包

  • 欠费说明

  • 计费案例:https://help.aliyun.com/document_detail/64032.html?spm=a2c4g.11186623.4.3.363db1bcfdvxB5


三、整体流程


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

四、视频点播服务的基本使用


完整的参考文档:

https://help.aliyun.com/product/29932.html?spm=a2c4g.11186623.6.540.3c356a58OEmVZJ

1 、设置转码格式

选择全局设置 > 转码设置,单击添加转码模板组。

在视频转码模板组页面,根据业务需求选择封装格式和清晰度。

或直接将已有的模板设置为默认即可

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

2 、分类管理

选择全局设置 > 分类管理

3 、上传视频文件

选择媒资库 > 音视频,单击上传音视频

4 、配置域名

音视频上传完成后,必须配一个已备案的域名,并完成 CNAME 绑定

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

得到 CNAME

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

在购买域名的服务商处的管理控制台配置域名解析

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

5 、在控制台查看视频

此时视频可以在阿里云控制台播放

6 、获取 web 播放器代码

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


使用服务端SDK

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

一、服务端SDK


1、简介

sdk的方式将api进行了进一步的封装,不用自己创建工具类。

我们可以基于服务端SDK编写代码来调用点播API,实现对点播产品和服务的快速操作

2、功能介绍

  • SDK封装了对API的调用请求和响应,避免自行计算较为繁琐的 API签名。

  • 支持所有点播服务的API,并提供了相应的示例代码。

  • 支持7种开发语言,包括:Java、Python、PHP、.NET、Node.js、Go、C/C++。

  • 通常在发布新的API后,我们会及时同步更新SDK,所以即便您没有找到对应API的示例代码,也可以参考旧的示例自行实现调用。


二、使用SDK


0、创建环境

  • 在service下创建子模块service_vod引入下面相关依赖,因为在父工程guli_parent已经规定了版本号

com.aliyun

aliyun-java-sdk-core

com.aliyun

aliyun-java-sdk-vod

com.alibaba

fastjson

1、安装

参考文档:https://help.aliyun.com/document_detail/57756.html

添加maven仓库的配置和依赖到pom

sonatype-nexus-staging

Sonatype Nexus Staging

https://oss.sonatype.org/service/local/staging/deploy/maven2/

true

true

添加Jar包依赖

com.aliyun

aliyun-java-sdk-core

4.5.1

com.aliyun

aliyun-java-sdk-vod

2.15.11

com.alibaba

fastjson

1.2.62

  • aliyun-java-sdk-core的版本4.4.5及以上。

2、初始化

参考文档:https://help.aliyun.com/document_detail/61062.html

根据文档示例创建 com.achang.vodtest.InitObject

//初始化类

public class InitObject {

public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {

String regionId = “cn-shanghai”; // 点播服务接入区域

DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);

DefaultAcsClient client = new DefaultAcsClient(profile);

return client;

}

}

3、测试功能

获取视频播放地址:

public static void main(String[] args) throws ClientException {

//1、根据视频id获取视频播放地址

//创建初始化对象

DefaultAcsClient cl = InitObject.initVodClient(“LTAI4GBABS7Sq8MLf2RNwLuu”, “ynfsD31FLdcRoQVFSIdHP7AeoKaf4o”);

//创建获取视频地址request对象和response对象

GetPlayInfoResponse response = new GetPlayInfoResponse();

GetPlayInfoRequest request = new GetPlayInfoRequest();

//向request对象设置视频id值

request.setVideoId(“e9102d65ba3649f0b9fc8679cc5bda42”);

//调用初始化对象里面的方法传递request,获取数据

response = cl.getAcsResponse(request);

List<GetPlayInfoResponse.PlayInfo> playInfoList = response.getPlayInfoList();

//播放地址

for (GetPlayInfoResponse.PlayInfo playInfo : playInfoList) {

System.out.print("PlayInfo.PlayURL = " + playInfo.getPlayURL() + “\n”);

//PlayInfo.PlayURL = https://outin-5e688ec47b2c11ebb00500163e06123c.oss-cn-shanghai.aliyuncs.com/sv/52a57879-177f1fd5033/52a57879-177f1fd5033.mp4?Expires=1614680252&OSSAccessKeyId=LTAIrkwb21KyGjJl&Signature=FPlVfGbIDVGuvR3W8f2K4QcpATw%3D

}

//Base信息

System.out.print("VideoBase.Title = " + response.getVideoBase().getTitle() + “\n”);//VideoBase.Title = 6 - What If I Want to Move Faster.mp4

}

获取视频播放凭证:

@Test

public void test1() throws ClientException {

//创建初始化对象

DefaultAcsClient cl = InitObject.initVodClient(“LTAI4GBABS7Sq8MLf2RNwLuu”, “ynfsD31FLdcRoQVFSIdHP7AeoKaf4o”);

//创建获取视频地址request对象和response对象

GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();

//向request对象设置视频id值

request.setVideoId(“e9102d65ba3649f0b9fc8679cc5bda42”);

GetVideoPlayAuthResponse response = cl.getAcsResponse(request);

//播放凭证

System.out.print("PlayAuth = " + response.getPlayAuth() + “\n”);

//VideoMeta信息

System.out.print("VideoMeta.Title = " + response.getVideoMeta().getTitle() + “\n”);

}


使用服务端SDK

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

参考文档:https://help.aliyun.com/document_detail/53406.html

一、安装SDK


1、配置pom

com.aliyun

aliyun-java-sdk-core

4.5.1

com.aliyun.oss

aliyun-sdk-oss

3.10.2

com.aliyun

aliyun-java-sdk-vod

2.15.11

com.alibaba

fastjson

1.2.28

org.json

json

20170516

com.google.code.gson

gson

2.8.2

2、安装非开源jar包

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

在本地Maven仓库中安装jar包:

下载视频上传SDK,解压,命令行进入lib目录,执行以下代码

mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-sdk-vod-upload -Dversion=1.4.11 -Dpackaging=jar -Dfile=aliyun-java-vod-upload-1.4.11.jar

然后在pom中引入jar包

com.aliyun

aliyun-sdk-vod-upload

1.4.11


二、测试


@Test

public void testFileUpload(){

String accessKeyId = “LTAI4GBABS7Sq8MLf2RNwLuu”;

String accessKeySecret = “ynfsD31FLdcRoQVFSIdHP7AeoKaf4o”;

String title = “6 - What If I Want to Move Faster”; //上传之后文件的名称

String fileName = “C:\Users\PePe\Desktop\学习\博客\学习资料\21、谷粒学院 -尚硅谷\在线教育–谷粒学院\1-阿里云上传测试视频\6 - What If I Want to Move Faster.mp4”; //本地文件的路径和名称

UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);

/* 可指定分片上传时每个分片的大小,默认为2M字节 */

request.setPartSize(2 * 1024 * 1024L);

/* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/

request.setTaskNum(1);

UploadVideoImpl uploader = new UploadVideoImpl();

UploadVideoResponse response = uploader.uploadVideo(request);

if (response.isSuccess()) {

System.out.print(“VideoId=” + response.getVideoId() + “\n”); //获取到上传视频的id

} else {

/* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */

System.out.print(“VideoId=” + response.getVideoId() + “\n”);

System.out.print(“ErrorCode=” + response.getCode() + “\n”);

System.out.print(“ErrorMessage=” + response.getMessage() + “\n”);

}

}

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


视频点播微服务功能

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

一、后端部分–【创建视频点播微服务】


1、创建微服务模块

service_vod

2、pom

com.aliyun

aliyun-java-sdk-core

com.aliyun.oss

aliyun-sdk-oss

com.aliyun

aliyun-java-sdk-vod

com.alibaba

fastjson

org.json

json

com.aliyun

aliyun-sdk-vod-upload

joda-time

joda-time

3、主启动类

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

@ComponentScan(basePackages = {“com.achang”}) //用于扫描swagger

public class Service_vod_Main8003 {

public static void main(String[] args) {

SpringApplication.run(Service_vod_Main8003.class,args);

}

}

4、VodController

@RestController

@CrossOrigin

@RequestMapping(“/eduvod/video”)

public class VodController {

@Autowired

private VodService vodService;

//上传视频到阿里云

@PostMapping(“/uploadAliyunVideo”)

public R uploadAliyunVideo(MultipartFile file){

//返回上传视频的id

String videoId = vodService.uploadVideoAliyun(file);

return R.ok().data(“videoId”,videoId);

}

}

5、service

  • service接口

public interface VodService {

String uploadVideoAliyun(MultipartFile file);

}

  • serviceImpl

@Service

public class VodServiceImpl implements VodService {

@Override

public String uploadVideoAliyun(MultipartFile file) {

try {

//accessKeyId,accessKeySecret

//fileName:上传文件原始名称

String fileName = file.getOriginalFilename();

//title:上传之后显示名称

String title = fileName.substring(0,fileName.lastIndexOf(“.”));

//inputStream:上传文件的输入流

InputStream inputStream = file.getInputStream();

UploadStreamRequest request = new UploadStreamRequest(ConstantVodUtils.ACCESSKEY_ID

, ConstantVodUtils.ACCESSKEY_SECRET

, title, fileName

, inputStream);

UploadVideoImpl uploader = new UploadVideoImpl();

UploadStreamResponse response = uploader.uploadStream(request);

System.out.print(“RequestId=” + response.getRequestId() + “\n”); //请求视频点播服务的请求ID

String videoId = null;

if (response.isSuccess()) {

videoId = response.getVideoId();

} else { //如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因

videoId = response.getVideoId();

}

return videoId;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

}

6、ConstantVodUtils

用来读取application.properties里面的值,并封装

@Component

public class ConstantVodUtils implements InitializingBean {

@Value(“${aliyun.vod.file.keyid}”)

private String accessKeyId;

@Value(“${aliyun.vod.file.keysecret}”)

private String accessKeySecret;

public static String ACCESSKEY_ID;

public static String ACCESSKEY_SECRET;

@Override

public void afterPropertiesSet() throws Exception {

ACCESSKEY_ID = this.accessKeyId;

ACCESSKEY_SECRET = this.accessKeySecret;

}

}

7、application.properites

服务端口号

server.port=8003

服务名

spring.application.name=service_vod

环境设置 dev test prod

spring.profiles.active=dev

最大上传单个文件大小:默认1M

spring.servlet.multipart.max-file-size=1024MB

最大置总上传的数据大小 :默认10M

spring.servlet.multipart.max-request-size=1024MB

阿里云 vod

aliyun.vod.file.keyid=LTAI4GBABS7Sq8MLf2RNwLuu

aliyun.vod.file.keysecret=ynfsD31FLdcRoQVFSIdHP7AeoKaf4o

8、测试

通过swagger测试

访问:http://localhost:8003/swagger-ui.html

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

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


二、前端部分


  • 数据定义

fileList: [], //上传文件列表

BASE_API: process.env.BASE_API, // 接口API地址

  • 整合上传组件

<el-upload

:on-success=“handleVodUploadSuccess”

:on-remove=“handleVodRemove”

:before-remove=“beforeVodRemove”

:on-exceed=“handleUploadExceed”

:file-list=“fileList”

:action=“BASE_API + ‘/admin/vod/video/upload’”

:limit=“1”

class=“upload-demo”

上传视频

最大支持1G,

支持3GP、ASF、AVI、DAT、DV、FLV、F4V、

GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、

MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、

SWF、TS、VOB、WMV、WEBM 等视频格式上传

  • 方法定义

//上传成功执行方法

handleVodUploadSuccess(response,file,fileList){

this.video.videoSourceId = response.data.videoId

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

color_FFFFFF,t_70)


二、前端部分


  • 数据定义

fileList: [], //上传文件列表

BASE_API: process.env.BASE_API, // 接口API地址

  • 整合上传组件

<el-upload

:on-success=“handleVodUploadSuccess”

:on-remove=“handleVodRemove”

:before-remove=“beforeVodRemove”

:on-exceed=“handleUploadExceed”

:file-list=“fileList”

:action=“BASE_API + ‘/admin/vod/video/upload’”

:limit=“1”

class=“upload-demo”

上传视频

最大支持1G,

支持3GP、ASF、AVI、DAT、DV、FLV、F4V、

GIF、M2T、M4V、MJ2、MJPEG、MKV、MOV、MP4、

MPE、MPG、MPEG、MTS、OGG、QT、RM、RMVB、

SWF、TS、VOB、WMV、WEBM 等视频格式上传

  • 方法定义

//上传成功执行方法

handleVodUploadSuccess(response,file,fileList){

this.video.videoSourceId = response.data.videoId

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

[外链图片转存中…(img-wBd6ysBI-1715553031820)]

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值