自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (5)
  • 收藏
  • 关注

原创 关于taos数据库使用过程中突发“unable to establish connection”问题解决

在github上跟官方的人反馈,得到的意见是升级taos版本和驱动版本。但是这个参考的开启是基于官网的,官网也是配置了这个参数的。

2023-09-19 14:00:34 912

原创 Java实现不规则软件版本号比较大小

最近由于需要比较两个版本号,从网上寻找的例子出现了问题,因此单独写一个不规则的版本号比较方法。

2023-05-30 13:35:32 466

原创 go 弹幕实战(Go+Gorm+WebSocket+Vue+ProtocolBuffer )高并发弹幕

之前为了学习netty开源了一个java版本的并发弹幕已经在线上运行许久了,也收获了一部分start和一部分的优化建议。由于近期学了go语言就想着把之前的弹幕系统用go语言实现一波,顺便学习下go相关的技术栈。目前go使用了websocket、protobuf、gorm、redis等技术已经实现了和java版本相同的效果,感兴趣可以访问项目地址或者线上地址(目前有些id是固定的,后续会慢慢修改)。......

2022-08-27 19:30:18 851 1

原创 JarFile实例多 Finalizer占用内存过大 引起的YGC时间过长 的问题排查和解决办法

JarFile实例多 Finalizer占用内存过大 引起的YGC时间过长 的问题排查和解决办法

2022-07-29 14:27:59 1929

原创 线上java程序CPU使用过高,通过Shell脚本排查问题

线上java程序CPU使用过高,通过Shell脚本排查问题

2022-06-23 17:10:43 690

原创 Netty弹幕实战,Vue前后端分离

SpringBoot+Netty+WebSocket+Vue+ProtocolBuffer 前后端分离 高并发弹幕

2022-05-03 01:04:00 476

原创 关于Java8当中List转Map报错“Duplicate key”的原因以及解决办法

    其实Java8的lamdba表达式了解的不是很透彻,在工作中也只是使用最多的就是 for循环遍历、list转map、map转list、分组等功能。需要什么就从网上百度查找,然后按照样子在自己代码中修改下。其中的细节并没有留意过,就在今天我不小心就掉进了坑里。    悲剧发生在今天早上,领导过来问我为什么业务上的数据有的时候会丢失,并让我排查下原因。我起初还怀疑是不是公司另外一端的接口有问题,于是就去问了下有没有上线之类的操作。得到的结果是:没有!    那我就只能从自己的代码入手了,我开始本地启

2022-04-20 21:58:10 21963 4

原创 通过源码分析-Netty默认起多少线程?何时启动?

    如果你在简历上写了Netty,那么面试官百分之九十的可能会问你Netty默认其多少线程?在什么时候启动的问题。面试官一方面是想考验你对Netty有没有最基本的知识点掌握,一方面是想试探你有没有深入了解过Netty的源码和启动流程。    你在编写Netty服务端的时候经常会编写下面的代码:EventLoopGroup boss = new NioEventLoopGroup();EventLoopGroup worker = new NioEventLoopGroup();    这里构建

2022-02-10 15:03:53 2314

原创 future.channel().closeFuture().sync()的语义

    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料!    在最初开始学习netty的过程中经常使用的是主函数启动netty服务端的代码,会加入"future.channel().closeFuture().sync();"这样一句话,这在我刚开始学习netty的时候还是比较费解的。    接下来将有两个例子进行对比来感受一下添加上面那句话给程序带来的影响。我先写了一个添加了"future.channel().closeFuture().sync();"的代码示例:p

2021-09-08 09:35:47 2037

原创 Callable、Future和FutureTask有什么关系?

    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料!    开发业务中有很多用到线程的场景。遇到比较耗时的场景往往会起一个线程进行执行,如果不返回结果就可以直接new一个Thread对业务进行操作。因为runnable不会返回结果,也不会抛出异常,如果需要拿到返回值的话则需要使用Callable和Future或者Future Task进行结合。    这里可以简单理解为“Callable”表示产生结果和抛出异常。而“Future”是一个接口,表示异步计算结果    “

2021-04-27 08:57:50 199

