目录

工欲善其事

实践出真知

活跃标签: linux java windows mysql 待分类 js win10 springboot pdf idea docker 电路 nginx esp32 macOS git vue Arduino maven ffmpeg

存档:

Java 时间和秒互转 有更新!

public class TimeUtil { public static void main(String[] args) { String minute = toMinute(3601); System.out.println("minute = " + minute); String timeStr = "1:00:01"; int second = toSecond(timeStr); System.out.println("second = " + second); } private static int toSecond(String timeStr) { if (timeStr != null) { String[] time = timeStr.split(":"); int second = 0; for (int index = 0; index < time.length - 1; index++) { second += Integer.valueOf(time[index]) * (int) Math.pow(60, index); } return ....

[ FFmpeg ] 精确时间截取视频文件 有更新!

最近收到一个项目需求,是我工作以来,见过客户提出的最明确的需求: 将视频讲解切割,每张幻灯的片断一个文件,按幻灯页码命名文件01.mp4,02.mp4,03.mp4……,以此类推;分辨率不超过320*180像素,单声道96kbps音质,控制每个文件尺寸不超过10M,另请发来对应的ppt文档,用来制作成视频与ppt同步翻页的课程。 于是,承接前面一篇,三分屏课件制作教程,我考虑也能自动按照时间轴拆分所有视频文件。于是得到了下面这段分割代码。 ffmpeg -ss [start] -t [duration] -accurate_seek -i [in].mp4 -codec copy [out].mp4 [duration] : 为需要截取的时长 [in] : 为输入视频文件名 [out] : 为输出视频文件名 [start] : 为需要截取内容的开始时间 这种截取的好处是特别快,因为它不会对视频重新编码,直接截取相关时间,导出视频,但是这种方式会导致:如果视频结尾不是关键帧,那么视频最后就会出现一段空白。 这个时候,你可以加入[-avoid_negative_ts 1]变成这样: ff....

[Spring] 扩展点(一):后置处理器PostProcessor 【转】

1.概述 之前我们对Spring相关注解进行全方面的解析与总结,在此期间反复提到了一个核心配置解析类:ConfigurationClassPostProcessor,我们称之为 配置类后置处理器 。什么是后置处理器呢?其实后置处理器是<b>Spring提供给我们的一个非常重要的扩展点</b>,并且Spring内部的很多功能也是通过后置处理器来完成的,ConfigurationClassPostProcessor的重要性就说明这一点,同时该扩展点也方便Spring与其他框架进行集成,如Spring集成mybatis框架,就是通过后置处理器MapperScannerConfigurer实现了扫描mapper接口注入到Spring容器中的。 Spring框架中大致提供了以下三个核心后置处理器: BeanDefinitionRegistryPostProcessor,BeanFactoryPostProcessor,BeanPostProcessor ,其他的后置处理器都是继承自这三个。三个扩展点的主要功能作用如下: BeanDefinitionRegistryPost....

[FFmpeg] 从视频流中抽取图片

该文章已经加密。

为什么需要序列化?Java序列化的缺点?如何自定义序列化?【转】

是什么 一句话就能够说明白什么是 Java 序列化和反序列化?「Java 序列化是将 Java 对象转换为字节序列的过程,而 Java 反序列化则是将字节序列恢复为 Java 对象的过程。」 「序列化」 :任何需要保存到磁盘或者在网络进行传输的 Java 对象都需要支持序列化,序列化后的字节流保存了 Java 对象的状态及相关的描述信息,反序列化能够根据这些信息“复刻”出一个一模一样的对象。序列化的核心作用就是对象状态的保存。 「反序列化」 :反序列化就是根据磁盘中保存的或者网络上传输的字节流中所保存的对象状态和相关描述信息,通过反序列化重建对象。 所以,从本质上来说,序列化就是将对象的状态和相关描述信息按照一定的格式写入到字节流中,而反序列化则是从字节流中重建这个对象。 为什么 为什么需要 Java 序列化和反序列化呢?有两个原因: 持久化。即将该对象保存到磁盘中。一般来说我们是不需要持久化 Java 对象的,但是如果遇到特殊情况,我们需要将 Java 对象持久化到磁盘中,以便于我们在重启 JVM 时可以重建这些 Java 对象。所以我们可以通过序列化的方式将 Java 对象转换成字....

[ Github ] hosts

# update: 20220222 # Github Hosts # domain: github.com 140.82.113.4 github.com 140.82.114.9 nodeload.github.com 140.82.112.5 api.github.com 140.82.112.10 codeload.github.com 185.199.108.133 raw.github.com 185.199.108.153 training.github.com 185.199.108.153 assets-cdn.github.com 185.199.108.153 documentcloud.github.com 140.82.114.17 help.github.com # domain: githubstatus.com 185.199.108.153 githubstatus.com # domain: fastly.net 199.232.69.194 github.global.ssl.fastly.net # domain: githubuserconte....

30 个常用的 Linux 命令! 有更新!

命令 1 last用于显示用户最近登录信息,包括用户名、登录时间、登录来源等信息 单独执行last命令,将会读取/var/log/wtmp的文件,并把该文件内容记录的登入系统的用户名单全部显示出来。 last -na | head -n <显示列数>或-<显示列数>:设置列出名单的显示列数 -a:把从何处登入系统的主机名称或 IP 地址,显示在最后一行 命令 2 过滤当前目录下以 1024 开头的文件,并统计这些文件的数量 ls | egrep ^1024 | wc -l ls:用于显示目录内容列表 egrep:用于在文件内查找指定的字符串 ^1024是一个正则表达式,用于匹配以数字 1024 开头的文件。egrep命令将在输入中查找匹配这个模式的行 命令 3 过滤当前目录下以 1024 开头的文件,并显示这些文件的大小以及总用量 ls | egrep ^1024 | xargs du -ch xargs:xargs 命令是给其他命令传递参数的一个过滤器 du:显示每个文件和目录的磁盘使用空间 -c:除了显示个别目录或文件的大小外,同时也显示所有目录或文件....

时间戳 [ 转换 ] 日期

JavaScript实现Date( ) ——日期格式化的三种常用方法 - 掘金 (juejin.cn) 在线时间戳转换器 - 码工具 (matools.com)

[ js ] 字符串中提取数字

强制类型转换 适用于要提取的数字在字符串的前端. let str = "1412.123abd" console.log(parseInt(str),parseFloat(str)); // 输出1412 1412.123 遍历拼接 缺点:获取所有的数字,即使是不需要的数字段也会被拼接. 这里是用parseInt(i)>=0判断是否为数字,若使用isNaN(),会把空字符串和空格当做0处理. let str="%1086143iluhugufu086"; let num=""; for(i of str){ if(parseInt(i)>=0){ //parseInt返回的是数字或者NAN,只要大于0,即使数字 num += i; } } console.log(num); // 1086143086 会拼接所以的数字 正则表达式 let str ="%1086143iluhugufu086"; let num= str.replace(/[^0-9]/ig,""); let numArr = str.match(/\d+/g); let decimalArr = st....

nas上docker安装 [qbittorrent] 有更新!

下载种子就得装qbittorrent迅雷虽然好用,但是不能向资本主义低头 找个镜像 linuxserver/qbittorrent 搞VueTorrent UI 进入GitHub仓库,打开Release页面 VueTorrent 下载最新版本的zip文件 解压放到某个目录下,一会docker配置的时候会用 配置Docker 基础设置 重启策列:容器退出时总是虫嗪启动 存储空间:记得配置为可读写 配置文件:/config 下载地址:/downloads vueTorrent地址:/vuetorrent 端口: TCP:16681 UDP:16681 TCP:8080 环境变量: WEBUI_PORT=8080 保存启动 登录密码:admin/adminadmin 设置使用vueTorrent的UI:设置-》WEBUI -》use alternative WEBUI 勾选并配置路径即可

[vue] process.env环境变量

process 对象是一个全局变量,提供了有关当前 Node.js 进程的信息并对其进行控制。 process.env 属性会返回包含用户环境的对象。 本文介绍如何配置使用process.env环境变量。 原理 采用nodejs顶层对象中process基础类下process.env属性,返回包含用户环境的对象。根据各个环境的配置文件区分和控制。 node环境变量 node环境变量指nodejs执行环境的环境变量。 此处的nodejs指的是webpack的编译环境。 通过npm script中的set属性设置 //package.json "scripts": { "dev": "set NODE_ENV=develop && set PORT=8085 && webpack-dev-server --inline --progress --config build/webpack.dev.conf.js ", "build": "node build/build.js" }, 在webpack编译过程中获取 //webpack.dev.conf.js ....

[ Bash ] 命令进阶:日常脚本

写了一些用到的脚本 文件夹切割 split.sh 文件重命名 rename.sh ffmpeg视频校验 ffg.sh 查找错误的视频 ffmpg.sh 移动有错误的视频 mvbad.sh

[ Bash ] 命令进阶:获取字符串长度的七种方法

求字符串操作在shell脚本中很常用,下面归纳、汇总了求字符串的几种可能方法: 利用${#str}来获取字符串的长度 li13@DESKTOP-OH700S9:~$ str="ABCDEF" li13@DESKTOP-OH700S9:~$ echo ${#str} 6 li13@DESKTOP-OH700S9:~$ 利用awk的length方法 li13@DESKTOP-OH700S9:~$ echo ${str}|awk '{print length($0)}' 6 li13@DESKTOP-OH700S9:~$ 备注: 最好用{}来放置变量 也可以用length($0)来统计文件中每行的长度 利用awk的NF项来获取 li13@DESKTOP-OH700S9:~$ echo $str |awk -F "" '{print NF}' 6 li13@DESKTOP-OH700S9:~$ 备注: -F为分隔符,NF为域的个数,即单行字符串的长度 利用wc的-L参数来获取字符串的长度 li13@DESKTOP-OH700S9:~$ echo ${str}|wc -L 6 li13@D....

linux shell脚本中常用判断 [If Else 语句] 有更新!

Bash 支持 if-else 语句,以便你可以在 shell 脚本中使用逻辑推理。 通用的 if-else 语法如下: if [ expression ]; then ## 如果条件为真则执行此块,否则转到下一个 elif [ expression ]; then ## 如果条件为真则执行此块,否则转到下一个 else ## 如果以上条件都不成立,则执行此块 fi 正如你所注意到的: elif 用于 “否则如果” 类型的条件。 if-else 条件始终以 fi 结尾。 使用分号 ; 和 then 关键字 在展示 if 和 else-if 的示例之前,我先分享一下常见的比较表达式(也称为测试条件) 1、字符串判断 条件当满足以下条件时为真 "str1" = "str2"str1 与 str2 相同 "str1" == "str2"str1 与 str2 相同 "str1" != "str2"str1 与 str2 不同 -z "str1"str1 为空字符串 2、数字的判断 条件当满足以下条件时为真 str1 -lt str2str1 < str2( str1 小于 str2)....

[ Bash ] 命令进阶:修改文件/字符串名

basename是一个命令行程序,可用于删除指定的文件和目录的后缀 basename命令支持两种语法格式,分别是basename NAME [SUFFIX]和basename OPTION... NAME...。 最基本的的用法是在文件的绝对路径获取文件名并打印文件名。basename命令会自动删除目录分隔符后缀/。 默认情况下,每行输出以换行符结尾。如果要以NUL结尾,请使用-z/--zero选项。 多个文件 basename命令可以接受多个文件名称作为参数。如果要指定多个参数请使用-a/--multiple选项调用命令,然后使用空格分隔文件列表。 例如要获取<a href="https://www.myfreax.com/etc-passwd-file/">/etc/passwd</a>和<a href="https://www.myfreax.com/etc-shadow-file/">/etc/shadow</a>的文件名,请运行命令basename -a /etc/passwd /etc/shadow。 删除文件扩展名 要从文件....

[docker] 容器内服务开机自启动实现方案(以ssh服务为例) 有更新!

搞了个ubuntu奖项安装ssh服务,但是会发现当容器重启后,ssh服务并不能跟着重启,需要手动进入容器执行命令才可以重启。虽然,docker容器内服务自启可以使用Dockerfile的方法,但是使用Dockerfile的方法会有一定的弊端,这里就不多讲了。 1、正常我们在linux操作系统内设置服务自启动的方法一般都是使用systemctl。 systemctl enable ssh 2、但是,一般在docker容器内我们一般不这么干,因为容器内没有systemctl权限…… 3、我们依然还是使用脚本的形式将ssh设为自启,只不过这个的这个脚本和我们使用Dockerfile的脚本不一样。 4、在 /root 目录下新建一个 start_ssh.sh文件,并给予该文件可执行权限。 touch /root/start_ssh.sh vim /root/start_ssh.sh chmod +x /root/start_ssh.sh 5、start_ssh.sh 脚本的内容,如下: #!/bin/bash LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") ech....

Linux删除 [ history ] 历史命令记录

在Linux系统的终端中,会一直保存着命令的执行记录,在共用的服务器环境下,有时候,这些信息不想让其他人知道,我们就需要在操作完成之后去清除这些痕迹。 全部清除 history -c 执行之后,再次敲入history,发现已经看打不到之前的命令了,但是,你别以为问题就此解决了,系统中还有一个地方保存着这些记录,~/.bash_history文件,所以,根除的方法应该是 rm -rf ~/.bash_history history -c 部分清楚 删除指定行的历史记录 history -d [指定行号] 更多参数 root@hcss-ecs-c875:~/foo# history -h -bash: history: -h: invalid option history: usage: history [-c] [-d offset] [n] or history -anrw [filename] or history -ps arg [arg...] root@hcss-ecs-c875:~/foo#

[ maven ] 打包打入 application.yml 文件 有更新!

好好的springBoot项目找不到mysql url,仔细一看端口也不对,之前是好好的 target里没有 resources文件夹下的文件?? 配置 pom.xml <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.yml</include> </includes> <filtering>false</filtering> </resource> </resources> 发现也不起作用! 最后解决方法,把 resources文件夹添加到idea资源中重新clean 再编译一下就行了。。

运维时刻 [ Linux ] 脚本入门 有更新!

开头 vim script.sh 用 vim 编写脚本 #!/bin/bash 脚本使用的解释器,通常用幻数 "#!" 指定 #AUTHOR 脚本作者 #DATE 脚本创作时间 #MAIL 脚本作者联系方式 #VERSION 脚本的版本 判断 判断进程是否运行 命令: ps aux | grep 进程名 | grep -v grep 进程存在则输出信息,不存在则没输出 ps -ef | grep 进程名 | grep -v grep | wc -l 进程存在则输出行数(也就是数量),不存在则输出0 其中以上两者输出的不同是由于后者加上了wc命令用于计算,这里-l计算行数。除此之外,ps的参数aux和-ef的区别就在于显示进程的风格(aux是BSD风格,而-ef是System V风格)和信息不同(COMMADN列如果过长,aux会截断,而-ef不会),但如果我们只是用来查看程序是否在运行则无所谓,两者效果一样。 解析: |表示管道,左端写入,右端读出; grep为搜索命令,-v 表示反向查询,grep -v grep表示去除包含grep的项; wc -l表示显示行数; ps及以下参数查....

[ Linux ] 配置Java环境变量 详解 有更新!

当你手动安装JDK环境,或部署一台新电脑时解压的jdk需要写到/etc/profile才能每次开机时给你加载! 现在我们一起写一个自动配置Java运行环境的脚本,目的是在你jdk解压目录运行脚本,拿到当前路径配置的/etc/profile中 Java环境变量Linux配置如下: export JAVA_HOME=/usr/local/jdk1.8.0_261(您的 JDK 版本) export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib export PATH=$JAVA_HOME/bin:$PATH 我们需要将这一段代码写到/etc/profile最后面。 Java环境变量Win配置如下: rem* 管理员身份运行 %1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&ex....