<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MonkeyBrothers的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/MonkeyBrothers</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; MonkeyBrothers]]></copyright><item><title><![CDATA[关于taos数据库使用过程中突发“unable to establish connection”问题解决]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/133026458</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/133026458</guid><author>MonkeyBrothers</author><pubDate>Tue, 19 Sep 2023 14:00:34 +0800</pubDate><description><![CDATA[在github上跟官方的人反馈，得到的意见是升级taos版本和驱动版本。但是这个参考的开启是基于官网的，官网也是配置了这个参数的。]]></description><category></category></item><item><title><![CDATA[Java实现不规则软件版本号比较大小]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/130946376</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/130946376</guid><author>MonkeyBrothers</author><pubDate>Tue, 30 May 2023 13:35:32 +0800</pubDate><description><![CDATA[最近由于需要比较两个版本号，从网上寻找的例子出现了问题，因此单独写一个不规则的版本号比较方法。]]></description><category></category></item><item><title><![CDATA[go 弹幕实战（Go+Gorm+WebSocket+Vue+ProtocolBuffer ）高并发弹幕]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/126561433</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/126561433</guid><author>MonkeyBrothers</author><pubDate>Sat, 27 Aug 2022 19:30:18 +0800</pubDate><description><![CDATA[之前为了学习netty开源了一个java版本的并发弹幕已经在线上运行许久了，也收获了一部分start和一部分的优化建议。由于近期学了go语言就想着把之前的弹幕系统用go语言实现一波，顺便学习下go相关的技术栈。目前go使用了websocket、protobuf、gorm、redis等技术已经实现了和java版本相同的效果，感兴趣可以访问项目地址或者线上地址(目前有些id是固定的，后续会慢慢修改)。......]]></description><category></category></item><item><title><![CDATA[JarFile实例多 Finalizer占用内存过大 引起的YGC时间过长 的问题排查和解决办法]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/126054984</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/126054984</guid><author>MonkeyBrothers</author><pubDate>Fri, 29 Jul 2022 14:27:59 +0800</pubDate><description><![CDATA[JarFile实例多 Finalizer占用内存过大 引起的YGC时间过长 的问题排查和解决办法]]></description><category></category></item><item><title><![CDATA[线上java程序CPU使用过高，通过Shell脚本排查问题]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/125430814</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/125430814</guid><author>MonkeyBrothers</author><pubDate>Thu, 23 Jun 2022 17:10:43 +0800</pubDate><description><![CDATA[线上java程序CPU使用过高，通过Shell脚本排查问题]]></description><category></category></item><item><title><![CDATA[Netty弹幕实战，Vue前后端分离]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/124549748</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/124549748</guid><author>MonkeyBrothers</author><pubDate>Tue, 03 May 2022 01:04:00 +0800</pubDate><description><![CDATA[SpringBoot+Netty+WebSocket+Vue+ProtocolBuffer 前后端分离 高并发弹幕]]></description><category></category></item><item><title><![CDATA[关于Java8当中List转Map报错“Duplicate key”的原因以及解决办法]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/124308522</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/124308522</guid><author>MonkeyBrothers</author><pubDate>Wed, 20 Apr 2022 21:58:10 +0800</pubDate><description><![CDATA[    其实Java8的lamdba表达式了解的不是很透彻，在工作中也只是使用最多的就是 for循环遍历、list转map、map转list、分组等功能。需要什么就从网上百度查找，然后按照样子在自己代码中修改下。其中的细节并没有留意过，就在今天我不小心就掉进了坑里。
    悲剧发生在今天早上，领导过来问我为什么业务上的数据有的时候会丢失，并让我排查下原因。我起初还怀疑是不是公司另外一端的接口有问题，于是就去问了下有没有上线之类的操作。得到的结果是：没有！
    那我就只能从自己的代码入手了，我开始本地启]]></description><category></category></item><item><title><![CDATA[通过源码分析-Netty默认起多少线程？何时启动？]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/122860753</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/122860753</guid><author>MonkeyBrothers</author><pubDate>Thu, 10 Feb 2022 15:03:53 +0800</pubDate><description><![CDATA[    如果你在简历上写了Netty，那么面试官百分之九十的可能会问你Netty默认其多少线程？在什么时候启动的问题。面试官一方面是想考验你对Netty有没有最基本的知识点掌握，一方面是想试探你有没有深入了解过Netty的源码和启动流程。
    你在编写Netty服务端的时候经常会编写下面的代码：
EventLoopGroup boss = new NioEventLoopGroup();
EventLoopGroup worker = new NioEventLoopGroup();

    这里构建]]></description><category></category></item><item><title><![CDATA[future.channel().closeFuture().sync()的语义]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/120172401</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/120172401</guid><author>MonkeyBrothers</author><pubDate>Wed, 08 Sep 2021 09:35:47 +0800</pubDate><description><![CDATA[    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料！
    在最初开始学习netty的过程中经常使用的是主函数启动netty服务端的代码，会加入"future.channel().closeFuture().sync();"这样一句话，这在我刚开始学习netty的时候还是比较费解的。
    接下来将有两个例子进行对比来感受一下添加上面那句话给程序带来的影响。我先写了一个添加了"future.channel().closeFuture().sync();"的代码示例：
p]]></description><category></category></item><item><title><![CDATA[Callable、Future和FutureTask有什么关系？]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/116189180</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/116189180</guid><author>MonkeyBrothers</author><pubDate>Tue, 27 Apr 2021 08:57:50 +0800</pubDate><description><![CDATA[    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料！
    开发业务中有很多用到线程的场景。遇到比较耗时的场景往往会起一个线程进行执行，如果不返回结果就可以直接new一个Thread对业务进行操作。因为runnable不会返回结果，也不会抛出异常，如果需要拿到返回值的话则需要使用Callable和Future或者Future Task进行结合。
    这里可以简单理解为“Callable”表示产生结果和抛出异常。而“Future”是一个接口，表示异步计算结果
    “]]></description><category></category></item><item><title><![CDATA[Netty-心跳检测的作用和实现方法]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/115390298</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/115390298</guid><author>MonkeyBrothers</author><pubDate>Fri, 02 Apr 2021 08:51:34 +0800</pubDate><description><![CDATA[    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料！
    关于心跳我们在长链接的开发中一般都是会遇到的，因为是长链接所以需要定时发送心跳保持连接的活跃。当服务端检测不到客户端的心跳之后就会释放资源，这个操作是一个很重要的操作。
    如果你处理过原生socket的心跳检测机制，你会发现那是一个比较麻烦的处理。你需要起一个线程或者定时任务来不停的检测连接是否有心跳上送，如果没有心跳你就需要释放资源，关闭socket或者尝试重连机制。
    Netty为我们提供了一个“]]></description><category></category></item><item><title><![CDATA[2021年最新java面试题和答案]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/115050506</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/115050506</guid><author>MonkeyBrothers</author><pubDate>Sun, 21 Mar 2021 18:06:37 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，后台回复“面试题PDF”领取而更多面试题和答案

什么是线程局部变量？
线程局部变量是局限于线程内部的变量，属于线程自身所有，不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量，是一种实现线程安全的方式。但是在管理环境下（如 web 服务器）使用线程局部变量的时候要特别小心，在这种情况下，工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放，Java 应用就存在内存泄露的风险。
JDK]]></description><category></category></item><item><title><![CDATA[TCP-缓冲区和粘包、拆包有什么关系？]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114833649</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114833649</guid><author>MonkeyBrothers</author><pubDate>Mon, 15 Mar 2021 15:05:09 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，领取丰富面试资料和学习资料。

    你了解TCP缓冲区吗？它和TCP传输中的粘包和拆包有什么关系呢？粘包和拆包分别发生在TCP的那个阶段呢？
    先简单回顾下TCP概念：在网络传输中TCP是面向连接的、可靠的、双通道、字节流一对一传输。TCP双方通信必须要先建立连接，然后分配必要的内核资源。双方交换完毕数据之后必须都要断开连接用来释放系统资源，长链接可以不必断开连接复用同一个通道。那么什么是TCP的缓冲区呢？
    操作系统中有两个空间：用户]]></description><category></category></item><item><title><![CDATA[netty实战----模仿bilibili开发的弹幕系统]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114685195</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114685195</guid><author>MonkeyBrothers</author><pubDate>Fri, 12 Mar 2021 09:05:46 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，领取丰富面试资料和学习资料。

    公众号回复“电子书”领取超多、超全电子书籍。
    公众号回复“分布式”领取分布式学习视频。
    我写了一个免费的图片压缩工具：“http://images.houry.top/index” 欢迎大家使用。
    我写了一个netty弹幕系统：“http://bullet-screen.houry.top:8080/index“ 后台回复“netty弹幕”获取源码
前言
系统基于springboot-2.]]></description><category></category></item><item><title><![CDATA[一个线程能否调用两次start()方法？]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114685008</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114685008</guid><author>MonkeyBrothers</author><pubDate>Fri, 12 Mar 2021 08:55:04 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，领取丰富面试资料和学习资料。
    公众号回复“电子书”领取超多、超全电子书籍。
    公众号回复“分布式”领取分布式学习视频。
    我写了一个免费的图片压缩工具：“http://images.houry.top/index” 欢迎大家使用。
    我写了一个netty弹幕系统：“http://bullet-screen.houry.top:8080/index”。
    关于线程我的笔记中有专门的一栏在进行讲解，因此关于线程的一些概念今天]]></description><category></category></item><item><title><![CDATA[电脑开启同时登录多个微信]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114316343</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114316343</guid><author>MonkeyBrothers</author><pubDate>Wed, 03 Mar 2021 15:20:37 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，有问题可以及时和我交流。

    脚本我已经上传到公众号上，后台回复“微信脚本”即可获取，下载到脚本之后可以根据自己电脑进行配置，如果有问题可以随时添加我为好友，找到我并帮你解决问题哦。
    微信在生活中已经很流行了，许多人有两个甚至多个微信号，但是如果在电脑端登录的话一次只能登录一个微信。
    那么有什么办法可以在电脑上同时登录多个微信吗？办法当然是有的，只需要编写一个简单的脚本并运行即可！
    我们在桌面找到微信的图标，然后右键，找到]]></description><category></category></item><item><title><![CDATA[一键把jar包发布到阿里云服务器]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114238924</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114238924</guid><author>MonkeyBrothers</author><pubDate>Sun, 28 Feb 2021 20:04:57 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，有问题可以及时和我交流。

    很多时候我们发布jar包到服务端需要经过编译-&gt;打包-&gt;上传包到服务器-&gt;启动jar包等一系列的操作。虽然操作很简单，但是频繁重复换包的时候还是比较麻烦的，重复很多简单无用的动作。
    这里推荐一个IDEA的插件，叫做“alibaba cloud toolkit”的插件，能够一键发布并运行jar包等远程服务器。以后再发布项目只用点击一下就行了，是不是很方便呢？接下来就看看如何配置这个插件！
  ]]></description><category></category></item><item><title><![CDATA[生产上使用自定义线程池控制socket短连接需要注意的事项]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/114007621</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/114007621</guid><author>MonkeyBrothers</author><pubDate>Wed, 24 Feb 2021 08:48:43 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，有问题可以及时和我交流。

    对于一些平台业务对接除了http还有就是socket用的比较多了，特别软件是跟硬件设备做对接。在并发要求不是很高的时候，可以使用BIO的socket，因为它足够简单，足够方便。如果并发量很高的话，推荐使用NIO的socket，因为它能够支持较高的并发。
    如果使用的是长连接的话，那么需要注意的是长连接的心跳保持，客户端的断线重连，报文格式的定义等。
    如果可以的话，还是建议使用netty这个强大的框架，因]]></description><category></category></item><item><title><![CDATA[详解什么是 socket、套接字、“插座”！]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/113856683</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/113856683</guid><author>MonkeyBrothers</author><pubDate>Fri, 19 Feb 2021 08:46:33 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，有问题可以及时和我交流。

    你知道插座吗？你知道网络编程中的插座吗？也许你会有点迷惑，什么是插座！但是我如果说出“套接字”、“socket”这样的关键字你就会恍然大悟。
    所谓的“插座”叫做套接字又叫做socket，用来表示一个端点，可以与网络中其他的socket进行连接，然后进行数据的传输。
    我们都知道在网络上中可以通过IP地址确定唯一的一台主机，然后主机和主机之间进行通讯。但是准确来说：网络通讯中的双方并不是主机，而是主机中的]]></description><category></category></item><item><title><![CDATA[快速修改Windows系统字体样式]]></title><link>https://blog.csdn.net/MonkeyBrothers/article/details/113307061</link><guid>https://blog.csdn.net/MonkeyBrothers/article/details/113307061</guid><author>MonkeyBrothers</author><pubDate>Thu, 28 Jan 2021 08:51:17 +0800</pubDate><description><![CDATA[    欢迎大家搜索“小猴子的技术笔记”关注我的公众号，有问题可以及时和我交流。

    每天对着电脑，看同样的字体时间久了也会有审美疲劳。因此Windows为我们内置了很多很丰富的字体，那如果我们想要修改Windows的默认字体该如何修改呢？
    按照传统的修改方式要修改注册表等信息，我在这里给大家提供给一个简单又快捷的字体设置，一键点击设置你想要的Windows系统字体。
    工具下载链接在我的公众号后台回复“字体”即可获取下载连接。


    将下来的压缩包进行解压之后，找到可执行文件，双]]></description><category></category></item></channel></rss>