inputStream.start();
// 等待ffmpeg命令执行完
int exit = 0;
try {
exit = ffmpeg.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
LOG.info(“—执行结果:—” + (exit == 0 ? “【成功】” : “【失败】”));
if (exit == 0) {
originFile = new File(filePath);
if(originFile.exists()){
originFile.delete();
}
}
return exit;
}
/**
-
获取文件后缀
-
@param fileName
-
@return java.lang.String
-
@author zxzhang
-
@date 2019/12/10
*/
public String getExt(String fileName) {
return fileName.substring(fileName.lastIndexOf(“.”) + 1);
}
/**
-
获取文件所在目录
-
@param filePath
-
@return java.lang.String
-
@author zxzhang
-
@date 2019/12/10
*/
public String getFileDir(String filePath) {
return filePath.substring(0, filePath.lastIndexOf(BootstrapConst.PATH_SEPARATOR));
}
/**
-
获取文件名
-
@param filePath
-
@return java.lang.String
-
@author zxzhang
-
@date 2019/12/10
*/
public String getFileName(String filePath) {
return filePath.substring(filePath.lastIndexOf(BootstrapConst.PATH_SEPARATOR) + 1, filePath.lastIndexOf(“.”));
}
}
class PrintStream extends Thread {
java.io.InputStream __is = null;
public PrintStream(java.io.InputStream is) {
__is = is;
}
@Override
public void run() {
try {
while (this != null) {
int _ch = __is.read();
if (_ch != -1) {
System.out.print((char) _ch);
} else {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、BootstrapConst类
package com.openailab.oascloud.file.common.consts;
/**
-
@Classname: com.openailab.oascloud.security.common.consts.BootstrapConst
-
@Description: 简单常量定义
-
@Author: zxzhang
-
@Date: 2019/10/8
*/
public class BootstrapConst {
/**
- 文件缓冲区大小
*/
public static final Integer INPUT_BUFFER_SIZE = 8192;
/**
- 文件分隔符
*/
public static final char PATH_SEPARATOR = ‘/’;
/**
- 文件点
*/
public static final char SPOT = ‘.’;
/**
- 常量一
*/
public static final Integer ONE = 1;
/**
- 成功
*/
public static final Integer SUCCESS = 1;
/**
- 失败
*/
public static final Integer FAIL = 0;
/**
- true
*/
public static final Boolean TRUE = true;
/**
- false
*/
public static final Boolean FALSE = false;
}
三、FFMPeg DockerFile实现
首先我们构建具有JDK1.8和FFMPeg环境的镜像
FROM jrottenberg/ffmpeg:centos
MAINTAINER oas.cloud
ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV PATH P A T H : PATH: PATH:JAVA_HOME/bin
WORKDIR /usr/local/oas/
然后将上述文件构建出的镜像的tag打为我们自己的镜像仓库地址,改为 10.12.1.202:8088/oascloud/ffmpeg:v1.0,我们的应用程序就可以以上述镜像文件(10.12.1.202:8088/oascloud/ffmpeg:v1.0)为基础构建出新的应用程序镜像,应用程序的DockerFile如下:
FROM 10.12.1.202:8088/oascloud/ffmpeg:v1.0
MAINTAINER oas.cloud
ENV LC_ALL=zh_CN.utf8
ENV LANG=zh_CN.utf8
ENV LANGUAGE=zh_CN.utf8
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
ARG JAR_FILE
COPY ${JAR_FILE} /usr/local/oas/
WORKDIR /usr/local/oas/
代码结构如下:
附上Kubernetes编排文件,deploy.yaml内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: openailab-data-file-management
namespace: oas-tengine2dev
labels:
name: openailab-data-file-management
spec:
replicas: 1
selector:
matchLabels:
name: openailab-data-file-management
template:
metadata:
labels:
name: openailab-data-file-management
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
-
matchExpressions:
-
key: env
operator: In
values:
- tengine2dev
containers:
- name: openailab-data-file-management
image: 10.12.1.202:8088/tengine2/openailab-data-file-management:latest
env:
- name: APOLLO_APP_ID
value: ‘tengine2-data-file-management’
- name: APOLLO_EUREKA_URI
value: ‘http://10.98.100.95:8080/’
- name: APOLLO_NAMESPACE
value: ‘application’
- name: SPRING_EUREKA_URI
value: ‘http://10.111.176.222:8080/eureka/’
volumeMounts:
- name: openailab-data-file-management
mountPath: /usr/local/logs
- name: file
mountPath: /usr/local/oas/file
command: [‘sh’,‘-c’,‘java -server -Xms2048m -Xmx3072m -Djava.io.tmpdir=/var/tmp -Duser.timezone=Asia/Shanghai -jar openailab-data-file-management-*.jar --server.port=8080 --spring.profiles.active=remote’]
ports:
- containerPort: 8080
resources:
requests:
memory: 256Mi
cpu: 150m
limits:
memory: 2048Mi
cpu: 300m
initContainers:
- name: init-apollo
image: busybox
command: [‘sh’, ‘-c’]
args:
- echo Prepare to apollo initialize…;
until nc -w 1 -z 10.98.100.95 8080;
do echo Waiting for eureka initialization to complete…; sleep 10; done;
echo Eureka is ready.;
until nc -w 1 -z 10.98.100.95 8090;
do echo Waiting for admin initialization to complete…; sleep 10; done;
echo Admin is ready.;
echo Apollo Initialization successful!;
volumes:
- name: openailab-data-file-management
hostPath:
path: /usr/local/logs
- name: file
hostPath:
path: /usr/local/oas/file
svc.yaml内容如下:
apiVersion: v1
kind: Service
metadata:
name: openailab-data-file-management
namespace: oas-tengine2dev
labels:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/44ac874aeee7c4d86fdd3258fb37e253.jpeg)
最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
[外链图片转存中…(img-1zn08H6Q-1713400453674)]
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
[外链图片转存中…(img-UxZGAECU-1713400453674)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!