<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Voctex]]></title><description><![CDATA[既来之则安之（github地址：https://github.com/voctex ）]]></description><link>https://blog.youkuaiyun.com/chen_xi_hao</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chen_xi_hao]]></copyright><item><title><![CDATA[有关NodeBB从低版本1.7.x升级到最新的1.16.x版本]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/115181229</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/115181229</guid><author>chen_xi_hao</author><pubDate>Wed, 24 Mar 2021 16:56:12 +0800</pubDate><description><![CDATA[有关NodeBB升级历险记
公司线上的论坛网站一直都是1.7.4版本，而且有不少地方感觉用起来不是很顺手，就想着应该给它升升级了，从1.7.4升级到最新的1.16.x版本；
注：不要直接跨版本升级到最高版本，会有数据错乱的问题；

升级实操
备份数据
在正式升级之前，理应做的一件事就是备份数据，包括MongoDB里的数据和整个NodeBB目录的数据；

MongoDB数据库数据，我是通过客户端进行备份的，略；
NodeBB目录数据备份；

tar -zcvf NodeBB.tar.gz NodeBB/

1]]></description><category></category></item><item><title><![CDATA[有关EMQX桥接的配置工作]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/111224995</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/111224995</guid><author>chen_xi_hao</author><pubDate>Tue, 15 Dec 2020 16:58:15 +0800</pubDate><description><![CDATA[前言
桥接是一种连接多个 EMQ X 或者其他 MQTT 消息中间件的方式。不同于集群，工作在桥接模式下的节点之间不会复制主题树和路由表。桥接模式所做的是：

按照规则把消息转发至桥接节点；
从桥接节点订阅主题，并在收到消息后在本节点/集群中转发该消息。

环境：
emqx1 | v4.1.2 | 192.168.5.207:2883 | 节点node
emqx2 | v3.1.1 | 192.168.5.209:2883 | 远程broker

用Docker在两个服务器上面各自跑了一个emqx的容器，暴]]></description><category></category></item><item><title><![CDATA[Springboot多模块依赖开发]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/110175794</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/110175794</guid><author>chen_xi_hao</author><pubDate>Thu, 26 Nov 2020 11:02:27 +0800</pubDate><description><![CDATA[前言
有关Spring-boot多模块依赖开发，针对使用springboot架构的java程序开发，为了解耦合，需要把各个功能模块给封装起来并区分开，进行模块化，减少重复性的工作；
多模块依赖开发
创建父项目
首先先新建一个项目，选择springboot方式创建；




创建好项目之后，然后会出现以下项目结构，因为这只是当做一个父项目，不需要有具体的实现，所以只保留红框内文件（.gitignore可忽略），其他文件删除掉；

创建子模块
删掉多余的文件之后，接下来我们新建三个子项目，也就是三个模块

分别]]></description><category></category></item><item><title><![CDATA[Docker打包镜像的两种方式]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/110049807</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/110049807</guid><author>chen_xi_hao</author><pubDate>Tue, 24 Nov 2020 10:49:55 +0800</pubDate><description><![CDATA[前言
docker image其实就是一个文件，一个可被docker运行的文件，运行会成为docker container，也就是docker容器。所以如何运行一个轻量级、效率高的容器，了解镜像很重要，下面先了解构建方式。
System：Linux(CentOS 7)
Docker Version：19.03.12

构建Image
通过Dockerfile
通过编写Dockerfile文件，Dockerfile示例如下：
FROM ubuntu:18.04
COPY . /app
RUN make /ap]]></description><category></category></item><item><title><![CDATA[MySQL高版本导出数据库，低版本导入不了的问题]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/103616006</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/103616006</guid><author>chen_xi_hao</author><pubDate>Thu, 19 Dec 2019 15:59:35 +0800</pubDate><description><![CDATA[前言
有关docker在创建mysql container的时候，初始化数据库失败的问题解决记录；
Config
 docker：19.03.5
 mysql image：5.7
 system：centos 7

Operate
正常操作
mysql在docker-compose上的配置如下
test_mysql:
    image: test_mysql:latest
    restart...]]></description><category></category></item><item><title><![CDATA[MongoDB/MySQL命令行导入导出数据库/表结构/数据/集合]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/97661214</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/97661214</guid><author>chen_xi_hao</author><pubDate>Mon, 29 Jul 2019 17:55:45 +0800</pubDate><description><![CDATA[前言
使用
导出导入数据库集合
使用export导出数据库集合到json文件
mongoexport -h localhost:27017 -u 'db_name' -p 'password' -d [db] -c [collection] -o a.json


-h 地址
-u 数据库账号名
-p 数据库账号密码
-d 数据库名
-c 数据库集合名
-o 输出文件路径及文件名

使用expor...]]></description><category></category></item><item><title><![CDATA[macOS Pillow Build]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/88058369</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/88058369</guid><author>chen_xi_hao</author><pubDate>Fri, 01 Mar 2019 14:37:54 +0800</pubDate><description><![CDATA[Mac Pillow
Environment:macOS Mojave
Version:10.14.2
Time:2019.03.01

PIL是python的一个图形库，而最新的一个版本是2009年为1.1.7更新的，虽然这么久远了，但是官方还未说明PIL项目被抛弃。而Pillow是fork PIL项目的，Pillow的作者的原意也是为了促进以及支持PIL的积极开发。
macOS 默认自带pyt...]]></description><category></category></item><item><title><![CDATA[Android各版本BLE处理方案（Update on 2021-01-05）]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/86664197</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/86664197</guid><author>chen_xi_hao</author><pubDate>Sun, 27 Jan 2019 10:54:25 +0800</pubDate><description><![CDATA[Android BLE
此文档记录Android系统中，BLE在各个Android系统版本会出现的问题以及建议的处理方案，非最优解决方案。
**Update on 2021-01-05**
29 （10.0）
1、华为和其他一部分手机在Android系统10.0的时候，如果设备广播间隔稍微长了一些，可能就会出现扫描不到设备的问题，处理的方案为改为批量回调筛选设备，该方案针对扫描特定型号设备时比较好使，如果换成其他手机，还是改回单个回调的方法较优。
```java
ScanSettings.Bu]]></description><category></category></item><item><title><![CDATA[Docker私有服务器(harbor)搭建]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/86663846</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/86663846</guid><author>chen_xi_hao</author><pubDate>Sun, 27 Jan 2019 10:16:01 +0800</pubDate><description><![CDATA[Docker的使用必须关联Docker镜像服务器，而官方的Docker Hub是用于管理公共镜像的，而对于企业来说，很多东西都是私有的，不公开的，放到Docker Hub上不安全，也就衍生除了搭建Docker私有镜像服务器的需求了。
其实，在使用了Docker之后，一旦涉及到需要搭建服务器的工作，第一个念头总是会浮现出Docker Hub上面是否有相应需求的镜像，上去一搜还真有，好像叫做regis...]]></description><category></category></item><item><title><![CDATA[Viewpager+Fragment动态处理（添加、删除）Fragment]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/82152503</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/82152503</guid><author>chen_xi_hao</author><pubDate>Tue, 28 Aug 2018 18:27:55 +0800</pubDate><description><![CDATA[问题

在进行Fragment的添加和删除时，适配器刷新之后发现并没有什么变化，这是为什么呢？



理解

FragmentPagerAdapter

适合少量的页面显示。该类每一个生成的Fragment对象都会储存在内存中，所以适合相对静态、页面少的情况，如果是页面多，且Fragment的处理相对动态（添加、删除等）时，使用FragmentStatePagerAdapter较为适合。

Fra...]]></description><category></category></item><item><title><![CDATA[AndroidX重构和映射——update2019.01.29]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81741486</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81741486</guid><author>chen_xi_hao</author><pubDate>Thu, 16 Aug 2018 14:48:14 +0800</pubDate><description><![CDATA[原文地址：https://developer.android.com/topic/libraries/support-library/refactor

AndroidX重构

未与Android操作系统捆绑在一起的API包将被重构到新的androidx命名空间中。只有包名和Maven工件名受到影响; 原来的类名，方法名和字段名不会更改。有关AndroidX重构的更多信息，请参阅博客文章。

注意...]]></description><category></category></item><item><title><![CDATA[Android 使用AndResGuard进行资源文件名混淆]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81297926</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81297926</guid><author>chen_xi_hao</author><pubDate>Tue, 31 Jul 2018 10:41:28 +0800</pubDate><description><![CDATA[前言

在Android中，apk文件其实也只是一个压缩文件而已，对它进行改后缀再解压缩，就会得到dex等文件，如图：

通过反编译，我们可以查看到对应的代码，但如果经过代码混淆的话，即使被别人反编译了apk，也只是一堆的abc的命名，可资源不同，直接解压缩apk就可以获得相应的资源文件了，毫无安全性可言，就相当未经过混淆处理的app，被人反编译了代码，直接拿着源代码改改然后重新打包就变成了别人的...]]></description><category></category></item><item><title><![CDATA[Google Play App Signing的问题以及解决方式]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81134171</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/81134171</guid><author>chen_xi_hao</author><pubDate>Fri, 20 Jul 2018 16:09:55 +0800</pubDate><description><![CDATA[Google Play App Signing是Google Play 的应用签名，在Google Play上创建项目的时候如果勾选了它，那么它就会生成一个签名文件，不管你上传到Google Play的apk是否用你的签名文件打包，最终都会被替换成Google Play App Signing里的签名文件。

平常很少接触Google套件的我，最近用上了Google maps api，调试阶段一切...]]></description><category></category></item><item><title><![CDATA[Android Studio3.0 flavorDimensions多维度理解(版本差异化打包)]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/80526049</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/80526049</guid><author>chen_xi_hao</author><pubDate>Fri, 01 Jun 2018 09:32:52 +0800</pubDate><description><![CDATA[欢迎使用Markdown编辑器写博客

本Markdown编辑器使用StackEdit修改而来，用它写博客，将会带来全新的体验哦：


Markdown和扩展Markdown简洁的语法
代码块高亮
图片链接和图片上传
LaTex数学公式
UML序列图和流程图
离线写博客
导入导出Markdown文件
丰富的快捷键






快捷键


加粗    Ctrl + B 
斜体    Ctrl + I...]]></description><category></category></item><item><title><![CDATA[java冒泡排序算法]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79642638</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79642638</guid><author>chen_xi_hao</author><pubDate>Wed, 21 Mar 2018 17:02:44 +0800</pubDate><description><![CDATA[冒泡排序

冒泡排序：两个数比较大小，较大的数下沉，较小的数冒起来。

具体排序方式（从小到大）：将最前面相邻两个数进行比较大小，把大的排到后面，然后比较第二个和第三个这相邻两个数，以此方式一轮下来，最大的那个数就会被排到最后面，这一轮总共比较了n-1次（n为数组长度），再进行第二轮，这时要比较的次数是n-2次，而第二大的那个数被排在了倒数第二位，以此下来，最终得到排序后的数组。

按照原理，我们...]]></description><category></category></item><item><title><![CDATA[IntelliJ idea 新建项目并导入netty]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79431756</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79431756</guid><author>chen_xi_hao</author><pubDate>Sat, 03 Mar 2018 17:35:02 +0800</pubDate><description><![CDATA[前言

笔者的主要技能是移动端开发，eclipse和android studio这两个工具都很熟手，android是以java为基础的，但是笔者基本不涉及java项目。最近接触了一个项目是基于netty4进行开发的，开发环境是IntelliJ idea，虽然对android studio很熟手，但是接触了idea，还是发现有点不一样的，为了多接触java项目，所以做做笔记。



流程

1、新建...]]></description><category></category></item><item><title><![CDATA[ListView或RecyclerView嵌套EditText出现复用问题的解决方式]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79163610</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79163610</guid><author>chen_xi_hao</author><pubDate>Thu, 25 Jan 2018 16:32:26 +0800</pubDate><description><![CDATA[众所周知，使用listview时，出现大量数据的时候都会采用复用的写法，而recyclerView里已经有了复用的机制了。而因为复用的关系，如果item布局当中涉及到edittext等一些控件时，就会出现因为复用而产生的数据错乱。

特别是在item设置数据的时候，如果你的edittext有加入TextWatcher事件监听，而且有在afterTextChanged对文本进行操作的话，这时候，你没]]></description><category></category></item><item><title><![CDATA[android studio GC overhead limit exceeded]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79049697</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/79049697</guid><author>chen_xi_hao</author><pubDate>Sat, 13 Jan 2018 10:10:59 +0800</pubDate><description><![CDATA[今天在执行as的打包命令的时候出现了一个问题，运行的时候正常，然而打包却出现这么个错误，有点懵。



Execution failed for task ':Xxx:transformClassesWithMultidexlistForAppRelease'.
> GC overhead limit exceeded

网上有人说在app模块下加入配置



dexOptions {]]></description><category></category></item><item><title><![CDATA[ios objc与swift的桥接文件]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/78568556</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/78568556</guid><author>chen_xi_hao</author><pubDate>Sat, 18 Nov 2017 14:35:08 +0800</pubDate><description><![CDATA[ios中，swift与objc相互要相互调用的话，这里objc可以直接调用swift中的类和函数，但是swift没办法直接调用objc中的类和函数，这时候就需要用到桥接文件，在桥接文件里import进objc中类的头文件就可以。

具体操作如下：

如我们引入了objc的框架masonry，但是你的项目是swift的，这里就需要用到一个桥接文件，新建一个文件，选择header类型。

桥接文件名字]]></description><category></category></item><item><title><![CDATA[https://maven.google.com studio3.0问题]]></title><link>https://blog.youkuaiyun.com/chen_xi_hao/article/details/78019801</link><guid>https://blog.youkuaiyun.com/chen_xi_hao/article/details/78019801</guid><author>chen_xi_hao</author><pubDate>Mon, 18 Sep 2017 15:36:44 +0800</pubDate><description><![CDATA[最近都在接触ios的开发，以至于有段时间没打开AS了，然后昨天打开更新了一下，发现居然出现了好多问题，引用的第三方包都不支持了，还让我一个一个的去掉，这是什么情况，WTF。

才发现Android Studio 3.0.0以上已经默认添加google()作为google的远程仓库了。

遇到问题的时候，我还是喜欢先去分析问题的出现，在更新之前是没有问题的，那么就是新版本的AS有问题，AS有问题，我]]></description><category></category></item></channel></rss>