原创 Netty-心跳检测的作用和实现方法

    欢迎微信搜索并关注“小猴子的技术笔记”公众号 私信我 领取丰富的视频学习资料!    关于心跳我们在长链接的开发中一般都是会遇到的,因为是长链接所以需要定时发送心跳保持连接的活跃。当服务端检测不到客户端的心跳之后就会释放资源,这个操作是一个很重要的操作。    如果你处理过原生socket的心跳检测机制,你会发现那是一个比较麻烦的处理。你需要起一个线程或者定时任务来不停的检测连接是否有心跳上送,如果没有心跳你就需要释放资源,关闭socket或者尝试重连机制。    Netty为我们提供了一个“

2021-04-02 08:51:34 648

原创 2021年最新java面试题和答案

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,后台回复“面试题PDF”领取而更多面试题和答案什么是线程局部变量?线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java 提供 ThreadLocal 类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如 web 服务器)使用线程局部变量的时候要特别小心,在这种情况下,工作线程的生命周期比任何应用变量的生命周期都要长。任何线程局部变量一旦在工作完成后没有释放,Java 应用就存在内存泄露的风险。JDK

2021-03-21 18:06:37 1133

原创 TCP-缓冲区和粘包、拆包有什么关系?

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,领取丰富面试资料和学习资料。    你了解TCP缓冲区吗?它和TCP传输中的粘包和拆包有什么关系呢?粘包和拆包分别发生在TCP的那个阶段呢?    先简单回顾下TCP概念:在网络传输中TCP是面向连接的、可靠的、双通道、字节流一对一传输。TCP双方通信必须要先建立连接,然后分配必要的内核资源。双方交换完毕数据之后必须都要断开连接用来释放系统资源,长链接可以不必断开连接复用同一个通道。那么什么是TCP的缓冲区呢?    操作系统中有两个空间:用户

2021-03-15 15:05:09 302

原创 netty实战----模仿bilibili开发的弹幕系统

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,领取丰富面试资料和学习资料。    公众号回复“电子书”领取超多、超全电子书籍。    公众号回复“分布式”领取分布式学习视频。    我写了一个免费的图片压缩工具:“http://images.houry.top/index” 欢迎大家使用。    我写了一个netty弹幕系统:“http://bullet-screen.houry.top:8080/index“ 后台回复“netty弹幕”获取源码前言系统基于springboot-2.

2021-03-12 09:05:46 404

原创 一个线程能否调用两次start()方法?

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,领取丰富面试资料和学习资料。    公众号回复“电子书”领取超多、超全电子书籍。    公众号回复“分布式”领取分布式学习视频。    我写了一个免费的图片压缩工具:“http://images.houry.top/index” 欢迎大家使用。    我写了一个netty弹幕系统:“http://bullet-screen.houry.top:8080/index”。    关于线程我的笔记中有专门的一栏在进行讲解,因此关于线程的一些概念今天

2021-03-12 08:55:04 1493

原创 电脑开启同时登录多个微信

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    脚本我已经上传到公众号上,后台回复“微信脚本”即可获取,下载到脚本之后可以根据自己电脑进行配置,如果有问题可以随时添加我为好友,找到我并帮你解决问题哦。    微信在生活中已经很流行了,许多人有两个甚至多个微信号,但是如果在电脑端登录的话一次只能登录一个微信。    那么有什么办法可以在电脑上同时登录多个微信吗?办法当然是有的,只需要编写一个简单的脚本并运行即可!    我们在桌面找到微信的图标,然后右键,找到

2021-03-03 15:20:37 484 1

原创 一键把jar包发布到阿里云服务器

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    很多时候我们发布jar包到服务端需要经过编译->打包->上传包到服务器->启动jar包等一系列的操作。虽然操作很简单,但是频繁重复换包的时候还是比较麻烦的,重复很多简单无用的动作。    这里推荐一个IDEA的插件,叫做“alibaba cloud toolkit”的插件,能够一键发布并运行jar包等远程服务器。以后再发布项目只用点击一下就行了,是不是很方便呢?接下来就看看如何配置这个插件!  

2021-02-28 20:04:57 1996 2

