德普王

Draft, Edit, Proofread, Publish

  • 首页
  • 技术
  • 生活
  • 装修
  • 工具
  • 关于
  • 搜索

通过七牛云 jdk 批量修改视频格式

发表于 2019-05-17 | 更新于 2019-09-23 | | 阅读次数

接上一篇:解决小程序中视频因为编码格式不能播放的问题。

上一篇只说了如何修改单个视频的编码格式,下面是批量处理的方法。所有代码放在了 GitHub 上。

主函数

分三步:

  • 第一步:批量修改 bucket 中所有视频编码格式,重命名新格式视频。
  • 第二步:因为需要批量下载 bucket 中所有视频,所以批量删除原视频。
  • 第三步:批量下载所有新格式视频。
    public static void main(String[] args) {
// 构造一个带指定 Zone 对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//... 其他参数参考类注释
String accessKey = "access key";
String secretKey = "secret key";
// 待处理文件所在空间
String bucket = "bucket name";
Auth auth = Auth.create(accessKey, secretKey);
BucketManager bucketManager = new BucketManager(auth, cfg);
// 文件名前缀
String prefix = "";
// 每次迭代的长度限制,最大 1000,推荐值 1000
int limit = 1000;
// 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串
String delimiter = "";
// 列举空间文件列表
BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter);

List<String> deleteKeyList = new ArrayList<>();
while (fileListIterator.hasNext()) {
// 处理获取的 file list 结果
FileInfo[] items = fileListIterator.next();
for (FileInfo item : items) {
String key = item.key;

changVcodec(auth, key, bucket);// 第一步:改变视频编码格式
// downLoadFromUrl(key);// 第三步,根据 url 下载视频
if (!key.contains("_")) {
deleteKeyList.add(key);
}
}
}

// deleteFiles(bucketManager, deleteKeyList, bucket);// 第二步,批量删除文件

}
  • 参考代码:获取空间文件列表
阅读全文 »

如何直接下载 Github 上的某个文件

发表于 2019-05-17 | 更新于 2020-08-02 | | 阅读次数

作者:DeppWang、原文地址

如何直接下载 Github 上的某个文件

有时候我们需要下载别人 GitHub 仓库的某一个文件,但是不得不 clone 整个项目,此时需要一种能直接下载某一个文件的方式。

只需要更改一下 GitHub 文件 URL,就能实现单个下载功能。

阅读全文 »

解决小程序中视频因为编码格式不能播放的问题

发表于 2019-03-29 | 更新于 2019-12-19 | | 阅读次数

最近开发一个小程序,发现 video 组件的视频不能播放。琢磨了几天,终于可以了。现把经验分享出来,希望对遇到这个问题,但一时还没有解决的小伙伴有一点帮助。

请注意:由于以下使用的七牛云测试域名自创建起 30 个自然日后系统会自动回收。所以 2019.4.20 号以后,部分 url 会失效。

1、如何获取视频 src 地址

首先,我们要知道,video 组件的 src 地址是什么,我开始以为,小程序的 video 组件的 src 地址一定类似官方示例这样的。

http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400

可能跟我一样,没接触过这块的小伙伴也有一样的想法。其实不然,视频 src 地址的长度可长可短,一般为.mp4 结尾。判断 src 地址是否正确,很简单,将地址复制到浏览器中,可正常播放,代表地址正确。

如何获取一个视频的 src 地址?

可以在 Chrome 中使用 Video Downloader professional 这个插件,他可下载视频网站当前页面正在播放的未加密的视频。

如何安装插件,请看 这。

阅读全文 »

在 SpringBoot2 中使用 Apache Shiro 实现登录身份验证和访问权限控制

发表于 2019-01-26 | 更新于 2020-10-22 | | 阅读次数

作者:DeppWang、原文地址

一、Shiro 登陆架构

下面是 Shiro 的用户登陆架构图,我们根据箭头来看一下流程。

image.png

1、Token:使用用户的登录信息创建令牌

UsernamePasswordToken token = new UsernamePasswordToken(username, password, true);

