接上一篇:解决小程序中视频因为编码格式不能播放的问题。
上一篇只说了如何修改单个视频的编码格式,下面是批量处理的方法。所有代码放在了 GitHub 上。
主函数
分三步:
- 第一步:批量修改 bucket 中所有视频编码格式,重命名新格式视频。
- 第二步:因为需要批量下载 bucket 中所有视频,所以批量删除原视频。
- 第三步:批量下载所有新格式视频。
public static void main(String[] args) { |
- 参考代码:获取空间文件列表
Draft, Edit, Proofread, Publish
接上一篇:解决小程序中视频因为编码格式不能播放的问题。
上一篇只说了如何修改单个视频的编码格式,下面是批量处理的方法。所有代码放在了 GitHub 上。
分三步:
public static void main(String[] args) { |
有时候我们需要下载别人 GitHub 仓库的某一个文件,但是不得不 clone 整个项目,此时需要一种能直接下载某一个文件的方式。
只需要更改一下 GitHub 文件 URL,就能实现单个下载功能。
最近开发一个小程序,发现 video 组件的视频不能播放。琢磨了几天,终于可以了。现把经验分享出来,希望对遇到这个问题,但一时还没有解决的小伙伴有一点帮助。
请注意:由于以下使用的七牛云测试域名自创建起 30 个自然日后系统会自动回收。所以 2019.4.20 号以后,部分 url 会失效。
首先,我们要知道,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 这个插件,他可下载视频网站当前页面正在播放的未加密的视频。
如何安装插件,请看 这。
下面是 Shiro 的用户登陆架构图,我们根据箭头来看一下流程。
UsernamePasswordToken token = new UsernamePasswordToken(username, password, true); |
我们要先通过用户名和密码,生成一个 token,token 是一个用户令牌,用于在登陆的时候,Shiro 来验证用户是否有合法的身份。
Subject subject = SecurityUtils.getSubject(); // 获取 Subject 单例对象 |
再通过 Subject 来执行登陆操作,将 token 发送给 Security Manager,让他来验证这个 token。Subject 中文翻译是主题。你可以理解为它是一个用户,是 User 的抽象概念。
先来看看 Realm,你从上图可以看出,Realm 在 Shiro 方框的外面。图片很形象,因为这一部分恰恰是需要我们自己去实现的。需要我们来设计如何验证登录用户的身份 (role),和这个用户是否具有访问某个 URL 的权限 (permission)。前者使用 AuthenticationInfo(验证) 实现,后者使用 AuthorizationInfo(授权) 实现。
Security Manager,是 Shiro 架构的核心,简单来说,它根据我们自定义的 Realm,去完成验证和授权工作
如果这部分没有看懂,建议先根据下面的 “与 SpringBoot2 集成” 部分,搭建一个 demo,在项目中直观体验一下了,再回来看。
网址:https://www.jiumodiary.com/
杜撰 slogan:找电子书,来我这里就对了
喜欢看书的小伙伴,是不是觉得买纸质书太贵且不方便,而电子书又在网上到处找不到资源呢!
那你就很需要鸠摩搜书了。他是一个搜书引擎,可以抓取到很多资源,他的宣言可以理解为:“我不生产书,我只是书的抓取工”!
资源下载后,如果你是使用 Kindle 阅读器,或者 Kindle 阅读 App,可以使用邮箱推送,不会请百度。针对没有不用 Kindle 阅读器的小伙伴,建议下载 epub 格式,使用多看阅读 App阅读,多看阅读 App 相比 Kindle 阅读 App,它的黑色纹理背景不伤眼,格式也要好看不少。
从前有个集思会,它黄了 (╥﹏╥)。
在常见业务开发中,POST 请求常常在这些地方使用:前端表单提交时、调用接口代码时和使用 Postman 测试接口时。我们下面来一一了解:
-- Illustrations by Emiliano Ponzi
作为一个家在东三旗,公司在西二旗的东三旗人来说。工作日早高峰坐地铁成了一件费心费神的事。
总的来说,分为三步。
天通苑北站是五号线的起始站,也是东三旗人生活的起点。
人流量自然不用说,常常看见高举的手机在记录这拥挤一刻。
在天通苑北坐地铁,时间很有讲究。如果你夏季每天 7 点以前,冬季 7:15 以前坐地铁,那你完全不用担心排队问题 (北京没有春秋)。畅通无阻,你会忘记地铁站需要排队的事实。当然,如果你夏季 8:15 以后,冬季 8:30 以后进站,你也会很潇洒。这样的你应该是程序猿 (媛) 吧。
如果你很不幸的在高峰时间进站,那么就安安心心的排队 15 分钟左右吧。听听歌,或者听听英语。谁说时间会浪费呢。
在起始站上车还是有个得天独厚的优势的,只要你好好排队,肯定会有座位。
高峰时期,在立水桥换乘的时候,就不要想座位了,能站个好位置就很不错了。站位也要讲技术,不要站在门口,门口是地铁最拥挤的地方,最好站座位前面,门旁座位更佳,这里下车方便。
玩玩手机,时间过得好像挺快的。
这一步很重要,关系你能赶上最后一班班车,还是到处找小蓝车。
当你听到西二旗站要到了的时候,你就应该做好下车准备了。要收好你的手机,在西二旗下车把手机挤坏的例子太多了;提前跟周围人沟通是否下车,蠕动到门口;紧紧跟着前面的人,防止下车了被挤上车 (应该不少人经历过)。
友情提示在西二旗不下车的小伙伴,要提前离开门口,因为你会被挤下去的,可能再也上不去了。
下车的时候往往我们最后一丝尊严也被挤掉了。即使这样,我们还是要文明。
早上往往是起床气最重的时候,对于晚睡的人尤其重。东三旗人应该经常看见两个嗓门异常大,面红耳赤的激烈争吵。如果是在地铁上,一个人下车了,另一个肯定说,你上来啊。
当你要爆粗的时候,忍,都是起床气害的。
比吵架的人嗓门还大的是地铁工作人员,“后面的赶快下!”、” 要关门了,不要上了!”。震耳欲聋,余音萦绕。
在西二旗上班的人都逃不掉早高峰挤地铁的命运。开车?有号吗。没有。那还是挤地铁吧。有。东三旗到西二旗开车至少得两个小时,你为啥还要住东三旗?
如果爱机车,考个证,搞个摩托车开开不错。
13 号线将拆分为 13A 线和 13B 线。到时候西二旗应该没这么挤了吧。
此文基于 Dubbo 官方文档,结合实际项目讲解几个常用的知识点,建议先根据以下官方文档学习。
http://dubbo.apache.org/zh-cn/docs/user/preface/background.html |
Dubbo 是一个 RPC 框架,关于什么是 RPC,可看知乎的这个回答:
https://www.zhihu.com/question/25536695/answer/36197244 |
RPC 是指远程过程调用,也就是说两台服务器 A,B,一个应用部署在 A 服务器上,想要调用 B 服务器上应用提供的函数 / 方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
为什么使用 Dubbo?对于我们公司项目来说,为了 业务复用(将不同的核心业务抽离成一个个单独的应用,供其他应用调用)。
了解 Dubbo 的架构,请看官方文档
把我常用的效率软件推荐一波。分别是:IDEA(集成编译环境)、ShadowsocksR(科学上网)、Wunderlist(奇妙清单) 和 Wox(Windows 效率启动器).
我认为 IDEA 是开发 Java 项目最好的集成编译环境(IDE),属于用了就回不去的软件。
点此 下载地址,下载最终版 (Ultimate)。
安装完成后,启动 IDEA,在如下界面选择 License server 输入:http://idea.iteblog.com/key.php ,如果链接失效,可参考这个网址: http://idea.lanyus.com
关于 IDEA 的常用快捷键、插件及设置,可参考这篇文章: https://depp.wang/2018/08/14/IDEA's-common-shortcuts-plugins-and-settings/
如果你还没用 Chrome 插件,那么我只能说(注意!此处有停顿 ^_^
),现在就用吧。这篇文章分享一下我常用的 6 个插件。Chrome 网上应用店 上安装插件需要梯子,需要梯子的小伙伴请看 这篇文章。针对没有梯子的小伙伴,我已将插件离线打包放在了百度网盘上: https://pan.baidu.com/s/1zvrE6GndFTHMKzP-aeQAVg 提取密码:x9i2。
安装插件的方法很简单:在浏览器搜索框中输入 chrome://extensions/
打开扩展程序页面 (或者右上角三个点 -> 更多工具 -> 扩展程序 ),选中右上角的开发者模式,将下载好的插件拖动到此页面完成安装。
点击右上角 OneTab 图标可以将你所有已经打开的标签页和合成一个,减少浏览器所占内存。也可以在网页上右键操作。我常用的使用方式是将常用的网址固定在这个页面。类似这样:
对于 Java 程序员来说,使用 IDEA 集成环境是最称手的。优点不多讲,用过的人都知道。IDEA 虽好,但为了充分利用 IDEA 的优势,我分享一下我常用快捷键、插件和设置。
本文涉及到的安装包及书籍 点这里 提取密码:jw8b
可能有的小伙伴想学习 Linux,可是还不会安装 Linux 系统;可能有的小伙伴在工作中需要你自己在 Linux 系统中上线项目。所以我简单分享一下怎么在本地虚拟机安装 CentOS_7,以及 Xshell6 怎么连接安装好的 CentOS_7。
如果你跟我一样是 Linux 小白,建议现在跟着图片动手操作一遍 ^_^
首先,你得有 Linux 环境才行,就像你想敲代码,必须你电脑得有个 Window 系统或者 MacOS 系统才行。所以你得先装一个 Linux 系统。
你需要先在本地安装 VMware,VMware 全名为 VMware Workstation,是一个虚拟机,相当于一个虚拟化的 “ 电脑 “,这样你就可以在 VMware 里安装 CentOS_7(Linux 的一种系统) 了。
在我最开始分享的百度网盘的 链接(提取密码:jw8b) 下载VMware-workstation-full-14.1.1.28517.exe,按步骤安装完成就好,需要密匙,密匙如下:
FF31K-AHZD1-H8ETZ-8WWEZ-WUUVA |
万事开头难,以下分享一下 CentOS_7 的简易安装方式,其他具体的安装示例可以参考 《鸟哥的 Linux 私房菜》第三章。打开 VMware,左上角 “文件” 中选择 “新建虚拟机”,或者使用快捷键 Ctrl+N。没有图片的步骤默认下一步。
这一周工作主要是写 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 |
$("#year").val(temp.getFullYear()); |
注意,一定顺序是 setFullYear()->setMonth()->setDate,不然时间相加会不准确。
temp.getTime(); //1515254400000, 以 Number 形式表示的时间戳 |
计算 date1 和 date2 之间的天数差值
var timesDiff = Math.abs(date1.getTime() - date2.getTime); |
但是如果要对天数进增减,那只能先将在 setDate() 中增减,因为你在获取之后增减可能出现 0-31 以外的数
关于 Date 的其他属性,可以查看 廖雪峰的 JS 教程
将 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
文件生成数据库
差不多有两个月没更新 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. |
根据错误意思显示是拒绝 “amyyanjie” 连接远程库。可能是没有正确连接或仓库不存在。我直接就 Google,发现原因可能是没有添加 SSH Key。其实还是应该先尝试通过错误提示来解决问题,首先仓库是一定存在的,那一定是连接有问题,所以就应该想到 SSH Key 出问题。
“amyyanjie” 是我安装 git 的时候新建的用户名,我已经将电脑唯一的 SSH Key 用于另一个 GitHub 账号,所以当我想添加 SSH key 到我的 GitHub 上时,就会报 SSH 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 块用来执行即使有异常也能执行的代码,常用于出现异常时关闭流,或者释放锁。finally 总会执行。
关闭流的栗子:
InputStream is = null; |
释放锁的栗子:
// java.util.concurrent.ArrayBlockingQueue.java |
[二叉查找树](https://zh.wikipedia.org/wiki/% E4% BA%8C% E5%85%83% E6%90%9C% E5% B0%8B% E6% A8% B9) 也称为排序二叉树或有序二叉树。将二叉查找树中序遍历就能得到一个有序数组。所以,有序数组转换成二叉查找树是中序遍历的逆操作。将数组中下标为中数的元素作为根节点,利用递归实现转换。以下是实现代码:
在一些面试题中,常常出现用数组实现 Stack,主要实现它的 push()/push()/pop() 方法。也可以用容器(List)和链表实现,可以看 这篇博文。以下是使用数组实现 Stack:
HashMap 是底层结构是数组 + 链表,数组是存放 Node(Entry)的数组 Entry[],链表是 Node 组成的链表,充分利用了 Node 的特性。链表的头结点存放在数组中。