原创 生产上使用自定义线程池控制socket短连接需要注意的事项

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    对于一些平台业务对接除了http还有就是socket用的比较多了,特别软件是跟硬件设备做对接。在并发要求不是很高的时候,可以使用BIO的socket,因为它足够简单,足够方便。如果并发量很高的话,推荐使用NIO的socket,因为它能够支持较高的并发。    如果使用的是长连接的话,那么需要注意的是长连接的心跳保持,客户端的断线重连,报文格式的定义等。    如果可以的话,还是建议使用netty这个强大的框架,因

2021-02-24 08:48:43 201

原创 详解什么是 socket、套接字、“插座”!

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    你知道插座吗?你知道网络编程中的插座吗?也许你会有点迷惑,什么是插座!但是我如果说出“套接字”、“socket”这样的关键字你就会恍然大悟。    所谓的“插座”叫做套接字又叫做socket,用来表示一个端点,可以与网络中其他的socket进行连接,然后进行数据的传输。    我们都知道在网络上中可以通过IP地址确定唯一的一台主机,然后主机和主机之间进行通讯。但是准确来说:网络通讯中的双方并不是主机,而是主机中的

2021-02-19 08:46:33 959

原创 快速修改Windows系统字体样式

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    每天对着电脑,看同样的字体时间久了也会有审美疲劳。因此Windows为我们内置了很多很丰富的字体,那如果我们想要修改Windows的默认字体该如何修改呢?    按照传统的修改方式要修改注册表等信息,我在这里给大家提供给一个简单又快捷的字体设置,一键点击设置你想要的Windows系统字体。    工具下载链接在我的公众号后台回复“字体”即可获取下载连接。    将下来的压缩包进行解压之后,找到可执行文件,双

2021-01-28 08:51:17 1667 1

原创 AtomicStampedReference源码分析

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    之前的文章已经介绍过CAS的操作原理,它虽然能够保证数据的原子性,但还是会有一个ABA的问题。    那么什么是ABA的问题呢?假设有一个共享变量“num”,有个线程A在第一次进行修改的时候把num的值修改成了33。修改成功之后,紧接着又立刻把“num”的修改回了22。另外一个线程B再去修改这个值的时候并不能感知到这个值被修改过。    换句话说,别人把你账户里面的钱拿出来去投资,在你发现之前又给你还了回去,那

2021-01-25 08:51:04 672 1

原创 传统session认证和JWT认证有什么区别?

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    我们知道http是无状态短连接的通信方式,也就是你请求了服务器,服务器响应给你了数据之后连接通信就断开了。这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时,用户还要再一次进行用户认证才行。    传统的session认证:因为http的无状态我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求。我们只能在服务器存储一份用户登录的信息,这份登录信息会在响应

2021-01-18 08:47:38 827

原创 JWT工具类

工具开源地址    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    之前我们已经了解到了什么是JWT以及JWT的优点,那么怎么在项目中使用到JWT呢?首先我们需要在maven的项目中引入JWT的依赖:<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.12.0&lt

2021-01-18 08:35:24 705 1