我们要先通过用户名和密码,生成一个 token,token 是一个用户令牌,用于在登陆的时候,Shiro 来验证用户是否有合法的身份。

2、Subject:执行登陆动作 (login)

Subject subject = SecurityUtils.getSubject(); // 获取 Subject 单例对象
subject.login(token); // 登陆

再通过 Subject 来执行登陆操作,将 token 发送给 Security Manager,让他来验证这个 token。Subject 中文翻译是主题。你可以理解为它是一个用户,是 User 的抽象概念。

3、Realm:自定义代码实现登陆身份验证和访问权限控制

先来看看 Realm,你从上图可以看出,Realm 在 Shiro 方框的外面。图片很形象,因为这一部分恰恰是需要我们自己去实现的。需要我们来设计如何验证登录用户的身份 (role),和这个用户是否具有访问某个 URL 的权限 (permission)。前者使用 AuthenticationInfo(验证) 实现,后者使用 AuthorizationInfo(授权) 实现。

4、Security Manager:Shiro 架构的核心

Security Manager,是 Shiro 架构的核心,简单来说,它根据我们自定义的 Realm,去完成验证和授权工作


如果这部分没有看懂,建议先根据下面的 “与 SpringBoot2 集成” 部分,搭建一个 demo,在项目中直观体验一下了,再回来看。

阅读全文 »

分享几个用了就离不开的实用网站

发表于 2019-01-11 | 更新于 2019-12-19 | | 阅读次数

1、鸠摩搜书:一个能搜索全网电子书的网站

image.png

网址:https://www.jiumodiary.com/

杜撰 slogan:找电子书,来我这里就对了

喜欢看书的小伙伴,是不是觉得买纸质书太贵且不方便,而电子书又在网上到处找不到资源呢!

那你就很需要鸠摩搜书了。他是一个搜书引擎,可以抓取到很多资源,他的宣言可以理解为:“我不生产书,我只是书的抓取工”!

资源下载后,如果你是使用 Kindle 阅读器,或者 Kindle 阅读 App,可以使用邮箱推送,不会请百度。针对没有不用 Kindle 阅读器的小伙伴,建议下载 epub 格式,使用多看阅读 App阅读,多看阅读 App 相比 Kindle 阅读 App,它的黑色纹理背景不伤眼,格式也要好看不少。

从前有个集思会,它黄了 (╥﹏╥)。

阅读全文 »

HTTP POST 请求的两种编码格式:application/x-www-form-urlencoded 和 multipart/form-data

发表于 2019-01-01 | 更新于 2020-08-04 | | 阅读次数

在常见业务开发中,POST 请求常常在这些地方使用:前端表单提交时、调用接口代码时和使用 Postman 测试接口时。我们下面来一一了解:

阅读全文 »

东三旗到西二旗的地铁早高峰

发表于 2018-11-28 | 更新于 2020-08-04 | | 阅读次数

-- Illustrations by Emiliano Ponzi

作为一个家在东三旗,公司在西二旗的东三旗人来说。工作日早高峰坐地铁成了一件费心费神的事。

总的来说,分为三步。

第一步,排队进站

天通苑北站是五号线的起始站,也是东三旗人生活的起点。

人流量自然不用说,常常看见高举的手机在记录这拥挤一刻。

在天通苑北坐地铁,时间很有讲究。如果你夏季每天 7 点以前,冬季 7:15 以前坐地铁,那你完全不用担心排队问题 (北京没有春秋)。畅通无阻,你会忘记地铁站需要排队的事实。当然,如果你夏季 8:15 以后,冬季 8:30 以后进站,你也会很潇洒。这样的你应该是程序猿 (媛) 吧。

如果你很不幸的在高峰时间进站,那么就安安心心的排队 15 分钟左右吧。听听歌,或者听听英语。谁说时间会浪费呢。

第二步,上车站位

在起始站上车还是有个得天独厚的优势的,只要你好好排队,肯定会有座位。

高峰时期,在立水桥换乘的时候,就不要想座位了,能站个好位置就很不错了。站位也要讲技术,不要站在门口,门口是地铁最拥挤的地方,最好站座位前面,门旁座位更佳,这里下车方便。

