<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[一往无前的博客]]></title><description><![CDATA[死磕技术，一往无前]]></description><link>https://blog.youkuaiyun.com/to10086</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; to10086]]></copyright><item><title><![CDATA[nginx+tomcat部署前端VUE项目和后端springboot项目并以https访问（二）]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/121466384</link><guid>https://blog.youkuaiyun.com/to10086/article/details/121466384</guid><author>to10086</author><pubDate>Fri, 22 Apr 2022 13:30:08 +0800</pubDate><description><![CDATA[接上一篇SpringBoot+Tomcat+Coding+Jenkins自动化构建部署（一），上篇文章完成了后端自动化构建部署，这篇文章继续完成前端VUE项目的自动化构建部署并以https的方式访问。

]]></description><category></category></item><item><title><![CDATA[SpringBoot+Tomcat+Coding+Jenkins自动化构建部署（一）]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/121425329</link><guid>https://blog.youkuaiyun.com/to10086/article/details/121425329</guid><author>to10086</author><pubDate>Fri, 19 Nov 2021 21:38:04 +0800</pubDate><description><![CDATA[网上很少见有完整的自动化构建部署过程，本篇文章记录一下自己的一个小项目自动化部署的全过程以及其中需要注意的一些小问题。
前情提要：Jenkins安装篇Jenkins安装
SpringBoot需要配置的地方

pom.xml需要内置的tomcat移除
添加&lt;packaging&gt;war&lt;/packaging&gt;

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/P]]></description><category></category></item><item><title><![CDATA[Linux环境用FFmpeg给视频加水印详细步骤]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/110665709</link><guid>https://blog.youkuaiyun.com/to10086/article/details/110665709</guid><author>to10086</author><pubDate>Fri, 04 Dec 2020 18:04:45 +0800</pubDate><description><![CDATA[FFmpeg给视频添加水印，根据官方文档的介绍可以知道FFmpeg在编译安装的时候还需要加 –enable-libfreetype、–enable-libfontconfig、
–enable-libfribidi 这几个参数，而这几个组件又需要从外面编译安装，我看很多博主直接用FFmpeg加水印，但是没有详细的组件安装过程，下面主要介绍一下这些组件包括FFmpeg的编译安装完整过程。

安装环境
centos7.6
安装freetype
从freetype官网去找一个版本下载下来
wget https:/]]></description><category></category></item><item><title><![CDATA[史上最全面的分布式微服务权限控制、会话管理的详细设计和实现]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/109573948</link><guid>https://blog.youkuaiyun.com/to10086/article/details/109573948</guid><author>to10086</author><pubDate>Tue, 01 Dec 2020 18:45:48 +0800</pubDate><description><![CDATA[传统的单体架构我们都知道直接用拦截器拦截用户请求再结合shrio、spring security等就可以做出相应的权限控制。但如果现在将服务拆分成多个微服务，又该怎么设计相应的权限架构？

]]></description><category></category></item><item><title><![CDATA[异常Exception字典]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/110246457</link><guid>https://blog.youkuaiyun.com/to10086/article/details/110246457</guid><author>to10086</author><pubDate>Sun, 29 Nov 2020 12:22:13 +0800</pubDate><description><![CDATA[下面都是平时学习中遇到的不常见的异常，后面会持续更新…
1、The org.apache.shiro.session.mgt.DelegatingSession implementation requires that the SessionKey argument returns a non-null sessionId to support the Session.getId() invocations.
解决：

...]]></description><category></category></item><item><title><![CDATA[springboot怎样构造树形结构数据并查询？]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/109730685</link><guid>https://blog.youkuaiyun.com/to10086/article/details/109730685</guid><author>to10086</author><pubDate>Mon, 16 Nov 2020 22:27:47 +0800</pubDate><description><![CDATA[因为项目需要，页面上需要树形结构的数据进行展示（类似下图这样），因此需要后端返回相应格式的数据。
不说废话，直接开干！！！
我这里用的是springboot+mybatis-puls+mysql，示例的接口是查询一级权限以及二级权限、三级权限整个权限树…
下面是导入的maven依赖
 &lt;!--数据库连接--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
            ]]></description><category></category></item><item><title><![CDATA[树的应用——哈夫曼编码（C语言版）]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/109569142</link><guid>https://blog.youkuaiyun.com/to10086/article/details/109569142</guid><author>to10086</author><pubDate>Mon, 09 Nov 2020 09:28:55 +0800</pubDate><description><![CDATA[利用哈夫曼编码进行通信可以大大提高信道的利用率，缩短信息传输的时间，降低传输成本。根据哈夫曼编码的原理，编写一个程序，在用户输入结点权值的基础上求哈夫曼编码。
从键盘输入若干字符及每个字符出现的频率，将字符出现的频率作为结点的权值，建立哈夫曼树，求出各字符的哈夫曼编码。要求：
1．输出存放哈夫曼树的数组HT的初态和终态；
2．输出每个字符的哈夫曼编码；
3．输入一个字符串，对字符串进行编码并输出；
4．（选作）输入一串以哈夫曼编码方式编码的二进制码，进行译码并输出。

运行截图如下，输入结点的个数和每个结.]]></description><category></category></item><item><title><![CDATA[java怎样实现动态数组？]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/109558103</link><guid>https://blog.youkuaiyun.com/to10086/article/details/109558103</guid><author>to10086</author><pubDate>Sun, 08 Nov 2020 13:20:21 +0800</pubDate><description><![CDATA[在学习Tomcat源码时看到很多地方都用到了动态数组的设计，而不是直接使用集合。这种方法很值得我们学习借鉴，所以在此单独拿出来学习讨论。
比如其中向容器Server增加service的方法如下（其中与本文讨论无关的代码已省略）：
private Service services[] = new Service[0];

    public void addService(Service service) {
            Service results[] = new Service[servi]]></description><category></category></item><item><title><![CDATA[深入分析理解java类加载器ClassLoader的加载机制]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108952287</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108952287</guid><author>to10086</author><pubDate>Fri, 09 Oct 2020 20:17:30 +0800</pubDate><description><![CDATA[1、什么是类加载器？

可以看到上面这个简单流程就是我们运行java代码的整个过程，首先JVM将java源文件编译成.class字节码文件，然后用类加载器将class文件载入到内存供我们使用。可以看出ClassLoader在其中扮演着非常重要的作用。
2、java中有哪些类加载器？
首先我们需要知道JVM基础自带的默认三种类加载器，分别是启动类加载器Bootstrap ClassLoader、扩展类加载器Extension ClassLoader、应用程序类加载器Application ClassLoade]]></description><category></category></item><item><title><![CDATA[浅谈Dockerfile中ENTRYPOINT和CMD的区别]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108849817</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108849817</guid><author>to10086</author><pubDate>Mon, 28 Sep 2020 16:18:14 +0800</pubDate><description><![CDATA[我们在看他们的区别的之前首先需要明白一点：

ENTRYPOINT和CMD都是用来指定容器启动时运行的命令。

再来看看什么是exec模式和shell模式：


exec模式

FROM centos:7.2
CMD ["top","-b"]


shell模式

FROM centos:7.2
CMD top -b

上面的例子也一目了然了，说得直白点，exec模式它的命令形式是双引号+数组的形式；而shell模式则是直接写出我们需要在容器中运行的命令。CMD和ENTRYPOINT都支持这两种模式。（上.]]></description><category></category></item><item><title><![CDATA[Dockerfile的CMD指令报错：no such file or directory”: unknown.]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108835809</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108835809</guid><author>to10086</author><pubDate>Sun, 27 Sep 2020 20:30:55 +0800</pubDate><description><![CDATA[docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “exec: “/bin/echo”: stat /bin/echo: no such file or directory”: unknown.
这是我的Dockerfile文件：
FROM hello-world
CMD ["/bin/echo","this is a]]></description><category></category></item><item><title><![CDATA[Java聊天室（实现群聊、私聊功能）GUI界面]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108739346</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108739346</guid><author>to10086</author><pubDate>Tue, 22 Sep 2020 19:51:05 +0800</pubDate><description><![CDATA[不说废话，先看效果，目前实现的基本功能有一对一私聊。一对多群聊。
1、先启动服务端，等待客户端连接…。

2、启动三个客户端，代表不同的用户。右上角分别选择不同的用户进行登录。


3、登录的用户可对所有用户发送消息，也可以对某个用户发送消息。

下面是具体的代码实现（采用传统的BIO实现，也可参考我另一篇博客NIO实现其中的功能）。
server端代码：
import java.io.*;
import java.net.*;
import java.util.*;

/*
server端
 */


p]]></description><category></category></item><item><title><![CDATA[同步阻塞IO和IO多路复用原理及实践]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108286560</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108286560</guid><author>to10086</author><pubDate>Wed, 02 Sep 2020 11:26:50 +0800</pubDate><description><![CDATA[在很久很久以前，我们需要从

]]></description><category></category></item><item><title><![CDATA[缓存穿透以及布隆过滤器的原理介绍及使用]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108149218</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108149218</guid><author>to10086</author><pubDate>Thu, 27 Aug 2020 16:27:24 +0800</pubDate><description><![CDATA[1、如果查询的数据在缓存中和数据库中不存在，带来的额外的IO操作和开销怎么办？

将要查询的数据的value设为null放在缓存中

2、如果用户频繁基于一个key进行请求该怎么处理？上面存了很多无用的key=null的键值对，该怎么处理？

如何从大量的、无规则、不重复的元素中快速判断某元素是否存在？
我们可以在请求Redis之前加一层filter：

首先我们需要考虑两点：

对于存储key的容器占用空间要小
可以快速查找
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先占用空间最小想.]]></description><category></category></item><item><title><![CDATA[JS上传图片文件到腾讯云对象存储COS]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/108132642</link><guid>https://blog.youkuaiyun.com/to10086/article/details/108132642</guid><author>to10086</author><pubDate>Thu, 20 Aug 2020 20:41:20 +0800</pubDate><description><![CDATA[上传图片到腾讯云主要有两个步骤：
1、鉴权
2、开始上传
需要引入两个JS文件：cos-js-sdk-v5.min.js和jquery-2.1.4.min.js，这两个文件的链接我已放在后面。
鉴权可以直接使用SecretId和SecretKey生成cos对象，但把SecretId和SecretKey暴露在前端页面这样不太安全，我们采用从服务端申请临时秘钥的方式生成cos对象。 上传成功后的图片链接也可以通过域名+自定义key拼接生成，如下。
前端页面全部代码如下：
&lt;!DOCTYPE html&gt]]></description><category></category></item><item><title><![CDATA[FFmpeg混流：将两个视频放在一个画布并以rtmp流输出]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/107446445</link><guid>https://blog.youkuaiyun.com/to10086/article/details/107446445</guid><author>to10086</author><pubDate>Sun, 19 Jul 2020 16:34:54 +0800</pubDate><description><![CDATA[1、将其中一个视频置于画布右下角（这种情况直播用的最多，这也是我用FFmpeg想要实现的效果）

命令如下：
./ffmpeg -i 飞驰人生HD国语中字.mkv -i 小丑BD中英双字.mp4 -filter_complex \
"[0:v]scale=1080:720[a];[1:v]scale=250*200[b];[a][b]overlay=(main_w-overlay_w):(main_h-overlay_h-100)" -f flv rtmp://132.232.44.239:1945/liv]]></description><category></category></item><item><title><![CDATA[360极速浏览器不能添加hls插件，怎样播放m3u8视频？]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/107366477</link><guid>https://blog.youkuaiyun.com/to10086/article/details/107366477</guid><author>to10086</author><pubDate>Wed, 15 Jul 2020 17:47:01 +0800</pubDate><description><![CDATA[谷歌和火狐浏览器都可以在扩展程序添加Native HLS Playback插件播放m3u8视频，但是360搜了一下没有类似的插件。

那怎么办呢，有个好办法就是大家可以简单粗暴直接换成Chrome浏览器，但是好多对于很多用惯了360极速浏览器的小伙伴来说这不可能!!!
360极速浏览器用的也是Chrome的内核，应该也是支持该插件的，所以这边我把Chrome中的m3u8播放插件打包了一份放在百度网盘上，大家可以下载下来
链接：https://pan.baidu.com/s/1yY_BdokI3BK_NLy3]]></description><category></category></item><item><title><![CDATA[开发基于truffle的应用时truffle init失败]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/107330401</link><guid>https://blog.youkuaiyun.com/to10086/article/details/107330401</guid><author>to10086</author><pubDate>Tue, 14 Jul 2020 09:26:12 +0800</pubDate><description><![CDATA[安装好truffle后我们需要用命令truffle init初始化一个应用，但是报错了，如下：

因为这里我用的是云服务器来开发，所以就不存在大家说的连手机热点这回事，所以这种方法无效，还有人说改hosts或替换Google的hosts文件，均试过，无效…后来我又连续用truffle init命令试了下，居然有成功了，就是这么神奇…

大家电脑上实在出不来的，我已经把初始化后的文件放在百度网盘了，大家可以去下载下来：
链接：https://pan.baidu.com/s/1KlRU3qidQkZRaAfpa]]></description><category></category></item><item><title><![CDATA[kubeadm init报错：6443、10251等端口被占用]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/107295505</link><guid>https://blog.youkuaiyun.com/to10086/article/details/107295505</guid><author>to10086</author><pubDate>Sun, 12 Jul 2020 10:15:33 +0800</pubDate><description><![CDATA[使用kubeadm init时报错，6443、10251、10252端口被占用导致不能初始化。

按照很多博主的方法使用kubeadm reset就可以解决这种问题，但是我试了很多次无果依然还是报这个错，于是只能采用最原始的方法了…既然端口被占用，那就看一下是什么服务把这个端口占用了：
看一下6443端口被占用的服务：
netstat -anp|grep 6443


可以看到是kube-apiserver这个服务占用了这个端口，然后用命令看一下这个服务运行的状态：
systemctl status kub]]></description><category></category></item><item><title><![CDATA[java类成员加载执行顺序]]></title><link>https://blog.youkuaiyun.com/to10086/article/details/107263152</link><guid>https://blog.youkuaiyun.com/to10086/article/details/107263152</guid><author>to10086</author><pubDate>Fri, 10 Jul 2020 19:24:55 +0800</pubDate><description><![CDATA[父类的静态字段——&gt;父类静态代码块——&gt;子类静态字段——&gt;子类静态代码块——&gt; 父类成员变量（非静态字段）——&gt;父类非静态代码块——&gt;父类构造器——&gt;子类成员变量——&gt;子类非静态代码块——&gt;子类构造器

...]]></description><category></category></item></channel></rss>