原创 详述图片base64加密的原理,告诉你什么是“/9j/“

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    在日常的生活中,我们肯定都经历过类似这样的场景:报名考试上传图片,网站要求的是上传的照片不能大于多少,而且要求是“.jpg”的格式。    于是你高高兴兴的把自己最漂亮的照片上传上去了,但是网站却提示你照片格式不正确,让你重新上传。这个时候内心不知道有多少疑惑涌上心头(其实是草泥马在奔腾)我的照片明明就是“.jpg”结尾的,而且大小也符合规范,为啥就不行呢?    我们通常的会认为(Windows电脑情况下,Ma

2021-01-11 08:39:04 5782 5

原创 详细介绍Java线程的生命周期

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    一个线程由创建到死亡会经历自己的生命周期,我们可能会经常在博客中看到线程的“Running”状态,但是通过阅读Thread类的源码你又找不到“Running”状态,那么Java线程中到底有没有Running状态?    首先通过查看“Thread”给我们提供的源码可以看到,线程的生命周期会经过如下的状态(注意,同一时刻,一个线程只能处于其中的一种状态):public enum State { // 线程

2020-12-21 08:35:03 163

原创 深入详细了解synchronized底层原理

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    在多线程之间,共享变量的值是线程不安全的,因为线程在开始运行之后都会拥有自己的工作空间,而从自己工作空间把修改的值刷新回主存的时候需要CPU的调度。因此,一个线程看到的变量可能并不是最新的。    我们假设有个Share类中存放了一个共享的变量“count”。public class Share { public int count = 10000; public void decrement()

2020-12-15 08:52:58 405 1

原创 深入了解--线程中断 “interrupt()“,“isInterrupted()“和“interrupted()”-超详细介绍

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    中断可以理解为线程的一个标识位属性,它表示一个运行中的线程是否被其他线程进行了中断。在日常开发中,经常使用中断标识来进行线程的安全终止。    Thread 给我们提供了三个有关中断的方法“interrupt()","isInterrupted()"和"interrupted()”。那么它们的具体功能到底是怎么样子的呢?下面就来一起研究下吧。    Thread类中的interrupt()不能中断在运行中的线程,

2020-12-12 11:23:53 527 1

原创 经典的面试题:DCL需不需要被volatile关键字修饰?为什么?

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    DCL(Double-Checked Locking)双重检查锁。在Java的多线程中,有时候需要采用延迟初始化来降低初始化类和创建对象的开销,使用双重检查所是常见的延迟初始化的技术。但是,要正确使用线程安全的延迟初始化需要一些技巧,否则很容易出现问题。    首先来看看下面这段代码。下面的代码是一个典型的懒加载单例模式的实现,使用了延迟加载来降低同步的开销。请你猜一猜它会不会有线程安全的问题:public cl

2020-12-12 11:14:57 267 1

原创 图文带你了解volatile底层和内存屏障之间的关系

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    为了保证内存的可见性,Java编译器会在生成指令序列的适当位置插入内存屏障指令来禁止特定类型的处理器重排序。JMM被内存屏障指令分为了4类(Load表示读,store表示写):    LoadLoad Barriers:在两个读指令之间插入一个“LoadLoad”的内存屏障,确保Load1的数据装载,先于Load2的数据装载。    StoreStore Barriers:在两个写指令之间插入一个“StoreS

2020-12-07 08:44:54 388

原创 详细解析Java内存,处理器,编译器重排序以及它对线程的影响

我们在编写程序的时候有一个编写代码的顺序,那么计算机执行的时候就是按照我们编写代码的顺序来执行的吗?答案是:不一定。如果两个代码之间没有依赖关系的话,那么编译器和处理器常常会对我们的编码指令重排序。重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段,我们编写一个Java代码从源代码到最后的执行顺序如下:源代码:也就是我们用开发工具写的代码。编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行重排序:现代处理器采用了指令级并行技术来将多

2020-12-06 15:01:09 262

原创 Java内存模型JMM详解

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    在并发编程中,线程之间如何通信以及线程之间如何同步是需要处理的两个关键问题。线程通信指的是线程A和线程B之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递,下面就来简单介绍一下这两种机制。    在共享内存并发模型中,线程之间的通信是通过共享程序的公共状态,对公共状态进行写-读内存进行隐式通信,类似于下面这样:    在消息传递的并发模型中,线程之间没有公共状态,线程之间必

2020-12-06 14:50:06 201

原创 Java线程设置了优先级,就一定生效吗?Java线程的priority源码解析

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    我们知道在构建一个线程对象的时候可以给线程设置一个优先级,就像下面这样:public class MyRunnable implements Runnable { @Override public void run() { System.out.println("设置线程的优先级"); }}public class MyRunnableTest { public

2020-12-02 17:40:19 537

原创 Java Thread构造参数源码详细介绍

    Thread类是一个构建线程的关键类,通过传递一个实现了Runnable接口的类就可以简单构造出一个线程对象,下面就来看看有关Thread类的一些基础知识点吧(本文略长请耐心阅读,相信你一定受益匪浅)。    Thread一共有8种(public修饰)构造函数和一种(default修饰)默认构造函数,分别如下所示:public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0);}public Thread(Runn

2020-11-30 22:13:55 270

原创 Java面试题

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,后台回复 “面试题” 领取海量丰富的面试资料。Java 基本概念面试题1. “a==b”和”a.equals(b)”有什么区别?    如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,但是包含的字

2020-11-29 20:18:06 513 2

原创 如何优雅地让线程休眠?Java sleep源码解析

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    在学习Java多线程的时候,经常会使用“sleep(long millis)”方法让线程休眠,其目的就是让当前线程休眠一段时间之后再继续执行后面的代码。我们来看看下面的代码:public class MyRunnable implements Runnable { @Override public void run() { long beginTime = System.curren

2020-11-28 23:12:38 2281 7

原创 什么是Java的守护线程?

    欢迎大家搜索“小猴子的技术笔记”关注我的公众号,有问题可以及时和我交流。    守护线程是一种支持性线程,主要用于后台调度以及支持性的工作。守护线程具备自动结束生命周期的特性,而非守护线程则不具备。    如果对上面的概念一知半解的话,我们先来看一个简单的例子,明白守护线程的执行情况:public class MyDaemon implements Runnable { @Override public void run() { System.out.prin

2020-11-27 22:13:53 574

原创 SpringMVC-入门---使用IntelliJ IDEA开发

在学习写springMVC入门程序之前需要了解一下springmvc,然后在学习会比较轻松。SpringMVC框架以及原理分析:http://blog.csdn.net/MonkeyBrothers/article/details/79339698点击打开链接这里演示的是IntelliJ IDEA环境下进行开发,如果没有安装请去:http://blog.csdn.net/monkeybrother...

2020-11-26 22:52:44 166

原创 Java中线程的run()方法和start()方法有什么区别?

    由于Java是支持单继承的(接口除外),所以我们普遍启动线程的方式都是实现Runnable接口并重写run()方法。先来看下面一个简单的实例:public class MyRunnable implements Runnable { @Override public void run() { try { // 睡眠3秒 TimeUnit.SECONDS.sleep(3); } catch (Interr

2020-11-26 21:35:12 762

原创 JAVA8日期工具类大全

Java8日期工具类大全目的源码目的由于SimpleDateFormat存在安全问题,java8提供了全新的API接口,所以对日常工具类进行简单整理源码public class DateUtils { public enum DateType { NORM_DATE_PATTERN("yyyy-MM-dd"), NORM_DATETIME_PATTERN("yyyy-MM-dd HH:mm:ss"), NORM_TIME_PATTERN("H

2020-10-29 17:33:58 370

原创 自己搭建阿里云FTP图片服务器的一些问题

解决阿里云图片服务器,不报错,但是文件上传失败的问题阿里云图片服务器搭建现象描述解决办法阿里云图片服务器搭建如果大家没有搭建完成自己的阿里云图片服务器请参考阿里云图片服务器搭建方法现象描述1.首先我的服务器都是正常启动的,通过FTP工具上传文件没有问题。2.在本地编写测试的代码(Windows环境)连接远程的服务器进行文件上传也是没有问题的。3.把代码打包完成之后放在我的(Windows)环境下的虚拟机中进行操作也是没有问题的。4.相同的jar包放到阿里云服务器就出现问题,代码不抛错误,但是

2020-09-21 14:32:42 264

SpringMVC5.0jar包集合

springmvc5.0最新jar包下载集合,下载之后直接解压放到项目里面就能够使用

2018-02-20

maven-3.5.2

这里的maven版本是apache-maven-3.5.2-bin版本的,也是最新版本的。

2017-12-27

Tomcat-8.0.9

Tomcat版本为8,里面有对应的文档可供大家下载,端口号好像更改过一次。配置后启动下看看。如果需要可以自行更改过来。

2017-11-04

java版坦克大战

坦克大战,java版本,该版本仅供学习参考,如果有问题,请联系我。

2017-11-03

spring-framework-4.3.7 jar包

spring-framework-4.3.7 jar包。spring-framework-4.3.7 jar包,包含了spring最常用的各种jar包。大家从这里下载之后解压即可使用。

2017-09-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除