玩玩手机,时间过得好像挺快的。

第三步,下车

这一步很重要,关系你能赶上最后一班班车,还是到处找小蓝车。

当你听到西二旗站要到了的时候,你就应该做好下车准备了。要收好你的手机,在西二旗下车把手机挤坏的例子太多了;提前跟周围人沟通是否下车,蠕动到门口;紧紧跟着前面的人,防止下车了被挤上车 (应该不少人经历过)。

友情提示在西二旗不下车的小伙伴,要提前离开门口,因为你会被挤下去的,可能再也上不去了。

下车的时候往往我们最后一丝尊严也被挤掉了。即使这样,我们还是要文明。

早上往往是起床气最重的时候,对于晚睡的人尤其重。东三旗人应该经常看见两个嗓门异常大,面红耳赤的激烈争吵。如果是在地铁上,一个人下车了,另一个肯定说,你上来啊。

当你要爆粗的时候,忍,都是起床气害的。

比吵架的人嗓门还大的是地铁工作人员,“后面的赶快下!”、” 要关门了,不要上了!”。震耳欲聋,余音萦绕。

在西二旗上班的人都逃不掉早高峰挤地铁的命运。开车?有号吗。没有。那还是挤地铁吧。有。东三旗到西二旗开车至少得两个小时,你为啥还要住东三旗?

如果爱机车,考个证,搞个摩托车开开不错。

13 号线将拆分为 13A 线和 13B 线。到时候西二旗应该没这么挤了吧。

如何使用 Dubbo 的直连和服务分组

发表于 2018-10-09 | 更新于 2019-12-19 | | 阅读次数

此文基于 Dubbo 官方文档,结合实际项目讲解几个常用的知识点,建议先根据以下官方文档学习。

http://dubbo.apache.org/zh-cn/docs/user/preface/background.html

Dubbo 概念

Dubbo 是一个 RPC 框架,关于什么是 RPC,可看知乎的这个回答:

https://www.zhihu.com/question/25536695/answer/36197244

RPC 是指远程过程调用,也就是说两台服务器 A,B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数 / 方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。

为什么使用 Dubbo?对于我们公司项目来说,为了 业务复用(将不同的核心业务抽离成一个个单独的应用,供其他应用调用)。

了解 Dubbo 的架构,请看官方文档

图片来自官网文档

  • 服务提供者 (Provider 节点):常作为核心服务,向注册中心注册自己的服务,供其他应用调用。同时也可作为消费者,调用其他提供者。
  • 服务消费者 (Consumer 节点):向注册中心订阅自己的服务。同时也可作为提供者,供其他消费者调用。
  • 注册中心 (Register 节点):相当一个目录,负责服务地址的注册和查找。
阅读全文 »

推荐几个可以提高程序员生存技能的效率软件

发表于 2018-09-17 | 更新于 2020-05-08 | | 阅读次数

把我常用的效率软件推荐一波。分别是:IDEA(集成编译环境)、ShadowsocksR(科学上网)、Wunderlist(奇妙清单) 和 Wox(Windows 效率启动器).

IDEA(集成编译环境)

我认为 IDEA 是开发 Java 项目最好的集成编译环境(IDE),属于用了就回不去的软件。

点此 下载地址,下载最终版 (Ultimate)。

image

安装完成后,启动 IDEA,在如下界面选择 License server 输入:http://idea.iteblog.com/key.php ,如果链接失效,可参考这个网址: http://idea.lanyus.com

image

关于 IDEA 的常用快捷键、插件及设置,可参考这篇文章: https://depp.wang/2018/08/14/IDEA's-common-shortcuts-plugins-and-settings/

阅读全文 »

Chrome 上价值一百块钱的插件

发表于 2018-08-29 | 更新于 2019-12-19 | | 阅读次数

如果你还没用 Chrome 插件,那么我只能说(注意!此处有停顿 ^_^),现在就用吧。这篇文章分享一下我常用的 6 个插件。Chrome 网上应用店 上安装插件需要梯子,需要梯子的小伙伴请看 这篇文章。针对没有梯子的小伙伴,我已将插件离线打包放在了百度网盘上: https://pan.baidu.com/s/1zvrE6GndFTHMKzP-aeQAVg 提取密码:x9i2。

安装插件的方法很简单:在浏览器搜索框中输入 chrome://extensions/ 打开扩展程序页面 (或者右上角三个点 -> 更多工具 -> 扩展程序 ),选中右上角的开发者模式,将下载好的插件拖动到此页面完成安装。

安装离线版 OneTab

1.OneTab

OneTab:节省高达 95%的内存,并减轻标签页混乱现象

点击右上角 OneTab 图标可以将你所有已经打开的标签页和合成一个,减少浏览器所占内存。也可以在网页上右键操作。我常用的使用方式是将常用的网址固定在这个页面。类似这样:

使用场景

阅读全文 »

Java 程序员生产神器 IDEA 的常用快捷键、插件及设置

发表于 2018-08-14 | 更新于 2020-07-02 | | 阅读次数

对于 Java 程序员来说,使用 IDEA 集成环境是最称手的。优点不多讲,用过的人都知道。IDEA 虽好,但为了充分利用 IDEA 的优势,我分享一下我常用快捷键、插件和设置。

阅读全文 »

「图文教程」安装 CentOS7 并使用 Xshell6 连接

发表于 2018-08-09 | 更新于 2020-03-10 | | 阅读次数

本文涉及到的安装包及书籍 点这里 提取密码:jw8b

分享目的

可能有的小伙伴想学习 Linux,可是还不会安装 Linux 系统;可能有的小伙伴在工作中需要你自己在 Linux 系统中上线项目。所以我简单分享一下怎么在本地虚拟机安装 CentOS_7,以及 Xshell6 怎么连接安装好的 CentOS_7。
如果你跟我一样是 Linux 小白,建议现在跟着图片动手操作一遍 ^_^

学习 Linux 前,需要提前准备什么

首先,你得有 Linux 环境才行,就像你想敲代码,必须你电脑得有个 Window 系统或者 MacOS 系统才行。所以你得先装一个 Linux 系统。
你需要先在本地安装 VMware,VMware 全名为 VMware Workstation,是一个虚拟机,相当于一个虚拟化的 “ 电脑 “,这样你就可以在 VMware 里安装 CentOS_7(Linux 的一种系统) 了。

安装 VMware

在我最开始分享的百度网盘的 链接(提取密码:jw8b) 下载VMware-workstation-full-14.1.1.28517.exe,按步骤安装完成就好,需要密匙,密匙如下:

FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA

安装 CentOS7

万事开头难,以下分享一下 CentOS_7 的简易安装方式,其他具体的安装示例可以参考 《鸟哥的 Linux 私房菜》第三章。打开 VMware,左上角 “文件” 中选择 “新建虚拟机”,或者使用快捷键 Ctrl+N。没有图片的步骤默认下一步。

选择自定义

阅读全文 »

JS 中怎样使用 Date 对象加减日期

发表于 2018-01-07 | 更新于 2019-09-23 | | 阅读次数

这一周工作主要是写 js,遇到使用 JS 加减时间的问题,觉得需要总结记录一下。为了下次遇到这种问题时查阅方便,也为了更好的理解记忆。

var date = new Date(2018,0,7)// 新建一个时间,用于表示 2018 年 1 月 7 日。

为什么用 0 表示 1 呢,这是一个 js 的设计缺陷,0-11 表示 1-12 月。

日期相加

如果 date 要使用多次,要将这个日期赋给一个 temp 变量,操作 temp 完成计算。

var temp = new Date(date);

例 1:加一个具体时间 -> x 年 y 月 z 日

temp.setFullYear(temp.getFullYear() + x);// 注意是 FullYear
temp.setMonth(temp.getMonth() + 1 + y);// 由于设计缺陷,要在设置月份的时候就加 1
temp.setDate(temp.getDate() + z);// 注意是 Date
$("#year").val(temp.getFullYear());
$("#month").val(temp.getMonth());// 如果 setMonth() 中没有加 1,那么在这加 1
$("#day").val(temp.getDate);

注意,一定顺序是 setFullYear()->setMonth()->setDate,不然时间相加会不准确。

日期相减

temp.getTime(); //1515254400000, 以 Number 形式表示的时间戳

计算 date1 和 date2 之间的天数差值

var timesDiff = Math.abs(date1.getTime() - date2.getTime);
var diffDays = Math.ceil(timesDiff / (1000 * 60 * 60 * 24));// 向上取整

但是如果要对天数进增减,那只能先将在 setDate() 中增减,因为你在获取之后增减可能出现 0-31 以外的数

关于 Date 的其他属性,可以查看 廖雪峰的 JS 教程

Windows 如何安装解压版 Mysql5.6

发表于 2017-12-17 | 更新于 2020-08-17 | | 阅读次数

安装与启动服务

将 MySQL5.6 解压后,使用管理员身份打开命令行,定位到解压目录的 /bin 文件下。使用以下命令安装服务,Mysql5.6 是别名

mysqld --install Mysql5.6

显示 Service successfully installed.,代表服务安装成功。在服务中找到 MySQL5.6,启动并修改为自动。

还是在管理员身份的命令行下,我们也可以使用 net start Mysql5.6 和 net stop Mysql5.6 启动和停止服务。

配置环境变量

在 Path 中新增 **/bin 路径

创建新用户并授权

grant all privileges on \*.\* to 用户名@'主机名或 IP 地址' identified by '密码' with grant option;

示例:

grant all privileges on \*.\* to deppwang@'localhost' identified by '123456' with grant option;

使用 Navicat,新建连接,新建数据库,运行 **.sql 文件生成数据库

换了电脑怎么更新 hexo 博客?

发表于 2017-11-12 | 更新于 2020-06-14 | | 阅读次数

前言

差不多有两个月没更新 blog 了,写博客就像买东西,东西可以什么都买,也可以什么不买,博客也一样,可以什么都写,也可以什么都不写,现在回首看看以前的博客,虽然写得一般,但是重在坚持,还是稍稍有点成就感的。所以还是继续多写写一般般的博客吧 : )。

原来的我的 Hexo 博客网站源文件一直存放在自己笔记本上,现在入职了新公司,公司配了新的笔记本,想在公司笔记本上也能发布博文,所以想找个好方法实现多终端更新博客。我在知乎上发现一个利用分支托管源文件的 好答案。

出师不利

利用分支的思路,在 GitHub 上新建一个hexo 分支来存放 Hexo 网站源代码,master 分支还是存放静态网页。所以我们需要将 Hexo 网站源代码推送到 hexo 分支。

我将自己笔记上的 Hexo 网站源文件夹复制到新笔记本后,在一开始 git remote add origin 连接 GitHub 远程库的时候就出现以下错误:

ERROR: Permission to DeppWang/deppwang.github.io.git denied to amyyanjie.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

根据错误意思显示是拒绝 “amyyanjie” 连接远程库。可能是没有正确连接或仓库不存在。我直接就 Google,发现原因可能是没有添加 SSH Key。其实还是应该先尝试通过错误提示来解决问题,首先仓库是一定存在的,那一定是连接有问题,所以就应该想到 SSH Key 出问题。

“amyyanjie” 是我安装 git 的时候新建的用户名,我已经将电脑唯一的 SSH Key 用于另一个 GitHub 账号,所以当我想添加 SSH key 到我的 GitHub 上时,就会报 SSH Key 已使用的错误。解决方法有两种:

  1. 找到你添加 SSH Key 的另一个 GitHub 账号,将对应的 SSH Key 删除,如果你不记得那个账号了,可以采用第二种方法;
  2. 如果你的电脑没有跟很多托管网站连接,采用简单粗暴的方法,重新生成一个 key!生成命令跟第一次一样 ssh-keygen -t rsa -C "[email protected]"。如果这个 SSH Key 还有用,你可以使用 ssh-keygen -t rsa_2 -C "[email protected]" 生成第二个 SSH Key。这样你可以实现一个电脑连接多个 GitHub 账号,具体参考 Git 之同一台电脑连接多个远程仓库

重新设置仓库用户名的命令是:git config --global user.name "yourname"

阅读全文 »

finally 代码块的执行情况

发表于 2017-10-01 | 更新于 2024-06-07 | | 阅读次数

作者:DeppWang、原文地址

finally 块用来执行即使有异常也能执行的代码,常用于出现异常时关闭流,或者释放锁。finally 总会执行。

关闭流的栗子:

      InputStream is = null;
try {
is = new FileInputStream("inputfile.txt");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

释放锁的栗子:

// java.util.concurrent.ArrayBlockingQueue.java
final ReentrantLock lock = this.lock;
lock.lock(); // Lock only for visibility, not mutual exclusion
try {
int i = 0;
try {
for (E e : c) {
checkNotNull(e);
items[i++] = e;
}
} catch (ArrayIndexOutOfBoundsException ex) {
throw new IllegalArgumentException();
}
count = i;
putIndex = (i == capacity) ? 0 : i;
} finally {
lock.unlock();
}
阅读全文 »

有序数组转换成二叉查找树 (Java 实现)

发表于 2017-09-14 | 更新于 2019-12-19 | | 阅读次数

[二叉查找树](https://zh.wikipedia.org/wiki/% E4% BA%8C% E5%85%83% E6%90%9C% E5% B0%8B% E6% A8% B9) 也称为排序二叉树或有序二叉树。将二叉查找树中序遍历就能得到一个有序数组。所以,有序数组转换成二叉查找树是中序遍历的逆操作。将数组中下标为中数的元素作为根节点,利用递归实现转换。以下是实现代码:

阅读全文 »

用数组实现 Stack

发表于 2017-09-13 | 更新于 2019-12-19 | | 阅读次数

在一些面试题中,常常出现用数组实现 Stack,主要实现它的 push()/push()/pop() 方法。也可以用容器(List)和链表实现,可以看 这篇博文。以下是使用数组实现 Stack:

阅读全文 »

逐行分析 HashMap 的 put() 方法源码

发表于 2017-08-15 | 更新于 2020-02-11 | | 阅读次数

Image result for hashmap works internally in java

HashMap 是底层结构是数组 + 链表,数组是存放 Node(Entry)的数组 Entry[],链表是 Node 组成的链表,充分利用了 Node 的特性。链表的头结点存放在数组中。

put 方法的大致思路

  1. 调用 hash(key) 方法,根据 key 对象的 hashCode 计算出 kay 的 hash,根据 hash 计算出其在 tab 数组中的 index,将键和值放入 Node(Entry) 中;
  2. 如果 index 位置的 Node 为空,称为没碰撞,直接 Node 放入数组中;
  3. 如果碰撞(index 位置存在 Node),先跟头结点比较,key 不相等时,循环链表比较,如果 key 已经存在,替换 old value,否则将 Node 链接到链表最后。
  4. 如果碰撞导致链表的长度大于等于 7,将链表的结构转换为红黑树。
  5. 如果 bucket 存放的 current capacity(当前容量)超过容量的 load factor(0.75),就 resize,容量扩大为两倍。
阅读全文 »

Java 的参数传递

发表于 2017-07-26 | 更新于 2024-07-24 | | 阅读次数

一、传值和传址(引用)

Java 的参数传递分为传递基本数据类型(传值)和传递引用数据类型(传址)

阅读全文 »
1…567
deppwang

deppwang

每个人都需要有自己的哈姆雷特

135 文章
319 标签
RSS
GitHub Twitter BiliBili YouTube 豆瓣
Links
  • 廖雪峰的官方网站
  • CoolShell
  • 阮一峰的网络日志
  • 1byte
  • 程序员的喵
  • 椒盐豆豉
  • 胡涂说
© 2025 deppwang
由 Hexo 强力驱动
主题 - NexT.Pisces